Skip to content

Instantly share code, notes, and snippets.

@doitian
Created January 16, 2024 05:58
Show Gist options
  • Save doitian/507e05a7f3c129f95bf483b50a710b63 to your computer and use it in GitHub Desktop.
Save doitian/507e05a7f3c129f95bf483b50a710b63 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
"use strict";
var obsidian = require("obsidian");
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function (d, b) {
extendStatics =
Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array &&
function (d, b) {
d.__proto__ = b;
}) ||
function (d, b) {
for (var p in b)
if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
};
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError(
"Class extends value " + String(b) + " is not a constructor or null",
);
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype =
b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P
? value
: new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done
? resolve(result.value)
: adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = {
label: 0,
sent: function () {
if (t[0] & 1) throw t[1];
return t[1];
},
trys: [],
ops: [],
},
f,
y,
t,
g;
return (
(g = { next: verb(0), throw: verb(1), return: verb(2) }),
typeof Symbol === "function" &&
(g[Symbol.iterator] = function () {
return this;
}),
g
);
function verb(n) {
return function (v) {
return step([n, v]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_)
try {
if (
((f = 1),
y &&
(t =
op[0] & 2
? y["return"]
: op[0]
? y["throw"] || ((t = y["return"]) && t.call(y), 0)
: y.next) &&
!(t = t.call(y, op[1])).done)
)
return t;
if (((y = 0), t)) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (
!((t = _.trys), (t = t.length > 0 && t[t.length - 1])) &&
(op[0] === 6 || op[0] === 2)
) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e];
y = 0;
} finally {
f = t = 0;
}
if (op[0] & 5) throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator,
m = s && o[s],
i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number")
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
},
};
throw new TypeError(
s ? "Object is not iterable." : "Symbol.iterator is not defined.",
);
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o),
r,
ar = [],
e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
} catch (error) {
e = { error: error };
} finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
} finally {
if (e) throw e.error;
}
}
return ar;
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2)
for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
}
var noticeTimeout = 15 * 1000;
var sourceDeckExtension = "-source";
var codeDeckExtension = "-code";
var flashcardsIcon =
'<path fill="currentColor" stroke="currentColor" d="m98.69029,0.55335l-54.30674,0a1.1128,1.14693 0 0 0 -1.1128,1.15682l0,26.36956l-42.32491,14.67282a1.1128,1.14693 0 0 0 -0.7003,1.45344c0.09593,0.30651 9.89052,30.40359 13.18097,40.38981c2.6573,8.05819 2.20642,13.55555 2.19683,13.61488a1.1128,1.14693 0 0 0 0.4221,0.98873a1.08402,1.11727 0 0 0 0.69071,0.24718a1.10321,1.13704 0 0 0 0.35495,-0.05932l51.47676,-17.79722a1.1224,1.15682 0 0 0 0.75786,-0.98873c0,-0.2373 0.58518,-5.71489 -2.16805,-14.14879c-0.62355,-1.92803 -1.48694,-4.56795 -2.47503,-7.60337l34.00766,0a1.1128,1.14693 0 0 0 1.1224,-1.14693l0,-55.99205a1.1224,1.15682 0 0 0 -1.1224,-1.15682zm-31.55182,79.09878l-49.24156,17.02601a41.33682,42.60458 0 0 0 -2.35991,-12.85355c-2.87794,-8.86895 -11.02251,-33.73563 -12.81643,-39.25277l49.35668,-17.115c1.8131,5.53691 10.00564,30.65078 12.96032,39.70759a35.96466,37.06766 0 0 1 2.1009,12.48772zm30.43902,-23.07707l-33.65272,0c-4.25935,-13.03152 -10.08238,-30.9474 -10.08238,-30.9474a1.1224,1.15682 0 0 0 -1.41978,-0.72178l-6.91665,2.39274l0,-24.44152l52.07154,0l0,53.71796z"/>';
var sourceField = "<br><br>\r\n<small>Source: {{Source}}</small>";
var codeScript =
'<link rel="stylesheet" href="_highlight.css">\r\n<script>\r\n if (typeof hljs === "undefined") {\r\n var script = document.createElement(\'script\');\r\n script.src = "_highlight.js";\r\n script.async = false;\r\n document.head.appendChild(script);\r\n }\r\n\r\n var script = document.createElement(\'script\');\r\n script.src = \'_highlightInit.js\';\r\n script.async = false;\r\n document.head.appendChild(script);\r\n document.head.removeChild(script);\r\n</script>';
var highlightjsBase64 =
"LyoKICBIaWdobGlnaHQuanMgMTAuNC4xIChlOTZiOTE1YSkKICBMaWNlbnNlOiBCU0QtMy1DbGF1c2UKICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAyMCwgSXZhbiBTYWdhbGFldgoqLwp2YXIgaGxqcz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQpewpyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcD90LmNsZWFyPXQuZGVsZXRlPXQuc2V0PSgpPT57CnRocm93IEVycm9yKCJtYXAgaXMgcmVhZC1vbmx5Iil9OnQgaW5zdGFuY2VvZiBTZXQmJih0LmFkZD10LmNsZWFyPXQuZGVsZXRlPSgpPT57CnRocm93IEVycm9yKCJzZXQgaXMgcmVhZC1vbmx5IikKfSksT2JqZWN0LmZyZWV6ZSh0KSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5mb3JFYWNoKChuPT57dmFyIHM9dFtuXQo7Im9iamVjdCIhPXR5cGVvZiBzfHxPYmplY3QuaXNGcm96ZW4ocyl8fGUocyl9KSksdH12YXIgdD1lLG49ZTt0LmRlZmF1bHQ9bgo7Y2xhc3Mgc3tjb25zdHJ1Y3RvcihlKXt2b2lkIDA9PT1lLmRhdGEmJihlLmRhdGE9e30pLHRoaXMuZGF0YT1lLmRhdGF9Cmlnbm9yZU1hdGNoKCl7dGhpcy5pZ25vcmU9ITB9fWZ1bmN0aW9uIHIoZSl7CnJldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8iL2csIiZxdW90OyIpLnJlcGxhY2UoLycvZywiJiN4Mjc7IikKfWZ1bmN0aW9uIGEoZSwuLi50KXtjb25zdCBuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IHQgaW4gZSluW3RdPWVbdF0KO3JldHVybiB0LmZvckVhY2goKGU9Pntmb3IoY29uc3QgdCBpbiBlKW5bdF09ZVt0XX0pKSxufWZ1bmN0aW9uIGkoZSl7CnJldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9dmFyIG89T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsCmVzY2FwZUhUTUw6cixpbmhlcml0OmEsbm9kZVN0cmVhbTplPT57Y29uc3QgdD1bXTtyZXR1cm4gZnVuY3Rpb24gZShuLHMpewpmb3IobGV0IHI9bi5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKTM9PT1yLm5vZGVUeXBlP3MrPXIubm9kZVZhbHVlLmxlbmd0aDoxPT09ci5ub2RlVHlwZSYmKHQucHVzaCh7CmV2ZW50OiJzdGFydCIsb2Zmc2V0OnMsbm9kZTpyfSkscz1lKHIscyksaShyKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fHQucHVzaCh7CmV2ZW50OiJzdG9wIixvZmZzZXQ6cyxub2RlOnJ9KSk7cmV0dXJuIHN9KGUsMCksdH0sbWVyZ2VTdHJlYW1zOihlLHQsbik9PnsKbGV0IHM9MCxhPSIiO2NvbnN0IG89W107ZnVuY3Rpb24gbCgpewpyZXR1cm4gZS5sZW5ndGgmJnQubGVuZ3RoP2VbMF0ub2Zmc2V0IT09dFswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8dFswXS5vZmZzZXQ/ZTp0OiJzdGFydCI9PT10WzBdLmV2ZW50P2U6dDplLmxlbmd0aD9lOnQKfWZ1bmN0aW9uIGMoZSl7CmErPSI8IitpKGUpK1tdLm1hcC5jYWxsKGUuYXR0cmlidXRlcywoZT0+IiAiK2Uubm9kZU5hbWUrJz0iJytyKGUudmFsdWUpKyciJykpLmpvaW4oIiIpKyI+Igp9ZnVuY3Rpb24gdShlKXthKz0iPC8iK2koZSkrIj4ifWZ1bmN0aW9uIGcoZSl7KCJzdGFydCI9PT1lLmV2ZW50P2M6dSkoZS5ub2RlKX0KZm9yKDtlLmxlbmd0aHx8dC5sZW5ndGg7KXtsZXQgdD1sKCkKO2lmKGErPXIobi5zdWJzdHJpbmcocyx0WzBdLm9mZnNldCkpLHM9dFswXS5vZmZzZXQsdD09PWUpe28ucmV2ZXJzZSgpLmZvckVhY2godSkKO2Rve2codC5zcGxpY2UoMCwxKVswXSksdD1sKCl9d2hpbGUodD09PWUmJnQubGVuZ3RoJiZ0WzBdLm9mZnNldD09PXMpCjtvLnJldmVyc2UoKS5mb3JFYWNoKGMpCn1lbHNlInN0YXJ0Ij09PXRbMF0uZXZlbnQ/by5wdXNoKHRbMF0ubm9kZSk6by5wb3AoKSxnKHQuc3BsaWNlKDAsMSlbMF0pfQpyZXR1cm4gYStyKG4uc3Vic3RyKHMpKX19KTtjb25zdCBsPWU9PiEhZS5raW5kO2NsYXNzIGN7Y29uc3RydWN0b3IoZSx0KXsKdGhpcy5idWZmZXI9IiIsdGhpcy5jbGFzc1ByZWZpeD10LmNsYXNzUHJlZml4LGUud2Fsayh0aGlzKX1hZGRUZXh0KGUpewp0aGlzLmJ1ZmZlcis9cihlKX1vcGVuTm9kZShlKXtpZighbChlKSlyZXR1cm47bGV0IHQ9ZS5raW5kCjtlLnN1Ymxhbmd1YWdlfHwodD1gJHt0aGlzLmNsYXNzUHJlZml4fSR7dH1gKSx0aGlzLnNwYW4odCl9Y2xvc2VOb2RlKGUpewpsKGUpJiYodGhpcy5idWZmZXIrPSI8L3NwYW4+Iil9dmFsdWUoKXtyZXR1cm4gdGhpcy5idWZmZXJ9c3BhbihlKXsKdGhpcy5idWZmZXIrPWA8c3BhbiBjbGFzcz0iJHtlfSI+YH19Y2xhc3MgdXtjb25zdHJ1Y3Rvcigpe3RoaXMucm9vdE5vZGU9ewpjaGlsZHJlbjpbXX0sdGhpcy5zdGFjaz1bdGhpcy5yb290Tm9kZV19Z2V0IHRvcCgpewpyZXR1cm4gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aC0xXX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLnJvb3ROb2RlfWFkZChlKXsKdGhpcy50b3AuY2hpbGRyZW4ucHVzaChlKX1vcGVuTm9kZShlKXtjb25zdCB0PXtraW5kOmUsY2hpbGRyZW46W119Cjt0aGlzLmFkZCh0KSx0aGlzLnN0YWNrLnB1c2godCl9Y2xvc2VOb2RlKCl7CmlmKHRoaXMuc3RhY2subGVuZ3RoPjEpcmV0dXJuIHRoaXMuc3RhY2sucG9wKCl9Y2xvc2VBbGxOb2Rlcygpewpmb3IoO3RoaXMuY2xvc2VOb2RlKCk7KTt9dG9KU09OKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucm9vdE5vZGUsbnVsbCw0KX0Kd2FsayhlKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5fd2FsayhlLHRoaXMucm9vdE5vZGUpfXN0YXRpYyBfd2FsayhlLHQpewpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZS5hZGRUZXh0KHQpOnQuY2hpbGRyZW4mJihlLm9wZW5Ob2RlKHQpLAp0LmNoaWxkcmVuLmZvckVhY2goKHQ9PnRoaXMuX3dhbGsoZSx0KSkpLGUuY2xvc2VOb2RlKHQpKSxlfXN0YXRpYyBfY29sbGFwc2UoZSl7CiJzdHJpbmciIT10eXBlb2YgZSYmZS5jaGlsZHJlbiYmKGUuY2hpbGRyZW4uZXZlcnkoKGU9PiJzdHJpbmciPT10eXBlb2YgZSkpP2UuY2hpbGRyZW49W2UuY2hpbGRyZW4uam9pbigiIildOmUuY2hpbGRyZW4uZm9yRWFjaCgoZT0+ewp1Ll9jb2xsYXBzZShlKX0pKSl9fWNsYXNzIGcgZXh0ZW5kcyB1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5vcHRpb25zPWV9CmFkZEtleXdvcmQoZSx0KXsiIiE9PWUmJih0aGlzLm9wZW5Ob2RlKHQpLHRoaXMuYWRkVGV4dChlKSx0aGlzLmNsb3NlTm9kZSgpKX0KYWRkVGV4dChlKXsiIiE9PWUmJnRoaXMuYWRkKGUpfWFkZFN1Ymxhbmd1YWdlKGUsdCl7Y29uc3Qgbj1lLnJvb3QKO24ua2luZD10LG4uc3VibGFuZ3VhZ2U9ITAsdGhpcy5hZGQobil9dG9IVE1MKCl7CnJldHVybiBuZXcgYyh0aGlzLHRoaXMub3B0aW9ucykudmFsdWUoKX1maW5hbGl6ZSgpe3JldHVybiEwfX1mdW5jdGlvbiBkKGUpewpyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/ZTplLnNvdXJjZTpudWxsfQpjb25zdCBoPSJbYS16QS1aXVxcdyoiLGY9IlthLXpBLVpfXVxcdyoiLHA9IlxcYlxcZCsoXFwuXFxkKyk/IixtPSIoLT8pKFxcYjBbeFhdW2EtZkEtRjAtOV0rfChcXGJcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShbZUVdWy0rXT9cXGQrKT8pIixiPSJcXGIoMGJbMDFdKykiLHg9ewpiZWdpbjoiXFxcXFtcXHNcXFNdIixyZWxldmFuY2U6MH0sRT17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiInIixlbmQ6IiciLAppbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOlt4XX0sdj17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLAppbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOlt4XX0sXz17CmJlZ2luOi9cYihhfGFufHRoZXxhcmV8SSdtfGlzbid0fGRvbid0fGRvZXNuJ3R8d29uJ3R8YnV0fGp1c3R8c2hvdWxkfHByZXR0eXxzaW1wbHl8ZW5vdWdofGdvbm5hfGdvaW5nfHd0Znxzb3xzdWNofHdpbGx8eW91fHlvdXJ8dGhleXxsaWtlfG1vcmUpXGIvCn0sdz0oZSx0LG49e30pPT57Y29uc3Qgcz1hKHtjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOmUsZW5kOnQsY29udGFpbnM6W119LG4pCjtyZXR1cm4gcy5jb250YWlucy5wdXNoKF8pLHMuY29udGFpbnMucHVzaCh7Y2xhc3NOYW1lOiJkb2N0YWciLApiZWdpbjoiKD86VE9ET3xGSVhNRXxOT1RFfEJVR3xPUFRJTUlaRXxIQUNLfFhYWCk6IixyZWxldmFuY2U6MH0pLHMKfSxOPXcoIi8vIiwiJCIpLHk9dygiL1xcKiIsIlxcKi8iKSxSPXcoIiMiLCIkIik7dmFyIGs9T2JqZWN0LmZyZWV6ZSh7Cl9fcHJvdG9fXzpudWxsLElERU5UX1JFOmgsVU5ERVJTQ09SRV9JREVOVF9SRTpmLE5VTUJFUl9SRTpwLENfTlVNQkVSX1JFOm0sCkJJTkFSWV9OVU1CRVJfUkU6YiwKUkVfU1RBUlRFUlNfUkU6IiF8IT18IT09fCV8JT18JnwmJnwmPXxcXCp8XFwqPXxcXCt8XFwrPXwsfC18LT18Lz18L3w6fDt8PDx8PDw9fDw9fDx8PT09fD09fD18Pj4+PXw+Pj18Pj18Pj4+fD4+fD58XFw/fFxcW3xcXHt8XFwofFxcXnxcXF49fFxcfHxcXHw9fFxcfFxcfHx+IiwKU0hFQkFORzooZT17fSk9Pntjb25zdCB0PS9eIyFbIF0qXC8vCjtyZXR1cm4gZS5iaW5hcnkmJihlLmJlZ2luPSgoLi4uZSk9PmUubWFwKChlPT5kKGUpKSkuam9pbigiIikpKHQsLy4qXGIvLGUuYmluYXJ5LC9cYi4qLykpLAphKHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOnQsZW5kOi8kLyxyZWxldmFuY2U6MCwib246YmVnaW4iOihlLHQpPT57CjAhPT1lLmluZGV4JiZ0Lmlnbm9yZU1hdGNoKCl9fSxlKX0sQkFDS1NMQVNIX0VTQ0FQRTp4LEFQT1NfU1RSSU5HX01PREU6RSwKUVVPVEVfU1RSSU5HX01PREU6dixQSFJBU0FMX1dPUkRTX01PREU6XyxDT01NRU5UOncsQ19MSU5FX0NPTU1FTlRfTU9ERTpOLApDX0JMT0NLX0NPTU1FTlRfTU9ERTp5LEhBU0hfQ09NTUVOVF9NT0RFOlIsTlVNQkVSX01PREU6e2NsYXNzTmFtZToibnVtYmVyIiwKYmVnaW46cCxyZWxldmFuY2U6MH0sQ19OVU1CRVJfTU9ERTp7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOm0scmVsZXZhbmNlOjB9LApCSU5BUllfTlVNQkVSX01PREU6e2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjpiLHJlbGV2YW5jZTowfSxDU1NfTlVNQkVSX01PREU6ewpjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOnArIiglfGVtfGV4fGNofHJlbXx2d3x2aHx2bWlufHZtYXh8Y218bW18aW58cHR8cGN8cHh8ZGVnfGdyYWR8cmFkfHR1cm58c3xtc3xIenxrSHp8ZHBpfGRwY218ZHBweCk/IiwKcmVsZXZhbmNlOjB9LFJFR0VYUF9NT0RFOntiZWdpbjovKD89XC9bXi9cbl0qXC8pLyxjb250YWluczpbe2NsYXNzTmFtZToicmVnZXhwIiwKYmVnaW46L1wvLyxlbmQ6L1wvW2dpbXV5XSovLGlsbGVnYWw6L1xuLyxjb250YWluczpbeCx7YmVnaW46L1xbLyxlbmQ6L1xdLywKcmVsZXZhbmNlOjAsY29udGFpbnM6W3hdfV19XX0sVElUTEVfTU9ERTp7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46aCxyZWxldmFuY2U6MAp9LFVOREVSU0NPUkVfVElUTEVfTU9ERTp7Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46ZixyZWxldmFuY2U6MH0sTUVUSE9EX0dVQVJEOnsKYmVnaW46IlxcLlxccypbYS16QS1aX11cXHcqIixyZWxldmFuY2U6MH0sRU5EX1NBTUVfQVNfQkVHSU46ZT0+T2JqZWN0LmFzc2lnbihlLHsKIm9uOmJlZ2luIjooZSx0KT0+e3QuZGF0YS5fYmVnaW5NYXRjaD1lWzFdfSwib246ZW5kIjooZSx0KT0+ewp0LmRhdGEuX2JlZ2luTWF0Y2ghPT1lWzFdJiZ0Lmlnbm9yZU1hdGNoKCl9fSl9KQo7Y29uc3QgTT1bIm9mIiwiYW5kIiwiZm9yIiwiaW4iLCJub3QiLCJvciIsImlmIiwidGhlbiIsInBhcmVudCIsImxpc3QiLCJ2YWx1ZSJdCjtmdW5jdGlvbiBPKGUpe2Z1bmN0aW9uIHQodCxuKXsKcmV0dXJuIFJlZ0V4cChkKHQpLCJtIisoZS5jYXNlX2luc2Vuc2l0aXZlPyJpIjoiIikrKG4/ImciOiIiKSl9Y2xhc3MgbnsKY29uc3RydWN0b3IoKXsKdGhpcy5tYXRjaEluZGV4ZXM9e30sdGhpcy5yZWdleGVzPVtdLHRoaXMubWF0Y2hBdD0xLHRoaXMucG9zaXRpb249MH0KYWRkUnVsZShlLHQpewp0LnBvc2l0aW9uPXRoaXMucG9zaXRpb24rKyx0aGlzLm1hdGNoSW5kZXhlc1t0aGlzLm1hdGNoQXRdPXQsdGhpcy5yZWdleGVzLnB1c2goW3QsZV0pLAp0aGlzLm1hdGNoQXQrPShlPT5SZWdFeHAoZS50b1N0cmluZygpKyJ8IikuZXhlYygiIikubGVuZ3RoLTEpKGUpKzF9Y29tcGlsZSgpewowPT09dGhpcy5yZWdleGVzLmxlbmd0aCYmKHRoaXMuZXhlYz0oKT0+bnVsbCkKO2NvbnN0IGU9dGhpcy5yZWdleGVzLm1hcCgoZT0+ZVsxXSkpO3RoaXMubWF0Y2hlclJlPXQoKChlLHQ9InwiKT0+ewpjb25zdCBuPS9cWyg/OlteXFxcXV18XFwuKSpcXXxcKFw/P3xcXChbMS05XVswLTldKil8XFwuLztsZXQgcz0wLHI9IiIKO2ZvcihsZXQgYT0wO2E8ZS5sZW5ndGg7YSsrKXtzKz0xO2NvbnN0IGk9cztsZXQgbz1kKGVbYV0pCjtmb3IoYT4wJiYocis9dCkscis9IigiO28ubGVuZ3RoPjA7KXtjb25zdCBlPW4uZXhlYyhvKTtpZihudWxsPT1lKXtyKz1vO2JyZWFrfQpyKz1vLnN1YnN0cmluZygwLGUuaW5kZXgpLApvPW8uc3Vic3RyaW5nKGUuaW5kZXgrZVswXS5sZW5ndGgpLCJcXCI9PT1lWzBdWzBdJiZlWzFdP3IrPSJcXCIrKE51bWJlcihlWzFdKStpKToocis9ZVswXSwKIigiPT09ZVswXSYmcysrKX1yKz0iKSJ9cmV0dXJuIHJ9KShlKSwhMCksdGhpcy5sYXN0SW5kZXg9MH1leGVjKGUpewp0aGlzLm1hdGNoZXJSZS5sYXN0SW5kZXg9dGhpcy5sYXN0SW5kZXg7Y29uc3QgdD10aGlzLm1hdGNoZXJSZS5leGVjKGUpCjtpZighdClyZXR1cm4gbnVsbAo7Y29uc3Qgbj10LmZpbmRJbmRleCgoKGUsdCk9PnQ+MCYmdm9pZCAwIT09ZSkpLHM9dGhpcy5tYXRjaEluZGV4ZXNbbl0KO3JldHVybiB0LnNwbGljZSgwLG4pLE9iamVjdC5hc3NpZ24odCxzKX19Y2xhc3Mgc3tjb25zdHJ1Y3Rvcigpewp0aGlzLnJ1bGVzPVtdLHRoaXMubXVsdGlSZWdleGVzPVtdLAp0aGlzLmNvdW50PTAsdGhpcy5sYXN0SW5kZXg9MCx0aGlzLnJlZ2V4SW5kZXg9MH1nZXRNYXRjaGVyKGUpewppZih0aGlzLm11bHRpUmVnZXhlc1tlXSlyZXR1cm4gdGhpcy5tdWx0aVJlZ2V4ZXNbZV07Y29uc3QgdD1uZXcgbgo7cmV0dXJuIHRoaXMucnVsZXMuc2xpY2UoZSkuZm9yRWFjaCgoKFtlLG5dKT0+dC5hZGRSdWxlKGUsbikpKSwKdC5jb21waWxlKCksdGhpcy5tdWx0aVJlZ2V4ZXNbZV09dCx0fXJlc3VtaW5nU2NhbkF0U2FtZVBvc2l0aW9uKCl7CnJldHVybiAwIT09dGhpcy5yZWdleEluZGV4fWNvbnNpZGVyQWxsKCl7dGhpcy5yZWdleEluZGV4PTB9YWRkUnVsZShlLHQpewp0aGlzLnJ1bGVzLnB1c2goW2UsdF0pLCJiZWdpbiI9PT10LnR5cGUmJnRoaXMuY291bnQrK31leGVjKGUpewpjb25zdCB0PXRoaXMuZ2V0TWF0Y2hlcih0aGlzLnJlZ2V4SW5kZXgpO3QubGFzdEluZGV4PXRoaXMubGFzdEluZGV4CjtsZXQgbj10LmV4ZWMoZSkKO2lmKHRoaXMucmVzdW1pbmdTY2FuQXRTYW1lUG9zaXRpb24oKSlpZihuJiZuLmluZGV4PT09dGhpcy5sYXN0SW5kZXgpO2Vsc2V7CmNvbnN0IHQ9dGhpcy5nZXRNYXRjaGVyKDApO3QubGFzdEluZGV4PXRoaXMubGFzdEluZGV4KzEsbj10LmV4ZWMoZSl9CnJldHVybiBuJiYodGhpcy5yZWdleEluZGV4Kz1uLnBvc2l0aW9uKzEsCnRoaXMucmVnZXhJbmRleD09PXRoaXMuY291bnQmJnRoaXMuY29uc2lkZXJBbGwoKSksbn19ZnVuY3Rpb24gcihlLHQpewoiLiI9PT1lLmlucHV0W2UuaW5kZXgtMV0mJnQuaWdub3JlTWF0Y2goKX0KaWYoZS5jb250YWlucyYmZS5jb250YWlucy5pbmNsdWRlcygic2VsZiIpKXRocm93IEVycm9yKCJFUlI6IGNvbnRhaW5zIGBzZWxmYCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoZSB0b3AtbGV2ZWwgb2YgYSBsYW5ndWFnZS4gIFNlZSBkb2N1bWVudGF0aW9uLiIpCjtyZXR1cm4gZS5jbGFzc05hbWVBbGlhc2VzPWEoZS5jbGFzc05hbWVBbGlhc2VzfHx7fSksZnVuY3Rpb24gbihpLG8pe2NvbnN0IGw9aQo7aWYoaS5jb21waWxlZClyZXR1cm4gbAo7aS5jb21waWxlZD0hMCxpLl9fYmVmb3JlQmVnaW49bnVsbCxpLmtleXdvcmRzPWkua2V5d29yZHN8fGkuYmVnaW5LZXl3b3Jkcwo7bGV0IGM9bnVsbAo7aWYoIm9iamVjdCI9PXR5cGVvZiBpLmtleXdvcmRzJiYoYz1pLmtleXdvcmRzLiRwYXR0ZXJuLGRlbGV0ZSBpLmtleXdvcmRzLiRwYXR0ZXJuKSwKaS5rZXl3b3JkcyYmKGkua2V5d29yZHM9KChlLHQpPT57Y29uc3Qgbj17fQo7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP3MoImtleXdvcmQiLGUpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goKHQ9PntzKHQsZVt0XSkKfSkpLG47ZnVuY3Rpb24gcyhlLHMpe3QmJihzPXMudG9Mb3dlckNhc2UoKSkscy5zcGxpdCgiICIpLmZvckVhY2goKHQ9PnsKY29uc3Qgcz10LnNwbGl0KCJ8Iik7bltzWzBdXT1bZSxBKHNbMF0sc1sxXSldfSkpfQp9KShpLmtleXdvcmRzLGUuY2FzZV9pbnNlbnNpdGl2ZSkpLAppLmxleGVtZXMmJmMpdGhyb3cgRXJyb3IoIkVSUjogUHJlZmVyIGBrZXl3b3Jkcy4kcGF0dGVybmAgdG8gYG1vZGUubGV4ZW1lc2AsIEJPVEggYXJlIG5vdCBhbGxvd2VkLiAoc2VlIG1vZGUgcmVmZXJlbmNlKSAiKQo7cmV0dXJuIGwua2V5d29yZFBhdHRlcm5SZT10KGkubGV4ZW1lc3x8Y3x8L1x3Ky8sITApLApvJiYoaS5iZWdpbktleXdvcmRzJiYoaS5iZWdpbj0iXFxiKCIraS5iZWdpbktleXdvcmRzLnNwbGl0KCIgIikuam9pbigifCIpKyIpKD8hXFwuKSg/PVxcYnxcXHMpIiwKaS5fX2JlZm9yZUJlZ2luPXIpLAppLmJlZ2lufHwoaS5iZWdpbj0vXEJ8XGIvKSxsLmJlZ2luUmU9dChpLmJlZ2luKSxpLmVuZFNhbWVBc0JlZ2luJiYoaS5lbmQ9aS5iZWdpbiksCmkuZW5kfHxpLmVuZHNXaXRoUGFyZW50fHwoaS5lbmQ9L1xCfFxiLyksCmkuZW5kJiYobC5lbmRSZT10KGkuZW5kKSksbC50ZXJtaW5hdG9yX2VuZD1kKGkuZW5kKXx8IiIsCmkuZW5kc1dpdGhQYXJlbnQmJm8udGVybWluYXRvcl9lbmQmJihsLnRlcm1pbmF0b3JfZW5kKz0oaS5lbmQ/InwiOiIiKStvLnRlcm1pbmF0b3JfZW5kKSksCmkuaWxsZWdhbCYmKGwuaWxsZWdhbFJlPXQoaS5pbGxlZ2FsKSksCnZvaWQgMD09PWkucmVsZXZhbmNlJiYoaS5yZWxldmFuY2U9MSksaS5jb250YWluc3x8KGkuY29udGFpbnM9W10pLAppLmNvbnRhaW5zPVtdLmNvbmNhdCguLi5pLmNvbnRhaW5zLm1hcCgoZT0+KGU9PihlLnZhcmlhbnRzJiYhZS5jYWNoZWRfdmFyaWFudHMmJihlLmNhY2hlZF92YXJpYW50cz1lLnZhcmlhbnRzLm1hcCgodD0+YShlLHsKdmFyaWFudHM6bnVsbH0sdCkpKSksZS5jYWNoZWRfdmFyaWFudHM/ZS5jYWNoZWRfdmFyaWFudHM6TChlKT9hKGUsewpzdGFydHM6ZS5zdGFydHM/YShlLnN0YXJ0cyk6bnVsbAp9KTpPYmplY3QuaXNGcm96ZW4oZSk/YShlKTplKSkoInNlbGYiPT09ZT9pOmUpKSkpLGkuY29udGFpbnMuZm9yRWFjaCgoZT0+e24oZSxsKQp9KSksaS5zdGFydHMmJm4oaS5zdGFydHMsbyksbC5tYXRjaGVyPShlPT57Y29uc3QgdD1uZXcgcwo7cmV0dXJuIGUuY29udGFpbnMuZm9yRWFjaCgoZT0+dC5hZGRSdWxlKGUuYmVnaW4se3J1bGU6ZSx0eXBlOiJiZWdpbiIKfSkpKSxlLnRlcm1pbmF0b3JfZW5kJiZ0LmFkZFJ1bGUoZS50ZXJtaW5hdG9yX2VuZCx7dHlwZToiZW5kIgp9KSxlLmlsbGVnYWwmJnQuYWRkUnVsZShlLmlsbGVnYWwse3R5cGU6ImlsbGVnYWwifSksdH0pKGwpLGx9KGUpfWZ1bmN0aW9uIEwoZSl7CnJldHVybiEhZSYmKGUuZW5kc1dpdGhQYXJlbnR8fEwoZS5zdGFydHMpKX1mdW5jdGlvbiBBKGUsdCl7CnJldHVybiB0P051bWJlcih0KTooZT0+TS5pbmNsdWRlcyhlLnRvTG93ZXJDYXNlKCkpKShlKT8wOjF9ZnVuY3Rpb24gaihlKXsKY29uc3QgdD17cHJvcHM6WyJsYW5ndWFnZSIsImNvZGUiLCJhdXRvZGV0ZWN0Il0sZGF0YTooKT0+KHtkZXRlY3RlZExhbmd1YWdlOiIiLAp1bmtub3duTGFuZ3VhZ2U6ITF9KSxjb21wdXRlZDp7Y2xhc3NOYW1lKCl7CnJldHVybiB0aGlzLnVua25vd25MYW5ndWFnZT8iIjoiaGxqcyAiK3RoaXMuZGV0ZWN0ZWRMYW5ndWFnZX0saGlnaGxpZ2h0ZWQoKXsKaWYoIXRoaXMuYXV0b0RldGVjdCYmIWUuZ2V0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSkpcmV0dXJuIGNvbnNvbGUud2FybihgVGhlIGxhbmd1YWdlICIke3RoaXMubGFuZ3VhZ2V9IiB5b3Ugc3BlY2lmaWVkIGNvdWxkIG5vdCBiZSBmb3VuZC5gKSwKdGhpcy51bmtub3duTGFuZ3VhZ2U9ITAscih0aGlzLmNvZGUpO2xldCB0CjtyZXR1cm4gdGhpcy5hdXRvRGV0ZWN0Pyh0PWUuaGlnaGxpZ2h0QXV0byh0aGlzLmNvZGUpLAp0aGlzLmRldGVjdGVkTGFuZ3VhZ2U9dC5sYW5ndWFnZSk6KHQ9ZS5oaWdobGlnaHQodGhpcy5sYW5ndWFnZSx0aGlzLmNvZGUsdGhpcy5pZ25vcmVJbGxlZ2FscyksCnRoaXMuZGV0ZWN0ZWRMYW5ndWFnZT10aGlzLmxhbmd1YWdlKSx0LnZhbHVlfSxhdXRvRGV0ZWN0KCl7CnJldHVybiEodGhpcy5sYW5ndWFnZSYmKGU9dGhpcy5hdXRvZGV0ZWN0LCFlJiYiIiE9PWUpKTt2YXIgZX0sCmlnbm9yZUlsbGVnYWxzOigpPT4hMH0scmVuZGVyKGUpe3JldHVybiBlKCJwcmUiLHt9LFtlKCJjb2RlIix7CmNsYXNzOnRoaXMuY2xhc3NOYW1lLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5oaWdobGlnaHRlZH19KV0pfX07cmV0dXJuewpDb21wb25lbnQ6dCxWdWVQbHVnaW46e2luc3RhbGwoZSl7ZS5jb21wb25lbnQoImhpZ2hsaWdodGpzIix0KX19fX0KY29uc3QgST1yLFM9YSx7bm9kZVN0cmVhbTpULG1lcmdlU3RyZWFtczpCfT1vLFA9U3ltYm9sKCJub21hdGNoIik7cmV0dXJuKGU9PnsKY29uc3Qgbj1bXSxyPU9iamVjdC5jcmVhdGUobnVsbCksYT1PYmplY3QuY3JlYXRlKG51bGwpLGk9W107bGV0IG89ITAKO2NvbnN0IGw9LyheKDxbXj5dKz58XHR8KSt8XG4pL2dtLGM9IkNvdWxkIG5vdCBmaW5kIHRoZSBsYW5ndWFnZSAne30nLCBkaWQgeW91IGZvcmdldCB0byBsb2FkL2luY2x1ZGUgYSBsYW5ndWFnZSBtb2R1bGU/Iix1PXsKZGlzYWJsZUF1dG9kZXRlY3Q6ITAsbmFtZToiUGxhaW4gdGV4dCIsY29udGFpbnM6W119O2xldCBkPXsKbm9IaWdobGlnaHRSZTovXihuby0/aGlnaGxpZ2h0KSQvaSwKbGFuZ3VhZ2VEZXRlY3RSZTovXGJsYW5nKD86dWFnZSk/LShbXHctXSspXGIvaSxjbGFzc1ByZWZpeDoiaGxqcy0iLAp0YWJSZXBsYWNlOm51bGwsdXNlQlI6ITEsbGFuZ3VhZ2VzOm51bGwsX19lbWl0dGVyOmd9O2Z1bmN0aW9uIGgoZSl7CnJldHVybiBkLm5vSGlnaGxpZ2h0UmUudGVzdChlKX1mdW5jdGlvbiBmKGUsdCxuLHMpe2NvbnN0IHI9e2NvZGU6dCxsYW5ndWFnZTplfQo7TigiYmVmb3JlOmhpZ2hsaWdodCIscik7Y29uc3QgYT1yLnJlc3VsdD9yLnJlc3VsdDpwKHIubGFuZ3VhZ2Usci5jb2RlLG4scykKO3JldHVybiBhLmNvZGU9ci5jb2RlLE4oImFmdGVyOmhpZ2hsaWdodCIsYSksYX1mdW5jdGlvbiBwKGUsdCxuLGEpe2NvbnN0IGk9dAo7ZnVuY3Rpb24gbChlLHQpe2NvbnN0IG49Xy5jYXNlX2luc2Vuc2l0aXZlP3RbMF0udG9Mb3dlckNhc2UoKTp0WzBdCjtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUua2V5d29yZHMsbikmJmUua2V5d29yZHNbbl19CmZ1bmN0aW9uIHUoKXtudWxsIT15LnN1Ykxhbmd1YWdlPygoKT0+e2lmKCIiPT09TSlyZXR1cm47bGV0IGU9bnVsbAo7aWYoInN0cmluZyI9PXR5cGVvZiB5LnN1Ykxhbmd1YWdlKXsKaWYoIXJbeS5zdWJMYW5ndWFnZV0pcmV0dXJuIHZvaWQgay5hZGRUZXh0KE0pCjtlPXAoeS5zdWJMYW5ndWFnZSxNLCEwLFJbeS5zdWJMYW5ndWFnZV0pLFJbeS5zdWJMYW5ndWFnZV09ZS50b3AKfWVsc2UgZT1tKE0seS5zdWJMYW5ndWFnZS5sZW5ndGg/eS5zdWJMYW5ndWFnZTpudWxsKQo7eS5yZWxldmFuY2U+MCYmKEwrPWUucmVsZXZhbmNlKSxrLmFkZFN1Ymxhbmd1YWdlKGUuZW1pdHRlcixlLmxhbmd1YWdlKQp9KSgpOigoKT0+e2lmKCF5LmtleXdvcmRzKXJldHVybiB2b2lkIGsuYWRkVGV4dChNKTtsZXQgZT0wCjt5LmtleXdvcmRQYXR0ZXJuUmUubGFzdEluZGV4PTA7bGV0IHQ9eS5rZXl3b3JkUGF0dGVyblJlLmV4ZWMoTSksbj0iIjtmb3IoO3Q7KXsKbis9TS5zdWJzdHJpbmcoZSx0LmluZGV4KTtjb25zdCBzPWwoeSx0KTtpZihzKXtjb25zdFtlLHJdPXMKO2suYWRkVGV4dChuKSxuPSIiLEwrPXI7Y29uc3QgYT1fLmNsYXNzTmFtZUFsaWFzZXNbZV18fGU7ay5hZGRLZXl3b3JkKHRbMF0sYSkKfWVsc2Ugbis9dFswXTtlPXkua2V5d29yZFBhdHRlcm5SZS5sYXN0SW5kZXgsdD15LmtleXdvcmRQYXR0ZXJuUmUuZXhlYyhNKX0Kbis9TS5zdWJzdHIoZSksay5hZGRUZXh0KG4pfSkoKSxNPSIifWZ1bmN0aW9uIGcoZSl7CnJldHVybiBlLmNsYXNzTmFtZSYmay5vcGVuTm9kZShfLmNsYXNzTmFtZUFsaWFzZXNbZS5jbGFzc05hbWVdfHxlLmNsYXNzTmFtZSksCnk9T2JqZWN0LmNyZWF0ZShlLHtwYXJlbnQ6e3ZhbHVlOnl9fSkseX1mdW5jdGlvbiBoKGUsdCxuKXtsZXQgcj0oKGUsdCk9PnsKY29uc3Qgbj1lJiZlLmV4ZWModCk7cmV0dXJuIG4mJjA9PT1uLmluZGV4fSkoZS5lbmRSZSxuKTtpZihyKXtpZihlWyJvbjplbmQiXSl7CmNvbnN0IG49bmV3IHMoZSk7ZVsib246ZW5kIl0odCxuKSxuLmlnbm9yZSYmKHI9ITEpfWlmKHIpewpmb3IoO2UuZW5kc1BhcmVudCYmZS5wYXJlbnQ7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9fQppZihlLmVuZHNXaXRoUGFyZW50KXJldHVybiBoKGUucGFyZW50LHQsbil9ZnVuY3Rpb24gZihlKXsKcmV0dXJuIDA9PT15Lm1hdGNoZXIucmVnZXhJbmRleD8oTSs9ZVswXSwxKTooUz0hMCwwKX1mdW5jdGlvbiBiKGUpewpjb25zdCB0PWVbMF0sbj1pLnN1YnN0cihlLmluZGV4KSxzPWgoeSxlLG4pO2lmKCFzKXJldHVybiBQO2NvbnN0IHI9eQo7ci5za2lwP00rPXQ6KHIucmV0dXJuRW5kfHxyLmV4Y2x1ZGVFbmR8fChNKz10KSx1KCksci5leGNsdWRlRW5kJiYoTT10KSk7ZG97CnkuY2xhc3NOYW1lJiZrLmNsb3NlTm9kZSgpLHkuc2tpcHx8eS5zdWJMYW5ndWFnZXx8KEwrPXkucmVsZXZhbmNlKSx5PXkucGFyZW50Cn13aGlsZSh5IT09cy5wYXJlbnQpCjtyZXR1cm4gcy5zdGFydHMmJihzLmVuZFNhbWVBc0JlZ2luJiYocy5zdGFydHMuZW5kUmU9cy5lbmRSZSksCmcocy5zdGFydHMpKSxyLnJldHVybkVuZD8wOnQubGVuZ3RofWxldCB4PXt9O2Z1bmN0aW9uIEUodCxyKXtjb25zdCBhPXImJnJbMF0KO2lmKE0rPXQsbnVsbD09YSlyZXR1cm4gdSgpLDAKO2lmKCJiZWdpbiI9PT14LnR5cGUmJiJlbmQiPT09ci50eXBlJiZ4LmluZGV4PT09ci5pbmRleCYmIiI9PT1hKXsKaWYoTSs9aS5zbGljZShyLmluZGV4LHIuaW5kZXgrMSksIW8pe2NvbnN0IHQ9RXJyb3IoIjAgd2lkdGggbWF0Y2ggcmVnZXgiKQo7dGhyb3cgdC5sYW5ndWFnZU5hbWU9ZSx0LmJhZFJ1bGU9eC5ydWxlLHR9cmV0dXJuIDF9CmlmKHg9ciwiYmVnaW4iPT09ci50eXBlKXJldHVybiBmdW5jdGlvbihlKXsKY29uc3QgdD1lWzBdLG49ZS5ydWxlLHI9bmV3IHMobiksYT1bbi5fX2JlZm9yZUJlZ2luLG5bIm9uOmJlZ2luIl1dCjtmb3IoY29uc3QgbiBvZiBhKWlmKG4mJihuKGUsciksci5pZ25vcmUpKXJldHVybiBmKHQpCjtyZXR1cm4gbiYmbi5lbmRTYW1lQXNCZWdpbiYmKG4uZW5kUmU9UmVnRXhwKHQucmVwbGFjZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpLCJtIikpLApuLnNraXA/TSs9dDoobi5leGNsdWRlQmVnaW4mJihNKz10KSwKdSgpLG4ucmV0dXJuQmVnaW58fG4uZXhjbHVkZUJlZ2lufHwoTT10KSksZyhuKSxuLnJldHVybkJlZ2luPzA6dC5sZW5ndGh9KHIpCjtpZigiaWxsZWdhbCI9PT1yLnR5cGUmJiFuKXsKY29uc3QgZT1FcnJvcignSWxsZWdhbCBsZXhlbWUgIicrYSsnIiBmb3IgbW9kZSAiJysoeS5jbGFzc05hbWV8fCI8dW5uYW1lZD4iKSsnIicpCjt0aHJvdyBlLm1vZGU9eSxlfWlmKCJlbmQiPT09ci50eXBlKXtjb25zdCBlPWIocik7aWYoZSE9PVApcmV0dXJuIGV9CmlmKCJpbGxlZ2FsIj09PXIudHlwZSYmIiI9PT1hKXJldHVybiAxCjtpZihqPjFlNSYmaj4zKnIuaW5kZXgpdGhyb3cgRXJyb3IoInBvdGVudGlhbCBpbmZpbml0ZSBsb29wLCB3YXkgbW9yZSBpdGVyYXRpb25zIHRoYW4gbWF0Y2hlcyIpCjtyZXR1cm4gTSs9YSxhLmxlbmd0aH1jb25zdCBfPXYoZSk7aWYoIV8pdGhyb3cgY29uc29sZS5lcnJvcihjLnJlcGxhY2UoInt9IixlKSksCkVycm9yKCdVbmtub3duIGxhbmd1YWdlOiAiJytlKyciJyk7Y29uc3Qgdz1PKF8pO2xldCBOPSIiLHk9YXx8dwo7Y29uc3QgUj17fSxrPW5ldyBkLl9fZW1pdHRlcihkKTsoKCk9Pntjb25zdCBlPVtdCjtmb3IobGV0IHQ9eTt0IT09Xzt0PXQucGFyZW50KXQuY2xhc3NOYW1lJiZlLnVuc2hpZnQodC5jbGFzc05hbWUpCjtlLmZvckVhY2goKGU9Pmsub3Blbk5vZGUoZSkpKX0pKCk7bGV0IE09IiIsTD0wLEE9MCxqPTAsUz0hMTt0cnl7CmZvcih5Lm1hdGNoZXIuY29uc2lkZXJBbGwoKTs7KXsKaisrLFM/Uz0hMTp5Lm1hdGNoZXIuY29uc2lkZXJBbGwoKSx5Lm1hdGNoZXIubGFzdEluZGV4PUEKO2NvbnN0IGU9eS5tYXRjaGVyLmV4ZWMoaSk7aWYoIWUpYnJlYWs7Y29uc3QgdD1FKGkuc3Vic3RyaW5nKEEsZS5pbmRleCksZSkKO0E9ZS5pbmRleCt0fXJldHVybiBFKGkuc3Vic3RyKEEpKSxrLmNsb3NlQWxsTm9kZXMoKSxrLmZpbmFsaXplKCksTj1rLnRvSFRNTCgpLHsKcmVsZXZhbmNlOkwsdmFsdWU6TixsYW5ndWFnZTplLGlsbGVnYWw6ITEsZW1pdHRlcjprLHRvcDp5fX1jYXRjaCh0KXsKaWYodC5tZXNzYWdlJiZ0Lm1lc3NhZ2UuaW5jbHVkZXMoIklsbGVnYWwiKSlyZXR1cm57aWxsZWdhbDohMCxpbGxlZ2FsQnk6ewptc2c6dC5tZXNzYWdlLGNvbnRleHQ6aS5zbGljZShBLTEwMCxBKzEwMCksbW9kZTp0Lm1vZGV9LHNvZmFyOk4scmVsZXZhbmNlOjAsCnZhbHVlOkkoaSksZW1pdHRlcjprfTtpZihvKXJldHVybntpbGxlZ2FsOiExLHJlbGV2YW5jZTowLHZhbHVlOkkoaSksZW1pdHRlcjprLApsYW5ndWFnZTplLHRvcDp5LGVycm9yUmFpc2VkOnR9O3Rocm93IHR9fWZ1bmN0aW9uIG0oZSx0KXsKdD10fHxkLmxhbmd1YWdlc3x8T2JqZWN0LmtleXMocik7Y29uc3Qgbj0oZT0+e2NvbnN0IHQ9e3JlbGV2YW5jZTowLAplbWl0dGVyOm5ldyBkLl9fZW1pdHRlcihkKSx2YWx1ZTpJKGUpLGlsbGVnYWw6ITEsdG9wOnV9CjtyZXR1cm4gdC5lbWl0dGVyLmFkZFRleHQoZSksdH0pKGUpLHM9dC5maWx0ZXIodikuZmlsdGVyKHcpLm1hcCgodD0+cCh0LGUsITEpKSkKO3MudW5zaGlmdChuKTtjb25zdCBhPXMuc29ydCgoKGUsdCk9PnsKaWYoZS5yZWxldmFuY2UhPT10LnJlbGV2YW5jZSlyZXR1cm4gdC5yZWxldmFuY2UtZS5yZWxldmFuY2UKO2lmKGUubGFuZ3VhZ2UmJnQubGFuZ3VhZ2Upe2lmKHYoZS5sYW5ndWFnZSkuc3VwZXJzZXRPZj09PXQubGFuZ3VhZ2UpcmV0dXJuIDEKO2lmKHYodC5sYW5ndWFnZSkuc3VwZXJzZXRPZj09PWUubGFuZ3VhZ2UpcmV0dXJuLTF9cmV0dXJuIDB9KSksW2ksb109YSxsPWkKO3JldHVybiBsLnNlY29uZF9iZXN0PW8sbH1mdW5jdGlvbiBiKGUpewpyZXR1cm4gZC50YWJSZXBsYWNlfHxkLnVzZUJSP2UucmVwbGFjZShsLChlPT4iXG4iPT09ZT9kLnVzZUJSPyI8YnI+IjplOmQudGFiUmVwbGFjZT9lLnJlcGxhY2UoL1x0L2csZC50YWJSZXBsYWNlKTplKSk6ZQp9ZnVuY3Rpb24geChlKXtsZXQgdD1udWxsO2NvbnN0IG49KGU9PntsZXQgdD1lLmNsYXNzTmFtZSsiICIKO3QrPWUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuY2xhc3NOYW1lOiIiO2NvbnN0IG49ZC5sYW5ndWFnZURldGVjdFJlLmV4ZWModCkKO2lmKG4pe2NvbnN0IHQ9dihuWzFdKQo7cmV0dXJuIHR8fChjb25zb2xlLndhcm4oYy5yZXBsYWNlKCJ7fSIsblsxXSkpLGNvbnNvbGUud2FybigiRmFsbGluZyBiYWNrIHRvIG5vLWhpZ2hsaWdodCBtb2RlIGZvciB0aGlzIGJsb2NrLiIsZSkpLAp0P25bMV06Im5vLWhpZ2hsaWdodCJ9cmV0dXJuIHQuc3BsaXQoL1xzKy8pLmZpbmQoKGU9PmgoZSl8fHYoZSkpKX0pKGUpCjtpZihoKG4pKXJldHVybjtOKCJiZWZvcmU6aGlnaGxpZ2h0QmxvY2siLHtibG9jazplLGxhbmd1YWdlOm4KfSksZC51c2VCUj8odD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwKdC5pbm5lckhUTUw9ZS5pbm5lckhUTUwucmVwbGFjZSgvXG4vZywiIikucmVwbGFjZSgvPGJyWyAvXSo+L2csIlxuIikpOnQ9ZQo7Y29uc3Qgcz10LnRleHRDb250ZW50LHI9bj9mKG4scywhMCk6bShzKSxpPVQodCk7aWYoaS5sZW5ndGgpewpjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuaW5uZXJIVE1MPXIudmFsdWUsci52YWx1ZT1CKGksVChlKSxzKX0Kci52YWx1ZT1iKHIudmFsdWUpLE4oImFmdGVyOmhpZ2hsaWdodEJsb2NrIix7YmxvY2s6ZSxyZXN1bHQ6cgp9KSxlLmlubmVySFRNTD1yLnZhbHVlLGUuY2xhc3NOYW1lPSgoZSx0LG4pPT57Y29uc3Qgcz10P2FbdF06bixyPVtlLnRyaW0oKV0KO3JldHVybiBlLm1hdGNoKC9cYmhsanNcYi8pfHxyLnB1c2goImhsanMiKSwKZS5pbmNsdWRlcyhzKXx8ci5wdXNoKHMpLHIuam9pbigiICIpLnRyaW0oKQp9KShlLmNsYXNzTmFtZSxuLHIubGFuZ3VhZ2UpLGUucmVzdWx0PXtsYW5ndWFnZTpyLmxhbmd1YWdlLHJlOnIucmVsZXZhbmNlLApyZWxhdmFuY2U6ci5yZWxldmFuY2V9LHIuc2Vjb25kX2Jlc3QmJihlLnNlY29uZF9iZXN0PXsKbGFuZ3VhZ2U6ci5zZWNvbmRfYmVzdC5sYW5ndWFnZSxyZTpyLnNlY29uZF9iZXN0LnJlbGV2YW5jZSwKcmVsYXZhbmNlOnIuc2Vjb25kX2Jlc3QucmVsZXZhbmNlfSl9Y29uc3QgRT0oKT0+e2lmKEUuY2FsbGVkKXJldHVybjtFLmNhbGxlZD0hMAo7Y29uc3QgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJwcmUgY29kZSIpO24uZm9yRWFjaC5jYWxsKGUseCl9CjtmdW5jdGlvbiB2KGUpe3JldHVybiBlPShlfHwiIikudG9Mb3dlckNhc2UoKSxyW2VdfHxyW2FbZV1dfQpmdW5jdGlvbiBfKGUse2xhbmd1YWdlTmFtZTp0fSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1bZV0pLGUuZm9yRWFjaCgoZT0+e2FbZV09dAp9KSl9ZnVuY3Rpb24gdyhlKXtjb25zdCB0PXYoZSk7cmV0dXJuIHQmJiF0LmRpc2FibGVBdXRvZGV0ZWN0fWZ1bmN0aW9uIE4oZSx0KXsKY29uc3Qgbj1lO2kuZm9yRWFjaCgoZT0+e2Vbbl0mJmVbbl0odCl9KSl9T2JqZWN0LmFzc2lnbihlLHtoaWdobGlnaHQ6ZiwKaGlnaGxpZ2h0QXV0bzptLApmaXhNYXJrdXA6ZT0+KGNvbnNvbGUud2FybigiZml4TWFya3VwIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBlbnRpcmVseSBpbiB2MTEuMCIpLApjb25zb2xlLndhcm4oIlBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjUzNCIpLApiKGUpKSxoaWdobGlnaHRCbG9jazp4LGNvbmZpZ3VyZTplPT57CmUudXNlQlImJihjb25zb2xlLndhcm4oIid1c2VCUicgb3B0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBlbnRpcmVseSBpbiB2MTEuMCIpLApjb25zb2xlLndhcm4oIlBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2hpZ2hsaWdodGpzL2hpZ2hsaWdodC5qcy9pc3N1ZXMvMjU1OSIpKSwKZD1TKGQsZSl9LGluaXRIaWdobGlnaHRpbmc6RSxpbml0SGlnaGxpZ2h0aW5nT25Mb2FkOigpPT57CndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixFLCExKX0scmVnaXN0ZXJMYW5ndWFnZToodCxuKT0+ewpsZXQgcz1udWxsO3RyeXtzPW4oZSl9Y2F0Y2goZSl7CmlmKGNvbnNvbGUuZXJyb3IoIkxhbmd1YWdlIGRlZmluaXRpb24gZm9yICd7fScgY291bGQgbm90IGJlIHJlZ2lzdGVyZWQuIi5yZXBsYWNlKCJ7fSIsdCkpLAohbyl0aHJvdyBlO2NvbnNvbGUuZXJyb3IoZSkscz11fQpzLm5hbWV8fChzLm5hbWU9dCksclt0XT1zLHMucmF3RGVmaW5pdGlvbj1uLmJpbmQobnVsbCxlKSwKcy5hbGlhc2VzJiZfKHMuYWxpYXNlcyx7bGFuZ3VhZ2VOYW1lOnR9KX0sbGlzdExhbmd1YWdlczooKT0+T2JqZWN0LmtleXMociksCmdldExhbmd1YWdlOnYscmVnaXN0ZXJBbGlhc2VzOl8scmVxdWlyZUxhbmd1YWdlOmU9PnsKY29uc29sZS53YXJuKCJyZXF1aXJlTGFuZ3VhZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGVudGlyZWx5IGluIHRoZSBmdXR1cmUuIiksCmNvbnNvbGUud2FybigiUGxlYXNlIHNlZSBodHRwczovL2dpdGh1Yi5jb20vaGlnaGxpZ2h0anMvaGlnaGxpZ2h0LmpzL3B1bGwvMjg0NCIpCjtjb25zdCB0PXYoZSk7aWYodClyZXR1cm4gdAo7dGhyb3cgRXJyb3IoIlRoZSAne30nIGxhbmd1YWdlIGlzIHJlcXVpcmVkLCBidXQgbm90IGxvYWRlZC4iLnJlcGxhY2UoInt9IixlKSl9LAphdXRvRGV0ZWN0aW9uOncsaW5oZXJpdDpTLGFkZFBsdWdpbjplPT57aS5wdXNoKGUpfSx2dWVQbHVnaW46aihlKS5WdWVQbHVnaW4KfSksZS5kZWJ1Z01vZGU9KCk9PntvPSExfSxlLnNhZmVNb2RlPSgpPT57bz0hMH0sZS52ZXJzaW9uU3RyaW5nPSIxMC40LjEiCjtmb3IoY29uc3QgZSBpbiBrKSJvYmplY3QiPT10eXBlb2Yga1tlXSYmdChrW2VdKTtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLGspLGUKfSkoe30pfSgpCjsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9aGxqcyk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJjIiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXsKcmV0dXJuKCguLi5lKT0+ZS5tYXAoKGU9PihlPT5lPyJzdHJpbmciPT10eXBlb2YgZT9lOmUuc291cmNlOm51bGwpKGUpKSkuam9pbigiIikpKCIoIixlLCIpPyIpCn1yZXR1cm4gdD0+e2NvbnN0IG49KHQ9Pntjb25zdCBuPXQuQ09NTUVOVCgiLy8iLCIkIix7Y29udGFpbnM6W3tiZWdpbjovXFxcbi99XQp9KSxyPSJbYS16QS1aX11cXHcqOjoiLGE9IihkZWNsdHlwZVxcKGF1dG9cXCl8IitlKHIpKyJbYS16QS1aX11cXHcqIitlKCI8W148Pl0rPiIpKyIpIixzPXsKY2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiXFxiW2EtelxcZF9dKl90XFxiIn0saT17Y2xhc3NOYW1lOiJzdHJpbmciLAp2YXJpYW50czpbe2JlZ2luOicodTg/fFV8TCk/IicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLApjb250YWluczpbdC5CQUNLU0xBU0hfRVNDQVBFXX0sewpiZWdpbjoiKHU4P3xVfEwpPycoXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxTKXwuKSIsCmVuZDoiJyIsaWxsZWdhbDoiLiJ9LHQuRU5EX1NBTUVfQVNfQkVHSU4oewpiZWdpbjovKD86dTg/fFV8TCk/UiIoW14oKVxcIF17MCwxNn0pXCgvLGVuZDovXCkoW14oKVxcIF17MCwxNn0pIi99KV19LG89ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKDBiWzAxJ10rKSJ9LHsKYmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHsKYmVnaW46IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIgp9XSxyZWxldmFuY2U6MH0sYz17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovI1xzKlthLXpdK1xiLyxlbmQ6LyQvLGtleXdvcmRzOnsKIm1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBfUHJhZ21hIGlmZGVmIGlmbmRlZiBpbmNsdWRlIgp9LGNvbnRhaW5zOlt7YmVnaW46L1xcXG4vLHJlbGV2YW5jZTowfSx0LmluaGVyaXQoaSx7Y2xhc3NOYW1lOiJtZXRhLXN0cmluZyJ9KSx7CmNsYXNzTmFtZToibWV0YS1zdHJpbmciLGJlZ2luOi88Lio/Pi8sZW5kOi8kLyxpbGxlZ2FsOiJcXG4iCn0sbix0LkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0sbD17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46ZShyKSt0LklERU5UX1JFLApyZWxldmFuY2U6MH0sZD1lKHIpK3QuSURFTlRfUkUrIlxccypcXCgiLHU9ewprZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNoYXI4X3QgY2hhcjE2X3QgY2hhcjMyX3QgY2F0Y2ggaW1wb3J0IG1vZHVsZSBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCBkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGFzbSBjYXNlIHR5cGVpZCB3Y2hhcl90IHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSBjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyBub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSBhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyBhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxIiwKYnVpbHRfaW46InN0ZCBzdHJpbmcgd3N0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtIGF1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgcGFpciBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgcHJpb3JpdHlfcXVldWUgbWFrZV9wYWlyIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgdGVybWluYXRlIGFicyBhY29zIGFzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwIGZzY2FuZiBmdXR1cmUgaXNhbG51bSBpc2FscGhhIGlzY250cmwgaXNkaWdpdCBpc2dyYXBoIGlzbG93ZXIgaXNwcmludCBpc3B1bmN0IGlzc3BhY2UgaXN1cHBlciBpc3hkaWdpdCB0b2xvd2VyIHRvdXBwZXIgbGFicyBsZGV4cCBsb2cxMCBsb2cgbWFsbG9jIHJlYWxsb2MgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtc2V0IG1vZGYgcG93IHByaW50ZiBwdXRjaGFyIHB1dHMgc2NhbmYgc2luaCBzaW4gc25wcmludGYgc3ByaW50ZiBzcXJ0IHNzY2FuZiBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjcHkgc3RyY3NwbiBzdHJsZW4gc3RybmNhdCBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBzdHJzdHIgdGFuaCB0YW4gdmZwcmludGYgdnByaW50ZiB2c3ByaW50ZiBlbmRsIGluaXRpYWxpemVyX2xpc3QgdW5pcXVlX3B0ciBfQm9vbCBjb21wbGV4IF9Db21wbGV4IGltYWdpbmFyeSBfSW1hZ2luYXJ5IiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxscHRyIE5VTEwifSxtPVtjLHMsbix0LkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG8saV0scD17CnZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHtiZWdpbjovXCgvLGVuZDovXCkvfSx7CmJlZ2luS2V5d29yZHM6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZW5kOi87L31dLGtleXdvcmRzOnUsY29udGFpbnM6bS5jb25jYXQoW3sKYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3Jkczp1LGNvbnRhaW5zOm0uY29uY2F0KFsic2VsZiJdKSxyZWxldmFuY2U6MH1dKSwKcmVsZXZhbmNlOjB9LF89e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoIithKyJbXFwqJlxcc10rKSsiK2QsCnJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6dSxpbGxlZ2FsOi9bXlx3XHNcKiY6PD5dLywKY29udGFpbnM6W3tiZWdpbjoiZGVjbHR5cGVcXChhdXRvXFwpIixrZXl3b3Jkczp1LHJlbGV2YW5jZTowfSx7YmVnaW46ZCwKcmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2xdLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sCmVuZDovXCkvLGtleXdvcmRzOnUscmVsZXZhbmNlOjAsY29udGFpbnM6W24sdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSxpLG8scyx7CmJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dSxyZWxldmFuY2U6MCwKY29udGFpbnM6WyJzZWxmIixuLHQuQ19CTE9DS19DT01NRU5UX01PREUsaSxvLHNdfV0KfSxzLG4sdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSxjXX07cmV0dXJuewphbGlhc2VzOlsiYyIsImNjIiwiaCIsImMrKyIsImgrKyIsImhwcCIsImhoIiwiaHh4IiwiY3h4Il0sa2V5d29yZHM6dSwKZGlzYWJsZUF1dG9kZXRlY3Q6ITAsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltdLmNvbmNhdChwLF8sbSxbYyx7CmJlZ2luOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxwcmlvcml0eV9xdWV1ZXxwYWlyfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsCmVuZDoiPiIsa2V5d29yZHM6dSxjb250YWluczpbInNlbGYiLHNdfSx7YmVnaW46dC5JREVOVF9SRSsiOjoiLGtleXdvcmRzOnV9LHsKY2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiZW51bSBjbGFzcyBzdHJ1Y3QgdW5pb24iLGVuZDovW3s7Ojw+PV0vLApjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImZpbmFsIGNsYXNzIHN0cnVjdCJ9LHQuVElUTEVfTU9ERV19XSksZXhwb3J0czp7CnByZXByb2Nlc3NvcjpjLHN0cmluZ3M6aSxrZXl3b3Jkczp1fX19KSh0KQo7cmV0dXJuIG4ubmFtZT0iQyIsbi5hbGlhc2VzPVsiYyIsImgiXSxufX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicGdzcWwiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gRT0+ewpjb25zdCBUPUUuQ09NTUVOVCgiLS0iLCIkIiksTj0iXFwkKFthLXpBLVpfXT98W2EtekEtWl9dW2EtekEtWl8wLTldKilcXCQiLEE9IkJJR0lOVCBJTlQ4IEJJR1NFUklBTCBTRVJJQUw4IEJJVCBWQVJZSU5HIFZBUkJJVCBCT09MRUFOIEJPT0wgQk9YIEJZVEVBIENIQVJBQ1RFUiBDSEFSIFZBUkNIQVIgQ0lEUiBDSVJDTEUgREFURSBET1VCTEUgUFJFQ0lTSU9OIEZMT0FUOCBGTE9BVCBJTkVUIElOVEVHRVIgSU5UIElOVDQgSU5URVJWQUwgSlNPTiBKU09OQiBMSU5FIExTRUd8MTAgTUFDQUREUiBNQUNBRERSOCBNT05FWSBOVU1FUklDIERFQyBERUNJTUFMIFBBVEggUE9JTlQgUE9MWUdPTiBSRUFMIEZMT0FUNCBTTUFMTElOVCBJTlQyIFNNQUxMU0VSSUFMfDEwIFNFUklBTDJ8MTAgU0VSSUFMfDEwIFNFUklBTDR8MTAgVEVYVCBUSU1FIFpPTkUgVElNRVRafDEwIFRJTUVTVEFNUCBUSU1FU1RBTVBUWnwxMCBUU1FVRVJZfDEwIFRTVkVDVE9SfDEwIFRYSURfU05BUFNIT1R8MTAgVVVJRCBYTUwgTkFUSU9OQUwgTkNIQVIgSU5UNFJBTkdFfDEwIElOVDhSQU5HRXwxMCBOVU1SQU5HRXwxMCBUU1JBTkdFfDEwIFRTVFpSQU5HRXwxMCBEQVRFUkFOR0V8MTAgQU5ZRUxFTUVOVCBBTllBUlJBWSBBTllOT05BUlJBWSBBTllFTlVNIEFOWVJBTkdFIENTVFJJTkcgSU5URVJOQUwgUkVDT1JEIFBHX0RETF9DT01NQU5EIFZPSUQgVU5LTk9XTiBPUEFRVUUgUkVGQ1VSU09SIE5BTUUgT0lEIFJFR1BST0N8MTAgUkVHUFJPQ0VEVVJFfDEwIFJFR09QRVJ8MTAgUkVHT1BFUkFUT1J8MTAgUkVHQ0xBU1N8MTAgUkVHVFlQRXwxMCBSRUdST0xFfDEwIFJFR05BTUVTUEFDRXwxMCBSRUdDT05GSUd8MTAgUkVHRElDVElPTkFSWXwxMCAiLFI9QS50cmltKCkuc3BsaXQoIiAiKS5tYXAoKEU9PkUuc3BsaXQoInwiKVswXSkpLmpvaW4oInwiKSxJPSJBUlJBWV9BR0cgQVZHIEJJVF9BTkQgQklUX09SIEJPT0xfQU5EIEJPT0xfT1IgQ09VTlQgRVZFUlkgSlNPTl9BR0cgSlNPTkJfQUdHIEpTT05fT0JKRUNUX0FHRyBKU09OQl9PQkpFQ1RfQUdHIE1BWCBNSU4gTU9ERSBTVFJJTkdfQUdHIFNVTSBYTUxBR0cgQ09SUiBDT1ZBUl9QT1AgQ09WQVJfU0FNUCBSRUdSX0FWR1ggUkVHUl9BVkdZIFJFR1JfQ09VTlQgUkVHUl9JTlRFUkNFUFQgUkVHUl9SMiBSRUdSX1NMT1BFIFJFR1JfU1hYIFJFR1JfU1hZIFJFR1JfU1lZIFNURERFViBTVERERVZfUE9QIFNURERFVl9TQU1QIFZBUklBTkNFIFZBUl9QT1AgVkFSX1NBTVAgUEVSQ0VOVElMRV9DT05UIFBFUkNFTlRJTEVfRElTQyBST1dfTlVNQkVSIFJBTksgREVOU0VfUkFOSyBQRVJDRU5UX1JBTksgQ1VNRV9ESVNUIE5USUxFIExBRyBMRUFEIEZJUlNUX1ZBTFVFIExBU1RfVkFMVUUgTlRIX1ZBTFVFIE5VTV9OT05OVUxMUyBOVU1fTlVMTFMgQUJTIENCUlQgQ0VJTCBDRUlMSU5HIERFR1JFRVMgRElWIEVYUCBGTE9PUiBMTiBMT0cgTU9EIFBJIFBPV0VSIFJBRElBTlMgUk9VTkQgU0NBTEUgU0lHTiBTUVJUIFRSVU5DIFdJRFRIX0JVQ0tFVCBSQU5ET00gU0VUU0VFRCBBQ09TIEFDT1NEIEFTSU4gQVNJTkQgQVRBTiBBVEFORCBBVEFOMiBBVEFOMkQgQ09TIENPU0QgQ09UIENPVEQgU0lOIFNJTkQgVEFOIFRBTkQgQklUX0xFTkdUSCBDSEFSX0xFTkdUSCBDSEFSQUNURVJfTEVOR1RIIExPV0VSIE9DVEVUX0xFTkdUSCBPVkVSTEFZIFBPU0lUSU9OIFNVQlNUUklORyBUUkVBVCBUUklNIFVQUEVSIEFTQ0lJIEJUUklNIENIUiBDT05DQVQgQ09OQ0FUX1dTIENPTlZFUlQgQ09OVkVSVF9GUk9NIENPTlZFUlRfVE8gREVDT0RFIEVOQ09ERSBJTklUQ0FQIExFRlQgTEVOR1RIIExQQUQgTFRSSU0gTUQ1IFBBUlNFX0lERU5UIFBHX0NMSUVOVF9FTkNPRElORyBRVU9URV9JREVOVHwxMCBRVU9URV9MSVRFUkFMfDEwIFFVT1RFX05VTExBQkxFfDEwIFJFR0VYUF9NQVRDSCBSRUdFWFBfTUFUQ0hFUyBSRUdFWFBfUkVQTEFDRSBSRUdFWFBfU1BMSVRfVE9fQVJSQVkgUkVHRVhQX1NQTElUX1RPX1RBQkxFIFJFUEVBVCBSRVBMQUNFIFJFVkVSU0UgUklHSFQgUlBBRCBSVFJJTSBTUExJVF9QQVJUIFNUUlBPUyBTVUJTVFIgVE9fQVNDSUkgVE9fSEVYIFRSQU5TTEFURSBPQ1RFVF9MRU5HVEggR0VUX0JJVCBHRVRfQllURSBTRVRfQklUIFNFVF9CWVRFIFRPX0NIQVIgVE9fREFURSBUT19OVU1CRVIgVE9fVElNRVNUQU1QIEFHRSBDTE9DS19USU1FU1RBTVB8MTAgREFURV9QQVJUIERBVEVfVFJVTkMgSVNGSU5JVEUgSlVTVElGWV9EQVlTIEpVU1RJRllfSE9VUlMgSlVTVElGWV9JTlRFUlZBTCBNQUtFX0RBVEUgTUFLRV9JTlRFUlZBTHwxMCBNQUtFX1RJTUUgTUFLRV9USU1FU1RBTVB8MTAgTUFLRV9USU1FU1RBTVBUWnwxMCBOT1cgU1RBVEVNRU5UX1RJTUVTVEFNUHwxMCBUSU1FT0ZEQVkgVFJBTlNBQ1RJT05fVElNRVNUQU1QfDEwIEVOVU1fRklSU1QgRU5VTV9MQVNUIEVOVU1fUkFOR0UgQVJFQSBDRU5URVIgRElBTUVURVIgSEVJR0hUIElTQ0xPU0VEIElTT1BFTiBOUE9JTlRTIFBDTE9TRSBQT1BFTiBSQURJVVMgV0lEVEggQk9YIEJPVU5EX0JPWCBDSVJDTEUgTElORSBMU0VHIFBBVEggUE9MWUdPTiBBQkJSRVYgQlJPQURDQVNUIEhPU1QgSE9TVE1BU0sgTUFTS0xFTiBORVRNQVNLIE5FVFdPUksgU0VUX01BU0tMRU4gVEVYVCBJTkVUX1NBTUVfRkFNSUxZIElORVRfTUVSR0UgTUFDQUREUjhfU0VUN0JJVCBBUlJBWV9UT19UU1ZFQ1RPUiBHRVRfQ1VSUkVOVF9UU19DT05GSUcgTlVNTk9ERSBQTEFJTlRPX1RTUVVFUlkgUEhSQVNFVE9fVFNRVUVSWSBXRUJTRUFSQ0hfVE9fVFNRVUVSWSBRVUVSWVRSRUUgU0VUV0VJR0hUIFNUUklQIFRPX1RTUVVFUlkgVE9fVFNWRUNUT1IgSlNPTl9UT19UU1ZFQ1RPUiBKU09OQl9UT19UU1ZFQ1RPUiBUU19ERUxFVEUgVFNfRklMVEVSIFRTX0hFQURMSU5FIFRTX1JBTksgVFNfUkFOS19DRCBUU19SRVdSSVRFIFRTUVVFUllfUEhSQVNFIFRTVkVDVE9SX1RPX0FSUkFZIFRTVkVDVE9SX1VQREFURV9UUklHR0VSIFRTVkVDVE9SX1VQREFURV9UUklHR0VSX0NPTFVNTiBYTUxDT01NRU5UIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEZPUkVTVCBYTUxQSSBYTUxST09UIFhNTEVYSVNUUyBYTUxfSVNfV0VMTF9GT1JNRUQgWE1MX0lTX1dFTExfRk9STUVEX0RPQ1VNRU5UIFhNTF9JU19XRUxMX0ZPUk1FRF9DT05URU5UIFhQQVRIIFhQQVRIX0VYSVNUUyBYTUxUQUJMRSBYTUxOQU1FU1BBQ0VTIFRBQkxFX1RPX1hNTCBUQUJMRV9UT19YTUxTQ0hFTUEgVEFCTEVfVE9fWE1MX0FORF9YTUxTQ0hFTUEgUVVFUllfVE9fWE1MIFFVRVJZX1RPX1hNTFNDSEVNQSBRVUVSWV9UT19YTUxfQU5EX1hNTFNDSEVNQSBDVVJTT1JfVE9fWE1MIENVUlNPUl9UT19YTUxTQ0hFTUEgU0NIRU1BX1RPX1hNTCBTQ0hFTUFfVE9fWE1MU0NIRU1BIFNDSEVNQV9UT19YTUxfQU5EX1hNTFNDSEVNQSBEQVRBQkFTRV9UT19YTUwgREFUQUJBU0VfVE9fWE1MU0NIRU1BIERBVEFCQVNFX1RPX1hNTF9BTkRfWE1MU0NIRU1BIFhNTEFUVFJJQlVURVMgVE9fSlNPTiBUT19KU09OQiBBUlJBWV9UT19KU09OIFJPV19UT19KU09OIEpTT05fQlVJTERfQVJSQVkgSlNPTkJfQlVJTERfQVJSQVkgSlNPTl9CVUlMRF9PQkpFQ1QgSlNPTkJfQlVJTERfT0JKRUNUIEpTT05fT0JKRUNUIEpTT05CX09CSkVDVCBKU09OX0FSUkFZX0xFTkdUSCBKU09OQl9BUlJBWV9MRU5HVEggSlNPTl9FQUNIIEpTT05CX0VBQ0ggSlNPTl9FQUNIX1RFWFQgSlNPTkJfRUFDSF9URVhUIEpTT05fRVhUUkFDVF9QQVRIIEpTT05CX0VYVFJBQ1RfUEFUSCBKU09OX09CSkVDVF9LRVlTIEpTT05CX09CSkVDVF9LRVlTIEpTT05fUE9QVUxBVEVfUkVDT1JEIEpTT05CX1BPUFVMQVRFX1JFQ09SRCBKU09OX1BPUFVMQVRFX1JFQ09SRFNFVCBKU09OQl9QT1BVTEFURV9SRUNPUkRTRVQgSlNPTl9BUlJBWV9FTEVNRU5UUyBKU09OQl9BUlJBWV9FTEVNRU5UUyBKU09OX0FSUkFZX0VMRU1FTlRTX1RFWFQgSlNPTkJfQVJSQVlfRUxFTUVOVFNfVEVYVCBKU09OX1RZUEVPRiBKU09OQl9UWVBFT0YgSlNPTl9UT19SRUNPUkQgSlNPTkJfVE9fUkVDT1JEIEpTT05fVE9fUkVDT1JEU0VUIEpTT05CX1RPX1JFQ09SRFNFVCBKU09OX1NUUklQX05VTExTIEpTT05CX1NUUklQX05VTExTIEpTT05CX1NFVCBKU09OQl9JTlNFUlQgSlNPTkJfUFJFVFRZIENVUlJWQUwgTEFTVFZBTCBORVhUVkFMIFNFVFZBTCBDT0FMRVNDRSBOVUxMSUYgR1JFQVRFU1QgTEVBU1QgQVJSQVlfQVBQRU5EIEFSUkFZX0NBVCBBUlJBWV9ORElNUyBBUlJBWV9ESU1TIEFSUkFZX0ZJTEwgQVJSQVlfTEVOR1RIIEFSUkFZX0xPV0VSIEFSUkFZX1BPU0lUSU9OIEFSUkFZX1BPU0lUSU9OUyBBUlJBWV9QUkVQRU5EIEFSUkFZX1JFTU9WRSBBUlJBWV9SRVBMQUNFIEFSUkFZX1RPX1NUUklORyBBUlJBWV9VUFBFUiBDQVJESU5BTElUWSBTVFJJTkdfVE9fQVJSQVkgVU5ORVNUIElTRU1QVFkgTE9XRVJfSU5DIFVQUEVSX0lOQyBMT1dFUl9JTkYgVVBQRVJfSU5GIFJBTkdFX01FUkdFIEdFTkVSQVRFX1NFUklFUyBHRU5FUkFURV9TVUJTQ1JJUFRTIENVUlJFTlRfREFUQUJBU0UgQ1VSUkVOVF9RVUVSWSBDVVJSRU5UX1NDSEVNQXwxMCBDVVJSRU5UX1NDSEVNQVN8MTAgSU5FVF9DTElFTlRfQUREUiBJTkVUX0NMSUVOVF9QT1JUIElORVRfU0VSVkVSX0FERFIgSU5FVF9TRVJWRVJfUE9SVCBST1dfU0VDVVJJVFlfQUNUSVZFIEZPUk1BVF9UWVBFIFRPX1JFR0NMQVNTIFRPX1JFR1BST0MgVE9fUkVHUFJPQ0VEVVJFIFRPX1JFR09QRVIgVE9fUkVHT1BFUkFUT1IgVE9fUkVHVFlQRSBUT19SRUdOQU1FU1BBQ0UgVE9fUkVHUk9MRSBDT0xfREVTQ1JJUFRJT04gT0JKX0RFU0NSSVBUSU9OIFNIT0JKX0RFU0NSSVBUSU9OIFRYSURfQ1VSUkVOVCBUWElEX0NVUlJFTlRfSUZfQVNTSUdORUQgVFhJRF9DVVJSRU5UX1NOQVBTSE9UIFRYSURfU05BUFNIT1RfWElQIFRYSURfU05BUFNIT1RfWE1BWCBUWElEX1NOQVBTSE9UX1hNSU4gVFhJRF9WSVNJQkxFX0lOX1NOQVBTSE9UIFRYSURfU1RBVFVTIENVUlJFTlRfU0VUVElORyBTRVRfQ09ORklHIEJSSU5fU1VNTUFSSVpFX05FV19WQUxVRVMgQlJJTl9TVU1NQVJJWkVfUkFOR0UgQlJJTl9ERVNVTU1BUklaRV9SQU5HRSBHSU5fQ0xFQU5fUEVORElOR19MSVNUIFNVUFBSRVNTX1JFRFVOREFOVF9VUERBVEVTX1RSSUdHRVIgTE9fRlJPTV9CWVRFQSBMT19QVVQgTE9fR0VUIExPX0NSRUFUIExPX0NSRUFURSBMT19VTkxJTksgTE9fSU1QT1JUIExPX0VYUE9SVCBMT1JFQUQgTE9XUklURSBHUk9VUElORyBDQVNUIi5zcGxpdCgiICIpLm1hcCgoRT0+RS5zcGxpdCgifCIpWzBdKSkuam9pbigifCIpCjtyZXR1cm57bmFtZToiUG9zdGdyZVNRTCIsYWxpYXNlczpbInBvc3RncmVzIiwicG9zdGdyZXNxbCJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsCmtleXdvcmRzOnsKa2V5d29yZDoiQUJPUlQgQUxURVIgQU5BTFlaRSBCRUdJTiBDQUxMIENIRUNLUE9JTlR8MTAgQ0xPU0UgQ0xVU1RFUiBDT01NRU5UIENPTU1JVCBDT1BZIENSRUFURSBERUFMTE9DQVRFIERFQ0xBUkUgREVMRVRFIERJU0NBUkQgRE8gRFJPUCBFTkQgRVhFQ1VURSBFWFBMQUlOIEZFVENIIEdSQU5UIElNUE9SVCBJTlNFUlQgTElTVEVOIExPQUQgTE9DSyBNT1ZFIE5PVElGWSBQUkVQQVJFIFJFQVNTSUdOfDEwIFJFRlJFU0ggUkVJTkRFWCBSRUxFQVNFIFJFU0VUIFJFVk9LRSBST0xMQkFDSyBTQVZFUE9JTlQgU0VDVVJJVFkgU0VMRUNUIFNFVCBTSE9XIFNUQVJUIFRSVU5DQVRFIFVOTElTVEVOfDEwIFVQREFURSBWQUNVVU18MTAgVkFMVUVTIEFHR1JFR0FURSBDT0xMQVRJT04gQ09OVkVSU0lPTnwxMCBEQVRBQkFTRSBERUZBVUxUIFBSSVZJTEVHRVMgRE9NQUlOIFRSSUdHRVIgRVhURU5TSU9OIEZPUkVJR04gV1JBUFBFUnwxMCBUQUJMRSBGVU5DVElPTiBHUk9VUCBMQU5HVUFHRSBMQVJHRSBPQkpFQ1QgTUFURVJJQUxJWkVEIFZJRVcgT1BFUkFUT1IgQ0xBU1MgRkFNSUxZIFBPTElDWSBQVUJMSUNBVElPTnwxMCBST0xFIFJVTEUgU0NIRU1BIFNFUVVFTkNFIFNFUlZFUiBTVEFUSVNUSUNTIFNVQlNDUklQVElPTiBTWVNURU0gVEFCTEVTUEFDRSBDT05GSUdVUkFUSU9OIERJQ1RJT05BUlkgUEFSU0VSIFRFTVBMQVRFIFRZUEUgVVNFUiBNQVBQSU5HIFBSRVBBUkVEIEFDQ0VTUyBNRVRIT0QgQ0FTVCBBUyBUUkFOU0ZPUk0gVFJBTlNBQ1RJT04gT1dORUQgVE8gSU5UTyBTRVNTSU9OIEFVVEhPUklaQVRJT04gSU5ERVggUFJPQ0VEVVJFIEFTU0VSVElPTiBBTEwgQU5BTFlTRSBBTkQgQU5ZIEFSUkFZIEFTQyBBU1lNTUVUUklDfDEwIEJPVEggQ0FTRSBDSEVDSyBDT0xMQVRFIENPTFVNTiBDT05DVVJSRU5UTFl8MTAgQ09OU1RSQUlOVCBDUk9TUyBERUZFUlJBQkxFIFJBTkdFIERFU0MgRElTVElOQ1QgRUxTRSBFWENFUFQgRk9SIEZSRUVaRXwxMCBGUk9NIEZVTEwgSEFWSU5HIElMSUtFIElOIElOSVRJQUxMWSBJTk5FUiBJTlRFUlNFQ1QgSVMgSVNOVUxMIEpPSU4gTEFURVJBTCBMRUFESU5HIExJS0UgTElNSVQgTkFUVVJBTCBOT1QgTk9UTlVMTCBOVUxMIE9GRlNFVCBPTiBPTkxZIE9SIE9SREVSIE9VVEVSIE9WRVJMQVBTIFBMQUNJTkcgUFJJTUFSWSBSRUZFUkVOQ0VTIFJFVFVSTklORyBTSU1JTEFSIFNPTUUgU1lNTUVUUklDIFRBQkxFU0FNUExFIFRIRU4gVFJBSUxJTkcgVU5JT04gVU5JUVVFIFVTSU5HIFZBUklBRElDfDEwIFZFUkJPU0UgV0hFTiBXSEVSRSBXSU5ET1cgV0lUSCBCWSBSRVRVUk5TIElOT1VUIE9VVCBTRVRPRnwxMCBJRiBTVFJJQ1QgQ1VSUkVOVCBDT05USU5VRSBPV05FUiBMT0NBVElPTiBPVkVSIFBBUlRJVElPTiBXSVRISU4gQkVUV0VFTiBFU0NBUEUgRVhURVJOQUwgSU5WT0tFUiBERUZJTkVSIFdPUksgUkVOQU1FIFZFUlNJT04gQ09OTkVDVElPTiBDT05ORUNUIFRBQkxFUyBURU1QIFRFTVBPUkFSWSBGVU5DVElPTlMgU0VRVUVOQ0VTIFRZUEVTIFNDSEVNQVMgT1BUSU9OIENBU0NBREUgUkVTVFJJQ1QgQUREIEFETUlOIEVYSVNUUyBWQUxJRCBWQUxJREFURSBFTkFCTEUgRElTQUJMRSBSRVBMSUNBfDEwIEFMV0FZUyBQQVNTSU5HIENPTFVNTlMgUEFUSCBSRUYgVkFMVUUgT1ZFUlJJRElORyBJTU1VVEFCTEUgU1RBQkxFIFZPTEFUSUxFIEJFRk9SRSBBRlRFUiBFQUNIIFJPVyBQUk9DRURVUkFMIFJPVVRJTkUgTk8gSEFORExFUiBWQUxJREFUT1IgT1BUSU9OUyBTVE9SQUdFIE9JRFN8MTAgV0lUSE9VVCBJTkhFUklUIERFUEVORFMgQ0FMTEVEIElOUFVUIExFQUtQUk9PRnwxMCBDT1NUIFJPV1MgTk9XQUlUIFNFQVJDSCBVTlRJTCBFTkNSWVBURUR8MTAgUEFTU1dPUkQgQ09ORkxJQ1R8MTAgSU5TVEVBRCBJTkhFUklUUyBDSEFSQUNURVJJU1RJQ1MgV1JJVEUgQ1VSU09SIEFMU08gU1RBVEVNRU5UIFNIQVJFIEVYQ0xVU0lWRSBJTkxJTkUgSVNPTEFUSU9OIFJFUEVBVEFCTEUgUkVBRCBDT01NSVRURUQgU0VSSUFMSVpBQkxFIFVOQ09NTUlUVEVEIExPQ0FMIEdMT0JBTCBTUUwgUFJPQ0VEVVJFUyBSRUNVUlNJVkUgU05BUFNIT1QgUk9MTFVQIENVQkUgVFJVU1RFRHwxMCBJTkNMVURFIEZPTExPV0lORyBQUkVDRURJTkcgVU5CT1VOREVEIFJBTkdFIEdST1VQUyBVTkVOQ1JZUFRFRHwxMCBTWVNJRCBGT1JNQVQgREVMSU1JVEVSIEhFQURFUiBRVU9URSBFTkNPRElORyBGSUxURVIgT0ZGIEZPUkNFX1FVT1RFIEZPUkNFX05PVF9OVUxMIEZPUkNFX05VTEwgQ09TVFMgQlVGRkVSUyBUSU1JTkcgU1VNTUFSWSBESVNBQkxFX1BBR0VfU0tJUFBJTkcgUkVTVEFSVCBDWUNMRSBHRU5FUkFURUQgSURFTlRJVFkgREVGRVJSRUQgSU1NRURJQVRFIExFVkVMIExPR0dFRCBVTkxPR0dFRCBPRiBOT1RISU5HIE5PTkUgRVhDTFVERSBBVFRSSUJVVEUgVVNBR0UgUk9VVElORVMgVFJVRSBGQUxTRSBOQU4gSU5GSU5JVFkgQUxJQVMgQkVHSU4gQ09OU1RBTlQgREVDTEFSRSBFTkQgRVhDRVBUSU9OIFJFVFVSTiBQRVJGT1JNfDEwIFJBSVNFIEdFVCBESUFHTk9TVElDUyBTVEFDS0VEfDEwIEZPUkVBQ0ggTE9PUCBFTFNJRiBFWElUIFdISUxFIFJFVkVSU0UgU0xJQ0UgREVCVUcgTE9HIElORk8gTk9USUNFIFdBUk5JTkcgQVNTRVJUIE9QRU4gU1VQRVJVU0VSIE5PU1VQRVJVU0VSIENSRUFURURCIE5PQ1JFQVRFREIgQ1JFQVRFUk9MRSBOT0NSRUFURVJPTEUgSU5IRVJJVCBOT0lOSEVSSVQgTE9HSU4gTk9MT0dJTiBSRVBMSUNBVElPTiBOT1JFUExJQ0FUSU9OIEJZUEFTU1JMUyBOT0JZUEFTU1JMUyAiLApidWlsdF9pbjoiQ1VSUkVOVF9USU1FIENVUlJFTlRfVElNRVNUQU1QIENVUlJFTlRfVVNFUiBDVVJSRU5UX0NBVEFMT0d8MTAgQ1VSUkVOVF9EQVRFIExPQ0FMVElNRSBMT0NBTFRJTUVTVEFNUCBDVVJSRU5UX1JPTEV8MTAgQ1VSUkVOVF9TQ0hFTUF8MTAgU0VTU0lPTl9VU0VSIFBVQkxJQyBGT1VORCBORVcgT0xEIFRHX05BTUV8MTAgVEdfV0hFTnwxMCBUR19MRVZFTHwxMCBUR19PUHwxMCBUR19SRUxJRHwxMCBUR19SRUxOQU1FfDEwIFRHX1RBQkxFX05BTUV8MTAgVEdfVEFCTEVfU0NIRU1BfDEwIFRHX05BUkdTfDEwIFRHX0FSR1Z8MTAgVEdfRVZFTlR8MTAgVEdfVEFHfDEwIFJPV19DT1VOVCBSRVNVTFRfT0lEfDEwIFBHX0NPTlRFWFR8MTAgUkVUVVJORURfU1FMU1RBVEUgQ09MVU1OX05BTUUgQ09OU1RSQUlOVF9OQU1FIFBHX0RBVEFUWVBFX05BTUV8MTAgTUVTU0FHRV9URVhUIFRBQkxFX05BTUUgU0NIRU1BX05BTUUgUEdfRVhDRVBUSU9OX0RFVEFJTHwxMCBQR19FWENFUFRJT05fSElOVHwxMCBQR19FWENFUFRJT05fQ09OVEVYVHwxMCBTUUxTVEFURSBTUUxFUlJNfDEwIFNVQ0NFU1NGVUxfQ09NUExFVElPTiBXQVJOSU5HIERZTkFNSUNfUkVTVUxUX1NFVFNfUkVUVVJORUQgSU1QTElDSVRfWkVST19CSVRfUEFERElORyBOVUxMX1ZBTFVFX0VMSU1JTkFURURfSU5fU0VUX0ZVTkNUSU9OIFBSSVZJTEVHRV9OT1RfR1JBTlRFRCBQUklWSUxFR0VfTk9UX1JFVk9LRUQgU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiBERVBSRUNBVEVEX0ZFQVRVUkUgTk9fREFUQSBOT19BRERJVElPTkFMX0RZTkFNSUNfUkVTVUxUX1NFVFNfUkVUVVJORUQgU1FMX1NUQVRFTUVOVF9OT1RfWUVUX0NPTVBMRVRFIENPTk5FQ1RJT05fRVhDRVBUSU9OIENPTk5FQ1RJT05fRE9FU19OT1RfRVhJU1QgQ09OTkVDVElPTl9GQUlMVVJFIFNRTENMSUVOVF9VTkFCTEVfVE9fRVNUQUJMSVNIX1NRTENPTk5FQ1RJT04gU1FMU0VSVkVSX1JFSkVDVEVEX0VTVEFCTElTSE1FTlRfT0ZfU1FMQ09OTkVDVElPTiBUUkFOU0FDVElPTl9SRVNPTFVUSU9OX1VOS05PV04gUFJPVE9DT0xfVklPTEFUSU9OIFRSSUdHRVJFRF9BQ1RJT05fRVhDRVBUSU9OIEZFQVRVUkVfTk9UX1NVUFBPUlRFRCBJTlZBTElEX1RSQU5TQUNUSU9OX0lOSVRJQVRJT04gTE9DQVRPUl9FWENFUFRJT04gSU5WQUxJRF9MT0NBVE9SX1NQRUNJRklDQVRJT04gSU5WQUxJRF9HUkFOVE9SIElOVkFMSURfR1JBTlRfT1BFUkFUSU9OIElOVkFMSURfUk9MRV9TUEVDSUZJQ0FUSU9OIERJQUdOT1NUSUNTX0VYQ0VQVElPTiBTVEFDS0VEX0RJQUdOT1NUSUNTX0FDQ0VTU0VEX1dJVEhPVVRfQUNUSVZFX0hBTkRMRVIgQ0FTRV9OT1RfRk9VTkQgQ0FSRElOQUxJVFlfVklPTEFUSU9OIERBVEFfRVhDRVBUSU9OIEFSUkFZX1NVQlNDUklQVF9FUlJPUiBDSEFSQUNURVJfTk9UX0lOX1JFUEVSVE9JUkUgREFURVRJTUVfRklFTERfT1ZFUkZMT1cgRElWSVNJT05fQllfWkVSTyBFUlJPUl9JTl9BU1NJR05NRU5UIEVTQ0FQRV9DSEFSQUNURVJfQ09ORkxJQ1QgSU5ESUNBVE9SX09WRVJGTE9XIElOVEVSVkFMX0ZJRUxEX09WRVJGTE9XIElOVkFMSURfQVJHVU1FTlRfRk9SX0xPR0FSSVRITSBJTlZBTElEX0FSR1VNRU5UX0ZPUl9OVElMRV9GVU5DVElPTiBJTlZBTElEX0FSR1VNRU5UX0ZPUl9OVEhfVkFMVUVfRlVOQ1RJT04gSU5WQUxJRF9BUkdVTUVOVF9GT1JfUE9XRVJfRlVOQ1RJT04gSU5WQUxJRF9BUkdVTUVOVF9GT1JfV0lEVEhfQlVDS0VUX0ZVTkNUSU9OIElOVkFMSURfQ0hBUkFDVEVSX1ZBTFVFX0ZPUl9DQVNUIElOVkFMSURfREFURVRJTUVfRk9STUFUIElOVkFMSURfRVNDQVBFX0NIQVJBQ1RFUiBJTlZBTElEX0VTQ0FQRV9PQ1RFVCBJTlZBTElEX0VTQ0FQRV9TRVFVRU5DRSBOT05TVEFOREFSRF9VU0VfT0ZfRVNDQVBFX0NIQVJBQ1RFUiBJTlZBTElEX0lORElDQVRPUl9QQVJBTUVURVJfVkFMVUUgSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUgSU5WQUxJRF9SRUdVTEFSX0VYUFJFU1NJT04gSU5WQUxJRF9ST1dfQ09VTlRfSU5fTElNSVRfQ0xBVVNFIElOVkFMSURfUk9XX0NPVU5UX0lOX1JFU1VMVF9PRkZTRVRfQ0xBVVNFIElOVkFMSURfVEFCTEVTQU1QTEVfQVJHVU1FTlQgSU5WQUxJRF9UQUJMRVNBTVBMRV9SRVBFQVQgSU5WQUxJRF9USU1FX1pPTkVfRElTUExBQ0VNRU5UX1ZBTFVFIElOVkFMSURfVVNFX09GX0VTQ0FQRV9DSEFSQUNURVIgTU9TVF9TUEVDSUZJQ19UWVBFX01JU01BVENIIE5VTExfVkFMVUVfTk9UX0FMTE9XRUQgTlVMTF9WQUxVRV9OT19JTkRJQ0FUT1JfUEFSQU1FVEVSIE5VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFIFNFUVVFTkNFX0dFTkVSQVRPUl9MSU1JVF9FWENFRURFRCBTVFJJTkdfREFUQV9MRU5HVEhfTUlTTUFUQ0ggU1RSSU5HX0RBVEFfUklHSFRfVFJVTkNBVElPTiBTVUJTVFJJTkdfRVJST1IgVFJJTV9FUlJPUiBVTlRFUk1JTkFURURfQ19TVFJJTkcgWkVST19MRU5HVEhfQ0hBUkFDVEVSX1NUUklORyBGTE9BVElOR19QT0lOVF9FWENFUFRJT04gSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OIElOVkFMSURfQklOQVJZX1JFUFJFU0VOVEFUSU9OIEJBRF9DT1BZX0ZJTEVfRk9STUFUIFVOVFJBTlNMQVRBQkxFX0NIQVJBQ1RFUiBOT1RfQU5fWE1MX0RPQ1VNRU5UIElOVkFMSURfWE1MX0RPQ1VNRU5UIElOVkFMSURfWE1MX0NPTlRFTlQgSU5WQUxJRF9YTUxfQ09NTUVOVCBJTlZBTElEX1hNTF9QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIElOVEVHUklUWV9DT05TVFJBSU5UX1ZJT0xBVElPTiBSRVNUUklDVF9WSU9MQVRJT04gTk9UX05VTExfVklPTEFUSU9OIEZPUkVJR05fS0VZX1ZJT0xBVElPTiBVTklRVUVfVklPTEFUSU9OIENIRUNLX1ZJT0xBVElPTiBFWENMVVNJT05fVklPTEFUSU9OIElOVkFMSURfQ1VSU09SX1NUQVRFIElOVkFMSURfVFJBTlNBQ1RJT05fU1RBVEUgQUNUSVZFX1NRTF9UUkFOU0FDVElPTiBCUkFOQ0hfVFJBTlNBQ1RJT05fQUxSRUFEWV9BQ1RJVkUgSEVMRF9DVVJTT1JfUkVRVUlSRVNfU0FNRV9JU09MQVRJT05fTEVWRUwgSU5BUFBST1BSSUFURV9BQ0NFU1NfTU9ERV9GT1JfQlJBTkNIX1RSQU5TQUNUSU9OIElOQVBQUk9QUklBVEVfSVNPTEFUSU9OX0xFVkVMX0ZPUl9CUkFOQ0hfVFJBTlNBQ1RJT04gTk9fQUNUSVZFX1NRTF9UUkFOU0FDVElPTl9GT1JfQlJBTkNIX1RSQU5TQUNUSU9OIFJFQURfT05MWV9TUUxfVFJBTlNBQ1RJT04gU0NIRU1BX0FORF9EQVRBX1NUQVRFTUVOVF9NSVhJTkdfTk9UX1NVUFBPUlRFRCBOT19BQ1RJVkVfU1FMX1RSQU5TQUNUSU9OIElOX0ZBSUxFRF9TUUxfVFJBTlNBQ1RJT04gSURMRV9JTl9UUkFOU0FDVElPTl9TRVNTSU9OX1RJTUVPVVQgSU5WQUxJRF9TUUxfU1RBVEVNRU5UX05BTUUgVFJJR0dFUkVEX0RBVEFfQ0hBTkdFX1ZJT0xBVElPTiBJTlZBTElEX0FVVEhPUklaQVRJT05fU1BFQ0lGSUNBVElPTiBJTlZBTElEX1BBU1NXT1JEIERFUEVOREVOVF9QUklWSUxFR0VfREVTQ1JJUFRPUlNfU1RJTExfRVhJU1QgREVQRU5ERU5UX09CSkVDVFNfU1RJTExfRVhJU1QgSU5WQUxJRF9UUkFOU0FDVElPTl9URVJNSU5BVElPTiBTUUxfUk9VVElORV9FWENFUFRJT04gRlVOQ1RJT05fRVhFQ1VURURfTk9fUkVUVVJOX1NUQVRFTUVOVCBNT0RJRllJTkdfU1FMX0RBVEFfTk9UX1BFUk1JVFRFRCBQUk9ISUJJVEVEX1NRTF9TVEFURU1FTlRfQVRURU1QVEVEIFJFQURJTkdfU1FMX0RBVEFfTk9UX1BFUk1JVFRFRCBJTlZBTElEX0NVUlNPUl9OQU1FIEVYVEVSTkFMX1JPVVRJTkVfRVhDRVBUSU9OIENPTlRBSU5JTkdfU1FMX05PVF9QRVJNSVRURUQgTU9ESUZZSU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgUFJPSElCSVRFRF9TUUxfU1RBVEVNRU5UX0FUVEVNUFRFRCBSRUFESU5HX1NRTF9EQVRBX05PVF9QRVJNSVRURUQgRVhURVJOQUxfUk9VVElORV9JTlZPQ0FUSU9OX0VYQ0VQVElPTiBJTlZBTElEX1NRTFNUQVRFX1JFVFVSTkVEIE5VTExfVkFMVUVfTk9UX0FMTE9XRUQgVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCBTUkZfUFJPVE9DT0xfVklPTEFURUQgRVZFTlRfVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCBTQVZFUE9JTlRfRVhDRVBUSU9OIElOVkFMSURfU0FWRVBPSU5UX1NQRUNJRklDQVRJT04gSU5WQUxJRF9DQVRBTE9HX05BTUUgSU5WQUxJRF9TQ0hFTUFfTkFNRSBUUkFOU0FDVElPTl9ST0xMQkFDSyBUUkFOU0FDVElPTl9JTlRFR1JJVFlfQ09OU1RSQUlOVF9WSU9MQVRJT04gU0VSSUFMSVpBVElPTl9GQUlMVVJFIFNUQVRFTUVOVF9DT01QTEVUSU9OX1VOS05PV04gREVBRExPQ0tfREVURUNURUQgU1lOVEFYX0VSUk9SX09SX0FDQ0VTU19SVUxFX1ZJT0xBVElPTiBTWU5UQVhfRVJST1IgSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSBDQU5OT1RfQ09FUkNFIEdST1VQSU5HX0VSUk9SIFdJTkRPV0lOR19FUlJPUiBJTlZBTElEX1JFQ1VSU0lPTiBJTlZBTElEX0ZPUkVJR05fS0VZIElOVkFMSURfTkFNRSBOQU1FX1RPT19MT05HIFJFU0VSVkVEX05BTUUgREFUQVRZUEVfTUlTTUFUQ0ggSU5ERVRFUk1JTkFURV9EQVRBVFlQRSBDT0xMQVRJT05fTUlTTUFUQ0ggSU5ERVRFUk1JTkFURV9DT0xMQVRJT04gV1JPTkdfT0JKRUNUX1RZUEUgR0VORVJBVEVEX0FMV0FZUyBVTkRFRklORURfQ09MVU1OIFVOREVGSU5FRF9GVU5DVElPTiBVTkRFRklORURfVEFCTEUgVU5ERUZJTkVEX1BBUkFNRVRFUiBVTkRFRklORURfT0JKRUNUIERVUExJQ0FURV9DT0xVTU4gRFVQTElDQVRFX0NVUlNPUiBEVVBMSUNBVEVfREFUQUJBU0UgRFVQTElDQVRFX0ZVTkNUSU9OIERVUExJQ0FURV9QUkVQQVJFRF9TVEFURU1FTlQgRFVQTElDQVRFX1NDSEVNQSBEVVBMSUNBVEVfVEFCTEUgRFVQTElDQVRFX0FMSUFTIERVUExJQ0FURV9PQkpFQ1QgQU1CSUdVT1VTX0NPTFVNTiBBTUJJR1VPVVNfRlVOQ1RJT04gQU1CSUdVT1VTX1BBUkFNRVRFUiBBTUJJR1VPVVNfQUxJQVMgSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFIElOVkFMSURfQ09MVU1OX0RFRklOSVRJT04gSU5WQUxJRF9DVVJTT1JfREVGSU5JVElPTiBJTlZBTElEX0RBVEFCQVNFX0RFRklOSVRJT04gSU5WQUxJRF9GVU5DVElPTl9ERUZJTklUSU9OIElOVkFMSURfUFJFUEFSRURfU1RBVEVNRU5UX0RFRklOSVRJT04gSU5WQUxJRF9TQ0hFTUFfREVGSU5JVElPTiBJTlZBTElEX1RBQkxFX0RFRklOSVRJT04gSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiBXSVRIX0NIRUNLX09QVElPTl9WSU9MQVRJT04gSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBESVNLX0ZVTEwgT1VUX09GX01FTU9SWSBUT09fTUFOWV9DT05ORUNUSU9OUyBDT05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEIFBST0dSQU1fTElNSVRfRVhDRUVERUQgU1RBVEVNRU5UX1RPT19DT01QTEVYIFRPT19NQU5ZX0NPTFVNTlMgVE9PX01BTllfQVJHVU1FTlRTIE9CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFIE9CSkVDVF9JTl9VU0UgQ0FOVF9DSEFOR0VfUlVOVElNRV9QQVJBTSBMT0NLX05PVF9BVkFJTEFCTEUgT1BFUkFUT1JfSU5URVJWRU5USU9OIFFVRVJZX0NBTkNFTEVEIEFETUlOX1NIVVRET1dOIENSQVNIX1NIVVRET1dOIENBTk5PVF9DT05ORUNUX05PVyBEQVRBQkFTRV9EUk9QUEVEIFNZU1RFTV9FUlJPUiBJT19FUlJPUiBVTkRFRklORURfRklMRSBEVVBMSUNBVEVfRklMRSBTTkFQU0hPVF9UT09fT0xEIENPTkZJR19GSUxFX0VSUk9SIExPQ0tfRklMRV9FWElTVFMgRkRXX0VSUk9SIEZEV19DT0xVTU5fTkFNRV9OT1RfRk9VTkQgRkRXX0RZTkFNSUNfUEFSQU1FVEVSX1ZBTFVFX05FRURFRCBGRFdfRlVOQ1RJT05fU0VRVUVOQ0VfRVJST1IgRkRXX0lOQ09OU0lTVEVOVF9ERVNDUklQVE9SX0lORk9STUFUSU9OIEZEV19JTlZBTElEX0FUVFJJQlVURV9WQUxVRSBGRFdfSU5WQUxJRF9DT0xVTU5fTkFNRSBGRFdfSU5WQUxJRF9DT0xVTU5fTlVNQkVSIEZEV19JTlZBTElEX0RBVEFfVFlQRSBGRFdfSU5WQUxJRF9EQVRBX1RZUEVfREVTQ1JJUFRPUlMgRkRXX0lOVkFMSURfREVTQ1JJUFRPUl9GSUVMRF9JREVOVElGSUVSIEZEV19JTlZBTElEX0hBTkRMRSBGRFdfSU5WQUxJRF9PUFRJT05fSU5ERVggRkRXX0lOVkFMSURfT1BUSU9OX05BTUUgRkRXX0lOVkFMSURfU1RSSU5HX0xFTkdUSF9PUl9CVUZGRVJfTEVOR1RIIEZEV19JTlZBTElEX1NUUklOR19GT1JNQVQgRkRXX0lOVkFMSURfVVNFX09GX05VTExfUE9JTlRFUiBGRFdfVE9PX01BTllfSEFORExFUyBGRFdfT1VUX09GX01FTU9SWSBGRFdfTk9fU0NIRU1BUyBGRFdfT1BUSU9OX05BTUVfTk9UX0ZPVU5EIEZEV19SRVBMWV9IQU5ETEUgRkRXX1NDSEVNQV9OT1RfRk9VTkQgRkRXX1RBQkxFX05PVF9GT1VORCBGRFdfVU5BQkxFX1RPX0NSRUFURV9FWEVDVVRJT04gRkRXX1VOQUJMRV9UT19DUkVBVEVfUkVQTFkgRkRXX1VOQUJMRV9UT19FU1RBQkxJU0hfQ09OTkVDVElPTiBQTFBHU1FMX0VSUk9SIFJBSVNFX0VYQ0VQVElPTiBOT19EQVRBX0ZPVU5EIFRPT19NQU5ZX1JPV1MgQVNTRVJUX0ZBSUxVUkUgSU5URVJOQUxfRVJST1IgREFUQV9DT1JSVVBURUQgSU5ERVhfQ09SUlVQVEVEICIKfSxpbGxlZ2FsOi86PT18XFdccypcKFwqfChefFxzKVwkW2Etel18XHtce3xbYS16XTpccyokfFwuXC5cLnxUTzp8RE86LywKY29udGFpbnM6W3tjbGFzc05hbWU6ImtleXdvcmQiLHZhcmlhbnRzOlt7YmVnaW46L1xiVEVYVFxzKlNFQVJDSFxiL30sewpiZWdpbjovXGIoUFJJTUFSWXxGT1JFSUdOfEZPUihccytOTyk/KVxzK0tFWVxiL30sewpiZWdpbjovXGJQQVJBTExFTFxzKyhVTlNBRkV8UkVTVFJJQ1RFRHxTQUZFKVxiL30sewpiZWdpbjovXGJTVE9SQUdFXHMrKFBMQUlOfEVYVEVSTkFMfEVYVEVOREVEfE1BSU4pXGIvfSx7CmJlZ2luOi9cYk1BVENIXHMrKEZVTEx8UEFSVElBTHxTSU1QTEUpXGIvfSx7YmVnaW46L1xiTlVMTFNccysoRklSU1R8TEFTVClcYi99LHsKYmVnaW46L1xiRVZFTlRccytUUklHR0VSXGIvfSx7YmVnaW46L1xiKE1BUFBJTkd8T1IpXHMrUkVQTEFDRVxiL30sewpiZWdpbjovXGIoRlJPTXxUTylccysoUFJPR1JBTXxTVERJTnxTVERPVVQpXGIvfSx7CmJlZ2luOi9cYihTSEFSRXxFWENMVVNJVkUpXHMrTU9ERVxiL30sewpiZWdpbjovXGIoTEVGVHxSSUdIVClccysoT1VURVJccyspP0pPSU5cYi99LHsKYmVnaW46L1xiKEZFVENIfE1PVkUpXHMrKE5FWFR8UFJJT1J8RklSU1R8TEFTVHxBQlNPTFVURXxSRUxBVElWRXxGT1JXQVJEfEJBQ0tXQVJEKVxiLwp9LHtiZWdpbjovXGJQUkVTRVJWRVxzK1JPV1NcYi99LHtiZWdpbjovXGJESVNDQVJEXHMrUExBTlNcYi99LHsKYmVnaW46L1xiUkVGRVJFTkNJTkdccysoT0xEfE5FVylcYi99LHtiZWdpbjovXGJTS0lQXHMrTE9DS0VEXGIvfSx7CmJlZ2luOi9cYkdST1VQSU5HXHMrU0VUU1xiL30sewpiZWdpbjovXGIoQklOQVJZfElOU0VOU0lUSVZFfFNDUk9MTHxOT1xzK1NDUk9MTClccysoQ1VSU09SfEZPUilcYi99LHsKYmVnaW46L1xiKFdJVEh8V0lUSE9VVClccytIT0xEXGIvfSx7CmJlZ2luOi9cYldJVEhccysoQ0FTQ0FERUR8TE9DQUwpXHMrQ0hFQ0tccytPUFRJT05cYi99LHsKYmVnaW46L1xiRVhDTFVERVxzKyhUSUVTfE5PXHMrT1RIRVJTKVxiL30sewpiZWdpbjovXGJGT1JNQVRccysoVEVYVHxYTUx8SlNPTnxZQU1MKVxiL30sewpiZWdpbjovXGJTRVRccysoKFNFU1NJT058TE9DQUwpXHMrKT9OQU1FU1xiL30se2JlZ2luOi9cYklTXHMrKE5PVFxzKyk/VU5LTk9XTlxiLwp9LHtiZWdpbjovXGJTRUNVUklUWVxzK0xBQkVMXGIvfSx7YmVnaW46L1xiU1RBTkRBTE9ORVxzKyhZRVN8Tk98Tk9ccytWQUxVRSlcYi8KfSx7YmVnaW46L1xiV0lUSFxzKyhOT1xzKyk/REFUQVxiL30se2JlZ2luOi9cYihGT1JFSUdOfFNFVClccytEQVRBXGIvfSx7CmJlZ2luOi9cYlNFVFxzKyhDQVRBTE9HfENPTlNUUkFJTlRTKVxiL30se2JlZ2luOi9cYihXSVRIfEZPUilccytPUkRJTkFMSVRZXGIvfSx7CmJlZ2luOi9cYklTXHMrKE5PVFxzKyk/RE9DVU1FTlRcYi99LHsKYmVnaW46L1xiWE1MXHMrT1BUSU9OXHMrKERPQ1VNRU5UfENPTlRFTlQpXGIvfSx7CmJlZ2luOi9cYihTVFJJUHxQUkVTRVJWRSlccytXSElURVNQQUNFXGIvfSx7CmJlZ2luOi9cYk5PXHMrKEFDVElPTnxNQVhWQUxVRXxNSU5WQUxVRSlcYi99LHsKYmVnaW46L1xiUEFSVElUSU9OXHMrQllccysoUkFOR0V8TElTVHxIQVNIKVxiL30se2JlZ2luOi9cYkFUXHMrVElNRVxzK1pPTkVcYi99LHsKYmVnaW46L1xiR1JBTlRFRFxzK0JZXGIvfSx7YmVnaW46L1xiUkVUVVJOXHMrKFFVRVJZfE5FWFQpXGIvfSx7CmJlZ2luOi9cYihBVFRBQ0h8REVUQUNIKVxzK1BBUlRJVElPTlxiL30sewpiZWdpbjovXGJGT1JDRVxzK1JPV1xzK0xFVkVMXHMrU0VDVVJJVFlcYi99LHsKYmVnaW46L1xiKElOQ0xVRElOR3xFWENMVURJTkcpXHMrKENPTU1FTlRTfENPTlNUUkFJTlRTfERFRkFVTFRTfElERU5USVRZfElOREVYRVN8U1RBVElTVElDU3xTVE9SQUdFfEFMTClcYi8KfSx7YmVnaW46L1xiQVNccysoQVNTSUdOTUVOVHxJTVBMSUNJVHxQRVJNSVNTSVZFfFJFU1RSSUNUSVZFfEVOVU18UkFOR0UpXGIvfV19LHsKYmVnaW46L1xiKEZPUk1BVHxGQU1JTFl8VkVSU0lPTilccypcKC99LHtiZWdpbjovXGJJTkNMVURFXHMqXCgvLAprZXl3b3JkczoiSU5DTFVERSJ9LHtiZWdpbjovXGJSQU5HRSg/IVxzKihCRVRXRUVOfFVOQk9VTkRFRHxDVVJSRU5UfFstMC05XSspKS8KfSx7CmJlZ2luOi9cYihWRVJTSU9OfE9XTkVSfFRFTVBMQVRFfFRBQkxFU1BBQ0V8Q09OTkVDVElPTlxzK0xJTUlUfFBST0NFRFVSRXxSRVNUUklDVHxKT0lOfFBBUlNFUnxDT1BZfFNUQVJUfEVORHxDT0xMQVRJT058SU5QVVR8QU5BTFlaRXxTVE9SQUdFfExJS0V8REVGQVVMVHxERUxJTUlURVJ8RU5DT0RJTkd8Q09MVU1OfENPTlNUUkFJTlR8VEFCTEV8U0NIRU1BKVxzKj0vCn0se2JlZ2luOi9cYihQR19cdys/fEhBU19bQS1aX10rX1BSSVZJTEVHRSlcYi8scmVsZXZhbmNlOjEwfSx7CmJlZ2luOi9cYkVYVFJBQ1RccypcKC8sZW5kOi9cYkZST01cYi8scmV0dXJuRW5kOiEwLGtleXdvcmRzOnsKdHlwZToiQ0VOVFVSWSBEQVkgREVDQURFIERPVyBET1kgRVBPQ0ggSE9VUiBJU09ET1cgSVNPWUVBUiBNSUNST1NFQ09ORFMgTUlMTEVOTklVTSBNSUxMSVNFQ09ORFMgTUlOVVRFIE1PTlRIIFFVQVJURVIgU0VDT05EIFRJTUVaT05FIFRJTUVaT05FX0hPVVIgVElNRVpPTkVfTUlOVVRFIFdFRUsgWUVBUiIKfX0se2JlZ2luOi9cYihYTUxFTEVNRU5UfFhNTFBJKVxzKlwoXHMqTkFNRS8sa2V5d29yZHM6e2tleXdvcmQ6Ik5BTUUifX0sewpiZWdpbjovXGIoWE1MUEFSU0V8WE1MU0VSSUFMSVpFKVxzKlwoXHMqKERPQ1VNRU5UfENPTlRFTlQpLyxrZXl3b3Jkczp7CmtleXdvcmQ6IkRPQ1VNRU5UIENPTlRFTlQifX0se2JlZ2luS2V5d29yZHM6IkNBQ0hFIElOQ1JFTUVOVCBNQVhWQUxVRSBNSU5WQUxVRSIsCmVuZDpFLkNfTlVNQkVSX1JFLHJldHVybkVuZDohMCxrZXl3b3JkczoiQlkgQ0FDSEUgSU5DUkVNRU5UIE1BWFZBTFVFIE1JTlZBTFVFIgp9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi9cYihXSVRIfFdJVEhPVVQpXHMrVElNRVxzK1pPTkVcYi99LHtjbGFzc05hbWU6InR5cGUiLApiZWdpbjovXGJJTlRFUlZBTFxzKyhZRUFSfE1PTlRIfERBWXxIT1VSfE1JTlVURXxTRUNPTkQpKFxzK1RPXHMrKE1PTlRIfEhPVVJ8TUlOVVRFfFNFQ09ORCkpP1xiLwp9LHsKYmVnaW46L1xiUkVUVVJOU1xzKyhMQU5HVUFHRV9IQU5ETEVSfFRSSUdHRVJ8RVZFTlRfVFJJR0dFUnxGRFdfSEFORExFUnxJTkRFWF9BTV9IQU5ETEVSfFRTTV9IQU5ETEVSKVxiLywKa2V5d29yZHM6e2tleXdvcmQ6IlJFVFVSTlMiLAp0eXBlOiJMQU5HVUFHRV9IQU5ETEVSIFRSSUdHRVIgRVZFTlRfVFJJR0dFUiBGRFdfSEFORExFUiBJTkRFWF9BTV9IQU5ETEVSIFRTTV9IQU5ETEVSIgp9fSx7YmVnaW46IlxcYigiK0krIilcXHMqXFwoIn0se2JlZ2luOiJcXC4oIitSKyIpXFxiIn0sewpiZWdpbjoiXFxiKCIrUisiKVxccytQQVRIXFxiIixrZXl3b3Jkczp7a2V5d29yZDoiUEFUSCIsCnR5cGU6QS5yZXBsYWNlKCJQQVRIICIsIiIpfX0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxcYigiK1IrIilcXGIifSx7CmNsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixjb250YWluczpbe2JlZ2luOiInJyJ9XX0sewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IihlfEV8dSZ8VSYpJyIsZW5kOiInIixjb250YWluczpbe2JlZ2luOiJcXFxcLiJ9XSwKcmVsZXZhbmNlOjEwfSxFLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjpOLGVuZDpOLGNvbnRhaW5zOlt7CnN1Ykxhbmd1YWdlOlsicGdzcWwiLCJwZXJsIiwicHl0aG9uIiwidGNsIiwiciIsImx1YSIsImphdmEiLCJwaHAiLCJydWJ5IiwiYmFzaCIsInNjaGVtZSIsInhtbCIsImpzb24iXSwKZW5kc1dpdGhQYXJlbnQ6ITB9XX0pLHtiZWdpbjonIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIid9XQp9LEUuQ19OVU1CRVJfTU9ERSxFLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLFQse2NsYXNzTmFtZToibWV0YSIsdmFyaWFudHM6W3sKYmVnaW46IiUoUk9XKT9UWVBFIixyZWxldmFuY2U6MTB9LHtiZWdpbjoiXFwkXFxkKyJ9LHtiZWdpbjoiXiNcXHciLGVuZDoiJCJ9XX0sewpjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46Ijw8XFxzKlthLXpBLVpfXVthLXpBLVpfMC05JF0qXFxzKj4+IixyZWxldmFuY2U6MTB9XX19Cn0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgidmFsYSIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT4oe25hbWU6IlZhbGEiLAprZXl3b3Jkczp7CmtleXdvcmQ6ImNoYXIgdWNoYXIgdW5pY2hhciBpbnQgdWludCBsb25nIHVsb25nIHNob3J0IHVzaG9ydCBpbnQ4IGludDE2IGludDMyIGludDY0IHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGZsb2F0IGRvdWJsZSBib29sIHN0cnVjdCBlbnVtIHN0cmluZyB2b2lkIHdlYWsgdW5vd25lZCBvd25lZCBhc3luYyBzaWduYWwgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBvdmVycmlkZSB2aXJ0dWFsIGRlbGVnYXRlIGlmIHdoaWxlIGRvIGZvciBmb3JlYWNoIGVsc2Ugc3dpdGNoIGNhc2UgYnJlYWsgZGVmYXVsdCByZXR1cm4gdHJ5IGNhdGNoIHB1YmxpYyBwcml2YXRlIHByb3RlY3RlZCBpbnRlcm5hbCB1c2luZyBuZXcgdGhpcyBnZXQgc2V0IGNvbnN0IHN0ZG91dCBzdGRpbiBzdGRlcnIgdmFyIiwKYnVpbHRfaW46IkRCdXMgR0xpYiBDQ29kZSBHZWUgT2JqZWN0IEd0ayBQb3NpeCIsbGl0ZXJhbDoiZmFsc2UgdHJ1ZSBudWxsIn0sCmNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIG5hbWVzcGFjZSIsZW5kOi9cey8sCmV4Y2x1ZGVFbmQ6ITAsaWxsZWdhbDoiW14sOlxcblxcc1xcLl0iLGNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV0KfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciIiInLAplbmQ6JyIiIicscmVsZXZhbmNlOjV9LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ19OVU1CRVJfTU9ERSx7CmNsYXNzTmFtZToibWV0YSIsYmVnaW46Il4jIixlbmQ6IiQiLHJlbGV2YW5jZToyfV19KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianNvbiIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBuPT57Y29uc3QgZT17CmxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCIKfSxpPVtuLkNfTElORV9DT01NRU5UX01PREUsbi5DX0JMT0NLX0NPTU1FTlRfTU9ERV0sYT1bbi5RVU9URV9TVFJJTkdfTU9ERSxuLkNfTlVNQkVSX01PREVdLGw9ewplbmQ6IiwiLGVuZHNXaXRoUGFyZW50OiEwLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6YSxrZXl3b3JkczplfSx0PXtiZWdpbjovXHsvLAplbmQ6L1x9Lyxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46LyIvLGVuZDovIi8sCmNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEVdLGlsbGVnYWw6IlxcbiJ9LG4uaW5oZXJpdChsLHtiZWdpbjovOi8KfSldLmNvbmNhdChpKSxpbGxlZ2FsOiJcXFMifSxzPXtiZWdpbjoiXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6W24uaW5oZXJpdChsKV0sCmlsbGVnYWw6IlxcUyJ9O3JldHVybiBhLnB1c2godCxzKSxpLmZvckVhY2goKG49PnthLnB1c2gobil9KSkse25hbWU6IkpTT04iLApjb250YWluczphLGtleXdvcmRzOmUsaWxsZWdhbDoiXFxTIn19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJvYmplY3RpdmVjIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKY29uc3Qgbj0vW2EtekEtWkBdW2EtekEtWjAtOV9dKi8sXz17JHBhdHRlcm46biwKa2V5d29yZDoiQGludGVyZmFjZSBAY2xhc3MgQHByb3RvY29sIEBpbXBsZW1lbnRhdGlvbiJ9O3JldHVybnsKbmFtZToiT2JqZWN0aXZlLUMiLGFsaWFzZXM6WyJtbSIsIm9iamMiLCJvYmotYyIsIm9iai1jKysiLCJvYmplY3RpdmUtYysrIl0sCmtleXdvcmRzOnskcGF0dGVybjpuLAprZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgY2hhciBleHBvcnQgc2l6ZW9mIHR5cGVkZWYgY29uc3Qgc3RydWN0IGZvciB1bmlvbiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBib29sIG11dGFibGUgaWYgZG8gcmV0dXJuIGdvdG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIGFzbSBjYXNlIHNob3J0IGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0aGlzIHN3aXRjaCBjb250aW51ZSB3Y2hhcl90IGlubGluZSByZWFkb25seSBhc3NpZ24gcmVhZHdyaXRlIHNlbGYgQHN5bmNocm9uaXplZCBpZCB0eXBlb2Ygbm9uYXRvbWljIHN1cGVyIHVuaWNoYXIgSUJPdXRsZXQgSUJBY3Rpb24gc3Ryb25nIHdlYWsgY29weSBpbiBvdXQgaW5vdXQgYnljb3B5IGJ5cmVmIG9uZXdheSBfX3N0cm9uZyBfX3dlYWsgX19ibG9jayBfX2F1dG9yZWxlYXNpbmcgQHByaXZhdGUgQHByb3RlY3RlZCBAcHVibGljIEB0cnkgQHByb3BlcnR5IEBlbmQgQHRocm93IEBjYXRjaCBAZmluYWxseSBAYXV0b3JlbGVhc2Vwb29sIEBzeW50aGVzaXplIEBkeW5hbWljIEBzZWxlY3RvciBAb3B0aW9uYWwgQHJlcXVpcmVkIEBlbmNvZGUgQHBhY2thZ2UgQGltcG9ydCBAZGVmcyBAY29tcGF0aWJpbGl0eV9hbGlhcyBfX2JyaWRnZSBfX2JyaWRnZV90cmFuc2ZlciBfX2JyaWRnZV9yZXRhaW5lZCBfX2JyaWRnZV9yZXRhaW4gX19jb3ZhcmlhbnQgX19jb250cmF2YXJpYW50IF9fa2luZG9mIF9Ob25udWxsIF9OdWxsYWJsZSBfTnVsbF91bnNwZWNpZmllZCBfX0ZVTkNUSU9OX18gX19QUkVUVFlfRlVOQ1RJT05fXyBfX2F0dHJpYnV0ZV9fIGdldHRlciBzZXR0ZXIgcmV0YWluIHVuc2FmZV91bnJldGFpbmVkIG5vbm51bGwgbnVsbGFibGUgbnVsbF91bnNwZWNpZmllZCBudWxsX3Jlc2V0dGFibGUgY2xhc3MgaW5zdGFuY2V0eXBlIE5TX0RFU0lHTkFURURfSU5JVElBTElaRVIgTlNfVU5BVkFJTEFCTEUgTlNfUkVRVUlSRVNfU1VQRVIgTlNfUkVUVVJOU19JTk5FUl9QT0lOVEVSIE5TX0lOTElORSBOU19BVkFJTEFCTEUgTlNfREVQUkVDQVRFRCBOU19FTlVNIE5TX09QVElPTlMgTlNfU1dJRlRfVU5BVkFJTEFCTEUgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4gTlNfQVNTVU1FX05PTk5VTExfRU5EIE5TX1JFRklORURfRk9SX1NXSUZUIE5TX1NXSUZUX05BTUUgTlNfU1dJRlRfTk9USFJPVyBOU19EVVJJTkcgTlNfSEFORExFUiBOU19FTkRIQU5ETEVSIE5TX1ZBTFVFUkVUVVJOIE5TX1ZPSURSRVRVUk4iLApsaXRlcmFsOiJmYWxzZSB0cnVlIEZBTFNFIFRSVUUgbmlsIFlFUyBOTyBOVUxMIiwKYnVpbHRfaW46IkJPT0wgZGlzcGF0Y2hfb25jZV90IGRpc3BhdGNoX3F1ZXVlX3QgZGlzcGF0Y2hfc3luYyBkaXNwYXRjaF9hc3luYyBkaXNwYXRjaF9vbmNlIgp9LGlsbGVnYWw6IjwvIixjb250YWluczpbe2NsYXNzTmFtZToiYnVpbHRfaW4iLApiZWdpbjoiXFxiKEFWfENBfENGfENHfENJfENMfENNfENOfENUfE1LfE1QfE1US3xNVEx8TlN8U0NOfFNLfFVJfFdLfFhDKVxcdysiCn0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5DX05VTUJFUl9NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHsKY2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46J0AiJyxlbmQ6JyInLGlsbGVnYWw6IlxcbiIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfV19LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi8jXHMqW2Etel0rXGIvLGVuZDovJC8sCmtleXdvcmRzOnsKIm1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSIKfSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0sZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUsewpjbGFzc05hbWU6Im1ldGEtc3RyaW5nIn0pLHtjbGFzc05hbWU6Im1ldGEtc3RyaW5nIixiZWdpbjovPC4qPz4vLGVuZDovJC8sCmlsbGVnYWw6IlxcbiJ9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0sewpjbGFzc05hbWU6ImNsYXNzIixiZWdpbjoiKCIrXy5rZXl3b3JkLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIixlbmQ6Lyhce3wkKS8sCmV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6Xyxjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7CmJlZ2luOiJcXC4iK2UuVU5ERVJTQ09SRV9JREVOVF9SRSxyZWxldmFuY2U6MH1dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInIiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKC4uLmUpe3JldHVybiBlLm1hcCgoZT0+ewpyZXR1cm4obj1lKT8ic3RyaW5nIj09dHlwZW9mIG4/bjpuLnNvdXJjZTpudWxsO3ZhciBufSkpLmpvaW4oIiIpfXJldHVybiBuPT57CmNvbnN0IGE9Lyg/Oig/OlthLXpBLVpdfFwuWy5fYS16QS1aXSlbLl9hLXpBLVowLTldKil8XC4oPyFcZCkvO3JldHVybntuYW1lOiJSIiwKaWxsZWdhbDovLT4vLGtleXdvcmRzOnskcGF0dGVybjphLAprZXl3b3JkOiJmdW5jdGlvbiBpZiBpbiBicmVhayBuZXh0IHJlcGVhdCBlbHNlIGZvciB3aGlsZSIsCmxpdGVyYWw6Ik5VTEwgTkEgVFJVRSBGQUxTRSBJbmYgTmFOIE5BX2ludGVnZXJffDEwIE5BX3JlYWxffDEwIE5BX2NoYXJhY3Rlcl98MTAgTkFfY29tcGxleF98MTAiLApidWlsdF9pbjoiTEVUVEVSUyBsZXR0ZXJzIG1vbnRoLmFiYiBtb250aC5uYW1lIHBpIFQgRiBhYnMgYWNvcyBhY29zaCBhbGwgYW55IGFueU5BIEFyZyBhcy5jYWxsIGFzLmNoYXJhY3RlciBhcy5jb21wbGV4IGFzLmRvdWJsZSBhcy5lbnZpcm9ubWVudCBhcy5pbnRlZ2VyIGFzLmxvZ2ljYWwgYXMubnVsbC5kZWZhdWx0IGFzLm51bWVyaWMgYXMucmF3IGFzaW4gYXNpbmggYXRhbiBhdGFuaCBhdHRyIGF0dHJpYnV0ZXMgYmFzZWVudiBicm93c2VyIGMgY2FsbCBjZWlsaW5nIGNsYXNzIENvbmogY29zIGNvc2ggY29zcGkgY3VtbWF4IGN1bW1pbiBjdW1wcm9kIGN1bXN1bSBkaWdhbW1hIGRpbSBkaW1uYW1lcyBlbXB0eWVudiBleHAgZXhwcmVzc2lvbiBmbG9vciBmb3JjZUFuZENhbGwgZ2FtbWEgZ2MudGltZSBnbG9iYWxlbnYgSW0gaW50ZXJhY3RpdmUgaW52aXNpYmxlIGlzLmFycmF5IGlzLmF0b21pYyBpcy5jYWxsIGlzLmNoYXJhY3RlciBpcy5jb21wbGV4IGlzLmRvdWJsZSBpcy5lbnZpcm9ubWVudCBpcy5leHByZXNzaW9uIGlzLmZpbml0ZSBpcy5mdW5jdGlvbiBpcy5pbmZpbml0ZSBpcy5pbnRlZ2VyIGlzLmxhbmd1YWdlIGlzLmxpc3QgaXMubG9naWNhbCBpcy5tYXRyaXggaXMubmEgaXMubmFtZSBpcy5uYW4gaXMubnVsbCBpcy5udW1lcmljIGlzLm9iamVjdCBpcy5wYWlybGlzdCBpcy5yYXcgaXMucmVjdXJzaXZlIGlzLnNpbmdsZSBpcy5zeW1ib2wgbGF6eUxvYWREQmZldGNoIGxlbmd0aCBsZ2FtbWEgbGlzdCBsb2cgbWF4IG1pbiBtaXNzaW5nIE1vZCBuYW1lcyBuYXJncyBuemNoYXIgb2xkQ2xhc3Mgb24uZXhpdCBwb3MudG8uZW52IHByb2MudGltZSBwcm9kIHF1b3RlIHJhbmdlIFJlIHJlcCByZXRyYWNlbWVtIHJldHVybiByb3VuZCBzZXFfYWxvbmcgc2VxX2xlbiBzZXEuaW50IHNpZ24gc2lnbmlmIHNpbiBzaW5oIHNpbnBpIHNxcnQgc3RhbmRhcmRHZW5lcmljIHN1YnN0aXR1dGUgc3VtIHN3aXRjaCB0YW4gdGFuaCB0YW5waSB0cmFjZW1lbSB0cmlnYW1tYSB0cnVuYyB1bmNsYXNzIHVudHJhY2VtZW0gVXNlTWV0aG9kIHh0ZnJtIgp9LGNvbnRhaW5zOltuLkNPTU1FTlQoLyMnLywvJC8se2NvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAZXhhbXBsZXMiLApzdGFydHM6e2NvbnRhaW5zOlt7YmVnaW46L1xuL30se2JlZ2luOi8jJ1xzKig/PUBbYS16QS1aXSspLyxlbmRzUGFyZW50OiEwfSx7CmJlZ2luOi8jJy8sZW5kOi8kLyxleGNsdWRlQmVnaW46ITB9XX19LHtjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46IkBwYXJhbSIsCmVuZDovJC8sY29udGFpbnM6W3tjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOmF9LHsKYmVnaW46L2AoPzpcXC58W15gXFxdKStgL31dLGVuZHNQYXJlbnQ6ITB9XX0se2NsYXNzTmFtZToiZG9jdGFnIiwKYmVnaW46L0BbYS16QS1aXSsvfSx7Y2xhc3NOYW1lOiJtZXRhLWtleXdvcmQiLGJlZ2luOi9cXFthLXpBLVpdKy99XQp9KSxuLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W24uQkFDS1NMQVNIX0VTQ0FQRV0sCnZhcmlhbnRzOltuLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjovW3JSXSIoLSopXCgvLGVuZDovXCkoLSopIi8KfSksbi5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46L1tyUl0iKC0qKVx7LyxlbmQ6L1x9KC0qKSIvCn0pLG4uRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi9bclJdIigtKilcWy8sZW5kOi9cXSgtKikiLwp9KSxuLkVORF9TQU1FX0FTX0JFR0lOKHtiZWdpbjovW3JSXScoLSopXCgvLGVuZDovXCkoLSopJy8KfSksbi5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46L1tyUl0nKC0qKVx7LyxlbmQ6L1x9KC0qKScvCn0pLG4uRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi9bclJdJygtKilcWy8sZW5kOi9cXSgtKiknL30pLHtiZWdpbjonIicsZW5kOiciJywKcmVsZXZhbmNlOjB9LHtiZWdpbjoiJyIsZW5kOiInIixyZWxldmFuY2U6MH1dfSx7Y2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7CmJlZ2luOi8oW15hLXpBLVowLTkuX10pKD89MFt4WF1bMC05YS1mQS1GXStcLlswLTlhLWZBLUZdKltwUF1bKy1dP1xkK2k/KS8sCmVuZDovMFt4WF1bMC05YS1mQS1GXStcLlswLTlhLWZBLUZdKltwUF1bKy1dP1xkK2k/LyxleGNsdWRlQmVnaW46ITB9LHsKYmVnaW46LyhbXmEtekEtWjAtOS5fXSkoPz0wW3hYXVswLTlhLWZBLUZdKyhbcFBdWystXT9cZCspP1tMaV0/KS8sCmVuZDovMFt4WF1bMC05YS1mQS1GXSsoW3BQXVsrLV0/XGQrKT9bTGldPy8sZXhjbHVkZUJlZ2luOiEwfSx7CmJlZ2luOi8oW15hLXpBLVowLTkuX10pKD89KFxkKyhcLlxkKik/fFwuXGQrKShbZUVdWystXT9cZCspP1tMaV0/KS8sCmVuZDovKFxkKyhcLlxkKik/fFwuXGQrKShbZUVdWystXT9cZCspP1tMaV0/LyxleGNsdWRlQmVnaW46ITB9XSxyZWxldmFuY2U6MH0sewpiZWdpbjoiJSIsZW5kOiIlIn0se2JlZ2luOmUoL1thLXpBLVpdW2EtekEtWl8wLTldKi8sIlxccys8LVxccysiKX0se2JlZ2luOiJgIiwKZW5kOiJgIixjb250YWluczpbe2JlZ2luOi9cXC4vfV19XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJzY2lsYWIiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+ewpjb25zdCBuPVtlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJ3xcIiIsZW5kOiInfFwiIiwKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx7YmVnaW46IicnIn1dfV07cmV0dXJue25hbWU6IlNjaWxhYiIsCmFsaWFzZXM6WyJzY2kiXSxrZXl3b3Jkczp7JHBhdHRlcm46LyU/XHcrLywKa2V5d29yZDoiYWJvcnQgYnJlYWsgY2FzZSBjbGVhciBjYXRjaCBjb250aW51ZSBkbyBlbHNlaWYgZWxzZSBlbmRmdW5jdGlvbiBlbmQgZm9yIGZ1bmN0aW9uIGdsb2JhbCBpZiBwYXVzZSByZXR1cm4gcmVzdW1lIHNlbGVjdCB0cnkgdGhlbiB3aGlsZSIsCmxpdGVyYWw6IiVmICVGICV0ICVUICVwaSAlZXBzICVpbmYgJW5hbiAlZSAlaSAleiAlcyIsCmJ1aWx0X2luOiJhYnMgYW5kIGFjb3MgYXNpbiBhdGFuIGNlaWwgY2QgY2hkaXIgY2xlYXJnbG9iYWwgY29zaCBjb3MgY3VtcHJvZCBkZWZmIGRpc3AgZXJyb3IgZXhlYyBleGVjc3RyIGV4aXN0cyBleHAgZXllIGdldHRleHQgZmxvb3IgZnByaW50ZiBmcmVhZCBmc29sdmUgaW1hZyBpc2RlZiBpc2VtcHR5IGlzaW5maXNuYW4gaXN2ZWN0b3IgbGFzdGVycm9yIGxlbmd0aCBsb2FkIGxpbnNwYWNlIGxpc3QgbGlzdGZpbGVzIGxvZzEwIGxvZzIgbG9nIG1heCBtaW4gbXNwcmludGYgbWNsb3NlIG1vcGVuIG9uZXMgb3IgcGF0aGNvbnZlcnQgcG9seSBwcmludGYgcHJvZCBwd2QgcmFuZCByZWFsIHJvdW5kIHNpbmggc2luIHNpemUgZ3NvcnQgc3ByaW50ZiBzcXJ0IHN0cmNhdCBzdHJjbXBzIHRyaW5nIHN1bSBzeXN0ZW0gdGFuaCB0YW4gdHlwZSB0eXBlbmFtZSB3YXJuaW5nIHplcm9zIG1hdHJpeCIKfSxpbGxlZ2FsOicoInwjfC9cXCp8XFxzKy9cXHcrKScsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDoiJCIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHsKY2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIn1dfSx7CmJlZ2luOiJbYS16QS1aX11bYS16QS1aXzAtOV0qW1xcLiddKyIscmVsZXZhbmNlOjB9LHtiZWdpbjoiXFxbIiwKZW5kOiJcXF1bXFwuJ10qIixyZWxldmFuY2U6MCxjb250YWluczpufSxlLkNPTU1FTlQoIi8vIiwiJCIpXS5jb25jYXQobil9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicHVwcGV0IiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKY29uc3Qgcz1lLkNPTU1FTlQoIiMiLCIkIikscj0iKFtBLVphLXpfXXw6OikoXFx3fDo6KSoiLGE9ZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7CmJlZ2luOnJ9KSxuPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiXFwkIityfSxpPXtjbGFzc05hbWU6InN0cmluZyIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl0sdmFyaWFudHM6W3tiZWdpbjovJy8sZW5kOi8nL30se2JlZ2luOi8iLyxlbmQ6LyIvCn1dfTtyZXR1cm57bmFtZToiUHVwcGV0IixhbGlhc2VzOlsicHAiXSxjb250YWluczpbcyxuLGkse2JlZ2luS2V5d29yZHM6ImNsYXNzIiwKZW5kOiJcXHt8OyIsaWxsZWdhbDovPS8sY29udGFpbnM6W2Esc119LHtiZWdpbktleXdvcmRzOiJkZWZpbmUiLGVuZDovXHsvLApjb250YWluczpbe2NsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46ZS5JREVOVF9SRSxlbmRzUGFyZW50OiEwfV19LHsKYmVnaW46ZS5JREVOVF9SRSsiXFxzK1xceyIscmV0dXJuQmVnaW46ITAsZW5kOi9cUy8sY29udGFpbnM6W3sKY2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjplLklERU5UX1JFfSx7YmVnaW46L1x7LyxlbmQ6L1x9LyxrZXl3b3Jkczp7CmtleXdvcmQ6ImFuZCBjYXNlIGRlZmF1bHQgZWxzZSBlbHNpZiBmYWxzZSBpZiBpbiBpbXBvcnQgZW5oZXJpdHMgbm9kZSBvciB0cnVlIHVuZGVmIHVubGVzcyBtYWluIHNldHRpbmdzICRzdHJpbmcgIiwKbGl0ZXJhbDoiYWxpYXMgYXVkaXQgYmVmb3JlIGxvZ2xldmVsIG5vb3AgcmVxdWlyZSBzdWJzY3JpYmUgdGFnIG93bmVyIGVuc3VyZSBncm91cCBtb2RlIG5hbWV8MCBjaGFuZ2VzIGNvbnRleHQgZm9yY2UgaW5jbCBsZW5zIGxvYWRfcGF0aCBvbmx5aWYgcHJvdmlkZXIgcmV0dXJucyByb290IHNob3dfZGlmZiB0eXBlX2NoZWNrIGVuX2FkZHJlc3MgaXBfYWRkcmVzcyByZWFsbmFtZSBjb21tYW5kIGVudmlyb25tZW50IGhvdXIgbW9udXRlIG1vbnRoIG1vbnRoZGF5IHNwZWNpYWwgdGFyZ2V0IHdlZWtkYXkgY3JlYXRlcyBjd2Qgb2dvdXRwdXQgcmVmcmVzaCByZWZyZXNob25seSB0cmllcyB0cnlfc2xlZXAgdW1hc2sgYmFja3VwIGNoZWNrc3VtIGNvbnRlbnQgY3RpbWUgZm9yY2UgaWdub3JlIGxpbmtzIG10aW1lIHB1cmdlIHJlY3Vyc2UgcmVjdXJzZWxpbWl0IHJlcGxhY2Ugc2VsaW51eF9pZ25vcmVfZGVmYXVsdHMgc2VscmFuZ2Ugc2Vscm9sZSBzZWx0eXBlIHNlbHVzZXIgc291cmNlIHNvdWlyY2VfcGVybWlzc2lvbnMgc291cmNlc2VsZWN0IHZhbGlkYXRlX2NtZCB2YWxpZGF0ZV9yZXBsYWNlbWVudCBhbGxvd2R1cGUgYXR0cmlidXRlX21lbWJlcnNoaXAgYXV0aF9tZW1iZXJzaGlwIGZvcmNlbG9jYWwgZ2lkIGlhX2xvYWRfbW9kdWxlIG1lbWJlcnMgc3lzdGVtIGhvc3RfYWxpYXNlcyBpcCBhbGxvd2VkX3RydW5rX3ZsYW5zIGRlc2NyaXB0aW9uIGRldmljZV91cmwgZHVwbGV4IGVuY2Fwc3VsYXRpb24gZXRoZXJjaGFubmVsIG5hdGl2ZV92bGFuIHNwZWVkIHByaW5jaXBhbHMgYWxsb3dfcm9vdCBhdXRoX2NsYXNzIGF1dGhfdHlwZSBhdXRoZW50aWNhdGVfdXNlciBrX29mX24gbWVjaGFuaXNtcyBydWxlIHNlc3Npb25fb3duZXIgc2hhcmVkIG9wdGlvbnMgZGV2aWNlIGZzdHlwZSBlbmFibGUgaGFzcmVzdGFydCBkaXJlY3RvcnkgcHJlc2VudCBhYnNlbnQgbGluayBhdGJvb3QgYmxvY2tkZXZpY2UgZGV2aWNlIGR1bXAgcGFzcyByZW1vdW50cyBwb2xsZXJfdGFnIHVzZSBtZXNzYWdlIHdpdGhwYXRoIGFkbWluZmlsZSBhbGxvd192aXJ0dWFsIGFsbG93Y2Ryb20gY2F0ZWdvcnkgY29uZmlnZmlsZXMgZmxhdm9yIGluc3RhbGxfb3B0aW9ucyBpbnN0YW5jZSBwYWNrYWdlX3NldHRpbmdzIHBsYXRmb3JtIHJlc3BvbnNlZmlsZSBzdGF0dXMgdW5pbnN0YWxsX29wdGlvbnMgdmVuZG9yIHVubGVzc19zeXN0ZW1fdXNlciB1bmxlc3NfdWlkIGJpbmFyeSBjb250cm9sIGZsYWdzIGhhc3N0YXR1cyBtYW5pZmVzdCBwYXR0ZXJuIHJlc3RhcnQgcnVubmluZyBzdGFydCBzdG9wIGFsbG93ZHVwZSBhdXRocyBleHBpcnkgZ2lkIGdyb3VwcyBob21lIGl0ZXJhdGlvbnMga2V5X21lbWJlcnNoaXAga2V5cyBtYW5hZ2Vob21lIG1lbWJlcnNoaXAgcGFzc3dvcmQgcGFzc3dvcmRfbWF4X2FnZSBwYXNzd29yZF9taW5fYWdlIHByb2ZpbGVfbWVtYmVyc2hpcCBwcm9maWxlcyBwcm9qZWN0IHB1cmdlX3NzaF9rZXlzIHJvbGVfbWVtYmVyc2hpcCByb2xlcyBzYWx0IHNoZWxsIHVpZCBiYXNldXJsIGNvc3QgZGVzY3IgZW5hYmxlZCBlbmFibGVncm91cHMgZXhjbHVkZSBmYWlsb3Zlcm1ldGhvZCBncGdjaGVjayBncGdrZXkgaHR0cF9jYWNoaW5nIGluY2x1ZGUgaW5jbHVkZXBrZ3Mga2VlcGFsaXZlIG1ldGFkYXRhX2V4cGlyZSBtZXRhbGluayBtaXJyb3JsaXN0IHByaW9yaXR5IHByb3RlY3QgcHJveHkgcHJveHlfcGFzc3dvcmQgcHJveHlfdXNlcm5hbWUgcmVwb19ncGdjaGVjayBzM19lbmFibGVkIHNraXBfaWZfdW5hdmFpbGFibGUgc3NsY2FjZXJ0IHNzbGNsaWVudGNlcnQgc3NsY2xpZW50a2V5IHNzbHZlcmlmeSBtb3VudGVkIiwKYnVpbHRfaW46ImFyY2hpdGVjdHVyZSBhdWdlYXN2ZXJzaW9uIGJsb2NrZGV2aWNlcyBib2FyZG1hbnVmYWN0dXJlciBib2FyZHByb2R1Y3RuYW1lIGJvYXJkc2VyaWFsbnVtYmVyIGNma2V5IGRoY3Bfc2VydmVycyBkb21haW4gZWMyXyBlYzJfdXNlcmRhdGEgZmFjdGVydmVyc2lvbiBmaWxlc3lzdGVtcyBsZG9tIGZxZG4gZ2lkIGhhcmR3YXJlaXNhIGhhcmR3YXJlbW9kZWwgaG9zdG5hbWUgaWR8MCBpbnRlcmZhY2VzIGlwYWRkcmVzcyBpcGFkZHJlc3NfIGlwYWRkcmVzczYgaXBhZGRyZXNzNl8gaXBob3N0bnVtYmVyIGlzX3ZpcnR1YWwga2VybmVsIGtlcm5lbG1hanZlcnNpb24ga2VybmVscmVsZWFzZSBrZXJuZWx2ZXJzaW9uIGtlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbiBsc2JkaXN0Y29kZW5hbWUgbHNiZGlzdGRlc2NyaXB0aW9uIGxzYmRpc3RpZCBsc2JkaXN0cmVsZWFzZSBsc2JtYWpkaXN0cmVsZWFzZSBsc2JtaW5vcmRpc3RyZWxlYXNlIGxzYnJlbGVhc2UgbWFjYWRkcmVzcyBtYWNhZGRyZXNzXyBtYWNvc3hfYnVpbGR2ZXJzaW9uIG1hY29zeF9wcm9kdWN0bmFtZSBtYWNvc3hfcHJvZHVjdHZlcnNpb24gbWFjb3N4X3Byb2R1Y3R2ZXJzb25fbWFqb3IgbWFjb3N4X3Byb2R1Y3R2ZXJzaW9uX21pbm9yIG1hbnVmYWN0dXJlciBtZW1vcnlmcmVlIG1lbW9yeXNpemUgbmV0bWFzayBtZXRtYXNrXyBuZXR3b3JrXyBvcGVyYXRpbmdzeXN0ZW0gb3BlcmF0aW5nc3lzdGVtbWFqcmVsZWFzZSBvcGVyYXRpbmdzeXN0ZW1yZWxlYXNlIG9zZmFtaWx5IHBhcnRpdGlvbnMgcGF0aCBwaHlzaWNhbHByb2Nlc3NvcmNvdW50IHByb2Nlc3NvciBwcm9jZXNzb3Jjb3VudCBwcm9kdWN0bmFtZSBwcyBwdXBwZXR2ZXJzaW9uIHJ1YnlzaXRlZGlyIHJ1Ynl2ZXJzaW9uIHNlbGludXggc2VsaW51eF9jb25maWdfbW9kZSBzZWxpbnV4X2NvbmZpZ19wb2xpY3kgc2VsaW51eF9jdXJyZW50X21vZGUgc2VsaW51eF9jdXJyZW50X21vZGUgc2VsaW51eF9lbmZvcmNlZCBzZWxpbnV4X3BvbGljeXZlcnNpb24gc2VyaWFsbnVtYmVyIHNwXyBzc2hkc2FrZXkgc3NoZWNkc2FrZXkgc3NocnNha2V5IHN3YXBlbmNyeXB0ZWQgc3dhcGZyZWUgc3dhcHNpemUgdGltZXpvbmUgdHlwZSB1bmlxdWVpZCB1cHRpbWUgdXB0aW1lX2RheXMgdXB0aW1lX2hvdXJzIHVwdGltZV9zZWNvbmRzIHV1aWQgdmlydHVhbCB2bGFucyB4ZW5kb21haW5zIHpmc192ZXJzaW9uIHpvbmVuYWUgem9uZXMgenBvb2xfdmVyc2lvbiIKfSxyZWxldmFuY2U6MCxjb250YWluczpbaSxzLHtiZWdpbjoiW2EtekEtWl9dK1xccyo9PiIscmV0dXJuQmVnaW46ITAsZW5kOiI9PiIsCmNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJhdHRyIixiZWdpbjplLklERU5UX1JFfV19LHtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIiwKcmVsZXZhbmNlOjB9LG5dfV0scmVsZXZhbmNlOjB9XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJtYXRoZW1hdGljYSIsKCgpPT57InVzZSBzdHJpY3QiCjtjb25zdCBlPVsiQUFTVHJpYW5nbGUiLCJBYmVsaWFuR3JvdXAiLCJBYm9ydCIsIkFib3J0S2VybmVscyIsIkFib3J0UHJvdGVjdCIsIkFib3J0U2NoZWR1bGVkVGFzayIsIkFib3ZlIiwiQWJzIiwiQWJzQXJnIiwiQWJzQXJnUGxvdCIsIkFic29sdXRlIiwiQWJzb2x1dGVDb3JyZWxhdGlvbiIsIkFic29sdXRlQ29ycmVsYXRpb25GdW5jdGlvbiIsIkFic29sdXRlQ3VycmVudFZhbHVlIiwiQWJzb2x1dGVEYXNoaW5nIiwiQWJzb2x1dGVGaWxlTmFtZSIsIkFic29sdXRlT3B0aW9ucyIsIkFic29sdXRlUG9pbnRTaXplIiwiQWJzb2x1dGVUaGlja25lc3MiLCJBYnNvbHV0ZVRpbWUiLCJBYnNvbHV0ZVRpbWluZyIsIkFjY2VwdGFuY2VUaHJlc2hvbGQiLCJBY2NvdW50aW5nRm9ybSIsIkFjY3VtdWxhdGUiLCJBY2N1cmFjeSIsIkFjY3VyYWN5R29hbCIsIkFjdGlvbkRlbGF5IiwiQWN0aW9uTWVudSIsIkFjdGlvbk1lbnVCb3giLCJBY3Rpb25NZW51Qm94T3B0aW9ucyIsIkFjdGl2YXRlIiwiQWN0aXZlIiwiQWN0aXZlQ2xhc3NpZmljYXRpb24iLCJBY3RpdmVDbGFzc2lmaWNhdGlvbk9iamVjdCIsIkFjdGl2ZUl0ZW0iLCJBY3RpdmVQcmVkaWN0aW9uIiwiQWN0aXZlUHJlZGljdGlvbk9iamVjdCIsIkFjdGl2ZVN0eWxlIiwiQWN5Y2xpY0dyYXBoUSIsIkFkZE9uSGVscFBhdGgiLCJBZGRTaWRlcyIsIkFkZFRvIiwiQWRkVG9TZWFyY2hJbmRleCIsIkFkZFVzZXJzIiwiQWRqYWNlbmN5R3JhcGgiLCJBZGphY2VuY3lMaXN0IiwiQWRqYWNlbmN5TWF0cml4IiwiQWRqYWNlbnRNZXNoQ2VsbHMiLCJBZGp1c3RtZW50Qm94IiwiQWRqdXN0bWVudEJveE9wdGlvbnMiLCJBZGp1c3RUaW1lU2VyaWVzRm9yZWNhc3QiLCJBZG1pbmlzdHJhdGl2ZURpdmlzaW9uRGF0YSIsIkFmZmluZUhhbGZTcGFjZSIsIkFmZmluZVNwYWNlIiwiQWZmaW5lU3RhdGVTcGFjZU1vZGVsIiwiQWZmaW5lVHJhbnNmb3JtIiwiQWZ0ZXIiLCJBZ2dyZWdhdGVkRW50aXR5Q2xhc3MiLCJBZ2dyZWdhdGlvbkxheWVyIiwiQWlyY3JhZnREYXRhIiwiQWlycG9ydERhdGEiLCJBaXJQcmVzc3VyZURhdGEiLCJBaXJUZW1wZXJhdHVyZURhdGEiLCJBaXJ5QWkiLCJBaXJ5QWlQcmltZSIsIkFpcnlBaVplcm8iLCJBaXJ5QmkiLCJBaXJ5QmlQcmltZSIsIkFpcnlCaVplcm8iLCJBbGdlYnJhaWNJbnRlZ2VyUSIsIkFsZ2VicmFpY051bWJlciIsIkFsZ2VicmFpY051bWJlckRlbm9taW5hdG9yIiwiQWxnZWJyYWljTnVtYmVyTm9ybSIsIkFsZ2VicmFpY051bWJlclBvbHlub21pYWwiLCJBbGdlYnJhaWNOdW1iZXJUcmFjZSIsIkFsZ2VicmFpY1J1bGVzIiwiQWxnZWJyYWljUnVsZXNEYXRhIiwiQWxnZWJyYWljcyIsIkFsZ2VicmFpY1VuaXRRIiwiQWxpZ25tZW50IiwiQWxpZ25tZW50TWFya2VyIiwiQWxpZ25tZW50UG9pbnQiLCJBbGwiLCJBbGxvd0FkdWx0Q29udGVudCIsIkFsbG93ZWRDbG91ZEV4dHJhUGFyYW1ldGVycyIsIkFsbG93ZWRDbG91ZFBhcmFtZXRlckV4dGVuc2lvbnMiLCJBbGxvd2VkRGltZW5zaW9ucyIsIkFsbG93ZWRGcmVxdWVuY3lSYW5nZSIsIkFsbG93ZWRIZWFkcyIsIkFsbG93R3JvdXBDbG9zZSIsIkFsbG93SW5jb21wbGV0ZSIsIkFsbG93SW5saW5lQ2VsbHMiLCJBbGxvd0tlcm5lbEluaXRpYWxpemF0aW9uIiwiQWxsb3dMb29zZUdyYW1tYXIiLCJBbGxvd1JldmVyc2VHcm91cENsb3NlIiwiQWxsb3dTY3JpcHRMZXZlbENoYW5nZSIsIkFsbG93VmVyc2lvblVwZGF0ZSIsIkFsbFRydWUiLCJBbHBoYWJldCIsIkFscGhhYmV0aWNPcmRlciIsIkFscGhhYmV0aWNTb3J0IiwiQWxwaGFDaGFubmVsIiwiQWx0ZXJuYXRlSW1hZ2UiLCJBbHRlcm5hdGluZ0ZhY3RvcmlhbCIsIkFsdGVybmF0aW5nR3JvdXAiLCJBbHRlcm5hdGl2ZUh5cG90aGVzaXMiLCJBbHRlcm5hdGl2ZXMiLCJBbHRpdHVkZU1ldGhvZCIsIkFtYmllbnRMaWdodCIsIkFtYmlndWl0eUZ1bmN0aW9uIiwiQW1iaWd1aXR5TGlzdCIsIkFuYWx5dGljIiwiQW5hdG9teURhdGEiLCJBbmF0b215Rm9ybSIsIkFuYXRvbXlQbG90M0QiLCJBbmF0b215U2tpblN0eWxlIiwiQW5hdG9teVN0eWxpbmciLCJBbmNob3JlZFNlYXJjaCIsIkFuZCIsIkFuZGVyc29uRGFybGluZ1Rlc3QiLCJBbmdlckoiLCJBbmdsZUJpc2VjdG9yIiwiQW5nbGVCcmFja2V0IiwiQW5nbGVQYXRoIiwiQW5nbGVQYXRoM0QiLCJBbmdsZVZlY3RvciIsIkFuZ3VsYXJHYXVnZSIsIkFuaW1hdGUiLCJBbmltYXRpb25DeWNsZU9mZnNldCIsIkFuaW1hdGlvbkN5Y2xlUmVwZXRpdGlvbnMiLCJBbmltYXRpb25EaXJlY3Rpb24iLCJBbmltYXRpb25EaXNwbGF5VGltZSIsIkFuaW1hdGlvblJhdGUiLCJBbmltYXRpb25SZXBldGl0aW9ucyIsIkFuaW1hdGlvblJ1bm5pbmciLCJBbmltYXRpb25SdW5UaW1lIiwiQW5pbWF0aW9uVGltZUluZGV4IiwiQW5pbWF0b3IiLCJBbmltYXRvckJveCIsIkFuaW1hdG9yQm94T3B0aW9ucyIsIkFuaW1hdG9yRWxlbWVudHMiLCJBbm5vdGF0ZSIsIkFubm90YXRpb24iLCJBbm5vdGF0aW9uRGVsZXRlIiwiQW5ub3RhdGlvbktleXMiLCJBbm5vdGF0aW9uUnVsZXMiLCJBbm5vdGF0aW9uVmFsdWUiLCJBbm51aXR5IiwiQW5udWl0eUR1ZSIsIkFubnVsdXMiLCJBbm9tYWx5RGV0ZWN0aW9uIiwiQW5vbWFseURldGVjdG9yIiwiQW5vbWFseURldGVjdG9yRnVuY3Rpb24iLCJBbm9ueW1vdXMiLCJBbnRpYWxpYXNpbmciLCJBbnRpaGVybWl0aWFuTWF0cml4USIsIkFudGlzeW1tZXRyaWMiLCJBbnRpc3ltbWV0cmljTWF0cml4USIsIkFudG9ueW1zIiwiQW55T3JkZXIiLCJBbnlTdWJzZXQiLCJBbnlUcnVlIiwiQXBhcnQiLCJBcGFydFNxdWFyZUZyZWUiLCJBUElGdW5jdGlvbiIsIkFwcGVhcmFuY2UiLCJBcHBlYXJhbmNlRWxlbWVudHMiLCJBcHBlYXJhbmNlUnVsZXMiLCJBcHBlbGxGMSIsIkFwcGVuZCIsIkFwcGVuZENoZWNrIiwiQXBwZW5kTGF5ZXIiLCJBcHBlbmRUbyIsIkFwcGx5IiwiQXBwbHlTaWRlcyIsIkFyY0NvcyIsIkFyY0Nvc2giLCJBcmNDb3QiLCJBcmNDb3RoIiwiQXJjQ3NjIiwiQXJjQ3NjaCIsIkFyY0N1cnZhdHVyZSIsIkFSQ0hQcm9jZXNzIiwiQXJjTGVuZ3RoIiwiQXJjU2VjIiwiQXJjU2VjaCIsIkFyY1NpbiIsIkFyY1NpbkRpc3RyaWJ1dGlvbiIsIkFyY1NpbmgiLCJBcmNUYW4iLCJBcmNUYW5oIiwiQXJlYSIsIkFyZyIsIkFyZ01heCIsIkFyZ01pbiIsIkFyZ3VtZW50Q291bnRRIiwiQVJJTUFQcm9jZXNzIiwiQXJpdGhtZXRpY0dlb21ldHJpY01lYW4iLCJBUk1BUHJvY2VzcyIsIkFyb3VuZCIsIkFyb3VuZFJlcGxhY2UiLCJBUlByb2Nlc3MiLCJBcnJheSIsIkFycmF5Q29tcG9uZW50cyIsIkFycmF5RGVwdGgiLCJBcnJheUZpbHRlciIsIkFycmF5RmxhdHRlbiIsIkFycmF5TWVzaCIsIkFycmF5UGFkIiwiQXJyYXlQbG90IiwiQXJyYXlRIiwiQXJyYXlSZXNhbXBsZSIsIkFycmF5UmVzaGFwZSIsIkFycmF5UnVsZXMiLCJBcnJheXMiLCJBcnJvdyIsIkFycm93M0RCb3giLCJBcnJvd0JveCIsIkFycm93aGVhZHMiLCJBU0FUcmlhbmdsZSIsIkFzayIsIkFza0FwcGVuZCIsIkFza0NvbmZpcm0iLCJBc2tEaXNwbGF5IiwiQXNrZWRRIiwiQXNrZWRWYWx1ZSIsIkFza0Z1bmN0aW9uIiwiQXNrU3RhdGUiLCJBc2tUZW1wbGF0ZURpc3BsYXkiLCJBc3BlY3RSYXRpbyIsIkFzcGVjdFJhdGlvRml4ZWQiLCJBc3NlcnQiLCJBc3NvY2lhdGVUbyIsIkFzc29jaWF0aW9uIiwiQXNzb2NpYXRpb25Gb3JtYXQiLCJBc3NvY2lhdGlvbk1hcCIsIkFzc29jaWF0aW9uUSIsIkFzc29jaWF0aW9uVGhyZWFkIiwiQXNzdW1lRGV0ZXJtaW5pc3RpYyIsIkFzc3VtaW5nIiwiQXNzdW1wdGlvbnMiLCJBc3Ryb25vbWljYWxEYXRhIiwiQXN5bXB0b3RpYyIsIkFzeW1wdG90aWNEU29sdmVWYWx1ZSIsIkFzeW1wdG90aWNFcXVhbCIsIkFzeW1wdG90aWNFcXVpdmFsZW50IiwiQXN5bXB0b3RpY0dyZWF0ZXIiLCJBc3ltcHRvdGljR3JlYXRlckVxdWFsIiwiQXN5bXB0b3RpY0ludGVncmF0ZSIsIkFzeW1wdG90aWNMZXNzIiwiQXN5bXB0b3RpY0xlc3NFcXVhbCIsIkFzeW1wdG90aWNPdXRwdXRUcmFja2VyIiwiQXN5bXB0b3RpY1Byb2R1Y3QiLCJBc3ltcHRvdGljUlNvbHZlVmFsdWUiLCJBc3ltcHRvdGljU29sdmUiLCJBc3ltcHRvdGljU3VtIiwiQXN5bmNocm9ub3VzIiwiQXN5bmNocm9ub3VzVGFza09iamVjdCIsIkFzeW5jaHJvbm91c1Rhc2tzIiwiQXRvbSIsIkF0b21Db29yZGluYXRlcyIsIkF0b21Db3VudCIsIkF0b21EaWFncmFtQ29vcmRpbmF0ZXMiLCJBdG9tTGlzdCIsIkF0b21RIiwiQXR0ZW50aW9uTGF5ZXIiLCJBdHRyaWJ1dGVzIiwiQXVkaW8iLCJBdWRpb0FtcGxpZnkiLCJBdWRpb0Fubm90YXRlIiwiQXVkaW9Bbm5vdGF0aW9uTG9va3VwIiwiQXVkaW9CbG9ja01hcCIsIkF1ZGlvQ2FwdHVyZSIsIkF1ZGlvQ2hhbm5lbEFzc2lnbm1lbnQiLCJBdWRpb0NoYW5uZWxDb21iaW5lIiwiQXVkaW9DaGFubmVsTWl4IiwiQXVkaW9DaGFubmVscyIsIkF1ZGlvQ2hhbm5lbFNlcGFyYXRlIiwiQXVkaW9EYXRhIiwiQXVkaW9EZWxheSIsIkF1ZGlvRGVsZXRlIiwiQXVkaW9EZXZpY2UiLCJBdWRpb0Rpc3RhbmNlIiwiQXVkaW9FbmNvZGluZyIsIkF1ZGlvRmFkZSIsIkF1ZGlvRnJlcXVlbmN5U2hpZnQiLCJBdWRpb0dlbmVyYXRvciIsIkF1ZGlvSWRlbnRpZnkiLCJBdWRpb0lucHV0RGV2aWNlIiwiQXVkaW9JbnNlcnQiLCJBdWRpb0luc3RhbmNlUSIsIkF1ZGlvSW50ZXJ2YWxzIiwiQXVkaW9Kb2luIiwiQXVkaW9MYWJlbCIsIkF1ZGlvTGVuZ3RoIiwiQXVkaW9Mb2NhbE1lYXN1cmVtZW50cyIsIkF1ZGlvTG9vcGluZyIsIkF1ZGlvTG91ZG5lc3MiLCJBdWRpb01lYXN1cmVtZW50cyIsIkF1ZGlvTm9ybWFsaXplIiwiQXVkaW9PdXRwdXREZXZpY2UiLCJBdWRpb092ZXJsYXkiLCJBdWRpb1BhZCIsIkF1ZGlvUGFuIiwiQXVkaW9QYXJ0aXRpb24iLCJBdWRpb1BhdXNlIiwiQXVkaW9QaXRjaFNoaWZ0IiwiQXVkaW9QbGF5IiwiQXVkaW9QbG90IiwiQXVkaW9RIiwiQXVkaW9SZWNvcmQiLCJBdWRpb1JlcGxhY2UiLCJBdWRpb1Jlc2FtcGxlIiwiQXVkaW9SZXZlcmIiLCJBdWRpb1JldmVyc2UiLCJBdWRpb1NhbXBsZVJhdGUiLCJBdWRpb1NwZWN0cmFsTWFwIiwiQXVkaW9TcGVjdHJhbFRyYW5zZm9ybWF0aW9uIiwiQXVkaW9TcGxpdCIsIkF1ZGlvU3RvcCIsIkF1ZGlvU3RyZWFtIiwiQXVkaW9TdHJlYW1zIiwiQXVkaW9UaW1lU3RyZXRjaCIsIkF1ZGlvVHJhY2tzIiwiQXVkaW9UcmltIiwiQXVkaW9UeXBlIiwiQXVnbWVudGVkUG9seWhlZHJvbiIsIkF1Z21lbnRlZFN5bW1ldHJpY1BvbHlub21pYWwiLCJBdXRoZW50aWNhdGUiLCJBdXRoZW50aWNhdGlvbiIsIkF1dGhlbnRpY2F0aW9uRGlhbG9nIiwiQXV0b0FjdGlvbiIsIkF1dG9jb21wbGV0ZSIsIkF1dG9jb21wbGV0aW9uRnVuY3Rpb24iLCJBdXRvQ29weSIsIkF1dG9jb3JyZWxhdGlvblRlc3QiLCJBdXRvRGVsZXRlIiwiQXV0b0V2YWx1YXRlRXZlbnRzIiwiQXV0b0dlbmVyYXRlZFBhY2thZ2UiLCJBdXRvSW5kZW50IiwiQXV0b0luZGVudFNwYWNpbmdzIiwiQXV0b0l0YWxpY1dvcmRzIiwiQXV0b2xvYWRQYXRoIiwiQXV0b01hdGNoIiwiQXV0b21hdGljIiwiQXV0b21hdGljSW1hZ2VTaXplIiwiQXV0b011bHRpcGxpY2F0aW9uU3ltYm9sIiwiQXV0b051bWJlckZvcm1hdHRpbmciLCJBdXRvT3Blbk5vdGVib29rcyIsIkF1dG9PcGVuUGFsZXR0ZXMiLCJBdXRvUXVvdGVDaGFyYWN0ZXJzIiwiQXV0b1JlZnJlc2hlZCIsIkF1dG9SZW1vdmUiLCJBdXRvcnVuU2VxdWVuY2luZyIsIkF1dG9TY2FsaW5nIiwiQXV0b1Njcm9sbCIsIkF1dG9TcGFjaW5nIiwiQXV0b1N0eWxlT3B0aW9ucyIsIkF1dG9TdHlsZVdvcmRzIiwiQXV0b1N1Ym1pdHRpbmciLCJBeGVzIiwiQXhlc0VkZ2UiLCJBeGVzTGFiZWwiLCJBeGVzT3JpZ2luIiwiQXhlc1N0eWxlIiwiQXhpb21hdGljVGhlb3J5IiwiQXhpcyIsIkJhYnlNb25zdGVyR3JvdXBCIiwiQmFjayIsIkJhY2tncm91bmQiLCJCYWNrZ3JvdW5kQXBwZWFyYW5jZSIsIkJhY2tncm91bmRUYXNrc1NldHRpbmdzIiwiQmFja3NsYXNoIiwiQmFja3N1YnN0aXR1dGlvbiIsIkJhY2t3YXJkIiwiQmFsbCIsIkJhbmQiLCJCYW5kcGFzc0ZpbHRlciIsIkJhbmRzdG9wRmlsdGVyIiwiQmFyYWJhc2lBbGJlcnRHcmFwaERpc3RyaWJ1dGlvbiIsIkJhckNoYXJ0IiwiQmFyQ2hhcnQzRCIsIkJhcmNvZGVJbWFnZSIsIkJhcmNvZGVSZWNvZ25pemUiLCJCYXJpbmdoYXVzSGVuemVUZXN0IiwiQmFyTGVnZW5kIiwiQmFybG93UHJvc2NoYW5JbXBvcnRhbmNlIiwiQmFybmVzRyIsIkJhck9yaWdpbiIsIkJhclNwYWNpbmciLCJCYXJ0bGV0dEhhbm5XaW5kb3ciLCJCYXJ0bGV0dFdpbmRvdyIsIkJhc2VEZWNvZGUiLCJCYXNlRW5jb2RlIiwiQmFzZUZvcm0iLCJCYXNlbGluZSIsIkJhc2VsaW5lUG9zaXRpb24iLCJCYXNlU3R5bGUiLCJCYXNpY1JlY3VycmVudExheWVyIiwiQmF0Y2hOb3JtYWxpemF0aW9uTGF5ZXIiLCJCYXRjaFNpemUiLCJCYXRlc0Rpc3RyaWJ1dGlvbiIsIkJhdHRsZUxlbWFyaWVXYXZlbGV0IiwiQmF5ZXNpYW5NYXhpbWl6YXRpb24iLCJCYXllc2lhbk1heGltaXphdGlvbk9iamVjdCIsIkJheWVzaWFuTWluaW1pemF0aW9uIiwiQmF5ZXNpYW5NaW5pbWl6YXRpb25PYmplY3QiLCJCZWNhdXNlIiwiQmVja21hbm5EaXN0cmlidXRpb24iLCJCZWVwIiwiQmVmb3JlIiwiQmVnaW4iLCJCZWdpbkRpYWxvZ1BhY2tldCIsIkJlZ2luRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCIsIkJlZ2luUGFja2FnZSIsIkJlbGxCIiwiQmVsbFkiLCJCZWxvdyIsIkJlbmZvcmREaXN0cmlidXRpb24iLCJCZW5pbmlEaXN0cmlidXRpb24iLCJCZW5rdGFuZGVyR2licmF0RGlzdHJpYnV0aW9uIiwiQmVua3RhbmRlcldlaWJ1bGxEaXN0cmlidXRpb24iLCJCZXJub3VsbGlCIiwiQmVybm91bGxpRGlzdHJpYnV0aW9uIiwiQmVybm91bGxpR3JhcGhEaXN0cmlidXRpb24iLCJCZXJub3VsbGlQcm9jZXNzIiwiQmVybnN0ZWluQmFzaXMiLCJCZXNzZWxGaWx0ZXJNb2RlbCIsIkJlc3NlbEkiLCJCZXNzZWxKIiwiQmVzc2VsSlplcm8iLCJCZXNzZWxLIiwiQmVzc2VsWSIsIkJlc3NlbFlaZXJvIiwiQmV0YSIsIkJldGFCaW5vbWlhbERpc3RyaWJ1dGlvbiIsIkJldGFEaXN0cmlidXRpb24iLCJCZXRhTmVnYXRpdmVCaW5vbWlhbERpc3RyaWJ1dGlvbiIsIkJldGFQcmltZURpc3RyaWJ1dGlvbiIsIkJldGFSZWd1bGFyaXplZCIsIkJldHdlZW4iLCJCZXR3ZWVubmVzc0NlbnRyYWxpdHkiLCJCZXZlbGVkUG9seWhlZHJvbiIsIkJlemllckN1cnZlIiwiQmV6aWVyQ3VydmUzREJveCIsIkJlemllckN1cnZlM0RCb3hPcHRpb25zIiwiQmV6aWVyQ3VydmVCb3giLCJCZXppZXJDdXJ2ZUJveE9wdGlvbnMiLCJCZXppZXJGdW5jdGlvbiIsIkJpbGF0ZXJhbEZpbHRlciIsIkJpbmFyaXplIiwiQmluYXJ5RGVzZXJpYWxpemUiLCJCaW5hcnlEaXN0YW5jZSIsIkJpbmFyeUZvcm1hdCIsIkJpbmFyeUltYWdlUSIsIkJpbmFyeVJlYWQiLCJCaW5hcnlSZWFkTGlzdCIsIkJpbmFyeVNlcmlhbGl6ZSIsIkJpbmFyeVdyaXRlIiwiQmluQ291bnRzIiwiQmluTGlzdHMiLCJCaW5vbWlhbCIsIkJpbm9taWFsRGlzdHJpYnV0aW9uIiwiQmlub21pYWxQcm9jZXNzIiwiQmlub3JtYWxEaXN0cmlidXRpb24iLCJCaW9ydGhvZ29uYWxTcGxpbmVXYXZlbGV0IiwiQmlwYXJ0aXRlR3JhcGhRIiwiQmlxdWFkcmF0aWNGaWx0ZXJNb2RlbCIsIkJpcm5iYXVtSW1wb3J0YW5jZSIsIkJpcm5iYXVtU2F1bmRlcnNEaXN0cmlidXRpb24iLCJCaXRBbmQiLCJCaXRDbGVhciIsIkJpdEdldCIsIkJpdExlbmd0aCIsIkJpdE5vdCIsIkJpdE9yIiwiQml0U2V0IiwiQml0U2hpZnRMZWZ0IiwiQml0U2hpZnRSaWdodCIsIkJpdFhvciIsIkJpd2VpZ2h0TG9jYXRpb24iLCJCaXdlaWdodE1pZHZhcmlhbmNlIiwiQmxhY2siLCJCbGFja21hbkhhcnJpc1dpbmRvdyIsIkJsYWNrbWFuTnV0dGFsbFdpbmRvdyIsIkJsYWNrbWFuV2luZG93IiwiQmxhbmsiLCJCbGFua0Zvcm0iLCJCbGFua051bGxTZXF1ZW5jZSIsIkJsYW5rU2VxdWVuY2UiLCJCbGVuZCIsIkJsb2NrIiwiQmxvY2tjaGFpbkFkZHJlc3NEYXRhIiwiQmxvY2tjaGFpbkJhc2UiLCJCbG9ja2NoYWluQmxvY2tEYXRhIiwiQmxvY2tjaGFpbkNvbnRyYWN0VmFsdWUiLCJCbG9ja2NoYWluRGF0YSIsIkJsb2NrY2hhaW5HZXQiLCJCbG9ja2NoYWluS2V5RW5jb2RlIiwiQmxvY2tjaGFpblB1dCIsIkJsb2NrY2hhaW5Ub2tlbkRhdGEiLCJCbG9ja2NoYWluVHJhbnNhY3Rpb24iLCJCbG9ja2NoYWluVHJhbnNhY3Rpb25EYXRhIiwiQmxvY2tjaGFpblRyYW5zYWN0aW9uU2lnbiIsIkJsb2NrY2hhaW5UcmFuc2FjdGlvblN1Ym1pdCIsIkJsb2NrTWFwIiwiQmxvY2tSYW5kb20iLCJCbG9tcXZpc3RCZXRhIiwiQmxvbXF2aXN0QmV0YVRlc3QiLCJCbHVlIiwiQmx1ciIsIkJvZGVQbG90IiwiQm9obWFuV2luZG93IiwiQm9sZCIsIkJvbmQiLCJCb25kQ291bnQiLCJCb25kTGlzdCIsIkJvbmRRIiwiQm9va21hcmtzIiwiQm9vbGUiLCJCb29sZWFuQ29uc2VjdXRpdmVGdW5jdGlvbiIsIkJvb2xlYW5Db252ZXJ0IiwiQm9vbGVhbkNvdW50aW5nRnVuY3Rpb24iLCJCb29sZWFuRnVuY3Rpb24iLCJCb29sZWFuR3JhcGgiLCJCb29sZWFuTWF4dGVybXMiLCJCb29sZWFuTWluaW1pemUiLCJCb29sZWFuTWludGVybXMiLCJCb29sZWFuUSIsIkJvb2xlYW5SZWdpb24iLCJCb29sZWFucyIsIkJvb2xlYW5TdHJpbmdzIiwiQm9vbGVhblRhYmxlIiwiQm9vbGVhblZhcmlhYmxlcyIsIkJvcmRlckRpbWVuc2lvbnMiLCJCb3JlbFRhbm5lckRpc3RyaWJ1dGlvbiIsIkJvdHRvbSIsIkJvdHRvbUhhdFRyYW5zZm9ybSIsIkJvdW5kYXJ5RGlzY3JldGl6ZUdyYXBoaWNzIiwiQm91bmRhcnlEaXNjcmV0aXplUmVnaW9uIiwiQm91bmRhcnlNZXNoIiwiQm91bmRhcnlNZXNoUmVnaW9uIiwiQm91bmRhcnlNZXNoUmVnaW9uUSIsIkJvdW5kYXJ5U3R5bGUiLCJCb3VuZGVkUmVnaW9uUSIsIkJvdW5kaW5nUmVnaW9uIiwiQm91bmRzIiwiQm94IiwiQm94QmFzZWxpbmVTaGlmdCIsIkJveERhdGEiLCJCb3hEaW1lbnNpb25zIiwiQm94ZWQiLCJCb3hlcyIsIkJveEZvcm0iLCJCb3hGb3JtRm9ybWF0VHlwZXMiLCJCb3hGcmFtZSIsIkJveElEIiwiQm94TWFyZ2lucyIsIkJveE1hdHJpeCIsIkJveE9iamVjdCIsIkJveFJhdGlvcyIsIkJveFJvdGF0aW9uIiwiQm94Um90YXRpb25Qb2ludCIsIkJveFN0eWxlIiwiQm94V2hpc2tlckNoYXJ0IiwiQnJhIiwiQnJhY2tldGluZ0JhciIsIkJyYUtldCIsIkJyYXlDdXJ0aXNEaXN0YW5jZSIsIkJyZWFkdGhGaXJzdFNjYW4iLCJCcmVhayIsIkJyaWRnZURhdGEiLCJCcmlnaHRuZXNzRXF1YWxpemUiLCJCcm9hZGNhc3RTdGF0aW9uRGF0YSIsIkJyb3duIiwiQnJvd25Gb3JzeXRoZVRlc3QiLCJCcm93bmlhbkJyaWRnZVByb2Nlc3MiLCJCcm93c2VyQ2F0ZWdvcnkiLCJCU3BsaW5lQmFzaXMiLCJCU3BsaW5lQ3VydmUiLCJCU3BsaW5lQ3VydmUzREJveCIsIkJTcGxpbmVDdXJ2ZTNEQm94T3B0aW9ucyIsIkJTcGxpbmVDdXJ2ZUJveCIsIkJTcGxpbmVDdXJ2ZUJveE9wdGlvbnMiLCJCU3BsaW5lRnVuY3Rpb24iLCJCU3BsaW5lU3VyZmFjZSIsIkJTcGxpbmVTdXJmYWNlM0RCb3giLCJCU3BsaW5lU3VyZmFjZTNEQm94T3B0aW9ucyIsIkJ1YmJsZUNoYXJ0IiwiQnViYmxlQ2hhcnQzRCIsIkJ1YmJsZVNjYWxlIiwiQnViYmxlU2l6ZXMiLCJCdWlsZGluZ0RhdGEiLCJCdWxsZXRHYXVnZSIsIkJ1c2luZXNzRGF5USIsIkJ1dHRlcmZseUdyYXBoIiwiQnV0dGVyd29ydGhGaWx0ZXJNb2RlbCIsIkJ1dHRvbiIsIkJ1dHRvbkJhciIsIkJ1dHRvbkJveCIsIkJ1dHRvbkJveE9wdGlvbnMiLCJCdXR0b25DZWxsIiwiQnV0dG9uQ29udGVudHMiLCJCdXR0b25EYXRhIiwiQnV0dG9uRXZhbHVhdG9yIiwiQnV0dG9uRXhwYW5kYWJsZSIsIkJ1dHRvbkZyYW1lIiwiQnV0dG9uRnVuY3Rpb24iLCJCdXR0b25NYXJnaW5zIiwiQnV0dG9uTWluSGVpZ2h0IiwiQnV0dG9uTm90ZSIsIkJ1dHRvbk5vdGVib29rIiwiQnV0dG9uU291cmNlIiwiQnV0dG9uU3R5bGUiLCJCdXR0b25TdHlsZU1lbnVMaXN0aW5nIiwiQnl0ZSIsIkJ5dGVBcnJheSIsIkJ5dGVBcnJheUZvcm1hdCIsIkJ5dGVBcnJheVEiLCJCeXRlQXJyYXlUb1N0cmluZyIsIkJ5dGVDb3VudCIsIkJ5dGVPcmRlcmluZyIsIkMiLCJDYWNoZWRWYWx1ZSIsIkNhY2hlR3JhcGhpY3MiLCJDYWNoZVBlcnNpc3RlbmNlIiwiQ2FsZW5kYXJDb252ZXJ0IiwiQ2FsZW5kYXJEYXRhIiwiQ2FsZW5kYXJUeXBlIiwiQ2FsbG91dCIsIkNhbGxvdXRNYXJrZXIiLCJDYWxsb3V0U3R5bGUiLCJDYWxsUGFja2V0IiwiQ2FuYmVycmFEaXN0YW5jZSIsIkNhbmNlbCIsIkNhbmNlbEJ1dHRvbiIsIkNhbmRsZXN0aWNrQ2hhcnQiLCJDYW5vbmljYWxHcmFwaCIsIkNhbm9uaWNhbGl6ZVBvbHlnb24iLCJDYW5vbmljYWxpemVQb2x5aGVkcm9uIiwiQ2Fub25pY2FsTmFtZSIsIkNhbm9uaWNhbFdhcnBpbmdDb3JyZXNwb25kZW5jZSIsIkNhbm9uaWNhbFdhcnBpbmdEaXN0YW5jZSIsIkNhbnRvck1lc2giLCJDYW50b3JTdGFpcmNhc2UiLCJDYXAiLCJDYXBGb3JtIiwiQ2FwaXRhbERpZmZlcmVudGlhbEQiLCJDYXBpdGFsaXplIiwiQ2Fwc3VsZVNoYXBlIiwiQ2FwdHVyZVJ1bm5pbmciLCJDYXJkaW5hbEJTcGxpbmVCYXNpcyIsIkNhcmxlbWFuTGluZWFyaXplIiwiQ2FybWljaGFlbExhbWJkYSIsIkNhc2VPcmRlcmluZyIsIkNhc2VzIiwiQ2FzZVNlbnNpdGl2ZSIsIkNhc2hmbG93IiwiQ2Fzb3JhdGlhbiIsIkNhdGFsYW4iLCJDYXRhbGFuTnVtYmVyIiwiQ2F0Y2giLCJDYXRlZ29yaWNhbERpc3RyaWJ1dGlvbiIsIkNhdGVuYXRlIiwiQ2F0ZW5hdGVMYXllciIsIkNhdWNoeURpc3RyaWJ1dGlvbiIsIkNhdWNoeVdpbmRvdyIsIkNheWxleUdyYXBoIiwiQ0RGIiwiQ0RGRGVwbG95IiwiQ0RGSW5mb3JtYXRpb24iLCJDREZXYXZlbGV0IiwiQ2VpbGluZyIsIkNlbGVzdGlhbFN5c3RlbSIsIkNlbGwiLCJDZWxsQXV0b092ZXJ3cml0ZSIsIkNlbGxCYXNlbGluZSIsIkNlbGxCb3VuZGluZ0JveCIsIkNlbGxCcmFja2V0T3B0aW9ucyIsIkNlbGxDaGFuZ2VUaW1lcyIsIkNlbGxDb250ZW50cyIsIkNlbGxDb250ZXh0IiwiQ2VsbERpbmdiYXQiLCJDZWxsRHluYW1pY0V4cHJlc3Npb24iLCJDZWxsRWRpdER1cGxpY2F0ZSIsIkNlbGxFbGVtZW50c0JvdW5kaW5nQm94IiwiQ2VsbEVsZW1lbnRTcGFjaW5ncyIsIkNlbGxFcGlsb2ciLCJDZWxsRXZhbHVhdGlvbkR1cGxpY2F0ZSIsIkNlbGxFdmFsdWF0aW9uRnVuY3Rpb24iLCJDZWxsRXZhbHVhdGlvbkxhbmd1YWdlIiwiQ2VsbEV2ZW50QWN0aW9ucyIsIkNlbGxGcmFtZSIsIkNlbGxGcmFtZUNvbG9yIiwiQ2VsbEZyYW1lTGFiZWxNYXJnaW5zIiwiQ2VsbEZyYW1lTGFiZWxzIiwiQ2VsbEZyYW1lTWFyZ2lucyIsIkNlbGxHcm91cCIsIkNlbGxHcm91cERhdGEiLCJDZWxsR3JvdXBpbmciLCJDZWxsR3JvdXBpbmdSdWxlcyIsIkNlbGxIb3Jpem9udGFsU2Nyb2xsaW5nIiwiQ2VsbElEIiwiQ2VsbExhYmVsIiwiQ2VsbExhYmVsQXV0b0RlbGV0ZSIsIkNlbGxMYWJlbE1hcmdpbnMiLCJDZWxsTGFiZWxQb3NpdGlvbmluZyIsIkNlbGxMYWJlbFN0eWxlIiwiQ2VsbExhYmVsVGVtcGxhdGUiLCJDZWxsTWFyZ2lucyIsIkNlbGxPYmplY3QiLCJDZWxsT3BlbiIsIkNlbGxQcmludCIsIkNlbGxQcm9sb2ciLCJDZWxscyIsIkNlbGxTaXplIiwiQ2VsbFN0eWxlIiwiQ2VsbFRhZ3MiLCJDZWxsdWxhckF1dG9tYXRvbiIsIkNlbnNvcmVkRGlzdHJpYnV0aW9uIiwiQ2Vuc29yaW5nIiwiQ2VudGVyIiwiQ2VudGVyQXJyYXkiLCJDZW50ZXJEb3QiLCJDZW50cmFsRmVhdHVyZSIsIkNlbnRyYWxNb21lbnQiLCJDZW50cmFsTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIiwiQ2Vwc3Ryb2dyYW0iLCJDZXBzdHJvZ3JhbUFycmF5IiwiQ2Vwc3RydW1BcnJheSIsIkNGb3JtIiwiQ2hhbXBlcm5vd25lTnVtYmVyIiwiQ2hhbmdlT3B0aW9ucyIsIkNoYW5uZWxCYXNlIiwiQ2hhbm5lbEJyb2tlckFjdGlvbiIsIkNoYW5uZWxEYXRhYmluIiwiQ2hhbm5lbEhpc3RvcnlMZW5ndGgiLCJDaGFubmVsTGlzdGVuIiwiQ2hhbm5lbExpc3RlbmVyIiwiQ2hhbm5lbExpc3RlbmVycyIsIkNoYW5uZWxMaXN0ZW5lcldhaXQiLCJDaGFubmVsT2JqZWN0IiwiQ2hhbm5lbFByZVNlbmRGdW5jdGlvbiIsIkNoYW5uZWxSZWNlaXZlckZ1bmN0aW9uIiwiQ2hhbm5lbFNlbmQiLCJDaGFubmVsU3Vic2NyaWJlcnMiLCJDaGFuVmVzZUJpbmFyaXplIiwiQ2hhcmFjdGVyIiwiQ2hhcmFjdGVyQ291bnRzIiwiQ2hhcmFjdGVyRW5jb2RpbmciLCJDaGFyYWN0ZXJFbmNvZGluZ3NQYXRoIiwiQ2hhcmFjdGVyaXN0aWNGdW5jdGlvbiIsIkNoYXJhY3RlcmlzdGljUG9seW5vbWlhbCIsIkNoYXJhY3Rlck5hbWUiLCJDaGFyYWN0ZXJOb3JtYWxpemUiLCJDaGFyYWN0ZXJSYW5nZSIsIkNoYXJhY3RlcnMiLCJDaGFydEJhc2VTdHlsZSIsIkNoYXJ0RWxlbWVudERhdGEiLCJDaGFydEVsZW1lbnREYXRhRnVuY3Rpb24iLCJDaGFydEVsZW1lbnRGdW5jdGlvbiIsIkNoYXJ0RWxlbWVudHMiLCJDaGFydExhYmVscyIsIkNoYXJ0TGF5b3V0IiwiQ2hhcnRMZWdlbmRzIiwiQ2hhcnRTdHlsZSIsIkNoZWJ5c2hldjFGaWx0ZXJNb2RlbCIsIkNoZWJ5c2hldjJGaWx0ZXJNb2RlbCIsIkNoZWJ5c2hldkRpc3RhbmNlIiwiQ2hlYnlzaGV2VCIsIkNoZWJ5c2hldlUiLCJDaGVjayIsIkNoZWNrQWJvcnQiLCJDaGVja0FsbCIsIkNoZWNrYm94IiwiQ2hlY2tib3hCYXIiLCJDaGVja2JveEJveCIsIkNoZWNrYm94Qm94T3B0aW9ucyIsIkNoZW1pY2FsRGF0YSIsIkNoZXNzYm9hcmREaXN0YW5jZSIsIkNoaURpc3RyaWJ1dGlvbiIsIkNoaW5lc2VSZW1haW5kZXIiLCJDaGlTcXVhcmVEaXN0cmlidXRpb24iLCJDaG9pY2VCdXR0b25zIiwiQ2hvaWNlRGlhbG9nIiwiQ2hvbGVza3lEZWNvbXBvc2l0aW9uIiwiQ2hvcCIsIkNocm9tYXRpY2l0eVBsb3QiLCJDaHJvbWF0aWNpdHlQbG90M0QiLCJDaHJvbWF0aWNQb2x5bm9taWFsIiwiQ2lyY2xlIiwiQ2lyY2xlQm94IiwiQ2lyY2xlRG90IiwiQ2lyY2xlTWludXMiLCJDaXJjbGVQbHVzIiwiQ2lyY2xlUG9pbnRzIiwiQ2lyY2xlVGhyb3VnaCIsIkNpcmNsZVRpbWVzIiwiQ2lyY3VsYW50R3JhcGgiLCJDaXJjdWxhck9ydGhvZ29uYWxNYXRyaXhEaXN0cmlidXRpb24iLCJDaXJjdWxhclF1YXRlcm5pb25NYXRyaXhEaXN0cmlidXRpb24iLCJDaXJjdWxhclJlYWxNYXRyaXhEaXN0cmlidXRpb24iLCJDaXJjdWxhclN5bXBsZWN0aWNNYXRyaXhEaXN0cmlidXRpb24iLCJDaXJjdWxhclVuaXRhcnlNYXRyaXhEaXN0cmlidXRpb24iLCJDaXJjdW1zcGhlcmUiLCJDaXR5RGF0YSIsIkNsYXNzaWZpZXJGdW5jdGlvbiIsIkNsYXNzaWZpZXJJbmZvcm1hdGlvbiIsIkNsYXNzaWZpZXJNZWFzdXJlbWVudHMiLCJDbGFzc2lmaWVyTWVhc3VyZW1lbnRzT2JqZWN0IiwiQ2xhc3NpZnkiLCJDbGFzc1ByaW9ycyIsIkNsZWFyIiwiQ2xlYXJBbGwiLCJDbGVhckF0dHJpYnV0ZXMiLCJDbGVhckNvb2tpZXMiLCJDbGVhclBlcm1pc3Npb25zIiwiQ2xlYXJTeXN0ZW1DYWNoZSIsIkNsZWJzY2hHb3JkYW4iLCJDbGlja1BhbmUiLCJDbGlwIiwiQ2xpcGJvYXJkTm90ZWJvb2siLCJDbGlwRmlsbCIsIkNsaXBwaW5nU3R5bGUiLCJDbGlwUGxhbmVzIiwiQ2xpcFBsYW5lc1N0eWxlIiwiQ2xpcFJhbmdlIiwiQ2xvY2siLCJDbG9ja0dhdWdlIiwiQ2xvY2t3aXNlQ29udG91ckludGVncmFsIiwiQ2xvc2UiLCJDbG9zZWQiLCJDbG9zZUtlcm5lbHMiLCJDbG9zZW5lc3NDZW50cmFsaXR5IiwiQ2xvc2luZyIsIkNsb3NpbmdBdXRvU2F2ZSIsIkNsb3NpbmdFdmVudCIsIkNsb3NpbmdTYXZlRGlhbG9nIiwiQ2xvdWRBY2NvdW50RGF0YSIsIkNsb3VkQmFzZSIsIkNsb3VkQ29ubmVjdCIsIkNsb3VkQ29ubmVjdGlvbnMiLCJDbG91ZERlcGxveSIsIkNsb3VkRGlyZWN0b3J5IiwiQ2xvdWREaXNjb25uZWN0IiwiQ2xvdWRFdmFsdWF0ZSIsIkNsb3VkRXhwb3J0IiwiQ2xvdWRFeHByZXNzaW9uIiwiQ2xvdWRFeHByZXNzaW9ucyIsIkNsb3VkRnVuY3Rpb24iLCJDbG91ZEdldCIsIkNsb3VkSW1wb3J0IiwiQ2xvdWRMb2dnaW5nRGF0YSIsIkNsb3VkT2JqZWN0IiwiQ2xvdWRPYmplY3RJbmZvcm1hdGlvbiIsIkNsb3VkT2JqZWN0SW5mb3JtYXRpb25EYXRhIiwiQ2xvdWRPYmplY3ROYW1lRm9ybWF0IiwiQ2xvdWRPYmplY3RzIiwiQ2xvdWRPYmplY3RVUkxUeXBlIiwiQ2xvdWRQdWJsaXNoIiwiQ2xvdWRQdXQiLCJDbG91ZFJlbmRlcmluZ01ldGhvZCIsIkNsb3VkU2F2ZSIsIkNsb3VkU2hhcmUiLCJDbG91ZFN1Ym1pdCIsIkNsb3VkU3ltYm9sIiwiQ2xvdWRVbnNoYXJlIiwiQ2xvdWRVc2VySUQiLCJDbHVzdGVyQ2xhc3NpZnkiLCJDbHVzdGVyRGlzc2ltaWxhcml0eUZ1bmN0aW9uIiwiQ2x1c3RlcmluZ0NvbXBvbmVudHMiLCJDbHVzdGVyaW5nVHJlZSIsIkNNWUtDb2xvciIsIkNvYXJzZSIsIkNvZGVBc3Npc3RPcHRpb25zIiwiQ29lZmZpY2llbnQiLCJDb2VmZmljaWVudEFycmF5cyIsIkNvZWZmaWNpZW50RG9tYWluIiwiQ29lZmZpY2llbnRMaXN0IiwiQ29lZmZpY2llbnRSdWxlcyIsIkNvaWZsZXRXYXZlbGV0IiwiQ29sbGVjdCIsIkNvbG9uIiwiQ29sb25Gb3JtIiwiQ29sb3JCYWxhbmNlIiwiQ29sb3JDb21iaW5lIiwiQ29sb3JDb252ZXJ0IiwiQ29sb3JDb3ZlcmFnZSIsIkNvbG9yRGF0YSIsIkNvbG9yRGF0YUZ1bmN0aW9uIiwiQ29sb3JEZXRlY3QiLCJDb2xvckRpc3RhbmNlIiwiQ29sb3JGdW5jdGlvbiIsIkNvbG9yRnVuY3Rpb25TY2FsaW5nIiwiQ29sb3JpemUiLCJDb2xvck5lZ2F0ZSIsIkNvbG9yT3V0cHV0IiwiQ29sb3JQcm9maWxlRGF0YSIsIkNvbG9yUSIsIkNvbG9yUXVhbnRpemUiLCJDb2xvclJlcGxhY2UiLCJDb2xvclJ1bGVzIiwiQ29sb3JTZWxlY3RvclNldHRpbmdzIiwiQ29sb3JTZXBhcmF0ZSIsIkNvbG9yU2V0dGVyIiwiQ29sb3JTZXR0ZXJCb3giLCJDb2xvclNldHRlckJveE9wdGlvbnMiLCJDb2xvclNsaWRlciIsIkNvbG9yc05lYXIiLCJDb2xvclNwYWNlIiwiQ29sb3JUb25lTWFwcGluZyIsIkNvbHVtbiIsIkNvbHVtbkFsaWdubWVudHMiLCJDb2x1bW5CYWNrZ3JvdW5kcyIsIkNvbHVtbkZvcm0iLCJDb2x1bW5MaW5lcyIsIkNvbHVtbnNFcXVhbCIsIkNvbHVtblNwYWNpbmdzIiwiQ29sdW1uV2lkdGhzIiwiQ29tYmluZWRFbnRpdHlDbGFzcyIsIkNvbWJpbmVyRnVuY3Rpb24iLCJDb21ldERhdGEiLCJDb21tb25EZWZhdWx0Rm9ybWF0VHlwZXMiLCJDb21tb25lc3QiLCJDb21tb25lc3RGaWx0ZXIiLCJDb21tb25OYW1lIiwiQ29tbW9uVW5pdHMiLCJDb21tdW5pdHlCb3VuZGFyeVN0eWxlIiwiQ29tbXVuaXR5R3JhcGhQbG90IiwiQ29tbXVuaXR5TGFiZWxzIiwiQ29tbXVuaXR5UmVnaW9uU3R5bGUiLCJDb21wYW55RGF0YSIsIkNvbXBhdGlibGVVbml0USIsIkNvbXBpbGF0aW9uT3B0aW9ucyIsIkNvbXBpbGF0aW9uVGFyZ2V0IiwiQ29tcGlsZSIsIkNvbXBpbGVkIiwiQ29tcGlsZWRDb2RlRnVuY3Rpb24iLCJDb21waWxlZEZ1bmN0aW9uIiwiQ29tcGlsZXJPcHRpb25zIiwiQ29tcGxlbWVudCIsIkNvbXBsZW1lbnRlZEVudGl0eUNsYXNzIiwiQ29tcGxldGVHcmFwaCIsIkNvbXBsZXRlR3JhcGhRIiwiQ29tcGxldGVLYXJ5VHJlZSIsIkNvbXBsZXRpb25zTGlzdFBhY2tldCIsIkNvbXBsZXgiLCJDb21wbGV4Q29udG91clBsb3QiLCJDb21wbGV4ZXMiLCJDb21wbGV4RXhwYW5kIiwiQ29tcGxleEluZmluaXR5IiwiQ29tcGxleGl0eUZ1bmN0aW9uIiwiQ29tcGxleExpc3RQbG90IiwiQ29tcGxleFBsb3QiLCJDb21wbGV4UGxvdDNEIiwiQ29tcGxleFJlZ2lvblBsb3QiLCJDb21wbGV4U3RyZWFtUGxvdCIsIkNvbXBsZXhWZWN0b3JQbG90IiwiQ29tcG9uZW50TWVhc3VyZW1lbnRzIiwiQ29tcG9uZW50d2lzZUNvbnRleHRNZW51IiwiQ29tcG9zZSIsIkNvbXBvc2VMaXN0IiwiQ29tcG9zZVNlcmllcyIsIkNvbXBvc2l0ZVEiLCJDb21wb3NpdGlvbiIsIkNvbXBvdW5kRWxlbWVudCIsIkNvbXBvdW5kRXhwcmVzc2lvbiIsIkNvbXBvdW5kUG9pc3NvbkRpc3RyaWJ1dGlvbiIsIkNvbXBvdW5kUG9pc3NvblByb2Nlc3MiLCJDb21wb3VuZFJlbmV3YWxQcm9jZXNzIiwiQ29tcHJlc3MiLCJDb21wcmVzc2VkRGF0YSIsIkNvbXByZXNzaW9uTGV2ZWwiLCJDb21wdXRlVW5jZXJ0YWludHkiLCJDb25kaXRpb24iLCJDb25kaXRpb25hbEV4cHJlc3Npb24iLCJDb25kaXRpb25lZCIsIkNvbmUiLCJDb25lQm94IiwiQ29uZmlkZW5jZUxldmVsIiwiQ29uZmlkZW5jZVJhbmdlIiwiQ29uZmlkZW5jZVRyYW5zZm9ybSIsIkNvbmZpZ3VyYXRpb25QYXRoIiwiQ29uZm9ybUF1ZGlvIiwiQ29uZm9ybUltYWdlcyIsIkNvbmdydWVudCIsIkNvbmljSHVsbFJlZ2lvbiIsIkNvbmljSHVsbFJlZ2lvbjNEQm94IiwiQ29uaWNIdWxsUmVnaW9uQm94IiwiQ29uaWNPcHRpbWl6YXRpb24iLCJDb25qdWdhdGUiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25qdW5jdGlvbiIsIkNvbm5lY3QiLCJDb25uZWN0ZWRDb21wb25lbnRzIiwiQ29ubmVjdGVkR3JhcGhDb21wb25lbnRzIiwiQ29ubmVjdGVkR3JhcGhRIiwiQ29ubmVjdGVkTWVzaENvbXBvbmVudHMiLCJDb25uZWN0ZWRNb2xlY3VsZUNvbXBvbmVudHMiLCJDb25uZWN0ZWRNb2xlY3VsZVEiLCJDb25uZWN0aW9uU2V0dGluZ3MiLCJDb25uZWN0TGlicmFyeUNhbGxiYWNrRnVuY3Rpb24iLCJDb25uZWN0U3lzdGVtTW9kZWxDb21wb25lbnRzIiwiQ29ubmVzV2luZG93IiwiQ29ub3ZlclRlc3QiLCJDb25zb2xlTWVzc2FnZSIsIkNvbnNvbGVNZXNzYWdlUGFja2V0IiwiQ29uc3RhbnQiLCJDb25zdGFudEFycmF5IiwiQ29uc3RhbnRBcnJheUxheWVyIiwiQ29uc3RhbnRJbWFnZSIsIkNvbnN0YW50UGx1c0xheWVyIiwiQ29uc3RhbnRSZWdpb25RIiwiQ29uc3RhbnRzIiwiQ29uc3RhbnRUaW1lc0xheWVyIiwiQ29uc3RlbGxhdGlvbkRhdGEiLCJDb25zdHJhaW5lZE1heCIsIkNvbnN0cmFpbmVkTWluIiwiQ29uc3RydWN0IiwiQ29udGFpbmluZyIsIkNvbnRhaW5zQWxsIiwiQ29udGFpbnNBbnkiLCJDb250YWluc0V4YWN0bHkiLCJDb250YWluc05vbmUiLCJDb250YWluc09ubHkiLCJDb250ZW50RmllbGRPcHRpb25zIiwiQ29udGVudExvY2F0aW9uRnVuY3Rpb24iLCJDb250ZW50T2JqZWN0IiwiQ29udGVudFBhZGRpbmciLCJDb250ZW50c0JvdW5kaW5nQm94IiwiQ29udGVudFNlbGVjdGFibGUiLCJDb250ZW50U2l6ZSIsIkNvbnRleHQiLCJDb250ZXh0TWVudSIsIkNvbnRleHRzIiwiQ29udGV4dFRvRmlsZU5hbWUiLCJDb250aW51YXRpb24iLCJDb250aW51ZSIsIkNvbnRpbnVlZEZyYWN0aW9uIiwiQ29udGludWVkRnJhY3Rpb25LIiwiQ29udGludW91c0FjdGlvbiIsIkNvbnRpbnVvdXNNYXJrb3ZQcm9jZXNzIiwiQ29udGludW91c1Rhc2siLCJDb250aW51b3VzVGltZU1vZGVsUSIsIkNvbnRpbnVvdXNXYXZlbGV0RGF0YSIsIkNvbnRpbnVvdXNXYXZlbGV0VHJhbnNmb3JtIiwiQ29udG91ckRldGVjdCIsIkNvbnRvdXJHcmFwaGljcyIsIkNvbnRvdXJJbnRlZ3JhbCIsIkNvbnRvdXJMYWJlbHMiLCJDb250b3VyTGluZXMiLCJDb250b3VyUGxvdCIsIkNvbnRvdXJQbG90M0QiLCJDb250b3VycyIsIkNvbnRvdXJTaGFkaW5nIiwiQ29udG91clNtb290aGluZyIsIkNvbnRvdXJTdHlsZSIsIkNvbnRyYWhhcm1vbmljTWVhbiIsIkNvbnRyYXN0aXZlTG9zc0xheWVyIiwiQ29udHJvbCIsIkNvbnRyb2xBY3RpdmUiLCJDb250cm9sQWxpZ25tZW50IiwiQ29udHJvbEdyb3VwQ29udGVudHNCb3giLCJDb250cm9sbGFiaWxpdHlHcmFtaWFuIiwiQ29udHJvbGxhYmlsaXR5TWF0cml4IiwiQ29udHJvbGxhYmxlRGVjb21wb3NpdGlvbiIsIkNvbnRyb2xsYWJsZU1vZGVsUSIsIkNvbnRyb2xsZXJEdXJhdGlvbiIsIkNvbnRyb2xsZXJJbmZvcm1hdGlvbiIsIkNvbnRyb2xsZXJJbmZvcm1hdGlvbkRhdGEiLCJDb250cm9sbGVyTGlua2luZyIsIkNvbnRyb2xsZXJNYW5pcHVsYXRlIiwiQ29udHJvbGxlck1ldGhvZCIsIkNvbnRyb2xsZXJQYXRoIiwiQ29udHJvbGxlclN0YXRlIiwiQ29udHJvbFBsYWNlbWVudCIsIkNvbnRyb2xzUmVuZGVyaW5nIiwiQ29udHJvbFR5cGUiLCJDb252ZXJnZW50cyIsIkNvbnZlcnNpb25PcHRpb25zIiwiQ29udmVyc2lvblJ1bGVzIiwiQ29udmVydFRvQml0bWFwUGFja2V0IiwiQ29udmVydFRvUG9zdFNjcmlwdCIsIkNvbnZlcnRUb1Bvc3RTY3JpcHRQYWNrZXQiLCJDb252ZXhIdWxsTWVzaCIsIkNvbnZleFBvbHlnb25RIiwiQ29udmV4UG9seWhlZHJvblEiLCJDb252b2x1dGlvbkxheWVyIiwiQ29udm9sdmUiLCJDb253YXlHcm91cENvMSIsIkNvbndheUdyb3VwQ28yIiwiQ29ud2F5R3JvdXBDbzMiLCJDb29raWVGdW5jdGlvbiIsIkNvb2tpZXMiLCJDb29yZGluYXRlQm91bmRpbmdCb3giLCJDb29yZGluYXRlQm91bmRpbmdCb3hBcnJheSIsIkNvb3JkaW5hdGVCb3VuZHMiLCJDb29yZGluYXRlQm91bmRzQXJyYXkiLCJDb29yZGluYXRlQ2hhcnREYXRhIiwiQ29vcmRpbmF0ZXNUb29sT3B0aW9ucyIsIkNvb3JkaW5hdGVUcmFuc2Zvcm0iLCJDb29yZGluYXRlVHJhbnNmb3JtRGF0YSIsIkNvcHJpbWVRIiwiQ29wcm9kdWN0IiwiQ29wdWxhRGlzdHJpYnV0aW9uIiwiQ29weWFibGUiLCJDb3B5RGF0YWJpbiIsIkNvcHlEaXJlY3RvcnkiLCJDb3B5RmlsZSIsIkNvcHlUYWciLCJDb3B5VG9DbGlwYm9hcmQiLCJDb3JuZXJGaWx0ZXIiLCJDb3JuZXJOZWlnaGJvcnMiLCJDb3JyZWxhdGlvbiIsIkNvcnJlbGF0aW9uRGlzdGFuY2UiLCJDb3JyZWxhdGlvbkZ1bmN0aW9uIiwiQ29ycmVsYXRpb25UZXN0IiwiQ29zIiwiQ29zaCIsIkNvc2hJbnRlZ3JhbCIsIkNvc2luZURpc3RhbmNlIiwiQ29zaW5lV2luZG93IiwiQ29zSW50ZWdyYWwiLCJDb3QiLCJDb3RoIiwiQ291bnQiLCJDb3VudERpc3RpbmN0IiwiQ291bnREaXN0aW5jdEJ5IiwiQ291bnRlckFzc2lnbm1lbnRzIiwiQ291bnRlckJveCIsIkNvdW50ZXJCb3hPcHRpb25zIiwiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbCIsIkNvdW50ZXJFdmFsdWF0b3IiLCJDb3VudGVyRnVuY3Rpb24iLCJDb3VudGVySW5jcmVtZW50cyIsIkNvdW50ZXJTdHlsZSIsIkNvdW50ZXJTdHlsZU1lbnVMaXN0aW5nIiwiQ291bnRSb290cyIsIkNvdW50cnlEYXRhIiwiQ291bnRzIiwiQ291bnRzQnkiLCJDb3ZhcmlhbmNlIiwiQ292YXJpYW5jZUVzdGltYXRvckZ1bmN0aW9uIiwiQ292YXJpYW5jZUZ1bmN0aW9uIiwiQ294aWFuRGlzdHJpYnV0aW9uIiwiQ294SW5nZXJzb2xsUm9zc1Byb2Nlc3MiLCJDb3hNb2RlbCIsIkNveE1vZGVsRml0IiwiQ3JhbWVyVm9uTWlzZXNUZXN0IiwiQ3JlYXRlQXJjaGl2ZSIsIkNyZWF0ZUNlbGxJRCIsIkNyZWF0ZUNoYW5uZWwiLCJDcmVhdGVDbG91ZEV4cHJlc3Npb24iLCJDcmVhdGVEYXRhYmluIiwiQ3JlYXRlRGF0YVN0cnVjdHVyZSIsIkNyZWF0ZURhdGFTeXN0ZW1Nb2RlbCIsIkNyZWF0ZURpYWxvZyIsIkNyZWF0ZURpcmVjdG9yeSIsIkNyZWF0ZURvY3VtZW50IiwiQ3JlYXRlRmlsZSIsIkNyZWF0ZUludGVybWVkaWF0ZURpcmVjdG9yaWVzIiwiQ3JlYXRlTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uIiwiQ3JlYXRlTm90ZWJvb2siLCJDcmVhdGVQYWNsZXRBcmNoaXZlIiwiQ3JlYXRlUGFsZXR0ZSIsIkNyZWF0ZVBhbGV0dGVQYWNrZXQiLCJDcmVhdGVQZXJtaXNzaW9uc0dyb3VwIiwiQ3JlYXRlU2NoZWR1bGVkVGFzayIsIkNyZWF0ZVNlYXJjaEluZGV4IiwiQ3JlYXRlU3lzdGVtTW9kZWwiLCJDcmVhdGVUZW1wb3JhcnkiLCJDcmVhdGVVVUlEIiwiQ3JlYXRlV2luZG93IiwiQ3JpdGVyaW9uRnVuY3Rpb24iLCJDcml0aWNhbGl0eUZhaWx1cmVJbXBvcnRhbmNlIiwiQ3JpdGljYWxpdHlTdWNjZXNzSW1wb3J0YW5jZSIsIkNyaXRpY2FsU2VjdGlvbiIsIkNyb3NzIiwiQ3Jvc3NFbnRyb3B5TG9zc0xheWVyIiwiQ3Jvc3NpbmdDb3VudCIsIkNyb3NzaW5nRGV0ZWN0IiwiQ3Jvc3NpbmdQb2x5Z29uIiwiQ3Jvc3NNYXRyaXgiLCJDc2MiLCJDc2NoIiwiQ1RDTG9zc0xheWVyIiwiQ3ViZSIsIkN1YmVSb290IiwiQ3ViaWNzIiwiQ3Vib2lkIiwiQ3Vib2lkQm94IiwiQ3VtdWxhbnQiLCJDdW11bGFudEdlbmVyYXRpbmdGdW5jdGlvbiIsIkN1cCIsIkN1cENhcCIsIkN1cmwiLCJDdXJseURvdWJsZVF1b3RlIiwiQ3VybHlRdW90ZSIsIkN1cnJlbmN5Q29udmVydCIsIkN1cnJlbnREYXRlIiwiQ3VycmVudEltYWdlIiwiQ3VycmVudGx5U3BlYWtpbmdQYWNrZXQiLCJDdXJyZW50Tm90ZWJvb2tJbWFnZSIsIkN1cnJlbnRTY3JlZW5JbWFnZSIsIkN1cnJlbnRWYWx1ZSIsIkN1cnJ5IiwiQ3VycnlBcHBsaWVkIiwiQ3VydmF0dXJlRmxvd0ZpbHRlciIsIkN1cnZlQ2xvc2VkIiwiQ3lhbiIsIkN5Y2xlR3JhcGgiLCJDeWNsZUluZGV4UG9seW5vbWlhbCIsIkN5Y2xlcyIsIkN5Y2xpY0dyb3VwIiwiQ3ljbG90b21pYyIsIkN5bGluZGVyIiwiQ3lsaW5kZXJCb3giLCJDeWxpbmRyaWNhbERlY29tcG9zaXRpb24iLCJEIiwiRGFndW1EaXN0cmlidXRpb24iLCJEYW1EYXRhIiwiRGFtZXJhdUxldmVuc2h0ZWluRGlzdGFuY2UiLCJEYW1waW5nRmFjdG9yIiwiRGFya2VyIiwiRGFzaGVkIiwiRGFzaGluZyIsIkRhdGFiYXNlQ29ubmVjdCIsIkRhdGFiYXNlRGlzY29ubmVjdCIsIkRhdGFiYXNlUmVmZXJlbmNlIiwiRGF0YWJpbiIsIkRhdGFiaW5BZGQiLCJEYXRhYmluUmVtb3ZlIiwiRGF0YWJpbnMiLCJEYXRhYmluVXBsb2FkIiwiRGF0YUNvbXByZXNzaW9uIiwiRGF0YURpc3RyaWJ1dGlvbiIsIkRhdGFSYW5nZSIsIkRhdGFSZXZlcnNlZCIsIkRhdGFzZXQiLCJEYXRhc2V0RGlzcGxheVBhbmVsIiwiRGF0YVN0cnVjdHVyZSIsIkRhdGFTdHJ1Y3R1cmVRIiwiRGF0ZSIsIkRhdGVCb3VuZHMiLCJEYXRlZCIsIkRhdGVEZWxpbWl0ZXJzIiwiRGF0ZURpZmZlcmVuY2UiLCJEYXRlZFVuaXQiLCJEYXRlRm9ybWF0IiwiRGF0ZUZ1bmN0aW9uIiwiRGF0ZUhpc3RvZ3JhbSIsIkRhdGVJbnRlcnZhbCIsIkRhdGVMaXN0IiwiRGF0ZUxpc3RMb2dQbG90IiwiRGF0ZUxpc3RQbG90IiwiRGF0ZUxpc3RTdGVwUGxvdCIsIkRhdGVPYmplY3QiLCJEYXRlT2JqZWN0USIsIkRhdGVPdmVybGFwc1EiLCJEYXRlUGF0dGVybiIsIkRhdGVQbHVzIiwiRGF0ZVJhbmdlIiwiRGF0ZVJlZHVjdGlvbiIsIkRhdGVTdHJpbmciLCJEYXRlVGlja3NGb3JtYXQiLCJEYXRlVmFsdWUiLCJEYXRlV2l0aGluUSIsIkRhdWJlY2hpZXNXYXZlbGV0IiwiRGF2aXNEaXN0cmlidXRpb24iLCJEYXdzb25GIiwiRGF5Q291bnQiLCJEYXlDb3VudENvbnZlbnRpb24iLCJEYXlIZW1pc3BoZXJlIiwiRGF5bGlnaHRRIiwiRGF5TWF0Y2hRIiwiRGF5TmFtZSIsIkRheU5pZ2h0VGVybWluYXRvciIsIkRheVBsdXMiLCJEYXlSYW5nZSIsIkRheVJvdW5kIiwiRGVCcnVpam5HcmFwaCIsIkRlQnJ1aWpuU2VxdWVuY2UiLCJEZWJ1ZyIsIkRlYnVnVGFnIiwiRGVjYXBpdGFsaXplIiwiRGVjaW1hbCIsIkRlY2ltYWxGb3JtIiwiRGVjbGFyZUtub3duU3ltYm9scyIsIkRlY2xhcmVQYWNrYWdlIiwiRGVjb21wb3NlIiwiRGVjb252b2x1dGlvbkxheWVyIiwiRGVjcmVtZW50IiwiRGVjcnlwdCIsIkRlY3J5cHRGaWxlIiwiRGVkZWtpbmRFdGEiLCJEZWVwU3BhY2VQcm9iZURhdGEiLCJEZWZhdWx0IiwiRGVmYXVsdEF4ZXNTdHlsZSIsIkRlZmF1bHRCYXNlU3R5bGUiLCJEZWZhdWx0Qm94U3R5bGUiLCJEZWZhdWx0QnV0dG9uIiwiRGVmYXVsdENvbG9yIiwiRGVmYXVsdENvbnRyb2xQbGFjZW1lbnQiLCJEZWZhdWx0RHVwbGljYXRlQ2VsbFN0eWxlIiwiRGVmYXVsdER1cmF0aW9uIiwiRGVmYXVsdEVsZW1lbnQiLCJEZWZhdWx0RmFjZUdyaWRzU3R5bGUiLCJEZWZhdWx0RmllbGRIaW50U3R5bGUiLCJEZWZhdWx0Rm9udCIsIkRlZmF1bHRGb250UHJvcGVydGllcyIsIkRlZmF1bHRGb3JtYXRUeXBlIiwiRGVmYXVsdEZvcm1hdFR5cGVGb3JTdHlsZSIsIkRlZmF1bHRGcmFtZVN0eWxlIiwiRGVmYXVsdEZyYW1lVGlja3NTdHlsZSIsIkRlZmF1bHRHcmlkTGluZXNTdHlsZSIsIkRlZmF1bHRJbmxpbmVGb3JtYXRUeXBlIiwiRGVmYXVsdElucHV0Rm9ybWF0VHlwZSIsIkRlZmF1bHRMYWJlbFN0eWxlIiwiRGVmYXVsdE1lbnVTdHlsZSIsIkRlZmF1bHROYXR1cmFsTGFuZ3VhZ2UiLCJEZWZhdWx0TmV3Q2VsbFN0eWxlIiwiRGVmYXVsdE5ld0lubGluZUNlbGxTdHlsZSIsIkRlZmF1bHROb3RlYm9vayIsIkRlZmF1bHRPcHRpb25zIiwiRGVmYXVsdE91dHB1dEZvcm1hdFR5cGUiLCJEZWZhdWx0UHJpbnRQcmVjaXNpb24iLCJEZWZhdWx0U3R5bGUiLCJEZWZhdWx0U3R5bGVEZWZpbml0aW9ucyIsIkRlZmF1bHRUZXh0Rm9ybWF0VHlwZSIsIkRlZmF1bHRUZXh0SW5saW5lRm9ybWF0VHlwZSIsIkRlZmF1bHRUaWNrc1N0eWxlIiwiRGVmYXVsdFRvb2x0aXBTdHlsZSIsIkRlZmF1bHRWYWx1ZSIsIkRlZmF1bHRWYWx1ZXMiLCJEZWZlciIsIkRlZmluZUV4dGVybmFsIiwiRGVmaW5lSW5wdXRTdHJlYW1NZXRob2QiLCJEZWZpbmVPdXRwdXRTdHJlYW1NZXRob2QiLCJEZWZpbmVSZXNvdXJjZUZ1bmN0aW9uIiwiRGVmaW5pdGlvbiIsIkRlZ3JlZSIsIkRlZ3JlZUNlbnRyYWxpdHkiLCJEZWdyZWVHcmFwaERpc3RyaWJ1dGlvbiIsIkRlZ3JlZUxleGljb2dyYXBoaWMiLCJEZWdyZWVSZXZlcnNlTGV4aWNvZ3JhcGhpYyIsIkRFaWdlbnN5c3RlbSIsIkRFaWdlbnZhbHVlcyIsIkRlaW5pdGlhbGl6YXRpb24iLCJEZWwiLCJEZWxhdW5heU1lc2giLCJEZWxheWVkIiwiRGVsZXRhYmxlIiwiRGVsZXRlIiwiRGVsZXRlQW5vbWFsaWVzIiwiRGVsZXRlQm9yZGVyQ29tcG9uZW50cyIsIkRlbGV0ZUNhc2VzIiwiRGVsZXRlQ2hhbm5lbCIsIkRlbGV0ZUNsb3VkRXhwcmVzc2lvbiIsIkRlbGV0ZUNvbnRlbnRzIiwiRGVsZXRlRGlyZWN0b3J5IiwiRGVsZXRlRHVwbGljYXRlcyIsIkRlbGV0ZUR1cGxpY2F0ZXNCeSIsIkRlbGV0ZUZpbGUiLCJEZWxldGVNaXNzaW5nIiwiRGVsZXRlT2JqZWN0IiwiRGVsZXRlUGVybWlzc2lvbnNLZXkiLCJEZWxldGVTZWFyY2hJbmRleCIsIkRlbGV0ZVNtYWxsQ29tcG9uZW50cyIsIkRlbGV0ZVN0b3B3b3JkcyIsIkRlbGV0ZVdpdGhDb250ZW50cyIsIkRlbGV0aW9uV2FybmluZyIsIkRlbGltaXRlZEFycmF5IiwiRGVsaW1pdGVkU2VxdWVuY2UiLCJEZWxpbWl0ZXIiLCJEZWxpbWl0ZXJGbGFzaFRpbWUiLCJEZWxpbWl0ZXJNYXRjaGluZyIsIkRlbGltaXRlcnMiLCJEZWxpdmVyeUZ1bmN0aW9uIiwiRGVuZHJvZ3JhbSIsIkRlbm9taW5hdG9yIiwiRGVuc2l0eUdyYXBoaWNzIiwiRGVuc2l0eUhpc3RvZ3JhbSIsIkRlbnNpdHlQbG90IiwiRGVuc2l0eVBsb3QzRCIsIkRlcGVuZGVudFZhcmlhYmxlcyIsIkRlcGxveSIsIkRlcGxveWVkIiwiRGVwdGgiLCJEZXB0aEZpcnN0U2NhbiIsIkRlcml2YXRpdmUiLCJEZXJpdmF0aXZlRmlsdGVyIiwiRGVyaXZlZEtleSIsIkRlc2NyaXB0b3JTdGF0ZVNwYWNlIiwiRGVzaWduTWF0cml4IiwiRGVzdHJveUFmdGVyRXZhbHVhdGlvbiIsIkRldCIsIkRldmljZUNsb3NlIiwiRGV2aWNlQ29uZmlndXJlIiwiRGV2aWNlRXhlY3V0ZSIsIkRldmljZUV4ZWN1dGVBc3luY2hyb25vdXMiLCJEZXZpY2VPYmplY3QiLCJEZXZpY2VPcGVuIiwiRGV2aWNlT3BlblEiLCJEZXZpY2VSZWFkIiwiRGV2aWNlUmVhZEJ1ZmZlciIsIkRldmljZVJlYWRMYXRlc3QiLCJEZXZpY2VSZWFkTGlzdCIsIkRldmljZVJlYWRUaW1lU2VyaWVzIiwiRGV2aWNlcyIsIkRldmljZVN0cmVhbXMiLCJEZXZpY2VXcml0ZSIsIkRldmljZVdyaXRlQnVmZmVyIiwiREdhdXNzaWFuV2F2ZWxldCIsIkRpYWNyaXRpY2FsUG9zaXRpb25pbmciLCJEaWFnb25hbCIsIkRpYWdvbmFsaXphYmxlTWF0cml4USIsIkRpYWdvbmFsTWF0cml4IiwiRGlhZ29uYWxNYXRyaXhRIiwiRGlhbG9nIiwiRGlhbG9nSW5kZW50IiwiRGlhbG9nSW5wdXQiLCJEaWFsb2dMZXZlbCIsIkRpYWxvZ05vdGVib29rIiwiRGlhbG9nUHJvbG9nIiwiRGlhbG9nUmV0dXJuIiwiRGlhbG9nU3ltYm9scyIsIkRpYW1vbmQiLCJEaWFtb25kTWF0cml4IiwiRGljZURpc3NpbWlsYXJpdHkiLCJEaWN0aW9uYXJ5TG9va3VwIiwiRGljdGlvbmFyeVdvcmRRIiwiRGlmZmVyZW5jZURlbHRhIiwiRGlmZmVyZW5jZU9yZGVyIiwiRGlmZmVyZW5jZVF1b3RpZW50IiwiRGlmZmVyZW5jZVJvb3QiLCJEaWZmZXJlbmNlUm9vdFJlZHVjZSIsIkRpZmZlcmVuY2VzIiwiRGlmZmVyZW50aWFsRCIsIkRpZmZlcmVudGlhbFJvb3QiLCJEaWZmZXJlbnRpYWxSb290UmVkdWNlIiwiRGlmZmVyZW50aWF0b3JGaWx0ZXIiLCJEaWdpdGFsU2lnbmF0dXJlIiwiRGlnaXRCbG9jayIsIkRpZ2l0QmxvY2tNaW5pbXVtIiwiRGlnaXRDaGFyYWN0ZXIiLCJEaWdpdENvdW50IiwiRGlnaXRRIiwiRGloZWRyYWxBbmdsZSIsIkRpaGVkcmFsR3JvdXAiLCJEaWxhdGlvbiIsIkRpbWVuc2lvbmFsQ29tYmluYXRpb25zIiwiRGltZW5zaW9uYWxNZXNoQ29tcG9uZW50cyIsIkRpbWVuc2lvblJlZHVjZSIsIkRpbWVuc2lvblJlZHVjZXJGdW5jdGlvbiIsIkRpbWVuc2lvblJlZHVjdGlvbiIsIkRpbWVuc2lvbnMiLCJEaXJhY0NvbWIiLCJEaXJhY0RlbHRhIiwiRGlyZWN0ZWRFZGdlIiwiRGlyZWN0ZWRFZGdlcyIsIkRpcmVjdGVkR3JhcGgiLCJEaXJlY3RlZEdyYXBoUSIsIkRpcmVjdGVkSW5maW5pdHkiLCJEaXJlY3Rpb24iLCJEaXJlY3RpdmUiLCJEaXJlY3RvcnkiLCJEaXJlY3RvcnlOYW1lIiwiRGlyZWN0b3J5USIsIkRpcmVjdG9yeVN0YWNrIiwiRGlyaWNobGV0QmV0YSIsIkRpcmljaGxldENoYXJhY3RlciIsIkRpcmljaGxldENvbmRpdGlvbiIsIkRpcmljaGxldENvbnZvbHZlIiwiRGlyaWNobGV0RGlzdHJpYnV0aW9uIiwiRGlyaWNobGV0RXRhIiwiRGlyaWNobGV0TCIsIkRpcmljaGxldExhbWJkYSIsIkRpcmljaGxldFRyYW5zZm9ybSIsIkRpcmljaGxldFdpbmRvdyIsIkRpc2FibGVDb25zb2xlUHJpbnRQYWNrZXQiLCJEaXNhYmxlRm9ybWF0dGluZyIsIkRpc2NyZXRlQXN5bXB0b3RpYyIsIkRpc2NyZXRlQ2hpcnBaVHJhbnNmb3JtIiwiRGlzY3JldGVDb252b2x2ZSIsIkRpc2NyZXRlRGVsdGEiLCJEaXNjcmV0ZUhhZGFtYXJkVHJhbnNmb3JtIiwiRGlzY3JldGVJbmRpY2F0b3IiLCJEaXNjcmV0ZUxpbWl0IiwiRGlzY3JldGVMUUVzdGltYXRvckdhaW5zIiwiRGlzY3JldGVMUVJlZ3VsYXRvckdhaW5zIiwiRGlzY3JldGVMeWFwdW5vdlNvbHZlIiwiRGlzY3JldGVNYXJrb3ZQcm9jZXNzIiwiRGlzY3JldGVNYXhMaW1pdCIsIkRpc2NyZXRlTWluTGltaXQiLCJEaXNjcmV0ZVBsb3QiLCJEaXNjcmV0ZVBsb3QzRCIsIkRpc2NyZXRlUmF0aW8iLCJEaXNjcmV0ZVJpY2NhdGlTb2x2ZSIsIkRpc2NyZXRlU2hpZnQiLCJEaXNjcmV0ZVRpbWVNb2RlbFEiLCJEaXNjcmV0ZVVuaWZvcm1EaXN0cmlidXRpb24iLCJEaXNjcmV0ZVZhcmlhYmxlcyIsIkRpc2NyZXRlV2F2ZWxldERhdGEiLCJEaXNjcmV0ZVdhdmVsZXRQYWNrZXRUcmFuc2Zvcm0iLCJEaXNjcmV0ZVdhdmVsZXRUcmFuc2Zvcm0iLCJEaXNjcmV0aXplR3JhcGhpY3MiLCJEaXNjcmV0aXplUmVnaW9uIiwiRGlzY3JpbWluYW50IiwiRGlzam9pbnRRIiwiRGlzanVuY3Rpb24iLCJEaXNrIiwiRGlza0JveCIsIkRpc2tNYXRyaXgiLCJEaXNrU2VnbWVudCIsIkRpc3BhdGNoIiwiRGlzcGF0Y2hRIiwiRGlzcGVyc2lvbkVzdGltYXRvckZ1bmN0aW9uIiwiRGlzcGxheSIsIkRpc3BsYXlBbGxTdGVwcyIsIkRpc3BsYXlFbmRQYWNrZXQiLCJEaXNwbGF5Rmx1c2hJbWFnZVBhY2tldCIsIkRpc3BsYXlGb3JtIiwiRGlzcGxheUZ1bmN0aW9uIiwiRGlzcGxheVBhY2tldCIsIkRpc3BsYXlSdWxlcyIsIkRpc3BsYXlTZXRTaXplUGFja2V0IiwiRGlzcGxheVN0cmluZyIsIkRpc3BsYXlUZW1wb3JhcnkiLCJEaXNwbGF5V2l0aCIsIkRpc3BsYXlXaXRoUmVmIiwiRGlzcGxheVdpdGhWYXJpYWJsZSIsIkRpc3RhbmNlRnVuY3Rpb24iLCJEaXN0YW5jZU1hdHJpeCIsIkRpc3RhbmNlVHJhbnNmb3JtIiwiRGlzdHJpYnV0ZSIsIkRpc3RyaWJ1dGVkIiwiRGlzdHJpYnV0ZWRDb250ZXh0cyIsIkRpc3RyaWJ1dGVEZWZpbml0aW9ucyIsIkRpc3RyaWJ1dGlvbkNoYXJ0IiwiRGlzdHJpYnV0aW9uRG9tYWluIiwiRGlzdHJpYnV0aW9uRml0VGVzdCIsIkRpc3RyaWJ1dGlvblBhcmFtZXRlckFzc3VtcHRpb25zIiwiRGlzdHJpYnV0aW9uUGFyYW1ldGVyUSIsIkRpdGhlcmluZyIsIkRpdiIsIkRpdmVyZ2VuY2UiLCJEaXZpZGUiLCJEaXZpZGVCeSIsIkRpdmlkZXJzIiwiRGl2aWRlU2lkZXMiLCJEaXZpc2libGUiLCJEaXZpc29ycyIsIkRpdmlzb3JTaWdtYSIsIkRpdmlzb3JTdW0iLCJETVNMaXN0IiwiRE1TU3RyaW5nIiwiRG8iLCJEb2NrZWRDZWxscyIsIkRvY3VtZW50R2VuZXJhdG9yIiwiRG9jdW1lbnRHZW5lcmF0b3JJbmZvcm1hdGlvbiIsIkRvY3VtZW50R2VuZXJhdG9ySW5mb3JtYXRpb25EYXRhIiwiRG9jdW1lbnRHZW5lcmF0b3JzIiwiRG9jdW1lbnROb3RlYm9vayIsIkRvY3VtZW50V2VpZ2h0aW5nUnVsZXMiLCJEb2RlY2FoZWRyb24iLCJEb21haW5SZWdpc3RyYXRpb25JbmZvcm1hdGlvbiIsIkRvbWluYW50Q29sb3JzIiwiRE9TVGV4dEZvcm1hdCIsIkRvdCIsIkRvdERhc2hlZCIsIkRvdEVxdWFsIiwiRG90TGF5ZXIiLCJEb3RQbHVzTGF5ZXIiLCJEb3R0ZWQiLCJEb3VibGVCcmFja2V0aW5nQmFyIiwiRG91YmxlQ29udG91ckludGVncmFsIiwiRG91YmxlRG93bkFycm93IiwiRG91YmxlTGVmdEFycm93IiwiRG91YmxlTGVmdFJpZ2h0QXJyb3ciLCJEb3VibGVMZWZ0VGVlIiwiRG91YmxlTG9uZ0xlZnRBcnJvdyIsIkRvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdyIsIkRvdWJsZUxvbmdSaWdodEFycm93IiwiRG91YmxlUmlnaHRBcnJvdyIsIkRvdWJsZVJpZ2h0VGVlIiwiRG91YmxlVXBBcnJvdyIsIkRvdWJsZVVwRG93bkFycm93IiwiRG91YmxlVmVydGljYWxCYXIiLCJEb3VibHlJbmZpbml0ZSIsIkRvd24iLCJEb3duQXJyb3ciLCJEb3duQXJyb3dCYXIiLCJEb3duQXJyb3dVcEFycm93IiwiRG93bkxlZnRSaWdodFZlY3RvciIsIkRvd25MZWZ0VGVlVmVjdG9yIiwiRG93bkxlZnRWZWN0b3IiLCJEb3duTGVmdFZlY3RvckJhciIsIkRvd25SaWdodFRlZVZlY3RvciIsIkRvd25SaWdodFZlY3RvciIsIkRvd25SaWdodFZlY3RvckJhciIsIkRvd25zYW1wbGUiLCJEb3duVGVlIiwiRG93blRlZUFycm93IiwiRG93blZhbHVlcyIsIkRyYWdBbmREcm9wIiwiRHJhd0VkZ2VzIiwiRHJhd0Zyb250RmFjZXMiLCJEcmF3SGlnaGxpZ2h0ZWQiLCJEcm9wIiwiRHJvcG91dExheWVyIiwiRFNvbHZlIiwiRFNvbHZlVmFsdWUiLCJEdCIsIkR1YWxMaW5lYXJQcm9ncmFtbWluZyIsIkR1YWxQb2x5aGVkcm9uIiwiRHVhbFN5c3RlbXNNb2RlbCIsIkR1bXBHZXQiLCJEdW1wU2F2ZSIsIkR1cGxpY2F0ZUZyZWVRIiwiRHVyYXRpb24iLCJEeW5hbWljIiwiRHluYW1pY0JveCIsIkR5bmFtaWNCb3hPcHRpb25zIiwiRHluYW1pY0V2YWx1YXRpb25UaW1lb3V0IiwiRHluYW1pY0dlb0dyYXBoaWNzIiwiRHluYW1pY0ltYWdlIiwiRHluYW1pY0xvY2F0aW9uIiwiRHluYW1pY01vZHVsZSIsIkR5bmFtaWNNb2R1bGVCb3giLCJEeW5hbWljTW9kdWxlQm94T3B0aW9ucyIsIkR5bmFtaWNNb2R1bGVQYXJlbnQiLCJEeW5hbWljTW9kdWxlVmFsdWVzIiwiRHluYW1pY05hbWUiLCJEeW5hbWljTmFtZXNwYWNlIiwiRHluYW1pY1JlZmVyZW5jZSIsIkR5bmFtaWNTZXR0aW5nIiwiRHluYW1pY1VwZGF0aW5nIiwiRHluYW1pY1dyYXBwZXIiLCJEeW5hbWljV3JhcHBlckJveCIsIkR5bmFtaWNXcmFwcGVyQm94T3B0aW9ucyIsIkUiLCJFYXJ0aEltcGFjdERhdGEiLCJFYXJ0aHF1YWtlRGF0YSIsIkVjY2VudHJpY2l0eUNlbnRyYWxpdHkiLCJFY2hvIiwiRWNob0Z1bmN0aW9uIiwiRWNsaXBzZVR5cGUiLCJFZGdlQWRkIiwiRWRnZUJldHdlZW5uZXNzQ2VudHJhbGl0eSIsIkVkZ2VDYXBhY2l0eSIsIkVkZ2VDYXBGb3JtIiwiRWRnZUNvbG9yIiwiRWRnZUNvbm5lY3Rpdml0eSIsIkVkZ2VDb250cmFjdCIsIkVkZ2VDb3N0IiwiRWRnZUNvdW50IiwiRWRnZUNvdmVyUSIsIkVkZ2VDeWNsZU1hdHJpeCIsIkVkZ2VEYXNoaW5nIiwiRWRnZURlbGV0ZSIsIkVkZ2VEZXRlY3QiLCJFZGdlRm9ybSIsIkVkZ2VJbmRleCIsIkVkZ2VKb2luRm9ybSIsIkVkZ2VMYWJlbGluZyIsIkVkZ2VMYWJlbHMiLCJFZGdlTGFiZWxTdHlsZSIsIkVkZ2VMaXN0IiwiRWRnZU9wYWNpdHkiLCJFZGdlUSIsIkVkZ2VSZW5kZXJpbmdGdW5jdGlvbiIsIkVkZ2VSdWxlcyIsIkVkZ2VTaGFwZUZ1bmN0aW9uIiwiRWRnZVN0eWxlIiwiRWRnZVRhZ2dlZEdyYXBoIiwiRWRnZVRhZ2dlZEdyYXBoUSIsIkVkZ2VUYWdzIiwiRWRnZVRoaWNrbmVzcyIsIkVkZ2VXZWlnaHQiLCJFZGdlV2VpZ2h0ZWRHcmFwaFEiLCJFZGl0YWJsZSIsIkVkaXRCdXR0b25TZXR0aW5ncyIsIkVkaXRDZWxsVGFnc1NldHRpbmdzIiwiRWRpdERpc3RhbmNlIiwiRWZmZWN0aXZlSW50ZXJlc3QiLCJFaWdlbnN5c3RlbSIsIkVpZ2VudmFsdWVzIiwiRWlnZW52ZWN0b3JDZW50cmFsaXR5IiwiRWlnZW52ZWN0b3JzIiwiRWxlbWVudCIsIkVsZW1lbnREYXRhIiwiRWxlbWVudHdpc2VMYXllciIsIkVsaWRlZEZvcm1zIiwiRWxpbWluYXRlIiwiRWxpbWluYXRpb25PcmRlciIsIkVsbGlwc29pZCIsIkVsbGlwdGljRSIsIkVsbGlwdGljRXhwIiwiRWxsaXB0aWNFeHBQcmltZSIsIkVsbGlwdGljRiIsIkVsbGlwdGljRmlsdGVyTW9kZWwiLCJFbGxpcHRpY0siLCJFbGxpcHRpY0xvZyIsIkVsbGlwdGljTm9tZVEiLCJFbGxpcHRpY1BpIiwiRWxsaXB0aWNSZWR1Y2VkSGFsZlBlcmlvZHMiLCJFbGxpcHRpY1RoZXRhIiwiRWxsaXB0aWNUaGV0YVByaW1lIiwiRW1iZWRDb2RlIiwiRW1iZWRkZWRIVE1MIiwiRW1iZWRkZWRTZXJ2aWNlIiwiRW1iZWRkaW5nTGF5ZXIiLCJFbWJlZGRpbmdPYmplY3QiLCJFbWl0U291bmQiLCJFbXBoYXNpemVTeW50YXhFcnJvcnMiLCJFbXBpcmljYWxEaXN0cmlidXRpb24iLCJFbXB0eSIsIkVtcHR5R3JhcGhRIiwiRW1wdHlSZWdpb24iLCJFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQiLCJFbmFibGVkIiwiRW5jb2RlIiwiRW5jcnlwdCIsIkVuY3J5cHRlZE9iamVjdCIsIkVuY3J5cHRGaWxlIiwiRW5kIiwiRW5kQWRkIiwiRW5kRGlhbG9nUGFja2V0IiwiRW5kRnJvbnRFbmRJbnRlcmFjdGlvblBhY2tldCIsIkVuZE9mQnVmZmVyIiwiRW5kT2ZGaWxlIiwiRW5kT2ZMaW5lIiwiRW5kT2ZTdHJpbmciLCJFbmRQYWNrYWdlIiwiRW5naW5lRW52aXJvbm1lbnQiLCJFbmdpbmVlcmluZ0Zvcm0iLCJFbnRlciIsIkVudGVyRXhwcmVzc2lvblBhY2tldCIsIkVudGVyVGV4dFBhY2tldCIsIkVudGl0eSIsIkVudGl0eUNsYXNzIiwiRW50aXR5Q2xhc3NMaXN0IiwiRW50aXR5Q29waWVzIiwiRW50aXR5RnVuY3Rpb24iLCJFbnRpdHlHcm91cCIsIkVudGl0eUluc3RhbmNlIiwiRW50aXR5TGlzdCIsIkVudGl0eVByZWZldGNoIiwiRW50aXR5UHJvcGVydGllcyIsIkVudGl0eVByb3BlcnR5IiwiRW50aXR5UHJvcGVydHlDbGFzcyIsIkVudGl0eVJlZ2lzdGVyIiwiRW50aXR5U3RvcmUiLCJFbnRpdHlTdG9yZXMiLCJFbnRpdHlUeXBlTmFtZSIsIkVudGl0eVVucmVnaXN0ZXIiLCJFbnRpdHlWYWx1ZSIsIkVudHJvcHkiLCJFbnRyb3B5RmlsdGVyIiwiRW52aXJvbm1lbnQiLCJFcGlsb2ciLCJFcGlsb2dGdW5jdGlvbiIsIkVxdWFsIiwiRXF1YWxDb2x1bW5zIiwiRXF1YWxSb3dzIiwiRXF1YWxUaWxkZSIsIkVxdWFsVG8iLCJFcXVhdGVkVG8iLCJFcXVpbGlicml1bSIsIkVxdWlyaXBwbGVGaWx0ZXJLZXJuZWwiLCJFcXVpdmFsZW50IiwiRXJmIiwiRXJmYyIsIkVyZmkiLCJFcmxhbmdCIiwiRXJsYW5nQyIsIkVybGFuZ0Rpc3RyaWJ1dGlvbiIsIkVyb3Npb24iLCJFcnJvckJveCIsIkVycm9yQm94T3B0aW9ucyIsIkVycm9yTm9ybSIsIkVycm9yUGFja2V0IiwiRXJyb3JzRGlhbG9nU2V0dGluZ3MiLCJFc2NhcGVSYWRpdXMiLCJFc3RpbWF0ZWRCYWNrZ3JvdW5kIiwiRXN0aW1hdGVkRGlzdHJpYnV0aW9uIiwiRXN0aW1hdGVkUHJvY2VzcyIsIkVzdGltYXRvckdhaW5zIiwiRXN0aW1hdG9yUmVndWxhdG9yIiwiRXVjbGlkZWFuRGlzdGFuY2UiLCJFdWxlckFuZ2xlcyIsIkV1bGVyQ2hhcmFjdGVyaXN0aWMiLCJFdWxlckUiLCJFdWxlckdhbW1hIiwiRXVsZXJpYW5HcmFwaFEiLCJFdWxlck1hdHJpeCIsIkV1bGVyUGhpIiwiRXZhbHVhdGFibGUiLCJFdmFsdWF0ZSIsIkV2YWx1YXRlZCIsIkV2YWx1YXRlUGFja2V0IiwiRXZhbHVhdGVTY2hlZHVsZWRUYXNrIiwiRXZhbHVhdGlvbkJveCIsIkV2YWx1YXRpb25DZWxsIiwiRXZhbHVhdGlvbkNvbXBsZXRpb25BY3Rpb24iLCJFdmFsdWF0aW9uRGF0YSIsIkV2YWx1YXRpb25FbGVtZW50cyIsIkV2YWx1YXRpb25FbnZpcm9ubWVudCIsIkV2YWx1YXRpb25Nb2RlIiwiRXZhbHVhdGlvbk1vbml0b3IiLCJFdmFsdWF0aW9uTm90ZWJvb2siLCJFdmFsdWF0aW9uT2JqZWN0IiwiRXZhbHVhdGlvbk9yZGVyIiwiRXZhbHVhdG9yIiwiRXZhbHVhdG9yTmFtZXMiLCJFdmVuUSIsIkV2ZW50RGF0YSIsIkV2ZW50RXZhbHVhdG9yIiwiRXZlbnRIYW5kbGVyIiwiRXZlbnRIYW5kbGVyVGFnIiwiRXZlbnRMYWJlbHMiLCJFdmVudFNlcmllcyIsIkV4YWN0QmxhY2ttYW5XaW5kb3ciLCJFeGFjdE51bWJlclEiLCJFeGFjdFJvb3RJc29sYXRpb24iLCJFeGFtcGxlRGF0YSIsIkV4Y2VwdCIsIkV4Y2x1ZGVkRm9ybXMiLCJFeGNsdWRlZExpbmVzIiwiRXhjbHVkZWRQaHlzaWNhbFF1YW50aXRpZXMiLCJFeGNsdWRlUG9kcyIsIkV4Y2x1c2lvbnMiLCJFeGNsdXNpb25zU3R5bGUiLCJFeGlzdHMiLCJFeGl0IiwiRXhpdERpYWxvZyIsIkV4b3BsYW5ldERhdGEiLCJFeHAiLCJFeHBhbmQiLCJFeHBhbmRBbGwiLCJFeHBhbmREZW5vbWluYXRvciIsIkV4cGFuZEZpbGVOYW1lIiwiRXhwYW5kTnVtZXJhdG9yIiwiRXhwZWN0YXRpb24iLCJFeHBlY3RhdGlvbkUiLCJFeHBlY3RlZFZhbHVlIiwiRXhwR2FtbWFEaXN0cmlidXRpb24iLCJFeHBJbnRlZ3JhbEUiLCJFeHBJbnRlZ3JhbEVpIiwiRXhwaXJhdGlvbkRhdGUiLCJFeHBvbmVudCIsIkV4cG9uZW50RnVuY3Rpb24iLCJFeHBvbmVudGlhbERpc3RyaWJ1dGlvbiIsIkV4cG9uZW50aWFsRmFtaWx5IiwiRXhwb25lbnRpYWxHZW5lcmF0aW5nRnVuY3Rpb24iLCJFeHBvbmVudGlhbE1vdmluZ0F2ZXJhZ2UiLCJFeHBvbmVudGlhbFBvd2VyRGlzdHJpYnV0aW9uIiwiRXhwb25lbnRQb3NpdGlvbiIsIkV4cG9uZW50U3RlcCIsIkV4cG9ydCIsIkV4cG9ydEF1dG9SZXBsYWNlbWVudHMiLCJFeHBvcnRCeXRlQXJyYXkiLCJFeHBvcnRGb3JtIiwiRXhwb3J0UGFja2V0IiwiRXhwb3J0U3RyaW5nIiwiRXhwcmVzc2lvbiIsIkV4cHJlc3Npb25DZWxsIiwiRXhwcmVzc2lvbkdyYXBoIiwiRXhwcmVzc2lvblBhY2tldCIsIkV4cHJlc3Npb25VVUlEIiwiRXhwVG9UcmlnIiwiRXh0ZW5kZWRFbnRpdHlDbGFzcyIsIkV4dGVuZGVkR0NEIiwiRXh0ZW5zaW9uIiwiRXh0ZW50RWxlbWVudEZ1bmN0aW9uIiwiRXh0ZW50TWFya2VycyIsIkV4dGVudFNpemUiLCJFeHRlcm5hbEJ1bmRsZSIsIkV4dGVybmFsQ2FsbCIsIkV4dGVybmFsRGF0YUNoYXJhY3RlckVuY29kaW5nIiwiRXh0ZXJuYWxFdmFsdWF0ZSIsIkV4dGVybmFsRnVuY3Rpb24iLCJFeHRlcm5hbEZ1bmN0aW9uTmFtZSIsIkV4dGVybmFsSWRlbnRpZmllciIsIkV4dGVybmFsT2JqZWN0IiwiRXh0ZXJuYWxPcHRpb25zIiwiRXh0ZXJuYWxTZXNzaW9uT2JqZWN0IiwiRXh0ZXJuYWxTZXNzaW9ucyIsIkV4dGVybmFsU3RvcmFnZUJhc2UiLCJFeHRlcm5hbFN0b3JhZ2VEb3dubG9hZCIsIkV4dGVybmFsU3RvcmFnZUdldCIsIkV4dGVybmFsU3RvcmFnZU9iamVjdCIsIkV4dGVybmFsU3RvcmFnZVB1dCIsIkV4dGVybmFsU3RvcmFnZVVwbG9hZCIsIkV4dGVybmFsVHlwZVNpZ25hdHVyZSIsIkV4dGVybmFsVmFsdWUiLCJFeHRyYWN0IiwiRXh0cmFjdEFyY2hpdmUiLCJFeHRyYWN0TGF5ZXIiLCJFeHRyYWN0UGFjbGV0QXJjaGl2ZSIsIkV4dHJlbWVWYWx1ZURpc3RyaWJ1dGlvbiIsIkZhY2VBbGlnbiIsIkZhY2VGb3JtIiwiRmFjZUdyaWRzIiwiRmFjZUdyaWRzU3R5bGUiLCJGYWNpYWxGZWF0dXJlcyIsIkZhY3RvciIsIkZhY3RvckNvbXBsZXRlIiwiRmFjdG9yaWFsIiwiRmFjdG9yaWFsMiIsIkZhY3RvcmlhbE1vbWVudCIsIkZhY3RvcmlhbE1vbWVudEdlbmVyYXRpbmdGdW5jdGlvbiIsIkZhY3RvcmlhbFBvd2VyIiwiRmFjdG9ySW50ZWdlciIsIkZhY3Rvckxpc3QiLCJGYWN0b3JTcXVhcmVGcmVlIiwiRmFjdG9yU3F1YXJlRnJlZUxpc3QiLCJGYWN0b3JUZXJtcyIsIkZhY3RvclRlcm1zTGlzdCIsIkZhaWwiLCJGYWlsdXJlIiwiRmFpbHVyZUFjdGlvbiIsIkZhaWx1cmVEaXN0cmlidXRpb24iLCJGYWlsdXJlUSIsIkZhbHNlIiwiRmFyZXlTZXF1ZW5jZSIsIkZBUklNQVByb2Nlc3MiLCJGZWF0dXJlRGlzdGFuY2UiLCJGZWF0dXJlRXh0cmFjdCIsIkZlYXR1cmVFeHRyYWN0aW9uIiwiRmVhdHVyZUV4dHJhY3RvciIsIkZlYXR1cmVFeHRyYWN0b3JGdW5jdGlvbiIsIkZlYXR1cmVOYW1lcyIsIkZlYXR1cmVOZWFyZXN0IiwiRmVhdHVyZVNwYWNlUGxvdCIsIkZlYXR1cmVTcGFjZVBsb3QzRCIsIkZlYXR1cmVUeXBlcyIsIkZFRGlzYWJsZUNvbnNvbGVQcmludFBhY2tldCIsIkZlZWRiYWNrTGluZWFyaXplIiwiRmVlZGJhY2tTZWN0b3IiLCJGZWVkYmFja1NlY3RvclN0eWxlIiwiRmVlZGJhY2tUeXBlIiwiRkVFbmFibGVDb25zb2xlUHJpbnRQYWNrZXQiLCJGZXRhbEdyb3d0aERhdGEiLCJGaWJvbmFjY2kiLCJGaWJvbm9yaWFsIiwiRmllbGRDb21wbGV0aW9uRnVuY3Rpb24iLCJGaWVsZEhpbnQiLCJGaWVsZEhpbnRTdHlsZSIsIkZpZWxkTWFza2VkIiwiRmllbGRTaXplIiwiRmlsZSIsIkZpbGVCYXNlTmFtZSIsIkZpbGVCeXRlQ291bnQiLCJGaWxlQ29udmVydCIsIkZpbGVEYXRlIiwiRmlsZUV4aXN0c1EiLCJGaWxlRXh0ZW5zaW9uIiwiRmlsZUZvcm1hdCIsIkZpbGVIYW5kbGVyIiwiRmlsZUhhc2giLCJGaWxlSW5mb3JtYXRpb24iLCJGaWxlTmFtZSIsIkZpbGVOYW1lRGVwdGgiLCJGaWxlTmFtZURpYWxvZ1NldHRpbmdzIiwiRmlsZU5hbWVEcm9wIiwiRmlsZU5hbWVGb3JtcyIsIkZpbGVOYW1lSm9pbiIsIkZpbGVOYW1lcyIsIkZpbGVOYW1lU2V0dGVyIiwiRmlsZU5hbWVTcGxpdCIsIkZpbGVOYW1lVGFrZSIsIkZpbGVQcmludCIsIkZpbGVTaXplIiwiRmlsZVN5c3RlbU1hcCIsIkZpbGVTeXN0ZW1TY2FuIiwiRmlsZVRlbXBsYXRlIiwiRmlsZVRlbXBsYXRlQXBwbHkiLCJGaWxlVHlwZSIsIkZpbGxlZEN1cnZlIiwiRmlsbGVkQ3VydmVCb3giLCJGaWxsZWRDdXJ2ZUJveE9wdGlvbnMiLCJGaWxsaW5nIiwiRmlsbGluZ1N0eWxlIiwiRmlsbGluZ1RyYW5zZm9ybSIsIkZpbHRlcmVkRW50aXR5Q2xhc3MiLCJGaWx0ZXJSdWxlcyIsIkZpbmFuY2lhbEJvbmQiLCJGaW5hbmNpYWxEYXRhIiwiRmluYW5jaWFsRGVyaXZhdGl2ZSIsIkZpbmFuY2lhbEluZGljYXRvciIsIkZpbmQiLCJGaW5kQW5vbWFsaWVzIiwiRmluZEFyZ01heCIsIkZpbmRBcmdNaW4iLCJGaW5kQ2hhbm5lbHMiLCJGaW5kQ2xpcXVlIiwiRmluZENsdXN0ZXJzIiwiRmluZENvb2tpZXMiLCJGaW5kQ3VydmVQYXRoIiwiRmluZEN5Y2xlIiwiRmluZERldmljZXMiLCJGaW5kRGlzdHJpYnV0aW9uIiwiRmluZERpc3RyaWJ1dGlvblBhcmFtZXRlcnMiLCJGaW5kRGl2aXNpb25zIiwiRmluZEVkZ2VDb3ZlciIsIkZpbmRFZGdlQ3V0IiwiRmluZEVkZ2VJbmRlcGVuZGVudFBhdGhzIiwiRmluZEVxdWF0aW9uYWxQcm9vZiIsIkZpbmRFdWxlcmlhbkN5Y2xlIiwiRmluZEV4dGVybmFsRXZhbHVhdG9ycyIsIkZpbmRGYWNlcyIsIkZpbmRGaWxlIiwiRmluZEZpdCIsIkZpbmRGb3JtdWxhIiwiRmluZEZ1bmRhbWVudGFsQ3ljbGVzIiwiRmluZEdlbmVyYXRpbmdGdW5jdGlvbiIsIkZpbmRHZW9Mb2NhdGlvbiIsIkZpbmRHZW9tZXRyaWNDb25qZWN0dXJlcyIsIkZpbmRHZW9tZXRyaWNUcmFuc2Zvcm0iLCJGaW5kR3JhcGhDb21tdW5pdGllcyIsIkZpbmRHcmFwaElzb21vcnBoaXNtIiwiRmluZEdyYXBoUGFydGl0aW9uIiwiRmluZEhhbWlsdG9uaWFuQ3ljbGUiLCJGaW5kSGFtaWx0b25pYW5QYXRoIiwiRmluZEhpZGRlbk1hcmtvdlN0YXRlcyIsIkZpbmRJbWFnZVRleHQiLCJGaW5kSW5kZXBlbmRlbnRFZGdlU2V0IiwiRmluZEluZGVwZW5kZW50VmVydGV4U2V0IiwiRmluZEluc3RhbmNlIiwiRmluZEludGVnZXJOdWxsVmVjdG9yIiwiRmluZEtDbGFuIiwiRmluZEtDbGlxdWUiLCJGaW5kS0NsdWIiLCJGaW5kS1BsZXgiLCJGaW5kTGlicmFyeSIsIkZpbmRMaW5lYXJSZWN1cnJlbmNlIiwiRmluZExpc3QiLCJGaW5kTWF0Y2hpbmdDb2xvciIsIkZpbmRNYXhpbXVtIiwiRmluZE1heGltdW1DdXQiLCJGaW5kTWF4aW11bUZsb3ciLCJGaW5kTWF4VmFsdWUiLCJGaW5kTWVzaERlZmVjdHMiLCJGaW5kTWluaW11bSIsIkZpbmRNaW5pbXVtQ29zdEZsb3ciLCJGaW5kTWluaW11bUN1dCIsIkZpbmRNaW5WYWx1ZSIsIkZpbmRNb2xlY3VsZVN1YnN0cnVjdHVyZSIsIkZpbmRQYXRoIiwiRmluZFBlYWtzIiwiRmluZFBlcm11dGF0aW9uIiwiRmluZFBvc3RtYW5Ub3VyIiwiRmluZFByb2Nlc3NQYXJhbWV0ZXJzIiwiRmluZFJlcGVhdCIsIkZpbmRSb290IiwiRmluZFNlcXVlbmNlRnVuY3Rpb24iLCJGaW5kU2V0dGluZ3MiLCJGaW5kU2hvcnRlc3RQYXRoIiwiRmluZFNob3J0ZXN0VG91ciIsIkZpbmRTcGFubmluZ1RyZWUiLCJGaW5kU3lzdGVtTW9kZWxFcXVpbGlicml1bSIsIkZpbmRUZXh0dWFsQW5zd2VyIiwiRmluZFRocmVzaG9sZCIsIkZpbmRUcmFuc2llbnRSZXBlYXQiLCJGaW5kVmVydGV4Q292ZXIiLCJGaW5kVmVydGV4Q3V0IiwiRmluZFZlcnRleEluZGVwZW5kZW50UGF0aHMiLCJGaW5lIiwiRmluaXNoRHluYW1pYyIsIkZpbml0ZUFiZWxpYW5Hcm91cENvdW50IiwiRmluaXRlR3JvdXBDb3VudCIsIkZpbml0ZUdyb3VwRGF0YSIsIkZpcnN0IiwiRmlyc3RDYXNlIiwiRmlyc3RQYXNzYWdlVGltZURpc3RyaWJ1dGlvbiIsIkZpcnN0UG9zaXRpb24iLCJGaXNjaGVyR3JvdXBGaTIyIiwiRmlzY2hlckdyb3VwRmkyMyIsIkZpc2NoZXJHcm91cEZpMjRQcmltZSIsIkZpc2hlckh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIiwiRmlzaGVyUmF0aW9UZXN0IiwiRmlzaGVyWkRpc3RyaWJ1dGlvbiIsIkZpdCIsIkZpdEFsbCIsIkZpdFJlZ3VsYXJpemF0aW9uIiwiRml0dGVkTW9kZWwiLCJGaXhlZE9yZGVyIiwiRml4ZWRQb2ludCIsIkZpeGVkUG9pbnRMaXN0IiwiRmxhc2hTZWxlY3Rpb24iLCJGbGF0IiwiRmxhdHRlbiIsIkZsYXR0ZW5BdCIsIkZsYXR0ZW5MYXllciIsIkZsYXRUb3BXaW5kb3ciLCJGbGlwVmlldyIsIkZsb29yIiwiRmxvd1BvbHlub21pYWwiLCJGbHVzaFByaW50T3V0cHV0UGFja2V0IiwiRm9sZCIsIkZvbGRMaXN0IiwiRm9sZFBhaXIiLCJGb2xkUGFpckxpc3QiLCJGb2xsb3dSZWRpcmVjdHMiLCJGb250IiwiRm9udENvbG9yIiwiRm9udEZhbWlseSIsIkZvbnRGb3JtIiwiRm9udE5hbWUiLCJGb250T3BhY2l0eSIsIkZvbnRQb3N0U2NyaXB0TmFtZSIsIkZvbnRQcm9wZXJ0aWVzIiwiRm9udFJlZW5jb2RpbmciLCJGb250U2l6ZSIsIkZvbnRTbGFudCIsIkZvbnRTdWJzdGl0dXRpb25zIiwiRm9udFRyYWNraW5nIiwiRm9udFZhcmlhdGlvbnMiLCJGb250V2VpZ2h0IiwiRm9yIiwiRm9yQWxsIiwiRm9yY2VWZXJzaW9uSW5zdGFsbCIsIkZvcm1hdCIsIkZvcm1hdFJ1bGVzIiwiRm9ybWF0VHlwZSIsIkZvcm1hdFR5cGVBdXRvQ29udmVydCIsIkZvcm1hdFZhbHVlcyIsIkZvcm1Cb3giLCJGb3JtQm94T3B0aW9ucyIsIkZvcm1Db250cm9sIiwiRm9ybUZ1bmN0aW9uIiwiRm9ybUxheW91dEZ1bmN0aW9uIiwiRm9ybU9iamVjdCIsIkZvcm1QYWdlIiwiRm9ybVRoZW1lIiwiRm9ybXVsYURhdGEiLCJGb3JtdWxhTG9va3VwIiwiRm9ydHJhbkZvcm0iLCJGb3J3YXJkIiwiRm9yd2FyZEJhY2t3YXJkIiwiRm91cmllciIsIkZvdXJpZXJDb2VmZmljaWVudCIsIkZvdXJpZXJDb3NDb2VmZmljaWVudCIsIkZvdXJpZXJDb3NTZXJpZXMiLCJGb3VyaWVyQ29zVHJhbnNmb3JtIiwiRm91cmllckRDVCIsIkZvdXJpZXJEQ1RGaWx0ZXIiLCJGb3VyaWVyRENUTWF0cml4IiwiRm91cmllckRTVCIsIkZvdXJpZXJEU1RNYXRyaXgiLCJGb3VyaWVyTWF0cml4IiwiRm91cmllclBhcmFtZXRlcnMiLCJGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0iLCJGb3VyaWVyU2VyaWVzIiwiRm91cmllclNpbkNvZWZmaWNpZW50IiwiRm91cmllclNpblNlcmllcyIsIkZvdXJpZXJTaW5UcmFuc2Zvcm0iLCJGb3VyaWVyVHJhbnNmb3JtIiwiRm91cmllclRyaWdTZXJpZXMiLCJGcmFjdGlvbmFsQnJvd25pYW5Nb3Rpb25Qcm9jZXNzIiwiRnJhY3Rpb25hbEdhdXNzaWFuTm9pc2VQcm9jZXNzIiwiRnJhY3Rpb25hbFBhcnQiLCJGcmFjdGlvbkJveCIsIkZyYWN0aW9uQm94T3B0aW9ucyIsIkZyYWN0aW9uTGluZSIsIkZyYW1lIiwiRnJhbWVCb3giLCJGcmFtZUJveE9wdGlvbnMiLCJGcmFtZWQiLCJGcmFtZUluc2V0IiwiRnJhbWVMYWJlbCIsIkZyYW1lbGVzcyIsIkZyYW1lTWFyZ2lucyIsIkZyYW1lUmF0ZSIsIkZyYW1lU3R5bGUiLCJGcmFtZVRpY2tzIiwiRnJhbWVUaWNrc1N0eWxlIiwiRlJhdGlvRGlzdHJpYnV0aW9uIiwiRnJlY2hldERpc3RyaWJ1dGlvbiIsIkZyZWVRIiwiRnJlbmV0U2VycmV0U3lzdGVtIiwiRnJlcXVlbmN5U2FtcGxpbmdGaWx0ZXJLZXJuZWwiLCJGcmVzbmVsQyIsIkZyZXNuZWxGIiwiRnJlc25lbEciLCJGcmVzbmVsUyIsIkZyaWRheSIsIkZyb2Jlbml1c051bWJlciIsIkZyb2Jlbml1c1NvbHZlIiwiRnJvbUFic29sdXRlVGltZSIsIkZyb21DaGFyYWN0ZXJDb2RlIiwiRnJvbUNvZWZmaWNpZW50UnVsZXMiLCJGcm9tQ29udGludWVkRnJhY3Rpb24iLCJGcm9tRGF0ZSIsIkZyb21EaWdpdHMiLCJGcm9tRE1TIiwiRnJvbUVudGl0eSIsIkZyb21KdWxpYW5EYXRlIiwiRnJvbUxldHRlck51bWJlciIsIkZyb21Qb2xhckNvb3JkaW5hdGVzIiwiRnJvbVJvbWFuTnVtZXJhbCIsIkZyb21TcGhlcmljYWxDb29yZGluYXRlcyIsIkZyb21Vbml4VGltZSIsIkZyb250IiwiRnJvbnRFbmREeW5hbWljRXhwcmVzc2lvbiIsIkZyb250RW5kRXZlbnRBY3Rpb25zIiwiRnJvbnRFbmRFeGVjdXRlIiwiRnJvbnRFbmRPYmplY3QiLCJGcm9udEVuZFJlc291cmNlIiwiRnJvbnRFbmRSZXNvdXJjZVN0cmluZyIsIkZyb250RW5kU3RhY2tTaXplIiwiRnJvbnRFbmRUb2tlbiIsIkZyb250RW5kVG9rZW5FeGVjdXRlIiwiRnJvbnRFbmRWYWx1ZUNhY2hlIiwiRnJvbnRFbmRWZXJzaW9uIiwiRnJvbnRGYWNlQ29sb3IiLCJGcm9udEZhY2VPcGFjaXR5IiwiRnVsbCIsIkZ1bGxBeGVzIiwiRnVsbERlZmluaXRpb24iLCJGdWxsRm9ybSIsIkZ1bGxHcmFwaGljcyIsIkZ1bGxJbmZvcm1hdGlvbk91dHB1dFJlZ3VsYXRvciIsIkZ1bGxPcHRpb25zIiwiRnVsbFJlZ2lvbiIsIkZ1bGxTaW1wbGlmeSIsIkZ1bmN0aW9uIiwiRnVuY3Rpb25Db21waWxlIiwiRnVuY3Rpb25Db21waWxlRXhwb3J0IiwiRnVuY3Rpb25Db21waWxlRXhwb3J0Qnl0ZUFycmF5IiwiRnVuY3Rpb25Db21waWxlRXhwb3J0TGlicmFyeSIsIkZ1bmN0aW9uQ29tcGlsZUV4cG9ydFN0cmluZyIsIkZ1bmN0aW9uRG9tYWluIiwiRnVuY3Rpb25FeHBhbmQiLCJGdW5jdGlvbkludGVycG9sYXRpb24iLCJGdW5jdGlvblBlcmlvZCIsIkZ1bmN0aW9uUmFuZ2UiLCJGdW5jdGlvblNwYWNlIiwiRnVzc2VsbFZlc2VseUltcG9ydGFuY2UiLCJHYWJvckZpbHRlciIsIkdhYm9yTWF0cml4IiwiR2Fib3JXYXZlbGV0IiwiR2Fpbk1hcmdpbnMiLCJHYWluUGhhc2VNYXJnaW5zIiwiR2FsYXh5RGF0YSIsIkdhbGxlcnlWaWV3IiwiR2FtbWEiLCJHYW1tYURpc3RyaWJ1dGlvbiIsIkdhbW1hUmVndWxhcml6ZWQiLCJHYXBQZW5hbHR5IiwiR0FSQ0hQcm9jZXNzIiwiR2F0ZWRSZWN1cnJlbnRMYXllciIsIkdhdGhlciIsIkdhdGhlckJ5IiwiR2F1Z2VGYWNlRWxlbWVudEZ1bmN0aW9uIiwiR2F1Z2VGYWNlU3R5bGUiLCJHYXVnZUZyYW1lRWxlbWVudEZ1bmN0aW9uIiwiR2F1Z2VGcmFtZVNpemUiLCJHYXVnZUZyYW1lU3R5bGUiLCJHYXVnZUxhYmVscyIsIkdhdWdlTWFya2VycyIsIkdhdWdlU3R5bGUiLCJHYXVzc2lhbkZpbHRlciIsIkdhdXNzaWFuSW50ZWdlcnMiLCJHYXVzc2lhbk1hdHJpeCIsIkdhdXNzaWFuT3J0aG9nb25hbE1hdHJpeERpc3RyaWJ1dGlvbiIsIkdhdXNzaWFuU3ltcGxlY3RpY01hdHJpeERpc3RyaWJ1dGlvbiIsIkdhdXNzaWFuVW5pdGFyeU1hdHJpeERpc3RyaWJ1dGlvbiIsIkdhdXNzaWFuV2luZG93IiwiR0NEIiwiR2VnZW5iYXVlckMiLCJHZW5lcmFsIiwiR2VuZXJhbGl6ZWRMaW5lYXJNb2RlbEZpdCIsIkdlbmVyYXRlQXN5bW1ldHJpY0tleVBhaXIiLCJHZW5lcmF0ZUNvbmRpdGlvbnMiLCJHZW5lcmF0ZWRDZWxsIiwiR2VuZXJhdGVkRG9jdW1lbnRCaW5kaW5nIiwiR2VuZXJhdGVEZXJpdmVkS2V5IiwiR2VuZXJhdGVEaWdpdGFsU2lnbmF0dXJlIiwiR2VuZXJhdGVEb2N1bWVudCIsIkdlbmVyYXRlZFBhcmFtZXRlcnMiLCJHZW5lcmF0ZWRRdWFudGl0eU1hZ25pdHVkZXMiLCJHZW5lcmF0ZUZpbGVTaWduYXR1cmUiLCJHZW5lcmF0ZUhUVFBSZXNwb25zZSIsIkdlbmVyYXRlU2VjdXJlZEF1dGhlbnRpY2F0aW9uS2V5IiwiR2VuZXJhdGVTeW1tZXRyaWNLZXkiLCJHZW5lcmF0aW5nRnVuY3Rpb24iLCJHZW5lcmF0b3JEZXNjcmlwdGlvbiIsIkdlbmVyYXRvckhpc3RvcnlMZW5ndGgiLCJHZW5lcmF0b3JPdXRwdXRUeXBlIiwiR2VuZXJpYyIsIkdlbmVyaWNDeWxpbmRyaWNhbERlY29tcG9zaXRpb24iLCJHZW5vbWVEYXRhIiwiR2Vub21lTG9va3VwIiwiR2VvQW50aXBvZGUiLCJHZW9BcmVhIiwiR2VvQXJyYXlTaXplIiwiR2VvQmFja2dyb3VuZCIsIkdlb0JvdW5kaW5nQm94IiwiR2VvQm91bmRzIiwiR2VvQm91bmRzUmVnaW9uIiwiR2VvQnViYmxlQ2hhcnQiLCJHZW9DZW50ZXIiLCJHZW9DaXJjbGUiLCJHZW9Db250b3VyUGxvdCIsIkdlb0RlbnNpdHlQbG90IiwiR2VvZGVzaWNDbG9zaW5nIiwiR2VvZGVzaWNEaWxhdGlvbiIsIkdlb2Rlc2ljRXJvc2lvbiIsIkdlb2Rlc2ljT3BlbmluZyIsIkdlb0Rlc3RpbmF0aW9uIiwiR2VvZGVzeURhdGEiLCJHZW9EaXJlY3Rpb24iLCJHZW9EaXNrIiwiR2VvRGlzcGxhY2VtZW50IiwiR2VvRGlzdGFuY2UiLCJHZW9EaXN0YW5jZUxpc3QiLCJHZW9FbGV2YXRpb25EYXRhIiwiR2VvRW50aXRpZXMiLCJHZW9HcmFwaGljcyIsIkdlb2dyYXZpdHlNb2RlbERhdGEiLCJHZW9HcmlkRGlyZWN0aW9uRGlmZmVyZW5jZSIsIkdlb0dyaWRMaW5lcyIsIkdlb0dyaWRMaW5lc1N0eWxlIiwiR2VvR3JpZFBvc2l0aW9uIiwiR2VvR3JpZFJhbmdlIiwiR2VvR3JpZFJhbmdlUGFkZGluZyIsIkdlb0dyaWRVbml0QXJlYSIsIkdlb0dyaWRVbml0RGlzdGFuY2UiLCJHZW9HcmlkVmVjdG9yIiwiR2VvR3JvdXAiLCJHZW9IZW1pc3BoZXJlIiwiR2VvSGVtaXNwaGVyZUJvdW5kYXJ5IiwiR2VvSGlzdG9ncmFtIiwiR2VvSWRlbnRpZnkiLCJHZW9JbWFnZSIsIkdlb0xhYmVscyIsIkdlb0xlbmd0aCIsIkdlb0xpc3RQbG90IiwiR2VvTG9jYXRpb24iLCJHZW9sb2dpY2FsUGVyaW9kRGF0YSIsIkdlb21hZ25ldGljTW9kZWxEYXRhIiwiR2VvTWFya2VyIiwiR2VvbWV0cmljQXNzZXJ0aW9uIiwiR2VvbWV0cmljQnJvd25pYW5Nb3Rpb25Qcm9jZXNzIiwiR2VvbWV0cmljRGlzdHJpYnV0aW9uIiwiR2VvbWV0cmljTWVhbiIsIkdlb21ldHJpY01lYW5GaWx0ZXIiLCJHZW9tZXRyaWNPcHRpbWl6YXRpb24iLCJHZW9tZXRyaWNTY2VuZSIsIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uIiwiR2VvbWV0cmljVHJhbnNmb3JtYXRpb24zREJveCIsIkdlb21ldHJpY1RyYW5zZm9ybWF0aW9uM0RCb3hPcHRpb25zIiwiR2VvbWV0cmljVHJhbnNmb3JtYXRpb25Cb3giLCJHZW9tZXRyaWNUcmFuc2Zvcm1hdGlvbkJveE9wdGlvbnMiLCJHZW9Nb2RlbCIsIkdlb05lYXJlc3QiLCJHZW9QYXRoIiwiR2VvUG9zaXRpb24iLCJHZW9Qb3NpdGlvbkVOVSIsIkdlb1Bvc2l0aW9uWFlaIiwiR2VvUHJvamVjdGlvbiIsIkdlb1Byb2plY3Rpb25EYXRhIiwiR2VvUmFuZ2UiLCJHZW9SYW5nZVBhZGRpbmciLCJHZW9SZWdpb25WYWx1ZVBsb3QiLCJHZW9SZXNvbHV0aW9uIiwiR2VvU2NhbGVCYXIiLCJHZW9TZXJ2ZXIiLCJHZW9TbW9vdGhIaXN0b2dyYW0iLCJHZW9TdHJlYW1QbG90IiwiR2VvU3R5bGluZyIsIkdlb1N0eWxpbmdJbWFnZUZ1bmN0aW9uIiwiR2VvVmFyaWFudCIsIkdlb1ZlY3RvciIsIkdlb1ZlY3RvckVOVSIsIkdlb1ZlY3RvclBsb3QiLCJHZW9WZWN0b3JYWVoiLCJHZW9WaXNpYmxlUmVnaW9uIiwiR2VvVmlzaWJsZVJlZ2lvbkJvdW5kYXJ5IiwiR2VvV2l0aGluUSIsIkdlb1pvb21MZXZlbCIsIkdlc3R1cmVIYW5kbGVyIiwiR2VzdHVyZUhhbmRsZXJUYWciLCJHZXQiLCJHZXRCb3VuZGluZ0JveFNpemVQYWNrZXQiLCJHZXRDb250ZXh0IiwiR2V0RW52aXJvbm1lbnQiLCJHZXRGaWxlTmFtZSIsIkdldEZyb250RW5kT3B0aW9uc0RhdGFQYWNrZXQiLCJHZXRMaW5lYnJlYWtJbmZvcm1hdGlvblBhY2tldCIsIkdldE1lbnVzUGFja2V0IiwiR2V0UGFnZUJyZWFrSW5mb3JtYXRpb25QYWNrZXQiLCJHbGFpc2hlciIsIkdsb2JhbENsdXN0ZXJpbmdDb2VmZmljaWVudCIsIkdsb2JhbFByZWZlcmVuY2VzIiwiR2xvYmFsU2Vzc2lvbiIsIkdsb3ciLCJHb2xkZW5BbmdsZSIsIkdvbGRlblJhdGlvIiwiR29tcGVydHpNYWtlaGFtRGlzdHJpYnV0aW9uIiwiR29vY2hTaGFkaW5nIiwiR29vZG1hbktydXNrYWxHYW1tYSIsIkdvb2RtYW5LcnVza2FsR2FtbWFUZXN0IiwiR290byIsIkdyYWQiLCJHcmFkaWVudCIsIkdyYWRpZW50RmlsdGVyIiwiR3JhZGllbnRPcmllbnRhdGlvbkZpbHRlciIsIkdyYW1tYXJBcHBseSIsIkdyYW1tYXJSdWxlcyIsIkdyYW1tYXJUb2tlbiIsIkdyYXBoIiwiR3JhcGgzRCIsIkdyYXBoQXNzb3J0YXRpdml0eSIsIkdyYXBoQXV0b21vcnBoaXNtR3JvdXAiLCJHcmFwaENlbnRlciIsIkdyYXBoQ29tcGxlbWVudCIsIkdyYXBoRGF0YSIsIkdyYXBoRGVuc2l0eSIsIkdyYXBoRGlhbWV0ZXIiLCJHcmFwaERpZmZlcmVuY2UiLCJHcmFwaERpc2pvaW50VW5pb24iLCJHcmFwaERpc3RhbmNlIiwiR3JhcGhEaXN0YW5jZU1hdHJpeCIsIkdyYXBoRWxlbWVudERhdGEiLCJHcmFwaEVtYmVkZGluZyIsIkdyYXBoSGlnaGxpZ2h0IiwiR3JhcGhIaWdobGlnaHRTdHlsZSIsIkdyYXBoSHViIiwiR3JhcGhpY3MiLCJHcmFwaGljczNEIiwiR3JhcGhpY3MzREJveCIsIkdyYXBoaWNzM0RCb3hPcHRpb25zIiwiR3JhcGhpY3NBcnJheSIsIkdyYXBoaWNzQmFzZWxpbmUiLCJHcmFwaGljc0JveCIsIkdyYXBoaWNzQm94T3B0aW9ucyIsIkdyYXBoaWNzQ29sb3IiLCJHcmFwaGljc0NvbHVtbiIsIkdyYXBoaWNzQ29tcGxleCIsIkdyYXBoaWNzQ29tcGxleDNEQm94IiwiR3JhcGhpY3NDb21wbGV4M0RCb3hPcHRpb25zIiwiR3JhcGhpY3NDb21wbGV4Qm94IiwiR3JhcGhpY3NDb21wbGV4Qm94T3B0aW9ucyIsIkdyYXBoaWNzQ29udGVudHMiLCJHcmFwaGljc0RhdGEiLCJHcmFwaGljc0dyaWQiLCJHcmFwaGljc0dyaWRCb3giLCJHcmFwaGljc0dyb3VwIiwiR3JhcGhpY3NHcm91cDNEQm94IiwiR3JhcGhpY3NHcm91cDNEQm94T3B0aW9ucyIsIkdyYXBoaWNzR3JvdXBCb3giLCJHcmFwaGljc0dyb3VwQm94T3B0aW9ucyIsIkdyYXBoaWNzR3JvdXBpbmciLCJHcmFwaGljc0hpZ2hsaWdodENvbG9yIiwiR3JhcGhpY3NSb3ciLCJHcmFwaGljc1NwYWNpbmciLCJHcmFwaGljc1N0eWxlIiwiR3JhcGhJbnRlcnNlY3Rpb24iLCJHcmFwaExheW91dCIsIkdyYXBoTGlua0VmZmljaWVuY3kiLCJHcmFwaFBlcmlwaGVyeSIsIkdyYXBoUGxvdCIsIkdyYXBoUGxvdDNEIiwiR3JhcGhQb3dlciIsIkdyYXBoUHJvcGVydHlEaXN0cmlidXRpb24iLCJHcmFwaFEiLCJHcmFwaFJhZGl1cyIsIkdyYXBoUmVjaXByb2NpdHkiLCJHcmFwaFJvb3QiLCJHcmFwaFN0eWxlIiwiR3JhcGhVbmlvbiIsIkdyYXkiLCJHcmF5TGV2ZWwiLCJHcmVhdGVyIiwiR3JlYXRlckVxdWFsIiwiR3JlYXRlckVxdWFsTGVzcyIsIkdyZWF0ZXJFcXVhbFRoYW4iLCJHcmVhdGVyRnVsbEVxdWFsIiwiR3JlYXRlckdyZWF0ZXIiLCJHcmVhdGVyTGVzcyIsIkdyZWF0ZXJTbGFudEVxdWFsIiwiR3JlYXRlclRoYW4iLCJHcmVhdGVyVGlsZGUiLCJHcmVlbiIsIkdyZWVuRnVuY3Rpb24iLCJHcmlkIiwiR3JpZEJhc2VsaW5lIiwiR3JpZEJveCIsIkdyaWRCb3hBbGlnbm1lbnQiLCJHcmlkQm94QmFja2dyb3VuZCIsIkdyaWRCb3hEaXZpZGVycyIsIkdyaWRCb3hGcmFtZSIsIkdyaWRCb3hJdGVtU2l6ZSIsIkdyaWRCb3hJdGVtU3R5bGUiLCJHcmlkQm94T3B0aW9ucyIsIkdyaWRCb3hTcGFjaW5ncyIsIkdyaWRDcmVhdGlvblNldHRpbmdzIiwiR3JpZERlZmF1bHRFbGVtZW50IiwiR3JpZEVsZW1lbnRTdHlsZU9wdGlvbnMiLCJHcmlkRnJhbWUiLCJHcmlkRnJhbWVNYXJnaW5zIiwiR3JpZEdyYXBoIiwiR3JpZExpbmVzIiwiR3JpZExpbmVzU3R5bGUiLCJHcm9lYm5lckJhc2lzIiwiR3JvdXBBY3Rpb25CYXNlIiwiR3JvdXBCeSIsIkdyb3VwQ2VudHJhbGl6ZXIiLCJHcm91cEVsZW1lbnRGcm9tV29yZCIsIkdyb3VwRWxlbWVudFBvc2l0aW9uIiwiR3JvdXBFbGVtZW50USIsIkdyb3VwRWxlbWVudHMiLCJHcm91cEVsZW1lbnRUb1dvcmQiLCJHcm91cEdlbmVyYXRvcnMiLCJHcm91cGluZ3MiLCJHcm91cE11bHRpcGxpY2F0aW9uVGFibGUiLCJHcm91cE9yYml0cyIsIkdyb3VwT3JkZXIiLCJHcm91cFBhZ2VCcmVha1dpdGhpbiIsIkdyb3VwU2V0d2lzZVN0YWJpbGl6ZXIiLCJHcm91cFN0YWJpbGl6ZXIiLCJHcm91cFN0YWJpbGl6ZXJDaGFpbiIsIkdyb3VwVG9nZXRoZXJHcm91cGluZyIsIkdyb3VwVG9nZXRoZXJOZXN0ZWRHcm91cGluZyIsIkdyb3dDdXRDb21wb25lbnRzIiwiR3VkZXJtYW5uaWFuIiwiR3VpZGVkRmlsdGVyIiwiR3VtYmVsRGlzdHJpYnV0aW9uIiwiSGFhcldhdmVsZXQiLCJIYWRhbWFyZE1hdHJpeCIsIkhhbGZMaW5lIiwiSGFsZk5vcm1hbERpc3RyaWJ1dGlvbiIsIkhhbGZQbGFuZSIsIkhhbGZTcGFjZSIsIkhhbGZ0b25lU2hhZGluZyIsIkhhbWlsdG9uaWFuR3JhcGhRIiwiSGFtbWluZ0Rpc3RhbmNlIiwiSGFtbWluZ1dpbmRvdyIsIkhhbmRsZXJGdW5jdGlvbnMiLCJIYW5kbGVyRnVuY3Rpb25zS2V5cyIsIkhhbmtlbEgxIiwiSGFua2VsSDIiLCJIYW5rZWxNYXRyaXgiLCJIYW5rZWxUcmFuc2Zvcm0iLCJIYW5uUG9pc3NvbldpbmRvdyIsIkhhbm5XaW5kb3ciLCJIYXJhZGFOb3J0b25Hcm91cEhOIiwiSGFyYXJ5R3JhcGgiLCJIYXJtb25pY01lYW4iLCJIYXJtb25pY01lYW5GaWx0ZXIiLCJIYXJtb25pY051bWJlciIsIkhhc2giLCJIYXRjaEZpbGxpbmciLCJIYXRjaFNoYWRpbmciLCJIYXZlcnNpbmUiLCJIYXphcmRGdW5jdGlvbiIsIkhlYWQiLCJIZWFkQ29tcG9zZSIsIkhlYWRlckFsaWdubWVudCIsIkhlYWRlckJhY2tncm91bmQiLCJIZWFkZXJEaXNwbGF5RnVuY3Rpb24iLCJIZWFkZXJMaW5lcyIsIkhlYWRlclNpemUiLCJIZWFkZXJTdHlsZSIsIkhlYWRzIiwiSGVhdmlzaWRlTGFtYmRhIiwiSGVhdmlzaWRlUGkiLCJIZWF2aXNpZGVUaGV0YSIsIkhlbGRHcm91cEhlIiwiSGVsZFBhcnQiLCJIZWxwQnJvd3Nlckxvb2t1cCIsIkhlbHBCcm93c2VyTm90ZWJvb2siLCJIZWxwQnJvd3NlclNldHRpbmdzIiwiSGVyZSIsIkhlcm1pdGVEZWNvbXBvc2l0aW9uIiwiSGVybWl0ZUgiLCJIZXJtaXRpYW5NYXRyaXhRIiwiSGVzc2VuYmVyZ0RlY29tcG9zaXRpb24iLCJIZXNzaWFuIiwiSGV1bkIiLCJIZXVuQlByaW1lIiwiSGV1bkMiLCJIZXVuQ1ByaW1lIiwiSGV1bkQiLCJIZXVuRFByaW1lIiwiSGV1bkciLCJIZXVuR1ByaW1lIiwiSGV1blQiLCJIZXVuVFByaW1lIiwiSGV4YWRlY2ltYWxDaGFyYWN0ZXIiLCJIZXhhaGVkcm9uIiwiSGV4YWhlZHJvbkJveCIsIkhleGFoZWRyb25Cb3hPcHRpb25zIiwiSGlkZGVuSXRlbXMiLCJIaWRkZW5NYXJrb3ZQcm9jZXNzIiwiSGlkZGVuU3VyZmFjZSIsIkhpZ2hsaWdodGVkIiwiSGlnaGxpZ2h0R3JhcGgiLCJIaWdobGlnaHRJbWFnZSIsIkhpZ2hsaWdodE1lc2giLCJIaWdocGFzc0ZpbHRlciIsIkhpZ21hblNpbXNHcm91cEhTIiwiSGlsYmVydEN1cnZlIiwiSGlsYmVydEZpbHRlciIsIkhpbGJlcnRNYXRyaXgiLCJIaXN0b2dyYW0iLCJIaXN0b2dyYW0zRCIsIkhpc3RvZ3JhbURpc3RyaWJ1dGlvbiIsIkhpc3RvZ3JhbUxpc3QiLCJIaXN0b2dyYW1UcmFuc2Zvcm0iLCJIaXN0b2dyYW1UcmFuc2Zvcm1JbnRlcnBvbGF0aW9uIiwiSGlzdG9yaWNhbFBlcmlvZERhdGEiLCJIaXRNaXNzVHJhbnNmb3JtIiwiSElUU0NlbnRyYWxpdHkiLCJIam9ydGhEaXN0cmlidXRpb24iLCJIb2RnZUR1YWwiLCJIb2VmZmRpbmdEIiwiSG9lZmZkaW5nRFRlc3QiLCJIb2xkIiwiSG9sZEFsbCIsIkhvbGRBbGxDb21wbGV0ZSIsIkhvbGRDb21wbGV0ZSIsIkhvbGRGaXJzdCIsIkhvbGRGb3JtIiwiSG9sZFBhdHRlcm4iLCJIb2xkUmVzdCIsIkhvbGlkYXlDYWxlbmRhciIsIkhvbWVEaXJlY3RvcnkiLCJIb21lUGFnZSIsIkhvcml6b250YWwiLCJIb3Jpem9udGFsRm9ybSIsIkhvcml6b250YWxHYXVnZSIsIkhvcml6b250YWxTY3JvbGxQb3NpdGlvbiIsIkhvcm5lckZvcm0iLCJIb3N0TG9va3VwIiwiSG90ZWxsaW5nVFNxdWFyZURpc3RyaWJ1dGlvbiIsIkhveXREaXN0cmlidXRpb24iLCJIVE1MU2F2ZSIsIkhUVFBFcnJvclJlc3BvbnNlIiwiSFRUUFJlZGlyZWN0IiwiSFRUUFJlcXVlc3QiLCJIVFRQUmVxdWVzdERhdGEiLCJIVFRQUmVzcG9uc2UiLCJIdWUiLCJIdW1hbkdyb3d0aERhdGEiLCJIdW1wRG93bkh1bXAiLCJIdW1wRXF1YWwiLCJIdXJ3aXR6TGVyY2hQaGkiLCJIdXJ3aXR6WmV0YSIsIkh5cGVyYm9saWNEaXN0cmlidXRpb24iLCJIeXBlcmN1YmVHcmFwaCIsIkh5cGVyZXhwb25lbnRpYWxEaXN0cmlidXRpb24iLCJIeXBlcmZhY3RvcmlhbCIsIkh5cGVyZ2VvbWV0cmljMEYxIiwiSHlwZXJnZW9tZXRyaWMwRjFSZWd1bGFyaXplZCIsIkh5cGVyZ2VvbWV0cmljMUYxIiwiSHlwZXJnZW9tZXRyaWMxRjFSZWd1bGFyaXplZCIsIkh5cGVyZ2VvbWV0cmljMkYxIiwiSHlwZXJnZW9tZXRyaWMyRjFSZWd1bGFyaXplZCIsIkh5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIiwiSHlwZXJnZW9tZXRyaWNQRlEiLCJIeXBlcmdlb21ldHJpY1BGUVJlZ3VsYXJpemVkIiwiSHlwZXJnZW9tZXRyaWNVIiwiSHlwZXJsaW5rIiwiSHlwZXJsaW5rQWN0aW9uIiwiSHlwZXJsaW5rQ3JlYXRpb25TZXR0aW5ncyIsIkh5cGVycGxhbmUiLCJIeXBoZW5hdGlvbiIsIkh5cGhlbmF0aW9uT3B0aW9ucyIsIkh5cG9leHBvbmVudGlhbERpc3RyaWJ1dGlvbiIsIkh5cG90aGVzaXNUZXN0RGF0YSIsIkkiLCJJY29uRGF0YSIsIkljb25pemUiLCJJY29uaXplZE9iamVjdCIsIkljb25SdWxlcyIsIkljb3NhaGVkcm9uIiwiSWRlbnRpdHkiLCJJZGVudGl0eU1hdHJpeCIsIklmIiwiSWdub3JlQ2FzZSIsIklnbm9yZURpYWNyaXRpY3MiLCJJZ25vcmVQdW5jdHVhdGlvbiIsIklnbm9yZVNwZWxsQ2hlY2siLCJJZ25vcmluZ0luYWN0aXZlIiwiSW0iLCJJbWFnZSIsIkltYWdlM0QiLCJJbWFnZTNEUHJvamVjdGlvbiIsIkltYWdlM0RTbGljZXMiLCJJbWFnZUFjY3VtdWxhdGUiLCJJbWFnZUFkZCIsIkltYWdlQWRqdXN0IiwiSW1hZ2VBbGlnbiIsIkltYWdlQXBwbHkiLCJJbWFnZUFwcGx5SW5kZXhlZCIsIkltYWdlQXNwZWN0UmF0aW8iLCJJbWFnZUFzc2VtYmxlIiwiSW1hZ2VBdWdtZW50YXRpb25MYXllciIsIkltYWdlQm91bmRpbmdCb3hlcyIsIkltYWdlQ2FjaGUiLCJJbWFnZUNhY2hlVmFsaWQiLCJJbWFnZUNhcHR1cmUiLCJJbWFnZUNhcHR1cmVGdW5jdGlvbiIsIkltYWdlQ2FzZXMiLCJJbWFnZUNoYW5uZWxzIiwiSW1hZ2VDbGlwIiwiSW1hZ2VDb2xsYWdlIiwiSW1hZ2VDb2xvclNwYWNlIiwiSW1hZ2VDb21wb3NlIiwiSW1hZ2VDb250YWluc1EiLCJJbWFnZUNvbnRlbnRzIiwiSW1hZ2VDb252b2x2ZSIsIkltYWdlQ29vY2N1cnJlbmNlIiwiSW1hZ2VDb3JuZXJzIiwiSW1hZ2VDb3JyZWxhdGUiLCJJbWFnZUNvcnJlc3BvbmRpbmdQb2ludHMiLCJJbWFnZUNyb3AiLCJJbWFnZURhdGEiLCJJbWFnZURlY29udm9sdmUiLCJJbWFnZURlbW9zYWljIiwiSW1hZ2VEaWZmZXJlbmNlIiwiSW1hZ2VEaW1lbnNpb25zIiwiSW1hZ2VEaXNwbGFjZW1lbnRzIiwiSW1hZ2VEaXN0YW5jZSIsIkltYWdlRWZmZWN0IiwiSW1hZ2VFeHBvc3VyZUNvbWJpbmUiLCJJbWFnZUZlYXR1cmVUcmFjayIsIkltYWdlRmlsZUFwcGx5IiwiSW1hZ2VGaWxlRmlsdGVyIiwiSW1hZ2VGaWxlU2NhbiIsIkltYWdlRmlsdGVyIiwiSW1hZ2VGb2N1c0NvbWJpbmUiLCJJbWFnZUZvcmVzdGluZ0NvbXBvbmVudHMiLCJJbWFnZUZvcm1hdHRpbmdXaWR0aCIsIkltYWdlRm9yd2FyZFRyYW5zZm9ybWF0aW9uIiwiSW1hZ2VHcmFwaGljcyIsIkltYWdlSGlzdG9ncmFtIiwiSW1hZ2VJZGVudGlmeSIsIkltYWdlSW5zdGFuY2VRIiwiSW1hZ2VLZXlwb2ludHMiLCJJbWFnZUxhYmVscyIsIkltYWdlTGVnZW5kcyIsIkltYWdlTGV2ZWxzIiwiSW1hZ2VMaW5lcyIsIkltYWdlTWFyZ2lucyIsIkltYWdlTWFya2VyIiwiSW1hZ2VNYXJrZXJzIiwiSW1hZ2VNZWFzdXJlbWVudHMiLCJJbWFnZU1lc2giLCJJbWFnZU11bHRpcGx5IiwiSW1hZ2VPZmZzZXQiLCJJbWFnZVBhZCIsIkltYWdlUGFkZGluZyIsIkltYWdlUGFydGl0aW9uIiwiSW1hZ2VQZXJpb2RvZ3JhbSIsIkltYWdlUGVyc3BlY3RpdmVUcmFuc2Zvcm1hdGlvbiIsIkltYWdlUG9zaXRpb24iLCJJbWFnZVByZXZpZXdGdW5jdGlvbiIsIkltYWdlUHlyYW1pZCIsIkltYWdlUHlyYW1pZEFwcGx5IiwiSW1hZ2VRIiwiSW1hZ2VSYW5nZUNhY2hlIiwiSW1hZ2VSZWNvbG9yIiwiSW1hZ2VSZWZsZWN0IiwiSW1hZ2VSZWdpb24iLCJJbWFnZVJlc2l6ZSIsIkltYWdlUmVzb2x1dGlvbiIsIkltYWdlUmVzdHlsZSIsIkltYWdlUm90YXRlIiwiSW1hZ2VSb3RhdGVkIiwiSW1hZ2VTYWxpZW5jeUZpbHRlciIsIkltYWdlU2NhbGVkIiwiSW1hZ2VTY2FuIiwiSW1hZ2VTaXplIiwiSW1hZ2VTaXplQWN0aW9uIiwiSW1hZ2VTaXplQ2FjaGUiLCJJbWFnZVNpemVNdWx0aXBsaWVycyIsIkltYWdlU2l6ZVJhdyIsIkltYWdlU3VidHJhY3QiLCJJbWFnZVRha2UiLCJJbWFnZVRyYW5zZm9ybWF0aW9uIiwiSW1hZ2VUcmltIiwiSW1hZ2VUeXBlIiwiSW1hZ2VWYWx1ZSIsIkltYWdlVmFsdWVQb3NpdGlvbnMiLCJJbWFnaW5nRGV2aWNlIiwiSW1wbGljaXRSZWdpb24iLCJJbXBsaWVzIiwiSW1wb3J0IiwiSW1wb3J0QXV0b1JlcGxhY2VtZW50cyIsIkltcG9ydEJ5dGVBcnJheSIsIkltcG9ydE9wdGlvbnMiLCJJbXBvcnRTdHJpbmciLCJJbXByb3ZlbWVudEltcG9ydGFuY2UiLCJJbiIsIkluYWN0aXZhdGUiLCJJbmFjdGl2ZSIsIkluY2lkZW5jZUdyYXBoIiwiSW5jaWRlbmNlTGlzdCIsIkluY2lkZW5jZU1hdHJpeCIsIkluY2x1ZGVBcm9tYXRpY0JvbmRzIiwiSW5jbHVkZUNvbnN0YW50QmFzaXMiLCJJbmNsdWRlRGVmaW5pdGlvbnMiLCJJbmNsdWRlRGlyZWN0b3JpZXMiLCJJbmNsdWRlRmlsZUV4dGVuc2lvbiIsIkluY2x1ZGVHZW5lcmF0b3JUYXNrcyIsIkluY2x1ZGVIeWRyb2dlbnMiLCJJbmNsdWRlSW5mbGVjdGlvbnMiLCJJbmNsdWRlTWV0YUluZm9ybWF0aW9uIiwiSW5jbHVkZVBvZHMiLCJJbmNsdWRlUXVhbnRpdGllcyIsIkluY2x1ZGVSZWxhdGVkVGFibGVzIiwiSW5jbHVkZVNpbmd1bGFyVGVybSIsIkluY2x1ZGVXaW5kb3dUaW1lcyIsIkluY3JlbWVudCIsIkluZGVmaW5pdGVNYXRyaXhRIiwiSW5kZW50IiwiSW5kZW50aW5nTmV3bGluZVNwYWNpbmdzIiwiSW5kZW50TWF4RnJhY3Rpb24iLCJJbmRlcGVuZGVuY2VUZXN0IiwiSW5kZXBlbmRlbnRFZGdlU2V0USIsIkluZGVwZW5kZW50UGh5c2ljYWxRdWFudGl0eSIsIkluZGVwZW5kZW50VW5pdCIsIkluZGVwZW5kZW50VW5pdERpbWVuc2lvbiIsIkluZGVwZW5kZW50VmVydGV4U2V0USIsIkluZGV0ZXJtaW5hdGUiLCJJbmRldGVybWluYXRlVGhyZXNob2xkIiwiSW5kZXhDcmVhdGlvbk9wdGlvbnMiLCJJbmRleGVkIiwiSW5kZXhFZGdlVGFnZ2VkR3JhcGgiLCJJbmRleEdyYXBoIiwiSW5kZXhUYWciLCJJbmVxdWFsaXR5IiwiSW5leGFjdE51bWJlclEiLCJJbmV4YWN0TnVtYmVycyIsIkluZmluaXRlRnV0dXJlIiwiSW5maW5pdGVMaW5lIiwiSW5maW5pdGVQYXN0IiwiSW5maW5pdGVQbGFuZSIsIkluZmluaXR5IiwiSW5maXgiLCJJbmZsYXRpb25BZGp1c3QiLCJJbmZsYXRpb25NZXRob2QiLCJJbmZvcm1hdGlvbiIsIkluZm9ybWF0aW9uRGF0YSIsIkluZm9ybWF0aW9uRGF0YUdyaWQiLCJJbmhlcml0ZWQiLCJJbmhlcml0U2NvcGUiLCJJbmhvbW9nZW5lb3VzUG9pc3NvblByb2Nlc3MiLCJJbml0aWFsRXZhbHVhdGlvbkhpc3RvcnkiLCJJbml0aWFsaXphdGlvbiIsIkluaXRpYWxpemF0aW9uQ2VsbCIsIkluaXRpYWxpemF0aW9uQ2VsbEV2YWx1YXRpb24iLCJJbml0aWFsaXphdGlvbkNlbGxXYXJuaW5nIiwiSW5pdGlhbGl6YXRpb25PYmplY3RzIiwiSW5pdGlhbGl6YXRpb25WYWx1ZSIsIkluaXRpYWxpemUiLCJJbml0aWFsU2VlZGluZyIsIklubGluZUNvdW50ZXJBc3NpZ25tZW50cyIsIklubGluZUNvdW50ZXJJbmNyZW1lbnRzIiwiSW5saW5lUnVsZXMiLCJJbm5lciIsIklubmVyUG9seWdvbiIsIklubmVyUG9seWhlZHJvbiIsIklucGFpbnQiLCJJbnB1dCIsIklucHV0QWxpYXNlcyIsIklucHV0QXNzdW1wdGlvbnMiLCJJbnB1dEF1dG9SZXBsYWNlbWVudHMiLCJJbnB1dEZpZWxkIiwiSW5wdXRGaWVsZEJveCIsIklucHV0RmllbGRCb3hPcHRpb25zIiwiSW5wdXRGb3JtIiwiSW5wdXRHcm91cGluZyIsIklucHV0TmFtZVBhY2tldCIsIklucHV0Tm90ZWJvb2siLCJJbnB1dFBhY2tldCIsIklucHV0U2V0dGluZ3MiLCJJbnB1dFN0cmVhbSIsIklucHV0U3RyaW5nIiwiSW5wdXRTdHJpbmdQYWNrZXQiLCJJbnB1dFRvQm94Rm9ybVBhY2tldCIsIkluc2VydCIsIkluc2VydGlvbkZ1bmN0aW9uIiwiSW5zZXJ0aW9uUG9pbnRPYmplY3QiLCJJbnNlcnRMaW5lYnJlYWtzIiwiSW5zZXJ0UmVzdWx0cyIsIkluc2V0IiwiSW5zZXQzREJveCIsIkluc2V0M0RCb3hPcHRpb25zIiwiSW5zZXRCb3giLCJJbnNldEJveE9wdGlvbnMiLCJJbnNwaGVyZSIsIkluc3RhbGwiLCJJbnN0YWxsU2VydmljZSIsIkluc3RhbmNlTm9ybWFsaXphdGlvbkxheWVyIiwiSW5TdHJpbmciLCJJbnRlZ2VyIiwiSW50ZWdlckRpZ2l0cyIsIkludGVnZXJFeHBvbmVudCIsIkludGVnZXJMZW5ndGgiLCJJbnRlZ2VyTmFtZSIsIkludGVnZXJQYXJ0IiwiSW50ZWdlclBhcnRpdGlvbnMiLCJJbnRlZ2VyUSIsIkludGVnZXJSZXZlcnNlIiwiSW50ZWdlcnMiLCJJbnRlZ2VyU3RyaW5nIiwiSW50ZWdyYWwiLCJJbnRlZ3JhdGUiLCJJbnRlcmFjdGl2ZSIsIkludGVyYWN0aXZlVHJhZGluZ0NoYXJ0IiwiSW50ZXJsYWNlZCIsIkludGVybGVhdmluZyIsIkludGVybmFsbHlCYWxhbmNlZERlY29tcG9zaXRpb24iLCJJbnRlcnBvbGF0aW5nRnVuY3Rpb24iLCJJbnRlcnBvbGF0aW5nUG9seW5vbWlhbCIsIkludGVycG9sYXRpb24iLCJJbnRlcnBvbGF0aW9uT3JkZXIiLCJJbnRlcnBvbGF0aW9uUG9pbnRzIiwiSW50ZXJwb2xhdGlvblByZWNpc2lvbiIsIkludGVycHJldGF0aW9uIiwiSW50ZXJwcmV0YXRpb25Cb3giLCJJbnRlcnByZXRhdGlvbkJveE9wdGlvbnMiLCJJbnRlcnByZXRhdGlvbkZ1bmN0aW9uIiwiSW50ZXJwcmV0ZXIiLCJJbnRlcnByZXRUZW1wbGF0ZSIsIkludGVycXVhcnRpbGVSYW5nZSIsIkludGVycnVwdCIsIkludGVycnVwdFNldHRpbmdzIiwiSW50ZXJzZWN0ZWRFbnRpdHlDbGFzcyIsIkludGVyc2VjdGluZ1EiLCJJbnRlcnNlY3Rpb24iLCJJbnRlcnZhbCIsIkludGVydmFsSW50ZXJzZWN0aW9uIiwiSW50ZXJ2YWxNYXJrZXJzIiwiSW50ZXJ2YWxNYXJrZXJzU3R5bGUiLCJJbnRlcnZhbE1lbWJlclEiLCJJbnRlcnZhbFNsaWRlciIsIkludGVydmFsVW5pb24iLCJJbnRvIiwiSW52ZXJzZSIsIkludmVyc2VCZXRhUmVndWxhcml6ZWQiLCJJbnZlcnNlQ0RGIiwiSW52ZXJzZUNoaVNxdWFyZURpc3RyaWJ1dGlvbiIsIkludmVyc2VDb250aW51b3VzV2F2ZWxldFRyYW5zZm9ybSIsIkludmVyc2VEaXN0YW5jZVRyYW5zZm9ybSIsIkludmVyc2VFbGxpcHRpY05vbWVRIiwiSW52ZXJzZUVyZiIsIkludmVyc2VFcmZjIiwiSW52ZXJzZUZvdXJpZXIiLCJJbnZlcnNlRm91cmllckNvc1RyYW5zZm9ybSIsIkludmVyc2VGb3VyaWVyU2VxdWVuY2VUcmFuc2Zvcm0iLCJJbnZlcnNlRm91cmllclNpblRyYW5zZm9ybSIsIkludmVyc2VGb3VyaWVyVHJhbnNmb3JtIiwiSW52ZXJzZUZ1bmN0aW9uIiwiSW52ZXJzZUZ1bmN0aW9ucyIsIkludmVyc2VHYW1tYURpc3RyaWJ1dGlvbiIsIkludmVyc2VHYW1tYVJlZ3VsYXJpemVkIiwiSW52ZXJzZUdhdXNzaWFuRGlzdHJpYnV0aW9uIiwiSW52ZXJzZUd1ZGVybWFubmlhbiIsIkludmVyc2VIYW5rZWxUcmFuc2Zvcm0iLCJJbnZlcnNlSGF2ZXJzaW5lIiwiSW52ZXJzZUltYWdlUHlyYW1pZCIsIkludmVyc2VKYWNvYmlDRCIsIkludmVyc2VKYWNvYmlDTiIsIkludmVyc2VKYWNvYmlDUyIsIkludmVyc2VKYWNvYmlEQyIsIkludmVyc2VKYWNvYmlETiIsIkludmVyc2VKYWNvYmlEUyIsIkludmVyc2VKYWNvYmlOQyIsIkludmVyc2VKYWNvYmlORCIsIkludmVyc2VKYWNvYmlOUyIsIkludmVyc2VKYWNvYmlTQyIsIkludmVyc2VKYWNvYmlTRCIsIkludmVyc2VKYWNvYmlTTiIsIkludmVyc2VMYXBsYWNlVHJhbnNmb3JtIiwiSW52ZXJzZU1lbGxpblRyYW5zZm9ybSIsIkludmVyc2VQZXJtdXRhdGlvbiIsIkludmVyc2VSYWRvbiIsIkludmVyc2VSYWRvblRyYW5zZm9ybSIsIkludmVyc2VTZXJpZXMiLCJJbnZlcnNlU2hvcnRUaW1lRm91cmllciIsIkludmVyc2VTcGVjdHJvZ3JhbSIsIkludmVyc2VTdXJ2aXZhbEZ1bmN0aW9uIiwiSW52ZXJzZVRyYW5zZm9ybWVkUmVnaW9uIiwiSW52ZXJzZVdhdmVsZXRUcmFuc2Zvcm0iLCJJbnZlcnNlV2VpZXJzdHJhc3NQIiwiSW52ZXJzZVdpc2hhcnRNYXRyaXhEaXN0cmlidXRpb24iLCJJbnZlcnNlWlRyYW5zZm9ybSIsIkludmlzaWJsZSIsIkludmlzaWJsZUFwcGxpY2F0aW9uIiwiSW52aXNpYmxlVGltZXMiLCJJUEFkZHJlc3MiLCJJcnJlZHVjaWJsZVBvbHlub21pYWxRIiwiSXNsYW5kRGF0YSIsIklzb2xhdGluZ0ludGVydmFsIiwiSXNvbW9ycGhpY0dyYXBoUSIsIklzb3RvcGVEYXRhIiwiSXRhbGljIiwiSXRlbSIsIkl0ZW1Bc3BlY3RSYXRpbyIsIkl0ZW1Cb3giLCJJdGVtQm94T3B0aW9ucyIsIkl0ZW1EaXNwbGF5RnVuY3Rpb24iLCJJdGVtU2l6ZSIsIkl0ZW1TdHlsZSIsIkl0b1Byb2Nlc3MiLCJKYWNjYXJkRGlzc2ltaWxhcml0eSIsIkphY29iaUFtcGxpdHVkZSIsIkphY29iaWFuIiwiSmFjb2JpQ0QiLCJKYWNvYmlDTiIsIkphY29iaUNTIiwiSmFjb2JpREMiLCJKYWNvYmlETiIsIkphY29iaURTIiwiSmFjb2JpTkMiLCJKYWNvYmlORCIsIkphY29iaU5TIiwiSmFjb2JpUCIsIkphY29iaVNDIiwiSmFjb2JpU0QiLCJKYWNvYmlTTiIsIkphY29iaVN5bWJvbCIsIkphY29iaVpldGEiLCJKYW5rb0dyb3VwSjEiLCJKYW5rb0dyb3VwSjIiLCJKYW5rb0dyb3VwSjMiLCJKYW5rb0dyb3VwSjQiLCJKYXJxdWVCZXJhQUxNVGVzdCIsIkpvaG5zb25EaXN0cmlidXRpb24iLCJKb2luIiwiSm9pbkFjcm9zcyIsIkpvaW5lZCIsIkpvaW5lZEN1cnZlIiwiSm9pbmVkQ3VydmVCb3giLCJKb2luZWRDdXJ2ZUJveE9wdGlvbnMiLCJKb2luRm9ybSIsIkpvcmRhbkRlY29tcG9zaXRpb24iLCJKb3JkYW5Nb2RlbERlY29tcG9zaXRpb24iLCJKdWxpYW5EYXRlIiwiSnVsaWFTZXRCb2V0dGNoZXIiLCJKdWxpYVNldEl0ZXJhdGlvbkNvdW50IiwiSnVsaWFTZXRQbG90IiwiSnVsaWFTZXRQb2ludHMiLCJLIiwiS2FnaUNoYXJ0IiwiS2Fpc2VyQmVzc2VsV2luZG93IiwiS2Fpc2VyV2luZG93IiwiS2FsbWFuRXN0aW1hdG9yIiwiS2FsbWFuRmlsdGVyIiwiS2FyaHVuZW5Mb2V2ZURlY29tcG9zaXRpb24iLCJLYXJ5VHJlZSIsIkthdHpDZW50cmFsaXR5IiwiS0NvcmVDb21wb25lbnRzIiwiS0Rpc3RyaWJ1dGlvbiIsIktFZGdlQ29ubmVjdGVkQ29tcG9uZW50cyIsIktFZGdlQ29ubmVjdGVkR3JhcGhRIiwiS2VlcEV4aXN0aW5nVmVyc2lvbiIsIktlbHZpbkJlaSIsIktlbHZpbkJlciIsIktlbHZpbktlaSIsIktlbHZpbktlciIsIktlbmRhbGxUYXUiLCJLZW5kYWxsVGF1VGVzdCIsIktlcm5lbEV4ZWN1dGUiLCJLZXJuZWxGdW5jdGlvbiIsIktlcm5lbE1peHR1cmVEaXN0cmlidXRpb24iLCJLZXJuZWxPYmplY3QiLCJLZXJuZWxzIiwiS2V0IiwiS2V5IiwiS2V5Q29sbGlzaW9uRnVuY3Rpb24iLCJLZXlDb21wbGVtZW50IiwiS2V5RHJvcCIsIktleURyb3BGcm9tIiwiS2V5RXhpc3RzUSIsIktleUZyZWVRIiwiS2V5SW50ZXJzZWN0aW9uIiwiS2V5TWFwIiwiS2V5TWVtYmVyUSIsIktleXBvaW50U3RyZW5ndGgiLCJLZXlzIiwiS2V5U2VsZWN0IiwiS2V5U29ydCIsIktleVNvcnRCeSIsIktleVRha2UiLCJLZXlVbmlvbiIsIktleVZhbHVlTWFwIiwiS2V5VmFsdWVQYXR0ZXJuIiwiS2hpbmNoaW4iLCJLaWxsUHJvY2VzcyIsIktpcmNoaG9mZkdyYXBoIiwiS2lyY2hob2ZmTWF0cml4IiwiS2xlaW5JbnZhcmlhbnRKIiwiS25hcHNhY2tTb2x2ZSIsIktuaWdodFRvdXJHcmFwaCIsIktub3REYXRhIiwiS25vd25Vbml0USIsIktvY2hDdXJ2ZSIsIktvbG1vZ29yb3ZTbWlybm92VGVzdCIsIktyb25lY2tlckRlbHRhIiwiS3JvbmVja2VyTW9kZWxEZWNvbXBvc2l0aW9uIiwiS3JvbmVja2VyUHJvZHVjdCIsIktyb25lY2tlclN5bWJvbCIsIkt1aXBlclRlc3QiLCJLdW1hcmFzd2FteURpc3RyaWJ1dGlvbiIsIkt1cnRvc2lzIiwiS3V3YWhhcmFGaWx0ZXIiLCJLVmVydGV4Q29ubmVjdGVkQ29tcG9uZW50cyIsIktWZXJ0ZXhDb25uZWN0ZWRHcmFwaFEiLCJMQUJDb2xvciIsIkxhYmVsIiwiTGFiZWxlZCIsIkxhYmVsZWRTbGlkZXIiLCJMYWJlbGluZ0Z1bmN0aW9uIiwiTGFiZWxpbmdTaXplIiwiTGFiZWxTdHlsZSIsIkxhYmVsVmlzaWJpbGl0eSIsIkxhZ3VlcnJlTCIsIkxha2VEYXRhIiwiTGFtYmRhQ29tcG9uZW50cyIsIkxhbWJlcnRXIiwiTGFtaW5hRGF0YSIsIkxhbmN6b3NXaW5kb3ciLCJMYW5kYXVEaXN0cmlidXRpb24iLCJMYW5ndWFnZSIsIkxhbmd1YWdlQ2F0ZWdvcnkiLCJMYW5ndWFnZURhdGEiLCJMYW5ndWFnZUlkZW50aWZ5IiwiTGFuZ3VhZ2VPcHRpb25zIiwiTGFwbGFjZURpc3RyaWJ1dGlvbiIsIkxhcGxhY2VUcmFuc2Zvcm0iLCJMYXBsYWNpYW4iLCJMYXBsYWNpYW5GaWx0ZXIiLCJMYXBsYWNpYW5HYXVzc2lhbkZpbHRlciIsIkxhcmdlIiwiTGFyZ2VyIiwiTGFzdCIsIkxhdGl0dWRlIiwiTGF0aXR1ZGVMb25naXR1ZGUiLCJMYXR0aWNlRGF0YSIsIkxhdHRpY2VSZWR1Y2UiLCJMYXVuY2giLCJMYXVuY2hLZXJuZWxzIiwiTGF5ZXJlZEdyYXBoUGxvdCIsIkxheWVyU2l6ZUZ1bmN0aW9uIiwiTGF5b3V0SW5mb3JtYXRpb24iLCJMQ0hDb2xvciIsIkxDTSIsIkxlYWRlclNpemUiLCJMZWFmQ291bnQiLCJMZWFwWWVhclEiLCJMZWFybkRpc3RyaWJ1dGlvbiIsIkxlYXJuZWREaXN0cmlidXRpb24iLCJMZWFybmluZ1JhdGUiLCJMZWFybmluZ1JhdGVNdWx0aXBsaWVycyIsIkxlYXN0U3F1YXJlcyIsIkxlYXN0U3F1YXJlc0ZpbHRlcktlcm5lbCIsIkxlZnQiLCJMZWZ0QXJyb3ciLCJMZWZ0QXJyb3dCYXIiLCJMZWZ0QXJyb3dSaWdodEFycm93IiwiTGVmdERvd25UZWVWZWN0b3IiLCJMZWZ0RG93blZlY3RvciIsIkxlZnREb3duVmVjdG9yQmFyIiwiTGVmdFJpZ2h0QXJyb3ciLCJMZWZ0UmlnaHRWZWN0b3IiLCJMZWZ0VGVlIiwiTGVmdFRlZUFycm93IiwiTGVmdFRlZVZlY3RvciIsIkxlZnRUcmlhbmdsZSIsIkxlZnRUcmlhbmdsZUJhciIsIkxlZnRUcmlhbmdsZUVxdWFsIiwiTGVmdFVwRG93blZlY3RvciIsIkxlZnRVcFRlZVZlY3RvciIsIkxlZnRVcFZlY3RvciIsIkxlZnRVcFZlY3RvckJhciIsIkxlZnRWZWN0b3IiLCJMZWZ0VmVjdG9yQmFyIiwiTGVnZW5kQXBwZWFyYW5jZSIsIkxlZ2VuZGVkIiwiTGVnZW5kRnVuY3Rpb24iLCJMZWdlbmRMYWJlbCIsIkxlZ2VuZExheW91dCIsIkxlZ2VuZE1hcmdpbnMiLCJMZWdlbmRNYXJrZXJzIiwiTGVnZW5kTWFya2VyU2l6ZSIsIkxlZ2VuZHJlUCIsIkxlZ2VuZHJlUSIsIkxlZ2VuZHJlVHlwZSIsIkxlbmd0aCIsIkxlbmd0aFdoaWxlIiwiTGVyY2hQaGkiLCJMZXNzIiwiTGVzc0VxdWFsIiwiTGVzc0VxdWFsR3JlYXRlciIsIkxlc3NFcXVhbFRoYW4iLCJMZXNzRnVsbEVxdWFsIiwiTGVzc0dyZWF0ZXIiLCJMZXNzTGVzcyIsIkxlc3NTbGFudEVxdWFsIiwiTGVzc1RoYW4iLCJMZXNzVGlsZGUiLCJMZXR0ZXJDaGFyYWN0ZXIiLCJMZXR0ZXJDb3VudHMiLCJMZXR0ZXJOdW1iZXIiLCJMZXR0ZXJRIiwiTGV2ZWwiLCJMZXZlbmVUZXN0IiwiTGV2aUNpdml0YVRlbnNvciIsIkxldnlEaXN0cmlidXRpb24iLCJMZXhpY29ncmFwaGljIiwiTGlicmFyeURhdGFUeXBlIiwiTGlicmFyeUZ1bmN0aW9uIiwiTGlicmFyeUZ1bmN0aW9uRXJyb3IiLCJMaWJyYXJ5RnVuY3Rpb25JbmZvcm1hdGlvbiIsIkxpYnJhcnlGdW5jdGlvbkxvYWQiLCJMaWJyYXJ5RnVuY3Rpb25VbmxvYWQiLCJMaWJyYXJ5TG9hZCIsIkxpYnJhcnlVbmxvYWQiLCJMaWNlbnNlSUQiLCJMaWZ0aW5nRmlsdGVyRGF0YSIsIkxpZnRpbmdXYXZlbGV0VHJhbnNmb3JtIiwiTGlnaHRCbHVlIiwiTGlnaHRCcm93biIsIkxpZ2h0Q3lhbiIsIkxpZ2h0ZXIiLCJMaWdodEdyYXkiLCJMaWdodEdyZWVuIiwiTGlnaHRpbmciLCJMaWdodGluZ0FuZ2xlIiwiTGlnaHRNYWdlbnRhIiwiTGlnaHRPcmFuZ2UiLCJMaWdodFBpbmsiLCJMaWdodFB1cnBsZSIsIkxpZ2h0UmVkIiwiTGlnaHRTb3VyY2VzIiwiTGlnaHRZZWxsb3ciLCJMaWtlbGlob29kIiwiTGltaXQiLCJMaW1pdHNQb3NpdGlvbmluZyIsIkxpbWl0c1Bvc2l0aW9uaW5nVG9rZW5zIiwiTGluZGxleURpc3RyaWJ1dGlvbiIsIkxpbmUiLCJMaW5lM0RCb3giLCJMaW5lM0RCb3hPcHRpb25zIiwiTGluZWFyRmlsdGVyIiwiTGluZWFyRnJhY3Rpb25hbE9wdGltaXphdGlvbiIsIkxpbmVhckZyYWN0aW9uYWxUcmFuc2Zvcm0iLCJMaW5lYXJHcmFkaWVudEltYWdlIiwiTGluZWFyaXppbmdUcmFuc2Zvcm1hdGlvbkRhdGEiLCJMaW5lYXJMYXllciIsIkxpbmVhck1vZGVsRml0IiwiTGluZWFyT2Zmc2V0RnVuY3Rpb24iLCJMaW5lYXJPcHRpbWl6YXRpb24iLCJMaW5lYXJQcm9ncmFtbWluZyIsIkxpbmVhclJlY3VycmVuY2UiLCJMaW5lYXJTb2x2ZSIsIkxpbmVhclNvbHZlRnVuY3Rpb24iLCJMaW5lQm94IiwiTGluZUJveE9wdGlvbnMiLCJMaW5lQnJlYWsiLCJMaW5lYnJlYWtBZGp1c3RtZW50cyIsIkxpbmVCcmVha0NoYXJ0IiwiTGluZWJyZWFrU2VtaWNvbG9uV2VpZ2h0aW5nIiwiTGluZUJyZWFrV2l0aGluIiwiTGluZUNvbG9yIiwiTGluZUdyYXBoIiwiTGluZUluZGVudCIsIkxpbmVJbmRlbnRNYXhGcmFjdGlvbiIsIkxpbmVJbnRlZ3JhbENvbnZvbHV0aW9uUGxvdCIsIkxpbmVJbnRlZ3JhbENvbnZvbHV0aW9uU2NhbGUiLCJMaW5lTGVnZW5kIiwiTGluZU9wYWNpdHkiLCJMaW5lU3BhY2luZyIsIkxpbmVXcmFwUGFydHMiLCJMaW5rQWN0aXZhdGUiLCJMaW5rQ2xvc2UiLCJMaW5rQ29ubmVjdCIsIkxpbmtDb25uZWN0ZWRRIiwiTGlua0NyZWF0ZSIsIkxpbmtFcnJvciIsIkxpbmtGbHVzaCIsIkxpbmtGdW5jdGlvbiIsIkxpbmtIb3N0IiwiTGlua0ludGVycnVwdCIsIkxpbmtMYXVuY2giLCJMaW5rTW9kZSIsIkxpbmtPYmplY3QiLCJMaW5rT3BlbiIsIkxpbmtPcHRpb25zIiwiTGlua1BhdHRlcm5zIiwiTGlua1Byb3RvY29sIiwiTGlua1JhbmtDZW50cmFsaXR5IiwiTGlua1JlYWQiLCJMaW5rUmVhZEhlbGQiLCJMaW5rUmVhZHlRIiwiTGlua3MiLCJMaW5rU2VydmljZSIsIkxpbmtXcml0ZSIsIkxpbmtXcml0ZUhlbGQiLCJMaW91dmlsbGVMYW1iZGEiLCJMaXN0IiwiTGlzdGFibGUiLCJMaXN0QW5pbWF0ZSIsIkxpc3RDb250b3VyUGxvdCIsIkxpc3RDb250b3VyUGxvdDNEIiwiTGlzdENvbnZvbHZlIiwiTGlzdENvcnJlbGF0ZSIsIkxpc3RDdXJ2ZVBhdGhQbG90IiwiTGlzdERlY29udm9sdmUiLCJMaXN0RGVuc2l0eVBsb3QiLCJMaXN0RGVuc2l0eVBsb3QzRCIsIkxpc3RlbiIsIkxpc3RGb3JtYXQiLCJMaXN0Rm91cmllclNlcXVlbmNlVHJhbnNmb3JtIiwiTGlzdEludGVycG9sYXRpb24iLCJMaXN0TGluZUludGVncmFsQ29udm9sdXRpb25QbG90IiwiTGlzdExpbmVQbG90IiwiTGlzdExvZ0xpbmVhclBsb3QiLCJMaXN0TG9nTG9nUGxvdCIsIkxpc3RMb2dQbG90IiwiTGlzdFBpY2tlciIsIkxpc3RQaWNrZXJCb3giLCJMaXN0UGlja2VyQm94QmFja2dyb3VuZCIsIkxpc3RQaWNrZXJCb3hPcHRpb25zIiwiTGlzdFBsYXkiLCJMaXN0UGxvdCIsIkxpc3RQbG90M0QiLCJMaXN0UG9pbnRQbG90M0QiLCJMaXN0UG9sYXJQbG90IiwiTGlzdFEiLCJMaXN0U2xpY2VDb250b3VyUGxvdDNEIiwiTGlzdFNsaWNlRGVuc2l0eVBsb3QzRCIsIkxpc3RTbGljZVZlY3RvclBsb3QzRCIsIkxpc3RTdGVwUGxvdCIsIkxpc3RTdHJlYW1EZW5zaXR5UGxvdCIsIkxpc3RTdHJlYW1QbG90IiwiTGlzdFN1cmZhY2VQbG90M0QiLCJMaXN0VmVjdG9yRGVuc2l0eVBsb3QiLCJMaXN0VmVjdG9yUGxvdCIsIkxpc3RWZWN0b3JQbG90M0QiLCJMaXN0WlRyYW5zZm9ybSIsIkxpdGVyYWwiLCJMaXRlcmFsU2VhcmNoIiwiTG9jYWxBZGFwdGl2ZUJpbmFyaXplIiwiTG9jYWxDYWNoZSIsIkxvY2FsQ2x1c3RlcmluZ0NvZWZmaWNpZW50IiwiTG9jYWxpemVEZWZpbml0aW9ucyIsIkxvY2FsaXplVmFyaWFibGVzIiwiTG9jYWxPYmplY3QiLCJMb2NhbE9iamVjdHMiLCJMb2NhbFJlc3BvbnNlTm9ybWFsaXphdGlvbkxheWVyIiwiTG9jYWxTdWJtaXQiLCJMb2NhbFN5bWJvbCIsIkxvY2FsVGltZSIsIkxvY2FsVGltZVpvbmUiLCJMb2NhdGlvbkVxdWl2YWxlbmNlVGVzdCIsIkxvY2F0aW9uVGVzdCIsIkxvY2F0b3IiLCJMb2NhdG9yQXV0b0NyZWF0ZSIsIkxvY2F0b3JCb3giLCJMb2NhdG9yQm94T3B0aW9ucyIsIkxvY2F0b3JDZW50ZXJpbmciLCJMb2NhdG9yUGFuZSIsIkxvY2F0b3JQYW5lQm94IiwiTG9jYXRvclBhbmVCb3hPcHRpb25zIiwiTG9jYXRvclJlZ2lvbiIsIkxvY2tlZCIsIkxvZyIsIkxvZzEwIiwiTG9nMiIsIkxvZ0Jhcm5lc0ciLCJMb2dHYW1tYSIsIkxvZ0dhbW1hRGlzdHJpYnV0aW9uIiwiTG9naWNhbEV4cGFuZCIsIkxvZ0ludGVncmFsIiwiTG9naXN0aWNEaXN0cmlidXRpb24iLCJMb2dpc3RpY1NpZ21vaWQiLCJMb2dpdE1vZGVsRml0IiwiTG9nTGlrZWxpaG9vZCIsIkxvZ0xpbmVhclBsb3QiLCJMb2dMb2dpc3RpY0Rpc3RyaWJ1dGlvbiIsIkxvZ0xvZ1Bsb3QiLCJMb2dNdWx0aW5vcm1hbERpc3RyaWJ1dGlvbiIsIkxvZ05vcm1hbERpc3RyaWJ1dGlvbiIsIkxvZ1Bsb3QiLCJMb2dSYW5rVGVzdCIsIkxvZ1Nlcmllc0Rpc3RyaWJ1dGlvbiIsIkxvbmdFcXVhbCIsIkxvbmdlc3QiLCJMb25nZXN0Q29tbW9uU2VxdWVuY2UiLCJMb25nZXN0Q29tbW9uU2VxdWVuY2VQb3NpdGlvbnMiLCJMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2UiLCJMb25nZXN0Q29tbW9uU3Vic2VxdWVuY2VQb3NpdGlvbnMiLCJMb25nZXN0TWF0Y2giLCJMb25nZXN0T3JkZXJlZFNlcXVlbmNlIiwiTG9uZ0Zvcm0iLCJMb25naXR1ZGUiLCJMb25nTGVmdEFycm93IiwiTG9uZ0xlZnRSaWdodEFycm93IiwiTG9uZ1JpZ2h0QXJyb3ciLCJMb25nU2hvcnRUZXJtTWVtb3J5TGF5ZXIiLCJMb29rdXAiLCJMb29wYmFjayIsIkxvb3BGcmVlR3JhcGhRIiwiTG9vcGluZyIsIkxvc3NGdW5jdGlvbiIsIkxvd2VyQ2FzZVEiLCJMb3dlckxlZnRBcnJvdyIsIkxvd2VyUmlnaHRBcnJvdyIsIkxvd2VyVHJpYW5ndWxhcml6ZSIsIkxvd2VyVHJpYW5ndWxhck1hdHJpeFEiLCJMb3dwYXNzRmlsdGVyIiwiTFFFc3RpbWF0b3JHYWlucyIsIkxRR1JlZ3VsYXRvciIsIkxRT3V0cHV0UmVndWxhdG9yR2FpbnMiLCJMUVJlZ3VsYXRvckdhaW5zIiwiTFVCYWNrU3Vic3RpdHV0aW9uIiwiTHVjYXNMIiwiTHVjY2lvU2FtaUNvbXBvbmVudHMiLCJMVURlY29tcG9zaXRpb24iLCJMdW5hckVjbGlwc2UiLCJMVVZDb2xvciIsIkx5YXB1bm92U29sdmUiLCJMeW9uc0dyb3VwTHkiLCJNYWNoaW5lSUQiLCJNYWNoaW5lTmFtZSIsIk1hY2hpbmVOdW1iZXJRIiwiTWFjaGluZVByZWNpc2lvbiIsIk1hY2ludG9zaFN5c3RlbVBhZ2VTZXR1cCIsIk1hZ2VudGEiLCJNYWduaWZpY2F0aW9uIiwiTWFnbmlmeSIsIk1haWxBZGRyZXNzVmFsaWRhdGlvbiIsIk1haWxFeGVjdXRlIiwiTWFpbEZvbGRlciIsIk1haWxJdGVtIiwiTWFpbFJlY2VpdmVyRnVuY3Rpb24iLCJNYWlsUmVzcG9uc2VGdW5jdGlvbiIsIk1haWxTZWFyY2giLCJNYWlsU2VydmVyQ29ubmVjdCIsIk1haWxTZXJ2ZXJDb25uZWN0aW9uIiwiTWFpbFNldHRpbmdzIiwiTWFpblNvbHZlIiwiTWFpbnRhaW5EeW5hbWljQ2FjaGVzIiwiTWFqb3JpdHkiLCJNYWtlQm94ZXMiLCJNYWtlRXhwcmVzc2lvbiIsIk1ha2VSdWxlcyIsIk1hbmFnZWRMaWJyYXJ5RXhwcmVzc2lvbklEIiwiTWFuYWdlZExpYnJhcnlFeHByZXNzaW9uUSIsIk1hbmRlbGJyb3RTZXRCb2V0dGNoZXIiLCJNYW5kZWxicm90U2V0RGlzdGFuY2UiLCJNYW5kZWxicm90U2V0SXRlcmF0aW9uQ291bnQiLCJNYW5kZWxicm90U2V0TWVtYmVyUSIsIk1hbmRlbGJyb3RTZXRQbG90IiwiTWFuZ29sZHRMYW1iZGEiLCJNYW5oYXR0YW5EaXN0YW5jZSIsIk1hbmlwdWxhdGUiLCJNYW5pcHVsYXRvciIsIk1hbm5lZFNwYWNlTWlzc2lvbkRhdGEiLCJNYW5uV2hpdG5leVRlc3QiLCJNYW50aXNzYUV4cG9uZW50IiwiTWFudWFsIiwiTWFwIiwiTWFwQWxsIiwiTWFwQXQiLCJNYXBJbmRleGVkIiwiTUFQcm9jZXNzIiwiTWFwVGhyZWFkIiwiTWFyY2hlbmtvUGFzdHVyRGlzdHJpYnV0aW9uIiwiTWFyY3VtUSIsIk1hcmRpYUNvbWJpbmVkVGVzdCIsIk1hcmRpYUt1cnRvc2lzVGVzdCIsIk1hcmRpYVNrZXduZXNzVGVzdCIsIk1hcmdpbmFsRGlzdHJpYnV0aW9uIiwiTWFya292UHJvY2Vzc1Byb3BlcnRpZXMiLCJNYXNraW5nIiwiTWF0Y2hpbmdEaXNzaW1pbGFyaXR5IiwiTWF0Y2hMb2NhbE5hbWVRIiwiTWF0Y2hMb2NhbE5hbWVzIiwiTWF0Y2hRIiwiTWF0ZXJpYWwiLCJNYXRoZW1hdGljYWxGdW5jdGlvbkRhdGEiLCJNYXRoZW1hdGljYU5vdGF0aW9uIiwiTWF0aGlldUMiLCJNYXRoaWV1Q2hhcmFjdGVyaXN0aWNBIiwiTWF0aGlldUNoYXJhY3RlcmlzdGljQiIsIk1hdGhpZXVDaGFyYWN0ZXJpc3RpY0V4cG9uZW50IiwiTWF0aGlldUNQcmltZSIsIk1hdGhpZXVHcm91cE0xMSIsIk1hdGhpZXVHcm91cE0xMiIsIk1hdGhpZXVHcm91cE0yMiIsIk1hdGhpZXVHcm91cE0yMyIsIk1hdGhpZXVHcm91cE0yNCIsIk1hdGhpZXVTIiwiTWF0aGlldVNQcmltZSIsIk1hdGhNTEZvcm0iLCJNYXRoTUxUZXh0IiwiTWF0cmljZXMiLCJNYXRyaXhFeHAiLCJNYXRyaXhGb3JtIiwiTWF0cml4RnVuY3Rpb24iLCJNYXRyaXhMb2ciLCJNYXRyaXhOb3JtYWxEaXN0cmlidXRpb24iLCJNYXRyaXhQbG90IiwiTWF0cml4UG93ZXIiLCJNYXRyaXhQcm9wZXJ0eURpc3RyaWJ1dGlvbiIsIk1hdHJpeFEiLCJNYXRyaXhSYW5rIiwiTWF0cml4VERpc3RyaWJ1dGlvbiIsIk1heCIsIk1heEJlbmQiLCJNYXhDZWxsTWVhc3VyZSIsIk1heENvbG9yRGlzdGFuY2UiLCJNYXhEYXRlIiwiTWF4RGV0ZWN0IiwiTWF4RHVyYXRpb24iLCJNYXhFeHRyYUJhbmR3aWR0aHMiLCJNYXhFeHRyYUNvbmRpdGlvbnMiLCJNYXhGZWF0dXJlRGlzcGxhY2VtZW50IiwiTWF4RmVhdHVyZXMiLCJNYXhGaWx0ZXIiLCJNYXhpbWFsQnkiLCJNYXhpbWl6ZSIsIk1heEl0ZW1zIiwiTWF4SXRlcmF0aW9ucyIsIk1heExpbWl0IiwiTWF4TWVtb3J5VXNlZCIsIk1heE1peHR1cmVLZXJuZWxzIiwiTWF4T3ZlcmxhcEZyYWN0aW9uIiwiTWF4UGxvdFBvaW50cyIsIk1heFBvaW50cyIsIk1heFJlY3Vyc2lvbiIsIk1heFN0YWJsZURpc3RyaWJ1dGlvbiIsIk1heFN0ZXBGcmFjdGlvbiIsIk1heFN0ZXBzIiwiTWF4U3RlcFNpemUiLCJNYXhUcmFpbmluZ1JvdW5kcyIsIk1heFZhbHVlIiwiTWF4d2VsbERpc3RyaWJ1dGlvbiIsIk1heFdvcmRHYXAiLCJNY0xhdWdobGluR3JvdXBNY0wiLCJNZWFuIiwiTWVhbkFic29sdXRlTG9zc0xheWVyIiwiTWVhbkFyb3VuZCIsIk1lYW5DbHVzdGVyaW5nQ29lZmZpY2llbnQiLCJNZWFuRGVncmVlQ29ubmVjdGl2aXR5IiwiTWVhbkRldmlhdGlvbiIsIk1lYW5GaWx0ZXIiLCJNZWFuR3JhcGhEaXN0YW5jZSIsIk1lYW5OZWlnaGJvckRlZ3JlZSIsIk1lYW5TaGlmdCIsIk1lYW5TaGlmdEZpbHRlciIsIk1lYW5TcXVhcmVkTG9zc0xheWVyIiwiTWVkaWFuIiwiTWVkaWFuRGV2aWF0aW9uIiwiTWVkaWFuRmlsdGVyIiwiTWVkaWNhbFRlc3REYXRhIiwiTWVkaXVtIiwiTWVpamVyRyIsIk1laWplckdSZWR1Y2UiLCJNZWl4bmVyRGlzdHJpYnV0aW9uIiwiTWVsbGluQ29udm9sdmUiLCJNZWxsaW5UcmFuc2Zvcm0iLCJNZW1iZXJRIiwiTWVtb3J5QXZhaWxhYmxlIiwiTWVtb3J5Q29uc3RyYWluZWQiLCJNZW1vcnlDb25zdHJhaW50IiwiTWVtb3J5SW5Vc2UiLCJNZW5nZXJNZXNoIiwiTWVudSIsIk1lbnVBcHBlYXJhbmNlIiwiTWVudUNvbW1hbmRLZXkiLCJNZW51RXZhbHVhdG9yIiwiTWVudUl0ZW0iLCJNZW51TGlzdCIsIk1lbnVQYWNrZXQiLCJNZW51U29ydGluZ1ZhbHVlIiwiTWVudVN0eWxlIiwiTWVudVZpZXciLCJNZXJnZSIsIk1lcmdlRGlmZmVyZW5jZXMiLCJNZXJnaW5nRnVuY3Rpb24iLCJNZXJzZW5uZVByaW1lRXhwb25lbnQiLCJNZXJzZW5uZVByaW1lRXhwb25lbnRRIiwiTWVzaCIsIk1lc2hDZWxsQ2VudHJvaWQiLCJNZXNoQ2VsbENvdW50IiwiTWVzaENlbGxIaWdobGlnaHQiLCJNZXNoQ2VsbEluZGV4IiwiTWVzaENlbGxMYWJlbCIsIk1lc2hDZWxsTWFya2VyIiwiTWVzaENlbGxNZWFzdXJlIiwiTWVzaENlbGxRdWFsaXR5IiwiTWVzaENlbGxzIiwiTWVzaENlbGxTaGFwZUZ1bmN0aW9uIiwiTWVzaENlbGxTdHlsZSIsIk1lc2hDb25uZWN0aXZpdHlHcmFwaCIsIk1lc2hDb29yZGluYXRlcyIsIk1lc2hGdW5jdGlvbnMiLCJNZXNoUHJpbWl0aXZlcyIsIk1lc2hRdWFsaXR5R29hbCIsIk1lc2hSYW5nZSIsIk1lc2hSZWZpbmVtZW50RnVuY3Rpb24iLCJNZXNoUmVnaW9uIiwiTWVzaFJlZ2lvblEiLCJNZXNoU2hhZGluZyIsIk1lc2hTdHlsZSIsIk1lc3NhZ2UiLCJNZXNzYWdlRGlhbG9nIiwiTWVzc2FnZUxpc3QiLCJNZXNzYWdlTmFtZSIsIk1lc3NhZ2VPYmplY3QiLCJNZXNzYWdlT3B0aW9ucyIsIk1lc3NhZ2VQYWNrZXQiLCJNZXNzYWdlcyIsIk1lc3NhZ2VzTm90ZWJvb2siLCJNZXRhQ2hhcmFjdGVycyIsIk1ldGFJbmZvcm1hdGlvbiIsIk1ldGVvclNob3dlckRhdGEiLCJNZXRob2QiLCJNZXRob2RPcHRpb25zIiwiTWV4aWNhbkhhdFdhdmVsZXQiLCJNZXllcldhdmVsZXQiLCJNaWRwb2ludCIsIk1pbiIsIk1pbkNvbG9yRGlzdGFuY2UiLCJNaW5EYXRlIiwiTWluRGV0ZWN0IiwiTWluZXJhbERhdGEiLCJNaW5GaWx0ZXIiLCJNaW5pbWFsQnkiLCJNaW5pbWFsUG9seW5vbWlhbCIsIk1pbmltYWxTdGF0ZVNwYWNlTW9kZWwiLCJNaW5pbWl6ZSIsIk1pbmltdW1UaW1lSW5jcmVtZW50IiwiTWluSW50ZXJ2YWxTaXplIiwiTWlua293c2tpUXVlc3Rpb25NYXJrIiwiTWluTGltaXQiLCJNaW5NYXgiLCJNaW5vclBsYW5ldERhdGEiLCJNaW5vcnMiLCJNaW5SZWN1cnNpb24iLCJNaW5TaXplIiwiTWluU3RhYmxlRGlzdHJpYnV0aW9uIiwiTWludXMiLCJNaW51c1BsdXMiLCJNaW5WYWx1ZSIsIk1pc3NpbmciLCJNaXNzaW5nQmVoYXZpb3IiLCJNaXNzaW5nRGF0YU1ldGhvZCIsIk1pc3NpbmdEYXRhUnVsZXMiLCJNaXNzaW5nUSIsIk1pc3NpbmdTdHJpbmciLCJNaXNzaW5nU3R5bGUiLCJNaXNzaW5nVmFsdWVQYXR0ZXJuIiwiTWl0dGFnTGVmZmxlckUiLCJNaXhlZEZyYWN0aW9uUGFydHMiLCJNaXhlZEdyYXBoUSIsIk1peGVkTWFnbml0dWRlIiwiTWl4ZWRSYWRpeCIsIk1peGVkUmFkaXhRdWFudGl0eSIsIk1peGVkVW5pdCIsIk1peHR1cmVEaXN0cmlidXRpb24iLCJNb2QiLCJNb2RhbCIsIk1vZGUiLCJNb2R1bGFyIiwiTW9kdWxhckludmVyc2UiLCJNb2R1bGFyTGFtYmRhIiwiTW9kdWxlIiwiTW9kdWx1cyIsIk1vZWJpdXNNdSIsIk1vbGVjdWxlIiwiTW9sZWN1bGVDb250YWluc1EiLCJNb2xlY3VsZUVxdWl2YWxlbnRRIiwiTW9sZWN1bGVHcmFwaCIsIk1vbGVjdWxlTW9kaWZ5IiwiTW9sZWN1bGVQYXR0ZXJuIiwiTW9sZWN1bGVQbG90IiwiTW9sZWN1bGVQbG90M0QiLCJNb2xlY3VsZVByb3BlcnR5IiwiTW9sZWN1bGVRIiwiTW9sZWN1bGVSZWNvZ25pemUiLCJNb2xlY3VsZVZhbHVlIiwiTW9tZW50IiwiTW9tZW50YXJ5IiwiTW9tZW50Q29udmVydCIsIk1vbWVudEV2YWx1YXRlIiwiTW9tZW50R2VuZXJhdGluZ0Z1bmN0aW9uIiwiTW9tZW50T2ZJbmVydGlhIiwiTW9uZGF5IiwiTW9uaXRvciIsIk1vbm9taWFsTGlzdCIsIk1vbm9taWFsT3JkZXIiLCJNb25zdGVyR3JvdXBNIiwiTW9vblBoYXNlIiwiTW9vblBvc2l0aW9uIiwiTW9ybGV0V2F2ZWxldCIsIk1vcnBob2xvZ2ljYWxCaW5hcml6ZSIsIk1vcnBob2xvZ2ljYWxCcmFuY2hQb2ludHMiLCJNb3JwaG9sb2dpY2FsQ29tcG9uZW50cyIsIk1vcnBob2xvZ2ljYWxFdWxlck51bWJlciIsIk1vcnBob2xvZ2ljYWxHcmFwaCIsIk1vcnBob2xvZ2ljYWxQZXJpbWV0ZXIiLCJNb3JwaG9sb2dpY2FsVHJhbnNmb3JtIiwiTW9ydGFsaXR5RGF0YSIsIk1vc3QiLCJNb3VudGFpbkRhdGEiLCJNb3VzZUFubm90YXRpb24iLCJNb3VzZUFwcGVhcmFuY2UiLCJNb3VzZUFwcGVhcmFuY2VUYWciLCJNb3VzZUJ1dHRvbnMiLCJNb3VzZW92ZXIiLCJNb3VzZVBvaW50ZXJOb3RlIiwiTW91c2VQb3NpdGlvbiIsIk1vdmllRGF0YSIsIk1vdmluZ0F2ZXJhZ2UiLCJNb3ZpbmdNYXAiLCJNb3ZpbmdNZWRpYW4iLCJNb3lhbERpc3RyaWJ1dGlvbiIsIk11bHRpY29sdW1uIiwiTXVsdGllZGdlU3R5bGUiLCJNdWx0aWdyYXBoUSIsIk11bHRpbGF1bmNoV2FybmluZyIsIk11bHRpTGV0dGVySXRhbGljcyIsIk11bHRpTGV0dGVyU3R5bGUiLCJNdWx0aWxpbmVGdW5jdGlvbiIsIk11bHRpbm9taWFsIiwiTXVsdGlub21pYWxEaXN0cmlidXRpb24iLCJNdWx0aW5vcm1hbERpc3RyaWJ1dGlvbiIsIk11bHRpcGxpY2F0aXZlT3JkZXIiLCJNdWx0aXBsaWNpdHkiLCJNdWx0aXBseVNpZGVzIiwiTXVsdGlzZWxlY3Rpb24iLCJNdWx0aXZhcmlhdGVIeXBlcmdlb21ldHJpY0Rpc3RyaWJ1dGlvbiIsIk11bHRpdmFyaWF0ZVBvaXNzb25EaXN0cmlidXRpb24iLCJNdWx0aXZhcmlhdGVURGlzdHJpYnV0aW9uIiwiTiIsIk5ha2FnYW1pRGlzdHJpYnV0aW9uIiwiTmFtZVEiLCJOYW1lcyIsIk5hbWVzcGFjZUJveCIsIk5hbWVzcGFjZUJveE9wdGlvbnMiLCJOYW5kIiwiTkFyZ01heCIsIk5BcmdNaW4iLCJOQmVybm91bGxpQiIsIk5Cb2R5U2ltdWxhdGlvbiIsIk5Cb2R5U2ltdWxhdGlvbkRhdGEiLCJOQ2FjaGUiLCJOREVpZ2Vuc3lzdGVtIiwiTkRFaWdlbnZhbHVlcyIsIk5EU29sdmUiLCJORFNvbHZlVmFsdWUiLCJOZWFyZXN0IiwiTmVhcmVzdEZ1bmN0aW9uIiwiTmVhcmVzdE1lc2hDZWxscyIsIk5lYXJlc3ROZWlnaGJvckdyYXBoIiwiTmVhcmVzdFRvIiwiTmVidWxhRGF0YSIsIk5lZWRDdXJyZW50RnJvbnRFbmRQYWNrYWdlUGFja2V0IiwiTmVlZEN1cnJlbnRGcm9udEVuZFN5bWJvbHNQYWNrZXQiLCJOZWVkbGVtYW5XdW5zY2hTaW1pbGFyaXR5IiwiTmVlZHMiLCJOZWdhdGl2ZSIsIk5lZ2F0aXZlQmlub21pYWxEaXN0cmlidXRpb24iLCJOZWdhdGl2ZURlZmluaXRlTWF0cml4USIsIk5lZ2F0aXZlSW50ZWdlcnMiLCJOZWdhdGl2ZU11bHRpbm9taWFsRGlzdHJpYnV0aW9uIiwiTmVnYXRpdmVSYXRpb25hbHMiLCJOZWdhdGl2ZVJlYWxzIiwiTmVnYXRpdmVTZW1pZGVmaW5pdGVNYXRyaXhRIiwiTmVpZ2hib3Job29kRGF0YSIsIk5laWdoYm9yaG9vZEdyYXBoIiwiTmVzdCIsIk5lc3RlZEdyZWF0ZXJHcmVhdGVyIiwiTmVzdGVkTGVzc0xlc3MiLCJOZXN0ZWRTY3JpcHRSdWxlcyIsIk5lc3RHcmFwaCIsIk5lc3RMaXN0IiwiTmVzdFdoaWxlIiwiTmVzdFdoaWxlTGlzdCIsIk5ldEFwcGVuZCIsIk5ldEJpZGlyZWN0aW9uYWxPcGVyYXRvciIsIk5ldENoYWluIiwiTmV0RGVjb2RlciIsIk5ldERlbGV0ZSIsIk5ldERyb3AiLCJOZXRFbmNvZGVyIiwiTmV0RXZhbHVhdGlvbk1vZGUiLCJOZXRFeHRyYWN0IiwiTmV0RmxhdHRlbiIsIk5ldEZvbGRPcGVyYXRvciIsIk5ldEdBTk9wZXJhdG9yIiwiTmV0R3JhcGgiLCJOZXRJbmZvcm1hdGlvbiIsIk5ldEluaXRpYWxpemUiLCJOZXRJbnNlcnQiLCJOZXRJbnNlcnRTaGFyZWRBcnJheXMiLCJOZXRKb2luIiwiTmV0TWFwT3BlcmF0b3IiLCJOZXRNYXBUaHJlYWRPcGVyYXRvciIsIk5ldE1lYXN1cmVtZW50cyIsIk5ldE1vZGVsIiwiTmV0TmVzdE9wZXJhdG9yIiwiTmV0UGFpckVtYmVkZGluZ09wZXJhdG9yIiwiTmV0UG9ydCIsIk5ldFBvcnRHcmFkaWVudCIsIk5ldFByZXBlbmQiLCJOZXRSZW5hbWUiLCJOZXRSZXBsYWNlIiwiTmV0UmVwbGFjZVBhcnQiLCJOZXRTaGFyZWRBcnJheSIsIk5ldFN0YXRlT2JqZWN0IiwiTmV0VGFrZSIsIk5ldFRyYWluIiwiTmV0VHJhaW5SZXN1bHRzT2JqZWN0IiwiTmV0d29ya1BhY2tldENhcHR1cmUiLCJOZXR3b3JrUGFja2V0UmVjb3JkaW5nIiwiTmV0d29ya1BhY2tldFJlY29yZGluZ0R1cmluZyIsIk5ldHdvcmtQYWNrZXRUcmFjZSIsIk5ldW1hbm5WYWx1ZSIsIk5ldmlsbGVUaGV0YUMiLCJOZXZpbGxlVGhldGFEIiwiTmV2aWxsZVRoZXRhTiIsIk5ldmlsbGVUaGV0YVMiLCJOZXdQcmltaXRpdmVTdHlsZSIsIk5FeHBlY3RhdGlvbiIsIk5leHQiLCJOZXh0Q2VsbCIsIk5leHREYXRlIiwiTmV4dFByaW1lIiwiTmV4dFNjaGVkdWxlZFRhc2tUaW1lIiwiTkhvbGRBbGwiLCJOSG9sZEZpcnN0IiwiTkhvbGRSZXN0IiwiTmljaG9sc0dyaWRMaW5lcyIsIk5pY2hvbHNQbG90IiwiTmlnaHRIZW1pc3BoZXJlIiwiTkludGVncmF0ZSIsIk5NYXhpbWl6ZSIsIk5NYXhWYWx1ZSIsIk5NaW5pbWl6ZSIsIk5NaW5WYWx1ZSIsIk5vbWluYWxWYXJpYWJsZXMiLCJOb25Bc3NvY2lhdGl2ZSIsIk5vbmNlbnRyYWxCZXRhRGlzdHJpYnV0aW9uIiwiTm9uY2VudHJhbENoaVNxdWFyZURpc3RyaWJ1dGlvbiIsIk5vbmNlbnRyYWxGUmF0aW9EaXN0cmlidXRpb24iLCJOb25jZW50cmFsU3R1ZGVudFREaXN0cmlidXRpb24iLCJOb25Db21tdXRhdGl2ZU11bHRpcGx5IiwiTm9uQ29uc3RhbnRzIiwiTm9uZGltZW5zaW9uYWxpemF0aW9uVHJhbnNmb3JtIiwiTm9uZSIsIk5vbmVUcnVlIiwiTm9ubGluZWFyTW9kZWxGaXQiLCJOb25saW5lYXJTdGF0ZVNwYWNlTW9kZWwiLCJOb25sb2NhbE1lYW5zRmlsdGVyIiwiTm9uTmVnYXRpdmUiLCJOb25OZWdhdGl2ZUludGVnZXJzIiwiTm9uTmVnYXRpdmVSYXRpb25hbHMiLCJOb25OZWdhdGl2ZVJlYWxzIiwiTm9uUG9zaXRpdmUiLCJOb25Qb3NpdGl2ZUludGVnZXJzIiwiTm9uUG9zaXRpdmVSYXRpb25hbHMiLCJOb25Qb3NpdGl2ZVJlYWxzIiwiTm9yIiwiTm9ybHVuZEIiLCJOb3JtIiwiTm9ybWFsIiwiTm9ybWFsRGlzdHJpYnV0aW9uIiwiTm9ybWFsR3JvdXBpbmciLCJOb3JtYWxpemF0aW9uTGF5ZXIiLCJOb3JtYWxpemUiLCJOb3JtYWxpemVkIiwiTm9ybWFsaXplZFNxdWFyZWRFdWNsaWRlYW5EaXN0YW5jZSIsIk5vcm1hbE1hdHJpeFEiLCJOb3JtYWxzRnVuY3Rpb24iLCJOb3JtRnVuY3Rpb24iLCJOb3QiLCJOb3RDb25ncnVlbnQiLCJOb3RDdXBDYXAiLCJOb3REb3VibGVWZXJ0aWNhbEJhciIsIk5vdGVib29rIiwiTm90ZWJvb2tBcHBseSIsIk5vdGVib29rQXV0b1NhdmUiLCJOb3RlYm9va0Nsb3NlIiwiTm90ZWJvb2tDb252ZXJ0U2V0dGluZ3MiLCJOb3RlYm9va0NyZWF0ZSIsIk5vdGVib29rQ3JlYXRlUmV0dXJuT2JqZWN0IiwiTm90ZWJvb2tEZWZhdWx0IiwiTm90ZWJvb2tEZWxldGUiLCJOb3RlYm9va0RpcmVjdG9yeSIsIk5vdGVib29rRHluYW1pY0V4cHJlc3Npb24iLCJOb3RlYm9va0V2YWx1YXRlIiwiTm90ZWJvb2tFdmVudEFjdGlvbnMiLCJOb3RlYm9va0ZpbGVOYW1lIiwiTm90ZWJvb2tGaW5kIiwiTm90ZWJvb2tGaW5kUmV0dXJuT2JqZWN0IiwiTm90ZWJvb2tHZXQiLCJOb3RlYm9va0dldExheW91dEluZm9ybWF0aW9uUGFja2V0IiwiTm90ZWJvb2tHZXRNaXNzcGVsbGluZ3NQYWNrZXQiLCJOb3RlYm9va0ltcG9ydCIsIk5vdGVib29rSW5mb3JtYXRpb24iLCJOb3RlYm9va0ludGVyZmFjZU9iamVjdCIsIk5vdGVib29rTG9jYXRlIiwiTm90ZWJvb2tPYmplY3QiLCJOb3RlYm9va09wZW4iLCJOb3RlYm9va09wZW5SZXR1cm5PYmplY3QiLCJOb3RlYm9va1BhdGgiLCJOb3RlYm9va1ByaW50IiwiTm90ZWJvb2tQdXQiLCJOb3RlYm9va1B1dFJldHVybk9iamVjdCIsIk5vdGVib29rUmVhZCIsIk5vdGVib29rUmVzZXRHZW5lcmF0ZWRDZWxscyIsIk5vdGVib29rcyIsIk5vdGVib29rU2F2ZSIsIk5vdGVib29rU2F2ZUFzIiwiTm90ZWJvb2tTZWxlY3Rpb24iLCJOb3RlYm9va1NldHVwTGF5b3V0SW5mb3JtYXRpb25QYWNrZXQiLCJOb3RlYm9va3NNZW51IiwiTm90ZWJvb2tUZW1wbGF0ZSIsIk5vdGVib29rV3JpdGUiLCJOb3RFbGVtZW50IiwiTm90RXF1YWxUaWxkZSIsIk5vdEV4aXN0cyIsIk5vdEdyZWF0ZXIiLCJOb3RHcmVhdGVyRXF1YWwiLCJOb3RHcmVhdGVyRnVsbEVxdWFsIiwiTm90R3JlYXRlckdyZWF0ZXIiLCJOb3RHcmVhdGVyTGVzcyIsIk5vdEdyZWF0ZXJTbGFudEVxdWFsIiwiTm90R3JlYXRlclRpbGRlIiwiTm90aGluZyIsIk5vdEh1bXBEb3duSHVtcCIsIk5vdEh1bXBFcXVhbCIsIk5vdGlmaWNhdGlvbkZ1bmN0aW9uIiwiTm90TGVmdFRyaWFuZ2xlIiwiTm90TGVmdFRyaWFuZ2xlQmFyIiwiTm90TGVmdFRyaWFuZ2xlRXF1YWwiLCJOb3RMZXNzIiwiTm90TGVzc0VxdWFsIiwiTm90TGVzc0Z1bGxFcXVhbCIsIk5vdExlc3NHcmVhdGVyIiwiTm90TGVzc0xlc3MiLCJOb3RMZXNzU2xhbnRFcXVhbCIsIk5vdExlc3NUaWxkZSIsIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyIiwiTm90TmVzdGVkTGVzc0xlc3MiLCJOb3RQcmVjZWRlcyIsIk5vdFByZWNlZGVzRXF1YWwiLCJOb3RQcmVjZWRlc1NsYW50RXF1YWwiLCJOb3RQcmVjZWRlc1RpbGRlIiwiTm90UmV2ZXJzZUVsZW1lbnQiLCJOb3RSaWdodFRyaWFuZ2xlIiwiTm90UmlnaHRUcmlhbmdsZUJhciIsIk5vdFJpZ2h0VHJpYW5nbGVFcXVhbCIsIk5vdFNxdWFyZVN1YnNldCIsIk5vdFNxdWFyZVN1YnNldEVxdWFsIiwiTm90U3F1YXJlU3VwZXJzZXQiLCJOb3RTcXVhcmVTdXBlcnNldEVxdWFsIiwiTm90U3Vic2V0IiwiTm90U3Vic2V0RXF1YWwiLCJOb3RTdWNjZWVkcyIsIk5vdFN1Y2NlZWRzRXF1YWwiLCJOb3RTdWNjZWVkc1NsYW50RXF1YWwiLCJOb3RTdWNjZWVkc1RpbGRlIiwiTm90U3VwZXJzZXQiLCJOb3RTdXBlcnNldEVxdWFsIiwiTm90VGlsZGUiLCJOb3RUaWxkZUVxdWFsIiwiTm90VGlsZGVGdWxsRXF1YWwiLCJOb3RUaWxkZVRpbGRlIiwiTm90VmVydGljYWxCYXIiLCJOb3ciLCJOb1doaXRlc3BhY2UiLCJOUHJvYmFiaWxpdHkiLCJOUHJvZHVjdCIsIk5Qcm9kdWN0RmFjdG9ycyIsIk5Sb290cyIsIk5Tb2x2ZSIsIk5TdW0iLCJOU3VtVGVybXMiLCJOdWNsZWFyRXhwbG9zaW9uRGF0YSIsIk51Y2xlYXJSZWFjdG9yRGF0YSIsIk51bGwiLCJOdWxsUmVjb3JkcyIsIk51bGxTcGFjZSIsIk51bGxXb3JkcyIsIk51bWJlciIsIk51bWJlckNvbXBvc2UiLCJOdW1iZXJEZWNvbXBvc2UiLCJOdW1iZXJFeHBhbmQiLCJOdW1iZXJGaWVsZENsYXNzTnVtYmVyIiwiTnVtYmVyRmllbGREaXNjcmltaW5hbnQiLCJOdW1iZXJGaWVsZEZ1bmRhbWVudGFsVW5pdHMiLCJOdW1iZXJGaWVsZEludGVncmFsQmFzaXMiLCJOdW1iZXJGaWVsZE5vcm1SZXByZXNlbnRhdGl2ZXMiLCJOdW1iZXJGaWVsZFJlZ3VsYXRvciIsIk51bWJlckZpZWxkUm9vdHNPZlVuaXR5IiwiTnVtYmVyRmllbGRTaWduYXR1cmUiLCJOdW1iZXJGb3JtIiwiTnVtYmVyRm9ybWF0IiwiTnVtYmVyTGluZVBsb3QiLCJOdW1iZXJNYXJrcyIsIk51bWJlck11bHRpcGxpZXIiLCJOdW1iZXJQYWRkaW5nIiwiTnVtYmVyUG9pbnQiLCJOdW1iZXJRIiwiTnVtYmVyU2VwYXJhdG9yIiwiTnVtYmVyU2lnbnMiLCJOdW1iZXJTdHJpbmciLCJOdW1lcmF0b3IiLCJOdW1lcmF0b3JEZW5vbWluYXRvciIsIk51bWVyaWNhbE9yZGVyIiwiTnVtZXJpY2FsU29ydCIsIk51bWVyaWNBcnJheSIsIk51bWVyaWNBcnJheVEiLCJOdW1lcmljQXJyYXlUeXBlIiwiTnVtZXJpY0Z1bmN0aW9uIiwiTnVtZXJpY1EiLCJOdXR0YWxsV2luZG93IiwiTlZhbHVlcyIsIk55cXVpc3RHcmlkTGluZXMiLCJOeXF1aXN0UGxvdCIsIk8iLCJPYnNlcnZhYmlsaXR5R3JhbWlhbiIsIk9ic2VydmFiaWxpdHlNYXRyaXgiLCJPYnNlcnZhYmxlRGVjb21wb3NpdGlvbiIsIk9ic2VydmFibGVNb2RlbFEiLCJPY2VhbkRhdGEiLCJPY3RhaGVkcm9uIiwiT2RkUSIsIk9mZiIsIk9mZnNldCIsIk9MRURhdGEiLCJPbiIsIk9OYW5Hcm91cE9OIiwiT25jZSIsIk9uZUlkZW50aXR5IiwiT3BhY2l0eSIsIk9wYWNpdHlGdW5jdGlvbiIsIk9wYWNpdHlGdW5jdGlvblNjYWxpbmciLCJPcGVuIiwiT3BlbkFwcGVuZCIsIk9wZW5lciIsIk9wZW5lckJveCIsIk9wZW5lckJveE9wdGlvbnMiLCJPcGVuZXJWaWV3IiwiT3BlbkZ1bmN0aW9uSW5zcGVjdG9yUGFja2V0IiwiT3BlbmluZyIsIk9wZW5SZWFkIiwiT3BlblNwZWNpYWxPcHRpb25zIiwiT3BlblRlbXBvcmFyeSIsIk9wZW5Xcml0ZSIsIk9wZXJhdGUiLCJPcGVyYXRpbmdTeXN0ZW0iLCJPcGVyYXRvckFwcGxpZWQiLCJPcHRpbXVtRmxvd0RhdGEiLCJPcHRpb25hbCIsIk9wdGlvbmFsRWxlbWVudCIsIk9wdGlvbkluc3BlY3RvclNldHRpbmdzIiwiT3B0aW9uUSIsIk9wdGlvbnMiLCJPcHRpb25zUGFja2V0IiwiT3B0aW9uc1BhdHRlcm4iLCJPcHRpb25WYWx1ZSIsIk9wdGlvblZhbHVlQm94IiwiT3B0aW9uVmFsdWVCb3hPcHRpb25zIiwiT3IiLCJPcmFuZ2UiLCJPcmRlciIsIk9yZGVyRGlzdHJpYnV0aW9uIiwiT3JkZXJlZFEiLCJPcmRlcmluZyIsIk9yZGVyaW5nQnkiLCJPcmRlcmluZ0xheWVyIiwiT3JkZXJsZXNzIiwiT3JkZXJsZXNzUGF0dGVyblNlcXVlbmNlIiwiT3Juc3RlaW5VaGxlbmJlY2tQcm9jZXNzIiwiT3J0aG9nb25hbGl6ZSIsIk9ydGhvZ29uYWxNYXRyaXhRIiwiT3V0IiwiT3V0ZXIiLCJPdXRlclBvbHlnb24iLCJPdXRlclBvbHloZWRyb24iLCJPdXRwdXRBdXRvT3ZlcndyaXRlIiwiT3V0cHV0Q29udHJvbGxhYmlsaXR5TWF0cml4IiwiT3V0cHV0Q29udHJvbGxhYmxlTW9kZWxRIiwiT3V0cHV0Rm9ybSIsIk91dHB1dEZvcm1EYXRhIiwiT3V0cHV0R3JvdXBpbmciLCJPdXRwdXRNYXRoRWRpdEV4cHJlc3Npb24iLCJPdXRwdXROYW1lUGFja2V0IiwiT3V0cHV0UmVzcG9uc2UiLCJPdXRwdXRTaXplTGltaXQiLCJPdXRwdXRTdHJlYW0iLCJPdmVyIiwiT3ZlckJhciIsIk92ZXJEb3QiLCJPdmVyZmxvdyIsIk92ZXJIYXQiLCJPdmVybGFwcyIsIk92ZXJsYXkiLCJPdmVybGF5Qm94IiwiT3ZlcmxheUJveE9wdGlvbnMiLCJPdmVyc2NyaXB0IiwiT3ZlcnNjcmlwdEJveCIsIk92ZXJzY3JpcHRCb3hPcHRpb25zIiwiT3ZlclRpbGRlIiwiT3ZlclZlY3RvciIsIk92ZXJ3cml0ZVRhcmdldCIsIk93ZW5UIiwiT3duVmFsdWVzIiwiUGFja2FnZSIsIlBhY2tpbmdNZXRob2QiLCJQYWNrUGFjbGV0IiwiUGFjbGV0RGF0YVJlYnVpbGQiLCJQYWNsZXREaXJlY3RvcnlBZGQiLCJQYWNsZXREaXJlY3RvcnlMb2FkIiwiUGFjbGV0RGlyZWN0b3J5UmVtb3ZlIiwiUGFjbGV0RGlyZWN0b3J5VW5sb2FkIiwiUGFjbGV0RGlzYWJsZSIsIlBhY2xldEVuYWJsZSIsIlBhY2xldEZpbmQiLCJQYWNsZXRGaW5kUmVtb3RlIiwiUGFjbGV0SW5mb3JtYXRpb24iLCJQYWNsZXRJbnN0YWxsIiwiUGFjbGV0SW5zdGFsbFN1Ym1pdCIsIlBhY2xldE5ld2VyUSIsIlBhY2xldE9iamVjdCIsIlBhY2xldE9iamVjdFEiLCJQYWNsZXRTaXRlIiwiUGFjbGV0U2l0ZU9iamVjdCIsIlBhY2xldFNpdGVSZWdpc3RlciIsIlBhY2xldFNpdGVzIiwiUGFjbGV0U2l0ZVVucmVnaXN0ZXIiLCJQYWNsZXRTaXRlVXBkYXRlIiwiUGFjbGV0VW5pbnN0YWxsIiwiUGFjbGV0VXBkYXRlIiwiUGFkZGVkRm9ybSIsIlBhZGRpbmciLCJQYWRkaW5nTGF5ZXIiLCJQYWRkaW5nU2l6ZSIsIlBhZGVBcHByb3hpbWFudCIsIlBhZExlZnQiLCJQYWRSaWdodCIsIlBhZ2VCcmVha0Fib3ZlIiwiUGFnZUJyZWFrQmVsb3ciLCJQYWdlQnJlYWtXaXRoaW4iLCJQYWdlRm9vdGVyTGluZXMiLCJQYWdlRm9vdGVycyIsIlBhZ2VIZWFkZXJMaW5lcyIsIlBhZ2VIZWFkZXJzIiwiUGFnZUhlaWdodCIsIlBhZ2VSYW5rQ2VudHJhbGl0eSIsIlBhZ2VUaGVtZSIsIlBhZ2VXaWR0aCIsIlBhZ2luYXRpb24iLCJQYWlyZWRCYXJDaGFydCIsIlBhaXJlZEhpc3RvZ3JhbSIsIlBhaXJlZFNtb290aEhpc3RvZ3JhbSIsIlBhaXJlZFRUZXN0IiwiUGFpcmVkWlRlc3QiLCJQYWxldHRlTm90ZWJvb2siLCJQYWxldHRlUGF0aCIsIlBhbGluZHJvbWVRIiwiUGFuZSIsIlBhbmVCb3giLCJQYW5lQm94T3B0aW9ucyIsIlBhbmVsIiwiUGFuZWxCb3giLCJQYW5lbEJveE9wdGlvbnMiLCJQYW5lbGVkIiwiUGFuZVNlbGVjdG9yIiwiUGFuZVNlbGVjdG9yQm94IiwiUGFuZVNlbGVjdG9yQm94T3B0aW9ucyIsIlBhcGVyV2lkdGgiLCJQYXJhYm9saWNDeWxpbmRlckQiLCJQYXJhZ3JhcGhJbmRlbnQiLCJQYXJhZ3JhcGhTcGFjaW5nIiwiUGFyYWxsZWxBcnJheSIsIlBhcmFsbGVsQ29tYmluZSIsIlBhcmFsbGVsRG8iLCJQYXJhbGxlbGVwaXBlZCIsIlBhcmFsbGVsRXZhbHVhdGUiLCJQYXJhbGxlbGl6YXRpb24iLCJQYXJhbGxlbGl6ZSIsIlBhcmFsbGVsTWFwIiwiUGFyYWxsZWxOZWVkcyIsIlBhcmFsbGVsb2dyYW0iLCJQYXJhbGxlbFByb2R1Y3QiLCJQYXJhbGxlbFN1Ym1pdCIsIlBhcmFsbGVsU3VtIiwiUGFyYWxsZWxUYWJsZSIsIlBhcmFsbGVsVHJ5IiwiUGFyYW1ldGVyIiwiUGFyYW1ldGVyRXN0aW1hdG9yIiwiUGFyYW1ldGVyTWl4dHVyZURpc3RyaWJ1dGlvbiIsIlBhcmFtZXRlclZhcmlhYmxlcyIsIlBhcmFtZXRyaWNGdW5jdGlvbiIsIlBhcmFtZXRyaWNORFNvbHZlIiwiUGFyYW1ldHJpY05EU29sdmVWYWx1ZSIsIlBhcmFtZXRyaWNQbG90IiwiUGFyYW1ldHJpY1Bsb3QzRCIsIlBhcmFtZXRyaWNSYW1wTGF5ZXIiLCJQYXJhbWV0cmljUmVnaW9uIiwiUGFyZW50Qm94IiwiUGFyZW50Q2VsbCIsIlBhcmVudENvbm5lY3QiLCJQYXJlbnREaXJlY3RvcnkiLCJQYXJlbnRGb3JtIiwiUGFyZW50aGVzaXplIiwiUGFyZW50TGlzdCIsIlBhcmVudE5vdGVib29rIiwiUGFyZXRvRGlzdHJpYnV0aW9uIiwiUGFyZXRvUGlja2FuZHNEaXN0cmlidXRpb24iLCJQYXJrRGF0YSIsIlBhcnQiLCJQYXJ0QmVoYXZpb3IiLCJQYXJ0aWFsQ29ycmVsYXRpb25GdW5jdGlvbiIsIlBhcnRpYWxEIiwiUGFydGljbGVBY2NlbGVyYXRvckRhdGEiLCJQYXJ0aWNsZURhdGEiLCJQYXJ0aXRpb24iLCJQYXJ0aXRpb25HcmFudWxhcml0eSIsIlBhcnRpdGlvbnNQIiwiUGFydGl0aW9uc1EiLCJQYXJ0TGF5ZXIiLCJQYXJ0T2ZTcGVlY2giLCJQYXJ0UHJvdGVjdGlvbiIsIlBhcnplbldpbmRvdyIsIlBhc2NhbERpc3RyaWJ1dGlvbiIsIlBhc3NFdmVudHNEb3duIiwiUGFzc0V2ZW50c1VwIiwiUGFzdGUiLCJQYXN0ZUF1dG9RdW90ZUNoYXJhY3RlcnMiLCJQYXN0ZUJveEZvcm1JbmxpbmVDZWxscyIsIlBhc3RlQnV0dG9uIiwiUGF0aCIsIlBhdGhHcmFwaCIsIlBhdGhHcmFwaFEiLCJQYXR0ZXJuIiwiUGF0dGVybkZpbGxpbmciLCJQYXR0ZXJuU2VxdWVuY2UiLCJQYXR0ZXJuVGVzdCIsIlBhdWxpTWF0cml4IiwiUGF1bFdhdmVsZXQiLCJQYXVzZSIsIlBhdXNlZFRpbWUiLCJQREYiLCJQZWFrRGV0ZWN0IiwiUGVhbm9DdXJ2ZSIsIlBlYXJzb25DaGlTcXVhcmVUZXN0IiwiUGVhcnNvbkNvcnJlbGF0aW9uVGVzdCIsIlBlYXJzb25EaXN0cmlidXRpb24iLCJQZXJjZW50Rm9ybSIsIlBlcmZlY3ROdW1iZXIiLCJQZXJmZWN0TnVtYmVyUSIsIlBlcmZvcm1hbmNlR29hbCIsIlBlcmltZXRlciIsIlBlcmlvZGljQm91bmRhcnlDb25kaXRpb24iLCJQZXJpb2RpY0ludGVycG9sYXRpb24iLCJQZXJpb2RvZ3JhbSIsIlBlcmlvZG9ncmFtQXJyYXkiLCJQZXJtYW5lbnQiLCJQZXJtaXNzaW9ucyIsIlBlcm1pc3Npb25zR3JvdXAiLCJQZXJtaXNzaW9uc0dyb3VwTWVtYmVyUSIsIlBlcm1pc3Npb25zR3JvdXBzIiwiUGVybWlzc2lvbnNLZXkiLCJQZXJtaXNzaW9uc0tleXMiLCJQZXJtdXRhdGlvbkN5Y2xlcyIsIlBlcm11dGF0aW9uQ3ljbGVzUSIsIlBlcm11dGF0aW9uR3JvdXAiLCJQZXJtdXRhdGlvbkxlbmd0aCIsIlBlcm11dGF0aW9uTGlzdCIsIlBlcm11dGF0aW9uTGlzdFEiLCJQZXJtdXRhdGlvbk1heCIsIlBlcm11dGF0aW9uTWluIiwiUGVybXV0YXRpb25PcmRlciIsIlBlcm11dGF0aW9uUG93ZXIiLCJQZXJtdXRhdGlvblByb2R1Y3QiLCJQZXJtdXRhdGlvblJlcGxhY2UiLCJQZXJtdXRhdGlvbnMiLCJQZXJtdXRhdGlvblN1cHBvcnQiLCJQZXJtdXRlIiwiUGVyb25hTWFsaWtGaWx0ZXIiLCJQZXJwZW5kaWN1bGFyIiwiUGVycGVuZGljdWxhckJpc2VjdG9yIiwiUGVyc2lzdGVuY2VMb2NhdGlvbiIsIlBlcnNpc3RlbmNlVGltZSIsIlBlcnNpc3RlbnRPYmplY3QiLCJQZXJzaXN0ZW50T2JqZWN0cyIsIlBlcnNpc3RlbnRWYWx1ZSIsIlBlcnNvbkRhdGEiLCJQRVJURGlzdHJpYnV0aW9uIiwiUGV0ZXJzZW5HcmFwaCIsIlBoYXNlTWFyZ2lucyIsIlBoYXNlUmFuZ2UiLCJQaHlzaWNhbFN5c3RlbURhdGEiLCJQaSIsIlBpY2siLCJQSUREYXRhIiwiUElERGVyaXZhdGl2ZUZpbHRlciIsIlBJREZlZWRmb3J3YXJkIiwiUElEVHVuZSIsIlBpZWNld2lzZSIsIlBpZWNld2lzZUV4cGFuZCIsIlBpZUNoYXJ0IiwiUGllQ2hhcnQzRCIsIlBpbGxhaVRyYWNlIiwiUGlsbGFpVHJhY2VUZXN0IiwiUGluZ1RpbWUiLCJQaW5rIiwiUGl0Y2hSZWNvZ25pemUiLCJQaXZvdGluZyIsIlBpeGVsQ29uc3RyYWluZWQiLCJQaXhlbFZhbHVlIiwiUGl4ZWxWYWx1ZVBvc2l0aW9ucyIsIlBsYWNlZCIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJSZXBsYWNlIiwiUGxhaW4iLCJQbGFuYXJBbmdsZSIsIlBsYW5hckdyYXBoIiwiUGxhbmFyR3JhcGhRIiwiUGxhbmNrUmFkaWF0aW9uTGF3IiwiUGxhbmVDdXJ2ZURhdGEiLCJQbGFuZXRhcnlNb29uRGF0YSIsIlBsYW5ldERhdGEiLCJQbGFudERhdGEiLCJQbGF5IiwiUGxheVJhbmdlIiwiUGxvdCIsIlBsb3QzRCIsIlBsb3QzTWF0cml4IiwiUGxvdERpdmlzaW9uIiwiUGxvdEpvaW5lZCIsIlBsb3RMYWJlbCIsIlBsb3RMYWJlbHMiLCJQbG90TGF5b3V0IiwiUGxvdExlZ2VuZHMiLCJQbG90TWFya2VycyIsIlBsb3RQb2ludHMiLCJQbG90UmFuZ2UiLCJQbG90UmFuZ2VDbGlwcGluZyIsIlBsb3RSYW5nZUNsaXBQbGFuZXNTdHlsZSIsIlBsb3RSYW5nZVBhZGRpbmciLCJQbG90UmVnaW9uIiwiUGxvdFN0eWxlIiwiUGxvdFRoZW1lIiwiUGx1cmFsaXplIiwiUGx1cyIsIlBsdXNNaW51cyIsIlBvY2hoYW1tZXIiLCJQb2RTdGF0ZXMiLCJQb2RXaWR0aCIsIlBvaW50IiwiUG9pbnQzREJveCIsIlBvaW50M0RCb3hPcHRpb25zIiwiUG9pbnRCb3giLCJQb2ludEJveE9wdGlvbnMiLCJQb2ludEZpZ3VyZUNoYXJ0IiwiUG9pbnRMZWdlbmQiLCJQb2ludFNpemUiLCJQb2lzc29uQ29uc3VsRGlzdHJpYnV0aW9uIiwiUG9pc3NvbkRpc3RyaWJ1dGlvbiIsIlBvaXNzb25Qcm9jZXNzIiwiUG9pc3NvbldpbmRvdyIsIlBvbGFyQXhlcyIsIlBvbGFyQXhlc09yaWdpbiIsIlBvbGFyR3JpZExpbmVzIiwiUG9sYXJQbG90IiwiUG9sYXJUaWNrcyIsIlBvbGVaZXJvTWFya2VycyIsIlBvbHlhQWVwcGxpRGlzdHJpYnV0aW9uIiwiUG9seUdhbW1hIiwiUG9seWdvbiIsIlBvbHlnb24zREJveCIsIlBvbHlnb24zREJveE9wdGlvbnMiLCJQb2x5Z29uYWxOdW1iZXIiLCJQb2x5Z29uQW5nbGUiLCJQb2x5Z29uQm94IiwiUG9seWdvbkJveE9wdGlvbnMiLCJQb2x5Z29uQ29vcmRpbmF0ZXMiLCJQb2x5Z29uRGVjb21wb3NpdGlvbiIsIlBvbHlnb25Ib2xlU2NhbGUiLCJQb2x5Z29uSW50ZXJzZWN0aW9ucyIsIlBvbHlnb25TY2FsZSIsIlBvbHloZWRyb24iLCJQb2x5aGVkcm9uQW5nbGUiLCJQb2x5aGVkcm9uQ29vcmRpbmF0ZXMiLCJQb2x5aGVkcm9uRGF0YSIsIlBvbHloZWRyb25EZWNvbXBvc2l0aW9uIiwiUG9seWhlZHJvbkdlbnVzIiwiUG9seUxvZyIsIlBvbHlub21pYWxFeHRlbmRlZEdDRCIsIlBvbHlub21pYWxGb3JtIiwiUG9seW5vbWlhbEdDRCIsIlBvbHlub21pYWxMQ00iLCJQb2x5bm9taWFsTW9kIiwiUG9seW5vbWlhbFEiLCJQb2x5bm9taWFsUXVvdGllbnQiLCJQb2x5bm9taWFsUXVvdGllbnRSZW1haW5kZXIiLCJQb2x5bm9taWFsUmVkdWNlIiwiUG9seW5vbWlhbFJlbWFpbmRlciIsIlBvbHlub21pYWxzIiwiUG9vbGluZ0xheWVyIiwiUG9wdXBNZW51IiwiUG9wdXBNZW51Qm94IiwiUG9wdXBNZW51Qm94T3B0aW9ucyIsIlBvcHVwVmlldyIsIlBvcHVwV2luZG93IiwiUG9zaXRpb24iLCJQb3NpdGlvbkluZGV4IiwiUG9zaXRpdmUiLCJQb3NpdGl2ZURlZmluaXRlTWF0cml4USIsIlBvc2l0aXZlSW50ZWdlcnMiLCJQb3NpdGl2ZVJhdGlvbmFscyIsIlBvc2l0aXZlUmVhbHMiLCJQb3NpdGl2ZVNlbWlkZWZpbml0ZU1hdHJpeFEiLCJQb3NzaWJsZVplcm9RIiwiUG9zdGZpeCIsIlBvc3RTY3JpcHQiLCJQb3dlciIsIlBvd2VyRGlzdHJpYnV0aW9uIiwiUG93ZXJFeHBhbmQiLCJQb3dlck1vZCIsIlBvd2VyTW9kTGlzdCIsIlBvd2VyUmFuZ2UiLCJQb3dlclNwZWN0cmFsRGVuc2l0eSIsIlBvd2Vyc1JlcHJlc2VudGF0aW9ucyIsIlBvd2VyU3ltbWV0cmljUG9seW5vbWlhbCIsIlByZWNlZGVuY2UiLCJQcmVjZWRlbmNlRm9ybSIsIlByZWNlZGVzIiwiUHJlY2VkZXNFcXVhbCIsIlByZWNlZGVzU2xhbnRFcXVhbCIsIlByZWNlZGVzVGlsZGUiLCJQcmVjaXNpb24iLCJQcmVjaXNpb25Hb2FsIiwiUHJlRGVjcmVtZW50IiwiUHJlZGljdCIsIlByZWRpY3Rpb25Sb290IiwiUHJlZGljdG9yRnVuY3Rpb24iLCJQcmVkaWN0b3JJbmZvcm1hdGlvbiIsIlByZWRpY3Rvck1lYXN1cmVtZW50cyIsIlByZWRpY3Rvck1lYXN1cmVtZW50c09iamVjdCIsIlByZWVtcHRQcm90ZWN0IiwiUHJlZmVyZW5jZXNQYXRoIiwiUHJlZml4IiwiUHJlSW5jcmVtZW50IiwiUHJlcGVuZCIsIlByZXBlbmRMYXllciIsIlByZXBlbmRUbyIsIlByZXByb2Nlc3NpbmdSdWxlcyIsIlByZXNlcnZlQ29sb3IiLCJQcmVzZXJ2ZUltYWdlT3B0aW9ucyIsIlByZXZpb3VzIiwiUHJldmlvdXNDZWxsIiwiUHJldmlvdXNEYXRlIiwiUHJpY2VHcmFwaERpc3RyaWJ1dGlvbiIsIlByaW1hcnlQbGFjZWhvbGRlciIsIlByaW1lIiwiUHJpbWVOdSIsIlByaW1lT21lZ2EiLCJQcmltZVBpIiwiUHJpbWVQb3dlclEiLCJQcmltZVEiLCJQcmltZXMiLCJQcmltZVpldGFQIiwiUHJpbWl0aXZlUG9seW5vbWlhbFEiLCJQcmltaXRpdmVSb290IiwiUHJpbWl0aXZlUm9vdExpc3QiLCJQcmluY2lwYWxDb21wb25lbnRzIiwiUHJpbmNpcGFsVmFsdWUiLCJQcmludCIsIlByaW50YWJsZUFTQ0lJUSIsIlByaW50QWN0aW9uIiwiUHJpbnRGb3JtIiwiUHJpbnRpbmdDb3BpZXMiLCJQcmludGluZ09wdGlvbnMiLCJQcmludGluZ1BhZ2VSYW5nZSIsIlByaW50aW5nU3RhcnRpbmdQYWdlTnVtYmVyIiwiUHJpbnRpbmdTdHlsZUVudmlyb25tZW50IiwiUHJpbnRvdXQzRCIsIlByaW50b3V0M0RQcmV2aWV3ZXIiLCJQcmludFByZWNpc2lvbiIsIlByaW50VGVtcG9yYXJ5IiwiUHJpc20iLCJQcmlzbUJveCIsIlByaXNtQm94T3B0aW9ucyIsIlByaXZhdGVDZWxsT3B0aW9ucyIsIlByaXZhdGVFdmFsdWF0aW9uT3B0aW9ucyIsIlByaXZhdGVGb250T3B0aW9ucyIsIlByaXZhdGVGcm9udEVuZE9wdGlvbnMiLCJQcml2YXRlS2V5IiwiUHJpdmF0ZU5vdGVib29rT3B0aW9ucyIsIlByaXZhdGVQYXRocyIsIlByb2JhYmlsaXR5IiwiUHJvYmFiaWxpdHlEaXN0cmlidXRpb24iLCJQcm9iYWJpbGl0eVBsb3QiLCJQcm9iYWJpbGl0eVByIiwiUHJvYmFiaWxpdHlTY2FsZVBsb3QiLCJQcm9iaXRNb2RlbEZpdCIsIlByb2Nlc3NDb25uZWN0aW9uIiwiUHJvY2Vzc0RpcmVjdG9yeSIsIlByb2Nlc3NFbnZpcm9ubWVudCIsIlByb2Nlc3NlcyIsIlByb2Nlc3NFc3RpbWF0b3IiLCJQcm9jZXNzSW5mb3JtYXRpb24iLCJQcm9jZXNzT2JqZWN0IiwiUHJvY2Vzc1BhcmFtZXRlckFzc3VtcHRpb25zIiwiUHJvY2Vzc1BhcmFtZXRlclEiLCJQcm9jZXNzU3RhdGVEb21haW4iLCJQcm9jZXNzU3RhdHVzIiwiUHJvY2Vzc1RpbWVEb21haW4iLCJQcm9kdWN0IiwiUHJvZHVjdERpc3RyaWJ1dGlvbiIsIlByb2R1Y3RMb2ciLCJQcm9ncmVzc0luZGljYXRvciIsIlByb2dyZXNzSW5kaWNhdG9yQm94IiwiUHJvZ3Jlc3NJbmRpY2F0b3JCb3hPcHRpb25zIiwiUHJvamVjdGlvbiIsIlByb2xvZyIsIlByb21wdEZvcm0iLCJQcm9vZk9iamVjdCIsIlByb3BlcnRpZXMiLCJQcm9wZXJ0eSIsIlByb3BlcnR5TGlzdCIsIlByb3BlcnR5VmFsdWUiLCJQcm9wb3J0aW9uIiwiUHJvcG9ydGlvbmFsIiwiUHJvdGVjdCIsIlByb3RlY3RlZCIsIlByb3RlaW5EYXRhIiwiUHJ1bmluZyIsIlBzZXVkb0ludmVyc2UiLCJQc3ljaHJvbWV0cmljUHJvcGVydHlEYXRhIiwiUHVibGljS2V5IiwiUHVibGlzaGVySUQiLCJQdWxzYXJEYXRhIiwiUHVuY3R1YXRpb25DaGFyYWN0ZXIiLCJQdXJwbGUiLCJQdXQiLCJQdXRBcHBlbmQiLCJQeXJhbWlkIiwiUHlyYW1pZEJveCIsIlB5cmFtaWRCb3hPcHRpb25zIiwiUUJpbm9taWFsIiwiUUZhY3RvcmlhbCIsIlFHYW1tYSIsIlFIeXBlcmdlb21ldHJpY1BGUSIsIlFuRGlzcGVyc2lvbiIsIlFQb2NoaGFtbWVyIiwiUVBvbHlHYW1tYSIsIlFSRGVjb21wb3NpdGlvbiIsIlF1YWRyYXRpY0lycmF0aW9uYWxRIiwiUXVhZHJhdGljT3B0aW1pemF0aW9uIiwiUXVhbnRpbGUiLCJRdWFudGlsZVBsb3QiLCJRdWFudGl0eSIsIlF1YW50aXR5QXJyYXkiLCJRdWFudGl0eURpc3RyaWJ1dGlvbiIsIlF1YW50aXR5Rm9ybSIsIlF1YW50aXR5TWFnbml0dWRlIiwiUXVhbnRpdHlRIiwiUXVhbnRpdHlVbml0IiwiUXVhbnRpdHlWYXJpYWJsZSIsIlF1YW50aXR5VmFyaWFibGVDYW5vbmljYWxVbml0IiwiUXVhbnRpdHlWYXJpYWJsZURpbWVuc2lvbnMiLCJRdWFudGl0eVZhcmlhYmxlSWRlbnRpZmllciIsIlF1YW50aXR5VmFyaWFibGVQaHlzaWNhbFF1YW50aXR5IiwiUXVhcnRpY3MiLCJRdWFydGlsZURldmlhdGlvbiIsIlF1YXJ0aWxlcyIsIlF1YXJ0aWxlU2tld25lc3MiLCJRdWVyeSIsIlF1ZXVlaW5nTmV0d29ya1Byb2Nlc3MiLCJRdWV1ZWluZ1Byb2Nlc3MiLCJRdWV1ZVByb3BlcnRpZXMiLCJRdWlldCIsIlF1aXQiLCJRdW90aWVudCIsIlF1b3RpZW50UmVtYWluZGVyIiwiUmFkaWFsR3JhZGllbnRJbWFnZSIsIlJhZGlhbGl0eUNlbnRyYWxpdHkiLCJSYWRpY2FsQm94IiwiUmFkaWNhbEJveE9wdGlvbnMiLCJSYWRpb0J1dHRvbiIsIlJhZGlvQnV0dG9uQmFyIiwiUmFkaW9CdXR0b25Cb3giLCJSYWRpb0J1dHRvbkJveE9wdGlvbnMiLCJSYWRvbiIsIlJhZG9uVHJhbnNmb3JtIiwiUmFtYW51amFuVGF1IiwiUmFtYW51amFuVGF1TCIsIlJhbWFudWphblRhdVRoZXRhIiwiUmFtYW51amFuVGF1WiIsIlJhbXAiLCJSYW5kb20iLCJSYW5kb21DaG9pY2UiLCJSYW5kb21Db2xvciIsIlJhbmRvbUNvbXBsZXgiLCJSYW5kb21FbnRpdHkiLCJSYW5kb21GdW5jdGlvbiIsIlJhbmRvbUdlb1Bvc2l0aW9uIiwiUmFuZG9tR3JhcGgiLCJSYW5kb21JbWFnZSIsIlJhbmRvbUluc3RhbmNlIiwiUmFuZG9tSW50ZWdlciIsIlJhbmRvbVBlcm11dGF0aW9uIiwiUmFuZG9tUG9pbnQiLCJSYW5kb21Qb2x5Z29uIiwiUmFuZG9tUG9seWhlZHJvbiIsIlJhbmRvbVByaW1lIiwiUmFuZG9tUmVhbCIsIlJhbmRvbVNhbXBsZSIsIlJhbmRvbVNlZWQiLCJSYW5kb21TZWVkaW5nIiwiUmFuZG9tVmFyaWF0ZSIsIlJhbmRvbVdhbGtQcm9jZXNzIiwiUmFuZG9tV29yZCIsIlJhbmdlIiwiUmFuZ2VGaWx0ZXIiLCJSYW5nZVNwZWNpZmljYXRpb24iLCJSYW5rZWRNYXgiLCJSYW5rZWRNaW4iLCJSYXJlclByb2JhYmlsaXR5IiwiUmFzdGVyIiwiUmFzdGVyM0QiLCJSYXN0ZXIzREJveCIsIlJhc3RlcjNEQm94T3B0aW9ucyIsIlJhc3RlckFycmF5IiwiUmFzdGVyQm94IiwiUmFzdGVyQm94T3B0aW9ucyIsIlJhc3Rlcml6ZSIsIlJhc3RlclNpemUiLCJSYXRpb25hbCIsIlJhdGlvbmFsRnVuY3Rpb25zIiwiUmF0aW9uYWxpemUiLCJSYXRpb25hbHMiLCJSYXRpb3MiLCJSYXdBcnJheSIsIlJhd0JveGVzIiwiUmF3RGF0YSIsIlJhd01lZGl1bSIsIlJheWxlaWdoRGlzdHJpYnV0aW9uIiwiUmUiLCJSZWFkIiwiUmVhZEJ5dGVBcnJheSIsIlJlYWRMaW5lIiwiUmVhZExpc3QiLCJSZWFkUHJvdGVjdGVkIiwiUmVhZFN0cmluZyIsIlJlYWwiLCJSZWFsQWJzIiwiUmVhbEJsb2NrRGlhZ29uYWxGb3JtIiwiUmVhbERpZ2l0cyIsIlJlYWxFeHBvbmVudCIsIlJlYWxzIiwiUmVhbFNpZ24iLCJSZWFwIiwiUmVidWlsZFBhY2xldERhdGEiLCJSZWNvZ25pdGlvblByaW9yIiwiUmVjb2duaXRpb25UaHJlc2hvbGQiLCJSZWNvcmQiLCJSZWNvcmRMaXN0cyIsIlJlY29yZFNlcGFyYXRvcnMiLCJSZWN0YW5nbGUiLCJSZWN0YW5nbGVCb3giLCJSZWN0YW5nbGVCb3hPcHRpb25zIiwiUmVjdGFuZ2xlQ2hhcnQiLCJSZWN0YW5nbGVDaGFydDNEIiwiUmVjdGFuZ3VsYXJSZXBlYXRpbmdFbGVtZW50IiwiUmVjdXJyZW5jZUZpbHRlciIsIlJlY3VycmVuY2VUYWJsZSIsIlJlY3VycmluZ0RpZ2l0c0Zvcm0iLCJSZWQiLCJSZWR1Y2UiLCJSZWZCb3giLCJSZWZlcmVuY2VMaW5lU3R5bGUiLCJSZWZlcmVuY2VNYXJrZXJzIiwiUmVmZXJlbmNlTWFya2VyU3R5bGUiLCJSZWZpbmUiLCJSZWZsZWN0aW9uTWF0cml4IiwiUmVmbGVjdGlvblRyYW5zZm9ybSIsIlJlZnJlc2giLCJSZWZyZXNoUmF0ZSIsIlJlZ2lvbiIsIlJlZ2lvbkJpbmFyaXplIiwiUmVnaW9uQm91bmRhcnkiLCJSZWdpb25Cb3VuZGFyeVN0eWxlIiwiUmVnaW9uQm91bmRzIiwiUmVnaW9uQ2VudHJvaWQiLCJSZWdpb25EaWZmZXJlbmNlIiwiUmVnaW9uRGltZW5zaW9uIiwiUmVnaW9uRGlzam9pbnQiLCJSZWdpb25EaXN0YW5jZSIsIlJlZ2lvbkRpc3RhbmNlRnVuY3Rpb24iLCJSZWdpb25FbWJlZGRpbmdEaW1lbnNpb24iLCJSZWdpb25FcXVhbCIsIlJlZ2lvbkZpbGxpbmdTdHlsZSIsIlJlZ2lvbkZ1bmN0aW9uIiwiUmVnaW9uSW1hZ2UiLCJSZWdpb25JbnRlcnNlY3Rpb24iLCJSZWdpb25NZWFzdXJlIiwiUmVnaW9uTWVtYmVyIiwiUmVnaW9uTWVtYmVyRnVuY3Rpb24iLCJSZWdpb25Nb21lbnQiLCJSZWdpb25OZWFyZXN0IiwiUmVnaW9uTmVhcmVzdEZ1bmN0aW9uIiwiUmVnaW9uUGxvdCIsIlJlZ2lvblBsb3QzRCIsIlJlZ2lvblByb2R1Y3QiLCJSZWdpb25RIiwiUmVnaW9uUmVzaXplIiwiUmVnaW9uU2l6ZSIsIlJlZ2lvblN5bW1ldHJpY0RpZmZlcmVuY2UiLCJSZWdpb25VbmlvbiIsIlJlZ2lvbldpdGhpbiIsIlJlZ2lzdGVyRXh0ZXJuYWxFdmFsdWF0b3IiLCJSZWd1bGFyRXhwcmVzc2lvbiIsIlJlZ3VsYXJpemF0aW9uIiwiUmVndWxhcmx5U2FtcGxlZFEiLCJSZWd1bGFyUG9seWdvbiIsIlJlSW0iLCJSZUltTGFiZWxzIiwiUmVJbVBsb3QiLCJSZUltU3R5bGUiLCJSZWluc3RhbGwiLCJSZWxhdGlvbmFsRGF0YWJhc2UiLCJSZWxhdGlvbkdyYXBoIiwiUmVsZWFzZSIsIlJlbGVhc2VIb2xkIiwiUmVsaWFiaWxpdHlEaXN0cmlidXRpb24iLCJSZWxpZWZJbWFnZSIsIlJlbGllZlBsb3QiLCJSZW1vdGVBdXRob3JpemF0aW9uQ2FjaGluZyIsIlJlbW90ZUNvbm5lY3QiLCJSZW1vdGVDb25uZWN0aW9uT2JqZWN0IiwiUmVtb3RlRmlsZSIsIlJlbW90ZVJ1biIsIlJlbW90ZVJ1blByb2Nlc3MiLCJSZW1vdmUiLCJSZW1vdmVBbHBoYUNoYW5uZWwiLCJSZW1vdmVBc3luY2hyb25vdXNUYXNrIiwiUmVtb3ZlQXVkaW9TdHJlYW0iLCJSZW1vdmVCYWNrZ3JvdW5kIiwiUmVtb3ZlQ2hhbm5lbExpc3RlbmVyIiwiUmVtb3ZlQ2hhbm5lbFN1YnNjcmliZXJzIiwiUmVtb3ZlZCIsIlJlbW92ZURpYWNyaXRpY3MiLCJSZW1vdmVJbnB1dFN0cmVhbU1ldGhvZCIsIlJlbW92ZU91dHB1dFN0cmVhbU1ldGhvZCIsIlJlbW92ZVByb3BlcnR5IiwiUmVtb3ZlU2NoZWR1bGVkVGFzayIsIlJlbW92ZVVzZXJzIiwiUmVtb3ZlVmlkZW9TdHJlYW0iLCJSZW5hbWVEaXJlY3RvcnkiLCJSZW5hbWVGaWxlIiwiUmVuZGVyQWxsIiwiUmVuZGVyaW5nT3B0aW9ucyIsIlJlbmV3YWxQcm9jZXNzIiwiUmVua29DaGFydCIsIlJlcGFpck1lc2giLCJSZXBlYXRlZCIsIlJlcGVhdGVkTnVsbCIsIlJlcGVhdGVkU3RyaW5nIiwiUmVwZWF0ZWRUaW1pbmciLCJSZXBlYXRpbmdFbGVtZW50IiwiUmVwbGFjZSIsIlJlcGxhY2VBbGwiLCJSZXBsYWNlSGVsZFBhcnQiLCJSZXBsYWNlSW1hZ2VWYWx1ZSIsIlJlcGxhY2VMaXN0IiwiUmVwbGFjZVBhcnQiLCJSZXBsYWNlUGl4ZWxWYWx1ZSIsIlJlcGxhY2VSZXBlYXRlZCIsIlJlcGxpY2F0ZUxheWVyIiwiUmVxdWlyZWRQaHlzaWNhbFF1YW50aXRpZXMiLCJSZXNhbXBsaW5nIiwiUmVzYW1wbGluZ0FsZ29yaXRobURhdGEiLCJSZXNhbXBsaW5nTWV0aG9kIiwiUmVzY2FsZSIsIlJlc2NhbGluZ1RyYW5zZm9ybSIsIlJlc2V0RGlyZWN0b3J5IiwiUmVzZXRNZW51c1BhY2tldCIsIlJlc2V0U2NoZWR1bGVkVGFzayIsIlJlc2hhcGVMYXllciIsIlJlc2lkdWUiLCJSZXNpemVMYXllciIsIlJlc29sdmUiLCJSZXNvdXJjZUFjcXVpcmUiLCJSZXNvdXJjZURhdGEiLCJSZXNvdXJjZUZ1bmN0aW9uIiwiUmVzb3VyY2VPYmplY3QiLCJSZXNvdXJjZVJlZ2lzdGVyIiwiUmVzb3VyY2VSZW1vdmUiLCJSZXNvdXJjZVNlYXJjaCIsIlJlc291cmNlU3VibWlzc2lvbk9iamVjdCIsIlJlc291cmNlU3VibWl0IiwiUmVzb3VyY2VTeXN0ZW1CYXNlIiwiUmVzb3VyY2VTeXN0ZW1QYXRoIiwiUmVzb3VyY2VVcGRhdGUiLCJSZXNvdXJjZVZlcnNpb24iLCJSZXNwb25zZUZvcm0iLCJSZXN0IiwiUmVzdGFydEludGVydmFsIiwiUmVzdHJpY3RlZCIsIlJlc3VsdGFudCIsIlJlc3VtZVBhY2tldCIsIlJldHVybiIsIlJldHVybkVudGVyc0lucHV0IiwiUmV0dXJuRXhwcmVzc2lvblBhY2tldCIsIlJldHVybklucHV0Rm9ybVBhY2tldCIsIlJldHVyblBhY2tldCIsIlJldHVyblJlY2VpcHRGdW5jdGlvbiIsIlJldHVyblRleHRQYWNrZXQiLCJSZXZlcnNlIiwiUmV2ZXJzZUFwcGxpZWQiLCJSZXZlcnNlQmlvcnRob2dvbmFsU3BsaW5lV2F2ZWxldCIsIlJldmVyc2VFbGVtZW50IiwiUmV2ZXJzZUVxdWlsaWJyaXVtIiwiUmV2ZXJzZUdyYXBoIiwiUmV2ZXJzZVNvcnQiLCJSZXZlcnNlU29ydEJ5IiwiUmV2ZXJzZVVwRXF1aWxpYnJpdW0iLCJSZXZvbHV0aW9uQXhpcyIsIlJldm9sdXRpb25QbG90M0QiLCJSR0JDb2xvciIsIlJpY2NhdGlTb2x2ZSIsIlJpY2VEaXN0cmlidXRpb24iLCJSaWRnZUZpbHRlciIsIlJpZW1hbm5SIiwiUmllbWFublNpZWdlbFRoZXRhIiwiUmllbWFublNpZWdlbFoiLCJSaWVtYW5uWGkiLCJSaWZmbGUiLCJSaWdodCIsIlJpZ2h0QXJyb3ciLCJSaWdodEFycm93QmFyIiwiUmlnaHRBcnJvd0xlZnRBcnJvdyIsIlJpZ2h0Q29tcG9zaXRpb24iLCJSaWdodENvc2V0UmVwcmVzZW50YXRpdmUiLCJSaWdodERvd25UZWVWZWN0b3IiLCJSaWdodERvd25WZWN0b3IiLCJSaWdodERvd25WZWN0b3JCYXIiLCJSaWdodFRlZSIsIlJpZ2h0VGVlQXJyb3ciLCJSaWdodFRlZVZlY3RvciIsIlJpZ2h0VHJpYW5nbGUiLCJSaWdodFRyaWFuZ2xlQmFyIiwiUmlnaHRUcmlhbmdsZUVxdWFsIiwiUmlnaHRVcERvd25WZWN0b3IiLCJSaWdodFVwVGVlVmVjdG9yIiwiUmlnaHRVcFZlY3RvciIsIlJpZ2h0VXBWZWN0b3JCYXIiLCJSaWdodFZlY3RvciIsIlJpZ2h0VmVjdG9yQmFyIiwiUmlza0FjaGlldmVtZW50SW1wb3J0YW5jZSIsIlJpc2tSZWR1Y3Rpb25JbXBvcnRhbmNlIiwiUm9nZXJzVGFuaW1vdG9EaXNzaW1pbGFyaXR5IiwiUm9sbFBpdGNoWWF3QW5nbGVzIiwiUm9sbFBpdGNoWWF3TWF0cml4IiwiUm9tYW5OdW1lcmFsIiwiUm9vdCIsIlJvb3RBcHByb3hpbWFudCIsIlJvb3RJbnRlcnZhbHMiLCJSb290TG9jdXNQbG90IiwiUm9vdE1lYW5TcXVhcmUiLCJSb290T2ZVbml0eVEiLCJSb290UmVkdWNlIiwiUm9vdHMiLCJSb290U3VtIiwiUm90YXRlIiwiUm90YXRlTGFiZWwiLCJSb3RhdGVMZWZ0IiwiUm90YXRlUmlnaHQiLCJSb3RhdGlvbkFjdGlvbiIsIlJvdGF0aW9uQm94IiwiUm90YXRpb25Cb3hPcHRpb25zIiwiUm90YXRpb25NYXRyaXgiLCJSb3RhdGlvblRyYW5zZm9ybSIsIlJvdW5kIiwiUm91bmRJbXBsaWVzIiwiUm91bmRpbmdSYWRpdXMiLCJSb3ciLCJSb3dBbGlnbm1lbnRzIiwiUm93QmFja2dyb3VuZHMiLCJSb3dCb3giLCJSb3dIZWlnaHRzIiwiUm93TGluZXMiLCJSb3dNaW5IZWlnaHQiLCJSb3dSZWR1Y2UiLCJSb3dzRXF1YWwiLCJSb3dTcGFjaW5ncyIsIlJTb2x2ZSIsIlJTb2x2ZVZhbHVlIiwiUnVkaW5TaGFwaXJvIiwiUnVkdmFsaXNHcm91cFJ1IiwiUnVsZSIsIlJ1bGVDb25kaXRpb24iLCJSdWxlRGVsYXllZCIsIlJ1bGVGb3JtIiwiUnVsZVBsb3QiLCJSdWxlclVuaXRzIiwiUnVuIiwiUnVuUHJvY2VzcyIsIlJ1blNjaGVkdWxlZFRhc2siLCJSdW5UaHJvdWdoIiwiUnVudGltZUF0dHJpYnV0ZXMiLCJSdW50aW1lT3B0aW9ucyIsIlJ1c3NlbGxSYW9EaXNzaW1pbGFyaXR5IiwiU2FtZVEiLCJTYW1lVGVzdCIsIlNhbWVUZXN0UHJvcGVydGllcyIsIlNhbXBsZWRFbnRpdHlDbGFzcyIsIlNhbXBsZURlcHRoIiwiU2FtcGxlZFNvdW5kRnVuY3Rpb24iLCJTYW1wbGVkU291bmRMaXN0IiwiU2FtcGxlUmF0ZSIsIlNhbXBsaW5nUGVyaW9kIiwiU0FSSU1BUHJvY2VzcyIsIlNBUk1BUHJvY2VzcyIsIlNBU1RyaWFuZ2xlIiwiU2F0ZWxsaXRlRGF0YSIsIlNhdGlzZmlhYmlsaXR5Q291bnQiLCJTYXRpc2ZpYWJpbGl0eUluc3RhbmNlcyIsIlNhdGlzZmlhYmxlUSIsIlNhdHVyZGF5IiwiU2F2ZSIsIlNhdmVhYmxlIiwiU2F2ZUF1dG9EZWxldGUiLCJTYXZlQ29ubmVjdGlvbiIsIlNhdmVEZWZpbml0aW9ucyIsIlNhdml0emt5R29sYXlNYXRyaXgiLCJTYXd0b290aFdhdmUiLCJTY2FsZSIsIlNjYWxlZCIsIlNjYWxlRGl2aXNpb25zIiwiU2NhbGVkTW91c2VQb3NpdGlvbiIsIlNjYWxlT3JpZ2luIiwiU2NhbGVQYWRkaW5nIiwiU2NhbGVSYW5nZXMiLCJTY2FsZVJhbmdlU3R5bGUiLCJTY2FsaW5nRnVuY3Rpb25zIiwiU2NhbGluZ01hdHJpeCIsIlNjYWxpbmdUcmFuc2Zvcm0iLCJTY2FuIiwiU2NoZWR1bGVkVGFzayIsIlNjaGVkdWxlZFRhc2tBY3RpdmVRIiwiU2NoZWR1bGVkVGFza0luZm9ybWF0aW9uIiwiU2NoZWR1bGVkVGFza0luZm9ybWF0aW9uRGF0YSIsIlNjaGVkdWxlZFRhc2tPYmplY3QiLCJTY2hlZHVsZWRUYXNrcyIsIlNjaHVyRGVjb21wb3NpdGlvbiIsIlNjaWVudGlmaWNGb3JtIiwiU2NpZW50aWZpY05vdGF0aW9uVGhyZXNob2xkIiwiU2NvcmVyR2kiLCJTY29yZXJHaVByaW1lIiwiU2NvcmVySGkiLCJTY29yZXJIaVByaW1lIiwiU2NyZWVuUmVjdGFuZ2xlIiwiU2NyZWVuU3R5bGVFbnZpcm9ubWVudCIsIlNjcmlwdEJhc2VsaW5lU2hpZnRzIiwiU2NyaXB0Rm9ybSIsIlNjcmlwdExldmVsIiwiU2NyaXB0TWluU2l6ZSIsIlNjcmlwdFJ1bGVzIiwiU2NyaXB0U2l6ZU11bHRpcGxpZXJzIiwiU2Nyb2xsYmFycyIsIlNjcm9sbGluZ09wdGlvbnMiLCJTY3JvbGxQb3NpdGlvbiIsIlNlYXJjaEFkanVzdG1lbnQiLCJTZWFyY2hJbmRleE9iamVjdCIsIlNlYXJjaEluZGljZXMiLCJTZWFyY2hRdWVyeVN0cmluZyIsIlNlYXJjaFJlc3VsdE9iamVjdCIsIlNlYyIsIlNlY2giLCJTZWNoRGlzdHJpYnV0aW9uIiwiU2Vjb25kT3JkZXJDb25lT3B0aW1pemF0aW9uIiwiU2VjdGlvbkdyb3VwaW5nIiwiU2VjdG9yQ2hhcnQiLCJTZWN0b3JDaGFydDNEIiwiU2VjdG9yT3JpZ2luIiwiU2VjdG9yU3BhY2luZyIsIlNlY3VyZWRBdXRoZW50aWNhdGlvbktleSIsIlNlY3VyZWRBdXRoZW50aWNhdGlvbktleXMiLCJTZWVkUmFuZG9tIiwiU2VsZWN0IiwiU2VsZWN0YWJsZSIsIlNlbGVjdENvbXBvbmVudHMiLCJTZWxlY3RlZENlbGxzIiwiU2VsZWN0ZWROb3RlYm9vayIsIlNlbGVjdEZpcnN0IiwiU2VsZWN0aW9uIiwiU2VsZWN0aW9uQW5pbWF0ZSIsIlNlbGVjdGlvbkNlbGwiLCJTZWxlY3Rpb25DZWxsQ3JlYXRlQ2VsbCIsIlNlbGVjdGlvbkNlbGxEZWZhdWx0U3R5bGUiLCJTZWxlY3Rpb25DZWxsUGFyZW50U3R5bGUiLCJTZWxlY3Rpb25DcmVhdGVDZWxsIiwiU2VsZWN0aW9uRGVidWdnZXJUYWciLCJTZWxlY3Rpb25EdXBsaWNhdGVDZWxsIiwiU2VsZWN0aW9uRXZhbHVhdGUiLCJTZWxlY3Rpb25FdmFsdWF0ZUNyZWF0ZUNlbGwiLCJTZWxlY3Rpb25Nb3ZlIiwiU2VsZWN0aW9uUGxhY2Vob2xkZXIiLCJTZWxlY3Rpb25TZXRTdHlsZSIsIlNlbGVjdFdpdGhDb250ZW50cyIsIlNlbGZMb29wcyIsIlNlbGZMb29wU3R5bGUiLCJTZW1hbnRpY0ltcG9ydCIsIlNlbWFudGljSW1wb3J0U3RyaW5nIiwiU2VtYW50aWNJbnRlcnByZXRhdGlvbiIsIlNlbWlhbGdlYnJhaWNDb21wb25lbnRJbnN0YW5jZXMiLCJTZW1pZGVmaW5pdGVPcHRpbWl6YXRpb24iLCJTZW5kTWFpbCIsIlNlbmRNZXNzYWdlIiwiU2VxdWVuY2UiLCJTZXF1ZW5jZUFsaWdubWVudCIsIlNlcXVlbmNlQXR0ZW50aW9uTGF5ZXIiLCJTZXF1ZW5jZUNhc2VzIiwiU2VxdWVuY2VDb3VudCIsIlNlcXVlbmNlRm9sZCIsIlNlcXVlbmNlRm9sZExpc3QiLCJTZXF1ZW5jZUZvcm0iLCJTZXF1ZW5jZUhvbGQiLCJTZXF1ZW5jZUxhc3RMYXllciIsIlNlcXVlbmNlTW9zdExheWVyIiwiU2VxdWVuY2VQb3NpdGlvbiIsIlNlcXVlbmNlUHJlZGljdCIsIlNlcXVlbmNlUHJlZGljdG9yRnVuY3Rpb24iLCJTZXF1ZW5jZVJlcGxhY2UiLCJTZXF1ZW5jZVJlc3RMYXllciIsIlNlcXVlbmNlUmV2ZXJzZUxheWVyIiwiU2VxdWVuY2VTcGxpdCIsIlNlcmllcyIsIlNlcmllc0NvZWZmaWNpZW50IiwiU2VyaWVzRGF0YSIsIlNlcmllc1Rlcm1Hb2FsIiwiU2VydmljZUNvbm5lY3QiLCJTZXJ2aWNlRGlzY29ubmVjdCIsIlNlcnZpY2VFeGVjdXRlIiwiU2VydmljZU9iamVjdCIsIlNlcnZpY2VSZXF1ZXN0IiwiU2VydmljZVJlc3BvbnNlIiwiU2VydmljZVN1Ym1pdCIsIlNlc3Npb25TdWJtaXQiLCJTZXNzaW9uVGltZSIsIlNldCIsIlNldEFjY3VyYWN5IiwiU2V0QWxwaGFDaGFubmVsIiwiU2V0QXR0cmlidXRlcyIsIlNldGJhY2tzIiwiU2V0Qm94Rm9ybU5hbWVzUGFja2V0IiwiU2V0Q2xvdWREaXJlY3RvcnkiLCJTZXRDb29raWVzIiwiU2V0RGVsYXllZCIsIlNldERpcmVjdG9yeSIsIlNldEVudmlyb25tZW50IiwiU2V0RXZhbHVhdGlvbk5vdGVib29rIiwiU2V0RmlsZURhdGUiLCJTZXRGaWxlTG9hZGluZ0NvbnRleHQiLCJTZXROb3RlYm9va1N0YXR1c0xpbmUiLCJTZXRPcHRpb25zIiwiU2V0T3B0aW9uc1BhY2tldCIsIlNldFBlcm1pc3Npb25zIiwiU2V0UHJlY2lzaW9uIiwiU2V0UHJvcGVydHkiLCJTZXRTZWN1cmVkQXV0aGVudGljYXRpb25LZXkiLCJTZXRTZWxlY3RlZE5vdGVib29rIiwiU2V0U2hhcmVkRnVuY3Rpb24iLCJTZXRTaGFyZWRWYXJpYWJsZSIsIlNldFNwZWVjaFBhcmFtZXRlcnNQYWNrZXQiLCJTZXRTdHJlYW1Qb3NpdGlvbiIsIlNldFN5c3RlbU1vZGVsIiwiU2V0U3lzdGVtT3B0aW9ucyIsIlNldHRlciIsIlNldHRlckJhciIsIlNldHRlckJveCIsIlNldHRlckJveE9wdGlvbnMiLCJTZXR0aW5nIiwiU2V0VXNlcnMiLCJTZXRWYWx1ZSIsIlNoYWRpbmciLCJTaGFsbG93IiwiU2hhbm5vbldhdmVsZXQiLCJTaGFwaXJvV2lsa1Rlc3QiLCJTaGFyZSIsIlNoYXJpbmdMaXN0IiwiU2hhcnBlbiIsIlNoZWFyaW5nTWF0cml4IiwiU2hlYXJpbmdUcmFuc2Zvcm0iLCJTaGVsbFJlZ2lvbiIsIlNoZW5DYXN0YW5NYXRyaXgiLCJTaGlmdGVkR29tcGVydHpEaXN0cmlidXRpb24iLCJTaGlmdFJlZ2lzdGVyU2VxdWVuY2UiLCJTaG9ydCIsIlNob3J0RG93bkFycm93IiwiU2hvcnRlc3QiLCJTaG9ydGVzdE1hdGNoIiwiU2hvcnRlc3RQYXRoRnVuY3Rpb24iLCJTaG9ydExlZnRBcnJvdyIsIlNob3J0UmlnaHRBcnJvdyIsIlNob3J0VGltZUZvdXJpZXIiLCJTaG9ydFRpbWVGb3VyaWVyRGF0YSIsIlNob3J0VXBBcnJvdyIsIlNob3ciLCJTaG93QXV0b0NvbnZlcnQiLCJTaG93QXV0b1NwZWxsQ2hlY2siLCJTaG93QXV0b1N0eWxlcyIsIlNob3dDZWxsQnJhY2tldCIsIlNob3dDZWxsTGFiZWwiLCJTaG93Q2VsbFRhZ3MiLCJTaG93Q2xvc2VkQ2VsbEFyZWEiLCJTaG93Q29kZUFzc2lzdCIsIlNob3dDb250ZW50cyIsIlNob3dDb250cm9scyIsIlNob3dDdXJzb3JUcmFja2VyIiwiU2hvd0dyb3VwT3BlbkNsb3NlSWNvbiIsIlNob3dHcm91cE9wZW5lciIsIlNob3dJbnZpc2libGVDaGFyYWN0ZXJzIiwiU2hvd1BhZ2VCcmVha3MiLCJTaG93UHJlZGljdGl2ZUludGVyZmFjZSIsIlNob3dTZWxlY3Rpb24iLCJTaG93U2hvcnRCb3hGb3JtIiwiU2hvd1NwZWNpYWxDaGFyYWN0ZXJzIiwiU2hvd1N0cmluZ0NoYXJhY3RlcnMiLCJTaG93U3ludGF4U3R5bGVzIiwiU2hyaW5raW5nRGVsYXkiLCJTaHJpbmtXcmFwQm91bmRpbmdCb3giLCJTaWRlcmVhbFRpbWUiLCJTaWVnZWxUaGV0YSIsIlNpZWdlbFR1a2V5VGVzdCIsIlNpZXJwaW5za2lDdXJ2ZSIsIlNpZXJwaW5za2lNZXNoIiwiU2lnbiIsIlNpZ25hdHVyZSIsIlNpZ25lZFJhbmtUZXN0IiwiU2lnbmVkUmVnaW9uRGlzdGFuY2UiLCJTaWduaWZpY2FuY2VMZXZlbCIsIlNpZ25QYWRkaW5nIiwiU2lnblRlc3QiLCJTaW1pbGFyaXR5UnVsZXMiLCJTaW1wbGVHcmFwaCIsIlNpbXBsZUdyYXBoUSIsIlNpbXBsZVBvbHlnb25RIiwiU2ltcGxlUG9seWhlZHJvblEiLCJTaW1wbGV4IiwiU2ltcGxpZnkiLCJTaW4iLCJTaW5jIiwiU2luZ2hNYWRkYWxhRGlzdHJpYnV0aW9uIiwiU2luZ2xlRXZhbHVhdGlvbiIsIlNpbmdsZUxldHRlckl0YWxpY3MiLCJTaW5nbGVMZXR0ZXJTdHlsZSIsIlNpbmd1bGFyVmFsdWVEZWNvbXBvc2l0aW9uIiwiU2luZ3VsYXJWYWx1ZUxpc3QiLCJTaW5ndWxhclZhbHVlUGxvdCIsIlNpbmd1bGFyVmFsdWVzIiwiU2luaCIsIlNpbmhJbnRlZ3JhbCIsIlNpbkludGVncmFsIiwiU2l4SlN5bWJvbCIsIlNrZWxldG9uIiwiU2tlbGV0b25UcmFuc2Zvcm0iLCJTa2VsbGFtRGlzdHJpYnV0aW9uIiwiU2tld25lc3MiLCJTa2V3Tm9ybWFsRGlzdHJpYnV0aW9uIiwiU2tpblN0eWxlIiwiU2tpcCIsIlNsaWNlQ29udG91clBsb3QzRCIsIlNsaWNlRGVuc2l0eVBsb3QzRCIsIlNsaWNlRGlzdHJpYnV0aW9uIiwiU2xpY2VWZWN0b3JQbG90M0QiLCJTbGlkZXIiLCJTbGlkZXIyRCIsIlNsaWRlcjJEQm94IiwiU2xpZGVyMkRCb3hPcHRpb25zIiwiU2xpZGVyQm94IiwiU2xpZGVyQm94T3B0aW9ucyIsIlNsaWRlVmlldyIsIlNsb3QiLCJTbG90U2VxdWVuY2UiLCJTbWFsbCIsIlNtYWxsQ2lyY2xlIiwiU21hbGxlciIsIlNtaXRoRGVjb21wb3NpdGlvbiIsIlNtaXRoRGVsYXlDb21wZW5zYXRvciIsIlNtaXRoV2F0ZXJtYW5TaW1pbGFyaXR5IiwiU21vb3RoRGVuc2l0eUhpc3RvZ3JhbSIsIlNtb290aEhpc3RvZ3JhbSIsIlNtb290aEhpc3RvZ3JhbTNEIiwiU21vb3RoS2VybmVsRGlzdHJpYnV0aW9uIiwiU25EaXNwZXJzaW9uIiwiU25pcHBldCIsIlNudWJQb2x5aGVkcm9uIiwiU29jaWFsTWVkaWFEYXRhIiwiU29ja2V0IiwiU29ja2V0Q29ubmVjdCIsIlNvY2tldExpc3RlbiIsIlNvY2tldExpc3RlbmVyIiwiU29ja2V0T2JqZWN0IiwiU29ja2V0T3BlbiIsIlNvY2tldFJlYWRNZXNzYWdlIiwiU29ja2V0UmVhZHlRIiwiU29ja2V0cyIsIlNvY2tldFdhaXRBbGwiLCJTb2NrZXRXYWl0TmV4dCIsIlNvZnRtYXhMYXllciIsIlNva2FsU25lYXRoRGlzc2ltaWxhcml0eSIsIlNvbGFyRWNsaXBzZSIsIlNvbGFyU3lzdGVtRmVhdHVyZURhdGEiLCJTb2xpZEFuZ2xlIiwiU29saWREYXRhIiwiU29saWRSZWdpb25RIiwiU29sdmUiLCJTb2x2ZUFsd2F5cyIsIlNvbHZlRGVsYXllZCIsIlNvcnQiLCJTb3J0QnkiLCJTb3J0ZWRCeSIsIlNvcnRlZEVudGl0eUNsYXNzIiwiU291bmQiLCJTb3VuZEFuZEdyYXBoaWNzIiwiU291bmROb3RlIiwiU291bmRWb2x1bWUiLCJTb3VyY2VMaW5rIiwiU293IiwiU3BhY2UiLCJTcGFjZUN1cnZlRGF0YSIsIlNwYWNlRm9ybSIsIlNwYWNlciIsIlNwYWNpbmdzIiwiU3BhbiIsIlNwYW5BZGp1c3RtZW50cyIsIlNwYW5DaGFyYWN0ZXJSb3VuZGluZyIsIlNwYW5Gcm9tQWJvdmUiLCJTcGFuRnJvbUJvdGgiLCJTcGFuRnJvbUxlZnQiLCJTcGFuTGluZVRoaWNrbmVzcyIsIlNwYW5NYXhTaXplIiwiU3Bhbk1pblNpemUiLCJTcGFubmluZ0NoYXJhY3RlcnMiLCJTcGFuU3ltbWV0cmljIiwiU3BhcnNlQXJyYXkiLCJTcGF0aWFsR3JhcGhEaXN0cmlidXRpb24iLCJTcGF0aWFsTWVkaWFuIiwiU3BhdGlhbFRyYW5zZm9ybWF0aW9uTGF5ZXIiLCJTcGVhayIsIlNwZWFrZXJNYXRjaFEiLCJTcGVha1RleHRQYWNrZXQiLCJTcGVhcm1hblJhbmtUZXN0IiwiU3BlYXJtYW5SaG8iLCJTcGVjaWVzRGF0YSIsIlNwZWNpZmljaXR5R29hbCIsIlNwZWN0cmFsTGluZURhdGEiLCJTcGVjdHJvZ3JhbSIsIlNwZWN0cm9ncmFtQXJyYXkiLCJTcGVjdWxhcml0eSIsIlNwZWVjaENhc2VzIiwiU3BlZWNoSW50ZXJwcmV0ZXIiLCJTcGVlY2hSZWNvZ25pemUiLCJTcGVlY2hTeW50aGVzaXplIiwiU3BlbGxpbmdDb3JyZWN0aW9uIiwiU3BlbGxpbmdDb3JyZWN0aW9uTGlzdCIsIlNwZWxsaW5nRGljdGlvbmFyaWVzIiwiU3BlbGxpbmdEaWN0aW9uYXJpZXNQYXRoIiwiU3BlbGxpbmdPcHRpb25zIiwiU3BlbGxpbmdTdWdnZXN0aW9uc1BhY2tldCIsIlNwaGVyZSIsIlNwaGVyZUJveCIsIlNwaGVyZVBvaW50cyIsIlNwaGVyaWNhbEJlc3NlbEoiLCJTcGhlcmljYWxCZXNzZWxZIiwiU3BoZXJpY2FsSGFua2VsSDEiLCJTcGhlcmljYWxIYW5rZWxIMiIsIlNwaGVyaWNhbEhhcm1vbmljWSIsIlNwaGVyaWNhbFBsb3QzRCIsIlNwaGVyaWNhbFJlZ2lvbiIsIlNwaGVyaWNhbFNoZWxsIiwiU3BoZXJvaWRhbEVpZ2VudmFsdWUiLCJTcGhlcm9pZGFsSm9pbmluZ0ZhY3RvciIsIlNwaGVyb2lkYWxQUyIsIlNwaGVyb2lkYWxQU1ByaW1lIiwiU3BoZXJvaWRhbFFTIiwiU3BoZXJvaWRhbFFTUHJpbWUiLCJTcGhlcm9pZGFsUmFkaWFsRmFjdG9yIiwiU3BoZXJvaWRhbFMxIiwiU3BoZXJvaWRhbFMxUHJpbWUiLCJTcGhlcm9pZGFsUzIiLCJTcGhlcm9pZGFsUzJQcmltZSIsIlNwbGljZSIsIlNwbGljZWREaXN0cmlidXRpb24iLCJTcGxpbmVDbG9zZWQiLCJTcGxpbmVEZWdyZWUiLCJTcGxpbmVLbm90cyIsIlNwbGluZVdlaWdodHMiLCJTcGxpdCIsIlNwbGl0QnkiLCJTcG9rZW5TdHJpbmciLCJTcXJ0IiwiU3FydEJveCIsIlNxcnRCb3hPcHRpb25zIiwiU3F1YXJlIiwiU3F1YXJlZEV1Y2xpZGVhbkRpc3RhbmNlIiwiU3F1YXJlRnJlZVEiLCJTcXVhcmVJbnRlcnNlY3Rpb24iLCJTcXVhcmVNYXRyaXhRIiwiU3F1YXJlUmVwZWF0aW5nRWxlbWVudCIsIlNxdWFyZXNSIiwiU3F1YXJlU3Vic2V0IiwiU3F1YXJlU3Vic2V0RXF1YWwiLCJTcXVhcmVTdXBlcnNldCIsIlNxdWFyZVN1cGVyc2V0RXF1YWwiLCJTcXVhcmVVbmlvbiIsIlNxdWFyZVdhdmUiLCJTU1NUcmlhbmdsZSIsIlN0YWJpbGl0eU1hcmdpbnMiLCJTdGFiaWxpdHlNYXJnaW5zU3R5bGUiLCJTdGFibGVEaXN0cmlidXRpb24iLCJTdGFjayIsIlN0YWNrQmVnaW4iLCJTdGFja0NvbXBsZXRlIiwiU3RhY2tlZERhdGVMaXN0UGxvdCIsIlN0YWNrZWRMaXN0UGxvdCIsIlN0YWNrSW5oaWJpdCIsIlN0YWRpdW1TaGFwZSIsIlN0YW5kYXJkQXRtb3NwaGVyZURhdGEiLCJTdGFuZGFyZERldmlhdGlvbiIsIlN0YW5kYXJkRGV2aWF0aW9uRmlsdGVyIiwiU3RhbmRhcmRGb3JtIiwiU3RhbmRhcmRpemUiLCJTdGFuZGFyZGl6ZWQiLCJTdGFuZGFyZE9jZWFuRGF0YSIsIlN0YW5kYnlEaXN0cmlidXRpb24iLCJTdGFyIiwiU3RhckNsdXN0ZXJEYXRhIiwiU3RhckRhdGEiLCJTdGFyR3JhcGgiLCJTdGFydEFzeW5jaHJvbm91c1Rhc2siLCJTdGFydEV4dGVybmFsU2Vzc2lvbiIsIlN0YXJ0aW5nU3RlcFNpemUiLCJTdGFydE9mTGluZSIsIlN0YXJ0T2ZTdHJpbmciLCJTdGFydFByb2Nlc3MiLCJTdGFydFNjaGVkdWxlZFRhc2siLCJTdGFydHVwU291bmQiLCJTdGFydFdlYlNlc3Npb24iLCJTdGF0ZURpbWVuc2lvbnMiLCJTdGF0ZUZlZWRiYWNrR2FpbnMiLCJTdGF0ZU91dHB1dEVzdGltYXRvciIsIlN0YXRlUmVzcG9uc2UiLCJTdGF0ZVNwYWNlTW9kZWwiLCJTdGF0ZVNwYWNlUmVhbGl6YXRpb24iLCJTdGF0ZVNwYWNlVHJhbnNmb3JtIiwiU3RhdGVUcmFuc2Zvcm1hdGlvbkxpbmVhcml6ZSIsIlN0YXRpb25hcnlEaXN0cmlidXRpb24iLCJTdGF0aW9uYXJ5V2F2ZWxldFBhY2tldFRyYW5zZm9ybSIsIlN0YXRpb25hcnlXYXZlbGV0VHJhbnNmb3JtIiwiU3RhdHVzQXJlYSIsIlN0YXR1c0NlbnRyYWxpdHkiLCJTdGVwTW9uaXRvciIsIlN0ZXJlb2NoZW1pc3RyeUVsZW1lbnRzIiwiU3RpZWx0amVzR2FtbWEiLCJTdGlwcGxlU2hhZGluZyIsIlN0aXJsaW5nUzEiLCJTdGlybGluZ1MyIiwiU3RvcEFzeW5jaHJvbm91c1Rhc2siLCJTdG9wcGluZ1Bvd2VyRGF0YSIsIlN0b3BTY2hlZHVsZWRUYXNrIiwiU3RyYXRhVmFyaWFibGVzIiwiU3RyYXRvbm92aWNoUHJvY2VzcyIsIlN0cmVhbUNvbG9yRnVuY3Rpb24iLCJTdHJlYW1Db2xvckZ1bmN0aW9uU2NhbGluZyIsIlN0cmVhbURlbnNpdHlQbG90IiwiU3RyZWFtTWFya2VycyIsIlN0cmVhbVBsb3QiLCJTdHJlYW1Qb2ludHMiLCJTdHJlYW1Qb3NpdGlvbiIsIlN0cmVhbXMiLCJTdHJlYW1TY2FsZSIsIlN0cmVhbVN0eWxlIiwiU3RyaW5nIiwiU3RyaW5nQnJlYWsiLCJTdHJpbmdCeXRlQ291bnQiLCJTdHJpbmdDYXNlcyIsIlN0cmluZ0NvbnRhaW5zUSIsIlN0cmluZ0NvdW50IiwiU3RyaW5nRGVsZXRlIiwiU3RyaW5nRHJvcCIsIlN0cmluZ0VuZHNRIiwiU3RyaW5nRXhwcmVzc2lvbiIsIlN0cmluZ0V4dHJhY3QiLCJTdHJpbmdGb3JtIiwiU3RyaW5nRm9ybWF0IiwiU3RyaW5nRnJlZVEiLCJTdHJpbmdJbnNlcnQiLCJTdHJpbmdKb2luIiwiU3RyaW5nTGVuZ3RoIiwiU3RyaW5nTWF0Y2hRIiwiU3RyaW5nUGFkTGVmdCIsIlN0cmluZ1BhZFJpZ2h0IiwiU3RyaW5nUGFydCIsIlN0cmluZ1BhcnRpdGlvbiIsIlN0cmluZ1Bvc2l0aW9uIiwiU3RyaW5nUSIsIlN0cmluZ1JlcGVhdCIsIlN0cmluZ1JlcGxhY2UiLCJTdHJpbmdSZXBsYWNlTGlzdCIsIlN0cmluZ1JlcGxhY2VQYXJ0IiwiU3RyaW5nUmV2ZXJzZSIsIlN0cmluZ1JpZmZsZSIsIlN0cmluZ1JvdGF0ZUxlZnQiLCJTdHJpbmdSb3RhdGVSaWdodCIsIlN0cmluZ1NrZWxldG9uIiwiU3RyaW5nU3BsaXQiLCJTdHJpbmdTdGFydHNRIiwiU3RyaW5nVGFrZSIsIlN0cmluZ1RlbXBsYXRlIiwiU3RyaW5nVG9CeXRlQXJyYXkiLCJTdHJpbmdUb1N0cmVhbSIsIlN0cmluZ1RyaW0iLCJTdHJpcEJveGVzIiwiU3RyaXBPbklucHV0IiwiU3RyaXBXcmFwcGVyQm94ZXMiLCJTdHJva2VGb3JtIiwiU3RydWN0dXJhbEltcG9ydGFuY2UiLCJTdHJ1Y3R1cmVkQXJyYXkiLCJTdHJ1Y3R1cmVkQXJyYXlIZWFkUSIsIlN0cnVjdHVyZWRTZWxlY3Rpb24iLCJTdHJ1dmVIIiwiU3RydXZlTCIsIlN0dWIiLCJTdHVkZW50VERpc3RyaWJ1dGlvbiIsIlN0eWxlIiwiU3R5bGVCb3giLCJTdHlsZUJveEF1dG9EZWxldGUiLCJTdHlsZURhdGEiLCJTdHlsZURlZmluaXRpb25zIiwiU3R5bGVGb3JtIiwiU3R5bGVIaW50cyIsIlN0eWxlS2V5TWFwcGluZyIsIlN0eWxlTWVudUxpc3RpbmciLCJTdHlsZU5hbWVEaWFsb2dTZXR0aW5ncyIsIlN0eWxlTmFtZXMiLCJTdHlsZVByaW50IiwiU3R5bGVTaGVldFBhdGgiLCJTdWJkaXZpZGUiLCJTdWJmYWN0b3JpYWwiLCJTdWJncmFwaCIsIlN1Yk1pbnVzIiwiU3ViUGx1cyIsIlN1YnJlc3VsdGFudFBvbHlub21pYWxSZW1haW5kZXJzIiwiU3VicmVzdWx0YW50UG9seW5vbWlhbHMiLCJTdWJyZXN1bHRhbnRzIiwiU3Vic2NyaXB0IiwiU3Vic2NyaXB0Qm94IiwiU3Vic2NyaXB0Qm94T3B0aW9ucyIsIlN1YnNjcmlwdGVkIiwiU3Vic2VxdWVuY2VzIiwiU3Vic2V0IiwiU3Vic2V0Q2FzZXMiLCJTdWJzZXRDb3VudCIsIlN1YnNldEVxdWFsIiwiU3Vic2V0TWFwIiwiU3Vic2V0UG9zaXRpb24iLCJTdWJzZXRRIiwiU3Vic2V0UmVwbGFjZSIsIlN1YnNldHMiLCJTdWJTdGFyIiwiU3Vic3RpdHV0aW9uU3lzdGVtIiwiU3Vic3VwZXJzY3JpcHQiLCJTdWJzdXBlcnNjcmlwdEJveCIsIlN1YnN1cGVyc2NyaXB0Qm94T3B0aW9ucyIsIlN1YnRpdGxlRW5jb2RpbmciLCJTdWJ0aXRsZVRyYWNrcyIsIlN1YnRyYWN0IiwiU3VidHJhY3RGcm9tIiwiU3VidHJhY3RTaWRlcyIsIlN1YlZhbHVlcyIsIlN1Y2NlZWRzIiwiU3VjY2VlZHNFcXVhbCIsIlN1Y2NlZWRzU2xhbnRFcXVhbCIsIlN1Y2NlZWRzVGlsZGUiLCJTdWNjZXNzIiwiU3VjaFRoYXQiLCJTdW0iLCJTdW1Db252ZXJnZW5jZSIsIlN1bW1hdGlvbkxheWVyIiwiU3VuZGF5IiwiU3VuUG9zaXRpb24iLCJTdW5yaXNlIiwiU3Vuc2V0IiwiU3VwZXJEYWdnZXIiLCJTdXBlck1pbnVzIiwiU3VwZXJub3ZhRGF0YSIsIlN1cGVyUGx1cyIsIlN1cGVyc2NyaXB0IiwiU3VwZXJzY3JpcHRCb3giLCJTdXBlcnNjcmlwdEJveE9wdGlvbnMiLCJTdXBlcnNldCIsIlN1cGVyc2V0RXF1YWwiLCJTdXBlclN0YXIiLCJTdXJkIiwiU3VyZEZvcm0iLCJTdXJmYWNlQXBwZWFyYW5jZSIsIlN1cmZhY2VBcmVhIiwiU3VyZmFjZUNvbG9yIiwiU3VyZmFjZURhdGEiLCJTdXJmYWNlR3JhcGhpY3MiLCJTdXJ2aXZhbERpc3RyaWJ1dGlvbiIsIlN1cnZpdmFsRnVuY3Rpb24iLCJTdXJ2aXZhbE1vZGVsIiwiU3Vydml2YWxNb2RlbEZpdCIsIlN1c3BlbmRQYWNrZXQiLCJTdXp1a2lEaXN0cmlidXRpb24iLCJTdXp1a2lHcm91cFN1eiIsIlN3YXRjaExlZ2VuZCIsIlN3aXRjaCIsIlN5bWJvbCIsIlN5bWJvbE5hbWUiLCJTeW1sZXRXYXZlbGV0IiwiU3ltbWV0cmljIiwiU3ltbWV0cmljR3JvdXAiLCJTeW1tZXRyaWNLZXkiLCJTeW1tZXRyaWNNYXRyaXhRIiwiU3ltbWV0cmljUG9seW5vbWlhbCIsIlN5bW1ldHJpY1JlZHVjdGlvbiIsIlN5bW1ldHJpemUiLCJTeW1tZXRyaXplZEFycmF5IiwiU3ltbWV0cml6ZWRBcnJheVJ1bGVzIiwiU3ltbWV0cml6ZWREZXBlbmRlbnRDb21wb25lbnRzIiwiU3ltbWV0cml6ZWRJbmRlcGVuZGVudENvbXBvbmVudHMiLCJTeW1tZXRyaXplZFJlcGxhY2VQYXJ0IiwiU3luY2hyb25vdXNJbml0aWFsaXphdGlvbiIsIlN5bmNocm9ub3VzVXBkYXRpbmciLCJTeW5vbnltcyIsIlN5bnRheCIsIlN5bnRheEZvcm0iLCJTeW50YXhJbmZvcm1hdGlvbiIsIlN5bnRheExlbmd0aCIsIlN5bnRheFBhY2tldCIsIlN5bnRheFEiLCJTeW50aGVzaXplTWlzc2luZ1ZhbHVlcyIsIlN5c3RlbUNyZWRlbnRpYWwiLCJTeXN0ZW1DcmVkZW50aWFsRGF0YSIsIlN5c3RlbUNyZWRlbnRpYWxLZXkiLCJTeXN0ZW1DcmVkZW50aWFsS2V5cyIsIlN5c3RlbUNyZWRlbnRpYWxTdG9yZU9iamVjdCIsIlN5c3RlbURpYWxvZ0lucHV0IiwiU3lzdGVtRXhjZXB0aW9uIiwiU3lzdGVtR2V0IiwiU3lzdGVtSGVscFBhdGgiLCJTeXN0ZW1JbmZvcm1hdGlvbiIsIlN5c3RlbUluZm9ybWF0aW9uRGF0YSIsIlN5c3RlbUluc3RhbGwiLCJTeXN0ZW1Nb2RlbCIsIlN5c3RlbU1vZGVsZXIiLCJTeXN0ZW1Nb2RlbEV4YW1wbGVzIiwiU3lzdGVtTW9kZWxMaW5lYXJpemUiLCJTeXN0ZW1Nb2RlbFBhcmFtZXRyaWNTaW11bGF0ZSIsIlN5c3RlbU1vZGVsUGxvdCIsIlN5c3RlbU1vZGVsUHJvZ3Jlc3NSZXBvcnRpbmciLCJTeXN0ZW1Nb2RlbFJlbGlhYmlsaXR5IiwiU3lzdGVtTW9kZWxzIiwiU3lzdGVtTW9kZWxTaW11bGF0ZSIsIlN5c3RlbU1vZGVsU2ltdWxhdGVTZW5zaXRpdml0eSIsIlN5c3RlbU1vZGVsU2ltdWxhdGlvbkRhdGEiLCJTeXN0ZW1PcGVuIiwiU3lzdGVtT3B0aW9ucyIsIlN5c3RlbVByb2Nlc3NEYXRhIiwiU3lzdGVtUHJvY2Vzc2VzIiwiU3lzdGVtc0Nvbm5lY3Rpb25zTW9kZWwiLCJTeXN0ZW1zTW9kZWxEZWxheSIsIlN5c3RlbXNNb2RlbERlbGF5QXBwcm94aW1hdGUiLCJTeXN0ZW1zTW9kZWxEZWxldGUiLCJTeXN0ZW1zTW9kZWxEaW1lbnNpb25zIiwiU3lzdGVtc01vZGVsRXh0cmFjdCIsIlN5c3RlbXNNb2RlbEZlZWRiYWNrQ29ubmVjdCIsIlN5c3RlbXNNb2RlbExhYmVscyIsIlN5c3RlbXNNb2RlbExpbmVhcml0eSIsIlN5c3RlbXNNb2RlbE1lcmdlIiwiU3lzdGVtc01vZGVsT3JkZXIiLCJTeXN0ZW1zTW9kZWxQYXJhbGxlbENvbm5lY3QiLCJTeXN0ZW1zTW9kZWxTZXJpZXNDb25uZWN0IiwiU3lzdGVtc01vZGVsU3RhdGVGZWVkYmFja0Nvbm5lY3QiLCJTeXN0ZW1zTW9kZWxWZWN0b3JSZWxhdGl2ZU9yZGVycyIsIlN5c3RlbVN0dWIiLCJTeXN0ZW1UZXN0IiwiVGFiIiwiVGFiRmlsbGluZyIsIlRhYmxlIiwiVGFibGVBbGlnbm1lbnRzIiwiVGFibGVEZXB0aCIsIlRhYmxlRGlyZWN0aW9ucyIsIlRhYmxlRm9ybSIsIlRhYmxlSGVhZGluZ3MiLCJUYWJsZVNwYWNpbmciLCJUYWJsZVZpZXciLCJUYWJsZVZpZXdCb3giLCJUYWJsZVZpZXdCb3hCYWNrZ3JvdW5kIiwiVGFibGVWaWV3Qm94SXRlbVNpemUiLCJUYWJsZVZpZXdCb3hPcHRpb25zIiwiVGFiU3BhY2luZ3MiLCJUYWJWaWV3IiwiVGFiVmlld0JveCIsIlRhYlZpZXdCb3hPcHRpb25zIiwiVGFnQm94IiwiVGFnQm94Tm90ZSIsIlRhZ0JveE9wdGlvbnMiLCJUYWdnaW5nUnVsZXMiLCJUYWdTZXQiLCJUYWdTZXREZWxheWVkIiwiVGFnU3R5bGUiLCJUYWdVbnNldCIsIlRha2UiLCJUYWtlRHJvcCIsIlRha2VMYXJnZXN0IiwiVGFrZUxhcmdlc3RCeSIsIlRha2VMaXN0IiwiVGFrZVNtYWxsZXN0IiwiVGFrZVNtYWxsZXN0QnkiLCJUYWtlV2hpbGUiLCJUYWxseSIsIlRhbiIsIlRhbmgiLCJUYXJnZXREZXZpY2UiLCJUYXJnZXRGdW5jdGlvbnMiLCJUYXJnZXRTeXN0ZW0iLCJUYXJnZXRVbml0cyIsIlRhc2tBYm9ydCIsIlRhc2tFeGVjdXRlIiwiVGFza09iamVjdCIsIlRhc2tSZW1vdmUiLCJUYXNrUmVzdW1lIiwiVGFza3MiLCJUYXNrU3VzcGVuZCIsIlRhc2tXYWl0IiwiVGF1dG9sb2d5USIsIlRlbGVncmFwaFByb2Nlc3MiLCJUZW1wbGF0ZUFwcGx5IiwiVGVtcGxhdGVBcmdCb3giLCJUZW1wbGF0ZUJveCIsIlRlbXBsYXRlQm94T3B0aW9ucyIsIlRlbXBsYXRlRXZhbHVhdGUiLCJUZW1wbGF0ZUV4cHJlc3Npb24iLCJUZW1wbGF0ZUlmIiwiVGVtcGxhdGVPYmplY3QiLCJUZW1wbGF0ZVNlcXVlbmNlIiwiVGVtcGxhdGVTbG90IiwiVGVtcGxhdGVTbG90U2VxdWVuY2UiLCJUZW1wbGF0ZVVuZXZhbHVhdGVkIiwiVGVtcGxhdGVWZXJiYXRpbSIsIlRlbXBsYXRlV2l0aCIsIlRlbXBvcmFsRGF0YSIsIlRlbXBvcmFsUmVndWxhcml0eSIsIlRlbXBvcmFyeSIsIlRlbXBvcmFyeVZhcmlhYmxlIiwiVGVuc29yQ29udHJhY3QiLCJUZW5zb3JEaW1lbnNpb25zIiwiVGVuc29yRXhwYW5kIiwiVGVuc29yUHJvZHVjdCIsIlRlbnNvclEiLCJUZW5zb3JSYW5rIiwiVGVuc29yUmVkdWNlIiwiVGVuc29yU3ltbWV0cnkiLCJUZW5zb3JUcmFuc3Bvc2UiLCJUZW5zb3JXZWRnZSIsIlRlc3RJRCIsIlRlc3RSZXBvcnQiLCJUZXN0UmVwb3J0T2JqZWN0IiwiVGVzdFJlc3VsdE9iamVjdCIsIlRldHJhaGVkcm9uIiwiVGV0cmFoZWRyb25Cb3giLCJUZXRyYWhlZHJvbkJveE9wdGlvbnMiLCJUZVhGb3JtIiwiVGVYU2F2ZSIsIlRleHQiLCJUZXh0M0RCb3giLCJUZXh0M0RCb3hPcHRpb25zIiwiVGV4dEFsaWdubWVudCIsIlRleHRCYW5kIiwiVGV4dEJvdW5kaW5nQm94IiwiVGV4dEJveCIsIlRleHRDYXNlcyIsIlRleHRDZWxsIiwiVGV4dENsaXBib2FyZFR5cGUiLCJUZXh0Q29udGVudHMiLCJUZXh0RGF0YSIsIlRleHRFbGVtZW50IiwiVGV4dEZvcm0iLCJUZXh0R3JpZCIsIlRleHRKdXN0aWZpY2F0aW9uIiwiVGV4dExpbmUiLCJUZXh0UGFja2V0IiwiVGV4dFBhcmFncmFwaCIsIlRleHRQb3NpdGlvbiIsIlRleHRSZWNvZ25pemUiLCJUZXh0U2VhcmNoIiwiVGV4dFNlYXJjaFJlcG9ydCIsIlRleHRTZW50ZW5jZXMiLCJUZXh0U3RyaW5nIiwiVGV4dFN0cnVjdHVyZSIsIlRleHRTdHlsZSIsIlRleHRUcmFuc2xhdGlvbiIsIlRleHR1cmUiLCJUZXh0dXJlQ29vcmRpbmF0ZUZ1bmN0aW9uIiwiVGV4dHVyZUNvb3JkaW5hdGVTY2FsaW5nIiwiVGV4dFdvcmRzIiwiVGhlcmVmb3JlIiwiVGhlcm1vZHluYW1pY0RhdGEiLCJUaGVybW9tZXRlckdhdWdlIiwiVGhpY2siLCJUaGlja25lc3MiLCJUaGluIiwiVGhpbm5pbmciLCJUaGlzTGluayIsIlRob21wc29uR3JvdXBUaCIsIlRocmVhZCIsIlRocmVhZGluZ0xheWVyIiwiVGhyZWVKU3ltYm9sIiwiVGhyZXNob2xkIiwiVGhyb3VnaCIsIlRocm93IiwiVGh1ZU1vcnNlIiwiVGh1bWJuYWlsIiwiVGh1cnNkYXkiLCJUaWNrcyIsIlRpY2tzU3R5bGUiLCJUaWRlRGF0YSIsIlRpbGRlIiwiVGlsZGVFcXVhbCIsIlRpbGRlRnVsbEVxdWFsIiwiVGlsZGVUaWxkZSIsIlRpbWVDb25zdHJhaW5lZCIsIlRpbWVDb25zdHJhaW50IiwiVGltZURpcmVjdGlvbiIsIlRpbWVGb3JtYXQiLCJUaW1lR29hbCIsIlRpbWVsaW5lUGxvdCIsIlRpbWVPYmplY3QiLCJUaW1lT2JqZWN0USIsIlRpbWVSZW1haW5pbmciLCJUaW1lcyIsIlRpbWVzQnkiLCJUaW1lU2VyaWVzIiwiVGltZVNlcmllc0FnZ3JlZ2F0ZSIsIlRpbWVTZXJpZXNGb3JlY2FzdCIsIlRpbWVTZXJpZXNJbnNlcnQiLCJUaW1lU2VyaWVzSW52ZXJ0aWJpbGl0eSIsIlRpbWVTZXJpZXNNYXAiLCJUaW1lU2VyaWVzTWFwVGhyZWFkIiwiVGltZVNlcmllc01vZGVsIiwiVGltZVNlcmllc01vZGVsRml0IiwiVGltZVNlcmllc1Jlc2FtcGxlIiwiVGltZVNlcmllc1Jlc2NhbGUiLCJUaW1lU2VyaWVzU2hpZnQiLCJUaW1lU2VyaWVzVGhyZWFkIiwiVGltZVNlcmllc1dpbmRvdyIsIlRpbWVVc2VkIiwiVGltZVZhbHVlIiwiVGltZVdhcnBpbmdDb3JyZXNwb25kZW5jZSIsIlRpbWVXYXJwaW5nRGlzdGFuY2UiLCJUaW1lWm9uZSIsIlRpbWVab25lQ29udmVydCIsIlRpbWVab25lT2Zmc2V0IiwiVGltaW5nIiwiVGlueSIsIlRpdGxlR3JvdXBpbmciLCJUaXRzR3JvdXBUIiwiVG9Cb3hlcyIsIlRvQ2hhcmFjdGVyQ29kZSIsIlRvQ29sb3IiLCJUb0NvbnRpbnVvdXNUaW1lTW9kZWwiLCJUb0RhdGUiLCJUb2RheSIsIlRvRGlzY3JldGVUaW1lTW9kZWwiLCJUb0VudGl0eSIsIlRvZXBsaXR6TWF0cml4IiwiVG9FeHByZXNzaW9uIiwiVG9GaWxlTmFtZSIsIlRvZ2V0aGVyIiwiVG9nZ2xlIiwiVG9nZ2xlRmFsc2UiLCJUb2dnbGVyIiwiVG9nZ2xlckJhciIsIlRvZ2dsZXJCb3giLCJUb2dnbGVyQm94T3B0aW9ucyIsIlRvSGVsZEV4cHJlc3Npb24iLCJUb0ludmVydGlibGVUaW1lU2VyaWVzIiwiVG9rZW5Xb3JkcyIsIlRvbGVyYW5jZSIsIlRvTG93ZXJDYXNlIiwiVG9tb3Jyb3ciLCJUb051bWJlckZpZWxkIiwiVG9vQmlnIiwiVG9vbHRpcCIsIlRvb2x0aXBCb3giLCJUb29sdGlwQm94T3B0aW9ucyIsIlRvb2x0aXBEZWxheSIsIlRvb2x0aXBTdHlsZSIsIlRvb25TaGFkaW5nIiwiVG9wIiwiVG9wSGF0VHJhbnNmb3JtIiwiVG9Qb2xhckNvb3JkaW5hdGVzIiwiVG9wb2xvZ2ljYWxTb3J0IiwiVG9SYWRpY2FscyIsIlRvUnVsZXMiLCJUb1NwaGVyaWNhbENvb3JkaW5hdGVzIiwiVG9TdHJpbmciLCJUb3RhbCIsIlRvdGFsSGVpZ2h0IiwiVG90YWxMYXllciIsIlRvdGFsVmFyaWF0aW9uRmlsdGVyIiwiVG90YWxXaWR0aCIsIlRvdWNoUG9zaXRpb24iLCJUb3VjaHNjcmVlbkF1dG9ab29tIiwiVG91Y2hzY3JlZW5Db250cm9sUGxhY2VtZW50IiwiVG9VcHBlckNhc2UiLCJUciIsIlRyYWNlIiwiVHJhY2VBYm92ZSIsIlRyYWNlQWN0aW9uIiwiVHJhY2VCYWNrd2FyZCIsIlRyYWNlRGVwdGgiLCJUcmFjZURpYWxvZyIsIlRyYWNlRm9yd2FyZCIsIlRyYWNlSW50ZXJuYWwiLCJUcmFjZUxldmVsIiwiVHJhY2VPZmYiLCJUcmFjZU9uIiwiVHJhY2VPcmlnaW5hbCIsIlRyYWNlUHJpbnQiLCJUcmFjZVNjYW4iLCJUcmFja2VkU3ltYm9scyIsIlRyYWNraW5nRnVuY3Rpb24iLCJUcmFjeVdpZG9tRGlzdHJpYnV0aW9uIiwiVHJhZGluZ0NoYXJ0IiwiVHJhZGl0aW9uYWxGb3JtIiwiVHJhZGl0aW9uYWxGdW5jdGlvbk5vdGF0aW9uIiwiVHJhZGl0aW9uYWxOb3RhdGlvbiIsIlRyYWRpdGlvbmFsT3JkZXIiLCJUcmFpbmluZ1Byb2dyZXNzQ2hlY2twb2ludGluZyIsIlRyYWluaW5nUHJvZ3Jlc3NGdW5jdGlvbiIsIlRyYWluaW5nUHJvZ3Jlc3NNZWFzdXJlbWVudHMiLCJUcmFpbmluZ1Byb2dyZXNzUmVwb3J0aW5nIiwiVHJhaW5pbmdTdG9wcGluZ0NyaXRlcmlvbiIsIlRyYWluaW5nVXBkYXRlU2NoZWR1bGUiLCJUcmFuc2ZlckZ1bmN0aW9uQ2FuY2VsIiwiVHJhbnNmZXJGdW5jdGlvbkV4cGFuZCIsIlRyYW5zZmVyRnVuY3Rpb25GYWN0b3IiLCJUcmFuc2ZlckZ1bmN0aW9uTW9kZWwiLCJUcmFuc2ZlckZ1bmN0aW9uUG9sZXMiLCJUcmFuc2ZlckZ1bmN0aW9uVHJhbnNmb3JtIiwiVHJhbnNmZXJGdW5jdGlvblplcm9zIiwiVHJhbnNmb3JtYXRpb25DbGFzcyIsIlRyYW5zZm9ybWF0aW9uRnVuY3Rpb24iLCJUcmFuc2Zvcm1hdGlvbkZ1bmN0aW9ucyIsIlRyYW5zZm9ybWF0aW9uTWF0cml4IiwiVHJhbnNmb3JtZWREaXN0cmlidXRpb24iLCJUcmFuc2Zvcm1lZEZpZWxkIiwiVHJhbnNmb3JtZWRQcm9jZXNzIiwiVHJhbnNmb3JtZWRSZWdpb24iLCJUcmFuc2l0aW9uRGlyZWN0aW9uIiwiVHJhbnNpdGlvbkR1cmF0aW9uIiwiVHJhbnNpdGlvbkVmZmVjdCIsIlRyYW5zaXRpdmVDbG9zdXJlR3JhcGgiLCJUcmFuc2l0aXZlUmVkdWN0aW9uR3JhcGgiLCJUcmFuc2xhdGUiLCJUcmFuc2xhdGlvbk9wdGlvbnMiLCJUcmFuc2xhdGlvblRyYW5zZm9ybSIsIlRyYW5zbGl0ZXJhdGUiLCJUcmFuc3BhcmVudCIsIlRyYW5zcGFyZW50Q29sb3IiLCJUcmFuc3Bvc2UiLCJUcmFuc3Bvc2VMYXllciIsIlRyYXBTZWxlY3Rpb24iLCJUcmF2ZWxEaXJlY3Rpb25zIiwiVHJhdmVsRGlyZWN0aW9uc0RhdGEiLCJUcmF2ZWxEaXN0YW5jZSIsIlRyYXZlbERpc3RhbmNlTGlzdCIsIlRyYXZlbE1ldGhvZCIsIlRyYXZlbFRpbWUiLCJUcmVlRm9ybSIsIlRyZWVHcmFwaCIsIlRyZWVHcmFwaFEiLCJUcmVlUGxvdCIsIlRyZW5kU3R5bGUiLCJUcmlhbmdsZSIsIlRyaWFuZ2xlQ2VudGVyIiwiVHJpYW5nbGVDb25zdHJ1Y3QiLCJUcmlhbmdsZU1lYXN1cmVtZW50IiwiVHJpYW5nbGVXYXZlIiwiVHJpYW5ndWxhckRpc3RyaWJ1dGlvbiIsIlRyaWFuZ3VsYXRlTWVzaCIsIlRyaWciLCJUcmlnRXhwYW5kIiwiVHJpZ0ZhY3RvciIsIlRyaWdGYWN0b3JMaXN0IiwiVHJpZ2dlciIsIlRyaWdSZWR1Y2UiLCJUcmlnVG9FeHAiLCJUcmltbWVkTWVhbiIsIlRyaW1tZWRWYXJpYW5jZSIsIlRyb3BpY2FsU3Rvcm1EYXRhIiwiVHJ1ZSIsIlRydWVRIiwiVHJ1bmNhdGVkRGlzdHJpYnV0aW9uIiwiVHJ1bmNhdGVkUG9seWhlZHJvbiIsIlRzYWxsaXNRRXhwb25lbnRpYWxEaXN0cmlidXRpb24iLCJUc2FsbGlzUUdhdXNzaWFuRGlzdHJpYnV0aW9uIiwiVFRlc3QiLCJUdWJlIiwiVHViZUJlemllckN1cnZlQm94IiwiVHViZUJlemllckN1cnZlQm94T3B0aW9ucyIsIlR1YmVCb3giLCJUdWJlQm94T3B0aW9ucyIsIlR1YmVCU3BsaW5lQ3VydmVCb3giLCJUdWJlQlNwbGluZUN1cnZlQm94T3B0aW9ucyIsIlR1ZXNkYXkiLCJUdWtleUxhbWJkYURpc3RyaWJ1dGlvbiIsIlR1a2V5V2luZG93IiwiVHVubmVsRGF0YSIsIlR1cGxlcyIsIlR1cmFuR3JhcGgiLCJUdXJpbmdNYWNoaW5lIiwiVHV0dGVQb2x5bm9taWFsIiwiVHdvV2F5UnVsZSIsIlR5cGVkIiwiVHlwZVNwZWNpZmllciIsIlVuYXRlUSIsIlVuY29tcHJlc3MiLCJVbmNvbnN0cmFpbmVkUGFyYW1ldGVycyIsIlVuZGVmaW5lZCIsIlVuZGVyQmFyIiwiVW5kZXJmbG93IiwiVW5kZXJsaW5lZCIsIlVuZGVyb3ZlcnNjcmlwdCIsIlVuZGVyb3ZlcnNjcmlwdEJveCIsIlVuZGVyb3ZlcnNjcmlwdEJveE9wdGlvbnMiLCJVbmRlcnNjcmlwdCIsIlVuZGVyc2NyaXB0Qm94IiwiVW5kZXJzY3JpcHRCb3hPcHRpb25zIiwiVW5kZXJzZWFGZWF0dXJlRGF0YSIsIlVuZGlyZWN0ZWRFZGdlIiwiVW5kaXJlY3RlZEdyYXBoIiwiVW5kaXJlY3RlZEdyYXBoUSIsIlVuZG9PcHRpb25zIiwiVW5kb1RyYWNrZWRWYXJpYWJsZXMiLCJVbmVxdWFsIiwiVW5lcXVhbFRvIiwiVW5ldmFsdWF0ZWQiLCJVbmlmb3JtRGlzdHJpYnV0aW9uIiwiVW5pZm9ybUdyYXBoRGlzdHJpYnV0aW9uIiwiVW5pZm9ybVBvbHloZWRyb24iLCJVbmlmb3JtU3VtRGlzdHJpYnV0aW9uIiwiVW5pbnN0YWxsIiwiVW5pb24iLCJVbmlvbmVkRW50aXR5Q2xhc3MiLCJVbmlvblBsdXMiLCJVbmlxdWUiLCJVbml0YXJ5TWF0cml4USIsIlVuaXRCb3giLCJVbml0Q29udmVydCIsIlVuaXREaW1lbnNpb25zIiwiVW5pdGl6ZSIsIlVuaXRSb290VGVzdCIsIlVuaXRTaW1wbGlmeSIsIlVuaXRTdGVwIiwiVW5pdFN5c3RlbSIsIlVuaXRUcmlhbmdsZSIsIlVuaXRWZWN0b3IiLCJVbml0VmVjdG9yTGF5ZXIiLCJVbml0eURpbWVuc2lvbnMiLCJVbml2ZXJzZU1vZGVsRGF0YSIsIlVuaXZlcnNpdHlEYXRhIiwiVW5peFRpbWUiLCJVbnByb3RlY3QiLCJVbnJlZ2lzdGVyRXh0ZXJuYWxFdmFsdWF0b3IiLCJVbnNhbWVRIiwiVW5zYXZlZFZhcmlhYmxlcyIsIlVuc2V0IiwiVW5zZXRTaGFyZWQiLCJVbnRyYWNrZWRWYXJpYWJsZXMiLCJVcCIsIlVwQXJyb3ciLCJVcEFycm93QmFyIiwiVXBBcnJvd0Rvd25BcnJvdyIsIlVwZGF0ZSIsIlVwZGF0ZUR5bmFtaWNPYmplY3RzIiwiVXBkYXRlRHluYW1pY09iamVjdHNTeW5jaHJvbm91cyIsIlVwZGF0ZUludGVydmFsIiwiVXBkYXRlUGFjbGV0U2l0ZXMiLCJVcGRhdGVTZWFyY2hJbmRleCIsIlVwRG93bkFycm93IiwiVXBFcXVpbGlicml1bSIsIlVwcGVyQ2FzZVEiLCJVcHBlckxlZnRBcnJvdyIsIlVwcGVyUmlnaHRBcnJvdyIsIlVwcGVyVHJpYW5ndWxhcml6ZSIsIlVwcGVyVHJpYW5ndWxhck1hdHJpeFEiLCJVcHNhbXBsZSIsIlVwU2V0IiwiVXBTZXREZWxheWVkIiwiVXBUZWUiLCJVcFRlZUFycm93IiwiVXBUbyIsIlVwVmFsdWVzIiwiVVJMIiwiVVJMQnVpbGQiLCJVUkxEZWNvZGUiLCJVUkxEaXNwYXRjaGVyIiwiVVJMRG93bmxvYWQiLCJVUkxEb3dubG9hZFN1Ym1pdCIsIlVSTEVuY29kZSIsIlVSTEV4ZWN1dGUiLCJVUkxFeHBhbmQiLCJVUkxGZXRjaCIsIlVSTEZldGNoQXN5bmNocm9ub3VzIiwiVVJMUGFyc2UiLCJVUkxRdWVyeURlY29kZSIsIlVSTFF1ZXJ5RW5jb2RlIiwiVVJMUmVhZCIsIlVSTFJlc3BvbnNlVGltZSIsIlVSTFNhdmUiLCJVUkxTYXZlQXN5bmNocm9ub3VzIiwiVVJMU2hvcnRlbiIsIlVSTFN1Ym1pdCIsIlVzZUdyYXBoaWNzUmFuZ2UiLCJVc2VyRGVmaW5lZFdhdmVsZXQiLCJVc2luZyIsIlVzaW5nRnJvbnRFbmQiLCJVdGlsaXR5RnVuY3Rpb24iLCJWMkdldCIsIlZhbGVuY2VFcnJvckhhbmRsaW5nIiwiVmFsaWRhdGlvbkxlbmd0aCIsIlZhbGlkYXRpb25TZXQiLCJWYWx1ZSIsIlZhbHVlQm94IiwiVmFsdWVCb3hPcHRpb25zIiwiVmFsdWVEaW1lbnNpb25zIiwiVmFsdWVGb3JtIiwiVmFsdWVQcmVwcm9jZXNzaW5nRnVuY3Rpb24iLCJWYWx1ZVEiLCJWYWx1ZXMiLCJWYWx1ZXNEYXRhIiwiVmFyaWFibGVzIiwiVmFyaWFuY2UiLCJWYXJpYW5jZUVxdWl2YWxlbmNlVGVzdCIsIlZhcmlhbmNlRXN0aW1hdG9yRnVuY3Rpb24iLCJWYXJpYW5jZUdhbW1hRGlzdHJpYnV0aW9uIiwiVmFyaWFuY2VUZXN0IiwiVmVjdG9yQW5nbGUiLCJWZWN0b3JBcm91bmQiLCJWZWN0b3JBc3BlY3RSYXRpbyIsIlZlY3RvckNvbG9yRnVuY3Rpb24iLCJWZWN0b3JDb2xvckZ1bmN0aW9uU2NhbGluZyIsIlZlY3RvckRlbnNpdHlQbG90IiwiVmVjdG9yR2x5cGhEYXRhIiwiVmVjdG9yR3JlYXRlciIsIlZlY3RvckdyZWF0ZXJFcXVhbCIsIlZlY3Rvckxlc3MiLCJWZWN0b3JMZXNzRXF1YWwiLCJWZWN0b3JNYXJrZXJzIiwiVmVjdG9yUGxvdCIsIlZlY3RvclBsb3QzRCIsIlZlY3RvclBvaW50cyIsIlZlY3RvclEiLCJWZWN0b3JSYW5nZSIsIlZlY3RvcnMiLCJWZWN0b3JTY2FsZSIsIlZlY3RvclNjYWxpbmciLCJWZWN0b3JTaXplcyIsIlZlY3RvclN0eWxlIiwiVmVlIiwiVmVyYmF0aW0iLCJWZXJib3NlIiwiVmVyYm9zZUNvbnZlcnRUb1Bvc3RTY3JpcHRQYWNrZXQiLCJWZXJpZmljYXRpb25UZXN0IiwiVmVyaWZ5Q29udmVyZ2VuY2UiLCJWZXJpZnlEZXJpdmVkS2V5IiwiVmVyaWZ5RGlnaXRhbFNpZ25hdHVyZSIsIlZlcmlmeUZpbGVTaWduYXR1cmUiLCJWZXJpZnlJbnRlcnByZXRhdGlvbiIsIlZlcmlmeVNlY3VyaXR5Q2VydGlmaWNhdGVzIiwiVmVyaWZ5U29sdXRpb25zIiwiVmVyaWZ5VGVzdEFzc3VtcHRpb25zIiwiVmVyc2lvbiIsIlZlcnNpb25lZFByZWZlcmVuY2VzIiwiVmVyc2lvbk51bWJlciIsIlZlcnRleEFkZCIsIlZlcnRleENhcGFjaXR5IiwiVmVydGV4Q29sb3JzIiwiVmVydGV4Q29tcG9uZW50IiwiVmVydGV4Q29ubmVjdGl2aXR5IiwiVmVydGV4Q29udHJhY3QiLCJWZXJ0ZXhDb29yZGluYXRlUnVsZXMiLCJWZXJ0ZXhDb29yZGluYXRlcyIsIlZlcnRleENvcnJlbGF0aW9uU2ltaWxhcml0eSIsIlZlcnRleENvc2luZVNpbWlsYXJpdHkiLCJWZXJ0ZXhDb3VudCIsIlZlcnRleENvdmVyUSIsIlZlcnRleERhdGFDb29yZGluYXRlcyIsIlZlcnRleERlZ3JlZSIsIlZlcnRleERlbGV0ZSIsIlZlcnRleERpY2VTaW1pbGFyaXR5IiwiVmVydGV4RWNjZW50cmljaXR5IiwiVmVydGV4SW5Db21wb25lbnQiLCJWZXJ0ZXhJbkRlZ3JlZSIsIlZlcnRleEluZGV4IiwiVmVydGV4SmFjY2FyZFNpbWlsYXJpdHkiLCJWZXJ0ZXhMYWJlbGluZyIsIlZlcnRleExhYmVscyIsIlZlcnRleExhYmVsU3R5bGUiLCJWZXJ0ZXhMaXN0IiwiVmVydGV4Tm9ybWFscyIsIlZlcnRleE91dENvbXBvbmVudCIsIlZlcnRleE91dERlZ3JlZSIsIlZlcnRleFEiLCJWZXJ0ZXhSZW5kZXJpbmdGdW5jdGlvbiIsIlZlcnRleFJlcGxhY2UiLCJWZXJ0ZXhTaGFwZSIsIlZlcnRleFNoYXBlRnVuY3Rpb24iLCJWZXJ0ZXhTaXplIiwiVmVydGV4U3R5bGUiLCJWZXJ0ZXhUZXh0dXJlQ29vcmRpbmF0ZXMiLCJWZXJ0ZXhXZWlnaHQiLCJWZXJ0ZXhXZWlnaHRlZEdyYXBoUSIsIlZlcnRpY2FsIiwiVmVydGljYWxCYXIiLCJWZXJ0aWNhbEZvcm0iLCJWZXJ0aWNhbEdhdWdlIiwiVmVydGljYWxTZXBhcmF0b3IiLCJWZXJ0aWNhbFNsaWRlciIsIlZlcnRpY2FsVGlsZGUiLCJWaWRlbyIsIlZpZGVvRW5jb2RpbmciLCJWaWRlb0V4dHJhY3RGcmFtZXMiLCJWaWRlb0ZyYW1lTGlzdCIsIlZpZGVvRnJhbWVNYXAiLCJWaWRlb1BhdXNlIiwiVmlkZW9QbGF5IiwiVmlkZW9RIiwiVmlkZW9TdG9wIiwiVmlkZW9TdHJlYW0iLCJWaWRlb1N0cmVhbXMiLCJWaWRlb1RpbWVTZXJpZXMiLCJWaWRlb1RyYWNrcyIsIlZpZGVvVHJpbSIsIlZpZXdBbmdsZSIsIlZpZXdDZW50ZXIiLCJWaWV3TWF0cml4IiwiVmlld1BvaW50IiwiVmlld1BvaW50U2VsZWN0b3JTZXR0aW5ncyIsIlZpZXdQb3J0IiwiVmlld1Byb2plY3Rpb24iLCJWaWV3UmFuZ2UiLCJWaWV3VmVjdG9yIiwiVmlld1ZlcnRpY2FsIiwiVmlydHVhbEdyb3VwRGF0YSIsIlZpc2libGUiLCJWaXNpYmxlQ2VsbCIsIlZvaWNlU3R5bGVEYXRhIiwiVm9pZ3REaXN0cmlidXRpb24iLCJWb2xjYW5vRGF0YSIsIlZvbHVtZSIsIlZvbk1pc2VzRGlzdHJpYnV0aW9uIiwiVm9yb25vaU1lc2giLCJXYWl0QWxsIiwiV2FpdEFzeW5jaHJvbm91c1Rhc2siLCJXYWl0TmV4dCIsIldhaXRVbnRpbCIsIldha2VieURpc3RyaWJ1dGlvbiIsIldhbGxlbml1c0h5cGVyZ2VvbWV0cmljRGlzdHJpYnV0aW9uIiwiV2FyaW5nWXVsZURpc3RyaWJ1dGlvbiIsIldhcnBpbmdDb3JyZXNwb25kZW5jZSIsIldhcnBpbmdEaXN0YW5jZSIsIldhdGVyc2hlZENvbXBvbmVudHMiLCJXYXRzb25VU3F1YXJlVGVzdCIsIldhdHRzU3Ryb2dhdHpHcmFwaERpc3RyaWJ1dGlvbiIsIldhdmVsZXRCZXN0QmFzaXMiLCJXYXZlbGV0RmlsdGVyQ29lZmZpY2llbnRzIiwiV2F2ZWxldEltYWdlUGxvdCIsIldhdmVsZXRMaXN0UGxvdCIsIldhdmVsZXRNYXBJbmRleGVkIiwiV2F2ZWxldE1hdHJpeFBsb3QiLCJXYXZlbGV0UGhpIiwiV2F2ZWxldFBzaSIsIldhdmVsZXRTY2FsZSIsIldhdmVsZXRTY2Fsb2dyYW0iLCJXYXZlbGV0VGhyZXNob2xkIiwiV2Vha2x5Q29ubmVjdGVkQ29tcG9uZW50cyIsIldlYWtseUNvbm5lY3RlZEdyYXBoQ29tcG9uZW50cyIsIldlYWtseUNvbm5lY3RlZEdyYXBoUSIsIldlYWtTdGF0aW9uYXJpdHkiLCJXZWF0aGVyRGF0YSIsIldlYXRoZXJGb3JlY2FzdERhdGEiLCJXZWJBdWRpb1NlYXJjaCIsIldlYkVsZW1lbnRPYmplY3QiLCJXZWJlckUiLCJXZWJFeGVjdXRlIiwiV2ViSW1hZ2UiLCJXZWJJbWFnZVNlYXJjaCIsIldlYlNlYXJjaCIsIldlYlNlc3Npb25PYmplY3QiLCJXZWJTZXNzaW9ucyIsIldlYldpbmRvd09iamVjdCIsIldlZGdlIiwiV2VkbmVzZGF5IiwiV2VpYnVsbERpc3RyaWJ1dGlvbiIsIldlaWVyc3RyYXNzRTEiLCJXZWllcnN0cmFzc0UyIiwiV2VpZXJzdHJhc3NFMyIsIldlaWVyc3RyYXNzRXRhMSIsIldlaWVyc3RyYXNzRXRhMiIsIldlaWVyc3RyYXNzRXRhMyIsIldlaWVyc3RyYXNzSGFsZlBlcmlvZHMiLCJXZWllcnN0cmFzc0hhbGZQZXJpb2RXMSIsIldlaWVyc3RyYXNzSGFsZlBlcmlvZFcyIiwiV2VpZXJzdHJhc3NIYWxmUGVyaW9kVzMiLCJXZWllcnN0cmFzc0ludmFyaWFudEcyIiwiV2VpZXJzdHJhc3NJbnZhcmlhbnRHMyIsIldlaWVyc3RyYXNzSW52YXJpYW50cyIsIldlaWVyc3RyYXNzUCIsIldlaWVyc3RyYXNzUFByaW1lIiwiV2VpZXJzdHJhc3NTaWdtYSIsIldlaWVyc3RyYXNzWmV0YSIsIldlaWdodGVkQWRqYWNlbmN5R3JhcGgiLCJXZWlnaHRlZEFkamFjZW5jeU1hdHJpeCIsIldlaWdodGVkRGF0YSIsIldlaWdodGVkR3JhcGhRIiwiV2VpZ2h0cyIsIldlbGNoV2luZG93IiwiV2hlZWxHcmFwaCIsIldoZW5FdmVudCIsIldoaWNoIiwiV2hpbGUiLCJXaGl0ZSIsIldoaXRlTm9pc2VQcm9jZXNzIiwiV2hpdGVQb2ludCIsIldoaXRlc3BhY2UiLCJXaGl0ZXNwYWNlQ2hhcmFjdGVyIiwiV2hpdHRha2VyTSIsIldoaXR0YWtlclciLCJXaWVuZXJGaWx0ZXIiLCJXaWVuZXJQcm9jZXNzIiwiV2lnbmVyRCIsIldpZ25lclNlbWljaXJjbGVEaXN0cmlidXRpb24iLCJXaWtpZGF0YURhdGEiLCJXaWtpZGF0YVNlYXJjaCIsIldpa2lwZWRpYURhdGEiLCJXaWtpcGVkaWFTZWFyY2giLCJXaWxrc1ciLCJXaWxrc1dUZXN0IiwiV2luZERpcmVjdGlvbkRhdGEiLCJXaW5kaW5nQ291bnQiLCJXaW5kaW5nUG9seWdvbiIsIldpbmRvd0NsaWNrU2VsZWN0IiwiV2luZG93RWxlbWVudHMiLCJXaW5kb3dGbG9hdGluZyIsIldpbmRvd0ZyYW1lIiwiV2luZG93RnJhbWVFbGVtZW50cyIsIldpbmRvd01hcmdpbnMiLCJXaW5kb3dNb3ZhYmxlIiwiV2luZG93T3BhY2l0eSIsIldpbmRvd1BlcnNpc3RlbnRTdHlsZXMiLCJXaW5kb3dTZWxlY3RlZCIsIldpbmRvd1NpemUiLCJXaW5kb3dTdGF0dXNBcmVhIiwiV2luZG93VGl0bGUiLCJXaW5kb3dUb29sYmFycyIsIldpbmRvd1dpZHRoIiwiV2luZFNwZWVkRGF0YSIsIldpbmRWZWN0b3JEYXRhIiwiV2luc29yaXplZE1lYW4iLCJXaW5zb3JpemVkVmFyaWFuY2UiLCJXaXNoYXJ0TWF0cml4RGlzdHJpYnV0aW9uIiwiV2l0aCIsIldvbGZyYW1BbHBoYSIsIldvbGZyYW1BbHBoYURhdGUiLCJXb2xmcmFtQWxwaGFRdWFudGl0eSIsIldvbGZyYW1BbHBoYVJlc3VsdCIsIldvbGZyYW1MYW5ndWFnZURhdGEiLCJXb3JkIiwiV29yZEJvdW5kYXJ5IiwiV29yZENoYXJhY3RlciIsIldvcmRDbG91ZCIsIldvcmRDb3VudCIsIldvcmRDb3VudHMiLCJXb3JkRGF0YSIsIldvcmREZWZpbml0aW9uIiwiV29yZEZyZXF1ZW5jeSIsIldvcmRGcmVxdWVuY3lEYXRhIiwiV29yZExpc3QiLCJXb3JkT3JpZW50YXRpb24iLCJXb3JkU2VhcmNoIiwiV29yZFNlbGVjdGlvbkZ1bmN0aW9uIiwiV29yZFNlcGFyYXRvcnMiLCJXb3JkU3BhY2luZ3MiLCJXb3JkU3RlbSIsIldvcmRUcmFuc2xhdGlvbiIsIldvcmtpbmdQcmVjaXNpb24iLCJXcmFwQXJvdW5kIiwiV3JpdGUiLCJXcml0ZUxpbmUiLCJXcml0ZVN0cmluZyIsIldyb25za2lhbiIsIlhNTEVsZW1lbnQiLCJYTUxPYmplY3QiLCJYTUxUZW1wbGF0ZSIsIlhub3IiLCJYb3IiLCJYWVpDb2xvciIsIlllbGxvdyIsIlllc3RlcmRheSIsIll1bGVEaXNzaW1pbGFyaXR5IiwiWmVybmlrZVIiLCJaZXJvU3ltbWV0cmljIiwiWmVyb1Rlc3QiLCJaZXJvV2lkdGhUaW1lcyIsIlpldGEiLCJaZXRhWmVybyIsIlpJUENvZGVEYXRhIiwiWmlwZkRpc3RyaWJ1dGlvbiIsIlpvb21DZW50ZXIiLCJab29tRmFjdG9yIiwiWlRlc3QiLCJaVHJhbnNmb3JtIiwiJEFib3J0ZWQiLCIkQWN0aXZhdGlvbkdyb3VwSUQiLCIkQWN0aXZhdGlvbktleSIsIiRBY3RpdmF0aW9uVXNlclJlZ2lzdGVyZWQiLCIkQWRkT25zRGlyZWN0b3J5IiwiJEFsbG93RGF0YVVwZGF0ZXMiLCIkQWxsb3dFeHRlcm5hbENoYW5uZWxGdW5jdGlvbnMiLCIkQWxsb3dJbnRlcm5ldCIsIiRBc3NlcnRGdW5jdGlvbiIsIiRBc3N1bXB0aW9ucyIsIiRBc3luY2hyb25vdXNUYXNrIiwiJEF1ZGlvRGVjb2RlcnMiLCIkQXVkaW9FbmNvZGVycyIsIiRBdWRpb0lucHV0RGV2aWNlcyIsIiRBdWRpb091dHB1dERldmljZXMiLCIkQmFzZURpcmVjdG9yeSIsIiRCYXNlUGFjbGV0c0RpcmVjdG9yeSIsIiRCYXRjaElucHV0IiwiJEJhdGNoT3V0cHV0IiwiJEJsb2NrY2hhaW5CYXNlIiwiJEJveEZvcm1zIiwiJEJ5dGVPcmRlcmluZyIsIiRDYWNoZUJhc2VEaXJlY3RvcnkiLCIkQ2FuY2VsZWQiLCIkQ2hhbm5lbEJhc2UiLCIkQ2hhcmFjdGVyRW5jb2RpbmciLCIkQ2hhcmFjdGVyRW5jb2RpbmdzIiwiJENsb3VkQWNjb3VudE5hbWUiLCIkQ2xvdWRCYXNlIiwiJENsb3VkQ29ubmVjdGVkIiwiJENsb3VkQ29ubmVjdGlvbiIsIiRDbG91ZENyZWRpdHNBdmFpbGFibGUiLCIkQ2xvdWRFdmFsdWF0aW9uIiwiJENsb3VkRXhwcmVzc2lvbkJhc2UiLCIkQ2xvdWRPYmplY3ROYW1lRm9ybWF0IiwiJENsb3VkT2JqZWN0VVJMVHlwZSIsIiRDbG91ZFJvb3REaXJlY3RvcnkiLCIkQ2xvdWRTeW1ib2xCYXNlIiwiJENsb3VkVXNlcklEIiwiJENsb3VkVXNlclVVSUQiLCIkQ2xvdWRWZXJzaW9uIiwiJENsb3VkVmVyc2lvbk51bWJlciIsIiRDbG91ZFdvbGZyYW1FbmdpbmVWZXJzaW9uTnVtYmVyIiwiJENvbW1hbmRMaW5lIiwiJENvbXBpbGF0aW9uVGFyZ2V0IiwiJENvbmRpdGlvbkhvbGQiLCIkQ29uZmlndXJlZEtlcm5lbHMiLCIkQ29udGV4dCIsIiRDb250ZXh0UGF0aCIsIiRDb250cm9sQWN0aXZlU2V0dGluZyIsIiRDb29raWVzIiwiJENvb2tpZVN0b3JlIiwiJENyZWF0aW9uRGF0ZSIsIiRDdXJyZW50TGluayIsIiRDdXJyZW50VGFzayIsIiRDdXJyZW50V2ViU2Vzc2lvbiIsIiREYXRhU3RydWN0dXJlcyIsIiREYXRlU3RyaW5nRm9ybWF0IiwiJERlZmF1bHRBdWRpb0lucHV0RGV2aWNlIiwiJERlZmF1bHRBdWRpb091dHB1dERldmljZSIsIiREZWZhdWx0Rm9udCIsIiREZWZhdWx0RnJvbnRFbmQiLCIkRGVmYXVsdEltYWdpbmdEZXZpY2UiLCIkRGVmYXVsdExvY2FsQmFzZSIsIiREZWZhdWx0TWFpbGJveCIsIiREZWZhdWx0TmV0d29ya0ludGVyZmFjZSIsIiREZWZhdWx0UGF0aCIsIiREZWZhdWx0UHJveHlSdWxlcyIsIiREZWZhdWx0U3lzdGVtQ3JlZGVudGlhbFN0b3JlIiwiJERpc3BsYXkiLCIkRGlzcGxheUZ1bmN0aW9uIiwiJERpc3RyaWJ1dGVkQ29udGV4dHMiLCIkRHluYW1pY0V2YWx1YXRpb24iLCIkRWNobyIsIiRFbWJlZENvZGVFbnZpcm9ubWVudHMiLCIkRW1iZWRkYWJsZVNlcnZpY2VzIiwiJEVudGl0eVN0b3JlcyIsIiRFcGlsb2ciLCIkRXZhbHVhdGlvbkNsb3VkQmFzZSIsIiRFdmFsdWF0aW9uQ2xvdWRPYmplY3QiLCIkRXZhbHVhdGlvbkVudmlyb25tZW50IiwiJEV4cG9ydEZvcm1hdHMiLCIkRXh0ZXJuYWxJZGVudGlmaWVyVHlwZXMiLCIkRXh0ZXJuYWxTdG9yYWdlQmFzZSIsIiRGYWlsZWQiLCIkRmluYW5jaWFsRGF0YVNvdXJjZSIsIiRGb250RmFtaWxpZXMiLCIkRm9ybWF0VHlwZSIsIiRGcm9udEVuZCIsIiRGcm9udEVuZFNlc3Npb24iLCIkR2VvRW50aXR5VHlwZXMiLCIkR2VvTG9jYXRpb24iLCIkR2VvTG9jYXRpb25DaXR5IiwiJEdlb0xvY2F0aW9uQ291bnRyeSIsIiRHZW9Mb2NhdGlvblByZWNpc2lvbiIsIiRHZW9Mb2NhdGlvblNvdXJjZSIsIiRIaXN0b3J5TGVuZ3RoIiwiJEhvbWVEaXJlY3RvcnkiLCIkSFRNTEV4cG9ydFJ1bGVzIiwiJEhUVFBDb29raWVzIiwiJEhUVFBSZXF1ZXN0IiwiJElnbm9yZUVPRiIsIiRJbWFnZUZvcm1hdHRpbmdXaWR0aCIsIiRJbWFnZVJlc29sdXRpb24iLCIkSW1hZ2luZ0RldmljZSIsIiRJbWFnaW5nRGV2aWNlcyIsIiRJbXBvcnRGb3JtYXRzIiwiJEluY29taW5nTWFpbFNldHRpbmdzIiwiJEluaXRpYWxEaXJlY3RvcnkiLCIkSW5pdGlhbGl6YXRpb24iLCIkSW5pdGlhbGl6YXRpb25Db250ZXh0cyIsIiRJbnB1dCIsIiRJbnB1dEZpbGVOYW1lIiwiJElucHV0U3RyZWFtTWV0aG9kcyIsIiRJbnNwZWN0b3IiLCIkSW5zdGFsbGF0aW9uRGF0ZSIsIiRJbnN0YWxsYXRpb25EaXJlY3RvcnkiLCIkSW50ZXJmYWNlRW52aXJvbm1lbnQiLCIkSW50ZXJwcmV0ZXJUeXBlcyIsIiRJdGVyYXRpb25MaW1pdCIsIiRLZXJuZWxDb3VudCIsIiRLZXJuZWxJRCIsIiRMYW5ndWFnZSIsIiRMYXVuY2hEaXJlY3RvcnkiLCIkTGlicmFyeVBhdGgiLCIkTGljZW5zZUV4cGlyYXRpb25EYXRlIiwiJExpY2Vuc2VJRCIsIiRMaWNlbnNlUHJvY2Vzc2VzIiwiJExpY2Vuc2VTZXJ2ZXIiLCIkTGljZW5zZVN1YnByb2Nlc3NlcyIsIiRMaWNlbnNlVHlwZSIsIiRMaW5lIiwiJExpbmtlZCIsIiRMaW5rU3VwcG9ydGVkIiwiJExvYWRlZEZpbGVzIiwiJExvY2FsQmFzZSIsIiRMb2NhbFN5bWJvbEJhc2UiLCIkTWFjaGluZUFkZHJlc3NlcyIsIiRNYWNoaW5lRG9tYWluIiwiJE1hY2hpbmVEb21haW5zIiwiJE1hY2hpbmVFcHNpbG9uIiwiJE1hY2hpbmVJRCIsIiRNYWNoaW5lTmFtZSIsIiRNYWNoaW5lUHJlY2lzaW9uIiwiJE1hY2hpbmVUeXBlIiwiJE1heEV4dHJhUHJlY2lzaW9uIiwiJE1heExpY2Vuc2VQcm9jZXNzZXMiLCIkTWF4TGljZW5zZVN1YnByb2Nlc3NlcyIsIiRNYXhNYWNoaW5lTnVtYmVyIiwiJE1heE51bWJlciIsIiRNYXhQaWVjZXdpc2VDYXNlcyIsIiRNYXhQcmVjaXNpb24iLCIkTWF4Um9vdERlZ3JlZSIsIiRNZXNzYWdlR3JvdXBzIiwiJE1lc3NhZ2VMaXN0IiwiJE1lc3NhZ2VQcmVQcmludCIsIiRNZXNzYWdlcyIsIiRNaW5NYWNoaW5lTnVtYmVyIiwiJE1pbk51bWJlciIsIiRNaW5vclJlbGVhc2VOdW1iZXIiLCIkTWluUHJlY2lzaW9uIiwiJE1vYmlsZVBob25lIiwiJE1vZHVsZU51bWJlciIsIiROZXR3b3JrQ29ubmVjdGVkIiwiJE5ldHdvcmtJbnRlcmZhY2VzIiwiJE5ldHdvcmtMaWNlbnNlIiwiJE5ld01lc3NhZ2UiLCIkTmV3U3ltYm9sIiwiJE5vdGVib29rSW5saW5lU3RvcmFnZUxpbWl0IiwiJE5vdGVib29rcyIsIiROb1ZhbHVlIiwiJE51bWJlck1hcmtzIiwiJE9mZiIsIiRPcGVyYXRpbmdTeXN0ZW0iLCIkT3V0cHV0IiwiJE91dHB1dEZvcm1zIiwiJE91dHB1dFNpemVMaW1pdCIsIiRPdXRwdXRTdHJlYW1NZXRob2RzIiwiJFBhY2thZ2VzIiwiJFBhcmVudExpbmsiLCIkUGFyZW50UHJvY2Vzc0lEIiwiJFBhc3N3b3JkRmlsZSIsIiRQYXRjaExldmVsSUQiLCIkUGF0aCIsIiRQYXRobmFtZVNlcGFyYXRvciIsIiRQZXJmb3JtYW5jZUdvYWwiLCIkUGVybWlzc2lvbnMiLCIkUGVybWlzc2lvbnNHcm91cEJhc2UiLCIkUGVyc2lzdGVuY2VCYXNlIiwiJFBlcnNpc3RlbmNlUGF0aCIsIiRQaXBlU3VwcG9ydGVkIiwiJFBsb3RUaGVtZSIsIiRQb3N0IiwiJFByZSIsIiRQcmVmZXJlbmNlc0RpcmVjdG9yeSIsIiRQcmVJbml0aWFsaXphdGlvbiIsIiRQcmVQcmludCIsIiRQcmVSZWFkIiwiJFByaW50Rm9ybXMiLCIkUHJpbnRMaXRlcmFsIiwiJFByaW50b3V0M0RQcmV2aWV3ZXIiLCIkUHJvY2Vzc0lEIiwiJFByb2Nlc3NvckNvdW50IiwiJFByb2Nlc3NvclR5cGUiLCIkUHJvZHVjdEluZm9ybWF0aW9uIiwiJFByb2dyYW1OYW1lIiwiJFB1Ymxpc2hlcklEIiwiJFJhbmRvbVN0YXRlIiwiJFJlY3Vyc2lvbkxpbWl0IiwiJFJlZ2lzdGVyZWREZXZpY2VDbGFzc2VzIiwiJFJlZ2lzdGVyZWRVc2VyTmFtZSIsIiRSZWxlYXNlTnVtYmVyIiwiJFJlcXVlc3RlckFkZHJlc3MiLCIkUmVxdWVzdGVyV29sZnJhbUlEIiwiJFJlcXVlc3RlcldvbGZyYW1VVUlEIiwiJFJvb3REaXJlY3RvcnkiLCIkU2NoZWR1bGVkVGFzayIsIiRTY3JpcHRDb21tYW5kTGluZSIsIiRTY3JpcHRJbnB1dFN0cmluZyIsIiRTZWN1cmVkQXV0aGVudGljYXRpb25LZXlUb2tlbnMiLCIkU2VydmljZUNyZWRpdHNBdmFpbGFibGUiLCIkU2VydmljZXMiLCIkU2Vzc2lvbklEIiwiJFNldFBhcmVudExpbmsiLCIkU2hhcmVkRnVuY3Rpb25zIiwiJFNoYXJlZFZhcmlhYmxlcyIsIiRTb3VuZERpc3BsYXkiLCIkU291bmREaXNwbGF5RnVuY3Rpb24iLCIkU291cmNlTGluayIsIiRTU0hBdXRoZW50aWNhdGlvbiIsIiRTdWJ0aXRsZURlY29kZXJzIiwiJFN1YnRpdGxlRW5jb2RlcnMiLCIkU3VtbWFyeUJveERhdGFTaXplTGltaXQiLCIkU3VwcHJlc3NJbnB1dEZvcm1IZWFkcyIsIiRTeW5jaHJvbm91c0V2YWx1YXRpb24iLCIkU3ludGF4SGFuZGxlciIsIiRTeXN0ZW0iLCIkU3lzdGVtQ2hhcmFjdGVyRW5jb2RpbmciLCIkU3lzdGVtQ3JlZGVudGlhbFN0b3JlIiwiJFN5c3RlbUlEIiwiJFN5c3RlbU1lbW9yeSIsIiRTeXN0ZW1TaGVsbCIsIiRTeXN0ZW1UaW1lWm9uZSIsIiRTeXN0ZW1Xb3JkTGVuZ3RoIiwiJFRlbXBsYXRlUGF0aCIsIiRUZW1wb3JhcnlEaXJlY3RvcnkiLCIkVGVtcG9yYXJ5UHJlZml4IiwiJFRlc3RGaWxlTmFtZSIsIiRUZXh0U3R5bGUiLCIkVGltZWRPdXQiLCIkVGltZVVuaXQiLCIkVGltZVpvbmUiLCIkVGltZVpvbmVFbnRpdHkiLCIkVG9wRGlyZWN0b3J5IiwiJFRyYWNlT2ZmIiwiJFRyYWNlT24iLCIkVHJhY2VQYXR0ZXJuIiwiJFRyYWNlUG9zdEFjdGlvbiIsIiRUcmFjZVByZUFjdGlvbiIsIiRVbml0U3lzdGVtIiwiJFVyZ2VudCIsIiRVc2VyQWRkT25zRGlyZWN0b3J5IiwiJFVzZXJBZ2VudExhbmd1YWdlcyIsIiRVc2VyQWdlbnRNYWNoaW5lIiwiJFVzZXJBZ2VudE5hbWUiLCIkVXNlckFnZW50T3BlcmF0aW5nU3lzdGVtIiwiJFVzZXJBZ2VudFN0cmluZyIsIiRVc2VyQWdlbnRWZXJzaW9uIiwiJFVzZXJCYXNlRGlyZWN0b3J5IiwiJFVzZXJCYXNlUGFjbGV0c0RpcmVjdG9yeSIsIiRVc2VyRG9jdW1lbnRzRGlyZWN0b3J5IiwiJFVzZXJuYW1lIiwiJFVzZXJOYW1lIiwiJFVzZXJVUkxCYXNlIiwiJFZlcnNpb24iLCIkVmVyc2lvbk51bWJlciIsIiRWaWRlb0RlY29kZXJzIiwiJFZpZGVvRW5jb2RlcnMiLCIkVm9pY2VTdHlsZXMiLCIkV29sZnJhbURvY3VtZW50c0RpcmVjdG9yeSIsIiRXb2xmcmFtSUQiLCIkV29sZnJhbVVVSUQiXQo7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/ZTplLnNvdXJjZTpudWxsfWZ1bmN0aW9uIGkoZSl7CnJldHVybiBvKCIoIixlLCIpPyIpfWZ1bmN0aW9uIG8oLi4uZSl7cmV0dXJuIGUubWFwKChlPT50KGUpKSkuam9pbigiIil9CmZ1bmN0aW9uIGEoLi4uZSl7cmV0dXJuIigiK2UubWFwKChlPT50KGUpKSkuam9pbigifCIpKyIpIn1yZXR1cm4gdD0+ewpjb25zdCBuPWEobygvKFsyLTldfFsxLTJdXGR8WzNdWzAtNV0pXF5cXi8sLyhcdypcLlx3K3xcdytcLlx3KnxcdyspLyksLyhcZCpcLlxkK3xcZCtcLlxkKnxcZCspLykscj17CmNsYXNzTmFtZToibnVtYmVyIixyZWxldmFuY2U6MCwKYmVnaW46byhuLGkoYSgvYGBbKy1dPyhcZCpcLlxkK3xcZCtcLlxkKnxcZCspLywvYChbKy1dPyhcZCpcLlxkK3xcZCtcLlxkKnxcZCspKT8vKSksaSgvXCpcXlsrLV0/XGQrLykpCn0sbD0vW2EtekEtWiRdW2EtekEtWjAtOSRdKi8scz1uZXcgU2V0KGUpLGM9e3ZhcmlhbnRzOlt7CmNsYXNzTmFtZToiYnVpbHRpbi1zeW1ib2wiLGJlZ2luOmwsIm9uOmJlZ2luIjooZSx0KT0+ewpzLmhhcyhlWzBdKXx8dC5pZ25vcmVNYXRjaCgpfX0se2NsYXNzTmFtZToic3ltYm9sIixyZWxldmFuY2U6MCxiZWdpbjpsfV19LHU9ewpjbGFzc05hbWU6Im1lc3NhZ2UtbmFtZSIscmVsZXZhbmNlOjAsYmVnaW46bygiOjoiLGwpfTtyZXR1cm57bmFtZToiTWF0aGVtYXRpY2EiLAphbGlhc2VzOlsibW1hIiwid2wiXSxjbGFzc05hbWVBbGlhc2VzOnticmFjZToicHVuY3R1YXRpb24iLHBhdHRlcm46InR5cGUiLApzbG90OiJ0eXBlIixzeW1ib2w6InZhcmlhYmxlIiwibmFtZWQtY2hhcmFjdGVyIjoidmFyaWFibGUiLAoiYnVpbHRpbi1zeW1ib2wiOiJidWlsdF9pbiIsIm1lc3NhZ2UtbmFtZSI6InN0cmluZyJ9LApjb250YWluczpbdC5DT01NRU5UKC9cKFwqLywvXCpcKS8se2NvbnRhaW5zOlsic2VsZiJdfSkse2NsYXNzTmFtZToicGF0dGVybiIsCnJlbGV2YW5jZTowLGJlZ2luOi8oW2EtekEtWiRdW2EtekEtWjAtOSRdKik/XysoW2EtekEtWiRdW2EtekEtWjAtOSRdKik/L30sewpjbGFzc05hbWU6InNsb3QiLHJlbGV2YW5jZTowLGJlZ2luOi8jW2EtekEtWiRdW2EtekEtWjAtOSRdKnwjK1swLTldPy99LHUsYyx7CmNsYXNzTmFtZToibmFtZWQtY2hhcmFjdGVyIixiZWdpbjovXFxcW1skYS16QS1aXVskYS16QS1aMC05XStcXS8KfSx0LlFVT1RFX1NUUklOR19NT0RFLHIse2NsYXNzTmFtZToib3BlcmF0b3IiLHJlbGV2YW5jZTowLApiZWdpbjovWytcLSovLDsuOkB+PT48JnxfYCdePyElXSsvfSx7Y2xhc3NOYW1lOiJicmFjZSIscmVsZXZhbmNlOjAsCmJlZ2luOi9bW1xdKCl7fV0vfV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiY3NzIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKdmFyIG49IlthLXpBLVotXVthLXpBLVowLTlfLV0qIixhPXsKYmVnaW46LyhbKl1ccz8pPyg/OltBLVpfLlwtXFxdK3wtLVthLXpBLVowLTlfLV0rKVxzKihcL1wqXCpcLyk/Oi8sCnJldHVybkJlZ2luOiEwLGVuZDoiOyIsZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHJpYnV0ZSIsCmJlZ2luOi9cUy8sZW5kOiI6IixleGNsdWRlRW5kOiEwLHN0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMCwKY29udGFpbnM6W3tiZWdpbjovW1x3LV0rXCgvLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJidWlsdF9pbiIsCmJlZ2luOi9bXHctXSsvfSx7YmVnaW46L1woLyxlbmQ6L1wpLywKY29udGFpbnM6W2UuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ1NTX05VTUJFUl9NT0RFXX1dCn0sZS5DU1NfTlVNQkVSX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7CmNsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiI1swLTlBLUZhLWZdKyJ9LHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In1dCn19XX07cmV0dXJue25hbWU6IkNTUyIsY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9bPXwnXCRdLywKY29udGFpbnM6W2UuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToic2VsZWN0b3ItaWQiLApiZWdpbjovI1tBLVphLXowLTlfLV0rL30se2NsYXNzTmFtZToic2VsZWN0b3ItY2xhc3MiLGJlZ2luOiJcXC4iK259LHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1hdHRyIixiZWdpbjovXFsvLGVuZDovXF0vLGlsbGVnYWw6IiQiLApjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdfSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLApiZWdpbjovOig6KT9bYS16QS1aMC05XysoKSInLi1dKy99LHtiZWdpbjoiQChwYWdlfGZvbnQtZmFjZSkiLApsZXhlbWVzOiJAW2Etei1dKyIsa2V5d29yZHM6IkBwYWdlIEBmb250LWZhY2UifSx7YmVnaW46IkAiLGVuZDoiW3s7XSIsCmlsbGVnYWw6LzovLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIiwKYmVnaW46L0AtP1x3W1x3XSooLVx3KykqL30se2JlZ2luOi9ccy8sZW5kc1dpdGhQYXJlbnQ6ITAsZXhjbHVkZUVuZDohMCwKcmVsZXZhbmNlOjAsa2V5d29yZHM6ImFuZCBvciBub3Qgb25seSIsY29udGFpbnM6W3tiZWdpbjovW2Etei1dKzovLApjbGFzc05hbWU6ImF0dHJpYnV0ZSJ9LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ1NTX05VTUJFUl9NT0RFXQp9XX0se2NsYXNzTmFtZToic2VsZWN0b3ItdGFnIixiZWdpbjpuLHJlbGV2YW5jZTowfSx7YmVnaW46L1x7LyxlbmQ6L1x9LywKaWxsZWdhbDovXFMvLGNvbnRhaW5zOltlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtiZWdpbjovOy99LGFdfV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibmdpbngiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IG49ewpjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOi9cJFxkKy99LHtiZWdpbjovXCRcey8sZW5kOi9cfS99LHsKYmVnaW46L1skQF0vK2UuVU5ERVJTQ09SRV9JREVOVF9SRX1dfSxhPXtlbmRzV2l0aFBhcmVudDohMCxrZXl3b3Jkczp7CiRwYXR0ZXJuOiJbYS16L19dKyIsCmxpdGVyYWw6Im9uIG9mZiB5ZXMgbm8gdHJ1ZSBmYWxzZSBub25lIGJsb2NrZWQgZGVidWcgaW5mbyBub3RpY2Ugd2FybiBlcnJvciBjcml0IHNlbGVjdCBicmVhayBsYXN0IHBlcm1hbmVudCByZWRpcmVjdCBrcXVldWUgcnRzaWcgZXBvbGwgcG9sbCAvZGV2L3BvbGwiCn0scmVsZXZhbmNlOjAsaWxsZWdhbDoiPT4iLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl0sdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi8nLyxlbmQ6LycvCn1dfSx7YmVnaW46IihbYS16XSspOi8iLGVuZDoiXFxzIixlbmRzV2l0aFBhcmVudDohMCxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOltuXQp9LHtjbGFzc05hbWU6InJlZ2V4cCIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxuXSx2YXJpYW50czpbe2JlZ2luOiJcXHNcXF4iLAplbmQ6Ilxcc3xcXHt8OyIscmV0dXJuRW5kOiEwfSx7YmVnaW46In5cXCo/XFxzKyIsZW5kOiJcXHN8XFx7fDsiLHJldHVybkVuZDohMH0sewpiZWdpbjoiXFwqKFxcLlthLXpcXC1dKykrIn0se2JlZ2luOiIoW2EtelxcLV0rXFwuKStcXCoifV19LHtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiJcXGJcXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSg6XFxkezEsNX0pP1xcYiJ9LHsKY2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJcXGJcXGQrW2tLbU1nR2RzaGR3eV0qXFxiIixyZWxldmFuY2U6MH0sbl19O3JldHVybnsKbmFtZToiTmdpbnggY29uZmlnIixhbGlhc2VzOlsibmdpbnhjb25mIl0sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsewpiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUrIlxccytcXHsiLHJldHVybkJlZ2luOiEwLGVuZDovXHsvLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFfV0scmVsZXZhbmNlOjB9LHsKYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMiLGVuZDoiO3xcXHsiLHJldHVybkJlZ2luOiEwLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjplLlVOREVSU0NPUkVfSURFTlRfUkUsc3RhcnRzOmF9XSxyZWxldmFuY2U6MH1dLAppbGxlZ2FsOiJbXlxcc1xcfV0ifX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNjc3MiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e3ZhciB0PSJAW2Etei1dKyIsaT17CmNsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiIoXFwkW2EtekEtWi1dW2EtekEtWjAtOV8tXSopXFxiIn0scj17CmNsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiI1swLTlBLUZhLWZdKyJ9CjtyZXR1cm4gZS5DU1NfTlVNQkVSX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSwKZS5BUE9TX1NUUklOR19NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse25hbWU6IlNDU1MiLGNhc2VfaW5zZW5zaXRpdmU6ITAsCmlsbGVnYWw6Ils9L3wnXSIsY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1pZCIsYmVnaW46IiNbQS1aYS16MC05Xy1dKyIscmVsZXZhbmNlOjB9LHsKY2xhc3NOYW1lOiJzZWxlY3Rvci1jbGFzcyIsYmVnaW46IlxcLltBLVphLXowLTlfLV0rIixyZWxldmFuY2U6MH0sewpjbGFzc05hbWU6InNlbGVjdG9yLWF0dHIiLGJlZ2luOiJcXFsiLGVuZDoiXFxdIixpbGxlZ2FsOiIkIn0sewpjbGFzc05hbWU6InNlbGVjdG9yLXRhZyIsCmJlZ2luOiJcXGIoYXxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcmVhfGFydGljbGV8YXNpZGV8YXVkaW98YnxiYXNlfGJpZ3xibG9ja3F1b3RlfGJvZHl8YnJ8YnV0dG9ufGNhbnZhc3xjYXB0aW9ufGNpdGV8Y29kZXxjb2x8Y29sZ3JvdXB8Y29tbWFuZHxkYXRhbGlzdHxkZHxkZWx8ZGV0YWlsc3xkZm58ZGl2fGRsfGR0fGVtfGVtYmVkfGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fChoWzEtNl0pfGhlYWR8aGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2JkfGtleWdlbnxsYWJlbHxsZWdlbmR8bGl8bGlua3xtYXB8bWFya3xtZXRhfG1ldGVyfG5hdnxub2ZyYW1lc3xub3NjcmlwdHxvYmplY3R8b2x8b3B0Z3JvdXB8b3B0aW9ufG91dHB1dHxwfHBhcmFtfHByZXxwcm9ncmVzc3xxfHJwfHJ0fHJ1Ynl8c2FtcHxzY3JpcHR8c2VjdGlvbnxzZWxlY3R8c21hbGx8c3BhbnxzdHJpa2V8c3Ryb25nfHN0eWxlfHN1YnxzdXB8dGFibGV8dGJvZHl8dGR8dGV4dGFyZWF8dGZvb3R8dGh8dGhlYWR8dGltZXx0aXRsZXx0cnx0dHx1bHx2YXJ8dmlkZW8pXFxiIiwKcmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InNlbGVjdG9yLXBzZXVkbyIsCmJlZ2luOiI6KHZpc2l0ZWR8dmFsaWR8cm9vdHxyaWdodHxyZXF1aXJlZHxyZWFkLXdyaXRlfHJlYWQtb25seXxvdXQtcmFuZ2V8b3B0aW9uYWx8b25seS1vZi10eXBlfG9ubHktY2hpbGR8bnRoLW9mLXR5cGV8bnRoLWxhc3Qtb2YtdHlwZXxudGgtbGFzdC1jaGlsZHxudGgtY2hpbGR8bm90fGxpbmt8bGVmdHxsYXN0LW9mLXR5cGV8bGFzdC1jaGlsZHxsYW5nfGludmFsaWR8aW5kZXRlcm1pbmF0ZXxpbi1yYW5nZXxob3Zlcnxmb2N1c3xmaXJzdC1vZi10eXBlfGZpcnN0LWxpbmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWNoaWxkfGZpcnN0fGVuYWJsZWR8ZW1wdHl8ZGlzYWJsZWR8ZGVmYXVsdHxjaGVja2VkfGJlZm9yZXxhZnRlcnxhY3RpdmUpIgp9LHtjbGFzc05hbWU6InNlbGVjdG9yLXBzZXVkbyIsCmJlZ2luOiI6OihhZnRlcnxiZWZvcmV8Y2hvaWNlc3xmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxyZXBlYXQtaW5kZXh8cmVwZWF0LWl0ZW18c2VsZWN0aW9ufHZhbHVlKSIKfSxpLHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsCmJlZ2luOiJcXGIoc3JjfHotaW5kZXh8d29yZC13cmFwfHdvcmQtc3BhY2luZ3x3b3JkLWJyZWFrfHdpZHRofHdpZG93c3x3aGl0ZS1zcGFjZXx2aXNpYmlsaXR5fHZlcnRpY2FsLWFsaWdufHVuaWNvZGUtYmlkaXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9ufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybXx0b3B8dGV4dC11bmRlcmxpbmUtcG9zaXRpb258dGV4dC10cmFuc2Zvcm18dGV4dC1zaGFkb3d8dGV4dC1yZW5kZXJpbmd8dGV4dC1vdmVyZmxvd3x0ZXh0LWluZGVudHx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dGV4dC1kZWNvcmF0aW9uLWxpbmV8dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbnx0ZXh0LWFsaWduLWxhc3R8dGV4dC1hbGlnbnx0YWItc2l6ZXx0YWJsZS1sYXlvdXR8cmlnaHR8cmVzaXplfHF1b3Rlc3xwb3NpdGlvbnxwb2ludGVyLWV2ZW50c3xwZXJzcGVjdGl2ZS1vcmlnaW58cGVyc3BlY3RpdmV8cGFnZS1icmVhay1pbnNpZGV8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1hZnRlcnxwYWRkaW5nLXRvcHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctbGVmdHxwYWRkaW5nLWJvdHRvbXxwYWRkaW5nfG92ZXJmbG93LXl8b3ZlcmZsb3cteHxvdmVyZmxvdy13cmFwfG92ZXJmbG93fG91dGxpbmUtd2lkdGh8b3V0bGluZS1zdHlsZXxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLWNvbG9yfG91dGxpbmV8b3JwaGFuc3xvcmRlcnxvcGFjaXR5fG9iamVjdC1wb3NpdGlvbnxvYmplY3QtZml0fG5vcm1hbHxub25lfG5hdi11cHxuYXYtcmlnaHR8bmF2LWxlZnR8bmF2LWluZGV4fG5hdi1kb3dufG1pbi13aWR0aHxtaW4taGVpZ2h0fG1heC13aWR0aHxtYXgtaGVpZ2h0fG1hc2t8bWFya3N8bWFyZ2luLXRvcHxtYXJnaW4tcmlnaHR8bWFyZ2luLWxlZnR8bWFyZ2luLWJvdHRvbXxtYXJnaW58bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlfGxpbmUtaGVpZ2h0fGxldHRlci1zcGFjaW5nfGxlZnR8anVzdGlmeS1jb250ZW50fGluaXRpYWx8aW5oZXJpdHxpbWUtbW9kZXxpbWFnZS1vcmllbnRhdGlvbnxpbWFnZS1yZXNvbHV0aW9ufGltYWdlLXJlbmRlcmluZ3xpY29ufGh5cGhlbnN8aGVpZ2h0fGZvbnQtd2VpZ2h0fGZvbnQtdmFyaWFudC1saWdhdHVyZXN8Zm9udC12YXJpYW50fGZvbnQtc3R5bGV8Zm9udC1zdHJldGNofGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zaXplfGZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGV8Zm9udC1rZXJuaW5nfGZvbnQtZmVhdHVyZS1zZXR0aW5nc3xmb250LWZhbWlseXxmb250fGZsb2F0fGZsZXgtd3JhcHxmbGV4LXNocmlua3xmbGV4LWdyb3d8ZmxleC1mbG93fGZsZXgtZGlyZWN0aW9ufGZsZXgtYmFzaXN8ZmxleHxmaWx0ZXJ8ZW1wdHktY2VsbHN8ZGlzcGxheXxkaXJlY3Rpb258Y3Vyc29yfGNvdW50ZXItcmVzZXR8Y291bnRlci1pbmNyZW1lbnR8Y29udGVudHxjb2x1bW4td2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGV8Y29sdW1uLWdhcHxjb2x1bW4tZmlsbHxjb2x1bW4tY291bnR8Y29sdW1uc3xjb2xvcnxjbGlwLXBhdGh8Y2xpcHxjbGVhcnxjYXB0aW9uLXNpZGV8YnJlYWstaW5zaWRlfGJyZWFrLWJlZm9yZXxicmVhay1hZnRlcnxib3gtc2l6aW5nfGJveC1zaGFkb3d8Ym94LWRlY29yYXRpb24tYnJlYWt8Ym90dG9tfGJvcmRlci13aWR0aHxib3JkZXItdG9wLXdpZHRofGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3B8Ym9yZGVyLXN0eWxlfGJvcmRlci1zcGFjaW5nfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodHxib3JkZXItcmFkaXVzfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0fGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlfGJvcmRlci1jb2xvcnxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tfGJvcmRlcnxiYWNrZ3JvdW5kLXNpemV8YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZHxiYWNrZmFjZS12aXNpYmlsaXR5fGF1dG98YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tbmFtZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1maWxsLW1vZGV8YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbnxhbGlnbi1zZWxmfGFsaWduLWl0ZW1zfGFsaWduLWNvbnRlbnQpXFxiIiwKaWxsZWdhbDoiW15cXHNdIn0sewpiZWdpbjoiXFxiKHdoaXRlc3BhY2V8d2FpdHx3LXJlc2l6ZXx2aXNpYmxlfHZlcnRpY2FsLXRleHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dXBwZXJjYXNlfHVwcGVyLXJvbWFufHVwcGVyLWFscGhhfHVuZGVybGluZXx0cmFuc3BhcmVudHx0b3B8dGhpbnx0aGlja3x0ZXh0fHRleHQtdG9wfHRleHQtYm90dG9tfHRiLXJsfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1mb290ZXItZ3JvdXB8c3ctcmVzaXplfHN1cGVyfHN0cmljdHxzdGF0aWN8c3F1YXJlfHNvbGlkfHNtYWxsLWNhcHN8c2VwYXJhdGV8c2UtcmVzaXplfHNjcm9sbHxzLXJlc2l6ZXxydGx8cm93LXJlc2l6ZXxyaWRnZXxyaWdodHxyZXBlYXR8cmVwZWF0LXl8cmVwZWF0LXh8cmVsYXRpdmV8cHJvZ3Jlc3N8cG9pbnRlcnxvdmVybGluZXxvdXRzaWRlfG91dHNldHxvYmxpcXVlfG5vd3JhcHxub3QtYWxsb3dlZHxub3JtYWx8bm9uZXxudy1yZXNpemV8bm8tcmVwZWF0fG5vLWRyb3B8bmV3c3BhcGVyfG5lLXJlc2l6ZXxuLXJlc2l6ZXxtb3ZlfG1pZGRsZXxtZWRpdW18bHRyfGxyLXRifGxvd2VyY2FzZXxsb3dlci1yb21hbnxsb3dlci1hbHBoYXxsb29zZXxsaXN0LWl0ZW18bGluZXxsaW5lLXRocm91Z2h8bGluZS1lZGdlfGxpZ2h0ZXJ8bGVmdHxrZWVwLWFsbHxqdXN0aWZ5fGl0YWxpY3xpbnRlci13b3JkfGludGVyLWlkZW9ncmFwaHxpbnNpZGV8aW5zZXR8aW5saW5lfGlubGluZS1ibG9ja3xpbmhlcml0fGluYWN0aXZlfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLWFscGhhfGhvcml6b250YWx8aGlkZGVufGhlbHB8aGFuZHxncm9vdmV8Zml4ZWR8ZWxsaXBzaXN8ZS1yZXNpemV8ZG91YmxlfGRvdHRlZHxkaXN0cmlidXRlfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzY3xkaXNhYmxlZHxkZWZhdWx0fGRlY2ltYWx8ZGFzaGVkfGNyb3NzaGFpcnxjb2xsYXBzZXxjb2wtcmVzaXplfGNpcmNsZXxjaGFyfGNlbnRlcnxjYXBpdGFsaXplfGJyZWFrLXdvcmR8YnJlYWstYWxsfGJvdHRvbXxib3RofGJvbGRlcnxib2xkfGJsb2NrfGJpZGktb3ZlcnJpZGV8YmVsb3d8YmFzZWxpbmV8YXV0b3xhbHdheXN8YWxsLXNjcm9sbHxhYnNvbHV0ZXx0YWJsZXx0YWJsZS1jZWxsKVxcYiIKfSx7YmVnaW46IjoiLGVuZDoiOyIsCmNvbnRhaW5zOltpLHIsZS5DU1NfTlVNQkVSX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsewpjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIhaW1wb3J0YW50In1dfSx7YmVnaW46IkAocGFnZXxmb250LWZhY2UpIixsZXhlbWVzOnQsCmtleXdvcmRzOiJAcGFnZSBAZm9udC1mYWNlIn0se2JlZ2luOiJAIixlbmQ6Ilt7O10iLHJldHVybkJlZ2luOiEwLAprZXl3b3JkczoiYW5kIG9yIG5vdCBvbmx5Iixjb250YWluczpbe2JlZ2luOnQsY2xhc3NOYW1lOiJrZXl3b3JkIgp9LGksZS5RVU9URV9TVFJJTkdfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUscixlLkNTU19OVU1CRVJfTU9ERV19XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJodHRwIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKdmFyIG49IkhUVFAvWzAtOVxcLl0rIjtyZXR1cm57bmFtZToiSFRUUCIsYWxpYXNlczpbImh0dHBzIl0saWxsZWdhbDoiXFxTIiwKY29udGFpbnM6W3tiZWdpbjoiXiIrbixlbmQ6IiQiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJudW1iZXIiLApiZWdpbjoiXFxiXFxkezN9XFxiIn1dfSx7YmVnaW46Il5bQS1aXSsgKC4qPykgIituKyIkIixyZXR1cm5CZWdpbjohMCxlbmQ6IiQiLApjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiICIsZW5kOiIgIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMH0sewpiZWdpbjpufSx7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiW0EtWl0rIn1dfSx7Y2xhc3NOYW1lOiJhdHRyaWJ1dGUiLApiZWdpbjoiXlxcdyIsZW5kOiI6ICIsZXhjbHVkZUVuZDohMCxpbGxlZ2FsOiJcXG58XFxzfD0iLHN0YXJ0czp7ZW5kOiIkIiwKcmVsZXZhbmNlOjB9fSx7YmVnaW46IlxcblxcbiIsc3RhcnRzOntzdWJMYW5ndWFnZTpbXSxlbmRzV2l0aFBhcmVudDohMH19XX19Cn0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicHJvcGVydGllcyIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CnZhciBuPSJbIFxcdFxcZl0qIixhPW4rIls6PV0iK24sdD0iKCIrYSsifFsgXFx0XFxmXSspIixyPSIoW15cXFxcXFxXOj0gXFx0XFxmXFxuXXxcXFxcLikrIixzPSIoW15cXFxcOj0gXFx0XFxmXFxuXXxcXFxcLikrIixpPXsKZW5kOnQscmVsZXZhbmNlOjAsc3RhcnRzOntjbGFzc05hbWU6InN0cmluZyIsZW5kOi8kLyxyZWxldmFuY2U6MCxjb250YWluczpbewpiZWdpbjoiXFxcXFxcbiJ9XX19O3JldHVybntuYW1lOiIucHJvcGVydGllcyIsY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOi9cUy8sCmNvbnRhaW5zOltlLkNPTU1FTlQoIl5cXHMqWyEjXSIsIiQiKSx7cmV0dXJuQmVnaW46ITAsdmFyaWFudHM6W3tiZWdpbjpyK2EsCnJlbGV2YW5jZToxfSx7YmVnaW46cisiWyBcXHRcXGZdKyIscmVsZXZhbmNlOjB9XSxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsCmJlZ2luOnIsZW5kc1BhcmVudDohMCxyZWxldmFuY2U6MH1dLHN0YXJ0czppfSx7YmVnaW46cyt0LHJldHVybkJlZ2luOiEwLApyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToibWV0YSIsYmVnaW46cyxlbmRzUGFyZW50OiEwLHJlbGV2YW5jZTowfV0sCnN0YXJ0czppfSx7Y2xhc3NOYW1lOiJhdHRyIixyZWxldmFuY2U6MCxiZWdpbjpzK24rIiQifV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibHVhIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKY29uc3QgdD0iXFxbPSpcXFsiLGE9IlxcXT0qXFxdIixuPXtiZWdpbjp0LGVuZDphLGNvbnRhaW5zOlsic2VsZiJdCn0sbz1bZS5DT01NRU5UKCItLSg/IVxcWz0qXFxbKSIsIiQiKSxlLkNPTU1FTlQoIi0tXFxbPSpcXFsiLGEse2NvbnRhaW5zOltuXSwKcmVsZXZhbmNlOjEwfSldO3JldHVybntuYW1lOiJMdWEiLGtleXdvcmRzOnskcGF0dGVybjplLlVOREVSU0NPUkVfSURFTlRfUkUsCmxpdGVyYWw6InRydWUgZmFsc2UgbmlsIiwKa2V5d29yZDoiYW5kIGJyZWFrIGRvIGVsc2UgZWxzZWlmIGVuZCBmb3IgZ290byBpZiBpbiBsb2NhbCBub3Qgb3IgcmVwZWF0IHJldHVybiB0aGVuIHVudGlsIHdoaWxlIiwKYnVpbHRfaW46Il9HIF9FTlYgX1ZFUlNJT04gX19pbmRleCBfX25ld2luZGV4IF9fbW9kZSBfX2NhbGwgX19tZXRhdGFibGUgX190b3N0cmluZyBfX2xlbiBfX2djIF9fYWRkIF9fc3ViIF9fbXVsIF9fZGl2IF9fbW9kIF9fcG93IF9fY29uY2F0IF9fdW5tIF9fZXEgX19sdCBfX2xlIGFzc2VydCBjb2xsZWN0Z2FyYmFnZSBkb2ZpbGUgZXJyb3IgZ2V0ZmVudiBnZXRtZXRhdGFibGUgaXBhaXJzIGxvYWQgbG9hZGZpbGUgbG9hZHN0cmluZyBtb2R1bGUgbmV4dCBwYWlycyBwY2FsbCBwcmludCByYXdlcXVhbCByYXdnZXQgcmF3c2V0IHJlcXVpcmUgc2VsZWN0IHNldGZlbnYgc2V0bWV0YXRhYmxlIHRvbnVtYmVyIHRvc3RyaW5nIHR5cGUgdW5wYWNrIHhwY2FsbCBhcmcgc2VsZiBjb3JvdXRpbmUgcmVzdW1lIHlpZWxkIHN0YXR1cyB3cmFwIGNyZWF0ZSBydW5uaW5nIGRlYnVnIGdldHVwdmFsdWUgZGVidWcgc2V0aG9vayBnZXRtZXRhdGFibGUgZ2V0aG9vayBzZXRtZXRhdGFibGUgc2V0bG9jYWwgdHJhY2ViYWNrIHNldGZlbnYgZ2V0aW5mbyBzZXR1cHZhbHVlIGdldGxvY2FsIGdldHJlZ2lzdHJ5IGdldGZlbnYgaW8gbGluZXMgd3JpdGUgY2xvc2UgZmx1c2ggb3BlbiBvdXRwdXQgdHlwZSByZWFkIHN0ZGVyciBzdGRpbiBpbnB1dCBzdGRvdXQgcG9wZW4gdG1wZmlsZSBtYXRoIGxvZyBtYXggYWNvcyBodWdlIGxkZXhwIHBpIGNvcyB0YW5oIHBvdyBkZWcgdGFuIGNvc2ggc2luaCByYW5kb20gcmFuZG9tc2VlZCBmcmV4cCBjZWlsIGZsb29yIHJhZCBhYnMgc3FydCBtb2RmIGFzaW4gbWluIG1vZCBmbW9kIGxvZzEwIGF0YW4yIGV4cCBzaW4gYXRhbiBvcyBleGl0IHNldGxvY2FsZSBkYXRlIGdldGVudiBkaWZmdGltZSByZW1vdmUgdGltZSBjbG9jayB0bXBuYW1lIHJlbmFtZSBleGVjdXRlIHBhY2thZ2UgcHJlbG9hZCBsb2FkbGliIGxvYWRlZCBsb2FkZXJzIGNwYXRoIGNvbmZpZyBwYXRoIHNlZWFsbCBzdHJpbmcgc3ViIHVwcGVyIGxlbiBnZmluZCByZXAgZmluZCBtYXRjaCBjaGFyIGR1bXAgZ21hdGNoIHJldmVyc2UgYnl0ZSBmb3JtYXQgZ3N1YiBsb3dlciB0YWJsZSBzZXRuIGluc2VydCBnZXRuIGZvcmVhY2hpIG1heG4gZm9yZWFjaCBjb25jYXQgc29ydCByZW1vdmUiCn0sY29udGFpbnM6by5jb25jYXQoW3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOiJcXCkiLApjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7CmJlZ2luOiIoW19hLXpBLVpdXFx3KlxcLikqKFtfYS16QS1aXVxcdyo6KT9bX2EtekEtWl1cXHcqIn0pLHtjbGFzc05hbWU6InBhcmFtcyIsCmJlZ2luOiJcXCgiLGVuZHNXaXRoUGFyZW50OiEwLGNvbnRhaW5zOm99XS5jb25jYXQobykKfSxlLkNfTlVNQkVSX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUse2NsYXNzTmFtZToic3RyaW5nIiwKYmVnaW46dCxlbmQ6YSxjb250YWluczpbbl0scmVsZXZhbmNlOjV9XSl9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgieG1sIiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXsKcmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2U6ZS5zb3VyY2U6bnVsbH1mdW5jdGlvbiBuKGUpe3JldHVybiBhKCIoPz0iLGUsIikiKX0KZnVuY3Rpb24gYSguLi5uKXtyZXR1cm4gbi5tYXAoKG49PmUobikpKS5qb2luKCIiKX1mdW5jdGlvbiBzKC4uLm4pewpyZXR1cm4iKCIrbi5tYXAoKG49PmUobikpKS5qb2luKCJ8IikrIikifXJldHVybiBlPT57CmNvbnN0IHQ9YSgvW0EtWl9dLyxhKCIoIiwvW0EtWjAtOV8uLV0rOi8sIik/IiksL1tBLVowLTlfLi1dKi8pLGk9ewpjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IiZbYS16XSs7fCYjWzAtOV0rO3wmI3hbYS1mMC05XSs7In0sYz17YmVnaW46IlxccyIsCmNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhLWtleXdvcmQiLGJlZ2luOiIjP1thLXpfXVthLXoxLTlfLV0rIixpbGxlZ2FsOiJcXG4ifV0KfSxyPWUuaW5oZXJpdChjLHtiZWdpbjoiXFwoIixlbmQ6IlxcKSJ9KSxsPWUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUsewpjbGFzc05hbWU6Im1ldGEtc3RyaW5nIn0pLGc9ZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUsewpjbGFzc05hbWU6Im1ldGEtc3RyaW5nIn0pLG09e2VuZHNXaXRoUGFyZW50OiEwLGlsbGVnYWw6LzwvLHJlbGV2YW5jZTowLApjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46IltBLVphLXowLTlcXC5fOi1dKyIscmVsZXZhbmNlOjB9LHsKYmVnaW46Lz1ccyovLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZHNQYXJlbnQ6ITAsdmFyaWFudHM6W3sKYmVnaW46LyIvLGVuZDovIi8sY29udGFpbnM6W2ldfSx7YmVnaW46LycvLGVuZDovJy8sY29udGFpbnM6W2ldfSx7CmJlZ2luOi9bXlxzIic9PD5gXSsvfV19XX1dfTtyZXR1cm57bmFtZToiSFRNTCwgWE1MIiwKYWxpYXNlczpbImh0bWwiLCJ4aHRtbCIsInJzcyIsImF0b20iLCJ4amIiLCJ4c2QiLCJ4c2wiLCJwbGlzdCIsIndzZiIsInN2ZyJdLApjYXNlX2luc2Vuc2l0aXZlOiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiPCFbYS16XSIsZW5kOiI+IiwKcmVsZXZhbmNlOjEwLGNvbnRhaW5zOltjLGcsbCxyLHtiZWdpbjoiXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiPCFbYS16XSIsZW5kOiI+Iixjb250YWluczpbYyxyLGcsbF19XX1dCn0sZS5DT01NRU5UKCJceDNjIS0tIiwiLS1ceDNlIix7cmVsZXZhbmNlOjEwfSkse2JlZ2luOiI8IVxcW0NEQVRBXFxbIiwKZW5kOiJcXF1cXF0+IixyZWxldmFuY2U6MTB9LGkse2NsYXNzTmFtZToibWV0YSIsYmVnaW46LzxcP3htbC8sZW5kOi9cPz4vLApyZWxldmFuY2U6MTB9LHtjbGFzc05hbWU6InRhZyIsYmVnaW46IjxzdHlsZSg/PVxcc3w+KSIsZW5kOiI+IixrZXl3b3Jkczp7Cm5hbWU6InN0eWxlIn0sY29udGFpbnM6W21dLHN0YXJ0czp7ZW5kOiI8L3N0eWxlPiIscmV0dXJuRW5kOiEwLApzdWJMYW5ndWFnZTpbImNzcyIsInhtbCJdfX0se2NsYXNzTmFtZToidGFnIixiZWdpbjoiPHNjcmlwdCg/PVxcc3w+KSIsZW5kOiI+IiwKa2V5d29yZHM6e25hbWU6InNjcmlwdCJ9LGNvbnRhaW5zOlttXSxzdGFydHM6e2VuZDovPFwvc2NyaXB0Pi8scmV0dXJuRW5kOiEwLApzdWJMYW5ndWFnZTpbImphdmFzY3JpcHQiLCJoYW5kbGViYXJzIiwieG1sIl19fSx7Y2xhc3NOYW1lOiJ0YWciLGJlZ2luOi88Pnw8XC8+Lwp9LHtjbGFzc05hbWU6InRhZyIsYmVnaW46YSgvPC8sbihhKHQscygvXC8+LywvPi8sL1xzLykpKSksZW5kOi9cLz8+Lyxjb250YWluczpbewpjbGFzc05hbWU6Im5hbWUiLGJlZ2luOnQscmVsZXZhbmNlOjAsc3RhcnRzOm19XX0se2NsYXNzTmFtZToidGFnIiwKYmVnaW46YSgvPFwvLyxuKGEodCwvPi8pKSksY29udGFpbnM6W3tjbGFzc05hbWU6Im5hbWUiLGJlZ2luOnQscmVsZXZhbmNlOjB9LHsKYmVnaW46Lz4vLHJlbGV2YW5jZTowfV19XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJtYXJrZG93biIsKCgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oLi4ubil7CnJldHVybiBuLm1hcCgobj0+e3JldHVybihlPW4pPyJzdHJpbmciPT10eXBlb2YgZT9lOmUuc291cmNlOm51bGw7dmFyIGUKfSkpLmpvaW4oIiIpfXJldHVybiBlPT57Y29uc3QgYT17YmVnaW46LzxcLz9bQS1aYS16X10vLGVuZDoiPiIsCnN1Ykxhbmd1YWdlOiJ4bWwiLHJlbGV2YW5jZTowfSxpPXt2YXJpYW50czpbe2JlZ2luOi9cWy4rP1xdXFsuKj9cXS8scmVsZXZhbmNlOjAKfSx7YmVnaW46L1xbLis/XF1cKCgoZGF0YXxqYXZhc2NyaXB0fG1haWx0byk6fCg/Omh0dHB8ZnRwKXM/OlwvXC8pLio/XCkvLApyZWxldmFuY2U6Mn0se2JlZ2luOm4oL1xbLis/XF1cKC8sL1tBLVphLXpdW0EtWmEtejAtOSsuLV0qLywvOlwvXC8uKj9cKS8pLApyZWxldmFuY2U6Mn0se2JlZ2luOi9cWy4rP1xdXChbLi8/JiNdLio/XCkvLHJlbGV2YW5jZToxfSx7CmJlZ2luOi9cWy4rP1xdXCguKj9cKS8scmVsZXZhbmNlOjB9XSxyZXR1cm5CZWdpbjohMCxjb250YWluczpbewpjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAsYmVnaW46IlxcWyIsZW5kOiJcXF0iLGV4Y2x1ZGVCZWdpbjohMCwKcmV0dXJuRW5kOiEwfSx7Y2xhc3NOYW1lOiJsaW5rIixyZWxldmFuY2U6MCxiZWdpbjoiXFxdXFwoIixlbmQ6IlxcKSIsCmV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLHJlbGV2YW5jZTowLGJlZ2luOiJcXF1cXFsiLAplbmQ6IlxcXSIsZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9XX0scz17Y2xhc3NOYW1lOiJzdHJvbmciLGNvbnRhaW5zOltdLAp2YXJpYW50czpbe2JlZ2luOi9fezJ9LyxlbmQ6L197Mn0vfSx7YmVnaW46L1wqezJ9LyxlbmQ6L1wqezJ9L31dfSxjPXsKY2xhc3NOYW1lOiJlbXBoYXNpcyIsY29udGFpbnM6W10sdmFyaWFudHM6W3tiZWdpbjovXCooPyFcKikvLGVuZDovXCovfSx7CmJlZ2luOi9fKD8hXykvLGVuZDovXy8scmVsZXZhbmNlOjB9XX07cy5jb250YWlucy5wdXNoKGMpLGMuY29udGFpbnMucHVzaChzKQo7bGV0IHQ9W2EsaV0KO3JldHVybiBzLmNvbnRhaW5zPXMuY29udGFpbnMuY29uY2F0KHQpLGMuY29udGFpbnM9Yy5jb250YWlucy5jb25jYXQodCksCnQ9dC5jb25jYXQocyxjKSx7bmFtZToiTWFya2Rvd24iLGFsaWFzZXM6WyJtZCIsIm1rZG93biIsIm1rZCJdLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToic2VjdGlvbiIsdmFyaWFudHM6W3tiZWdpbjoiXiN7MSw2fSIsZW5kOiIkIixjb250YWluczp0fSx7CmJlZ2luOiIoPz1eLis/XFxuWz0tXXsyLH0kKSIsY29udGFpbnM6W3tiZWdpbjoiXls9LV0qJCJ9LHtiZWdpbjoiXiIsZW5kOiJcXG4iLApjb250YWluczp0fV19XX0sYSx7Y2xhc3NOYW1lOiJidWxsZXQiLGJlZ2luOiJeWyBcdF0qKFsqKy1dfChcXGQrXFwuKSkoPz1cXHMrKSIsCmVuZDoiXFxzKyIsZXhjbHVkZUVuZDohMH0scyxjLHtjbGFzc05hbWU6InF1b3RlIixiZWdpbjoiXj5cXHMrIixjb250YWluczp0LAplbmQ6IiQifSx7Y2xhc3NOYW1lOiJjb2RlIix2YXJpYW50czpbe2JlZ2luOiIoYHszLH0pW15gXSgufFxcbikqP1xcMWAqWyBdKiJ9LHsKYmVnaW46Iih+ezMsfSlbXn5dKC58XFxuKSo/XFwxfipbIF0qIn0se2JlZ2luOiJgYGAiLGVuZDoiYGBgK1sgXSokIn0sewpiZWdpbjoifn5+IixlbmQ6In5+fitbIF0qJCJ9LHtiZWdpbjoiYC4rP2AifSx7YmVnaW46Iig/PV4oIHs0fXxcXHQpKSIsCmNvbnRhaW5zOlt7YmVnaW46Il4oIHs0fXxcXHQpIixlbmQ6IihcXG4pJCJ9XSxyZWxldmFuY2U6MH1dfSx7CmJlZ2luOiJeWy1cXCpdezMsfSIsZW5kOiIkIn0saSx7YmVnaW46L15cW1teXG5dK1xdOi8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOi9cWy8sZW5kOi9cXS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITB9LHsKY2xhc3NOYW1lOiJsaW5rIixiZWdpbjovOlxzKi8sZW5kOi8kLyxleGNsdWRlQmVnaW46ITB9XX1dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNxbCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CnZhciB0PWUuQ09NTUVOVCgiLS0iLCIkIik7cmV0dXJue25hbWU6IlNRTCIsY2FzZV9pbnNlbnNpdGl2ZTohMCwKaWxsZWdhbDovWzw+e30qXS8sY29udGFpbnM6W3sKYmVnaW5LZXl3b3JkczoiYmVnaW4gZW5kIHN0YXJ0IGNvbW1pdCByb2xsYmFjayBzYXZlcG9pbnQgbG9jayBhbHRlciBjcmVhdGUgZHJvcCByZW5hbWUgY2FsbCBkZWxldGUgZG8gaGFuZGxlciBpbnNlcnQgbG9hZCByZXBsYWNlIHNlbGVjdCB0cnVuY2F0ZSB1cGRhdGUgc2V0IHNob3cgcHJhZ21hIGdyYW50IG1lcmdlIGRlc2NyaWJlIHVzZSBleHBsYWluIGhlbHAgZGVjbGFyZSBwcmVwYXJlIGV4ZWN1dGUgZGVhbGxvY2F0ZSByZWxlYXNlIHVubG9jayBwdXJnZSByZXNldCBjaGFuZ2Ugc3RvcCBhbmFseXplIGNhY2hlIGZsdXNoIG9wdGltaXplIHJlcGFpciBraWxsIGluc3RhbGwgdW5pbnN0YWxsIGNoZWNrc3VtIHJlc3RvcmUgY2hlY2sgYmFja3VwIHJldm9rZSBjb21tZW50IHZhbHVlcyB3aXRoIiwKZW5kOi87LyxlbmRzV2l0aFBhcmVudDohMCxrZXl3b3Jkczp7JHBhdHRlcm46L1tcd1wuXSsvLAprZXl3b3JkOiJhcyBhYm9ydCBhYnMgYWJzb2x1dGUgYWNjIGFjY2UgYWNjZXAgYWNjZXB0IGFjY2VzcyBhY2Nlc3NlZCBhY2Nlc3NpYmxlIGFjY291bnQgYWNvcyBhY3Rpb24gYWN0aXZhdGUgYWRkIGFkZHRpbWUgYWRtaW4gYWRtaW5pc3RlciBhZHZhbmNlZCBhZHZpc2UgYWVzX2RlY3J5cHQgYWVzX2VuY3J5cHQgYWZ0ZXIgYWdlbnQgYWdncmVnYXRlIGFsaSBhbGlhIGFsaWFzIGFsbCBhbGxvY2F0ZSBhbGxvdyBhbHRlciBhbHdheXMgYW5hbHl6ZSBhbmNpbGxhcnkgYW5kIGFudGkgYW55IGFueWRhdGEgYW55ZGF0YXNldCBhbnlzY2hlbWEgYW55dHlwZSBhcHBseSBhcmNoaXZlIGFyY2hpdmVkIGFyY2hpdmVsb2cgYXJlIGFzIGFzYyBhc2NpaSBhc2luIGFzc2VtYmx5IGFzc2VydGlvbiBhc3NvY2lhdGUgYXN5bmNocm9ub3VzIGF0IGF0YW4gYXRuMiBhdHRyIGF0dHJpIGF0dHJpYiBhdHRyaWJ1IGF0dHJpYnV0IGF0dHJpYnV0ZSBhdHRyaWJ1dGVzIGF1ZGl0IGF1dGhlbnRpY2F0ZWQgYXV0aGVudGljYXRpb24gYXV0aGlkIGF1dGhvcnMgYXV0byBhdXRvYWxsb2NhdGUgYXV0b2RibGluayBhdXRvZXh0ZW5kIGF1dG9tYXRpYyBhdmFpbGFiaWxpdHkgYXZnIGJhY2t1cCBiYWRmaWxlIGJhc2ljZmlsZSBiZWZvcmUgYmVnaW4gYmVnaW5uaW5nIGJlbmNobWFyayBiZXR3ZWVuIGJmaWxlIGJmaWxlX2Jhc2UgYmlnIGJpZ2ZpbGUgYmluIGJpbmFyeV9kb3VibGUgYmluYXJ5X2Zsb2F0IGJpbmxvZyBiaXRfYW5kIGJpdF9jb3VudCBiaXRfbGVuZ3RoIGJpdF9vciBiaXRfeG9yIGJpdG1hcCBibG9iX2Jhc2UgYmxvY2sgYmxvY2tzaXplIGJvZHkgYm90aCBib3VuZCBidWNrZXQgYnVmZmVyX2NhY2hlIGJ1ZmZlcl9wb29sIGJ1aWxkIGJ1bGsgYnkgYnl0ZSBieXRlb3JkZXJtYXJrIGJ5dGVzIGNhY2hlIGNhY2hpbmcgY2FsbCBjYWxsaW5nIGNhbmNlbCBjYXBhY2l0eSBjYXNjYWRlIGNhc2NhZGVkIGNhc2UgY2FzdCBjYXRhbG9nIGNhdGVnb3J5IGNlaWwgY2VpbGluZyBjaGFpbiBjaGFuZ2UgY2hhbmdlZCBjaGFyX2Jhc2UgY2hhcl9sZW5ndGggY2hhcmFjdGVyX2xlbmd0aCBjaGFyYWN0ZXJzIGNoYXJhY3RlcnNldCBjaGFyaW5kZXggY2hhcnNldCBjaGFyc2V0Zm9ybSBjaGFyc2V0aWQgY2hlY2sgY2hlY2tzdW0gY2hlY2tzdW1fYWdnIGNoaWxkIGNob29zZSBjaHIgY2h1bmsgY2xhc3MgY2xlYW51cCBjbGVhciBjbGllbnQgY2xvYiBjbG9iX2Jhc2UgY2xvbmUgY2xvc2UgY2x1c3Rlcl9pZCBjbHVzdGVyX3Byb2JhYmlsaXR5IGNsdXN0ZXJfc2V0IGNsdXN0ZXJpbmcgY29hbGVzY2UgY29lcmNpYmlsaXR5IGNvbCBjb2xsYXRlIGNvbGxhdGlvbiBjb2xsZWN0IGNvbHUgY29sdW0gY29sdW1uIGNvbHVtbl92YWx1ZSBjb2x1bW5zIGNvbHVtbnNfdXBkYXRlZCBjb21tZW50IGNvbW1pdCBjb21wYWN0IGNvbXBhdGliaWxpdHkgY29tcGlsZWQgY29tcGxldGUgY29tcG9zaXRlX2xpbWl0IGNvbXBvdW5kIGNvbXByZXNzIGNvbXB1dGUgY29uY2F0IGNvbmNhdF93cyBjb25jdXJyZW50IGNvbmZpcm0gY29ubiBjb25uZWMgY29ubmVjdCBjb25uZWN0X2J5X2lzY3ljbGUgY29ubmVjdF9ieV9pc2xlYWYgY29ubmVjdF9ieV9yb290IGNvbm5lY3RfdGltZSBjb25uZWN0aW9uIGNvbnNpZGVyIGNvbnNpc3RlbnQgY29uc3RhbnQgY29uc3RyYWludCBjb25zdHJhaW50cyBjb25zdHJ1Y3RvciBjb250YWluZXIgY29udGVudCBjb250ZW50cyBjb250ZXh0IGNvbnRyaWJ1dG9ycyBjb250cm9sZmlsZSBjb252IGNvbnZlcnQgY29udmVydF90eiBjb3JyIGNvcnJfayBjb3JyX3MgY29ycmVzcG9uZGluZyBjb3JydXB0aW9uIGNvcyBjb3N0IGNvdW50IGNvdW50X2JpZyBjb3VudGVkIGNvdmFyX3BvcCBjb3Zhcl9zYW1wIGNwdV9wZXJfY2FsbCBjcHVfcGVyX3Nlc3Npb24gY3JjMzIgY3JlYXRlIGNyZWF0aW9uIGNyaXRpY2FsIGNyb3NzIGN1YmUgY3VtZV9kaXN0IGN1cmRhdGUgY3VycmVudCBjdXJyZW50X2RhdGUgY3VycmVudF90aW1lIGN1cnJlbnRfdGltZXN0YW1wIGN1cnJlbnRfdXNlciBjdXJzb3IgY3VydGltZSBjdXN0b21kYXR1bSBjeWNsZSBkYXRhIGRhdGFiYXNlIGRhdGFiYXNlcyBkYXRhZmlsZSBkYXRhZmlsZXMgZGF0YWxlbmd0aCBkYXRlX2FkZCBkYXRlX2NhY2hlIGRhdGVfZm9ybWF0IGRhdGVfc3ViIGRhdGVhZGQgZGF0ZWRpZmYgZGF0ZWZyb21wYXJ0cyBkYXRlbmFtZSBkYXRlcGFydCBkYXRldGltZTJmcm9tcGFydHMgZGF5IGRheV90b19zZWNvbmQgZGF5bmFtZSBkYXlvZm1vbnRoIGRheW9md2VlayBkYXlvZnllYXIgZGF5cyBkYl9yb2xlX2NoYW5nZSBkYnRpbWV6b25lIGRkbCBkZWFsbG9jYXRlIGRlY2xhcmUgZGVjb2RlIGRlY29tcG9zZSBkZWNyZW1lbnQgZGVjcnlwdCBkZWR1cGxpY2F0ZSBkZWYgZGVmYSBkZWZhdSBkZWZhdWwgZGVmYXVsdCBkZWZhdWx0cyBkZWZlcnJlZCBkZWZpIGRlZmluIGRlZmluZSBkZWdyZWVzIGRlbGF5ZWQgZGVsZWdhdGUgZGVsZXRlIGRlbGV0ZV9hbGwgZGVsaW1pdGVkIGRlbWFuZCBkZW5zZV9yYW5rIGRlcHRoIGRlcXVldWUgZGVzX2RlY3J5cHQgZGVzX2VuY3J5cHQgZGVzX2tleV9maWxlIGRlc2MgZGVzY3IgZGVzY3JpIGRlc2NyaWIgZGVzY3JpYmUgZGVzY3JpcHRvciBkZXRlcm1pbmlzdGljIGRpYWdub3N0aWNzIGRpZmZlcmVuY2UgZGltZW5zaW9uIGRpcmVjdF9sb2FkIGRpcmVjdG9yeSBkaXNhYmxlIGRpc2FibGVfYWxsIGRpc2FsbG93IGRpc2Fzc29jaWF0ZSBkaXNjYXJkZmlsZSBkaXNjb25uZWN0IGRpc2tncm91cCBkaXN0aW5jdCBkaXN0aW5jdHJvdyBkaXN0cmlidXRlIGRpc3RyaWJ1dGVkIGRpdiBkbyBkb2N1bWVudCBkb21haW4gZG90bmV0IGRvdWJsZSBkb3duZ3JhZGUgZHJvcCBkdW1wZmlsZSBkdXBsaWNhdGUgZHVyYXRpb24gZWFjaCBlZGl0aW9uIGVkaXRpb25hYmxlIGVkaXRpb25zIGVsZW1lbnQgZWxsaXBzaXMgZWxzZSBlbHNpZiBlbHQgZW1wdHkgZW5hYmxlIGVuYWJsZV9hbGwgZW5jbG9zZWQgZW5jb2RlIGVuY29kaW5nIGVuY3J5cHQgZW5kIGVuZC1leGVjIGVuZGlhbiBlbmZvcmNlZCBlbmdpbmUgZW5naW5lcyBlbnF1ZXVlIGVudGVycHJpc2UgZW50aXR5ZXNjYXBpbmcgZW9tb250aCBlcnJvciBlcnJvcnMgZXNjYXBlZCBldmFsbmFtZSBldmFsdWF0ZSBldmVudCBldmVudGRhdGEgZXZlbnRzIGV4Y2VwdCBleGNlcHRpb24gZXhjZXB0aW9ucyBleGNoYW5nZSBleGNsdWRlIGV4Y2x1ZGluZyBleGVjdSBleGVjdXQgZXhlY3V0ZSBleGVtcHQgZXhpc3RzIGV4aXQgZXhwIGV4cGlyZSBleHBsYWluIGV4cGxvZGUgZXhwb3J0IGV4cG9ydF9zZXQgZXh0ZW5kZWQgZXh0ZW50IGV4dGVybmFsIGV4dGVybmFsXzEgZXh0ZXJuYWxfMiBleHRlcm5hbGx5IGV4dHJhY3QgZmFpbGVkIGZhaWxlZF9sb2dpbl9hdHRlbXB0cyBmYWlsb3ZlciBmYWlsdXJlIGZhciBmYXN0IGZlYXR1cmVfc2V0IGZlYXR1cmVfdmFsdWUgZmV0Y2ggZmllbGQgZmllbGRzIGZpbGUgZmlsZV9uYW1lX2NvbnZlcnQgZmlsZXN5c3RlbV9saWtlX2xvZ2dpbmcgZmluYWwgZmluaXNoIGZpcnN0IGZpcnN0X3ZhbHVlIGZpeGVkIGZsYXNoX2NhY2hlIGZsYXNoYmFjayBmbG9vciBmbHVzaCBmb2xsb3dpbmcgZm9sbG93cyBmb3IgZm9yYWxsIGZvcmNlIGZvcmVpZ24gZm9ybSBmb3JtYSBmb3JtYXQgZm91bmQgZm91bmRfcm93cyBmcmVlbGlzdCBmcmVlbGlzdHMgZnJlZXBvb2xzIGZyZXNoIGZyb20gZnJvbV9iYXNlNjQgZnJvbV9kYXlzIGZ0cCBmdWxsIGZ1bmN0aW9uIGdlbmVyYWwgZ2VuZXJhdGVkIGdldCBnZXRfZm9ybWF0IGdldF9sb2NrIGdldGRhdGUgZ2V0dXRjZGF0ZSBnbG9iYWwgZ2xvYmFsX25hbWUgZ2xvYmFsbHkgZ28gZ290byBncmFudCBncmFudHMgZ3JlYXRlc3QgZ3JvdXAgZ3JvdXBfY29uY2F0IGdyb3VwX2lkIGdyb3VwaW5nIGdyb3VwaW5nX2lkIGdyb3VwcyBndGlkX3N1YnRyYWN0IGd1YXJhbnRlZSBndWFyZCBoYW5kbGVyIGhhc2ggaGFzaGtleXMgaGF2aW5nIGhlYSBoZWFkIGhlYWRpIGhlYWRpbiBoZWFkaW5nIGhlYXAgaGVscCBoZXggaGllcmFyY2h5IGhpZ2ggaGlnaF9wcmlvcml0eSBob3N0cyBob3VyIGhvdXJzIGh0dHAgaWQgaWRlbnRfY3VycmVudCBpZGVudF9pbmNyIGlkZW50X3NlZWQgaWRlbnRpZmllZCBpZGVudGl0eSBpZGxlX3RpbWUgaWYgaWZudWxsIGlnbm9yZSBpaWYgaWxpa2UgaWxtIGltbWVkaWF0ZSBpbXBvcnQgaW4gaW5jbHVkZSBpbmNsdWRpbmcgaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kZXhpbmcgaW5kZXh0eXBlIGluZGljYXRvciBpbmRpY2VzIGluZXQ2X2F0b24gaW5ldDZfbnRvYSBpbmV0X2F0b24gaW5ldF9udG9hIGluZmlsZSBpbml0aWFsIGluaXRpYWxpemVkIGluaXRpYWxseSBpbml0cmFucyBpbm1lbW9yeSBpbm5lciBpbm5vZGIgaW5wdXQgaW5zZXJ0IGluc3RhbGwgaW5zdGFuY2UgaW5zdGFudGlhYmxlIGluc3RyIGludGVyZmFjZSBpbnRlcmxlYXZlZCBpbnRlcnNlY3QgaW50byBpbnZhbGlkYXRlIGludmlzaWJsZSBpcyBpc19mcmVlX2xvY2sgaXNfaXB2NCBpc19pcHY0X2NvbXBhdCBpc19ub3QgaXNfbm90X251bGwgaXNfdXNlZF9sb2NrIGlzZGF0ZSBpc251bGwgaXNvbGF0aW9uIGl0ZXJhdGUgamF2YSBqb2luIGpzb24ganNvbl9leGlzdHMga2VlcCBrZWVwX2R1cGxpY2F0ZXMga2V5IGtleXMga2lsbCBsYW5ndWFnZSBsYXJnZSBsYXN0IGxhc3RfZGF5IGxhc3RfaW5zZXJ0X2lkIGxhc3RfdmFsdWUgbGF0ZXJhbCBsYXggbGNhc2UgbGVhZCBsZWFkaW5nIGxlYXN0IGxlYXZlcyBsZWZ0IGxlbiBsZW5naHQgbGVuZ3RoIGxlc3MgbGV2ZWwgbGV2ZWxzIGxpYnJhcnkgbGlrZSBsaWtlMiBsaWtlNCBsaWtlYyBsaW1pdCBsaW5lcyBsaW5rIGxpc3QgbGlzdGFnZyBsaXR0bGUgbG4gbG9hZCBsb2FkX2ZpbGUgbG9iIGxvYnMgbG9jYWwgbG9jYWx0aW1lIGxvY2FsdGltZXN0YW1wIGxvY2F0ZSBsb2NhdG9yIGxvY2sgbG9ja2VkIGxvZyBsb2cxMCBsb2cyIGxvZ2ZpbGUgbG9nZmlsZXMgbG9nZ2luZyBsb2dpY2FsIGxvZ2ljYWxfcmVhZHNfcGVyX2NhbGwgbG9nb2ZmIGxvZ29uIGxvZ3MgbG9uZyBsb29wIGxvdyBsb3dfcHJpb3JpdHkgbG93ZXIgbHBhZCBscnRyaW0gbHRyaW0gbWFpbiBtYWtlX3NldCBtYWtlZGF0ZSBtYWtldGltZSBtYW5hZ2VkIG1hbmFnZW1lbnQgbWFudWFsIG1hcCBtYXBwaW5nIG1hc2sgbWFzdGVyIG1hc3Rlcl9wb3Nfd2FpdCBtYXRjaCBtYXRjaGVkIG1hdGVyaWFsaXplZCBtYXggbWF4ZXh0ZW50cyBtYXhpbWl6ZSBtYXhpbnN0YW5jZXMgbWF4bGVuIG1heGxvZ2ZpbGVzIG1heGxvZ2hpc3RvcnkgbWF4bG9nbWVtYmVycyBtYXhzaXplIG1heHRyYW5zIG1kNSBtZWFzdXJlcyBtZWRpYW4gbWVkaXVtIG1lbWJlciBtZW1jb21wcmVzcyBtZW1vcnkgbWVyZ2UgbWljcm9zZWNvbmQgbWlkIG1pZ3JhdGlvbiBtaW4gbWluZXh0ZW50cyBtaW5pbXVtIG1pbmluZyBtaW51cyBtaW51dGUgbWludXRlcyBtaW52YWx1ZSBtaXNzaW5nIG1vZCBtb2RlIG1vZGVsIG1vZGlmaWNhdGlvbiBtb2RpZnkgbW9kdWxlIG1vbml0b3JpbmcgbW9udGggbW9udGhzIG1vdW50IG1vdmUgbW92ZW1lbnQgbXVsdGlzZXQgbXV0ZXggbmFtZSBuYW1lX2NvbnN0IG5hbWVzIG5hbiBuYXRpb25hbCBuYXRpdmUgbmF0dXJhbCBuYXYgbmNoYXIgbmNsb2IgbmVzdGVkIG5ldmVyIG5ldyBuZXdsaW5lIG5leHQgbmV4dHZhbCBubyBub193cml0ZV90b19iaW5sb2cgbm9hcmNoaXZlbG9nIG5vYXVkaXQgbm9iYWRmaWxlIG5vY2hlY2sgbm9jb21wcmVzcyBub2NvcHkgbm9jeWNsZSBub2RlbGF5IG5vZGlzY2FyZGZpbGUgbm9lbnRpdHllc2NhcGluZyBub2d1YXJhbnRlZSBub2tlZXAgbm9sb2dmaWxlIG5vbWFwcGluZyBub21heHZhbHVlIG5vbWluaW1pemUgbm9taW52YWx1ZSBub21vbml0b3Jpbmcgbm9uZSBub25lZGl0aW9uYWJsZSBub25zY2hlbWEgbm9vcmRlciBub3ByIG5vcHJvIG5vcHJvbSBub3Byb21wIG5vcHJvbXB0IG5vcmVseSBub3Jlc2V0bG9ncyBub3JldmVyc2Ugbm9ybWFsIG5vcm93ZGVwZW5kZW5jaWVzIG5vc2NoZW1hY2hlY2sgbm9zd2l0Y2ggbm90IG5vdGhpbmcgbm90aWNlIG5vdG51bGwgbm90cmltIG5vdmFsaWRhdGUgbm93IG5vd2FpdCBudGhfdmFsdWUgbnVsbGlmIG51bGxzIG51bSBudW1iIG51bWJlIG52YXJjaGFyIG52YXJjaGFyMiBvYmplY3Qgb2NpY29sbCBvY2lkYXRlIG9jaWRhdGV0aW1lIG9jaWR1cmF0aW9uIG9jaWludGVydmFsIG9jaWxvYmxvY2F0b3Igb2NpbnVtYmVyIG9jaXJlZiBvY2lyZWZjdXJzb3Igb2Npcm93aWQgb2Npc3RyaW5nIG9jaXR5cGUgb2N0IG9jdGV0X2xlbmd0aCBvZiBvZmYgb2ZmbGluZSBvZmZzZXQgb2lkIG9pZGluZGV4IG9sZCBvbiBvbmxpbmUgb25seSBvcGFxdWUgb3BlbiBvcGVyYXRpb25zIG9wZXJhdG9yIG9wdGltYWwgb3B0aW1pemUgb3B0aW9uIG9wdGlvbmFsbHkgb3Igb3JhY2xlIG9yYWNsZV9kYXRlIG9yYWRhdGEgb3JkIG9yZGF1ZGlvIG9yZGRpY29tIG9yZGRvYyBvcmRlciBvcmRpbWFnZSBvcmRpbmFsaXR5IG9yZHZpZGVvIG9yZ2FuaXphdGlvbiBvcmxhbnkgb3JsdmFyeSBvdXQgb3V0ZXIgb3V0ZmlsZSBvdXRsaW5lIG91dHB1dCBvdmVyIG92ZXJmbG93IG92ZXJyaWRpbmcgcGFja2FnZSBwYWQgcGFyYWxsZWwgcGFyYWxsZWxfZW5hYmxlIHBhcmFtZXRlcnMgcGFyZW50IHBhcnNlIHBhcnRpYWwgcGFydGl0aW9uIHBhcnRpdGlvbnMgcGFzY2FsIHBhc3NpbmcgcGFzc3dvcmQgcGFzc3dvcmRfZ3JhY2VfdGltZSBwYXNzd29yZF9sb2NrX3RpbWUgcGFzc3dvcmRfcmV1c2VfbWF4IHBhc3N3b3JkX3JldXNlX3RpbWUgcGFzc3dvcmRfdmVyaWZ5X2Z1bmN0aW9uIHBhdGNoIHBhdGggcGF0aW5kZXggcGN0aW5jcmVhc2UgcGN0dGhyZXNob2xkIHBjdHVzZWQgcGN0dmVyc2lvbiBwZXJjZW50IHBlcmNlbnRfcmFuayBwZXJjZW50aWxlX2NvbnQgcGVyY2VudGlsZV9kaXNjIHBlcmZvcm1hbmNlIHBlcmlvZCBwZXJpb2RfYWRkIHBlcmlvZF9kaWZmIHBlcm1hbmVudCBwaHlzaWNhbCBwaSBwaXBlIHBpcGVsaW5lZCBwaXZvdCBwbHVnZ2FibGUgcGx1Z2luIHBvbGljeSBwb3NpdGlvbiBwb3N0X3RyYW5zYWN0aW9uIHBvdyBwb3dlciBwcmFnbWEgcHJlYnVpbHQgcHJlY2VkZXMgcHJlY2VkaW5nIHByZWNpc2lvbiBwcmVkaWN0aW9uIHByZWRpY3Rpb25fY29zdCBwcmVkaWN0aW9uX2RldGFpbHMgcHJlZGljdGlvbl9wcm9iYWJpbGl0eSBwcmVkaWN0aW9uX3NldCBwcmVwYXJlIHByZXNlbnQgcHJlc2VydmUgcHJpb3IgcHJpb3JpdHkgcHJpdmF0ZSBwcml2YXRlX3NnYSBwcml2aWxlZ2VzIHByb2NlZHVyYWwgcHJvY2VkdXJlIHByb2NlZHVyZV9hbmFseXplIHByb2Nlc3NsaXN0IHByb2ZpbGVzIHByb2plY3QgcHJvbXB0IHByb3RlY3Rpb24gcHVibGljIHB1Ymxpc2hpbmdzZXJ2ZXJuYW1lIHB1cmdlIHF1YXJ0ZXIgcXVlcnkgcXVpY2sgcXVpZXNjZSBxdW90YSBxdW90ZW5hbWUgcmFkaWFucyByYWlzZSByYW5kIHJhbmdlIHJhbmsgcmF3IHJlYWQgcmVhZHMgcmVhZHNpemUgcmVidWlsZCByZWNvcmQgcmVjb3JkcyByZWNvdmVyIHJlY292ZXJ5IHJlY3Vyc2l2ZSByZWN5Y2xlIHJlZG8gcmVkdWNlZCByZWYgcmVmZXJlbmNlIHJlZmVyZW5jZWQgcmVmZXJlbmNlcyByZWZlcmVuY2luZyByZWZyZXNoIHJlZ2V4cF9saWtlIHJlZ2lzdGVyIHJlZ3JfYXZneCByZWdyX2F2Z3kgcmVncl9jb3VudCByZWdyX2ludGVyY2VwdCByZWdyX3IyIHJlZ3Jfc2xvcGUgcmVncl9zeHggcmVncl9zeHkgcmVqZWN0IHJla2V5IHJlbGF0aW9uYWwgcmVsYXRpdmUgcmVsYXlsb2cgcmVsZWFzZSByZWxlYXNlX2xvY2sgcmVsaWVzX29uIHJlbG9jYXRlIHJlbHkgcmVtIHJlbWFpbmRlciByZW5hbWUgcmVwYWlyIHJlcGVhdCByZXBsYWNlIHJlcGxpY2F0ZSByZXBsaWNhdGlvbiByZXF1aXJlZCByZXNldCByZXNldGxvZ3MgcmVzaXplIHJlc291cmNlIHJlc3BlY3QgcmVzdG9yZSByZXN0cmljdGVkIHJlc3VsdCByZXN1bHRfY2FjaGUgcmVzdW1hYmxlIHJlc3VtZSByZXRlbnRpb24gcmV0dXJuIHJldHVybmluZyByZXR1cm5zIHJldXNlIHJldmVyc2UgcmV2b2tlIHJpZ2h0IHJsaWtlIHJvbGUgcm9sZXMgcm9sbGJhY2sgcm9sbGluZyByb2xsdXAgcm91bmQgcm93IHJvd19jb3VudCByb3dkZXBlbmRlbmNpZXMgcm93aWQgcm93bnVtIHJvd3MgcnRyaW0gcnVsZXMgc2FmZSBzYWx0IHNhbXBsZSBzYXZlIHNhdmVwb2ludCBzYjEgc2IyIHNiNCBzY2FuIHNjaGVtYSBzY2hlbWFjaGVjayBzY24gc2NvcGUgc2Nyb2xsIHNkb19nZW9yYXN0ZXIgc2RvX3RvcG9fZ2VvbWV0cnkgc2VhcmNoIHNlY190b190aW1lIHNlY29uZCBzZWNvbmRzIHNlY3Rpb24gc2VjdXJlZmlsZSBzZWN1cml0eSBzZWVkIHNlZ21lbnQgc2VsZWN0IHNlbGYgc2VtaSBzZXF1ZW5jZSBzZXF1ZW50aWFsIHNlcmlhbGl6YWJsZSBzZXJ2ZXIgc2VydmVyZXJyb3Igc2Vzc2lvbiBzZXNzaW9uX3VzZXIgc2Vzc2lvbnNfcGVyX3VzZXIgc2V0IHNldHMgc2V0dGluZ3Mgc2hhIHNoYTEgc2hhMiBzaGFyZSBzaGFyZWQgc2hhcmVkX3Bvb2wgc2hvcnQgc2hvdyBzaHJpbmsgc2h1dGRvd24gc2lfYXZlcmFnZWNvbG9yIHNpX2NvbG9yaGlzdG9ncmFtIHNpX2ZlYXR1cmVsaXN0IHNpX3Bvc2l0aW9uYWxjb2xvciBzaV9zdGlsbGltYWdlIHNpX3RleHR1cmUgc2libGluZ3Mgc2lkIHNpZ24gc2luIHNpemUgc2l6ZV90IHNpemVzIHNraXAgc2xhdmUgc2xlZXAgc21hbGxkYXRldGltZWZyb21wYXJ0cyBzbWFsbGZpbGUgc25hcHNob3Qgc29tZSBzb25hbWUgc29ydCBzb3VuZGV4IHNvdXJjZSBzcGFjZSBzcGFyc2Ugc3BmaWxlIHNwbGl0IHNxbCBzcWxfYmlnX3Jlc3VsdCBzcWxfYnVmZmVyX3Jlc3VsdCBzcWxfY2FjaGUgc3FsX2NhbGNfZm91bmRfcm93cyBzcWxfc21hbGxfcmVzdWx0IHNxbF92YXJpYW50X3Byb3BlcnR5IHNxbGNvZGUgc3FsZGF0YSBzcWxlcnJvciBzcWxuYW1lIHNxbHN0YXRlIHNxcnQgc3F1YXJlIHN0YW5kYWxvbmUgc3RhbmRieSBzdGFydCBzdGFydGluZyBzdGFydHVwIHN0YXRlbWVudCBzdGF0aWMgc3RhdGlzdGljcyBzdGF0c19iaW5vbWlhbF90ZXN0IHN0YXRzX2Nyb3NzdGFiIHN0YXRzX2tzX3Rlc3Qgc3RhdHNfbW9kZSBzdGF0c19td190ZXN0IHN0YXRzX29uZV93YXlfYW5vdmEgc3RhdHNfdF90ZXN0XyBzdGF0c190X3Rlc3RfaW5kZXAgc3RhdHNfdF90ZXN0X29uZSBzdGF0c190X3Rlc3RfcGFpcmVkIHN0YXRzX3dzcl90ZXN0IHN0YXR1cyBzdGQgc3RkZGV2IHN0ZGRldl9wb3Agc3RkZGV2X3NhbXAgc3RkZXYgc3RvcCBzdG9yYWdlIHN0b3JlIHN0b3JlZCBzdHIgc3RyX3RvX2RhdGUgc3RyYWlnaHRfam9pbiBzdHJjbXAgc3RyaWN0IHN0cmluZyBzdHJ1Y3Qgc3R1ZmYgc3R5bGUgc3ViZGF0ZSBzdWJwYXJ0aXRpb24gc3VicGFydGl0aW9ucyBzdWJzdGl0dXRhYmxlIHN1YnN0ciBzdWJzdHJpbmcgc3VidGltZSBzdWJ0cmluZ19pbmRleCBzdWJ0eXBlIHN1Y2Nlc3Mgc3VtIHN1c3BlbmQgc3dpdGNoIHN3aXRjaG9mZnNldCBzd2l0Y2hvdmVyIHN5bmMgc3luY2hyb25vdXMgc3lub255bSBzeXMgc3lzX3htbGFnZyBzeXNhc20gc3lzYXV4IHN5c2RhdGUgc3lzZGF0ZXRpbWVvZmZzZXQgc3lzZGJhIHN5c29wZXIgc3lzdGVtIHN5c3RlbV91c2VyIHN5c3V0Y2RhdGV0aW1lIHRhYmxlIHRhYmxlcyB0YWJsZXNwYWNlIHRhYmxlc2FtcGxlIHRhbiB0ZG8gdGVtcGxhdGUgdGVtcG9yYXJ5IHRlcm1pbmF0ZWQgdGVydGlhcnlfd2VpZ2h0cyB0ZXN0IHRoYW4gdGhlbiB0aHJlYWQgdGhyb3VnaCB0aWVyIHRpZXMgdGltZSB0aW1lX2Zvcm1hdCB0aW1lX3pvbmUgdGltZWRpZmYgdGltZWZyb21wYXJ0cyB0aW1lb3V0IHRpbWVzdGFtcCB0aW1lc3RhbXBhZGQgdGltZXN0YW1wZGlmZiB0aW1lem9uZV9hYmJyIHRpbWV6b25lX21pbnV0ZSB0aW1lem9uZV9yZWdpb24gdG8gdG9fYmFzZTY0IHRvX2RhdGUgdG9fZGF5cyB0b19zZWNvbmRzIHRvZGF0ZXRpbWVvZmZzZXQgdHJhY2UgdHJhY2tpbmcgdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb25hbCB0cmFuc2xhdGUgdHJhbnNsYXRpb24gdHJlYXQgdHJpZ2dlciB0cmlnZ2VyX25lc3RsZXZlbCB0cmlnZ2VycyB0cmltIHRydW5jYXRlIHRyeV9jYXN0IHRyeV9jb252ZXJ0IHRyeV9wYXJzZSB0eXBlIHViMSB1YjIgdWI0IHVjYXNlIHVuYXJjaGl2ZWQgdW5ib3VuZGVkIHVuY29tcHJlc3MgdW5kZXIgdW5kbyB1bmhleCB1bmljb2RlIHVuaWZvcm0gdW5pbnN0YWxsIHVuaW9uIHVuaXF1ZSB1bml4X3RpbWVzdGFtcCB1bmtub3duIHVubGltaXRlZCB1bmxvY2sgdW5uZXN0IHVucGl2b3QgdW5yZWNvdmVyYWJsZSB1bnNhZmUgdW5zaWduZWQgdW50aWwgdW50cnVzdGVkIHVudXNhYmxlIHVudXNlZCB1cGRhdGUgdXBkYXRlZCB1cGdyYWRlIHVwcGVkIHVwcGVyIHVwc2VydCB1cmwgdXJvd2lkIHVzYWJsZSB1c2FnZSB1c2UgdXNlX3N0b3JlZF9vdXRsaW5lcyB1c2VyIHVzZXJfZGF0YSB1c2VyX3Jlc291cmNlcyB1c2VycyB1c2luZyB1dGNfZGF0ZSB1dGNfdGltZXN0YW1wIHV1aWQgdXVpZF9zaG9ydCB2YWxpZGF0ZSB2YWxpZGF0ZV9wYXNzd29yZF9zdHJlbmd0aCB2YWxpZGF0aW9uIHZhbGlzdCB2YWx1ZSB2YWx1ZXMgdmFyIHZhcl9zYW1wIHZhcmNoYXJjIHZhcmkgdmFyaWEgdmFyaWFiIHZhcmlhYmwgdmFyaWFibGUgdmFyaWFibGVzIHZhcmlhbmNlIHZhcnAgdmFycmF3IHZhcnJhd2MgdmFycmF5IHZlcmlmeSB2ZXJzaW9uIHZlcnNpb25zIHZpZXcgdmlydHVhbCB2aXNpYmxlIHZvaWQgd2FpdCB3YWxsZXQgd2FybmluZyB3YXJuaW5ncyB3ZWVrIHdlZWtkYXkgd2Vla29meWVhciB3ZWxsZm9ybWVkIHdoZW4gd2hlbmUgd2hlbmV2IHdoZW5ldmUgd2hlbmV2ZXIgd2hlcmUgd2hpbGUgd2hpdGVzcGFjZSB3aW5kb3cgd2l0aCB3aXRoaW4gd2l0aG91dCB3b3JrIHdyYXBwZWQgeGRiIHhtbCB4bWxhZ2cgeG1sYXR0cmlidXRlcyB4bWxjYXN0IHhtbGNvbGF0dHZhbCB4bWxlbGVtZW50IHhtbGV4aXN0cyB4bWxmb3Jlc3QgeG1saW5kZXggeG1sbmFtZXNwYWNlcyB4bWxwaSB4bWxxdWVyeSB4bWxyb290IHhtbHNjaGVtYSB4bWxzZXJpYWxpemUgeG1sdGFibGUgeG1sdHlwZSB4b3IgeWVhciB5ZWFyX3RvX21vbnRoIHllYXJzIHllYXJ3ZWVrIiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIHVua25vd24iLApidWlsdF9pbjoiYXJyYXkgYmlnaW50IGJpbmFyeSBiaXQgYmxvYiBib29sIGJvb2xlYW4gY2hhciBjaGFyYWN0ZXIgZGF0ZSBkZWMgZGVjaW1hbCBmbG9hdCBpbnQgaW50OCBpbnRlZ2VyIGludGVydmFsIG51bWJlciBudW1lcmljIHJlYWwgcmVjb3JkIHNlcmlhbCBzZXJpYWw4IHNtYWxsaW50IHRleHQgdGltZSB0aW1lc3RhbXAgdGlueWludCB2YXJjaGFyIHZhcmNoYXIyIHZhcnlpbmcgdm9pZCIKfSxjb250YWluczpbe2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiJyIsZW5kOiInIixjb250YWluczpbe2JlZ2luOiInJyJ9XX0sewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46JyInLGVuZDonIicsY29udGFpbnM6W3tiZWdpbjonIiInfV19LHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiJgIixlbmQ6ImAiCn0sZS5DX05VTUJFUl9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsdCxlLkhBU0hfQ09NTUVOVF9NT0RFXQp9LGUuQ19CTE9DS19DT01NRU5UX01PREUsdCxlLkhBU0hfQ09NTUVOVF9NT0RFXX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJsYXRleCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57Y29uc3Qgbj1bewpiZWdpbjovXF57Nn1bMC05YS1mXXs2fS99LHtiZWdpbjovXF57NX1bMC05YS1mXXs1fS99LHtiZWdpbjovXF57NH1bMC05YS1mXXs0fS8KfSx7YmVnaW46L1xeezN9WzAtOWEtZl17M30vfSx7YmVnaW46L1xeezJ9WzAtOWEtZl17Mn0vfSx7CmJlZ2luOi9cXnsyfVtcdTAwMDAtXHUwMDdmXS99XSxhPVt7Y2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjovXFwvLHJlbGV2YW5jZTowLApjb250YWluczpbe2VuZHNQYXJlbnQ6ITAsYmVnaW46KCguLi5lKT0+IigiK2UubWFwKChlPT57CnJldHVybihuPWUpPyJzdHJpbmciPT10eXBlb2Ygbj9uOm4uc291cmNlOm51bGw7dmFyIG4KfSkpLmpvaW4oInwiKSsiKSIpKC4uLlsiKD86TmVlZHNUZVhGb3JtYXR8UmVxdWlyZVBhY2thZ2V8R2V0SWRJbmZvKSIsIlByb3ZpZGVzKD86RXhwbCk/KD86UGFja2FnZXxDbGFzc3xGaWxlKSIsIig/OkRlY2xhcmVPcHRpb258UHJvY2Vzc09wdGlvbnMpIiwiKD86ZG9jdW1lbnRjbGFzc3x1c2VwYWNrYWdlfGlucHV0fGluY2x1ZGUpIiwibWFrZWF0KD86bGV0dGVyfG90aGVyKSIsIkV4cGxTeW50YXgoPzpPbnxPZmYpIiwiKD86bmV3fHJlbmV3fHByb3ZpZGUpP2NvbW1hbmQiLCIoPzpyZSluZXdlbnZpcm9ubWVudCIsIig/Ok5ld3xSZW5ld3xQcm92aWRlfERlY2xhcmUpKD86RXhwYW5kYWJsZSk/RG9jdW1lbnRDb21tYW5kIiwiKD86TmV3fFJlbmV3fFByb3ZpZGV8RGVjbGFyZSlEb2N1bWVudEVudmlyb25tZW50IiwiKD86KD86ZXxnfHgpP2RlZnxsZXQpIiwiKD86YmVnaW58ZW5kKSIsIig/OnBhcnR8Y2hhcHRlcnwoPzpzdWIpezAsMn1zZWN0aW9ufCg/OnN1Yik/cGFyYWdyYXBoKSIsImNhcHRpb24iLCIoPzpsYWJlbHwoPzplcXxwYWdlfG5hbWUpP3JlZnwoPzpwYXJlbnxmb290fHN1cGVyKT9jaXRlKSIsIig/OmFscGhhfGJldGF8W0dnXWFtbWF8W0RkXWVsdGF8KD86dmFyKT9lcHNpbG9ufHpldGF8ZXRhfFtUdF1oZXRhfHZhcnRoZXRhKSIsIig/OmlvdGF8KD86dmFyKT9rYXBwYXxbTGxdYW1iZGF8bXV8bnV8W1h4XWl8W1BwXWl8dmFycGl8KD86dmFyKXJobykiLCIoPzpbU3NdaWdtYXx2YXJzaWdtYXx0YXV8W1V1XXBzaWxvbnxbUHBdaGl8dmFycGhpfGNoaXxbUHBdc2l8W09vXW1lZ2EpIiwiKD86ZnJhY3xzdW18cHJvZHxsaW18aW5mdHl8dGltZXN8c3FydHxsZXF8Z2VxfGxlZnR8cmlnaHR8bWlkZGxlfFtiQl1pZ2c/KSIsIig/Oltscl1hbmdsZXxxP3F1YWR8W2xjdmRpXT9kb3RzfGQ/ZG90fGhhdHx0aWxkZXxiYXIpIl0ubWFwKChlPT5lKyIoPyFbYS16QS1aQDpfXSkiKSkpCn0se2VuZHNQYXJlbnQ6ITAsCmJlZ2luOlJlZ0V4cChbIig/Ol9fKT9bYS16QS1aXXsyLH1fW2EtekEtWl0oPzpfP1thLXpBLVpdKSs6W2EtekEtWl0qIiwiW2xnY11fXz9bYS16QS1aXSg/Ol8/W2EtekEtWl0pKl9bYS16QS1aXXsyLH0iLCJbcXNdX18/W2EtekEtWl0oPzpfP1thLXpBLVpdKSsiLCJ1c2UoPzpfaSk/OlthLXpBLVpdKiIsIig/OmVsc2V8Zml8b3IpOiIsIig/OmlmfGNzfGV4cCk6dyIsIig/Omhib3h8dmJveCk6biIsIjo6W2EtekEtWl1fdW5icmFjZWQiLCI6OlthLXpBLVo6XSJdLm1hcCgoZT0+ZSsiKD8hW2EtekEtWjpfXSkiKSkuam9pbigifCIpKQp9LHtlbmRzUGFyZW50OiEwLHZhcmlhbnRzOm59LHtlbmRzUGFyZW50OiEwLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7CmJlZ2luOi9bYS16QS1aQF0rL30se2JlZ2luOi9bXmEtekEtWkBdPy99XX1dfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLHJlbGV2YW5jZTowLApiZWdpbjovIytcZD8vfSx7dmFyaWFudHM6bn0se2NsYXNzTmFtZToiYnVpbHRfaW4iLHJlbGV2YW5jZTowLGJlZ2luOi9bJCZeX10vfSx7CmNsYXNzTmFtZToibWV0YSIsYmVnaW46IiUgIVRlWCIsZW5kOiIkIixyZWxldmFuY2U6MTB9LGUuQ09NTUVOVCgiJSIsIiQiLHsKcmVsZXZhbmNlOjB9KV0saT17YmVnaW46L1x7LyxlbmQ6L1x9LyxyZWxldmFuY2U6MCxjb250YWluczpbInNlbGYiLC4uLmFdCn0sdD1lLmluaGVyaXQoaSx7cmVsZXZhbmNlOjAsZW5kc1BhcmVudDohMCxjb250YWluczpbaSwuLi5hXX0pLHI9e2JlZ2luOi9cWy8sCmVuZDovXF0vLGVuZHNQYXJlbnQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W2ksLi4uYV19LHM9e2JlZ2luOi9ccysvLHJlbGV2YW5jZTowCn0sYz1bdF0sbD1bcl0sbz0oZSxuKT0+KHtjb250YWluczpbc10sc3RhcnRzOntyZWxldmFuY2U6MCxjb250YWluczplLHN0YXJ0czpufQp9KSxkPShlLG4pPT4oe2JlZ2luOiJcXFxcIitlKyIoPyFbYS16QS1aQDpfXSkiLGtleXdvcmRzOnskcGF0dGVybjovXFxbYS16QS1aXSsvLAprZXl3b3JkOiJcXCIrZX0scmVsZXZhbmNlOjAsY29udGFpbnM6W3NdLHN0YXJ0czpufSksZz0obixhKT0+ZS5pbmhlcml0KHsKYmVnaW46IlxcXFxiZWdpbig/PVsgXHRdKihcXHI/XFxuWyBcdF0qKT9cXHsiK24rIlxcfSkiLGtleXdvcmRzOnsKJHBhdHRlcm46L1xcW2EtekEtWl0rLyxrZXl3b3JkOiJcXGJlZ2luIn0scmVsZXZhbmNlOjAKfSxvKGMsYSkpLG09KG49InN0cmluZyIpPT5lLkVORF9TQU1FX0FTX0JFR0lOKHtjbGFzc05hbWU6bixiZWdpbjovKC58XHI/XG4pLywKZW5kOi8oLnxccj9cbikvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGVuZHNQYXJlbnQ6ITB9KSxiPWU9Pih7CmNsYXNzTmFtZToic3RyaW5nIixlbmQ6Iig/PVxcXFxlbmRcXHsiK2UrIlxcfSkifSkscD0oZT0ic3RyaW5nIik9Pih7cmVsZXZhbmNlOjAsCmJlZ2luOi9cey8sc3RhcnRzOntlbmRzUGFyZW50OiEwLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOmUsZW5kOi8oPz1cfSkvLAplbmRzUGFyZW50OiEwLGNvbnRhaW5zOlt7YmVnaW46L1x7LyxlbmQ6L1x9LyxyZWxldmFuY2U6MCxjb250YWluczpbInNlbGYiXX1dfV19Cn0pO3JldHVybntuYW1lOiJMYVRlWCIsYWxpYXNlczpbIlRlWCJdLApjb250YWluczpbLi4uWyJ2ZXJiIiwibHN0aW5saW5lIl0ubWFwKChlPT5kKGUse2NvbnRhaW5zOlttKCldfSkpKSxkKCJtaW50IixvKGMsewpjb250YWluczpbbSgpXX0pKSxkKCJtaW50aW5saW5lIixvKGMse2NvbnRhaW5zOltwKCksbSgpXX0pKSxkKCJ1cmwiLHsKY29udGFpbnM6W3AoImxpbmsiKSxwKCJsaW5rIildfSksZCgiaHlwZXJyZWYiLHtjb250YWluczpbcCgibGluayIpXQp9KSxkKCJocmVmIixvKGwse2NvbnRhaW5zOltwKCJsaW5rIildCn0pKSwuLi5bXS5jb25jYXQoLi4uWyIiLCJcXCoiXS5tYXAoKGU9PltnKCJ2ZXJiYXRpbSIrZSxiKCJ2ZXJiYXRpbSIrZSkpLGcoImZpbGVjb250ZW50cyIrZSxvKGMsYigiZmlsZWNvbnRlbnRzIitlKSkpLC4uLlsiIiwiQiIsIkwiXS5tYXAoKG49PmcobisiVmVyYmF0aW0iK2UsbyhsLGIobisiVmVyYmF0aW0iK2UpKSkpKV0pKSksZygibWludGVkIixvKGwsbyhjLGIoIm1pbnRlZCIpKSkpLC4uLmFdCn19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJnbyIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57Y29uc3Qgbj17CmtleXdvcmQ6ImJyZWFrIGRlZmF1bHQgZnVuYyBpbnRlcmZhY2Ugc2VsZWN0IGNhc2UgbWFwIHN0cnVjdCBjaGFuIGVsc2UgZ290byBwYWNrYWdlIHN3aXRjaCBjb25zdCBmYWxsdGhyb3VnaCBpZiByYW5nZSB0eXBlIGNvbnRpbnVlIGZvciBpbXBvcnQgcmV0dXJuIHZhciBnbyBkZWZlciBib29sIGJ5dGUgY29tcGxleDY0IGNvbXBsZXgxMjggZmxvYXQzMiBmbG9hdDY0IGludDggaW50MTYgaW50MzIgaW50NjQgc3RyaW5nIHVpbnQ4IHVpbnQxNiB1aW50MzIgdWludDY0IGludCB1aW50IHVpbnRwdHIgcnVuZSIsCmxpdGVyYWw6InRydWUgZmFsc2UgaW90YSBuaWwiLApidWlsdF9pbjoiYXBwZW5kIGNhcCBjbG9zZSBjb21wbGV4IGNvcHkgaW1hZyBsZW4gbWFrZSBuZXcgcGFuaWMgcHJpbnQgcHJpbnRsbiByZWFsIHJlY292ZXIgZGVsZXRlIgp9O3JldHVybntuYW1lOiJHbyIsYWxpYXNlczpbImdvbGFuZyJdLGtleXdvcmRzOm4saWxsZWdhbDoiPC8iLApjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToic3RyaW5nIiwKdmFyaWFudHM6W2UuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLHtiZWdpbjoiYCIsZW5kOiJgIn1dfSx7CmNsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbe2JlZ2luOmUuQ19OVU1CRVJfUkUrIltpXSIscmVsZXZhbmNlOjEKfSxlLkNfTlVNQkVSX01PREVdfSx7YmVnaW46Lzo9L30se2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmMiLAplbmQ6IlxccyooXFx7fCQpIixleGNsdWRlRW5kOiEwLGNvbnRhaW5zOltlLlRJVExFX01PREUse2NsYXNzTmFtZToicGFyYW1zIiwKYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3JkczpuLGlsbGVnYWw6L1siJ10vfV19XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJydWJ5IiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSguLi5lKXsKcmV0dXJuIGUubWFwKChlPT57cmV0dXJuKG49ZSk/InN0cmluZyI9PXR5cGVvZiBuP246bi5zb3VyY2U6bnVsbDt2YXIgbgp9KSkuam9pbigiIil9cmV0dXJuIG49PnsKdmFyIGEsaT0iKFthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1AfDw8fD4+fD1+fD09PT98PD0+fFs8Pl09P3xcXCpcXCp8Wy0vKyVeJip+YHxdfFxcW1xcXT0/KSIscz17CmtleXdvcmQ6ImFuZCB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIGlmIEJFR0lOIHJldHJ5IGVuZCBmb3Igc2VsZiB3aGVuIG5leHQgdW50aWwgZG8gYmVnaW4gdW5sZXNzIEVORCByZXNjdWUgZWxzZSBicmVhayB1bmRlZiBub3Qgc3VwZXIgY2xhc3MgY2FzZSByZXF1aXJlIHlpZWxkIGFsaWFzIHdoaWxlIGVuc3VyZSBlbHNpZiBvciBpbmNsdWRlIGF0dHJfcmVhZGVyIGF0dHJfd3JpdGVyIGF0dHJfYWNjZXNzb3IgX19GSUxFX18iLApidWlsdF9pbjoicHJvYyBsYW1iZGEiLGxpdGVyYWw6InRydWUgZmFsc2UgbmlsIn0scj17Y2xhc3NOYW1lOiJkb2N0YWciLApiZWdpbjoiQFtBLVphLXpdKyJ9LGI9e2JlZ2luOiIjPCIsZW5kOiI+In0sdD1bbi5DT01NRU5UKCIjIiwiJCIse2NvbnRhaW5zOltyXQp9KSxuLkNPTU1FTlQoIl49YmVnaW4iLCJePWVuZCIse2NvbnRhaW5zOltyXSxyZWxldmFuY2U6MTAKfSksbi5DT01NRU5UKCJeX19FTkRfXyIsIlxcbiQiKV0sYz17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46LyNcey8sZW5kOi9cfS8sCmtleXdvcmRzOnN9LGQ9e2NsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbbi5CQUNLU0xBU0hfRVNDQVBFLGNdLHZhcmlhbnRzOlt7CmJlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi99LHtiZWdpbjovYC8sZW5kOi9gL30se2JlZ2luOi8lW3FRd1d4XT9cKC8sCmVuZDovXCkvfSx7YmVnaW46LyVbcVF3V3hdP1xbLyxlbmQ6L1xdL30se2JlZ2luOi8lW3FRd1d4XT9cey8sZW5kOi9cfS99LHsKYmVnaW46LyVbcVF3V3hdPzwvLGVuZDovPi99LHtiZWdpbjovJVtxUXdXeF0/XC8vLGVuZDovXC8vfSx7YmVnaW46LyVbcVF3V3hdPyUvLAplbmQ6LyUvfSx7YmVnaW46LyVbcVF3V3hdPy0vLGVuZDovLS99LHtiZWdpbjovJVtxUXdXeF0/XHwvLGVuZDovXHwvfSx7CmJlZ2luOi9cQlw/KFxcXGR7MSwzfXxcXHhbQS1GYS1mMC05XXsxLDJ9fFxcdVtBLUZhLWYwLTldezR9fFxcP1xTKVxiL30sewpiZWdpbjovPDxbLX5dPyc/KFx3Kylcbig/OlteXG5dKlxuKSo/XHMqXDFcYi8scmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3sKYmVnaW46Lzw8Wy1+XT8nPy99LG4uRU5EX1NBTUVfQVNfQkVHSU4oe2JlZ2luOi8oXHcrKS8sZW5kOi8oXHcrKS8sCmNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEUsY119KV19XX0sZz0iWzAtOV0oXz9bMC05XSkqIixsPXtjbGFzc05hbWU6Im51bWJlciIsCnJlbGV2YW5jZTowLHZhcmlhbnRzOlt7CmJlZ2luOmBcXGIoWzEtOV0oXz9bMC05XSkqfDApKFxcLigke2d9KSk/KFtlRV1bKy1dPygke2d9KXxyKT9pP1xcYmB9LHsKYmVnaW46IlxcYjBbZERdWzAtOV0oXz9bMC05XSkqcj9pP1xcYiJ9LHtiZWdpbjoiXFxiMFtiQl1bMC0xXShfP1swLTFdKSpyP2k/XFxiIgp9LHtiZWdpbjoiXFxiMFtvT11bMC03XShfP1swLTddKSpyP2k/XFxiIn0sewpiZWdpbjoiXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpyP2k/XFxiIn0sewpiZWdpbjoiXFxiMChfP1swLTddKStyP2k/XFxiIn1dfSxvPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46IlxcKCIsZW5kOiJcXCkiLAplbmRzUGFyZW50OiEwLGtleXdvcmRzOnN9LF89W2Qse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIG1vZHVsZSIsCmVuZDoiJHw7IixpbGxlZ2FsOi89Lyxjb250YWluczpbbi5pbmhlcml0KG4uVElUTEVfTU9ERSx7CmJlZ2luOiJbQS1aYS16X11cXHcqKDo6XFx3KykqKFxcP3whKT8ifSkse2JlZ2luOiI8XFxzKiIsY29udGFpbnM6W3sKYmVnaW46IigiK24uSURFTlRfUkUrIjo6KT8iK24uSURFTlRfUkV9XX1dLmNvbmNhdCh0KX0se2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjplKC9kZWZccyovLChhPWkrIlxccyooXFwofDt8JCkiLGUoIig/PSIsYSwiKSIpKSksa2V5d29yZHM6ImRlZiIsZW5kOiIkfDsiLApjb250YWluczpbbi5pbmhlcml0KG4uVElUTEVfTU9ERSx7YmVnaW46aX0pLG9dLmNvbmNhdCh0KX0se2JlZ2luOm4uSURFTlRfUkUrIjo6Igp9LHtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46bi5VTkRFUlNDT1JFX0lERU5UX1JFKyIoIXxcXD8pPzoiLHJlbGV2YW5jZTowfSx7CmNsYXNzTmFtZToic3ltYm9sIixiZWdpbjoiOig/IVxccykiLGNvbnRhaW5zOltkLHtiZWdpbjppfV0scmVsZXZhbmNlOjB9LGwsewpjbGFzc05hbWU6InZhcmlhYmxlIiwKYmVnaW46IihcXCRcXFcpfCgoXFwkfEBAPykoXFx3KykpKD89W15AJD9dKSg/IVtBLVphLXpdKSg/IVtAJD8nXSkifSx7CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXHwvLGVuZDovXHwvLHJlbGV2YW5jZTowLGtleXdvcmRzOnN9LHsKYmVnaW46IigiK24uUkVfU1RBUlRFUlNfUkUrInx1bmxlc3MpXFxzKiIsa2V5d29yZHM6InVubGVzcyIsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJyZWdleHAiLGNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEUsY10saWxsZWdhbDovXG4vLHZhcmlhbnRzOlt7CmJlZ2luOiIvIixlbmQ6Ii9bYS16XSoifSx7YmVnaW46LyVyXHsvLGVuZDovXH1bYS16XSovfSx7YmVnaW46IiVyXFwoIiwKZW5kOiJcXClbYS16XSoifSx7YmVnaW46IiVyISIsZW5kOiIhW2Etel0qIn0se2JlZ2luOiIlclxcWyIsZW5kOiJcXF1bYS16XSoifV0KfV0uY29uY2F0KGIsdCkscmVsZXZhbmNlOjB9XS5jb25jYXQoYix0KTtjLmNvbnRhaW5zPV8sby5jb250YWlucz1fO3ZhciBFPVt7CmJlZ2luOi9eXHMqPT4vLHN0YXJ0czp7ZW5kOiIkIixjb250YWluczpffX0se2NsYXNzTmFtZToibWV0YSIsCmJlZ2luOiJeKFs+P10+fFtcXHcjXStcXChcXHcrXFwpOlxcZCs6XFxkKz58KFxcdystKT9cXGQrXFwuXFxkK1xcLlxcZCsocFxcZCspP1teXFxkXVtePl0rPikoPz1bIF0pIiwKc3RhcnRzOntlbmQ6IiQiLGNvbnRhaW5zOl99fV07cmV0dXJuIHQudW5zaGlmdChiKSx7bmFtZToiUnVieSIsCmFsaWFzZXM6WyJyYiIsImdlbXNwZWMiLCJwb2RzcGVjIiwidGhvciIsImlyYiJdLGtleXdvcmRzOnMsaWxsZWdhbDovXC9cKi8sCmNvbnRhaW5zOltuLlNIRUJBTkcoe2JpbmFyeToicnVieSJ9KV0uY29uY2F0KEUpLmNvbmNhdCh0KS5jb25jYXQoXyl9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgianVsaWEiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+ewp2YXIgcj0iW0EtWmEtel9cXHUwMEExLVxcdUZGRkZdW0EtWmEtel8wLTlcXHUwMEExLVxcdUZGRkZdKiIsdD17JHBhdHRlcm46ciwKa2V5d29yZDoiYmFyZW1vZHVsZSBiZWdpbiBicmVhayBjYXRjaCBjY2FsbCBjb25zdCBjb250aW51ZSBkbyBlbHNlIGVsc2VpZiBlbmQgZXhwb3J0IGZhbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGdsb2JhbCBpZiBpbXBvcnQgaW4gaXNhIGxldCBsb2NhbCBtYWNybyBtb2R1bGUgcXVvdGUgcmV0dXJuIHRydWUgdHJ5IHVzaW5nIHdoZXJlIHdoaWxlIiwKbGl0ZXJhbDoiQVJHUyBDX05VTEwgREVQT1RfUEFUSCBFTkRJQU5fQk9NIEVOViBJbmYgSW5mMTYgSW5mMzIgSW5mNjQgSW5zZXJ0aW9uU29ydCBMT0FEX1BBVEggTWVyZ2VTb3J0IE5hTiBOYU4xNiBOYU4zMiBOYU42NCBQUk9HUkFNX0ZJTEUgUXVpY2tTb3J0IFJvdW5kRG93biBSb3VuZEZyb21aZXJvIFJvdW5kTmVhcmVzdCBSb3VuZE5lYXJlc3RUaWVzQXdheSBSb3VuZE5lYXJlc3RUaWVzVXAgUm91bmRUb1plcm8gUm91bmRVcCBWRVJTSU9OfDAgZGV2bnVsbCBmYWxzZSBpbSBtaXNzaW5nIG5vdGhpbmcgcGkgc3RkZXJyIHN0ZGluIHN0ZG91dCB0cnVlIHVuZGVmIFx1MDNjMCBcdTIxMmYiLApidWlsdF9pbjoiQWJzdHJhY3RBcnJheSBBYnN0cmFjdENoYW5uZWwgQWJzdHJhY3RDaGFyIEFic3RyYWN0RGljdCBBYnN0cmFjdERpc3BsYXkgQWJzdHJhY3RGbG9hdCBBYnN0cmFjdElycmF0aW9uYWwgQWJzdHJhY3RNYXRyaXggQWJzdHJhY3RSYW5nZSBBYnN0cmFjdFNldCBBYnN0cmFjdFN0cmluZyBBYnN0cmFjdFVuaXRSYW5nZSBBYnN0cmFjdFZlY09yTWF0IEFic3RyYWN0VmVjdG9yIEFueSBBcmd1bWVudEVycm9yIEFycmF5IEFzc2VydGlvbkVycm9yIEJpZ0Zsb2F0IEJpZ0ludCBCaXRBcnJheSBCaXRNYXRyaXggQml0U2V0IEJpdFZlY3RvciBCb29sIEJvdW5kc0Vycm9yIENhcHR1cmVkRXhjZXB0aW9uIENhcnRlc2lhbkluZGV4IENhcnRlc2lhbkluZGljZXMgQ2NoYXIgQ2RvdWJsZSBDZmxvYXQgQ2hhbm5lbCBDaGFyIENpbnQgQ2ludG1heF90IENsb25nIENsb25nbG9uZyBDbWQgQ29sb24gQ29tcGxleCBDb21wbGV4RjE2IENvbXBsZXhGMzIgQ29tcGxleEY2NCBDb21wb3NpdGVFeGNlcHRpb24gQ29uZGl0aW9uIENwdHJkaWZmX3QgQ3Nob3J0IENzaXplX3QgQ3NzaXplX3QgQ3N0cmluZyBDdWNoYXIgQ3VpbnQgQ3VpbnRtYXhfdCBDdWxvbmcgQ3Vsb25nbG9uZyBDdXNob3J0IEN2b2lkIEN3Y2hhcl90IEN3c3RyaW5nIERhdGFUeXBlIERlbnNlQXJyYXkgRGVuc2VNYXRyaXggRGVuc2VWZWNPck1hdCBEZW5zZVZlY3RvciBEaWN0IERpbWVuc2lvbk1pc21hdGNoIERpbXMgRGl2aWRlRXJyb3IgRG9tYWluRXJyb3IgRU9GRXJyb3IgRW51bSBFcnJvckV4Y2VwdGlvbiBFeGNlcHRpb24gRXhwb25lbnRpYWxCYWNrT2ZmIEV4cHIgRmxvYXQxNiBGbG9hdDMyIEZsb2F0NjQgRnVuY3Rpb24gR2xvYmFsUmVmIEhUTUwgSU8gSU9CdWZmZXIgSU9Db250ZXh0IElPU3RyZWFtIElkRGljdCBJbmRleENhcnRlc2lhbiBJbmRleExpbmVhciBJbmRleFN0eWxlIEluZXhhY3RFcnJvciBJbml0RXJyb3IgSW50IEludDEyOCBJbnQxNiBJbnQzMiBJbnQ2NCBJbnQ4IEludGVnZXIgSW50ZXJydXB0RXhjZXB0aW9uIEludmFsaWRTdGF0ZUV4Y2VwdGlvbiBJcnJhdGlvbmFsIEtleUVycm9yIExpblJhbmdlIExpbmVOdW1iZXJOb2RlIExpbmVhckluZGljZXMgTG9hZEVycm9yIE1JTUUgTWF0cml4IE1ldGhvZCBNZXRob2RFcnJvciBNaXNzaW5nIE1pc3NpbmdFeGNlcHRpb24gTW9kdWxlIE5UdXBsZSBOYW1lZFR1cGxlIE5vdGhpbmcgTnVtYmVyIE9yZGluYWxSYW5nZSBPdXRPZk1lbW9yeUVycm9yIE92ZXJmbG93RXJyb3IgUGFpciBQYXJ0aWFsUXVpY2tTb3J0IFBlcm11dGVkRGltc0FycmF5IFBpcGUgUHJvY2Vzc0ZhaWxlZEV4Y2VwdGlvbiBQdHIgUXVvdGVOb2RlIFJhdGlvbmFsIFJhd0ZEIFJlYWRPbmx5TWVtb3J5RXJyb3IgUmVhbCBSZWVudHJhbnRMb2NrIFJlZiBSZWdleCBSZWdleE1hdGNoIFJvdW5kaW5nTW9kZSBTZWdtZW50YXRpb25GYXVsdCBTZXQgU2lnbmVkIFNvbWUgU3RhY2tPdmVyZmxvd0Vycm9yIFN0ZXBSYW5nZSBTdGVwUmFuZ2VMZW4gU3RyaWRlZEFycmF5IFN0cmlkZWRNYXRyaXggU3RyaWRlZFZlY09yTWF0IFN0cmlkZWRWZWN0b3IgU3RyaW5nIFN0cmluZ0luZGV4RXJyb3IgU3ViQXJyYXkgU3ViU3RyaW5nIFN1YnN0aXR1dGlvblN0cmluZyBTeW1ib2wgU3lzdGVtRXJyb3IgVGFzayBUYXNrRmFpbGVkRXhjZXB0aW9uIFRleHQgVGV4dERpc3BsYXkgVGltZXIgVHVwbGUgVHlwZSBUeXBlRXJyb3IgVHlwZVZhciBVSW50IFVJbnQxMjggVUludDE2IFVJbnQzMiBVSW50NjQgVUludDggVW5kZWZJbml0aWFsaXplciBVbmRlZktleXdvcmRFcnJvciBVbmRlZlJlZkVycm9yIFVuZGVmVmFyRXJyb3IgVW5pb24gVW5pb25BbGwgVW5pdFJhbmdlIFVuc2lnbmVkIFZhbCBWYXJhcmcgVmVjRWxlbWVudCBWZWNPck1hdCBWZWN0b3IgVmVyc2lvbk51bWJlciBXZWFrS2V5RGljdCBXZWFrUmVmIgp9LG49e2tleXdvcmRzOnQsaWxsZWdhbDovPFwvL30sYT17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46L1wkXCgvLGVuZDovXCkvLAprZXl3b3Jkczp0fSxpPXtjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiXFwkIityfSxvPXtjbGFzc05hbWU6InN0cmluZyIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsYSxpXSx2YXJpYW50czpbe2JlZ2luOi9cdyoiIiIvLGVuZDovIiIiXHcqLywKcmVsZXZhbmNlOjEwfSx7YmVnaW46L1x3KiIvLGVuZDovIlx3Ki99XX0scz17Y2xhc3NOYW1lOiJzdHJpbmciLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGEsaV0sYmVnaW46ImAiLGVuZDoiYCJ9LGw9e2NsYXNzTmFtZToibWV0YSIsCmJlZ2luOiJAIityfTtyZXR1cm4gbi5uYW1lPSJKdWxpYSIsbi5jb250YWlucz1be2NsYXNzTmFtZToibnVtYmVyIiwKYmVnaW46LyhcYjB4W1xkX10qKFwuW1xkX10qKT98MHhcLlxkW1xkX10qKXBbLStdP1xkK3xcYjBbYm94XVthLWZBLUYwLTldW2EtZkEtRjAtOV9dKnwoXGJcZFtcZF9dKihcLltcZF9dKik/fFwuXGRbXGRfXSopKFtlRWZGXVstK10/XGQrKT8vLApyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovJygufFxcW3hYdVVdW2EtekEtWjAtOV0rKScvfSxvLHMsbCx7CmNsYXNzTmFtZToiY29tbWVudCIsdmFyaWFudHM6W3tiZWdpbjoiIz0iLGVuZDoiPSMiLHJlbGV2YW5jZToxMH0se2JlZ2luOiIjIiwKZW5kOiIkIn1dfSxlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6ImtleXdvcmQiLApiZWdpbjoiXFxiKCgoYWJzdHJhY3R8cHJpbWl0aXZlKVxccyspdHlwZXwobXV0YWJsZVxccyspP3N0cnVjdClcXGIifSx7YmVnaW46Lzw6Lwp9XSxhLmNvbnRhaW5zPW4uY29udGFpbnMsbn19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImxpc3AiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+ewp2YXIgbj0iW2EtekEtWl9cXC0rXFwqXFwvPD0+JiNdW2EtekEtWjAtOV9cXC0rKlxcLzw9PiYjIV0qIixhPSJcXHxbXl0qP1xcfCIsaT0iKC18XFwrKT9cXGQrKFxcLlxcZCt8XFwvXFxkKyk/KChkfGV8ZnxsfHN8RHxFfEZ8THxTKShcXCt8LSk/XFxkKyk/IixzPXsKY2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXFxiKHR7MX18bmlsKVxcYiJ9LGw9e2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjppLHJlbGV2YW5jZTowfSx7YmVnaW46IiMoYnxCKVswLTFdKygvWzAtMV0rKT8ifSx7CmJlZ2luOiIjKG98TylbMC03XSsoL1swLTddKyk/In0se2JlZ2luOiIjKHh8WClbMC05YS1mQS1GXSsoL1swLTlhLWZBLUZdKyk/In0sewpiZWdpbjoiIyhjfEMpXFwoIitpKyIgKyIraSxlbmQ6IlxcKSJ9XX0sYj1lLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7CmlsbGVnYWw6bnVsbH0pLGc9ZS5DT01NRU5UKCI7IiwiJCIse3JlbGV2YW5jZTowfSkscj17YmVnaW46IlxcKiIsZW5kOiJcXCoifSx0PXsKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJbOiZdIitufSxjPXtiZWdpbjpuLHJlbGV2YW5jZTowfSxkPXtiZWdpbjphfSxvPXsKY29udGFpbnM6W2wsYixyLHQse2JlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpbInNlbGYiLHMsYixsLGNdfSxjXSwKdmFyaWFudHM6W3tiZWdpbjoiWydgXVxcKCIsZW5kOiJcXCkifSx7YmVnaW46IlxcKHF1b3RlICIsZW5kOiJcXCkiLGtleXdvcmRzOnsKbmFtZToicXVvdGUifX0se2JlZ2luOiInIithfV19LHY9e3ZhcmlhbnRzOlt7YmVnaW46IiciK259LHsKYmVnaW46IiMnIituKyIoOjoiK24rIikqIn1dfSxtPXtiZWdpbjoiXFwoXFxzKiIsZW5kOiJcXCkifSx1PXtlbmRzV2l0aFBhcmVudDohMCwKcmVsZXZhbmNlOjB9O3JldHVybiBtLmNvbnRhaW5zPVt7Y2xhc3NOYW1lOiJuYW1lIix2YXJpYW50czpbe2JlZ2luOm4scmVsZXZhbmNlOjAKfSx7YmVnaW46YX1dfSx1XSx1LmNvbnRhaW5zPVtvLHYsbSxzLGwsYixnLHIsdCxkLGNdLHtuYW1lOiJMaXNwIixpbGxlZ2FsOi9cUy8sCmNvbnRhaW5zOltsLGUuU0hFQkFORygpLHMsYixnLG8sdixtLGNdfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImdyb292eSIsKCgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSxuPXt9KXsKcmV0dXJuIG4udmFyaWFudHM9ZSxufXJldHVybiBuPT57CmNvbnN0IGE9IltBLVphLXowLTlfJF0rIix0PWUoW24uQ19MSU5FX0NPTU1FTlRfTU9ERSxuLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4uQ09NTUVOVCgiL1xcKlxcKiIsIlxcKi8iLHsKcmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjovXHcrQC8scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImRvY3RhZyIsCmJlZ2luOiJAW0EtWmEtel0rIn1dfSldKSxzPXtjbGFzc05hbWU6InJlZ2V4cCIsYmVnaW46L34/XC9bXlwvXG5dK1wvLywKY29udGFpbnM6W24uQkFDS1NMQVNIX0VTQ0FQRV0KfSxpPWUoW24uQklOQVJZX05VTUJFUl9NT0RFLG4uQ19OVU1CRVJfTU9ERV0pLHI9ZShbe2JlZ2luOi8iIiIvLGVuZDovIiIiL30sewpiZWdpbjovJycnLyxlbmQ6LycnJy99LHtiZWdpbjoiXFwkLyIsZW5kOiIvXFwkIixyZWxldmFuY2U6MTAKfSxuLkFQT1NfU1RSSU5HX01PREUsbi5RVU9URV9TVFJJTkdfTU9ERV0se2NsYXNzTmFtZToic3RyaW5nIn0pO3JldHVybnsKbmFtZToiR3Jvb3Z5IixrZXl3b3Jkczp7YnVpbHRfaW46InRoaXMgc3VwZXIiLGxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCIsCmtleXdvcmQ6ImJ5dGUgc2hvcnQgY2hhciBpbnQgbG9uZyBib29sZWFuIGZsb2F0IGRvdWJsZSB2b2lkIGRlZiBhcyBpbiBhc3NlcnQgdHJhaXQgYWJzdHJhY3Qgc3RhdGljIHZvbGF0aWxlIHRyYW5zaWVudCBwdWJsaWMgcHJpdmF0ZSBwcm90ZWN0ZWQgc3luY2hyb25pemVkIGZpbmFsIGNsYXNzIGludGVyZmFjZSBlbnVtIGlmIGVsc2UgZm9yIHdoaWxlIHN3aXRjaCBjYXNlIGJyZWFrIGRlZmF1bHQgY29udGludWUgdGhyb3cgdGhyb3dzIHRyeSBjYXRjaCBmaW5hbGx5IGltcGxlbWVudHMgZXh0ZW5kcyBuZXcgaW1wb3J0IHBhY2thZ2UgcmV0dXJuIGluc3RhbmNlb2YiCn0sY29udGFpbnM6W24uU0hFQkFORyh7YmluYXJ5OiJncm9vdnkiLHJlbGV2YW5jZToxMH0pLHQscixzLGksewpjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UgdHJhaXQgZW51bSIsZW5kOi9cey8sCmlsbGVnYWw6IjoiLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIgp9LG4uVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkBbQS1aYS16XSsiLHJlbGV2YW5jZTowfSx7CmNsYXNzTmFtZToiYXR0ciIsYmVnaW46YSsiWyBcdF0qOiJ9LHtiZWdpbjovXD8vLGVuZDovOi8scmVsZXZhbmNlOjAsCmNvbnRhaW5zOlt0LHIscyxpLCJzZWxmIl19LHtjbGFzc05hbWU6InN5bWJvbCIsCmJlZ2luOiJeWyBcdF0qIisobD1hKyI6IiwoKC4uLmUpPT5lLm1hcCgoZT0+KGU9PmU/InN0cmluZyI9PXR5cGVvZiBlP2U6ZS5zb3VyY2U6bnVsbCkoZSkpKS5qb2luKCIiKSkoIig/PSIsbCwiKSIpKSwKZXhjbHVkZUJlZ2luOiEwLGVuZDphKyI6IixyZWxldmFuY2U6MH1dLGlsbGVnYWw6LyN8PFwvL307dmFyIGx9fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJyZWFzb25tbCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CmNvbnN0IG49In4/W2EteiRfXVswLTlhLXpBLVokX10qIixhPSJgP1tBLVokX11bMC05YS16QS1aJF9dKiIscz0iKCIrWyJ8fCIsIisrIiwiKioiLCIrLiIsIioiLCIvIiwiKi4iLCIvLiIsIi4uLiJdLm1hcCgoZT0+ZS5zcGxpdCgiIikubWFwKChlPT4iXFwiK2UpKS5qb2luKCIiKSkpLmpvaW4oInwiKSsifFxcfD58JiZ8PT18PT09KSIsaT0iXFxzKyIrcysiXFxzKyIscj17CmtleXdvcmQ6ImFuZCBhcyBhc3IgYXNzZXJ0IGJlZ2luIGNsYXNzIGNvbnN0cmFpbnQgZG8gZG9uZSBkb3dudG8gZWxzZSBlbmQgZXhjZXB0aW9uIGV4dGVybmFsIGZvciBmdW4gZnVuY3Rpb24gZnVuY3RvciBpZiBpbiBpbmNsdWRlIGluaGVyaXQgaW5pdGlhbGl6ZXIgbGFuZCBsYXp5IGxldCBsb3IgbHNsIGxzciBseG9yIG1hdGNoIG1ldGhvZCBtb2QgbW9kdWxlIG11dGFibGUgbmV3IG5vbnJlYyBvYmplY3Qgb2Ygb3BlbiBvciBwcml2YXRlIHJlYyBzaWcgc3RydWN0IHRoZW4gdG8gdHJ5IHR5cGUgdmFsIHZpcnR1YWwgd2hlbiB3aGlsZSB3aXRoIiwKYnVpbHRfaW46ImFycmF5IGJvb2wgYnl0ZXMgY2hhciBleG58NSBmbG9hdCBpbnQgaW50MzIgaW50NjQgbGlzdCBsYXp5X3R8NSBuYXRpdmVpbnR8NSByZWYgc3RyaW5nIHVuaXQgIiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSIKfSxsPSJcXGIoMFt4WF1bYS1mQS1GMC05X10rW0xsbl0/fDBbb09dWzAtN19dK1tMbG5dP3wwW2JCXVswMV9dK1tMbG5dP3xbMC05XVswLTlfXSooW0xsbl18KFxcLlswLTlfXSopPyhbZUVdWy0rXT9bMC05X10rKT8pPykiLHQ9ewpjbGFzc05hbWU6Im51bWJlciIscmVsZXZhbmNlOjAsdmFyaWFudHM6W3tiZWdpbjpsfSx7YmVnaW46IlxcKC0iK2wrIlxcKSJ9XX0sYz17CmNsYXNzTmFtZToib3BlcmF0b3IiLHJlbGV2YW5jZTowLGJlZ2luOnN9LG89W3tjbGFzc05hbWU6ImlkZW50aWZpZXIiLApyZWxldmFuY2U6MCxiZWdpbjpufSxjLHRdLGc9W2UuUVVPVEVfU1RSSU5HX01PREUsYyx7Y2xhc3NOYW1lOiJtb2R1bGUiLApiZWdpbjoiXFxiIithLHJldHVybkJlZ2luOiEwLGVuZDoiLiIsY29udGFpbnM6W3tjbGFzc05hbWU6ImlkZW50aWZpZXIiLGJlZ2luOmEsCnJlbGV2YW5jZTowfV19XSxiPVt7Y2xhc3NOYW1lOiJtb2R1bGUiLGJlZ2luOiJcXGIiK2EscmV0dXJuQmVnaW46ITAsZW5kOiIuIiwKcmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImlkZW50aWZpZXIiLGJlZ2luOmEscmVsZXZhbmNlOjB9XX1dLG09ewpjbGFzc05hbWU6ImZ1bmN0aW9uIixyZWxldmFuY2U6MCxrZXl3b3JkczpyLHZhcmlhbnRzOlt7CmJlZ2luOiJcXHMoXFwoXFwuPy4qP1xcKXwiK24rIilcXHMqPT4iLGVuZDoiXFxzKj0+IixyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCwKY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3tiZWdpbjpufSx7CmJlZ2luOiJ+P1thLXokX11bMC05YS16QS1aJF9dKihcXHMqOlxccypbYS16JF9dWzAtOWEteiRfXSooXFwoXFxzKignP1thLXokX11bMC05YS16JF9dKlxccyooLCc/W2EteiRfXVswLTlhLXokX10qXFxzKikqKT9cXCkpPyl7MCwyfSIKfSx7YmVnaW46L1woXHMqXCkvfV19XX0se2JlZ2luOiJcXHNcXChcXC4/W147XFx8XSpcXClcXHMqPT4iLGVuZDoiXFxzPT4iLApyZXR1cm5CZWdpbjohMCxyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToicGFyYW1zIixyZWxldmFuY2U6MCx2YXJpYW50czpbewpiZWdpbjpuLGVuZDoiKCx8XFxufFxcKSkiLHJlbGV2YW5jZTowLGNvbnRhaW5zOltjLHtjbGFzc05hbWU6InR5cGluZyIsYmVnaW46IjoiLAplbmQ6IigsfFxcbikiLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOmJ9XX1dfV19LHsKYmVnaW46IlxcKFxcLlxccyIrbisiXFwpXFxzKj0+In1dfTtnLnB1c2gobSk7Y29uc3QgZD17Y2xhc3NOYW1lOiJjb25zdHJ1Y3RvciIsCmJlZ2luOmErIlxcKCIsZW5kOiJcXCkiLGlsbGVnYWw6IlxcbiIsa2V5d29yZHM6ciwKY29udGFpbnM6W2UuUVVPVEVfU1RSSU5HX01PREUsYyx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXGIiK259XX0sdT17CmNsYXNzTmFtZToicGF0dGVybi1tYXRjaCIsYmVnaW46IlxcfCIscmV0dXJuQmVnaW46ITAsa2V5d29yZHM6cixlbmQ6Ij0+IiwKcmVsZXZhbmNlOjAsY29udGFpbnM6W2QsYyx7cmVsZXZhbmNlOjAsY2xhc3NOYW1lOiJjb25zdHJ1Y3RvciIsYmVnaW46YX1dfSx2PXsKY2xhc3NOYW1lOiJtb2R1bGUtYWNjZXNzIixrZXl3b3JkczpyLHJldHVybkJlZ2luOiEwLHZhcmlhbnRzOlt7CmJlZ2luOiJcXGIoIithKyJcXC4pKyIrbn0se2JlZ2luOiJcXGIoIithKyJcXC4pK1xcKCIsZW5kOiJcXCkiLHJldHVybkJlZ2luOiEwLApjb250YWluczpbbSx7YmVnaW46IlxcKCIsZW5kOiJcXCkiLHNraXA6ITB9XS5jb25jYXQoZyl9LHsKYmVnaW46IlxcYigiK2ErIlxcLikrXFx7IixlbmQ6L1x9L31dLGNvbnRhaW5zOmd9O3JldHVybiBiLnB1c2godiksewpuYW1lOiJSZWFzb25NTCIsYWxpYXNlczpbInJlIl0sa2V5d29yZHM6cixpbGxlZ2FsOiIoOi18Oj18XFwkXFx7fFxcKz0pIiwKY29udGFpbnM6W2UuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtpbGxlZ2FsOiJeKCMsXFwvXFwvKSJ9KSx7CmNsYXNzTmFtZToiY2hhcmFjdGVyIixiZWdpbjoiJyhcXFxcW14nXSt8W14nXSknIixpbGxlZ2FsOiJcXG4iLHJlbGV2YW5jZTowCn0sZS5RVU9URV9TVFJJTkdfTU9ERSx7Y2xhc3NOYW1lOiJsaXRlcmFsIixiZWdpbjoiXFwoXFwpIixyZWxldmFuY2U6MH0sewpjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiJcXFtcXHwiLGVuZDoiXFx8XFxdIixyZWxldmFuY2U6MCxjb250YWluczpvfSx7CmNsYXNzTmFtZToibGl0ZXJhbCIsYmVnaW46IlxcWyIsZW5kOiJcXF0iLHJlbGV2YW5jZTowLGNvbnRhaW5zOm99LGQsewpjbGFzc05hbWU6Im9wZXJhdG9yIixiZWdpbjppLGlsbGVnYWw6Ii0tXHgzZSIscmVsZXZhbmNlOjAKfSx0LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSx1LG0se2NsYXNzTmFtZToibW9kdWxlLWRlZiIsCmJlZ2luOiJcXGJtb2R1bGVcXHMrIituKyJcXHMrIithKyJcXHMrPVxccytcXHsiLGVuZDovXH0vLHJldHVybkJlZ2luOiEwLAprZXl3b3JkczpyLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtb2R1bGUiLHJlbGV2YW5jZTowLGJlZ2luOmF9LHsKYmVnaW46L1x7LyxlbmQ6L1x9Lyxza2lwOiEwfV0uY29uY2F0KGcpfSx2XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJwaHAiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IHI9ewpjbGFzc05hbWU6InZhcmlhYmxlIiwKYmVnaW46IlxcJCtbYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qKD8hW0EtWmEtejAtOV0pKD8hWyRdKSJ9LHQ9ewpjbGFzc05hbWU6Im1ldGEiLHZhcmlhbnRzOlt7YmVnaW46LzxcP3BocC8scmVsZXZhbmNlOjEwfSx7YmVnaW46LzxcP1s9XT8vfSx7CmJlZ2luOi9cPz4vfV19LGE9e2NsYXNzTmFtZToic3Vic3QiLHZhcmlhbnRzOlt7YmVnaW46L1wkXHcrL30se2JlZ2luOi9ce1wkLywKZW5kOi9cfS99XX0sbj1lLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtpbGxlZ2FsOm51bGwKfSksaT1lLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsLApjb250YWluczplLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChhKX0pLG89ZS5FTkRfU0FNRV9BU19CRUdJTih7CmJlZ2luOi88PDxbIFx0XSooXHcrKVxuLyxlbmQ6L1sgXHRdKihcdyspXGIvLApjb250YWluczplLlFVT1RFX1NUUklOR19NT0RFLmNvbnRhaW5zLmNvbmNhdChhKX0pLGw9e2NsYXNzTmFtZToic3RyaW5nIiwKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx0XSx2YXJpYW50czpbZS5pbmhlcml0KG4se2JlZ2luOiJiJyIsZW5kOiInIgp9KSxlLmluaGVyaXQoaSx7YmVnaW46J2IiJyxlbmQ6JyInfSksaSxuLG9dfSxjPXsKdmFyaWFudHM6W2UuQklOQVJZX05VTUJFUl9NT0RFLGUuQ19OVU1CRVJfTU9ERV19LHM9ewprZXl3b3JkOiJfX0NMQVNTX18gX19ESVJfXyBfX0ZJTEVfXyBfX0ZVTkNUSU9OX18gX19MSU5FX18gX19NRVRIT0RfXyBfX05BTUVTUEFDRV9fIF9fVFJBSVRfXyBkaWUgZWNobyBleGl0IGluY2x1ZGUgaW5jbHVkZV9vbmNlIHByaW50IHJlcXVpcmUgcmVxdWlyZV9vbmNlIGFycmF5IGFic3RyYWN0IGFuZCBhcyBiaW5hcnkgYm9vbCBib29sZWFuIGJyZWFrIGNhbGxhYmxlIGNhc2UgY2F0Y2ggY2xhc3MgY2xvbmUgY29uc3QgY29udGludWUgZGVjbGFyZSBkZWZhdWx0IGRvIGRvdWJsZSBlbHNlIGVsc2VpZiBlbXB0eSBlbmRkZWNsYXJlIGVuZGZvciBlbmRmb3JlYWNoIGVuZGlmIGVuZHN3aXRjaCBlbmR3aGlsZSBldmFsIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZm9yZWFjaCBmcm9tIGdsb2JhbCBnb3RvIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBpbnN0ZWFkb2YgaW50IGludGVnZXIgaW50ZXJmYWNlIGlzc2V0IGl0ZXJhYmxlIGxpc3QgbWF0Y2h8MCBuZXcgb2JqZWN0IG9yIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFsIHJldHVybiBzdHJpbmcgc3dpdGNoIHRocm93IHRyYWl0IHRyeSB1bnNldCB1c2UgdmFyIHZvaWQgd2hpbGUgeG9yIHlpZWxkIiwKbGl0ZXJhbDoiZmFsc2UgbnVsbCB0cnVlIiwKYnVpbHRfaW46IkVycm9yfDAgQXBwZW5kSXRlcmF0b3IgQXJndW1lbnRDb3VudEVycm9yIEFyaXRobWV0aWNFcnJvciBBcnJheUl0ZXJhdG9yIEFycmF5T2JqZWN0IEFzc2VydGlvbkVycm9yIEJhZEZ1bmN0aW9uQ2FsbEV4Y2VwdGlvbiBCYWRNZXRob2RDYWxsRXhjZXB0aW9uIENhY2hpbmdJdGVyYXRvciBDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIENvbXBpbGVFcnJvciBDb3VudGFibGUgRGlyZWN0b3J5SXRlcmF0b3IgRGl2aXNpb25CeVplcm9FcnJvciBEb21haW5FeGNlcHRpb24gRW1wdHlJdGVyYXRvciBFcnJvckV4Y2VwdGlvbiBFeGNlcHRpb24gRmlsZXN5c3RlbUl0ZXJhdG9yIEZpbHRlckl0ZXJhdG9yIEdsb2JJdGVyYXRvciBJbmZpbml0ZUl0ZXJhdG9yIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJdGVyYXRvckl0ZXJhdG9yIExlbmd0aEV4Y2VwdGlvbiBMaW1pdEl0ZXJhdG9yIExvZ2ljRXhjZXB0aW9uIE11bHRpcGxlSXRlcmF0b3IgTm9SZXdpbmRJdGVyYXRvciBPdXRPZkJvdW5kc0V4Y2VwdGlvbiBPdXRPZlJhbmdlRXhjZXB0aW9uIE91dGVySXRlcmF0b3IgT3ZlcmZsb3dFeGNlcHRpb24gUGFyZW50SXRlcmF0b3IgUGFyc2VFcnJvciBSYW5nZUV4Y2VwdGlvbiBSZWN1cnNpdmVBcnJheUl0ZXJhdG9yIFJlY3Vyc2l2ZUNhY2hpbmdJdGVyYXRvciBSZWN1cnNpdmVDYWxsYmFja0ZpbHRlckl0ZXJhdG9yIFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yIFJlY3Vyc2l2ZUZpbHRlckl0ZXJhdG9yIFJlY3Vyc2l2ZUl0ZXJhdG9yIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IgUmVjdXJzaXZlUmVnZXhJdGVyYXRvciBSZWN1cnNpdmVUcmVlSXRlcmF0b3IgUmVnZXhJdGVyYXRvciBSdW50aW1lRXhjZXB0aW9uIFNlZWthYmxlSXRlcmF0b3IgU3BsRG91Ymx5TGlua2VkTGlzdCBTcGxGaWxlSW5mbyBTcGxGaWxlT2JqZWN0IFNwbEZpeGVkQXJyYXkgU3BsSGVhcCBTcGxNYXhIZWFwIFNwbE1pbkhlYXAgU3BsT2JqZWN0U3RvcmFnZSBTcGxPYnNlcnZlciBTcGxPYnNlcnZlciBTcGxQcmlvcml0eVF1ZXVlIFNwbFF1ZXVlIFNwbFN0YWNrIFNwbFN1YmplY3QgU3BsU3ViamVjdCBTcGxUZW1wRmlsZU9iamVjdCBUeXBlRXJyb3IgVW5kZXJmbG93RXhjZXB0aW9uIFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiBBcnJheUFjY2VzcyBDbG9zdXJlIEdlbmVyYXRvciBJdGVyYXRvciBJdGVyYXRvckFnZ3JlZ2F0ZSBTZXJpYWxpemFibGUgVGhyb3dhYmxlIFRyYXZlcnNhYmxlIFdlYWtSZWZlcmVuY2UgRGlyZWN0b3J5IF9fUEhQX0luY29tcGxldGVfQ2xhc3MgcGFyZW50IHBocF91c2VyX2ZpbHRlciBzZWxmIHN0YXRpYyBzdGRDbGFzcyIKfTtyZXR1cm57YWxpYXNlczpbInBocCIsInBocDMiLCJwaHA0IiwicGhwNSIsInBocDYiLCJwaHA3IiwicGhwOCJdLApjYXNlX2luc2Vuc2l0aXZlOiEwLGtleXdvcmRzOnMsCmNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLGUuQ09NTUVOVCgiLy8iLCIkIix7Y29udGFpbnM6W3RdCn0pLGUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIixiZWdpbjoiQFtBLVphLXpdKyJ9XQp9KSxlLkNPTU1FTlQoIl9faGFsdF9jb21waWxlci4rPzsiLCExLHtlbmRzV2l0aFBhcmVudDohMCwKa2V5d29yZHM6Il9faGFsdF9jb21waWxlciJ9KSx0LHtjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOi9cJHRoaXNcYi99LHIsewpiZWdpbjovKDo6fC0+KStbYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qL30se2NsYXNzTmFtZToiZnVuY3Rpb24iLApyZWxldmFuY2U6MCxiZWdpbktleXdvcmRzOiJmbiBmdW5jdGlvbiIsZW5kOi9bO3tdLyxleGNsdWRlRW5kOiEwLAppbGxlZ2FsOiJbJCVcXFtdIixjb250YWluczpbZS5VTkRFUlNDT1JFX1RJVExFX01PREUse2JlZ2luOiI9PiJ9LHsKY2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCwKa2V5d29yZHM6cyxjb250YWluczpbInNlbGYiLHIsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxsLGNdfV19LHtjbGFzc05hbWU6ImNsYXNzIiwKYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIixyZWxldmFuY2U6MCxlbmQ6L1x7LyxleGNsdWRlRW5kOiEwLAppbGxlZ2FsOi9bOigkIl0vLGNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIgp9LGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2JlZ2luS2V5d29yZHM6Im5hbWVzcGFjZSIscmVsZXZhbmNlOjAsZW5kOiI7IiwKaWxsZWdhbDovWy4nXS8sY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2JlZ2luS2V5d29yZHM6InVzZSIsCnJlbGV2YW5jZTowLGVuZDoiOyIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0sbCxjXX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJzdHlsdXMiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e3ZhciB0PXsKY2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46IlxcJCIrZS5JREVOVF9SRX0saT17Y2xhc3NOYW1lOiJudW1iZXIiLApiZWdpbjoiIyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkifTtyZXR1cm57bmFtZToiU3R5bHVzIixhbGlhc2VzOlsic3R5bCJdLApjYXNlX2luc2Vuc2l0aXZlOiExLGtleXdvcmRzOiJpZiBlbHNlIGZvciBpbiIsCmlsbGVnYWw6IihcXD98KFxcYlJldHVyblxcYil8KFxcYkVuZFxcYil8KFxcYmVuZFxcYil8KFxcYmRlZlxcYil8O3wjXFxzfFxcKlxcc3w9PT1cXHN8XFx8fCUpIiwKY29udGFpbnM6W2UuUVVPVEVfU1RSSU5HX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGksewpiZWdpbjoiXFwuW2EtekEtWl1bYS16QS1aMC05Xy1dKig/PVsuXFxzXFxuWzosXSkiLGNsYXNzTmFtZToic2VsZWN0b3ItY2xhc3MifSx7CmJlZ2luOiIjW2EtekEtWl1bYS16QS1aMC05Xy1dKig/PVsuXFxzXFxuWzosXSkiLGNsYXNzTmFtZToic2VsZWN0b3ItaWQifSx7CmJlZ2luOiJcXGIoYXxhYmJyfGFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxhdWRpb3xifGJsb2NrcXVvdGV8Ym9keXxidXR0b258Y2FudmFzfGNhcHRpb258Y2l0ZXxjb2RlfGRkfGRlbHxkZXRhaWxzfGRmbnxkaXZ8ZGx8ZHR8ZW18ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZGVyfGhncm91cHxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2JkfGxhYmVsfGxlZ2VuZHxsaXxtYXJrfG1lbnV8bmF2fG9iamVjdHxvbHxwfHF8cXVvdGV8c2FtcHxzZWN0aW9ufHNwYW58c3Ryb25nfHN1bW1hcnl8c3VwfHRhYmxlfHRib2R5fHRkfHRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dHJ8dWx8dmFyfHZpZGVvKSg/PVsuXFxzXFxuWzosXSkiLApjbGFzc05hbWU6InNlbGVjdG9yLXRhZyJ9LHsKYmVnaW46IiY/Oj86XFxiKGFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxhY3RpdmV8Zmlyc3QtY2hpbGR8Zm9jdXN8aG92ZXJ8bGFuZ3xsaW5rfHZpc2l0ZWQpKD89Wy5cXHNcXG5bOixdKSIKfSx7CmJlZ2luOiJAKGNoYXJzZXR8Y3NzfGRlYnVnfGV4dGVuZHxmb250LWZhY2V8Zm9yfGltcG9ydHxpbmNsdWRlfG1lZGlhfG1peGlufHBhZ2V8d2Fybnx3aGlsZSlcXGIiCn0sdCxlLkNTU19OVU1CRVJfTU9ERSxlLk5VTUJFUl9NT0RFLHtjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW46Il5bYS16QS1aXVthLXpBLVowLTlfLV0qXFwoLipcXCkiLGlsbGVnYWw6IltcXG5dIixyZXR1cm5CZWdpbjohMCwKY29udGFpbnM6W3tjbGFzc05hbWU6InRpdGxlIixiZWdpbjoiXFxiW2EtekEtWl1bYS16QS1aMC05Xy1dKiJ9LHsKY2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sCmNvbnRhaW5zOltpLHQsZS5BUE9TX1NUUklOR19NT0RFLGUuQ1NTX05VTUJFUl9NT0RFLGUuTlVNQkVSX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV0KfV19LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsCmJlZ2luOiJcXGIoIitbImFsaWduLWNvbnRlbnQiLCJhbGlnbi1pdGVtcyIsImFsaWduLXNlbGYiLCJhbmltYXRpb24iLCJhbmltYXRpb24tZGVsYXkiLCJhbmltYXRpb24tZGlyZWN0aW9uIiwiYW5pbWF0aW9uLWR1cmF0aW9uIiwiYW5pbWF0aW9uLWZpbGwtbW9kZSIsImFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQiLCJhbmltYXRpb24tbmFtZSIsImFuaW1hdGlvbi1wbGF5LXN0YXRlIiwiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIsImF1dG8iLCJiYWNrZmFjZS12aXNpYmlsaXR5IiwiYmFja2dyb3VuZCIsImJhY2tncm91bmQtYXR0YWNobWVudCIsImJhY2tncm91bmQtY2xpcCIsImJhY2tncm91bmQtY29sb3IiLCJiYWNrZ3JvdW5kLWltYWdlIiwiYmFja2dyb3VuZC1vcmlnaW4iLCJiYWNrZ3JvdW5kLXBvc2l0aW9uIiwiYmFja2dyb3VuZC1yZXBlYXQiLCJiYWNrZ3JvdW5kLXNpemUiLCJib3JkZXIiLCJib3JkZXItYm90dG9tIiwiYm9yZGVyLWJvdHRvbS1jb2xvciIsImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLCJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tc3R5bGUiLCJib3JkZXItYm90dG9tLXdpZHRoIiwiYm9yZGVyLWNvbGxhcHNlIiwiYm9yZGVyLWNvbG9yIiwiYm9yZGVyLWltYWdlIiwiYm9yZGVyLWltYWdlLW91dHNldCIsImJvcmRlci1pbWFnZS1yZXBlYXQiLCJib3JkZXItaW1hZ2Utc2xpY2UiLCJib3JkZXItaW1hZ2Utc291cmNlIiwiYm9yZGVyLWltYWdlLXdpZHRoIiwiYm9yZGVyLWxlZnQiLCJib3JkZXItbGVmdC1jb2xvciIsImJvcmRlci1sZWZ0LXN0eWxlIiwiYm9yZGVyLWxlZnQtd2lkdGgiLCJib3JkZXItcmFkaXVzIiwiYm9yZGVyLXJpZ2h0IiwiYm9yZGVyLXJpZ2h0LWNvbG9yIiwiYm9yZGVyLXJpZ2h0LXN0eWxlIiwiYm9yZGVyLXJpZ2h0LXdpZHRoIiwiYm9yZGVyLXNwYWNpbmciLCJib3JkZXItc3R5bGUiLCJib3JkZXItdG9wIiwiYm9yZGVyLXRvcC1jb2xvciIsImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsImJvcmRlci10b3Atc3R5bGUiLCJib3JkZXItdG9wLXdpZHRoIiwiYm9yZGVyLXdpZHRoIiwiYm90dG9tIiwiYm94LWRlY29yYXRpb24tYnJlYWsiLCJib3gtc2hhZG93IiwiYm94LXNpemluZyIsImJyZWFrLWFmdGVyIiwiYnJlYWstYmVmb3JlIiwiYnJlYWstaW5zaWRlIiwiY2FwdGlvbi1zaWRlIiwiY2xlYXIiLCJjbGlwIiwiY2xpcC1wYXRoIiwiY29sb3IiLCJjb2x1bW4tY291bnQiLCJjb2x1bW4tZmlsbCIsImNvbHVtbi1nYXAiLCJjb2x1bW4tcnVsZSIsImNvbHVtbi1ydWxlLWNvbG9yIiwiY29sdW1uLXJ1bGUtc3R5bGUiLCJjb2x1bW4tcnVsZS13aWR0aCIsImNvbHVtbi1zcGFuIiwiY29sdW1uLXdpZHRoIiwiY29sdW1ucyIsImNvbnRlbnQiLCJjb3VudGVyLWluY3JlbWVudCIsImNvdW50ZXItcmVzZXQiLCJjdXJzb3IiLCJkaXJlY3Rpb24iLCJkaXNwbGF5IiwiZW1wdHktY2VsbHMiLCJmaWx0ZXIiLCJmbGV4IiwiZmxleC1iYXNpcyIsImZsZXgtZGlyZWN0aW9uIiwiZmxleC1mbG93IiwiZmxleC1ncm93IiwiZmxleC1zaHJpbmsiLCJmbGV4LXdyYXAiLCJmbG9hdCIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtZmVhdHVyZS1zZXR0aW5ncyIsImZvbnQta2VybmluZyIsImZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtdmFyaWFudC1saWdhdHVyZXMiLCJmb250LXdlaWdodCIsImhlaWdodCIsImh5cGhlbnMiLCJpY29uIiwiaW1hZ2Utb3JpZW50YXRpb24iLCJpbWFnZS1yZW5kZXJpbmciLCJpbWFnZS1yZXNvbHV0aW9uIiwiaW1lLW1vZGUiLCJpbmhlcml0IiwiaW5pdGlhbCIsImp1c3RpZnktY29udGVudCIsImxlZnQiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0IiwibGlzdC1zdHlsZSIsImxpc3Qtc3R5bGUtaW1hZ2UiLCJsaXN0LXN0eWxlLXBvc2l0aW9uIiwibGlzdC1zdHlsZS10eXBlIiwibWFyZ2luIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1hcmtzIiwibWFzayIsIm1heC1oZWlnaHQiLCJtYXgtd2lkdGgiLCJtaW4taGVpZ2h0IiwibWluLXdpZHRoIiwibmF2LWRvd24iLCJuYXYtaW5kZXgiLCJuYXYtbGVmdCIsIm5hdi1yaWdodCIsIm5hdi11cCIsIm5vbmUiLCJub3JtYWwiLCJvYmplY3QtZml0Iiwib2JqZWN0LXBvc2l0aW9uIiwib3BhY2l0eSIsIm9yZGVyIiwib3JwaGFucyIsIm91dGxpbmUiLCJvdXRsaW5lLWNvbG9yIiwib3V0bGluZS1vZmZzZXQiLCJvdXRsaW5lLXN0eWxlIiwib3V0bGluZS13aWR0aCIsIm92ZXJmbG93Iiwib3ZlcmZsb3ctd3JhcCIsIm92ZXJmbG93LXgiLCJvdmVyZmxvdy15IiwicGFkZGluZyIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGFnZS1icmVhay1hZnRlciIsInBhZ2UtYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1pbnNpZGUiLCJwZXJzcGVjdGl2ZSIsInBlcnNwZWN0aXZlLW9yaWdpbiIsInBvaW50ZXItZXZlbnRzIiwicG9zaXRpb24iLCJxdW90ZXMiLCJyZXNpemUiLCJyaWdodCIsInRhYi1zaXplIiwidGFibGUtbGF5b3V0IiwidGV4dC1hbGlnbiIsInRleHQtYWxpZ24tbGFzdCIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtZGVjb3JhdGlvbi1jb2xvciIsInRleHQtZGVjb3JhdGlvbi1saW5lIiwidGV4dC1kZWNvcmF0aW9uLXN0eWxlIiwidGV4dC1pbmRlbnQiLCJ0ZXh0LW92ZXJmbG93IiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0LXNoYWRvdyIsInRleHQtdHJhbnNmb3JtIiwidGV4dC11bmRlcmxpbmUtcG9zaXRpb24iLCJ0b3AiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidHJhbnNmb3JtLXN0eWxlIiwidHJhbnNpdGlvbiIsInRyYW5zaXRpb24tZGVsYXkiLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIiwidHJhbnNpdGlvbi1wcm9wZXJ0eSIsInRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uIiwidW5pY29kZS1iaWRpIiwidmVydGljYWwtYWxpZ24iLCJ2aXNpYmlsaXR5Iiwid2hpdGUtc3BhY2UiLCJ3aWRvd3MiLCJ3aWR0aCIsIndvcmQtYnJlYWsiLCJ3b3JkLXNwYWNpbmciLCJ3b3JkLXdyYXAiLCJ6LWluZGV4Il0ucmV2ZXJzZSgpLmpvaW4oInwiKSsiKVxcYiIsCnN0YXJ0czp7ZW5kOi87fCQvLApjb250YWluczpbaSx0LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ1NTX05VTUJFUl9NT0RFLGUuTlVNQkVSX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0sCmlsbGVnYWw6L1wuLyxyZWxldmFuY2U6MH19XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJweXRob24iLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IG49ewprZXl3b3JkOiJhbmQgYXMgYXNzZXJ0IGFzeW5jIGF3YWl0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlIGV4Y2VwdCBmaW5hbGx5IGZvciAgZnJvbSBnbG9iYWwgaWYgaW1wb3J0IGluIGlzIGxhbWJkYSBub25sb2NhbHwxMCBub3Qgb3IgcGFzcyByYWlzZSByZXR1cm4gdHJ5IHdoaWxlIHdpdGggeWllbGQiLApidWlsdF9pbjoiX19pbXBvcnRfXyBhYnMgYWxsIGFueSBhc2NpaSBiaW4gYm9vbCBicmVha3BvaW50IGJ5dGVhcnJheSBieXRlcyBjYWxsYWJsZSBjaHIgY2xhc3NtZXRob2QgY29tcGlsZSBjb21wbGV4IGRlbGF0dHIgZGljdCBkaXIgZGl2bW9kIGVudW1lcmF0ZSBldmFsIGV4ZWMgZmlsdGVyIGZsb2F0IGZvcm1hdCBmcm96ZW5zZXQgZ2V0YXR0ciBnbG9iYWxzIGhhc2F0dHIgaGFzaCBoZWxwIGhleCBpZCBpbnB1dCBpbnQgaXNpbnN0YW5jZSBpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpc3QgbG9jYWxzIG1hcCBtYXggbWVtb3J5dmlldyBtaW4gbmV4dCBvYmplY3Qgb2N0IG9wZW4gb3JkIHBvdyBwcmludCBwcm9wZXJ0eSByYW5nZSByZXByIHJldmVyc2VkIHJvdW5kIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bSBzdXBlciB0dXBsZSB0eXBlIHZhcnMgemlwIiwKbGl0ZXJhbDoiX19kZWJ1Z19fIEVsbGlwc2lzIEZhbHNlIE5vbmUgTm90SW1wbGVtZW50ZWQgVHJ1ZSJ9LGE9ewpjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eKD4+PnxcLlwuXC4pIC99LHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cey8sCmVuZDovXH0vLGtleXdvcmRzOm4saWxsZWdhbDovIy99LGk9e2JlZ2luOi9ce1x7LyxyZWxldmFuY2U6MH0scj17CmNsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbewpiZWdpbjovKFt1VV18W2JCXXxbclJdfFtiQl1bclJdfFtyUl1bYkJdKT8nJycvLGVuZDovJycnLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxhXSxyZWxldmFuY2U6MTB9LHsKYmVnaW46LyhbdVVdfFtiQl18W3JSXXxbYkJdW3JSXXxbclJdW2JCXSk/IiIiLyxlbmQ6LyIiIi8sCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsYV0scmVsZXZhbmNlOjEwfSx7CmJlZ2luOi8oW2ZGXVtyUl18W3JSXVtmRl18W2ZGXSknJycvLGVuZDovJycnLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxhLGksc119LHtiZWdpbjovKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pIiIiLywKZW5kOi8iIiIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsYSxpLHNdfSx7YmVnaW46LyhbdVVdfFtyUl0pJy8sZW5kOi8nLywKcmVsZXZhbmNlOjEwfSx7YmVnaW46LyhbdVVdfFtyUl0pIi8sZW5kOi8iLyxyZWxldmFuY2U6MTB9LHsKYmVnaW46LyhbYkJdfFtiQl1bclJdfFtyUl1bYkJdKScvLGVuZDovJy99LHtiZWdpbjovKFtiQl18W2JCXVtyUl18W3JSXVtiQl0pIi8sCmVuZDovIi99LHtiZWdpbjovKFtmRl1bclJdfFtyUl1bZkZdfFtmRl0pJy8sZW5kOi8nLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxpLHNdfSx7YmVnaW46LyhbZkZdW3JSXXxbclJdW2ZGXXxbZkZdKSIvLGVuZDovIi8sCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsaSxzXX0sZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREVdCn0sdD0iWzAtOV0oXz9bMC05XSkqIixsPWAoXFxiKCR7dH0pKT9cXC4oJHt0fSl8XFxiKCR7dH0pXFwuYCxiPXsKY2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7CmJlZ2luOmAoXFxiKCR7dH0pfCgke2x9KSlbZUVdWystXT8oJHt0fSlbakpdP1xcYmB9LHtiZWdpbjpgKCR7bH0pW2pKXT9gfSx7CmJlZ2luOiJcXGIoWzEtOV0oXz9bMC05XSkqfDArKF8/MCkqKVtsTGpKXT9cXGIifSx7CmJlZ2luOiJcXGIwW2JCXShfP1swMV0pK1tsTF0/XFxiIn0se2JlZ2luOiJcXGIwW29PXShfP1swLTddKStbbExdP1xcYiJ9LHsKYmVnaW46IlxcYjBbeFhdKF8/WzAtOWEtZkEtRl0pK1tsTF0/XFxiIn0se2JlZ2luOmBcXGIoJHt0fSlbakpdXFxiYH1dfSxvPXsKY2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46L1woXHMqXCkvLHNraXA6ITAsY2xhc3NOYW1lOm51bGx9LHsKYmVnaW46L1woLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLApjb250YWluczpbInNlbGYiLGEsYixyLGUuSEFTSF9DT01NRU5UX01PREVdfV19O3JldHVybiBzLmNvbnRhaW5zPVtyLGIsYV0sewpuYW1lOiJQeXRob24iLGFsaWFzZXM6WyJweSIsImd5cCIsImlweXRob24iXSxrZXl3b3JkczpuLAppbGxlZ2FsOi8oPFwvfC0+fFw/KXw9Pi8sY29udGFpbnM6W2EsYix7YmVnaW46L1xic2VsZlxiL30se2JlZ2luS2V5d29yZHM6ImlmIiwKcmVsZXZhbmNlOjB9LHIsZS5IQVNIX0NPTU1FTlRfTU9ERSx7dmFyaWFudHM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW5LZXl3b3JkczoiZGVmIn0se2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIn1dLGVuZDovOi8sCmlsbGVnYWw6L1skez07XG4sXS8sY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFLG8se2JlZ2luOi8tPi8sCmVuZHNXaXRoUGFyZW50OiEwLGtleXdvcmRzOiJOb25lIn1dfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovXltcdCBdKkAvLAplbmQ6Lyg/PSMpfCQvLGNvbnRhaW5zOltiLG8scl19LHtiZWdpbjovXGIocHJpbnR8ZXhlYylcKC99XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJ5YW1sIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKdmFyIG49InRydWUgZmFsc2UgeWVzIG5vIG51bGwiLGE9IltcXHcjOy8/OkAmPSskLC5+KicoKVtcXF1dKyIscz17CmNsYXNzTmFtZToic3RyaW5nIixyZWxldmFuY2U6MCx2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLGVuZDovIi8KfSx7YmVnaW46L1xTKy99XSxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHtjbGFzc05hbWU6InRlbXBsYXRlLXZhcmlhYmxlIiwKdmFyaWFudHM6W3tiZWdpbjovXHtcey8sZW5kOi9cfVx9L30se2JlZ2luOi8lXHsvLGVuZDovXH0vfV19XX0saT1lLmluaGVyaXQocyx7CnZhcmlhbnRzOlt7YmVnaW46LycvLGVuZDovJy99LHtiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi9bXlxzLHt9W1xdXSsvfV19KSxsPXsKZW5kOiIsIixlbmRzV2l0aFBhcmVudDohMCxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOltdLGtleXdvcmRzOm4scmVsZXZhbmNlOjB9LHQ9ewpiZWdpbjovXHsvLGVuZDovXH0vLGNvbnRhaW5zOltsXSxpbGxlZ2FsOiJcXG4iLHJlbGV2YW5jZTowfSxnPXtiZWdpbjoiXFxbIiwKZW5kOiJcXF0iLGNvbnRhaW5zOltsXSxpbGxlZ2FsOiJcXG4iLHJlbGV2YW5jZTowfSxiPVt7Y2xhc3NOYW1lOiJhdHRyIiwKdmFyaWFudHM6W3tiZWdpbjoiXFx3W1xcdyA6XFwvLi1dKjooPz1bIFx0XXwkKSJ9LHsKYmVnaW46JyJcXHdbXFx3IDpcXC8uLV0qIjooPz1bIFx0XXwkKSd9LHtiZWdpbjoiJ1xcd1tcXHcgOlxcLy4tXSonOig/PVsgXHRdfCQpIgp9XX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4tLS1cXHMqJCIscmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJzdHJpbmciLApiZWdpbjoiW1xcfD5dKFsxLTldP1srLV0pP1sgXSpcXG4oICspW14gXVteXFxuXSpcXG4oXFwyW15cXG5dK1xcbj8pKiJ9LHsKYmVnaW46IjwlWyU9LV0/IixlbmQ6IlslLV0/JT4iLHN1Ykxhbmd1YWdlOiJydWJ5IixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCwKcmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOiIhXFx3KyEiK2F9LHtjbGFzc05hbWU6InR5cGUiLApiZWdpbjoiITwiK2ErIj4ifSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiISIrYX0se2NsYXNzTmFtZToidHlwZSIsYmVnaW46IiEhIithCn0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiYiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiJCJ9LHtjbGFzc05hbWU6Im1ldGEiLApiZWdpbjoiXFwqIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIiQifSx7Y2xhc3NOYW1lOiJidWxsZXQiLGJlZ2luOiItKD89WyBdfCQpIiwKcmVsZXZhbmNlOjB9LGUuSEFTSF9DT01NRU5UX01PREUse2JlZ2luS2V5d29yZHM6bixrZXl3b3Jkczp7bGl0ZXJhbDpufX0sewpjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiJcXGJbMC05XXs0fSgtWzAtOV1bMC05XSl7MCwyfShbVHQgXFx0XVswLTldWzAtOV0/KDpbMC05XVswLTldKXsyfSk/KFxcLlswLTldKik/KFsgXFx0XSkqKFp8Wy0rXVswLTldWzAtOV0/KDpbMC05XVswLTldKT8pP1xcYiIKfSx7Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOmUuQ19OVU1CRVJfUkUrIlxcYiIscmVsZXZhbmNlOjB9LHQsZyxzXSxyPVsuLi5iXQo7cmV0dXJuIHIucG9wKCksci5wdXNoKGkpLGwuY29udGFpbnM9cix7bmFtZToiWUFNTCIsY2FzZV9pbnNlbnNpdGl2ZTohMCwKYWxpYXNlczpbInltbCIsIllBTUwiXSxjb250YWluczpifX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImVsaXhpciIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CmNvbnN0IG49IlthLXpBLVpfXVthLXpBLVowLTlfLl0qKCF8XFw/KT8iLGk9eyRwYXR0ZXJuOm4sCmtleXdvcmQ6ImFuZCBmYWxzZSB0aGVuIGRlZmluZWQgbW9kdWxlIGluIHJldHVybiByZWRvIHJldHJ5IGVuZCBmb3IgdHJ1ZSBzZWxmIHdoZW4gbmV4dCB1bnRpbCBkbyBiZWdpbiB1bmxlc3MgbmlsIGJyZWFrIG5vdCBjYXNlIGNvbmQgYWxpYXMgd2hpbGUgZW5zdXJlIG9yIGluY2x1ZGUgdXNlIGFsaWFzIGZuIHF1b3RlIHJlcXVpcmUgaW1wb3J0IHdpdGh8MCIKfSxhPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovI1x7LyxlbmQ6L1x9LyxrZXl3b3JkczppfSxzPXtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiIoXFxiMG9bMC03X10rKXwoXFxiMGJbMDFfXSspfChcXGIweFswLTlhLWZBLUZfXSspfCgtP1xcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKFtlRV1bLStdP1swLTldKyk/KT8pIiwKcmVsZXZhbmNlOjB9LGI9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiflthLXpdKD89Wy98KFt7PFwiJ10pIixjb250YWluczpbewplbmRzUGFyZW50OiEwLGNvbnRhaW5zOlt7Y29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxhXSx2YXJpYW50czpbe2JlZ2luOi8iLywKZW5kOi8iL30se2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46L1wvLyxlbmQ6L1wvL30se2JlZ2luOi9cfC8sZW5kOi9cfC99LHsKYmVnaW46L1woLyxlbmQ6L1wpL30se2JlZ2luOi9cWy8sZW5kOi9cXS99LHtiZWdpbjovXHsvLGVuZDovXH0vfSx7YmVnaW46LzwvLAplbmQ6Lz4vfV19XX1dfSxkPXtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxhXSx2YXJpYW50czpbewpiZWdpbjovIiIiLyxlbmQ6LyIiIi99LHtiZWdpbjovJycnLyxlbmQ6LycnJy99LHtiZWdpbjovflMiIiIvLGVuZDovIiIiLywKY29udGFpbnM6W119LHtiZWdpbjovflMiLyxlbmQ6LyIvLGNvbnRhaW5zOltdfSx7YmVnaW46L35TJycnLyxlbmQ6LycnJy8sCmNvbnRhaW5zOltdfSx7YmVnaW46L35TJy8sZW5kOi8nLyxjb250YWluczpbXX0se2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46LyIvLAplbmQ6LyIvfV19LHI9e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImRlZiBkZWZwIGRlZm1hY3JvIixlbmQ6L1xCXGIvLApjb250YWluczpbZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7YmVnaW46bixlbmRzUGFyZW50OiEwfSldfSxnPWUuaW5oZXJpdChyLHsKY2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiZGVmaW1wbCBkZWZtb2R1bGUgZGVmcHJvdG9jb2wgZGVmcmVjb3JkIiwKZW5kOi9cYmRvXGJ8JHw7L30pLHQ9W2Qse2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoifltBLVpdKD89Wy98KFt7PFwiJ10pIiwKY29udGFpbnM6W3tiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46L1wvLyxlbmQ6L1wvL30sewpiZWdpbjovXHwvLGVuZDovXHwvfSx7YmVnaW46L1woLyxlbmQ6L1wpL30se2JlZ2luOi9cWy8sZW5kOi9cXS99LHtiZWdpbjovXHsvLAplbmQ6L1x9L30se2JlZ2luOi88LyxlbmQ6Lz4vfV19LGIsZS5IQVNIX0NPTU1FTlRfTU9ERSxnLHIse2JlZ2luOiI6OiJ9LHsKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiI6KD8hW1xcczpdKSIsY29udGFpbnM6W2QsewpiZWdpbjoiW2EtekEtWl9dXFx3KlshPz1dP3xbLSt+XUB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iCn1dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOm4rIjooPyE6KSIscmVsZXZhbmNlOjB9LHMsewpjbGFzc05hbWU6InZhcmlhYmxlIixiZWdpbjoiKFxcJFxcVyl8KChcXCR8QEA/KShcXHcrKSkifSx7YmVnaW46Ii0+In0sewpiZWdpbjoiKCIrZS5SRV9TVEFSVEVSU19SRSsiKVxccyoiLGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHsKYmVnaW46L1wvOiAoPz1cZCtccypbLFxdXSkvLHJlbGV2YW5jZTowLGNvbnRhaW5zOltzXX0se2NsYXNzTmFtZToicmVnZXhwIiwKaWxsZWdhbDoiXFxuIixjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLGFdLHZhcmlhbnRzOlt7YmVnaW46Ii8iLGVuZDoiL1thLXpdKiIKfSx7YmVnaW46IiVyXFxbIixlbmQ6IlxcXVthLXpdKiJ9XX1dLHJlbGV2YW5jZTowfV07cmV0dXJuIGEuY29udGFpbnM9dCx7Cm5hbWU6IkVsaXhpciIsa2V5d29yZHM6aSxjb250YWluczp0fX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImphdmFzY3JpcHQiLCgoKT0+eyJ1c2Ugc3RyaWN0Igo7Y29uc3QgZT0iW0EtWmEteiRfXVswLTlBLVphLXokX10qIixuPVsiYXMiLCJpbiIsIm9mIiwiaWYiLCJmb3IiLCJ3aGlsZSIsImZpbmFsbHkiLCJ2YXIiLCJuZXciLCJmdW5jdGlvbiIsImRvIiwicmV0dXJuIiwidm9pZCIsImVsc2UiLCJicmVhayIsImNhdGNoIiwiaW5zdGFuY2VvZiIsIndpdGgiLCJ0aHJvdyIsImNhc2UiLCJkZWZhdWx0IiwidHJ5Iiwic3dpdGNoIiwiY29udGludWUiLCJ0eXBlb2YiLCJkZWxldGUiLCJsZXQiLCJ5aWVsZCIsImNvbnN0IiwiY2xhc3MiLCJkZWJ1Z2dlciIsImFzeW5jIiwiYXdhaXQiLCJzdGF0aWMiLCJpbXBvcnQiLCJmcm9tIiwiZXhwb3J0IiwiZXh0ZW5kcyJdLGE9WyJ0cnVlIiwiZmFsc2UiLCJudWxsIiwidW5kZWZpbmVkIiwiTmFOIiwiSW5maW5pdHkiXSxzPVtdLmNvbmNhdChbInNldEludGVydmFsIiwic2V0VGltZW91dCIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJyZXF1aXJlIiwiZXhwb3J0cyIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwidW5lc2NhcGUiXSxbImFyZ3VtZW50cyIsInRoaXMiLCJzdXBlciIsImNvbnNvbGUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImxvY2FsU3RvcmFnZSIsIm1vZHVsZSIsImdsb2JhbCJdLFsiSW50bCIsIkRhdGFWaWV3IiwiTnVtYmVyIiwiTWF0aCIsIkRhdGUiLCJTdHJpbmciLCJSZWdFeHAiLCJPYmplY3QiLCJGdW5jdGlvbiIsIkJvb2xlYW4iLCJFcnJvciIsIlN5bWJvbCIsIlNldCIsIk1hcCIsIldlYWtTZXQiLCJXZWFrTWFwIiwiUHJveHkiLCJSZWZsZWN0IiwiSlNPTiIsIlByb21pc2UiLCJGbG9hdDY0QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkFycmF5QnVmZmVyIl0sWyJFdmFsRXJyb3IiLCJJbnRlcm5hbEVycm9yIiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciJdKQo7ZnVuY3Rpb24gcihlKXtyZXR1cm4gaSgiKD89IixlLCIpIil9ZnVuY3Rpb24gaSguLi5lKXtyZXR1cm4gZS5tYXAoKGU9PnsKcmV0dXJuKG49ZSk/InN0cmluZyI9PXR5cGVvZiBuP246bi5zb3VyY2U6bnVsbDt2YXIgbn0pKS5qb2luKCIiKX1yZXR1cm4gdD0+ewpjb25zdCBjPWUsbz17YmVnaW46LzxbQS1aYS16MC05XFwuXzotXSsvLGVuZDovXC9bQS1aYS16MC05XFwuXzotXSs+fFwvPi8sCmlzVHJ1bHlPcGVuaW5nVGFnOihlLG4pPT57Y29uc3QgYT1lWzBdLmxlbmd0aCtlLmluZGV4LHM9ZS5pbnB1dFthXQo7IjwiIT09cz8iPiI9PT1zJiYoKChlLHthZnRlcjpufSk9Pntjb25zdCBhPSI8LyIrZVswXS5zbGljZSgxKQo7cmV0dXJuLTEhPT1lLmlucHV0LmluZGV4T2YoYSxuKX0pKGUse2FmdGVyOmEKfSl8fG4uaWdub3JlTWF0Y2goKSk6bi5pZ25vcmVNYXRjaCgpfX0sbD17JHBhdHRlcm46ZSxrZXl3b3JkOm4uam9pbigiICIpLApsaXRlcmFsOmEuam9pbigiICIpLGJ1aWx0X2luOnMuam9pbigiICIpCn0sYj0iXFwuKFswLTldKF8/WzAtOV0pKikiLGc9IjB8WzEtOV0oXz9bMC05XSkqfDBbMC03XSpbODldWzAtOV0qIixkPXsKY2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7CmJlZ2luOmAoXFxiKCR7Z30pKCgke2J9KXxcXC4pP3woJHtifSkpW2VFXVsrLV0/KFswLTldKF8/WzAtOV0pKilcXGJgfSx7CmJlZ2luOmBcXGIoJHtnfSlcXGIoKCR7Yn0pXFxifFxcLik/fCgke2J9KVxcYmB9LHsKYmVnaW46IlxcYigwfFsxLTldKF8/WzAtOV0pKiluXFxiIn0sewpiZWdpbjoiXFxiMFt4WF1bMC05YS1mQS1GXShfP1swLTlhLWZBLUZdKSpuP1xcYiJ9LHsKYmVnaW46IlxcYjBbYkJdWzAtMV0oXz9bMC0xXSkqbj9cXGIifSx7YmVnaW46IlxcYjBbb09dWzAtN10oXz9bMC03XSkqbj9cXGIifSx7CmJlZ2luOiJcXGIwWzAtN10rbj9cXGIifV0scmVsZXZhbmNlOjB9LEU9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLAplbmQ6IlxcfSIsa2V5d29yZHM6bCxjb250YWluczpbXX0sdT17YmVnaW46Imh0bWxgIixlbmQ6IiIsc3RhcnRzOntlbmQ6ImAiLApyZXR1cm5FbmQ6ITEsY29udGFpbnM6W3QuQkFDS1NMQVNIX0VTQ0FQRSxFXSxzdWJMYW5ndWFnZToieG1sIn19LF89ewpiZWdpbjoiY3NzYCIsZW5kOiIiLHN0YXJ0czp7ZW5kOiJgIixyZXR1cm5FbmQ6ITEsCmNvbnRhaW5zOlt0LkJBQ0tTTEFTSF9FU0NBUEUsRV0sc3ViTGFuZ3VhZ2U6ImNzcyJ9fSxtPXtjbGFzc05hbWU6InN0cmluZyIsCmJlZ2luOiJgIixlbmQ6ImAiLGNvbnRhaW5zOlt0LkJBQ0tTTEFTSF9FU0NBUEUsRV19LE49e2NsYXNzTmFtZToiY29tbWVudCIsCnZhcmlhbnRzOlt0LkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsCmJlZ2luOiJAW0EtWmEtel0rIixjb250YWluczpbe2NsYXNzTmFtZToidHlwZSIsYmVnaW46IlxceyIsZW5kOiJcXH0iLHJlbGV2YW5jZTowCn0se2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOmMrIig/PVxccyooLSl8JCkiLGVuZHNQYXJlbnQ6ITAscmVsZXZhbmNlOjB9LHsKYmVnaW46Lyg/PVteXG5dKVxzLyxyZWxldmFuY2U6MH1dfV0KfSksdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSx0LkNfTElORV9DT01NRU5UX01PREVdCn0seT1bdC5BUE9TX1NUUklOR19NT0RFLHQuUVVPVEVfU1RSSU5HX01PREUsdSxfLG0sZCx0LlJFR0VYUF9NT0RFXQo7RS5jb250YWlucz15LmNvbmNhdCh7YmVnaW46L1x7LyxlbmQ6L1x9LyxrZXl3b3JkczpsLGNvbnRhaW5zOlsic2VsZiJdLmNvbmNhdCh5KQp9KTtjb25zdCBmPVtdLmNvbmNhdChOLEUuY29udGFpbnMpLEE9Zi5jb25jYXQoW3tiZWdpbjovXCgvLGVuZDovXCkvLGtleXdvcmRzOmwsCmNvbnRhaW5zOlsic2VsZiJdLmNvbmNhdChmKX1dKSxwPXtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLywKZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6bCxjb250YWluczpBfTtyZXR1cm57bmFtZToiSmF2YXNjcmlwdCIsCmFsaWFzZXM6WyJqcyIsImpzeCIsIm1qcyIsImNqcyJdLGtleXdvcmRzOmwsZXhwb3J0czp7UEFSQU1TX0NPTlRBSU5TOkF9LAppbGxlZ2FsOi8jKD8hWyRfQS16XSkvLGNvbnRhaW5zOlt0LlNIRUJBTkcoe2xhYmVsOiJzaGViYW5nIixiaW5hcnk6Im5vZGUiLApyZWxldmFuY2U6NX0pLHtsYWJlbDoidXNlX3N0cmljdCIsY2xhc3NOYW1lOiJtZXRhIixyZWxldmFuY2U6MTAsCmJlZ2luOi9eXHMqWyciXXVzZSAoc3RyaWN0fGFzbSlbJyJdLwp9LHQuQVBPU19TVFJJTkdfTU9ERSx0LlFVT1RFX1NUUklOR19NT0RFLHUsXyxtLE4sZCx7CmJlZ2luOmkoL1t7LFxuXVxzKi8scihpKC8oKChcL1wvLiokKXwoXC9cKihcKlteL118W14qXSkqXCpcLykpXHMqKSovLGMrIlxccyo6IikpKSwKcmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHIiLGJlZ2luOmMrcigiXFxzKjoiKSxyZWxldmFuY2U6MH1dfSx7CmJlZ2luOiIoIit0LlJFX1NUQVJURVJTX1JFKyJ8XFxiKGNhc2V8cmV0dXJufHRocm93KVxcYilcXHMqIiwKa2V5d29yZHM6InJldHVybiB0aHJvdyBjYXNlIixjb250YWluczpbTix0LlJFR0VYUF9NT0RFLHtjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW46IihcXChbXigpXSooXFwoW14oKV0qKFxcKFteKCldKlxcKVteKCldKikqXFwpW14oKV0qKSpcXCl8Iit0LlVOREVSU0NPUkVfSURFTlRfUkUrIilcXHMqPT4iLApyZXR1cm5CZWdpbjohMCxlbmQ6Ilxccyo9PiIsY29udGFpbnM6W3tjbGFzc05hbWU6InBhcmFtcyIsdmFyaWFudHM6W3sKYmVnaW46dC5VTkRFUlNDT1JFX0lERU5UX1JFLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOm51bGwsYmVnaW46L1woXHMqXCkvLHNraXA6ITAKfSx7YmVnaW46L1woLyxlbmQ6L1wpLyxleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpsLGNvbnRhaW5zOkF9XX1dCn0se2JlZ2luOi8sLyxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiIixiZWdpbjovXHMvLGVuZDovXHMqLyxza2lwOiEwfSx7CnZhcmlhbnRzOlt7YmVnaW46Ijw+IixlbmQ6IjwvPiJ9LHtiZWdpbjpvLmJlZ2luLCJvbjpiZWdpbiI6by5pc1RydWx5T3BlbmluZ1RhZywKZW5kOm8uZW5kfV0sc3ViTGFuZ3VhZ2U6InhtbCIsY29udGFpbnM6W3tiZWdpbjpvLmJlZ2luLGVuZDpvLmVuZCxza2lwOiEwLApjb250YWluczpbInNlbGYiXX1dfV0scmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDovW3s7XS8sZXhjbHVkZUVuZDohMCxrZXl3b3JkczpsLApjb250YWluczpbInNlbGYiLHQuaW5oZXJpdCh0LlRJVExFX01PREUse2JlZ2luOmN9KSxwXSxpbGxlZ2FsOi8lL30sewpiZWdpbktleXdvcmRzOiJ3aGlsZSBpZiBzd2l0Y2ggY2F0Y2ggZm9yIn0se2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjp0LlVOREVSU0NPUkVfSURFTlRfUkUrIlxcKFteKCldKihcXChbXigpXSooXFwoW14oKV0qXFwpW14oKV0qKSpcXClbXigpXSopKlxcKVxccypcXHsiLApyZXR1cm5CZWdpbjohMCxjb250YWluczpbcCx0LmluaGVyaXQodC5USVRMRV9NT0RFLHtiZWdpbjpjfSldfSx7dmFyaWFudHM6W3sKYmVnaW46IlxcLiIrY30se2JlZ2luOiJcXCQiK2N9XSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiY2xhc3MiLApiZWdpbktleXdvcmRzOiJjbGFzcyIsZW5kOi9bezs9XS8sZXhjbHVkZUVuZDohMCxpbGxlZ2FsOi9bOiJbXF1dLyxjb250YWluczpbewpiZWdpbktleXdvcmRzOiJleHRlbmRzIn0sdC5VTkRFUlNDT1JFX1RJVExFX01PREVdfSx7YmVnaW46L1xiKD89Y29uc3RydWN0b3IpLywKZW5kOi9beztdLyxleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt0LmluaGVyaXQodC5USVRMRV9NT0RFLHtiZWdpbjpjfSksInNlbGYiLHBdCn0se2JlZ2luOiIoZ2V0fHNldClcXHMrKD89IitjKyJcXCgpIixlbmQ6L1x7LyxrZXl3b3JkczoiZ2V0IHNldCIsCmNvbnRhaW5zOlt0LmluaGVyaXQodC5USVRMRV9NT0RFLHtiZWdpbjpjfSkse2JlZ2luOi9cKFwpL30scF19LHtiZWdpbjovXCRbKC5dL31dCn19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJxbWwiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKC4uLmUpewpyZXR1cm4gZS5tYXAoKGU9PntyZXR1cm4obj1lKT8ic3RyaW5nIj09dHlwZW9mIG4/bjpuLnNvdXJjZTpudWxsO3ZhciBuCn0pKS5qb2luKCIiKX1yZXR1cm4gbj0+e2NvbnN0IHI9IlthLXpBLVpfXVthLXpBLVowLTlcXC5fXSoiLGE9ewpjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46IlxcYmlkXFxzKjoiLHN0YXJ0czp7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZDpyLApyZXR1cm5FbmQ6ITF9fSx0PXtiZWdpbjpyKyJcXHMqOiIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3sKY2xhc3NOYW1lOiJhdHRyaWJ1dGUiLGJlZ2luOnIsZW5kOiJcXHMqOiIsZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MH1dLApyZWxldmFuY2U6MH0saT17YmVnaW46ZShyLC9ccypcey8pLGVuZDovXHsvLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLApjb250YWluczpbbi5pbmhlcml0KG4uVElUTEVfTU9ERSx7YmVnaW46cn0pXX07cmV0dXJue25hbWU6IlFNTCIsYWxpYXNlczpbInF0Il0sCmNhc2VfaW5zZW5zaXRpdmU6ITEsa2V5d29yZHM6ewprZXl3b3JkOiJpbiBvZiBvbiBpZiBmb3Igd2hpbGUgZmluYWxseSB2YXIgbmV3IGZ1bmN0aW9uIGRvIHJldHVybiB2b2lkIGVsc2UgYnJlYWsgY2F0Y2ggaW5zdGFuY2VvZiB3aXRoIHRocm93IGNhc2UgZGVmYXVsdCB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdHlwZW9mIGRlbGV0ZSBsZXQgeWllbGQgY29uc3QgZXhwb3J0IHN1cGVyIGRlYnVnZ2VyIGFzIGFzeW5jIGF3YWl0IGltcG9ydCIsCmxpdGVyYWw6InRydWUgZmFsc2UgbnVsbCB1bmRlZmluZWQgTmFOIEluZmluaXR5IiwKYnVpbHRfaW46ImV2YWwgaXNGaW5pdGUgaXNOYU4gcGFyc2VGbG9hdCBwYXJzZUludCBkZWNvZGVVUkkgZGVjb2RlVVJJQ29tcG9uZW50IGVuY29kZVVSSSBlbmNvZGVVUklDb21wb25lbnQgZXNjYXBlIHVuZXNjYXBlIE9iamVjdCBGdW5jdGlvbiBCb29sZWFuIEVycm9yIEV2YWxFcnJvciBJbnRlcm5hbEVycm9yIFJhbmdlRXJyb3IgUmVmZXJlbmNlRXJyb3IgU3RvcEl0ZXJhdGlvbiBTeW50YXhFcnJvciBUeXBlRXJyb3IgVVJJRXJyb3IgTnVtYmVyIE1hdGggRGF0ZSBTdHJpbmcgUmVnRXhwIEFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXkgSW50MTZBcnJheSBJbnQzMkFycmF5IEludDhBcnJheSBVaW50MTZBcnJheSBVaW50MzJBcnJheSBVaW50OEFycmF5IFVpbnQ4Q2xhbXBlZEFycmF5IEFycmF5QnVmZmVyIERhdGFWaWV3IEpTT04gSW50bCBhcmd1bWVudHMgcmVxdWlyZSBtb2R1bGUgY29uc29sZSB3aW5kb3cgZG9jdW1lbnQgU3ltYm9sIFNldCBNYXAgV2Vha1NldCBXZWFrTWFwIFByb3h5IFJlZmxlY3QgQmVoYXZpb3IgYm9vbCBjb2xvciBjb29yZGluYXRlIGRhdGUgZG91YmxlIGVudW1lcmF0aW9uIGZvbnQgZ2VvY2lyY2xlIGdlb3JlY3RhbmdsZSBnZW9zaGFwZSBpbnQgbGlzdCBtYXRyaXg0eDQgcGFyZW50IHBvaW50IHF1YXRlcm5pb24gcmVhbCByZWN0IHNpemUgc3RyaW5nIHVybCB2YXJpYW50IHZlY3RvcjJkIHZlY3RvcjNkIHZlY3RvcjRkIFByb21pc2UiCn0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOi9eXHMqWyciXXVzZSAoc3RyaWN0fGFzbSlbJyJdLwp9LG4uQVBPU19TVFJJTkdfTU9ERSxuLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46ImAiLGVuZDoiYCIsCmNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEUse2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJcXCRcXHsiLGVuZDoiXFx9In1dCn0sbi5DX0xJTkVfQ09NTUVOVF9NT0RFLG4uQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiXFxiKDBbYkJdWzAxXSspIn0se2JlZ2luOiJcXGIoMFtvT11bMC03XSspIn0se2JlZ2luOm4uQ19OVU1CRVJfUkV9XSwKcmVsZXZhbmNlOjB9LHtiZWdpbjoiKCIrbi5SRV9TVEFSVEVSU19SRSsifFxcYihjYXNlfHJldHVybnx0aHJvdylcXGIpXFxzKiIsCmtleXdvcmRzOiJyZXR1cm4gdGhyb3cgY2FzZSIsCmNvbnRhaW5zOltuLkNfTElORV9DT01NRU5UX01PREUsbi5DX0JMT0NLX0NPTU1FTlRfTU9ERSxuLlJFR0VYUF9NT0RFLHtiZWdpbjovPC8sCmVuZDovPlxzKlspO1xdXS8scmVsZXZhbmNlOjAsc3ViTGFuZ3VhZ2U6InhtbCJ9XSxyZWxldmFuY2U6MH0sewpjbGFzc05hbWU6ImtleXdvcmQiLGJlZ2luOiJcXGJzaWduYWxcXGIiLHN0YXJ0czp7Y2xhc3NOYW1lOiJzdHJpbmciLAplbmQ6IihcXCh8Onw9fDt8LHwvL3wvXFwqfCQpIixyZXR1cm5FbmQ6ITB9fSx7Y2xhc3NOYW1lOiJrZXl3b3JkIiwKYmVnaW46IlxcYnByb3BlcnR5XFxiIixzdGFydHM6e2NsYXNzTmFtZToic3RyaW5nIixlbmQ6Iig6fD18O3wsfC8vfC9cXCp8JCkiLApyZXR1cm5FbmQ6ITB9fSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDovXHsvLApleGNsdWRlRW5kOiEwLGNvbnRhaW5zOltuLmluaGVyaXQobi5USVRMRV9NT0RFLHtiZWdpbjovW0EtWmEteiRfXVswLTlBLVphLXokX10qLwp9KSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sZXhjbHVkZUJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsCmNvbnRhaW5zOltuLkNfTElORV9DT01NRU5UX01PREUsbi5DX0JMT0NLX0NPTU1FTlRfTU9ERV19XSxpbGxlZ2FsOi9cW3wlL30sewpiZWdpbjoiXFwuIituLklERU5UX1JFLHJlbGV2YW5jZTowfSxhLHQsaV0saWxsZWdhbDovIy99fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiY2xvanVyZSIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CnZhciB0PSJhLXpBLVpfXFwtIS4/Kyo9PD4mIyciLG49IlsiK3QrIl1bIit0KyIwLTkvOzpdKiIscj0iZGVmIGRlZm9uY2UgZGVmcHJvdG9jb2wgZGVmc3RydWN0IGRlZm11bHRpIGRlZm1ldGhvZCBkZWZuLSBkZWZuIGRlZm1hY3JvIGRlZnR5cGUgZGVmcmVjb3JkIixhPXsKJHBhdHRlcm46biwKImJ1aWx0aW4tbmFtZSI6cisiIGNvbmQgYXBwbHkgaWYtbm90IGlmLWxldCBpZiBub3Qgbm90PSA9fDAgPHwwID58MCA8PXwwID49fDAgPT18MCArfDAgL3wwICp8MCAtfDAgcmVtIHF1b3QgbmVnPyBwb3M/IGRlbGF5PyBzeW1ib2w/IGtleXdvcmQ/IHRydWU/IGZhbHNlPyBpbnRlZ2VyPyBlbXB0eT8gY29sbD8gbGlzdD8gc2V0PyBpZm4/IGZuPyBhc3NvY2lhdGl2ZT8gc2VxdWVudGlhbD8gc29ydGVkPyBjb3VudGVkPyByZXZlcnNpYmxlPyBudW1iZXI/IGRlY2ltYWw/IGNsYXNzPyBkaXN0aW5jdD8gaXNhPyBmbG9hdD8gcmF0aW9uYWw/IHJlZHVjZWQ/IHJhdGlvPyBvZGQ/IGV2ZW4/IGNoYXI/IHNlcT8gdmVjdG9yPyBzdHJpbmc/IG1hcD8gbmlsPyBjb250YWlucz8gemVybz8gaW5zdGFuY2U/IG5vdC1ldmVyeT8gbm90LWFueT8gbGlic3BlYz8gLT4gLT4+IC4uIC4gaW5jIGNvbXBhcmUgZG8gZG90aW1lcyBtYXBjYXQgdGFrZSByZW1vdmUgdGFrZS13aGlsZSBkcm9wIGxldGZuIGRyb3AtbGFzdCB0YWtlLWxhc3QgZHJvcC13aGlsZSB3aGlsZSBpbnRlcm4gY29uZHAgY2FzZSByZWR1Y2VkIGN5Y2xlIHNwbGl0LWF0IHNwbGl0LXdpdGggcmVwZWF0IHJlcGxpY2F0ZSBpdGVyYXRlIHJhbmdlIG1lcmdlIHppcG1hcCBkZWNsYXJlIGxpbmUtc2VxIHNvcnQgY29tcGFyYXRvciBzb3J0LWJ5IGRvcnVuIGRvYWxsIG50aG5leHQgbnRocmVzdCBwYXJ0aXRpb24gZXZhbCBkb3NlcSBhd2FpdCBhd2FpdC1mb3IgbGV0IGFnZW50IGF0b20gc2VuZCBzZW5kLW9mZiByZWxlYXNlLXBlbmRpbmctc2VuZHMgYWRkLXdhdGNoIG1hcHYgZmlsdGVydiByZW1vdmUtd2F0Y2ggYWdlbnQtZXJyb3IgcmVzdGFydC1hZ2VudCBzZXQtZXJyb3ItaGFuZGxlciBlcnJvci1oYW5kbGVyIHNldC1lcnJvci1tb2RlISBlcnJvci1tb2RlIHNodXRkb3duLWFnZW50cyBxdW90ZSB2YXIgZm4gbG9vcCByZWN1ciB0aHJvdyB0cnkgbW9uaXRvci1lbnRlciBtb25pdG9yLWV4aXQgbWFjcm9leHBhbmQgbWFjcm9leHBhbmQtMSBmb3IgZG9zeW5jIGFuZCBvciB3aGVuIHdoZW4tbm90IHdoZW4tbGV0IGNvbXAganV4dCBwYXJ0aWFsIHNlcXVlbmNlIG1lbW9pemUgY29uc3RhbnRseSBjb21wbGVtZW50IGlkZW50aXR5IGFzc2VydCBwZWVrIHBvcCBkb3RvIHByb3h5IGZpcnN0IHJlc3QgY29ucyBjYXN0IGNvbGwgbGFzdCBidXRsYXN0IHNpZ3MgcmVpZnkgc2Vjb25kIGZmaXJzdCBmbmV4dCBuZmlyc3Qgbm5leHQgbWV0YSB3aXRoLW1ldGEgbnMgaW4tbnMgY3JlYXRlLW5zIGltcG9ydCByZWZlciBrZXlzIHNlbGVjdC1rZXlzIHZhbHMga2V5IHZhbCByc2VxIG5hbWUgbmFtZXNwYWNlIHByb21pc2UgaW50byB0cmFuc2llbnQgcGVyc2lzdGVudCEgY29uaiEgYXNzb2MhIGRpc3NvYyEgcG9wISBkaXNqISB1c2UgY2xhc3MgdHlwZSBudW0gZmxvYXQgZG91YmxlIHNob3J0IGJ5dGUgYm9vbGVhbiBiaWdpbnQgYmlnaW50ZWdlciBiaWdkZWMgcHJpbnQtbWV0aG9kIHByaW50LWR1cCB0aHJvdy1pZiBwcmludGYgZm9ybWF0IGxvYWQgY29tcGlsZSBnZXQtaW4gdXBkYXRlLWluIHByIHByLW9uIG5ld2xpbmUgZmx1c2ggcmVhZCBzbHVycCByZWFkLWxpbmUgc3VidmVjIHdpdGgtb3BlbiBtZW1mbiB0aW1lIHJlLWZpbmQgcmUtZ3JvdXBzIHJhbmQtaW50IHJhbmQgbW9kIGxvY2tpbmcgYXNzZXJ0LXZhbGlkLWZkZWNsIGFsaWFzIHJlc29sdmUgcmVmIGRlcmVmIHJlZnNldCBzd2FwISByZXNldCEgc2V0LXZhbGlkYXRvciEgY29tcGFyZS1hbmQtc2V0ISBhbHRlci1tZXRhISByZXNldC1tZXRhISBjb21tdXRlIGdldC12YWxpZGF0b3IgYWx0ZXIgcmVmLXNldCByZWYtaGlzdG9yeS1jb3VudCByZWYtbWluLWhpc3RvcnkgcmVmLW1heC1oaXN0b3J5IGVuc3VyZSBzeW5jIGlvISBuZXcgbmV4dCBjb25qIHNldCEgdG8tYXJyYXkgZnV0dXJlIGZ1dHVyZS1jYWxsIGludG8tYXJyYXkgYXNldCBnZW4tY2xhc3MgcmVkdWNlIG1hcCBmaWx0ZXIgZmluZCBlbXB0eSBoYXNoLW1hcCBoYXNoLXNldCBzb3J0ZWQtbWFwIHNvcnRlZC1tYXAtYnkgc29ydGVkLXNldCBzb3J0ZWQtc2V0LWJ5IHZlYyB2ZWN0b3Igc2VxIGZsYXR0ZW4gcmV2ZXJzZSBhc3NvYyBkaXNzb2MgbGlzdCBkaXNqIGdldCB1bmlvbiBkaWZmZXJlbmNlIGludGVyc2VjdGlvbiBleHRlbmQgZXh0ZW5kLXR5cGUgZXh0ZW5kLXByb3RvY29sIGludCBudGggZGVsYXkgY291bnQgY29uY2F0IGNodW5rIGNodW5rLWJ1ZmZlciBjaHVuay1hcHBlbmQgY2h1bmstZmlyc3QgY2h1bmstcmVzdCBtYXggbWluIGRlYyB1bmNoZWNrZWQtaW5jLWludCB1bmNoZWNrZWQtaW5jIHVuY2hlY2tlZC1kZWMtaW5jIHVuY2hlY2tlZC1kZWMgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtYWRkLWludCB1bmNoZWNrZWQtYWRkIHVuY2hlY2tlZC1zdWJ0cmFjdC1pbnQgdW5jaGVja2VkLXN1YnRyYWN0IGNodW5rLW5leHQgY2h1bmstY29ucyBjaHVua2VkLXNlcT8gcHJuIHZhcnktbWV0YSBsYXp5LXNlcSBzcHJlYWQgbGlzdCogc3RyIGZpbmQta2V5d29yZCBrZXl3b3JkIHN5bWJvbCBnZW5zeW0gZm9yY2UgcmF0aW9uYWxpemUiCn0scz17YmVnaW46bixyZWxldmFuY2U6MH0sbz17Y2xhc3NOYW1lOiJudW1iZXIiLGJlZ2luOiJbLStdP1xcZCsoXFwuXFxkKyk/IiwKcmVsZXZhbmNlOjB9LGk9ZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbAp9KSxjPWUuQ09NTUVOVCgiOyIsIiQiLHtyZWxldmFuY2U6MH0pLGQ9e2NsYXNzTmFtZToibGl0ZXJhbCIsCmJlZ2luOi9cYih0cnVlfGZhbHNlfG5pbClcYi99LGw9e2JlZ2luOiJbXFxbXFx7XSIsZW5kOiJbXFxdXFx9XSJ9LG09ewpjbGFzc05hbWU6ImNvbW1lbnQiLGJlZ2luOiJcXF4iK259LHA9ZS5DT01NRU5UKCJcXF5cXHsiLCJcXH0iKSx1PXsKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiJbOl17MSwyfSIrbn0sZj17YmVnaW46IlxcKCIsZW5kOiJcXCkifSxoPXsKZW5kc1dpdGhQYXJlbnQ6ITAscmVsZXZhbmNlOjB9LHk9e2tleXdvcmRzOmEsY2xhc3NOYW1lOiJuYW1lIixiZWdpbjpuLApyZWxldmFuY2U6MCxzdGFydHM6aH0sZz1bZixpLG0scCxjLHUsbCxvLGQsc10sYj17YmVnaW5LZXl3b3JkczpyLGxleGVtZXM6biwKZW5kOicoXFxbfCN8XFxkfCJ8OnxcXHt8XFwpfFxcKHwkKScsY29udGFpbnM6W3tjbGFzc05hbWU6InRpdGxlIixiZWdpbjpuLApyZWxldmFuY2U6MCxleGNsdWRlRW5kOiEwLGVuZHNQYXJlbnQ6ITB9XS5jb25jYXQoZyl9CjtyZXR1cm4gZi5jb250YWlucz1bZS5DT01NRU5UKCJjb21tZW50IiwiIiksYix5LGhdLApoLmNvbnRhaW5zPWcsbC5jb250YWlucz1nLHAuY29udGFpbnM9W2xdLHtuYW1lOiJDbG9qdXJlIixhbGlhc2VzOlsiY2xqIl0sCmlsbGVnYWw6L1xTLyxjb250YWluczpbZixpLG0scCxjLHUsbCxvLGRdfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImRpZmYiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+KHtuYW1lOiJEaWZmIiwKYWxpYXNlczpbInBhdGNoIl0sY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCx2YXJpYW50czpbewpiZWdpbjovXkBAICstXGQrLFxkKyArXCtcZCssXGQrICtAQC99LHtiZWdpbjovXlwqXCpcKiArXGQrLFxkKyArXCpcKlwqXCokL30sewpiZWdpbjovXi0tLSArXGQrLFxkKyArLS0tLSQvfV19LHtjbGFzc05hbWU6ImNvbW1lbnQiLHZhcmlhbnRzOlt7YmVnaW46L0luZGV4OiAvLAplbmQ6LyQvfSx7YmVnaW46L15pbmRleC8sZW5kOi8kL30se2JlZ2luOi89ezMsfS8sZW5kOi8kL30se2JlZ2luOi9eLXszfS8sZW5kOi8kLwp9LHtiZWdpbjovXlwqezN9IC8sZW5kOi8kL30se2JlZ2luOi9eXCt7M30vLGVuZDovJC99LHtiZWdpbjovXlwqezE1fSQvfSx7CmJlZ2luOi9eZGlmZiAtLWdpdC8sZW5kOi8kL31dfSx7Y2xhc3NOYW1lOiJhZGRpdGlvbiIsYmVnaW46L15cKy8sZW5kOi8kL30sewpjbGFzc05hbWU6ImRlbGV0aW9uIixiZWdpbjovXi0vLGVuZDovJC99LHtjbGFzc05hbWU6ImFkZGl0aW9uIixiZWdpbjovXiEvLAplbmQ6LyQvfV19KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgic3dpZnQiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e3ZhciBpPXsKJHBhdHRlcm46L1tcdyNdKy8sCmtleXdvcmQ6IiNhdmFpbGFibGUgI2NvbG9yTGl0ZXJhbCAjY29sdW1uICNlbHNlICNlbHNlaWYgI2VuZGlmICNmaWxlICNmaWxlTGl0ZXJhbCAjZnVuY3Rpb24gI2lmICNpbWFnZUxpdGVyYWwgI2xpbmUgI3NlbGVjdG9yICNzb3VyY2VMb2NhdGlvbiBfIF9fQ09MVU1OX18gX19GSUxFX18gX19GVU5DVElPTl9fIF9fTElORV9fIEFueSBhcyBhcyEgYXM/IGFzc29jaWF0ZWR0eXBlIGFzc29jaWF0aXZpdHkgYnJlYWsgY2FzZSBjYXRjaCBjbGFzcyBjb250aW51ZSBjb252ZW5pZW5jZSBkZWZhdWx0IGRlZmVyIGRlaW5pdCBkaWRTZXQgZG8gZHluYW1pYyBkeW5hbWljVHlwZSBlbHNlIGVudW0gZXh0ZW5zaW9uIGZhbGx0aHJvdWdoIGZhbHNlIGZpbGVwcml2YXRlIGZpbmFsIGZvciBmdW5jIGdldCBndWFyZCBpZiBpbXBvcnQgaW4gaW5kaXJlY3QgaW5maXggaW5pdCBpbm91dCBpbnRlcm5hbCBpcyBsYXp5IGxlZnQgbGV0IG11dGF0aW5nIG5pbCBub25lIG5vbm11dGF0aW5nIG9wZW4gb3BlcmF0b3Igb3B0aW9uYWwgb3ZlcnJpZGUgcG9zdGZpeCBwcmVjZWRlbmNlIHByZWZpeCBwcml2YXRlIHByb3RvY29sIFByb3RvY29sIHB1YmxpYyByZXBlYXQgcmVxdWlyZWQgcmV0aHJvd3MgcmV0dXJuIHJpZ2h0IHNlbGYgU2VsZiBzZXQgc29tZSBzdGF0aWMgc3RydWN0IHN1YnNjcmlwdCBzdXBlciBzd2l0Y2ggdGhyb3cgdGhyb3dzIHRydWUgdHJ5IHRyeSEgdHJ5PyBUeXBlIHR5cGVhbGlhcyB1bm93bmVkIHZhciB3ZWFrIHdoZXJlIHdoaWxlIHdpbGxTZXQiLApsaXRlcmFsOiJ0cnVlIGZhbHNlIG5pbCIsCmJ1aWx0X2luOiJhYnMgYWR2YW5jZSBhbGlnbm9mIGFsaWdub2ZWYWx1ZSBhbnlHZW5lcmF0b3IgYXNzZXJ0IGFzc2VydGlvbkZhaWx1cmUgYnJpZGdlRnJvbU9iamVjdGl2ZUMgYnJpZGdlRnJvbU9iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGJyaWRnZVRvT2JqZWN0aXZlQyBicmlkZ2VUb09iamVjdGl2ZUNVbmNvbmRpdGlvbmFsIGMgY29tcGFjdE1hcCBjb250YWlucyBjb3VudCBjb3VudEVsZW1lbnRzIGNvdW50TGVhZGluZ1plcm9zIGRlYnVnUHJpbnQgZGVidWdQcmludGxuIGRpc3RhbmNlIGRyb3BGaXJzdCBkcm9wTGFzdCBkdW1wIGVuY29kZUJpdHNBc1dvcmRzIGVudW1lcmF0ZSBlcXVhbCBmYXRhbEVycm9yIGZpbHRlciBmaW5kIGdldEJyaWRnZWRPYmplY3RpdmVDVHlwZSBnZXRWYUxpc3QgaW5kaWNlcyBpbnNlcnRpb25Tb3J0IGlzQnJpZGdlZFRvT2JqZWN0aXZlQyBpc0JyaWRnZWRWZXJiYXRpbVRvT2JqZWN0aXZlQyBpc1VuaXF1ZWx5UmVmZXJlbmNlZCBpc1VuaXF1ZWx5UmVmZXJlbmNlZE5vbk9iakMgam9pbiBsYXp5IGxleGljb2dyYXBoaWNhbENvbXBhcmUgbWFwIG1heCBtYXhFbGVtZW50IG1pbiBtaW5FbGVtZW50IG51bWVyaWNDYXN0IG92ZXJsYXBzIHBhcnRpdGlvbiBwb3NpeCBwcmVjb25kaXRpb24gcHJlY29uZGl0aW9uRmFpbHVyZSBwcmludCBwcmludGxuIHF1aWNrU29ydCByZWFkTGluZSByZWR1Y2UgcmVmbGVjdCByZWludGVycHJldENhc3QgcmV2ZXJzZSByb3VuZFVwVG9BbGlnbm1lbnQgc2l6ZW9mIHNpemVvZlZhbHVlIHNvcnQgc3BsaXQgc3RhcnRzV2l0aCBzdHJpZGUgc3RyaWRlb2Ygc3RyaWRlb2ZWYWx1ZSBzd2FwIHRvU3RyaW5nIHRyYW5zY29kZSB1bmRlcmVzdGltYXRlQ291bnQgdW5zYWZlQWRkcmVzc09mIHVuc2FmZUJpdENhc3QgdW5zYWZlRG93bmNhc3QgdW5zYWZlVW53cmFwIHVuc2FmZVJlZmxlY3Qgd2l0aEV4dGVuZGVkTGlmZXRpbWUgd2l0aE9iamVjdEF0UGx1c1plcm8gd2l0aFVuc2FmZVBvaW50ZXIgd2l0aFVuc2FmZVBvaW50ZXJUb09iamVjdCB3aXRoVW5zYWZlTXV0YWJsZVBvaW50ZXIgd2l0aFVuc2FmZU11dGFibGVQb2ludGVycyB3aXRoVW5zYWZlUG9pbnRlciB3aXRoVW5zYWZlUG9pbnRlcnMgd2l0aFZhTGlzdCB6aXAiCn0sbj1lLkNPTU1FTlQoIi9cXCoiLCJcXCovIix7Y29udGFpbnM6WyJzZWxmIl19KSx0PXtjbGFzc05hbWU6InN1YnN0IiwKYmVnaW46L1xcXCgvLGVuZDoiXFwpIixrZXl3b3JkczppLGNvbnRhaW5zOltdfSxhPXtjbGFzc05hbWU6InN0cmluZyIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsdF0sdmFyaWFudHM6W3tiZWdpbjovIiIiLyxlbmQ6LyIiIi99LHtiZWdpbjovIi8sCmVuZDovIi99XX0scj0iKFswLTlhLWZBLUZdXyopKyIscz17Y2xhc3NOYW1lOiJudW1iZXIiLHJlbGV2YW5jZTowLHZhcmlhbnRzOlt7CmJlZ2luOiJcXGIoKFswLTldXyopKykoXFwuKChbMC05XV8qKSspKT8oW2VFXVsrLV0/KChbMC05XV8qKSspKT9cXGIifSx7CmJlZ2luOmBcXGIweCgke3J9KShcXC4oJHtyfSkpPyhbcFBdWystXT8oKFswLTldXyopKykpP1xcYmB9LHsKYmVnaW46L1xiMG8oWzAtN11fKikrXGIvfSx7YmVnaW46L1xiMGIoWzAxXV8qKStcYi99XX07cmV0dXJuIHQuY29udGFpbnM9W3NdLHsKbmFtZToiU3dpZnQiLGtleXdvcmRzOmksY29udGFpbnM6W2EsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLG4se2NsYXNzTmFtZToidHlwZSIsCmJlZ2luOiJcXGJbQS1aXVtcXHdceGMwLVx1MDJiOCddKlshP10ifSx7Y2xhc3NOYW1lOiJ0eXBlIiwKYmVnaW46IlxcYltBLVpdW1xcd1x4YzAtXHUwMmI4J10qIixyZWxldmFuY2U6MH0scyx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsCmJlZ2luS2V5d29yZHM6ImZ1bmMiLGVuZDovXHsvLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjovW0EtWmEteiRfXVswLTlBLVphLXokX10qL30pLHtiZWdpbjovPC8sZW5kOi8+L30se2NsYXNzTmFtZToicGFyYW1zIiwKYmVnaW46L1woLyxlbmQ6L1wpLyxlbmRzUGFyZW50OiEwLGtleXdvcmRzOmksCmNvbnRhaW5zOlsic2VsZiIscyxhLGUuQ19CTE9DS19DT01NRU5UX01PREUse2JlZ2luOiI6In1dLGlsbGVnYWw6L1siJ10vfV0sCmlsbGVnYWw6L1xbfCUvfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luS2V5d29yZHM6InN0cnVjdCBwcm90b2NvbCBjbGFzcyBleHRlbnNpb24gZW51bSIsa2V5d29yZHM6aSxlbmQ6IlxceyIsCmV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjovW0EtWmEteiRfXVtcdTAwQzAtXHUwMkI4MC05QS1aYS16JF9dKi99KV19LHtjbGFzc05hbWU6Im1ldGEiLApiZWdpbjoiKEBkaXNjYXJkYWJsZVJlc3VsdHxAd2Fybl91bnVzZWRfcmVzdWx0fEBleHBvcnRlZHxAbGF6eXxAbm9lc2NhcGV8QE5TQ29weWluZ3xATlNNYW5hZ2VkfEBvYmpjfEBvYmpjTWVtYmVyc3xAY29udmVudGlvbnxAcmVxdWlyZWR8QG5vcmV0dXJufEBJQkFjdGlvbnxASUJEZXNpZ25hYmxlfEBJQkluc3BlY3RhYmxlfEBJQk91dGxldHxAaW5maXh8QHByZWZpeHxAcG9zdGZpeHxAYXV0b2Nsb3N1cmV8QHRlc3RhYmxlfEBhdmFpbGFibGV8QG5vbm9iamN8QE5TQXBwbGljYXRpb25NYWlufEBVSUFwcGxpY2F0aW9uTWFpbnxAZHluYW1pY01lbWJlckxvb2t1cHxAcHJvcGVydHlXcmFwcGVyfEBtYWluKVxcYiIKfSx7YmVnaW5LZXl3b3JkczoiaW1wb3J0IixlbmQ6LyQvLGNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsbl0scmVsZXZhbmNlOjAKfV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibGVzcyIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CnZhciBuPSIoW1xcdy1dK3xAXFx7W1xcdy1dK1xcfSkiLGE9W10scz1bXSx0PWU9Pih7Y2xhc3NOYW1lOiJzdHJpbmciLApiZWdpbjoifj8iK2UrIi4qPyIrZX0pLHI9KGUsbixhKT0+KHtjbGFzc05hbWU6ZSxiZWdpbjpuLHJlbGV2YW5jZTphfSksaT17CmJlZ2luOiJcXCgiLGVuZDoiXFwpIixjb250YWluczpzLHJlbGV2YW5jZTowfQo7cy5wdXNoKGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHQoIiciKSx0KCciJyksZS5DU1NfTlVNQkVSX01PREUsewpiZWdpbjoiKHVybHxkYXRhLXVyaSlcXCgiLHN0YXJ0czp7Y2xhc3NOYW1lOiJzdHJpbmciLGVuZDoiW1xcKVxcbl0iLApleGNsdWRlRW5kOiEwfQp9LHIoIm51bWJlciIsIiNbMC05QS1GYS1mXStcXGIiKSxpLHIoInZhcmlhYmxlIiwiQEA/W1xcdy1dKyIsMTApLHIoInZhcmlhYmxlIiwiQFxce1tcXHctXStcXH0iKSxyKCJidWlsdF9pbiIsIn4/YFteYF0qP2AiKSx7CmNsYXNzTmFtZToiYXR0cmlidXRlIixiZWdpbjoiW1xcdy1dK1xccyo6IixlbmQ6IjoiLHJldHVybkJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAKfSx7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiIWltcG9ydGFudCJ9KTt2YXIgYz1zLmNvbmNhdCh7YmVnaW46L1x7LyxlbmQ6L1x9LywKY29udGFpbnM6YX0pLGw9e2JlZ2luS2V5d29yZHM6IndoZW4iLGVuZHNXaXRoUGFyZW50OiEwLGNvbnRhaW5zOlt7CmJlZ2luS2V5d29yZHM6ImFuZCBub3QifV0uY29uY2F0KHMpfSxnPXtiZWdpbjpuKyJcXHMqOiIscmV0dXJuQmVnaW46ITAsCmVuZDoiWzt9XSIscmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImF0dHJpYnV0ZSIsYmVnaW46bixlbmQ6IjoiLApleGNsdWRlRW5kOiEwLHN0YXJ0czp7ZW5kc1dpdGhQYXJlbnQ6ITAsaWxsZWdhbDoiWzw9JF0iLHJlbGV2YW5jZTowLGNvbnRhaW5zOnN9Cn1dfSxkPXtjbGFzc05hbWU6ImtleXdvcmQiLApiZWdpbjoiQChpbXBvcnR8bWVkaWF8Y2hhcnNldHxmb250LWZhY2V8KC1bYS16XSstKT9rZXlmcmFtZXN8c3VwcG9ydHN8ZG9jdW1lbnR8bmFtZXNwYWNlfHBhZ2V8dmlld3BvcnR8aG9zdClcXGIiLApzdGFydHM6e2VuZDoiWzt7fV0iLHJldHVybkVuZDohMCxjb250YWluczpzLHJlbGV2YW5jZTowfX0sbz17CmNsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7YmVnaW46IkBbXFx3LV0rXFxzKjoiLHJlbGV2YW5jZToxNX0sewpiZWdpbjoiQFtcXHctXSsifV0sc3RhcnRzOntlbmQ6Ils7fV0iLHJldHVybkVuZDohMCxjb250YWluczpjfX0sYj17dmFyaWFudHM6W3sKYmVnaW46IltcXC4jOiZcXFs+XSIsZW5kOiJbO3t9XSJ9LHtiZWdpbjpuLGVuZDovXHsvfV0scmV0dXJuQmVnaW46ITAsCnJldHVybkVuZDohMCxpbGxlZ2FsOiJbPD0nJFwiXSIscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxsLHIoImtleXdvcmQiLCJhbGxcXGIiKSxyKCJ2YXJpYWJsZSIsIkBcXHtbXFx3LV0rXFx9Iikscigic2VsZWN0b3ItdGFnIixuKyIlPyIsMCkscigic2VsZWN0b3ItaWQiLCIjIituKSxyKCJzZWxlY3Rvci1jbGFzcyIsIlxcLiIrbiwwKSxyKCJzZWxlY3Rvci10YWciLCImIiwwKSx7CmNsYXNzTmFtZToic2VsZWN0b3ItYXR0ciIsYmVnaW46IlxcWyIsZW5kOiJcXF0ifSx7Y2xhc3NOYW1lOiJzZWxlY3Rvci1wc2V1ZG8iLApiZWdpbjovOig6KT9bYS16QS1aMC05X1wtKygpIicuXSsvfSx7YmVnaW46IlxcKCIsZW5kOiJcXCkiLGNvbnRhaW5zOmN9LHsKYmVnaW46IiFpbXBvcnRhbnQifV19CjtyZXR1cm4gYS5wdXNoKGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGQsbyxnLGIpLHsKbmFtZToiTGVzcyIsY2FzZV9pbnNlbnNpdGl2ZTohMCxpbGxlZ2FsOiJbPT4nLzwoJFwiXSIsY29udGFpbnM6YX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJiYXNoIiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSguLi5lKXsKcmV0dXJuIGUubWFwKChlPT57cmV0dXJuKHM9ZSk/InN0cmluZyI9PXR5cGVvZiBzP3M6cy5zb3VyY2U6bnVsbDt2YXIgcwp9KSkuam9pbigiIil9cmV0dXJuIHM9Pntjb25zdCBuPXt9LHQ9e2JlZ2luOi9cJFx7LyxlbmQ6L1x9Lyxjb250YWluczpbInNlbGYiLHsKYmVnaW46LzotLyxjb250YWluczpbbl19XX07T2JqZWN0LmFzc2lnbihuLHtjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbewpiZWdpbjplKC9cJFtcd1xkI0BdW1x3XGRfXSovLCIoPyFbXFx3XFxkXSkoPyFbJF0pIil9LHRdfSk7Y29uc3QgYT17CmNsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cJFwoLyxlbmQ6L1wpLyxjb250YWluczpbcy5CQUNLU0xBU0hfRVNDQVBFXX0saT17CmJlZ2luOi88PC0/XHMqKD89XHcrKS8sc3RhcnRzOntjb250YWluczpbcy5FTkRfU0FNRV9BU19CRUdJTih7YmVnaW46LyhcdyspLywKZW5kOi8oXHcrKS8sY2xhc3NOYW1lOiJzdHJpbmcifSldfX0sYz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvLApjb250YWluczpbcy5CQUNLU0xBU0hfRVNDQVBFLG4sYV19O2EuY29udGFpbnMucHVzaChjKTtjb25zdCBvPXtiZWdpbjovXCRcKFwoLywKZW5kOi9cKVwpLyxjb250YWluczpbe2JlZ2luOi9cZCsjWzAtOWEtZl0rLyxjbGFzc05hbWU6Im51bWJlciJ9LHMuTlVNQkVSX01PREUsbl0KfSxyPXMuU0hFQkFORyh7YmluYXJ5OiIoZmlzaHxiYXNofHpzaHxzaHxjc2h8a3NofHRjc2h8ZGFzaHxzY3NoKSIscmVsZXZhbmNlOjEwCn0pLGw9e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOi9cd1tcd1xkX10qXHMqXChccypcKVxzKlx7LyxyZXR1cm5CZWdpbjohMCwKY29udGFpbnM6W3MuaW5oZXJpdChzLlRJVExFX01PREUse2JlZ2luOi9cd1tcd1xkX10qL30pXSxyZWxldmFuY2U6MH07cmV0dXJuewpuYW1lOiJCYXNoIixhbGlhc2VzOlsic2giLCJ6c2giXSxrZXl3b3Jkczp7JHBhdHRlcm46L1xiW2Etei5fLV0rXGIvLAprZXl3b3JkOiJpZiB0aGVuIGVsc2UgZWxpZiBmaSBmb3Igd2hpbGUgaW4gZG8gZG9uZSBjYXNlIGVzYWMgZnVuY3Rpb24iLApsaXRlcmFsOiJ0cnVlIGZhbHNlIiwKYnVpbHRfaW46ImJyZWFrIGNkIGNvbnRpbnVlIGV2YWwgZXhlYyBleGl0IGV4cG9ydCBnZXRvcHRzIGhhc2ggcHdkIHJlYWRvbmx5IHJldHVybiBzaGlmdCB0ZXN0IHRpbWVzIHRyYXAgdW1hc2sgdW5zZXQgYWxpYXMgYmluZCBidWlsdGluIGNhbGxlciBjb21tYW5kIGRlY2xhcmUgZWNobyBlbmFibGUgaGVscCBsZXQgbG9jYWwgbG9nb3V0IG1hcGZpbGUgcHJpbnRmIHJlYWQgcmVhZGFycmF5IHNvdXJjZSB0eXBlIHR5cGVzZXQgdWxpbWl0IHVuYWxpYXMgc2V0IHNob3B0IGF1dG9sb2FkIGJnIGJpbmRrZXkgYnllIGNhcCBjaGRpciBjbG9uZSBjb21wYXJndW1lbnRzIGNvbXBjYWxsIGNvbXBjdGwgY29tcGRlc2NyaWJlIGNvbXBmaWxlcyBjb21wZ3JvdXBzIGNvbXBxdW90ZSBjb21wdGFncyBjb21wdHJ5IGNvbXB2YWx1ZXMgZGlycyBkaXNhYmxlIGRpc293biBlY2hvdGMgZWNob3RpIGVtdWxhdGUgZmMgZmcgZmxvYXQgZnVuY3Rpb25zIGdldGNhcCBnZXRsbiBoaXN0b3J5IGludGVnZXIgam9icyBraWxsIGxpbWl0IGxvZyBub2dsb2IgcG9wZCBwcmludCBwdXNoZCBwdXNobG4gcmVoYXNoIHNjaGVkIHNldGNhcCBzZXRvcHQgc3RhdCBzdXNwZW5kIHR0eWN0bCB1bmZ1bmN0aW9uIHVuaGFzaCB1bmxpbWl0IHVuc2V0b3B0IHZhcmVkIHdhaXQgd2hlbmNlIHdoZXJlIHdoaWNoIHpjb21waWxlIHpmb3JtYXQgemZ0cCB6bGUgem1vZGxvYWQgenBhcnNlb3B0cyB6cHJvZiB6cHR5IHpyZWdleHBhcnNlIHpzb2NrZXQgenN0eWxlIHp0Y3AiCn0sY29udGFpbnM6W3Iscy5TSEVCQU5HKCksbCxvLHMuSEFTSF9DT01NRU5UX01PREUsaSxjLHtjbGFzc05hbWU6IiIsYmVnaW46L1xcIi8KfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8nLyxlbmQ6LycvfSxuXX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJkb2NrZXJmaWxlIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pih7Cm5hbWU6IkRvY2tlcmZpbGUiLGFsaWFzZXM6WyJkb2NrZXIiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLAprZXl3b3JkczoiZnJvbSBtYWludGFpbmVyIGV4cG9zZSBlbnYgYXJnIHVzZXIgb25idWlsZCBzdG9wc2lnbmFsIiwKY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5OVU1CRVJfTU9ERSx7CmJlZ2luS2V5d29yZHM6InJ1biBjbWQgZW50cnlwb2ludCB2b2x1bWUgYWRkIGNvcHkgd29ya2RpciBsYWJlbCBoZWFsdGhjaGVjayBzaGVsbCIsCnN0YXJ0czp7ZW5kOi9bXlxcXSQvLHN1Ykxhbmd1YWdlOiJiYXNoIn19XSxpbGxlZ2FsOiI8LyJ9KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiZXJsYW5nIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKY29uc3Qgbj0iW2EteiddW2EtekEtWjAtOV8nXSoiLHI9IigiK24rIjoiK24rInwiK24rIikiLGE9ewprZXl3b3JkOiJhZnRlciBhbmQgYW5kYWxzb3wxMCBiYW5kIGJlZ2luIGJub3QgYm9yIGJzbCBienIgYnhvciBjYXNlIGNhdGNoIGNvbmQgZGl2IGVuZCBmdW4gaWYgbGV0IG5vdCBvZiBvcmVsc2V8MTAgcXVlcnkgcmVjZWl2ZSByZW0gdHJ5IHdoZW4geG9yIiwKbGl0ZXJhbDoiZmFsc2UgdHJ1ZSJ9LGk9ZS5DT01NRU5UKCIlIiwiJCIpLHM9e2NsYXNzTmFtZToibnVtYmVyIiwKYmVnaW46IlxcYihcXGQrKF9cXGQrKSojW2EtZkEtRjAtOV0rKF9bYS1mQS1GMC05XSspKnxcXGQrKF9cXGQrKSooXFwuXFxkKyhfXFxkKykqKT8oW2VFXVstK10/XFxkKyk/KSIsCnJlbGV2YW5jZTowfSxjPXtiZWdpbjoiZnVuXFxzKyIrbisiL1xcZCsifSx0PXtiZWdpbjpyKyJcXCgiLGVuZDoiXFwpIiwKcmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjpyLHJlbGV2YW5jZTowfSx7YmVnaW46IlxcKCIsCmVuZDoiXFwpIixlbmRzV2l0aFBhcmVudDohMCxyZXR1cm5FbmQ6ITAscmVsZXZhbmNlOjB9XX0sZD17YmVnaW46L1x7LyxlbmQ6L1x9LywKcmVsZXZhbmNlOjB9LG89e2JlZ2luOiJcXGJfKFtBLVpdW0EtWmEtejAtOV9dKik/IixyZWxldmFuY2U6MH0sbD17CmJlZ2luOiJbQS1aXVthLXpBLVowLTlfXSoiLHJlbGV2YW5jZTowfSxiPXtiZWdpbjoiIyIrZS5VTkRFUlNDT1JFX0lERU5UX1JFLApyZWxldmFuY2U6MCxyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2JlZ2luOiIjIitlLlVOREVSU0NPUkVfSURFTlRfUkUsCnJlbGV2YW5jZTowfSx7YmVnaW46L1x7LyxlbmQ6L1x9LyxyZWxldmFuY2U6MH1dfSxnPXsKYmVnaW5LZXl3b3JkczoiZnVuIHJlY2VpdmUgaWYgdHJ5IGNhc2UiLGVuZDoiZW5kIixrZXl3b3JkczphfQo7Zy5jb250YWlucz1baSxjLGUuaW5oZXJpdChlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToiIgp9KSxnLHQsZS5RVU9URV9TVFJJTkdfTU9ERSxzLGQsbyxsLGJdCjtjb25zdCBFPVtpLGMsZyx0LGUuUVVPVEVfU1RSSU5HX01PREUscyxkLG8sbCxiXQo7dC5jb250YWluc1sxXS5jb250YWlucz1FLGQuY29udGFpbnM9RSxiLmNvbnRhaW5zWzFdLmNvbnRhaW5zPUU7Y29uc3QgdT17CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoIixlbmQ6IlxcKSIsY29udGFpbnM6RX07cmV0dXJue25hbWU6IkVybGFuZyIsCmFsaWFzZXM6WyJlcmwiXSxrZXl3b3JkczphLGlsbGVnYWw6Iig8L3xcXCo9fFxcKz18LT18L1xcKnxcXCovfFxcKFxcKnxcXCpcXCkpIiwKY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiXiIrbisiXFxzKlxcKCIsZW5kOiItPiIscmV0dXJuQmVnaW46ITAsCmlsbGVnYWw6IlxcKHwjfC8vfC9cXCp8XFxcXHw6fDsiLGNvbnRhaW5zOlt1LGUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOm59KV0sCnN0YXJ0czp7ZW5kOiI7fFxcLiIsa2V5d29yZHM6YSxjb250YWluczpFfX0saSx7YmVnaW46Il4tIixlbmQ6IlxcLiIscmVsZXZhbmNlOjAsCmV4Y2x1ZGVFbmQ6ITAscmV0dXJuQmVnaW46ITAsa2V5d29yZHM6eyRwYXR0ZXJuOiItIitlLklERU5UX1JFLAprZXl3b3JkOiItbW9kdWxlIC1yZWNvcmQgLXVuZGVmIC1leHBvcnQgLWlmZGVmIC1pZm5kZWYgLWF1dGhvciAtY29weXJpZ2h0IC1kb2MgLXZzbiAtaW1wb3J0IC1pbmNsdWRlIC1pbmNsdWRlX2xpYiAtY29tcGlsZSAtZGVmaW5lIC1lbHNlIC1lbmRpZiAtZmlsZSAtYmVoYXZpb3VyIC1iZWhhdmlvciAtc3BlYyIKfSxjb250YWluczpbdV19LHMsZS5RVU9URV9TVFJJTkdfTU9ERSxiLG8sbCxkLHtiZWdpbjovXC4kL31dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInB5dGhvbi1yZXBsIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIHM9Pih7CmFsaWFzZXM6WyJweWNvbiJdLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixzdGFydHM6e2VuZDovIHwkLyxzdGFydHM6e2VuZDoiJCIsCnN1Ykxhbmd1YWdlOiJweXRob24ifX0sdmFyaWFudHM6W3tiZWdpbjovXj4+Pig/PVsgXXwkKS99LHsKYmVnaW46L15cLlwuXC4oPz1bIF18JCkvfV19XX0pfSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJwZXJsIiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSguLi5lKXsKcmV0dXJuIGUubWFwKChlPT57cmV0dXJuKG49ZSk/InN0cmluZyI9PXR5cGVvZiBuP246bi5zb3VyY2U6bnVsbDt2YXIgbgp9KSkuam9pbigiIil9cmV0dXJuIG49Pntjb25zdCB0PS9bZHVhbHhtc2lwbl17MCwxMn0vLHM9eyRwYXR0ZXJuOi9bXHcuXSsvLAprZXl3b3JkOiJnZXRwd2VudCBnZXRzZXJ2ZW50IHF1b3RlbWV0YSBtc2dyY3Ygc2NhbGFyIGtpbGwgZGJtY2xvc2UgdW5kZWYgbGMgbWEgc3lzd3JpdGUgdHIgc2VuZCB1bWFzayBzeXNvcGVuIHNobXdyaXRlIHZlYyBxeCB1dGltZSBsb2NhbCBvY3Qgc2VtY3RsIGxvY2FsdGltZSByZWFkcGlwZSBkbyByZXR1cm4gZm9ybWF0IHJlYWQgc3ByaW50ZiBkYm1vcGVuIHBvcCBnZXRwZ3JwIG5vdCBnZXRwd25hbSByZXdpbmRkaXIgcXEgZmlsZW5vIHF3IGVuZHByb3RvZW50IHdhaXQgc2V0aG9zdGVudCBibGVzcyBzfDAgb3BlbmRpciBjb250aW51ZSBlYWNoIHNsZWVwIGVuZGdyZW50IHNodXRkb3duIGR1bXAgY2hvbXAgY29ubmVjdCBnZXRzb2NrbmFtZSBkaWUgc29ja2V0cGFpciBjbG9zZSBmbG9jayBleGlzdHMgaW5kZXggc2htZ2V0IHN1YiBmb3IgZW5kcHdlbnQgcmVkbyBsc3RhdCBtc2djdGwgc2V0cGdycCBhYnMgZXhpdCBzZWxlY3QgcHJpbnQgcmVmIGdldGhvc3RieWFkZHIgdW5zaGlmdCBmY250bCBzeXNjYWxsIGdvdG8gZ2V0bmV0YnlhZGRyIGpvaW4gZ210aW1lIHN5bWxpbmsgc2VtZ2V0IHNwbGljZSB4fDAgZ2V0cGVlcm5hbWUgcmVjdiBsb2cgc2V0c29ja29wdCBjb3MgbGFzdCByZXZlcnNlIGdldGhvc3RieW5hbWUgZ2V0Z3JuYW0gc3R1ZHkgZm9ybWxpbmUgZW5kaG9zdGVudCB0aW1lcyBjaG9wIGxlbmd0aCBnZXRob3N0ZW50IGdldG5ldGVudCBwYWNrIGdldHByb3RvZW50IGdldHNlcnZieW5hbWUgcmFuZCBta2RpciBwb3MgY2htb2QgeXwwIHN1YnN0ciBlbmRuZXRlbnQgcHJpbnRmIG5leHQgb3BlbiBtc2dzbmQgcmVhZGRpciB1c2UgdW5saW5rIGdldHNvY2tvcHQgZ2V0cHJpb3JpdHkgcmluZGV4IHdhbnRhcnJheSBoZXggc3lzdGVtIGdldHNlcnZieXBvcnQgZW5kc2VydmVudCBpbnQgY2hyIHVudGllIHJtZGlyIHByb3RvdHlwZSB0ZWxsIGxpc3RlbiBmb3JrIHNobXJlYWQgdWNmaXJzdCBzZXRwcm90b2VudCBlbHNlIHN5c3NlZWsgbGluayBnZXRncmdpZCBzaG1jdGwgd2FpdHBpZCB1bnBhY2sgZ2V0bmV0YnluYW1lIHJlc2V0IGNoZGlyIGdyZXAgc3BsaXQgcmVxdWlyZSBjYWxsZXIgbGNmaXJzdCB1bnRpbCB3YXJuIHdoaWxlIHZhbHVlcyBzaGlmdCB0ZWxsZGlyIGdldHB3dWlkIG15IGdldHByb3RvYnludW1iZXIgZGVsZXRlIGFuZCBzb3J0IHVjIGRlZmluZWQgc3JhbmQgYWNjZXB0IHBhY2thZ2Ugc2Vla2RpciBnZXRwcm90b2J5bmFtZSBzZW1vcCBvdXIgcmVuYW1lIHNlZWsgaWYgcXwwIGNocm9vdCBzeXNyZWFkIHNldHB3ZW50IG5vIGNyeXB0IGdldGMgY2hvd24gc3FydCB3cml0ZSBzZXRuZXRlbnQgc2V0cHJpb3JpdHkgZm9yZWFjaCB0aWUgc2luIG1zZ2dldCBtYXAgc3RhdCBnZXRsb2dpbiB1bmxlc3MgZWxzaWYgdHJ1bmNhdGUgZXhlYyBrZXlzIGdsb2IgdGllZCBjbG9zZWRpciBpb2N0bCBzb2NrZXQgcmVhZGxpbmsgZXZhbCB4b3IgcmVhZGxpbmUgYmlubW9kZSBzZXRzZXJ2ZW50IGVvZiBvcmQgYmluZCBhbGFybSBwaXBlIGF0YW4yIGdldGdyZW50IGV4cCB0aW1lIHB1c2ggc2V0Z3JlbnQgZ3QgbHQgb3IgbmUgbXwwIGJyZWFrIGdpdmVuIHNheSBzdGF0ZSB3aGVuIgp9LHI9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOiJbJEBdXFx7IixlbmQ6IlxcfSIsa2V5d29yZHM6c30saT17YmVnaW46Ly0+XHsvLAplbmQ6L1x9L30sYT17dmFyaWFudHM6W3tiZWdpbjovXCRcZC99LHsKYmVnaW46ZSgvWyQlQF0oXF5cd1xifCNcdysoOjpcdyspKnxce1x3K1x9fFx3Kyg6Olx3KikqKS8sIig/IVtBLVphLXpdKSg/IVtAJCVdKSIpCn0se2JlZ2luOi9bJCVAXVteXHNcd3tdLyxyZWxldmFuY2U6MH1dCn0sbz1bbi5CQUNLU0xBU0hfRVNDQVBFLHIsYV0sYz1bYSxuLkhBU0hfQ09NTUVOVF9NT0RFLG4uQ09NTUVOVCgvXj1cdy8sLz1jdXQvLHsKZW5kc1dpdGhQYXJlbnQ6ITB9KSxpLHtjbGFzc05hbWU6InN0cmluZyIsY29udGFpbnM6byx2YXJpYW50czpbewpiZWdpbjoicVtxd3hyXT9cXHMqXFwoIixlbmQ6IlxcKSIscmVsZXZhbmNlOjV9LHtiZWdpbjoicVtxd3hyXT9cXHMqXFxbIiwKZW5kOiJcXF0iLHJlbGV2YW5jZTo1fSx7YmVnaW46InFbcXd4cl0/XFxzKlxceyIsZW5kOiJcXH0iLHJlbGV2YW5jZTo1fSx7CmJlZ2luOiJxW3F3eHJdP1xccypcXHwiLGVuZDoiXFx8IixyZWxldmFuY2U6NX0se2JlZ2luOiJxW3F3eHJdP1xccyo8IixlbmQ6Ij4iLApyZWxldmFuY2U6NX0se2JlZ2luOiJxd1xccytxIixlbmQ6InEiLHJlbGV2YW5jZTo1fSx7YmVnaW46IiciLGVuZDoiJyIsCmNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46JyInLGVuZDonIid9LHtiZWdpbjoiYCIsZW5kOiJgIiwKY29udGFpbnM6W24uQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjovXHtcdytcfS8sY29udGFpbnM6W10scmVsZXZhbmNlOjB9LHsKYmVnaW46Ii0/XFx3K1xccyo9PiIsY29udGFpbnM6W10scmVsZXZhbmNlOjB9XX0se2NsYXNzTmFtZToibnVtYmVyIiwKYmVnaW46IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLApyZWxldmFuY2U6MH0sewpiZWdpbjoiKFxcL1xcL3wiK24uUkVfU1RBUlRFUlNfUkUrInxcXGIoc3BsaXR8cmV0dXJufHByaW50fHJldmVyc2V8Z3JlcClcXGIpXFxzKiIsCmtleXdvcmRzOiJzcGxpdCByZXR1cm4gcHJpbnQgcmV2ZXJzZSBncmVwIixyZWxldmFuY2U6MCwKY29udGFpbnM6W24uSEFTSF9DT01NRU5UX01PREUse2NsYXNzTmFtZToicmVnZXhwIiwKYmVnaW46ZSgvKHN8dHJ8eSkvLC9cLy8sLyhcXC58W15cXFwvXSkqLywvXC8vLC8oXFwufFteXFxcL10pKi8sL1wvLyx0KSwKcmVsZXZhbmNlOjEwfSx7Y2xhc3NOYW1lOiJyZWdleHAiLGJlZ2luOi8obXxxcik/XC8vLGVuZDplKC9cLy8sdCksCmNvbnRhaW5zOltuLkJBQ0tTTEFTSF9FU0NBUEVdLHJlbGV2YW5jZTowfV19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW5LZXl3b3Jkczoic3ViIixlbmQ6IihcXHMqXFwoLio/XFwpKT9bO3tdIixleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTo1LApjb250YWluczpbbi5USVRMRV9NT0RFXX0se2JlZ2luOiItXFx3XFxiIixyZWxldmFuY2U6MH0se2JlZ2luOiJeX19EQVRBX18kIiwKZW5kOiJeX19FTkRfXyQiLHN1Ykxhbmd1YWdlOiJtb2pvbGljaW91cyIsY29udGFpbnM6W3tiZWdpbjoiXkBALioiLGVuZDoiJCIsCmNsYXNzTmFtZToiY29tbWVudCJ9XX1dO3JldHVybiByLmNvbnRhaW5zPWMsaS5jb250YWlucz1jLHtuYW1lOiJQZXJsIiwKYWxpYXNlczpbInBsIiwicG0iXSxrZXl3b3JkczpzLGNvbnRhaW5zOmN9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiZ3JhZGxlIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pih7bmFtZToiR3JhZGxlIiwKY2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3Jkczp7CmtleXdvcmQ6InRhc2sgcHJvamVjdCBhbGxwcm9qZWN0cyBzdWJwcm9qZWN0cyBhcnRpZmFjdHMgYnVpbGRzY3JpcHQgY29uZmlndXJhdGlvbnMgZGVwZW5kZW5jaWVzIHJlcG9zaXRvcmllcyBzb3VyY2VTZXRzIGRlc2NyaXB0aW9uIGRlbGV0ZSBmcm9tIGludG8gaW5jbHVkZSBleGNsdWRlIHNvdXJjZSBjbGFzc3BhdGggZGVzdGluYXRpb25EaXIgaW5jbHVkZXMgb3B0aW9ucyBzb3VyY2VDb21wYXRpYmlsaXR5IHRhcmdldENvbXBhdGliaWxpdHkgZ3JvdXAgZmxhdERpciBkb0xhc3QgZG9GaXJzdCBmbGF0dGVuIHRvZGlyIGZyb21kaXIgYW50IGRlZiBhYnN0cmFjdCBicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlZmF1bHQgZG8gZWxzZSBleHRlbmRzIGZpbmFsIGZpbmFsbHkgZm9yIGlmIGltcGxlbWVudHMgaW5zdGFuY2VvZiBuYXRpdmUgbmV3IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZXR1cm4gc3RhdGljIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCB0cnkgdm9sYXRpbGUgd2hpbGUgc3RyaWN0ZnAgcGFja2FnZSBpbXBvcnQgZmFsc2UgbnVsbCBzdXBlciB0aGlzIHRydWUgYW50bHJ0YXNrIGNoZWNrc3R5bGUgY29kZW5hcmMgY29weSBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZmxvYXQgaW50IGludGVyZmFjZSBsb25nIHNob3J0IHZvaWQgY29tcGlsZSBydW5UaW1lIGZpbGUgZmlsZVRyZWUgYWJzIGFueSBhcHBlbmQgYXNMaXN0IGFzV3JpdGFibGUgY2FsbCBjb2xsZWN0IGNvbXBhcmVUbyBjb3VudCBkaXYgZHVtcCBlYWNoIGVhY2hCeXRlIGVhY2hGaWxlIGVhY2hMaW5lIGV2ZXJ5IGZpbmQgZmluZEFsbCBmbGF0dGVuIGdldEF0IGdldEVyciBnZXRJbiBnZXRPdXQgZ2V0VGV4dCBncmVwIGltbXV0YWJsZSBpbmplY3QgaW5zcGVjdCBpbnRlcnNlY3QgaW52b2tlTWV0aG9kcyBpc0Nhc2Ugam9pbiBsZWZ0U2hpZnQgbWludXMgbXVsdGlwbHkgbmV3SW5wdXRTdHJlYW0gbmV3T3V0cHV0U3RyZWFtIG5ld1ByaW50V3JpdGVyIG5ld1JlYWRlciBuZXdXcml0ZXIgbmV4dCBwbHVzIHBvcCBwb3dlciBwcmV2aW91cyBwcmludCBwcmludGxuIHB1c2ggcHV0QXQgcmVhZCByZWFkQnl0ZXMgcmVhZExpbmVzIHJldmVyc2UgcmV2ZXJzZUVhY2ggcm91bmQgc2l6ZSBzb3J0IHNwbGl0RWFjaExpbmUgc3RlcCBzdWJNYXAgdGltZXMgdG9JbnRlZ2VyIHRvTGlzdCB0b2tlbml6ZSB1cHRvIHdhaXRGb3JPcktpbGwgd2l0aFByaW50V3JpdGVyIHdpdGhSZWFkZXIgd2l0aFN0cmVhbSB3aXRoV3JpdGVyIHdpdGhXcml0ZXJBcHBlbmQgd3JpdGUgd3JpdGVMaW5lIgp9LApjb250YWluczpbZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUsZS5OVU1CRVJfTU9ERSxlLlJFR0VYUF9NT0RFXQp9KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiY3BwIiwoKCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZShlKXsKcmV0dXJuKCguLi5lKT0+ZS5tYXAoKGU9PihlPT5lPyJzdHJpbmciPT10eXBlb2YgZT9lOmUuc291cmNlOm51bGwpKGUpKSkuam9pbigiIikpKCIoIixlLCIpPyIpCn1yZXR1cm4gdD0+e2NvbnN0IG49KHQ9Pntjb25zdCBuPXQuQ09NTUVOVCgiLy8iLCIkIix7Y29udGFpbnM6W3tiZWdpbjovXFxcbi99XQp9KSxyPSJbYS16QS1aX11cXHcqOjoiLGE9IihkZWNsdHlwZVxcKGF1dG9cXCl8IitlKHIpKyJbYS16QS1aX11cXHcqIitlKCI8W148Pl0rPiIpKyIpIixzPXsKY2xhc3NOYW1lOiJrZXl3b3JkIixiZWdpbjoiXFxiW2EtelxcZF9dKl90XFxiIn0saT17Y2xhc3NOYW1lOiJzdHJpbmciLAp2YXJpYW50czpbe2JlZ2luOicodTg/fFV8TCk/IicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLApjb250YWluczpbdC5CQUNLU0xBU0hfRVNDQVBFXX0sewpiZWdpbjoiKHU4P3xVfEwpPycoXFxcXCh4WzAtOUEtRmEtZl17Mn18dVswLTlBLUZhLWZdezQsOH18WzAtN117M318XFxTKXwuKSIsCmVuZDoiJyIsaWxsZWdhbDoiLiJ9LHQuRU5EX1NBTUVfQVNfQkVHSU4oewpiZWdpbjovKD86dTg/fFV8TCk/UiIoW14oKVxcIF17MCwxNn0pXCgvLGVuZDovXCkoW14oKVxcIF17MCwxNn0pIi99KV19LGM9ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3tiZWdpbjoiXFxiKDBiWzAxJ10rKSJ9LHsKYmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHsKYmVnaW46IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIgp9XSxyZWxldmFuY2U6MH0sbz17Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovI1xzKlthLXpdK1xiLyxlbmQ6LyQvLGtleXdvcmRzOnsKIm1ldGEta2V5d29yZCI6ImlmIGVsc2UgZWxpZiBlbmRpZiBkZWZpbmUgdW5kZWYgd2FybmluZyBlcnJvciBsaW5lIHByYWdtYSBfUHJhZ21hIGlmZGVmIGlmbmRlZiBpbmNsdWRlIgp9LGNvbnRhaW5zOlt7YmVnaW46L1xcXG4vLHJlbGV2YW5jZTowfSx0LmluaGVyaXQoaSx7Y2xhc3NOYW1lOiJtZXRhLXN0cmluZyJ9KSx7CmNsYXNzTmFtZToibWV0YS1zdHJpbmciLGJlZ2luOi88Lio/Pi8sZW5kOi8kLyxpbGxlZ2FsOiJcXG4iCn0sbix0LkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0sbD17Y2xhc3NOYW1lOiJ0aXRsZSIsYmVnaW46ZShyKSt0LklERU5UX1JFLApyZWxldmFuY2U6MH0sZD1lKHIpK3QuSURFTlRfUkUrIlxccypcXCgiLHU9ewprZXl3b3JkOiJpbnQgZmxvYXQgd2hpbGUgcHJpdmF0ZSBjaGFyIGNoYXI4X3QgY2hhcjE2X3QgY2hhcjMyX3QgY2F0Y2ggaW1wb3J0IG1vZHVsZSBleHBvcnQgdmlydHVhbCBvcGVyYXRvciBzaXplb2YgZHluYW1pY19jYXN0fDEwIHR5cGVkZWYgY29uc3RfY2FzdHwxMCBjb25zdCBmb3Igc3RhdGljX2Nhc3R8MTAgdW5pb24gbmFtZXNwYWNlIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgc3RhdGljIHByb3RlY3RlZCBib29sIHRlbXBsYXRlIG11dGFibGUgaWYgcHVibGljIGZyaWVuZCBkbyBnb3RvIGF1dG8gdm9pZCBlbnVtIGVsc2UgYnJlYWsgZXh0ZXJuIHVzaW5nIGFzbSBjYXNlIHR5cGVpZCB3Y2hhcl90IHNob3J0IHJlaW50ZXJwcmV0X2Nhc3R8MTAgZGVmYXVsdCBkb3VibGUgcmVnaXN0ZXIgZXhwbGljaXQgc2lnbmVkIHR5cGVuYW1lIHRyeSB0aGlzIHN3aXRjaCBjb250aW51ZSBpbmxpbmUgZGVsZXRlIGFsaWduYXMgYWxpZ25vZiBjb25zdGV4cHIgY29uc3RldmFsIGNvbnN0aW5pdCBkZWNsdHlwZSBjb25jZXB0IGNvX2F3YWl0IGNvX3JldHVybiBjb195aWVsZCByZXF1aXJlcyBub2V4Y2VwdCBzdGF0aWNfYXNzZXJ0IHRocmVhZF9sb2NhbCByZXN0cmljdCBmaW5hbCBvdmVycmlkZSBhdG9taWNfYm9vbCBhdG9taWNfY2hhciBhdG9taWNfc2NoYXIgYXRvbWljX3VjaGFyIGF0b21pY19zaG9ydCBhdG9taWNfdXNob3J0IGF0b21pY19pbnQgYXRvbWljX3VpbnQgYXRvbWljX2xvbmcgYXRvbWljX3Vsb25nIGF0b21pY19sbG9uZyBhdG9taWNfdWxsb25nIG5ldyB0aHJvdyByZXR1cm4gYW5kIGFuZF9lcSBiaXRhbmQgYml0b3IgY29tcGwgbm90IG5vdF9lcSBvciBvcl9lcSB4b3IgeG9yX2VxIiwKYnVpbHRfaW46InN0ZCBzdHJpbmcgd3N0cmluZyBjaW4gY291dCBjZXJyIGNsb2cgc3RkaW4gc3Rkb3V0IHN0ZGVyciBzdHJpbmdzdHJlYW0gaXN0cmluZ3N0cmVhbSBvc3RyaW5nc3RyZWFtIGF1dG9fcHRyIGRlcXVlIGxpc3QgcXVldWUgc3RhY2sgdmVjdG9yIG1hcCBzZXQgcGFpciBiaXRzZXQgbXVsdGlzZXQgbXVsdGltYXAgdW5vcmRlcmVkX3NldCB1bm9yZGVyZWRfbWFwIHVub3JkZXJlZF9tdWx0aXNldCB1bm9yZGVyZWRfbXVsdGltYXAgcHJpb3JpdHlfcXVldWUgbWFrZV9wYWlyIGFycmF5IHNoYXJlZF9wdHIgYWJvcnQgdGVybWluYXRlIGFicyBhY29zIGFzaW4gYXRhbjIgYXRhbiBjYWxsb2MgY2VpbCBjb3NoIGNvcyBleGl0IGV4cCBmYWJzIGZsb29yIGZtb2QgZnByaW50ZiBmcHV0cyBmcmVlIGZyZXhwIGZzY2FuZiBmdXR1cmUgaXNhbG51bSBpc2FscGhhIGlzY250cmwgaXNkaWdpdCBpc2dyYXBoIGlzbG93ZXIgaXNwcmludCBpc3B1bmN0IGlzc3BhY2UgaXN1cHBlciBpc3hkaWdpdCB0b2xvd2VyIHRvdXBwZXIgbGFicyBsZGV4cCBsb2cxMCBsb2cgbWFsbG9jIHJlYWxsb2MgbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtc2V0IG1vZGYgcG93IHByaW50ZiBwdXRjaGFyIHB1dHMgc2NhbmYgc2luaCBzaW4gc25wcmludGYgc3ByaW50ZiBzcXJ0IHNzY2FuZiBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjcHkgc3RyY3NwbiBzdHJsZW4gc3RybmNhdCBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBzdHJzdHIgdGFuaCB0YW4gdmZwcmludGYgdnByaW50ZiB2c3ByaW50ZiBlbmRsIGluaXRpYWxpemVyX2xpc3QgdW5pcXVlX3B0ciBfQm9vbCBjb21wbGV4IF9Db21wbGV4IGltYWdpbmFyeSBfSW1hZ2luYXJ5IiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxscHRyIE5VTEwifSxwPVtvLHMsbix0LkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGMsaV0sbT17CnZhcmlhbnRzOlt7YmVnaW46Lz0vLGVuZDovOy99LHtiZWdpbjovXCgvLGVuZDovXCkvfSx7CmJlZ2luS2V5d29yZHM6Im5ldyB0aHJvdyByZXR1cm4gZWxzZSIsZW5kOi87L31dLGtleXdvcmRzOnUsY29udGFpbnM6cC5jb25jYXQoW3sKYmVnaW46L1woLyxlbmQ6L1wpLyxrZXl3b3Jkczp1LGNvbnRhaW5zOnAuY29uY2F0KFsic2VsZiJdKSxyZWxldmFuY2U6MH1dKSwKcmVsZXZhbmNlOjB9LF89e2NsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOiIoIithKyJbXFwqJlxcc10rKSsiK2QsCnJldHVybkJlZ2luOiEwLGVuZDovW3s7PV0vLGV4Y2x1ZGVFbmQ6ITAsa2V5d29yZHM6dSxpbGxlZ2FsOi9bXlx3XHNcKiY6PD5dLywKY29udGFpbnM6W3tiZWdpbjoiZGVjbHR5cGVcXChhdXRvXFwpIixrZXl3b3Jkczp1LHJlbGV2YW5jZTowfSx7YmVnaW46ZCwKcmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2xdLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sCmVuZDovXCkvLGtleXdvcmRzOnUscmVsZXZhbmNlOjAsY29udGFpbnM6W24sdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSxpLGMscyx7CmJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dSxyZWxldmFuY2U6MCwKY29udGFpbnM6WyJzZWxmIixuLHQuQ19CTE9DS19DT01NRU5UX01PREUsaSxjLHNdfV0KfSxzLG4sdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSxvXX07cmV0dXJuewphbGlhc2VzOlsiYyIsImNjIiwiaCIsImMrKyIsImgrKyIsImhwcCIsImhoIiwiaHh4IiwiY3h4Il0sa2V5d29yZHM6dSwKZGlzYWJsZUF1dG9kZXRlY3Q6ITAsaWxsZWdhbDoiPC8iLGNvbnRhaW5zOltdLmNvbmNhdChtLF8scCxbbyx7CmJlZ2luOiJcXGIoZGVxdWV8bGlzdHxxdWV1ZXxwcmlvcml0eV9xdWV1ZXxwYWlyfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsCmVuZDoiPiIsa2V5d29yZHM6dSxjb250YWluczpbInNlbGYiLHNdfSx7YmVnaW46dC5JREVOVF9SRSsiOjoiLGtleXdvcmRzOnV9LHsKY2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiZW51bSBjbGFzcyBzdHJ1Y3QgdW5pb24iLGVuZDovW3s7Ojw+PV0vLApjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImZpbmFsIGNsYXNzIHN0cnVjdCJ9LHQuVElUTEVfTU9ERV19XSksZXhwb3J0czp7CnByZXByb2Nlc3NvcjpvLHN0cmluZ3M6aSxrZXl3b3Jkczp1fX19KSh0KQo7cmV0dXJuIG4uZGlzYWJsZUF1dG9kZXRlY3Q9ITEsbi5uYW1lPSJDKysiLApuLmFsaWFzZXM9WyJjYyIsImMrKyIsImgrKyIsImhwcCIsImhoIiwiaHh4IiwiY3h4Il0sbn19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImNzaGFycCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57dmFyIG49ewprZXl3b3JkOlsiYWJzdHJhY3QiLCJhcyIsImJhc2UiLCJicmVhayIsImNhc2UiLCJjbGFzcyIsImNvbnN0IiwiY29udGludWUiLCJkbyIsImVsc2UiLCJldmVudCIsImV4cGxpY2l0IiwiZXh0ZXJuIiwiZmluYWxseSIsImZpeGVkIiwiZm9yIiwiZm9yZWFjaCIsImdvdG8iLCJpZiIsImltcGxpY2l0IiwiaW4iLCJpbnRlcmZhY2UiLCJpbnRlcm5hbCIsImlzIiwibG9jayIsIm5hbWVzcGFjZSIsIm5ldyIsIm9wZXJhdG9yIiwib3V0Iiwib3ZlcnJpZGUiLCJwYXJhbXMiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwicmVhZG9ubHkiLCJyZWNvcmQiLCJyZWYiLCJyZXR1cm4iLCJzZWFsZWQiLCJzaXplb2YiLCJzdGFja2FsbG9jIiwic3RhdGljIiwic3RydWN0Iiwic3dpdGNoIiwidGhpcyIsInRocm93IiwidHJ5IiwidHlwZW9mIiwidW5jaGVja2VkIiwidW5zYWZlIiwidXNpbmciLCJ2aXJ0dWFsIiwidm9pZCIsInZvbGF0aWxlIiwid2hpbGUiXS5jb25jYXQoWyJhZGQiLCJhbGlhcyIsImFuZCIsImFzY2VuZGluZyIsImFzeW5jIiwiYXdhaXQiLCJieSIsImRlc2NlbmRpbmciLCJlcXVhbHMiLCJmcm9tIiwiZ2V0IiwiZ2xvYmFsIiwiZ3JvdXAiLCJpbml0IiwiaW50byIsImpvaW4iLCJsZXQiLCJuYW1lb2YiLCJub3QiLCJub3RudWxsIiwib24iLCJvciIsIm9yZGVyYnkiLCJwYXJ0aWFsIiwicmVtb3ZlIiwic2VsZWN0Iiwic2V0IiwidW5tYW5hZ2VkIiwidmFsdWV8MCIsInZhciIsIndoZW4iLCJ3aGVyZSIsIndpdGgiLCJ5aWVsZCJdKS5qb2luKCIgIiksCmJ1aWx0X2luOiJib29sIGJ5dGUgY2hhciBkZWNpbWFsIGRlbGVnYXRlIGRvdWJsZSBkeW5hbWljIGVudW0gZmxvYXQgaW50IGxvbmcgbmludCBudWludCBvYmplY3Qgc2J5dGUgc2hvcnQgc3RyaW5nIHVsb25nIHVuaXQgdXNob3J0IiwKbGl0ZXJhbDoiZGVmYXVsdCBmYWxzZSBudWxsIHRydWUifSxhPWUuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjoiW2EtekEtWl0oXFwuP1xcdykqIn0pLGk9e2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiXFxiKDBiWzAxJ10rKSJ9LHsKYmVnaW46IigtPylcXGIoW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykodXxVfGx8THx1bHxVTHxmfEZ8YnxCKSJ9LHsKYmVnaW46IigtPykoXFxiMFt4WF1bYS1mQS1GMC05J10rfChcXGJbXFxkJ10rKFxcLltcXGQnXSopP3xcXC5bXFxkJ10rKShbZUVdWy0rXT9bXFxkJ10rKT8pIgp9XSxyZWxldmFuY2U6MH0scz17Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOidAIicsZW5kOiciJyxjb250YWluczpbe2JlZ2luOiciIid9XQp9LHQ9ZS5pbmhlcml0KHMse2lsbGVnYWw6L1xuL30pLHI9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cey8sZW5kOi9cfS8sCmtleXdvcmRzOm59LGw9ZS5pbmhlcml0KHIse2lsbGVnYWw6L1xuL30pLGM9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCQiLywKZW5kOiciJyxpbGxlZ2FsOi9cbi8sY29udGFpbnM6W3tiZWdpbjovXHtcey99LHtiZWdpbjovXH1cfS8KfSxlLkJBQ0tTTEFTSF9FU0NBUEUsbF19LG89e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjovXCRAIi8sZW5kOiciJyxjb250YWluczpbewpiZWdpbjovXHtcey99LHtiZWdpbjovXH1cfS99LHtiZWdpbjonIiInfSxyXX0sZD1lLmluaGVyaXQobyx7aWxsZWdhbDovXG4vLApjb250YWluczpbe2JlZ2luOi9ce1x7L30se2JlZ2luOi9cfVx9L30se2JlZ2luOiciIid9LGxdfSkKO3IuY29udGFpbnM9W28sYyxzLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGksZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0sCmwuY29udGFpbnM9W2QsYyx0LGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLGksZS5pbmhlcml0KGUuQ19CTE9DS19DT01NRU5UX01PREUsewppbGxlZ2FsOi9cbi99KV07dmFyIGc9e3ZhcmlhbnRzOltvLGMscyxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERV0KfSxFPXtiZWdpbjoiPCIsZW5kOiI+Iixjb250YWluczpbe2JlZ2luS2V5d29yZHM6ImluIG91dCJ9LGFdCn0sXz1lLklERU5UX1JFKyIoPCIrZS5JREVOVF9SRSsiKFxccyosXFxzKiIrZS5JREVOVF9SRSsiKSo+KT8oXFxbXFxdKT8iLGI9ewpiZWdpbjoiQCIrZS5JREVOVF9SRSxyZWxldmFuY2U6MH07cmV0dXJue25hbWU6IkMjIixhbGlhc2VzOlsiY3MiLCJjIyJdLAprZXl3b3JkczpuLGlsbGVnYWw6Lzo6Lyxjb250YWluczpbZS5DT01NRU5UKCIvLy8iLCIkIix7cmV0dXJuQmVnaW46ITAsCmNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJkb2N0YWciLHZhcmlhbnRzOlt7YmVnaW46Ii8vLyIscmVsZXZhbmNlOjB9LHsKYmVnaW46Ilx4M2MhLS18LS1ceDNlIn0se2JlZ2luOiI8Lz8iLGVuZDoiPiJ9XX1dCn0pLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiIjIiwKZW5kOiIkIixrZXl3b3Jkczp7CiJtZXRhLWtleXdvcmQiOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSByZWdpb24gZW5kcmVnaW9uIHByYWdtYSBjaGVja3N1bSIKfX0sZyxpLHtiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLHJlbGV2YW5jZTowLGVuZDovW3s7PV0vLAppbGxlZ2FsOi9bXlxzOixdLyxjb250YWluczpbe2JlZ2luS2V5d29yZHM6IndoZXJlIGNsYXNzIgp9LGEsRSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHtiZWdpbktleXdvcmRzOiJuYW1lc3BhY2UiLApyZWxldmFuY2U6MCxlbmQ6L1t7Oz1dLyxpbGxlZ2FsOi9bXlxzOl0vLApjb250YWluczpbYSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHsKYmVnaW5LZXl3b3JkczoicmVjb3JkIixyZWxldmFuY2U6MCxlbmQ6L1t7Oz1dLyxpbGxlZ2FsOi9bXlxzOl0vLApjb250YWluczpbYSxFLGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0se2NsYXNzTmFtZToibWV0YSIsCmJlZ2luOiJeXFxzKlxcWyIsZXhjbHVkZUJlZ2luOiEwLGVuZDoiXFxdIixleGNsdWRlRW5kOiEwLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToibWV0YS1zdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvfV19LHsKYmVnaW5LZXl3b3JkczoibmV3IHJldHVybiB0aHJvdyBhd2FpdCBlbHNlIixyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjoiKCIrXysiXFxzKykrIitlLklERU5UX1JFKyJcXHMqKDwuKz5cXHMqKT9cXCgiLHJldHVybkJlZ2luOiEwLAplbmQ6L1xzKlt7Oz1dLyxleGNsdWRlRW5kOiEwLGtleXdvcmRzOm4sY29udGFpbnM6W3sKYmVnaW5LZXl3b3JkczoicHVibGljIHByaXZhdGUgcHJvdGVjdGVkIHN0YXRpYyBpbnRlcm5hbCBwcm90ZWN0ZWQgYWJzdHJhY3QgYXN5bmMgZXh0ZXJuIG92ZXJyaWRlIHVuc2FmZSB2aXJ0dWFsIG5ldyBzZWFsZWQgcGFydGlhbCIsCnJlbGV2YW5jZTowfSx7YmVnaW46ZS5JREVOVF9SRSsiXFxzKig8Lis+XFxzKik/XFwoIixyZXR1cm5CZWdpbjohMCwKY29udGFpbnM6W2UuVElUTEVfTU9ERSxFXSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLApleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTowLApjb250YWluczpbZyxpLGUuQ19CTE9DS19DT01NRU5UX01PREVdCn0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREVdfSxiXX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJoYXNrZWxsIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pntjb25zdCBuPXsKdmFyaWFudHM6W2UuQ09NTUVOVCgiLS0iLCIkIiksZS5DT01NRU5UKC9cey0vLC8tXH0vLHtjb250YWluczpbInNlbGYiXX0pXX0saT17CmNsYXNzTmFtZToibWV0YSIsYmVnaW46L1x7LSMvLGVuZDovIy1cfS99LGE9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46Il4jIixlbmQ6IiQiCn0scz17Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3J10qIixyZWxldmFuY2U6MH0sbD17YmVnaW46IlxcKCIsCmVuZDoiXFwpIixpbGxlZ2FsOiciJyxjb250YWluczpbaSxhLHtjbGFzc05hbWU6InR5cGUiLApiZWdpbjoiXFxiW0EtWl1bXFx3XSooXFwoKFxcLlxcLnwsfFxcdyspXFwpKT8ifSxlLmluaGVyaXQoZS5USVRMRV9NT0RFLHsKYmVnaW46IltfYS16XVtcXHcnXSoifSksbl19O3JldHVybntuYW1lOiJIYXNrZWxsIixhbGlhc2VzOlsiaHMiXSwKa2V5d29yZHM6ImxldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBkbyBtb2R1bGUgaW1wb3J0IGhpZGluZyBxdWFsaWZpZWQgdHlwZSBkYXRhIG5ld3R5cGUgZGVyaXZpbmcgY2xhc3MgaW5zdGFuY2UgYXMgZGVmYXVsdCBpbmZpeCBpbmZpeGwgaW5maXhyIGZvcmVpZ24gZXhwb3J0IGNjYWxsIHN0ZGNhbGwgY3BsdXNwbHVzIGp2bSBkb3RuZXQgc2FmZSB1bnNhZmUgZmFtaWx5IGZvcmFsbCBtZG8gcHJvYyByZWMiLApjb250YWluczpbe2JlZ2luS2V5d29yZHM6Im1vZHVsZSIsZW5kOiJ3aGVyZSIsa2V5d29yZHM6Im1vZHVsZSB3aGVyZSIsCmNvbnRhaW5zOltsLG5dLGlsbGVnYWw6IlxcV1xcLnw7In0se2JlZ2luOiJcXGJpbXBvcnRcXGIiLGVuZDoiJCIsCmtleXdvcmRzOiJpbXBvcnQgcXVhbGlmaWVkIGFzIGhpZGluZyIsY29udGFpbnM6W2wsbl0saWxsZWdhbDoiXFxXXFwufDsifSx7CmNsYXNzTmFtZToiY2xhc3MiLGJlZ2luOiJeKFxccyopPyhjbGFzc3xpbnN0YW5jZSlcXGIiLGVuZDoid2hlcmUiLAprZXl3b3JkczoiY2xhc3MgZmFtaWx5IGluc3RhbmNlIHdoZXJlIixjb250YWluczpbcyxsLG5dfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luOiJcXGIoZGF0YXwobmV3KT90eXBlKVxcYiIsZW5kOiIkIiwKa2V5d29yZHM6ImRhdGEgZmFtaWx5IHR5cGUgbmV3dHlwZSBkZXJpdmluZyIsY29udGFpbnM6W2kscyxsLHtiZWdpbjovXHsvLAplbmQ6L1x9Lyxjb250YWluczpsLmNvbnRhaW5zfSxuXX0se2JlZ2luS2V5d29yZHM6ImRlZmF1bHQiLGVuZDoiJCIsCmNvbnRhaW5zOltzLGwsbl19LHtiZWdpbktleXdvcmRzOiJpbmZpeCBpbmZpeGwgaW5maXhyIixlbmQ6IiQiLApjb250YWluczpbZS5DX05VTUJFUl9NT0RFLG5dfSx7YmVnaW46IlxcYmZvcmVpZ25cXGIiLGVuZDoiJCIsCmtleXdvcmRzOiJmb3JlaWduIGltcG9ydCBleHBvcnQgY2NhbGwgc3RkY2FsbCBjcGx1c3BsdXMganZtIGRvdG5ldCBzYWZlIHVuc2FmZSIsCmNvbnRhaW5zOltzLGUuUVVPVEVfU1RSSU5HX01PREUsbl19LHtjbGFzc05hbWU6Im1ldGEiLApiZWdpbjoiIyFcXC91c3JcXC9iaW5cXC9lbnYgcnVuaGFza2VsbCIsZW5kOiIkIgp9LGksYSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ19OVU1CRVJfTU9ERSxzLGUuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjoiXltfYS16XVtcXHcnXSoifSksbix7YmVnaW46Ii0+fDwtIn1dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInByb2Nlc3NpbmciLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+KHsKbmFtZToiUHJvY2Vzc2luZyIsa2V5d29yZHM6ewprZXl3b3JkOiJCdWZmZXJlZFJlYWRlciBQVmVjdG9yIFBGb250IFBJbWFnZSBQR3JhcGhpY3MgSGFzaE1hcCBib29sZWFuIGJ5dGUgY2hhciBjb2xvciBkb3VibGUgZmxvYXQgaW50IGxvbmcgU3RyaW5nIEFycmF5IEZsb2F0RGljdCBGbG9hdExpc3QgSW50RGljdCBJbnRMaXN0IEpTT05BcnJheSBKU09OT2JqZWN0IE9iamVjdCBTdHJpbmdEaWN0IFN0cmluZ0xpc3QgVGFibGUgVGFibGVSb3cgWE1MIGZhbHNlIHN5bmNocm9uaXplZCBpbnQgYWJzdHJhY3QgZmxvYXQgcHJpdmF0ZSBjaGFyIGJvb2xlYW4gc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyB0aHJvdyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHJldHVybiB2b2lkIGVudW0gZWxzZSBicmVhayB0cmFuc2llbnQgbmV3IGNhdGNoIGluc3RhbmNlb2YgYnl0ZSBzdXBlciB2b2xhdGlsZSBjYXNlIGFzc2VydCBzaG9ydCBwYWNrYWdlIGRlZmF1bHQgZG91YmxlIHB1YmxpYyB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgdGhyb3dzIHByb3RlY3RlZCBwdWJsaWMgcHJpdmF0ZSIsCmxpdGVyYWw6IlAyRCBQM0QgSEFMRl9QSSBQSSBRVUFSVEVSX1BJIFRBVSBUV09fUEkiLHRpdGxlOiJzZXR1cCBkcmF3IiwKYnVpbHRfaW46ImRpc3BsYXlIZWlnaHQgZGlzcGxheVdpZHRoIG1vdXNlWSBtb3VzZVggbW91c2VQcmVzc2VkIHBtb3VzZVggcG1vdXNlWSBrZXkga2V5Q29kZSBwaXhlbHMgZm9jdXNlZCBmcmFtZUNvdW50IGZyYW1lUmF0ZSBoZWlnaHQgd2lkdGggc2l6ZSBjcmVhdGVHcmFwaGljcyBiZWdpbkRyYXcgY3JlYXRlU2hhcGUgbG9hZFNoYXBlIFBTaGFwZSBhcmMgZWxsaXBzZSBsaW5lIHBvaW50IHF1YWQgcmVjdCB0cmlhbmdsZSBiZXppZXIgYmV6aWVyRGV0YWlsIGJlemllclBvaW50IGJlemllclRhbmdlbnQgY3VydmUgY3VydmVEZXRhaWwgY3VydmVQb2ludCBjdXJ2ZVRhbmdlbnQgY3VydmVUaWdodG5lc3Mgc2hhcGUgc2hhcGVNb2RlIGJlZ2luQ29udG91ciBiZWdpblNoYXBlIGJlemllclZlcnRleCBjdXJ2ZVZlcnRleCBlbmRDb250b3VyIGVuZFNoYXBlIHF1YWRyYXRpY1ZlcnRleCB2ZXJ0ZXggZWxsaXBzZU1vZGUgbm9TbW9vdGggcmVjdE1vZGUgc21vb3RoIHN0cm9rZUNhcCBzdHJva2VKb2luIHN0cm9rZVdlaWdodCBtb3VzZUNsaWNrZWQgbW91c2VEcmFnZ2VkIG1vdXNlTW92ZWQgbW91c2VQcmVzc2VkIG1vdXNlUmVsZWFzZWQgbW91c2VXaGVlbCBrZXlQcmVzc2VkIGtleVByZXNzZWRrZXlSZWxlYXNlZCBrZXlUeXBlZCBwcmludCBwcmludGxuIHNhdmUgc2F2ZUZyYW1lIGRheSBob3VyIG1pbGxpcyBtaW51dGUgbW9udGggc2Vjb25kIHllYXIgYmFja2dyb3VuZCBjbGVhciBjb2xvck1vZGUgZmlsbCBub0ZpbGwgbm9TdHJva2Ugc3Ryb2tlIGFscGhhIGJsdWUgYnJpZ2h0bmVzcyBjb2xvciBncmVlbiBodWUgbGVycENvbG9yIHJlZCBzYXR1cmF0aW9uIG1vZGVsWCBtb2RlbFkgbW9kZWxaIHNjcmVlblggc2NyZWVuWSBzY3JlZW5aIGFtYmllbnQgZW1pc3NpdmUgc2hpbmluZXNzIHNwZWN1bGFyIGFkZCBjcmVhdGVJbWFnZSBiZWdpbkNhbWVyYSBjYW1lcmEgZW5kQ2FtZXJhIGZydXN0dW0gb3J0aG8gcGVyc3BlY3RpdmUgcHJpbnRDYW1lcmEgcHJpbnRQcm9qZWN0aW9uIGN1cnNvciBmcmFtZVJhdGUgbm9DdXJzb3IgZXhpdCBsb29wIG5vTG9vcCBwb3BTdHlsZSBwdXNoU3R5bGUgcmVkcmF3IGJpbmFyeSBib29sZWFuIGJ5dGUgY2hhciBmbG9hdCBoZXggaW50IHN0ciB1bmJpbmFyeSB1bmhleCBqb2luIG1hdGNoIG1hdGNoQWxsIG5mIG5mYyBuZnAgbmZzIHNwbGl0IHNwbGl0VG9rZW5zIHRyaW0gYXBwZW5kIGFycmF5Q29weSBjb25jYXQgZXhwYW5kIHJldmVyc2Ugc2hvcnRlbiBzb3J0IHNwbGljZSBzdWJzZXQgYm94IHNwaGVyZSBzcGhlcmVEZXRhaWwgY3JlYXRlSW5wdXQgY3JlYXRlUmVhZGVyIGxvYWRCeXRlcyBsb2FkSlNPTkFycmF5IGxvYWRKU09OT2JqZWN0IGxvYWRTdHJpbmdzIGxvYWRUYWJsZSBsb2FkWE1MIG9wZW4gcGFyc2VYTUwgc2F2ZVRhYmxlIHNlbGVjdEZvbGRlciBzZWxlY3RJbnB1dCBiZWdpblJhdyBiZWdpblJlY29yZCBjcmVhdGVPdXRwdXQgY3JlYXRlV3JpdGVyIGVuZFJhdyBlbmRSZWNvcmQgUHJpbnRXcml0ZXJzYXZlQnl0ZXMgc2F2ZUpTT05BcnJheSBzYXZlSlNPTk9iamVjdCBzYXZlU3RyZWFtIHNhdmVTdHJpbmdzIHNhdmVYTUwgc2VsZWN0T3V0cHV0IHBvcE1hdHJpeCBwcmludE1hdHJpeCBwdXNoTWF0cml4IHJlc2V0TWF0cml4IHJvdGF0ZSByb3RhdGVYIHJvdGF0ZVkgcm90YXRlWiBzY2FsZSBzaGVhclggc2hlYXJZIHRyYW5zbGF0ZSBhbWJpZW50TGlnaHQgZGlyZWN0aW9uYWxMaWdodCBsaWdodEZhbGxvZmYgbGlnaHRzIGxpZ2h0U3BlY3VsYXIgbm9MaWdodHMgbm9ybWFsIHBvaW50TGlnaHQgc3BvdExpZ2h0IGltYWdlIGltYWdlTW9kZSBsb2FkSW1hZ2Ugbm9UaW50IHJlcXVlc3RJbWFnZSB0aW50IHRleHR1cmUgdGV4dHVyZU1vZGUgdGV4dHVyZVdyYXAgYmxlbmQgY29weSBmaWx0ZXIgZ2V0IGxvYWRQaXhlbHMgc2V0IHVwZGF0ZVBpeGVscyBibGVuZE1vZGUgbG9hZFNoYWRlciBQU2hhZGVycmVzZXRTaGFkZXIgc2hhZGVyIGNyZWF0ZUZvbnQgbG9hZEZvbnQgdGV4dCB0ZXh0Rm9udCB0ZXh0QWxpZ24gdGV4dExlYWRpbmcgdGV4dE1vZGUgdGV4dFNpemUgdGV4dFdpZHRoIHRleHRBc2NlbnQgdGV4dERlc2NlbnQgYWJzIGNlaWwgY29uc3RyYWluIGRpc3QgZXhwIGZsb29yIGxlcnAgbG9nIG1hZyBtYXAgbWF4IG1pbiBub3JtIHBvdyByb3VuZCBzcSBzcXJ0IGFjb3MgYXNpbiBhdGFuIGF0YW4yIGNvcyBkZWdyZWVzIHJhZGlhbnMgc2luIHRhbiBub2lzZSBub2lzZURldGFpbCBub2lzZVNlZWQgcmFuZG9tIHJhbmRvbUdhdXNzaWFuIHJhbmRvbVNlZWQiCn0sCmNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSxlLkFQT1NfU1RSSU5HX01PREUsZS5RVU9URV9TVFJJTkdfTU9ERSxlLkNfTlVNQkVSX01PREVdCn0pfSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJzaGVsbCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBzPT4oewpuYW1lOiJTaGVsbCBTZXNzaW9uIixhbGlhc2VzOlsiY29uc29sZSJdLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIiwKYmVnaW46L15cc3swLDN9Wy9+XHdcZFtcXSgpQC1dKls+JSQjXS8sc3RhcnRzOntlbmQ6L1teXFxdKD89XHMqJCkvLApzdWJMYW5ndWFnZToiYmFzaCJ9fV19KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgib2NhbWwiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+KHtuYW1lOiJPQ2FtbCIsCmFsaWFzZXM6WyJtbCJdLGtleXdvcmRzOnskcGF0dGVybjoiW2Etel9dXFx3KiE/IiwKa2V5d29yZDoiYW5kIGFzIGFzc2VydCBhc3IgYmVnaW4gY2xhc3MgY29uc3RyYWludCBkbyBkb25lIGRvd250byBlbHNlIGVuZCBleGNlcHRpb24gZXh0ZXJuYWwgZm9yIGZ1biBmdW5jdGlvbiBmdW5jdG9yIGlmIGluIGluY2x1ZGUgaW5oZXJpdCEgaW5oZXJpdCBpbml0aWFsaXplciBsYW5kIGxhenkgbGV0IGxvciBsc2wgbHNyIGx4b3IgbWF0Y2ggbWV0aG9kIXwxMCBtZXRob2QgbW9kIG1vZHVsZSBtdXRhYmxlIG5ldyBvYmplY3Qgb2Ygb3BlbiEgb3BlbiBvciBwcml2YXRlIHJlYyBzaWcgc3RydWN0IHRoZW4gdG8gdHJ5IHR5cGUgdmFsISB2YWwgdmlydHVhbCB3aGVuIHdoaWxlIHdpdGggcGFyc2VyIHZhbHVlIiwKYnVpbHRfaW46ImFycmF5IGJvb2wgYnl0ZXMgY2hhciBleG58NSBmbG9hdCBpbnQgaW50MzIgaW50NjQgbGlzdCBsYXp5X3R8NSBuYXRpdmVpbnR8NSBzdHJpbmcgdW5pdCBpbl9jaGFubmVsIG91dF9jaGFubmVsIHJlZiIsCmxpdGVyYWw6InRydWUgZmFsc2UifSxpbGxlZ2FsOi9cL1wvfD4+Lyxjb250YWluczpbe2NsYXNzTmFtZToibGl0ZXJhbCIsCmJlZ2luOiJcXFsoXFx8XFx8KT9cXF18XFwoXFwpIixyZWxldmFuY2U6MH0sZS5DT01NRU5UKCJcXChcXCoiLCJcXCpcXCkiLHsKY29udGFpbnM6WyJzZWxmIl19KSx7Y2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInW0EtWmEtel9dKD8hJylbXFx3J10qIn0sewpjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJgW0EtWl1bXFx3J10qIn0se2NsYXNzTmFtZToidHlwZSIsCmJlZ2luOiJcXGJbQS1aXVtcXHcnXSoiLHJlbGV2YW5jZTowfSx7YmVnaW46IlthLXpfXVxcdyonW1xcdyddKiIscmVsZXZhbmNlOjAKfSxlLmluaGVyaXQoZS5BUE9TX1NUUklOR19NT0RFLHtjbGFzc05hbWU6InN0cmluZyIscmVsZXZhbmNlOjAKfSksZS5pbmhlcml0KGUuUVVPVEVfU1RSSU5HX01PREUse2lsbGVnYWw6bnVsbH0pLHtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOiJcXGIoMFt4WF1bYS1mQS1GMC05X10rW0xsbl0/fDBbb09dWzAtN19dK1tMbG5dP3wwW2JCXVswMV9dK1tMbG5dP3xbMC05XVswLTlfXSooW0xsbl18KFxcLlswLTlfXSopPyhbZUVdWy0rXT9bMC05X10rKT8pPykiLApyZWxldmFuY2U6MH0se2JlZ2luOi8tPi99XX0pfSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJhcGFjaGUiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IG49ewpjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLlxcZHsxLDN9KDpcXGR7MSw1fSk/Igp9O3JldHVybntuYW1lOiJBcGFjaGUgY29uZmlnIixhbGlhc2VzOlsiYXBhY2hlY29uZiJdLGNhc2VfaW5zZW5zaXRpdmU6ITAsCmNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLHtjbGFzc05hbWU6InNlY3Rpb24iLGJlZ2luOiI8Lz8iLGVuZDoiPiIsCmNvbnRhaW5zOltuLHtjbGFzc05hbWU6Im51bWJlciIsYmVnaW46IjpcXGR7MSw1fSIKfSxlLmluaGVyaXQoZS5RVU9URV9TVFJJTkdfTU9ERSx7cmVsZXZhbmNlOjB9KV19LHtjbGFzc05hbWU6ImF0dHJpYnV0ZSIsCmJlZ2luOi9cdysvLHJlbGV2YW5jZTowLGtleXdvcmRzOnsKbm9tYXJrdXA6Im9yZGVyIGRlbnkgYWxsb3cgc2V0ZW52IHJld3JpdGVydWxlIHJld3JpdGVlbmdpbmUgcmV3cml0ZWNvbmQgZG9jdW1lbnRyb290IHNldGhhbmRsZXIgZXJyb3Jkb2N1bWVudCBsb2FkbW9kdWxlIG9wdGlvbnMgaGVhZGVyIGxpc3RlbiBzZXJ2ZXJyb290IHNlcnZlcm5hbWUiCn0sc3RhcnRzOntlbmQ6LyQvLHJlbGV2YW5jZTowLGtleXdvcmRzOntsaXRlcmFsOiJvbiBvZmYgYWxsIGRlbnkgYWxsb3cifSwKY29udGFpbnM6W3tjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJcXHNcXFsiLGVuZDoiXFxdJCJ9LHtjbGFzc05hbWU6InZhcmlhYmxlIiwKYmVnaW46IltcXCQlXVxceyIsZW5kOiJcXH0iLGNvbnRhaW5zOlsic2VsZiIse2NsYXNzTmFtZToibnVtYmVyIiwKYmVnaW46IltcXCQlXVxcZCsifV19LG4se2NsYXNzTmFtZToibnVtYmVyIixiZWdpbjoiXFxkKyJ9LGUuUVVPVEVfU1RSSU5HX01PREVdfQp9XSxpbGxlZ2FsOi9cUy99fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicHJvbG9nIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIG49Pntjb25zdCBlPXsKYmVnaW46L1woLyxlbmQ6L1wpLyxyZWxldmFuY2U6MH0sYT17YmVnaW46L1xbLyxlbmQ6L1xdL30scz17Y2xhc3NOYW1lOiJjb21tZW50IiwKYmVnaW46LyUvLGVuZDovJC8sY29udGFpbnM6W24uUEhSQVNBTF9XT1JEU19NT0RFXX0saT17Y2xhc3NOYW1lOiJzdHJpbmciLApiZWdpbjovYC8sZW5kOi9gLyxjb250YWluczpbbi5CQUNLU0xBU0hfRVNDQVBFXX0sZz1be2JlZ2luOi9bYS16XVtBLVphLXowLTlfXSovLApyZWxldmFuY2U6MH0se2NsYXNzTmFtZToic3ltYm9sIix2YXJpYW50czpbe2JlZ2luOi9bQS1aXVthLXpBLVowLTlfXSovfSx7CmJlZ2luOi9fW0EtWmEtejAtOV9dKi99XSxyZWxldmFuY2U6MH0sZSx7YmVnaW46LzotLwp9LGEscyxuLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLG4uUVVPVEVfU1RSSU5HX01PREUsbi5BUE9TX1NUUklOR19NT0RFLGksewpjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LzAnKFxcJ3wuKS99LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LzAnXFxzLwp9LG4uQ19OVU1CRVJfTU9ERV07cmV0dXJuIGUuY29udGFpbnM9ZyxhLmNvbnRhaW5zPWcse25hbWU6IlByb2xvZyIsCmNvbnRhaW5zOmcuY29uY2F0KFt7YmVnaW46L1wuJC99XSl9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgibmltIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pih7bmFtZToiTmltIiwKYWxpYXNlczpbIm5pbSJdLGtleXdvcmRzOnsKa2V5d29yZDoiYWRkciBhbmQgYXMgYXNtIGJpbmQgYmxvY2sgYnJlYWsgY2FzZSBjYXN0IGNvbnN0IGNvbnRpbnVlIGNvbnZlcnRlciBkaXNjYXJkIGRpc3RpbmN0IGRpdiBkbyBlbGlmIGVsc2UgZW5kIGVudW0gZXhjZXB0IGV4cG9ydCBmaW5hbGx5IGZvciBmcm9tIGZ1bmMgZ2VuZXJpYyBpZiBpbXBvcnQgaW4gaW5jbHVkZSBpbnRlcmZhY2UgaXMgaXNub3QgaXRlcmF0b3IgbGV0IG1hY3JvIG1ldGhvZCBtaXhpbiBtb2QgbmlsIG5vdCBub3RpbiBvYmplY3Qgb2Ygb3Igb3V0IHByb2MgcHRyIHJhaXNlIHJlZiByZXR1cm4gc2hsIHNociBzdGF0aWMgdGVtcGxhdGUgdHJ5IHR1cGxlIHR5cGUgdXNpbmcgdmFyIHdoZW4gd2hpbGUgd2l0aCB3aXRob3V0IHhvciB5aWVsZCIsCmxpdGVyYWw6InNoYXJlZCBndWFyZGVkIHN0ZGluIHN0ZG91dCBzdGRlcnIgcmVzdWx0IHRydWUgZmFsc2UiLApidWlsdF9pbjoiaW50IGludDggaW50MTYgaW50MzIgaW50NjQgdWludCB1aW50OCB1aW50MTYgdWludDMyIHVpbnQ2NCBmbG9hdCBmbG9hdDMyIGZsb2F0NjQgYm9vbCBjaGFyIHN0cmluZyBjc3RyaW5nIHBvaW50ZXIgZXhwciBzdG10IHZvaWQgYXV0byBhbnkgcmFuZ2UgYXJyYXkgb3BlbmFycmF5IHZhcmFyZ3Mgc2VxIHNldCBjbG9uZyBjdWxvbmcgY2NoYXIgY3NjaGFyIGNzaG9ydCBjaW50IGNzaXplIGNsb25nbG9uZyBjZmxvYXQgY2RvdWJsZSBjbG9uZ2RvdWJsZSBjdWNoYXIgY3VzaG9ydCBjdWludCBjdWxvbmdsb25nIGNzdHJpbmdhcnJheSBzZW1pc3RhdGljIgp9LGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjovXHtcLi8sZW5kOi9cLlx9LyxyZWxldmFuY2U6MTB9LHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi9bYS16QS1aXVx3KiIvLGVuZDovIi8sY29udGFpbnM6W3tiZWdpbjovIiIvfV19LHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOi8oW2EtekEtWl1cdyopPyIiIi8sZW5kOi8iIiIvfSxlLlFVT1RFX1NUUklOR19NT0RFLHsKY2xhc3NOYW1lOiJ0eXBlIixiZWdpbjovXGJbQS1aXVx3K1xiLyxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToibnVtYmVyIiwKcmVsZXZhbmNlOjAsdmFyaWFudHM6W3sKYmVnaW46L1xiKDBbeFhdWzAtOWEtZkEtRl1bXzAtOWEtZkEtRl0qKSgnP1tpSXVVXSg4fDE2fDMyfDY0KSk/L30sewpiZWdpbjovXGIoMG9bMC03XVtfMC03XSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LHsKYmVnaW46L1xiKDAoYnxCKVswMV1bXzAxXSopKCc/W2lJdVVmRl0oOHwxNnwzMnw2NCkpPy99LHsKYmVnaW46L1xiKFxkW19cZF0qKSgnP1tpSXVVZkZdKDh8MTZ8MzJ8NjQpKT8vfV19LGUuSEFTSF9DT01NRU5UX01PREVdfSl9KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoIm5peCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57Y29uc3Qgbj17CmtleXdvcmQ6InJlYyB3aXRoIGxldCBpbiBpbmhlcml0IGFzc2VydCBpZiBlbHNlIHRoZW4iLApsaXRlcmFsOiJ0cnVlIGZhbHNlIG9yIGFuZCBudWxsIiwKYnVpbHRfaW46ImltcG9ydCBhYm9ydCBiYXNlTmFtZU9mIGRpck9mIGlzTnVsbCBidWlsdGlucyBtYXAgcmVtb3ZlQXR0cnMgdGhyb3cgdG9TdHJpbmcgZGVyaXZhdGlvbiIKfSxpPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovXCRcey8sZW5kOi9cfS8sa2V5d29yZHM6bn0scz17Y2xhc3NOYW1lOiJzdHJpbmciLApjb250YWluczpbaV0sdmFyaWFudHM6W3tiZWdpbjoiJyciLGVuZDoiJycifSx7YmVnaW46JyInLGVuZDonIid9XQp9LHQ9W2UuTlVNQkVSX01PREUsZS5IQVNIX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHMsewpiZWdpbjovW2EtekEtWjAtOS1fXSsoXHMqPSkvLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7CmNsYXNzTmFtZToiYXR0ciIsYmVnaW46L1xTKy99XX1dO3JldHVybiBpLmNvbnRhaW5zPXQse25hbWU6Ik5peCIsCmFsaWFzZXM6WyJuaXhvcyJdLGtleXdvcmRzOm4sY29udGFpbnM6dH19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJtYXRsYWIiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e3ZhciBhPXtyZWxldmFuY2U6MCwKY29udGFpbnM6W3tiZWdpbjoiKCd8XFwuJykrIn1dfTtyZXR1cm57bmFtZToiTWF0bGFiIixrZXl3b3Jkczp7CmtleXdvcmQ6ImFyZ3VtZW50cyBicmVhayBjYXNlIGNhdGNoIGNsYXNzZGVmIGNvbnRpbnVlIGVsc2UgZWxzZWlmIGVuZCBlbnVtZXJhdGlvbiBldmVudHMgZm9yIGZ1bmN0aW9uIGdsb2JhbCBpZiBtZXRob2RzIG90aGVyd2lzZSBwYXJmb3IgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIHJldHVybiBzcG1kIHN3aXRjaCB0cnkgd2hpbGUiLApidWlsdF9pbjoic2luIHNpbmQgc2luaCBhc2luIGFzaW5kIGFzaW5oIGNvcyBjb3NkIGNvc2ggYWNvcyBhY29zZCBhY29zaCB0YW4gdGFuZCB0YW5oIGF0YW4gYXRhbmQgYXRhbjIgYXRhbmggc2VjIHNlY2Qgc2VjaCBhc2VjIGFzZWNkIGFzZWNoIGNzYyBjc2NkIGNzY2ggYWNzYyBhY3NjZCBhY3NjaCBjb3QgY290ZCBjb3RoIGFjb3QgYWNvdGQgYWNvdGggaHlwb3QgZXhwIGV4cG0xIGxvZyBsb2cxcCBsb2cxMCBsb2cyIHBvdzIgcmVhbHBvdyByZWFsbG9nIHJlYWxzcXJ0IHNxcnQgbnRocm9vdCBuZXh0cG93MiBhYnMgYW5nbGUgY29tcGxleCBjb25qIGltYWcgcmVhbCB1bndyYXAgaXNyZWFsIGNwbHhwYWlyIGZpeCBmbG9vciBjZWlsIHJvdW5kIG1vZCByZW0gc2lnbiBhaXJ5IGJlc3NlbGogYmVzc2VseSBiZXNzZWxoIGJlc3NlbGkgYmVzc2VsayBiZXRhIGJldGFpbmMgYmV0YWxuIGVsbGlwaiBlbGxpcGtlIGVyZiBlcmZjIGVyZmN4IGVyZmludiBleHBpbnQgZ2FtbWEgZ2FtbWFpbmMgZ2FtbWFsbiBwc2kgbGVnZW5kcmUgY3Jvc3MgZG90IGZhY3RvciBpc3ByaW1lIHByaW1lcyBnY2QgbGNtIHJhdCByYXRzIHBlcm1zIG5jaG9vc2VrIGZhY3RvcmlhbCBjYXJ0MnNwaCBjYXJ0MnBvbCBwb2wyY2FydCBzcGgyY2FydCBoc3YycmdiIHJnYjJoc3YgemVyb3Mgb25lcyBleWUgcmVwbWF0IHJhbmQgcmFuZG4gbGluc3BhY2UgbG9nc3BhY2UgZnJlcXNwYWNlIG1lc2hncmlkIGFjY3VtYXJyYXkgc2l6ZSBsZW5ndGggbmRpbXMgbnVtZWwgZGlzcCBpc2VtcHR5IGlzZXF1YWwgaXNlcXVhbHdpdGhlcXVhbG5hbnMgY2F0IHJlc2hhcGUgZGlhZyBibGtkaWFnIHRyaWwgdHJpdSBmbGlwbHIgZmxpcHVkIGZsaXBkaW0gcm90OTAgZmluZCBzdWIyaW5kIGluZDJzdWIgYnN4ZnVuIG5kZ3JpZCBwZXJtdXRlIGlwZXJtdXRlIHNoaWZ0ZGltIGNpcmNzaGlmdCBzcXVlZXplIGlzc2NhbGFyIGlzdmVjdG9yIGFucyBlcHMgcmVhbG1heCByZWFsbWluIHBpIGl8MCBpbmYgbmFuIGlzbmFuIGlzaW5mIGlzZmluaXRlIGp8MCB3aHkgY29tcGFuIGdhbGxlcnkgaGFkYW1hcmQgaGFua2VsIGhpbGIgaW52aGlsYiBtYWdpYyBwYXNjYWwgcm9zc2VyIHRvZXBsaXR6IHZhbmRlciB3aWxraW5zb24gbWF4IG1pbiBuYW5tYXggbmFubWluIG1lYW4gbmFubWVhbiB0eXBlIHRhYmxlIHJlYWR0YWJsZSB3cml0ZXRhYmxlIHNvcnRyb3dzIHNvcnQgZmlndXJlIHBsb3QgcGxvdDMgc2NhdHRlciBzY2F0dGVyMyBjZWxsZnVuIGxlZ2VuZCBpbnRlcnNlY3QgaXNtZW1iZXIgcHJvY3J1c3RlcyBob2xkIG51bTJjZWxsICIKfSxpbGxlZ2FsOicoLy98InwjfC9cXCp8XFxzKy9cXHcrKScsY29udGFpbnM6W3tjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW5LZXl3b3JkczoiZnVuY3Rpb24iLGVuZDoiJCIsY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHsKY2xhc3NOYW1lOiJwYXJhbXMiLHZhcmlhbnRzOlt7YmVnaW46IlxcKCIsZW5kOiJcXCkifSx7YmVnaW46IlxcWyIsZW5kOiJcXF0ifV19XQp9LHtjbGFzc05hbWU6ImJ1aWx0X2luIixiZWdpbjovdHJ1ZXxmYWxzZS8scmVsZXZhbmNlOjAsc3RhcnRzOmF9LHsKYmVnaW46IlthLXpBLVpdW2EtekEtWl8wLTldKignfFxcLicpKyIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6Im51bWJlciIsCmJlZ2luOmUuQ19OVU1CRVJfUkUscmVsZXZhbmNlOjAsc3RhcnRzOmF9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUse2JlZ2luOiInJyJ9XX0se2JlZ2luOi9cXXxcfXxcKS8scmVsZXZhbmNlOjAsCnN0YXJ0czphfSx7Y2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOiciJyxlbmQ6JyInLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsewpiZWdpbjonIiInfV0sc3RhcnRzOmEKfSxlLkNPTU1FTlQoIl5cXHMqJVxce1xccyokIiwiXlxccyolXFx9XFxzKiQiKSxlLkNPTU1FTlQoIiUiLCIkIildfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImRqYW5nbyIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57Y29uc3QgdD17CmJlZ2luOi9cfFtBLVphLXpdKzo/LyxrZXl3b3Jkczp7Cm5hbWU6InRydW5jYXRld29yZHMgcmVtb3ZldGFncyBsaW5lYnJlYWtzYnIgeWVzbm8gZ2V0X2RpZ2l0IHRpbWVzaW5jZSByYW5kb20gc3RyaXB0YWdzIGZpbGVzaXplZm9ybWF0IGVzY2FwZSBsaW5lYnJlYWtzIGxlbmd0aF9pcyBsanVzdCByanVzdCBjdXQgdXJsaXplIGZpeF9hbXBlcnNhbmRzIHRpdGxlIGZsb2F0Zm9ybWF0IGNhcGZpcnN0IHBwcmludCBkaXZpc2libGVieSBhZGQgbWFrZV9saXN0IHVub3JkZXJlZF9saXN0IHVybGVuY29kZSB0aW1ldW50aWwgdXJsaXpldHJ1bmMgd29yZGNvdW50IHN0cmluZ2Zvcm1hdCBsaW5lbnVtYmVycyBzbGljZSBkYXRlIGRpY3Rzb3J0IGRpY3Rzb3J0cmV2ZXJzZWQgZGVmYXVsdF9pZl9ub25lIHBsdXJhbGl6ZSBsb3dlciBqb2luIGNlbnRlciBkZWZhdWx0IHRydW5jYXRld29yZHNfaHRtbCB1cHBlciBsZW5ndGggcGhvbmUybnVtZXJpYyB3b3Jkd3JhcCB0aW1lIGFkZHNsYXNoZXMgc2x1Z2lmeSBmaXJzdCBlc2NhcGVqcyBmb3JjZV9lc2NhcGUgaXJpZW5jb2RlIGxhc3Qgc2FmZSBzYWZlc2VxIHRydW5jYXRlY2hhcnMgbG9jYWxpemUgdW5sb2NhbGl6ZSBsb2NhbHRpbWUgdXRjIHRpbWV6b25lIgp9LGNvbnRhaW5zOltlLlFVT1RFX1NUUklOR19NT0RFLGUuQVBPU19TVFJJTkdfTU9ERV19O3JldHVybntuYW1lOiJEamFuZ28iLAphbGlhc2VzOlsiamluamEiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLHN1Ykxhbmd1YWdlOiJ4bWwiLApjb250YWluczpbZS5DT01NRU5UKC9ceyVccypjb21tZW50XHMqJVx9LywvXHslXHMqZW5kY29tbWVudFxzKiVcfS8pLGUuQ09NTUVOVCgvXHsjLywvI1x9LyksewpjbGFzc05hbWU6InRlbXBsYXRlLXRhZyIsYmVnaW46L1x7JS8sZW5kOi8lXH0vLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJuYW1lIiwKYmVnaW46L1x3Ky8sa2V5d29yZHM6ewpuYW1lOiJjb21tZW50IGVuZGNvbW1lbnQgbG9hZCB0ZW1wbGF0ZXRhZyBpZmNoYW5nZWQgZW5kaWZjaGFuZ2VkIGlmIGVuZGlmIGZpcnN0b2YgZm9yIGVuZGZvciBpZm5vdGVxdWFsIGVuZGlmbm90ZXF1YWwgd2lkdGhyYXRpbyBleHRlbmRzIGluY2x1ZGUgc3BhY2VsZXNzIGVuZHNwYWNlbGVzcyByZWdyb3VwIGlmZXF1YWwgZW5kaWZlcXVhbCBzc2kgbm93IHdpdGggY3ljbGUgdXJsIGZpbHRlciBlbmRmaWx0ZXIgZGVidWcgYmxvY2sgZW5kYmxvY2sgZWxzZSBhdXRvZXNjYXBlIGVuZGF1dG9lc2NhcGUgY3NyZl90b2tlbiBlbXB0eSBlbGlmIGVuZHdpdGggc3RhdGljIHRyYW5zIGJsb2NrdHJhbnMgZW5kYmxvY2t0cmFucyBnZXRfc3RhdGljX3ByZWZpeCBnZXRfbWVkaWFfcHJlZml4IHBsdXJhbCBnZXRfY3VycmVudF9sYW5ndWFnZSBsYW5ndWFnZSBnZXRfYXZhaWxhYmxlX2xhbmd1YWdlcyBnZXRfY3VycmVudF9sYW5ndWFnZV9iaWRpIGdldF9sYW5ndWFnZV9pbmZvIGdldF9sYW5ndWFnZV9pbmZvX2xpc3QgbG9jYWxpemUgZW5kbG9jYWxpemUgbG9jYWx0aW1lIGVuZGxvY2FsdGltZSB0aW1lem9uZSBlbmR0aW1lem9uZSBnZXRfY3VycmVudF90aW1lem9uZSB2ZXJiYXRpbSIKfSxzdGFydHM6e2VuZHNXaXRoUGFyZW50OiEwLGtleXdvcmRzOiJpbiBieSBhcyIsY29udGFpbnM6W3RdLHJlbGV2YW5jZTowfX1dfSx7CmNsYXNzTmFtZToidGVtcGxhdGUtdmFyaWFibGUiLGJlZ2luOi9ce1x7LyxlbmQ6L1x9XH0vLGNvbnRhaW5zOlt0XX1dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNjYWxhIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pntjb25zdCBuPXsKY2xhc3NOYW1lOiJzdWJzdCIsdmFyaWFudHM6W3tiZWdpbjoiXFwkW0EtWmEtejAtOV9dKyJ9LHtiZWdpbjovXCRcey8sZW5kOi9cfS99XQp9LGE9e2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOiciJyxlbmQ6JyInLGlsbGVnYWw6IlxcbiIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46JyIiIicsZW5kOiciIiInLHJlbGV2YW5jZToxMH0sewpiZWdpbjonW2Etel0rIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsbl19LHsKY2xhc3NOYW1lOiJzdHJpbmciLGJlZ2luOidbYS16XSsiIiInLGVuZDonIiIiJyxjb250YWluczpbbl0scmVsZXZhbmNlOjEwfV19LHM9ewpjbGFzc05hbWU6InR5cGUiLGJlZ2luOiJcXGJbQS1aXVtBLVphLXowLTlfXSoiLHJlbGV2YW5jZTowfSx0PXsKY2xhc3NOYW1lOiJ0aXRsZSIsCmJlZ2luOi9bXjAtOVxuXHQgIicoKSwuYHt9XFtcXTo7XVteXG5cdCAiJygpLC5ge31cW1xdOjtdK3xbXjAtOVxuXHQgIicoKSwuYHt9XFtcXTo7PV0vLApyZWxldmFuY2U6MH0saT17Y2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3Mgb2JqZWN0IHRyYWl0IHR5cGUiLAplbmQ6L1s6PXtcW1xuO10vLGV4Y2x1ZGVFbmQ6ITAsCmNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERSx7CmJlZ2luS2V5d29yZHM6ImV4dGVuZHMgd2l0aCIscmVsZXZhbmNlOjEwfSx7YmVnaW46L1xbLyxlbmQ6L1xdLyxleGNsdWRlQmVnaW46ITAsCmV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjAsY29udGFpbnM6W3NdfSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOi9cKC8sZW5kOi9cKS8sCmV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOltzXX0sdF19LGw9ewpjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJkZWYiLGVuZDovWzo9e1xbKFxuO10vLGV4Y2x1ZGVFbmQ6ITAsCmNvbnRhaW5zOlt0XX07cmV0dXJue25hbWU6IlNjYWxhIixrZXl3b3Jkczp7bGl0ZXJhbDoidHJ1ZSBmYWxzZSBudWxsIiwKa2V5d29yZDoidHlwZSB5aWVsZCBsYXp5IG92ZXJyaWRlIGRlZiB3aXRoIHZhbCB2YXIgc2VhbGVkIGFic3RyYWN0IHByaXZhdGUgdHJhaXQgb2JqZWN0IGlmIGZvclNvbWUgZm9yIHdoaWxlIHRocm93IGZpbmFsbHkgcHJvdGVjdGVkIGV4dGVuZHMgaW1wb3J0IGZpbmFsIHJldHVybiBlbHNlIGJyZWFrIG5ldyBjYXRjaCBzdXBlciBjbGFzcyBjYXNlIHBhY2thZ2UgZGVmYXVsdCB0cnkgdGhpcyBtYXRjaCBjb250aW51ZSB0aHJvd3MgaW1wbGljaXQiCn0sY29udGFpbnM6W2UuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGEse2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46IidcXHdbXFx3XFxkX10qKD8hJykifSxzLGwsaSxlLkNfTlVNQkVSX01PREUse2NsYXNzTmFtZToibWV0YSIsCmJlZ2luOiJAW0EtWmEtel0rIn1dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInBsYWludGV4dCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiB0PT4oewpuYW1lOiJQbGFpbiB0ZXh0IixhbGlhc2VzOlsidGV4dCIsInR4dCJdLGRpc2FibGVBdXRvZGV0ZWN0OiEwfSl9KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImtvdGxpbiIsKCgpPT57InVzZSBzdHJpY3QiCjt2YXIgZT0iXFwuKFswLTldKF8qWzAtOV0pKikiLG49IlswLTlhLWZBLUZdKF8qWzAtOWEtZkEtRl0pKiIsYT17CmNsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjpgKFxcYihbMC05XShfKlswLTldKSopKCgke2V9KXxcXC4pP3woJHtlfSkpW2VFXVsrLV0/KFswLTldKF8qWzAtOV0pKilbZkZkRF0/XFxiYAp9LHtiZWdpbjpgXFxiKFswLTldKF8qWzAtOV0pKikoKCR7ZX0pW2ZGZERdP1xcYnxcXC4oW2ZGZERdXFxiKT8pYH0sewpiZWdpbjpgKCR7ZX0pW2ZGZERdP1xcYmB9LHtiZWdpbjoiXFxiKFswLTldKF8qWzAtOV0pKilbZkZkRF1cXGIifSx7CmJlZ2luOmBcXGIwW3hYXSgoJHtufSlcXC4/fCgke259KT9cXC4oJHtufSkpW3BQXVsrLV0/KFswLTldKF8qWzAtOV0pKilbZkZkRF0/XFxiYAp9LHtiZWdpbjoiXFxiKDB8WzEtOV0oXypbMC05XSkqKVtsTF0/XFxiIn0se2JlZ2luOmBcXGIwW3hYXSgke259KVtsTF0/XFxiYH0sewpiZWdpbjoiXFxiMChfKlswLTddKSpbbExdP1xcYiJ9LHtiZWdpbjoiXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXGIifV0sCnJlbGV2YW5jZTowfTtyZXR1cm4gZT0+e2NvbnN0IG49ewprZXl3b3JkOiJhYnN0cmFjdCBhcyB2YWwgdmFyIHZhcmFyZyBnZXQgc2V0IGNsYXNzIG9iamVjdCBvcGVuIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBub2lubGluZSBjcm9zc2lubGluZSBkeW5hbWljIGZpbmFsIGVudW0gaWYgZWxzZSBkbyB3aGlsZSBmb3Igd2hlbiB0aHJvdyB0cnkgY2F0Y2ggZmluYWxseSBpbXBvcnQgcGFja2FnZSBpcyBpbiBmdW4gb3ZlcnJpZGUgY29tcGFuaW9uIHJlaWZpZWQgaW5saW5lIGxhdGVpbml0IGluaXQgaW50ZXJmYWNlIGFubm90YXRpb24gZGF0YSBzZWFsZWQgaW50ZXJuYWwgaW5maXggb3BlcmF0b3Igb3V0IGJ5IGNvbnN0cnVjdG9yIHN1cGVyIHRhaWxyZWMgd2hlcmUgY29uc3QgaW5uZXIgc3VzcGVuZCB0eXBlYWxpYXMgZXh0ZXJuYWwgZXhwZWN0IGFjdHVhbCIsCmJ1aWx0X2luOiJCeXRlIFNob3J0IENoYXIgSW50IExvbmcgQm9vbGVhbiBGbG9hdCBEb3VibGUgVm9pZCBVbml0IE5vdGhpbmciLApsaXRlcmFsOiJ0cnVlIGZhbHNlIG51bGwifSxpPXtjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46ZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJAIgp9LHM9e2NsYXNzTmFtZToic3Vic3QiLGJlZ2luOi9cJFx7LyxlbmQ6L1x9Lyxjb250YWluczpbZS5DX05VTUJFUl9NT0RFXX0sdD17CmNsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOiJcXCQiK2UuVU5ERVJTQ09SRV9JREVOVF9SRX0scj17Y2xhc3NOYW1lOiJzdHJpbmciLAp2YXJpYW50czpbe2JlZ2luOiciIiInLGVuZDonIiIiKD89W14iXSknLGNvbnRhaW5zOlt0LHNdfSx7YmVnaW46IiciLGVuZDoiJyIsCmlsbGVnYWw6L1xuLyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFXX0se2JlZ2luOiciJyxlbmQ6JyInLGlsbGVnYWw6L1xuLywKY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSx0LHNdfV19O3MuY29udGFpbnMucHVzaChyKTtjb25zdCBsPXsKY2xhc3NOYW1lOiJtZXRhIiwKYmVnaW46IkAoPzpmaWxlfHByb3BlcnR5fGZpZWxkfGdldHxzZXR8cmVjZWl2ZXJ8cGFyYW18c2V0cGFyYW18ZGVsZWdhdGUpXFxzKjooPzpcXHMqIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIik/Igp9LGM9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkAiK2UuVU5ERVJTQ09SRV9JREVOVF9SRSxjb250YWluczpbe2JlZ2luOi9cKC8sCmVuZDovXCkvLGNvbnRhaW5zOltlLmluaGVyaXQocix7Y2xhc3NOYW1lOiJtZXRhLXN0cmluZyJ9KV19XQp9LG89YSxiPWUuQ09NTUVOVCgiL1xcKiIsIlxcKi8iLHtjb250YWluczpbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19KSxFPXsKdmFyaWFudHM6W3tjbGFzc05hbWU6InR5cGUiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRX0se2JlZ2luOi9cKC8sZW5kOi9cKS8sCmNvbnRhaW5zOltdfV19LGQ9RTtyZXR1cm4gZC52YXJpYW50c1sxXS5jb250YWlucz1bRV0sRS52YXJpYW50c1sxXS5jb250YWlucz1bZF0sCntuYW1lOiJLb3RsaW4iLGFsaWFzZXM6WyJrdCJdLGtleXdvcmRzOm4sY29udGFpbnM6W2UuQ09NTUVOVCgiL1xcKlxcKiIsIlxcKi8iLHsKcmVsZXZhbmNlOjAsY29udGFpbnM6W3tjbGFzc05hbWU6ImRvY3RhZyIsYmVnaW46IkBbQS1aYS16XSsifV0KfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGIse2NsYXNzTmFtZToia2V5d29yZCIsCmJlZ2luOi9cYihicmVha3xjb250aW51ZXxyZXR1cm58dGhpcylcYi8sc3RhcnRzOntjb250YWluczpbe2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46L0BcdysvfV19fSxpLGwsYyx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZnVuIixlbmQ6IlsoXXwkIiwKcmV0dXJuQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTo1LGNvbnRhaW5zOlt7CmJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi88LyxlbmQ6Lz4vLAprZXl3b3JkczoicmVpZmllZCIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLywKZW5kc1BhcmVudDohMCxrZXl3b3JkczpuLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7YmVnaW46LzovLGVuZDovWz0sXC9dLywKZW5kc1dpdGhQYXJlbnQ6ITAsY29udGFpbnM6W0UsZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGJdLHJlbGV2YW5jZTowCn0sZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGIsbCxjLHIsZS5DX05VTUJFUl9NT0RFXX0sYl19LHtjbGFzc05hbWU6ImNsYXNzIiwKYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIHRyYWl0IixlbmQ6L1s6XHsoXXwkLyxleGNsdWRlRW5kOiEwLAppbGxlZ2FsOiJleHRlbmRzIGltcGxlbWVudHMiLGNvbnRhaW5zOlt7CmJlZ2luS2V5d29yZHM6InB1YmxpYyBwcm90ZWN0ZWQgaW50ZXJuYWwgcHJpdmF0ZSBjb25zdHJ1Y3RvciIKfSxlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjovPC8sZW5kOi8+LyxleGNsdWRlQmVnaW46ITAsCmV4Y2x1ZGVFbmQ6ITAscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi9bLDpdXHMqLyxlbmQ6L1s8XCgsXXwkLywKZXhjbHVkZUJlZ2luOiEwLHJldHVybkVuZDohMH0sbCxjXX0scix7Y2xhc3NOYW1lOiJtZXRhIixiZWdpbjoiXiMhL3Vzci9iaW4vZW52IiwKZW5kOiIkIixpbGxlZ2FsOiJcbiJ9LG9dfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInBocC10ZW1wbGF0ZSIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBuPT4oewpuYW1lOiJQSFAgdGVtcGxhdGUiLHN1Ykxhbmd1YWdlOiJ4bWwiLGNvbnRhaW5zOlt7YmVnaW46LzxcPyhwaHB8PSk/LyxlbmQ6L1w/Pi8sCnN1Ykxhbmd1YWdlOiJwaHAiLGNvbnRhaW5zOlt7YmVnaW46Ii9cXCoiLGVuZDoiXFwqLyIsc2tpcDohMH0se2JlZ2luOidiIicsCmVuZDonIicsc2tpcDohMH0se2JlZ2luOiJiJyIsZW5kOiInIixza2lwOiEwfSxuLmluaGVyaXQobi5BUE9TX1NUUklOR19NT0RFLHsKaWxsZWdhbDpudWxsLGNsYXNzTmFtZTpudWxsLGNvbnRhaW5zOm51bGwsc2tpcDohMAp9KSxuLmluaGVyaXQobi5RVU9URV9TVFJJTkdfTU9ERSx7aWxsZWdhbDpudWxsLGNsYXNzTmFtZTpudWxsLGNvbnRhaW5zOm51bGwsCnNraXA6ITB9KV19XX0pfSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJpbmkiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKGUpewpyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/ZTplLnNvdXJjZTpudWxsfWZ1bmN0aW9uIG4oLi4ubil7CnJldHVybiBuLm1hcCgobj0+ZShuKSkpLmpvaW4oIiIpfXJldHVybiBzPT57Y29uc3QgYT17Y2xhc3NOYW1lOiJudW1iZXIiLApyZWxldmFuY2U6MCx2YXJpYW50czpbe2JlZ2luOi8oWystXSspP1tcZF0rX1tcZF9dKy99LHtiZWdpbjpzLk5VTUJFUl9SRX1dCn0saT1zLkNPTU1FTlQoKTtpLnZhcmlhbnRzPVt7YmVnaW46LzsvLGVuZDovJC99LHtiZWdpbjovIy8sZW5kOi8kL31dO2NvbnN0IHQ9ewpjbGFzc05hbWU6InZhcmlhYmxlIix2YXJpYW50czpbe2JlZ2luOi9cJFtcd1xkIl1bXHdcZF9dKi99LHtiZWdpbjovXCRceyguKj8pXH0vCn1dfSxyPXtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOi9cYm9ufG9mZnx0cnVlfGZhbHNlfHllc3xub1xiL30sbD17CmNsYXNzTmFtZToic3RyaW5nIixjb250YWluczpbcy5CQUNLU0xBU0hfRVNDQVBFXSx2YXJpYW50czpbe2JlZ2luOiInJyciLAplbmQ6IicnJyIscmVsZXZhbmNlOjEwfSx7YmVnaW46JyIiIicsZW5kOiciIiInLHJlbGV2YW5jZToxMH0se2JlZ2luOiciJyxlbmQ6JyInCn0se2JlZ2luOiInIixlbmQ6IicifV19LGM9e2JlZ2luOi9cWy8sZW5kOi9cXS8sY29udGFpbnM6W2kscix0LGwsYSwic2VsZiJdLApyZWxldmFuY2U6MAp9LGc9IigiK1svW0EtWmEtejAtOV8tXSsvLC8iKFxcInxbXiJdKSoiLywvJ1teJ10qJy9dLm1hcCgobj0+ZShuKSkpLmpvaW4oInwiKSsiKSIKO3JldHVybntuYW1lOiJUT01MLCBhbHNvIElOSSIsYWxpYXNlczpbInRvbWwiXSxjYXNlX2luc2Vuc2l0aXZlOiEwLGlsbGVnYWw6L1xTLywKY29udGFpbnM6W2kse2NsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46L1xbKy8sZW5kOi9cXSsvfSx7CmJlZ2luOm4oZywiKFxccypcXC5cXHMqIixnLCIpKiIsbigiKD89IiwvXHMqPVxzKlteI1xzXS8sIikiKSksY2xhc3NOYW1lOiJhdHRyIiwKc3RhcnRzOntlbmQ6LyQvLGNvbnRhaW5zOltpLGMscix0LGwsYV19fV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgidHlwZXNjcmlwdCIsKCgpPT57InVzZSBzdHJpY3QiCjtjb25zdCBlPSJbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoiLG49WyJhcyIsImluIiwib2YiLCJpZiIsImZvciIsIndoaWxlIiwiZmluYWxseSIsInZhciIsIm5ldyIsImZ1bmN0aW9uIiwiZG8iLCJyZXR1cm4iLCJ2b2lkIiwiZWxzZSIsImJyZWFrIiwiY2F0Y2giLCJpbnN0YW5jZW9mIiwid2l0aCIsInRocm93IiwiY2FzZSIsImRlZmF1bHQiLCJ0cnkiLCJzd2l0Y2giLCJjb250aW51ZSIsInR5cGVvZiIsImRlbGV0ZSIsImxldCIsInlpZWxkIiwiY29uc3QiLCJjbGFzcyIsImRlYnVnZ2VyIiwiYXN5bmMiLCJhd2FpdCIsInN0YXRpYyIsImltcG9ydCIsImZyb20iLCJleHBvcnQiLCJleHRlbmRzIl0sYT1bInRydWUiLCJmYWxzZSIsIm51bGwiLCJ1bmRlZmluZWQiLCJOYU4iLCJJbmZpbml0eSJdLHM9W10uY29uY2F0KFsic2V0SW50ZXJ2YWwiLCJzZXRUaW1lb3V0IiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsInJlcXVpcmUiLCJleHBvcnRzIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSJdLFsiYXJndW1lbnRzIiwidGhpcyIsInN1cGVyIiwiY29uc29sZSIsIndpbmRvdyIsImRvY3VtZW50IiwibG9jYWxTdG9yYWdlIiwibW9kdWxlIiwiZ2xvYmFsIl0sWyJJbnRsIiwiRGF0YVZpZXciLCJOdW1iZXIiLCJNYXRoIiwiRGF0ZSIsIlN0cmluZyIsIlJlZ0V4cCIsIk9iamVjdCIsIkZ1bmN0aW9uIiwiQm9vbGVhbiIsIkVycm9yIiwiU3ltYm9sIiwiU2V0IiwiTWFwIiwiV2Vha1NldCIsIldlYWtNYXAiLCJQcm94eSIsIlJlZmxlY3QiLCJKU09OIiwiUHJvbWlzZSIsIkZsb2F0NjRBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiSW50OEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIkZsb2F0MzJBcnJheSIsIkFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiQXJyYXlCdWZmZXIiXSxbIkV2YWxFcnJvciIsIkludGVybmFsRXJyb3IiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIl0pCjtmdW5jdGlvbiB0KGUpe3JldHVybiBpKCIoPz0iLGUsIikiKX1mdW5jdGlvbiBpKC4uLmUpe3JldHVybiBlLm1hcCgoZT0+ewpyZXR1cm4obj1lKT8ic3RyaW5nIj09dHlwZW9mIG4/bjpuLnNvdXJjZTpudWxsO3ZhciBufSkpLmpvaW4oIiIpfXJldHVybiByPT57CmNvbnN0IGM9eyRwYXR0ZXJuOmUsCmtleXdvcmQ6bi5jb25jYXQoWyJ0eXBlIiwibmFtZXNwYWNlIiwidHlwZWRlZiIsImludGVyZmFjZSIsInB1YmxpYyIsInByaXZhdGUiLCJwcm90ZWN0ZWQiLCJpbXBsZW1lbnRzIiwiZGVjbGFyZSIsImFic3RyYWN0IiwicmVhZG9ubHkiXSkuam9pbigiICIpLApsaXRlcmFsOmEuam9pbigiICIpLApidWlsdF9pbjpzLmNvbmNhdChbImFueSIsInZvaWQiLCJudW1iZXIiLCJib29sZWFuIiwic3RyaW5nIiwib2JqZWN0IiwibmV2ZXIiLCJlbnVtIl0pLmpvaW4oIiAiKQp9LG89e2NsYXNzTmFtZToibWV0YSIsYmVnaW46IkBbQS1aYS16JF9dWzAtOUEtWmEteiRfXSoifSxsPShlLG4sYSk9PnsKY29uc3Qgcz1lLmNvbnRhaW5zLmZpbmRJbmRleCgoZT0+ZS5sYWJlbD09PW4pKQo7aWYoLTE9PT1zKXRocm93IEVycm9yKCJjYW4gbm90IGZpbmQgbW9kZSB0byByZXBsYWNlIik7ZS5jb250YWlucy5zcGxpY2UocywxLGEpCn0sYj0ocj0+e2NvbnN0IGM9ZSxvPXtiZWdpbjovPFtBLVphLXowLTlcXC5fOi1dKy8sCmVuZDovXC9bQS1aYS16MC05XFwuXzotXSs+fFwvPi8saXNUcnVseU9wZW5pbmdUYWc6KGUsbik9PnsKY29uc3QgYT1lWzBdLmxlbmd0aCtlLmluZGV4LHM9ZS5pbnB1dFthXTsiPCIhPT1zPyI+Ij09PXMmJigoKGUse2FmdGVyOm59KT0+ewpjb25zdCBhPSI8LyIrZVswXS5zbGljZSgxKTtyZXR1cm4tMSE9PWUuaW5wdXQuaW5kZXhPZihhLG4pfSkoZSx7YWZ0ZXI6YQp9KXx8bi5pZ25vcmVNYXRjaCgpKTpuLmlnbm9yZU1hdGNoKCl9fSxsPXskcGF0dGVybjplLGtleXdvcmQ6bi5qb2luKCIgIiksCmxpdGVyYWw6YS5qb2luKCIgIiksYnVpbHRfaW46cy5qb2luKCIgIikKfSxiPSJcXC4oWzAtOV0oXz9bMC05XSkqKSIsZD0iMHxbMS05XShfP1swLTldKSp8MFswLTddKls4OV1bMC05XSoiLGc9ewpjbGFzc05hbWU6Im51bWJlciIsdmFyaWFudHM6W3sKYmVnaW46YChcXGIoJHtkfSkoKCR7Yn0pfFxcLik/fCgke2J9KSlbZUVdWystXT8oWzAtOV0oXz9bMC05XSkqKVxcYmB9LHsKYmVnaW46YFxcYigke2R9KVxcYigoJHtifSlcXGJ8XFwuKT98KCR7Yn0pXFxiYH0sewpiZWdpbjoiXFxiKDB8WzEtOV0oXz9bMC05XSkqKW5cXGIifSx7CmJlZ2luOiJcXGIwW3hYXVswLTlhLWZBLUZdKF8/WzAtOWEtZkEtRl0pKm4/XFxiIn0sewpiZWdpbjoiXFxiMFtiQl1bMC0xXShfP1swLTFdKSpuP1xcYiJ9LHtiZWdpbjoiXFxiMFtvT11bMC03XShfP1swLTddKSpuP1xcYiJ9LHsKYmVnaW46IlxcYjBbMC03XStuP1xcYiJ9XSxyZWxldmFuY2U6MH0sdT17Y2xhc3NOYW1lOiJzdWJzdCIsYmVnaW46IlxcJFxceyIsCmVuZDoiXFx9IixrZXl3b3JkczpsLGNvbnRhaW5zOltdfSxFPXtiZWdpbjoiaHRtbGAiLGVuZDoiIixzdGFydHM6e2VuZDoiYCIsCnJldHVybkVuZDohMSxjb250YWluczpbci5CQUNLU0xBU0hfRVNDQVBFLHVdLHN1Ykxhbmd1YWdlOiJ4bWwifX0sbT17CmJlZ2luOiJjc3NgIixlbmQ6IiIsc3RhcnRzOntlbmQ6ImAiLHJldHVybkVuZDohMSwKY29udGFpbnM6W3IuQkFDS1NMQVNIX0VTQ0FQRSx1XSxzdWJMYW5ndWFnZToiY3NzIn19LF89e2NsYXNzTmFtZToic3RyaW5nIiwKYmVnaW46ImAiLGVuZDoiYCIsY29udGFpbnM6W3IuQkFDS1NMQVNIX0VTQ0FQRSx1XX0seT17Y2xhc3NOYW1lOiJjb21tZW50IiwKdmFyaWFudHM6W3IuQ09NTUVOVCgiL1xcKlxcKiIsIlxcKi8iLHtyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIiwKYmVnaW46IkBbQS1aYS16XSsiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFx7IixlbmQ6IlxcfSIscmVsZXZhbmNlOjAKfSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46YysiKD89XFxzKigtKXwkKSIsZW5kc1BhcmVudDohMCxyZWxldmFuY2U6MH0sewpiZWdpbjovKD89W15cbl0pXHMvLHJlbGV2YW5jZTowfV19XQp9KSxyLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHIuQ19MSU5FX0NPTU1FTlRfTU9ERV0KfSxwPVtyLkFQT1NfU1RSSU5HX01PREUsci5RVU9URV9TVFJJTkdfTU9ERSxFLG0sXyxnLHIuUkVHRVhQX01PREVdCjt1LmNvbnRhaW5zPXAuY29uY2F0KHtiZWdpbjovXHsvLGVuZDovXH0vLGtleXdvcmRzOmwsY29udGFpbnM6WyJzZWxmIl0uY29uY2F0KHApCn0pO2NvbnN0IE49W10uY29uY2F0KHksdS5jb250YWlucyksZj1OLmNvbmNhdChbe2JlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6bCwKY29udGFpbnM6WyJzZWxmIl0uY29uY2F0KE4pfV0pLEE9e2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLGVuZDovXCkvLApleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCxrZXl3b3JkczpsLGNvbnRhaW5zOmZ9O3JldHVybntuYW1lOiJKYXZhc2NyaXB0IiwKYWxpYXNlczpbImpzIiwianN4IiwibWpzIiwiY2pzIl0sa2V5d29yZHM6bCxleHBvcnRzOntQQVJBTVNfQ09OVEFJTlM6Zn0sCmlsbGVnYWw6LyMoPyFbJF9BLXpdKS8sY29udGFpbnM6W3IuU0hFQkFORyh7bGFiZWw6InNoZWJhbmciLGJpbmFyeToibm9kZSIsCnJlbGV2YW5jZTo1fSkse2xhYmVsOiJ1c2Vfc3RyaWN0IixjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCwKYmVnaW46L15ccypbJyJddXNlIChzdHJpY3R8YXNtKVsnIl0vCn0sci5BUE9TX1NUUklOR19NT0RFLHIuUVVPVEVfU1RSSU5HX01PREUsRSxtLF8seSxnLHsKYmVnaW46aSgvW3ssXG5dXHMqLyx0KGkoLygoKFwvXC8uKiQpfChcL1wqKFwqW14vXXxbXipdKSpcKlwvKSlccyopKi8sYysiXFxzKjoiKSkpLApyZWxldmFuY2U6MCxjb250YWluczpbe2NsYXNzTmFtZToiYXR0ciIsYmVnaW46Yyt0KCJcXHMqOiIpLHJlbGV2YW5jZTowfV19LHsKYmVnaW46IigiK3IuUkVfU1RBUlRFUlNfUkUrInxcXGIoY2FzZXxyZXR1cm58dGhyb3cpXFxiKVxccyoiLAprZXl3b3JkczoicmV0dXJuIHRocm93IGNhc2UiLGNvbnRhaW5zOlt5LHIuUkVHRVhQX01PREUse2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbjoiKFxcKFteKCldKihcXChbXigpXSooXFwoW14oKV0qXFwpW14oKV0qKSpcXClbXigpXSopKlxcKXwiK3IuVU5ERVJTQ09SRV9JREVOVF9SRSsiKVxccyo9PiIsCnJldHVybkJlZ2luOiEwLGVuZDoiXFxzKj0+Iixjb250YWluczpbe2NsYXNzTmFtZToicGFyYW1zIix2YXJpYW50czpbewpiZWdpbjpyLlVOREVSU0NPUkVfSURFTlRfUkUscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6bnVsbCxiZWdpbjovXChccypcKS8sc2tpcDohMAp9LHtiZWdpbjovXCgvLGVuZDovXCkvLGV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLGtleXdvcmRzOmwsY29udGFpbnM6Zn1dfV0KfSx7YmVnaW46LywvLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiIiLGJlZ2luOi9ccy8sZW5kOi9ccyovLHNraXA6ITB9LHsKdmFyaWFudHM6W3tiZWdpbjoiPD4iLGVuZDoiPC8+In0se2JlZ2luOm8uYmVnaW4sIm9uOmJlZ2luIjpvLmlzVHJ1bHlPcGVuaW5nVGFnLAplbmQ6by5lbmR9XSxzdWJMYW5ndWFnZToieG1sIixjb250YWluczpbe2JlZ2luOm8uYmVnaW4sZW5kOm8uZW5kLHNraXA6ITAsCmNvbnRhaW5zOlsic2VsZiJdfV19XSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToiZnVuY3Rpb24iLApiZWdpbktleXdvcmRzOiJmdW5jdGlvbiIsZW5kOi9beztdLyxleGNsdWRlRW5kOiEwLGtleXdvcmRzOmwsCmNvbnRhaW5zOlsic2VsZiIsci5pbmhlcml0KHIuVElUTEVfTU9ERSx7YmVnaW46Y30pLEFdLGlsbGVnYWw6LyUvfSx7CmJlZ2luS2V5d29yZHM6IndoaWxlIGlmIHN3aXRjaCBjYXRjaCBmb3IifSx7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsCmJlZ2luOnIuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFwoW14oKV0qKFxcKFteKCldKihcXChbXigpXSpcXClbXigpXSopKlxcKVteKCldKikqXFwpXFxzKlxceyIsCnJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltBLHIuaW5oZXJpdChyLlRJVExFX01PREUse2JlZ2luOmN9KV19LHt2YXJpYW50czpbewpiZWdpbjoiXFwuIitjfSx7YmVnaW46IlxcJCIrY31dLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luS2V5d29yZHM6ImNsYXNzIixlbmQ6L1t7Oz1dLyxleGNsdWRlRW5kOiEwLGlsbGVnYWw6L1s6IltcXV0vLGNvbnRhaW5zOlt7CmJlZ2luS2V5d29yZHM6ImV4dGVuZHMifSxyLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtiZWdpbjovXGIoPz1jb25zdHJ1Y3RvcikvLAplbmQ6L1t7O10vLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3IuaW5oZXJpdChyLlRJVExFX01PREUse2JlZ2luOmN9KSwic2VsZiIsQV0KfSx7YmVnaW46IihnZXR8c2V0KVxccysoPz0iK2MrIlxcKCkiLGVuZDovXHsvLGtleXdvcmRzOiJnZXQgc2V0IiwKY29udGFpbnM6W3IuaW5oZXJpdChyLlRJVExFX01PREUse2JlZ2luOmN9KSx7YmVnaW46L1woXCkvfSxBXX0se2JlZ2luOi9cJFsoLl0vfV0KfX0pKHIpCjtyZXR1cm4gT2JqZWN0LmFzc2lnbihiLmtleXdvcmRzLGMpLGIuZXhwb3J0cy5QQVJBTVNfQ09OVEFJTlMucHVzaChvKSxiLmNvbnRhaW5zPWIuY29udGFpbnMuY29uY2F0KFtvLHsKYmVnaW5LZXl3b3JkczoibmFtZXNwYWNlIixlbmQ6L1x7LyxleGNsdWRlRW5kOiEwfSx7YmVnaW5LZXl3b3JkczoiaW50ZXJmYWNlIiwKZW5kOi9cey8sZXhjbHVkZUVuZDohMCxrZXl3b3JkczoiaW50ZXJmYWNlIGV4dGVuZHMiCn1dKSxsKGIsInNoZWJhbmciLHIuU0hFQkFORygpKSxsKGIsInVzZV9zdHJpY3QiLHtjbGFzc05hbWU6Im1ldGEiLHJlbGV2YW5jZToxMCwKYmVnaW46L15ccypbJyJddXNlIHN0cmljdFsnIl0vCn0pLGIuY29udGFpbnMuZmluZCgoZT0+ImZ1bmN0aW9uIj09PWUuY2xhc3NOYW1lKSkucmVsZXZhbmNlPTAsT2JqZWN0LmFzc2lnbihiLHsKbmFtZToiVHlwZVNjcmlwdCIsYWxpYXNlczpbInRzIl19KSxifX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgicnVzdCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CmNvbnN0IG49IihbdWldKDh8MTZ8MzJ8NjR8MTI4fHNpemUpfGYoMzJ8NjQpKT8iLHQ9ImRyb3AgaTggaTE2IGkzMiBpNjQgaTEyOCBpc2l6ZSB1OCB1MTYgdTMyIHU2NCB1MTI4IHVzaXplIGYzMiBmNjQgc3RyIGNoYXIgYm9vbCBCb3ggT3B0aW9uIFJlc3VsdCBTdHJpbmcgVmVjIENvcHkgU2VuZCBTaXplZCBTeW5jIERyb3AgRm4gRm5NdXQgRm5PbmNlIFRvT3duZWQgQ2xvbmUgRGVidWcgUGFydGlhbEVxIFBhcnRpYWxPcmQgRXEgT3JkIEFzUmVmIEFzTXV0IEludG8gRnJvbSBEZWZhdWx0IEl0ZXJhdG9yIEV4dGVuZCBJbnRvSXRlcmF0b3IgRG91YmxlRW5kZWRJdGVyYXRvciBFeGFjdFNpemVJdGVyYXRvciBTbGljZUNvbmNhdEV4dCBUb1N0cmluZyBhc3NlcnQhIGFzc2VydF9lcSEgYml0ZmxhZ3MhIGJ5dGVzISBjZmchIGNvbCEgY29uY2F0ISBjb25jYXRfaWRlbnRzISBkZWJ1Z19hc3NlcnQhIGRlYnVnX2Fzc2VydF9lcSEgZW52ISBwYW5pYyEgZmlsZSEgZm9ybWF0ISBmb3JtYXRfYXJncyEgaW5jbHVkZV9iaW4hIGluY2x1ZGVfc3RyISBsaW5lISBsb2NhbF9kYXRhX2tleSEgbW9kdWxlX3BhdGghIG9wdGlvbl9lbnYhIHByaW50ISBwcmludGxuISBzZWxlY3QhIHN0cmluZ2lmeSEgdHJ5ISB1bmltcGxlbWVudGVkISB1bnJlYWNoYWJsZSEgdmVjISB3cml0ZSEgd3JpdGVsbiEgbWFjcm9fcnVsZXMhIGFzc2VydF9uZSEgZGVidWdfYXNzZXJ0X25lISIKO3JldHVybntuYW1lOiJSdXN0IixhbGlhc2VzOlsicnMiXSxrZXl3b3Jkczp7JHBhdHRlcm46ZS5JREVOVF9SRSsiIT8iLAprZXl3b3JkOiJhYnN0cmFjdCBhcyBhc3luYyBhd2FpdCBiZWNvbWUgYm94IGJyZWFrIGNvbnN0IGNvbnRpbnVlIGNyYXRlIGRvIGR5biBlbHNlIGVudW0gZXh0ZXJuIGZhbHNlIGZpbmFsIGZuIGZvciBpZiBpbXBsIGluIGxldCBsb29wIG1hY3JvIG1hdGNoIG1vZCBtb3ZlIG11dCBvdmVycmlkZSBwcml2IHB1YiByZWYgcmV0dXJuIHNlbGYgU2VsZiBzdGF0aWMgc3RydWN0IHN1cGVyIHRyYWl0IHRydWUgdHJ5IHR5cGUgdHlwZW9mIHVuc2FmZSB1bnNpemVkIHVzZSB2aXJ0dWFsIHdoZXJlIHdoaWxlIHlpZWxkIiwKbGl0ZXJhbDoidHJ1ZSBmYWxzZSBTb21lIE5vbmUgT2sgRXJyIixidWlsdF9pbjp0fSxpbGxlZ2FsOiI8LyIsCmNvbnRhaW5zOltlLkNfTElORV9DT01NRU5UX01PREUsZS5DT01NRU5UKCIvXFwqIiwiXFwqLyIse2NvbnRhaW5zOlsic2VsZiJdCn0pLGUuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtiZWdpbjovYj8iLyxpbGxlZ2FsOm51bGx9KSx7CmNsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi9yKCMqKSIoLnxcbikqPyJcMSg/ISMpL30sewpiZWdpbjovYj8nXFw/KHhcd3syfXx1XHd7NH18VVx3ezh9fC4pJy99XX0se2NsYXNzTmFtZToic3ltYm9sIiwKYmVnaW46LydbYS16QS1aX11bYS16QS1aMC05X10qL30se2NsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjoiXFxiMGIoWzAxX10rKSIrbn0se2JlZ2luOiJcXGIwbyhbMC03X10rKSIrbn0sewpiZWdpbjoiXFxiMHgoW0EtRmEtZjAtOV9dKykiK259LHsKYmVnaW46IlxcYihcXGRbXFxkX10qKFxcLlswLTlfXSspPyhbZUVdWystXT9bMC05X10rKT8pIitufV0scmVsZXZhbmNlOjB9LHsKY2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW5LZXl3b3JkczoiZm4iLGVuZDoiKFxcKHw8KSIsZXhjbHVkZUVuZDohMCwKY29udGFpbnM6W2UuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0se2NsYXNzTmFtZToibWV0YSIsYmVnaW46IiMhP1xcWyIsZW5kOiJcXF0iLApjb250YWluczpbe2NsYXNzTmFtZToibWV0YS1zdHJpbmciLGJlZ2luOi8iLyxlbmQ6LyIvfV19LHtjbGFzc05hbWU6ImNsYXNzIiwKYmVnaW5LZXl3b3JkczoidHlwZSIsZW5kOiI7Iixjb250YWluczpbZS5pbmhlcml0KGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFLHsKZW5kc1BhcmVudDohMH0pXSxpbGxlZ2FsOiJcXFMifSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luS2V5d29yZHM6InRyYWl0IGVudW0gc3RydWN0IHVuaW9uIixlbmQ6L1x7LywKY29udGFpbnM6W2UuaW5oZXJpdChlLlVOREVSU0NPUkVfVElUTEVfTU9ERSx7ZW5kc1BhcmVudDohMH0pXSxpbGxlZ2FsOiJbXFx3XFxkXSIKfSx7YmVnaW46ZS5JREVOVF9SRSsiOjoiLGtleXdvcmRzOntidWlsdF9pbjp0fX0se2JlZ2luOiItPiJ9XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJjcnlzdGFsIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9PnsKdmFyIG49IihfP1t1aV0oOHwxNnwzMnw2NHwxMjgpKT8iLGk9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1AfDw8fD4+fFs9IV1+fD09PT98PD0+fFs8Pl09P3xcXCpcXCp8Wy0vKyVeJip+fF18Ly98Ly89fCZbLSsqXT0/fCZcXCpcXCp8XFxbXFxdWz0/XT8iLGE9IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fCEpPyIscz17CiRwYXR0ZXJuOiJbYS16QS1aX11cXHcqWyE/PV0/IiwKa2V5d29yZDoiYWJzdHJhY3QgYWxpYXMgYW5ub3RhdGlvbiBhcyBhcz8gYXNtIGJlZ2luIGJyZWFrIGNhc2UgY2xhc3MgZGVmIGRvIGVsc2UgZWxzaWYgZW5kIGVuc3VyZSBlbnVtIGV4dGVuZCBmb3IgZnVuIGlmIGluY2x1ZGUgaW5zdGFuY2Vfc2l6ZW9mIGlzX2E/IGxpYiBtYWNybyBtb2R1bGUgbmV4dCBuaWw/IG9mIG91dCBwb2ludGVyb2YgcHJpdmF0ZSBwcm90ZWN0ZWQgcmVzY3VlIHJlc3BvbmRzX3RvPyByZXR1cm4gcmVxdWlyZSBzZWxlY3Qgc2VsZiBzaXplb2Ygc3RydWN0IHN1cGVyIHRoZW4gdHlwZSB0eXBlb2YgdW5pb24gdW5pbml0aWFsaXplZCB1bmxlc3MgdW50aWwgdmVyYmF0aW0gd2hlbiB3aGlsZSB3aXRoIHlpZWxkIF9fRElSX18gX19FTkRfTElORV9fIF9fRklMRV9fIF9fTElORV9fIiwKbGl0ZXJhbDoiZmFsc2UgbmlsIHRydWUifSx0PXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovI1x7LyxlbmQ6L1x9LyxrZXl3b3JkczpzCn0scj17Y2xhc3NOYW1lOiJ0ZW1wbGF0ZS12YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjoiXFx7XFx7IixlbmQ6IlxcfVxcfSJ9LHsKYmVnaW46IlxceyUiLGVuZDoiJVxcfSJ9XSxrZXl3b3JkczpzfTtmdW5jdGlvbiBjKGUsbil7dmFyIGk9W3tiZWdpbjplLGVuZDpufV0KO3JldHVybiBpWzBdLmNvbnRhaW5zPWksaX12YXIgbD17Y2xhc3NOYW1lOiJzdHJpbmciLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHRdLHZhcmlhbnRzOlt7YmVnaW46LycvLGVuZDovJy99LHtiZWdpbjovIi8sZW5kOi8iLwp9LHtiZWdpbjovYC8sZW5kOi9gL30se2JlZ2luOiIlW1F3aV0/XFwoIixlbmQ6IlxcKSIsY29udGFpbnM6YygiXFwoIiwiXFwpIil9LHsKYmVnaW46IiVbUXdpXT9cXFsiLGVuZDoiXFxdIixjb250YWluczpjKCJcXFsiLCJcXF0iKX0se2JlZ2luOiIlW1F3aV0/XFx7IiwKZW5kOi9cfS8sY29udGFpbnM6YygvXHsvLC9cfS8pfSx7YmVnaW46IiVbUXdpXT88IixlbmQ6Ij4iLGNvbnRhaW5zOmMoIjwiLCI+Iil9LHsKYmVnaW46IiVbUXdpXT9cXHwiLGVuZDoiXFx8In0se2JlZ2luOi88PC1cdyskLyxlbmQ6L15ccypcdyskL31dLHJlbGV2YW5jZTowfSxiPXsKY2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46IiVxXFwoIixlbmQ6IlxcKSIsY29udGFpbnM6YygiXFwoIiwiXFwpIil9LHsKYmVnaW46IiVxXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6YygiXFxbIiwiXFxdIil9LHtiZWdpbjoiJXFcXHsiLGVuZDovXH0vLApjb250YWluczpjKC9cey8sL1x9Lyl9LHtiZWdpbjoiJXE8IixlbmQ6Ij4iLGNvbnRhaW5zOmMoIjwiLCI+Iil9LHtiZWdpbjoiJXFcXHwiLAplbmQ6IlxcfCJ9LHtiZWdpbjovPDwtJ1x3KyckLyxlbmQ6L15ccypcdyskL31dLHJlbGV2YW5jZTowfSxvPXsKYmVnaW46Iig/ISVcXH0pKCIrZS5SRV9TVEFSVEVSU19SRSsifFxcbnxcXGIoY2FzZXxpZnxzZWxlY3R8dW5sZXNzfHVudGlsfHdoZW58d2hpbGUpXFxiKVxccyoiLAprZXl3b3JkczoiY2FzZSBpZiBzZWxlY3QgdW5sZXNzIHVudGlsIHdoZW4gd2hpbGUiLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJyZWdleHAiLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHRdLHZhcmlhbnRzOlt7YmVnaW46Ii8vW2Etel0qIixyZWxldmFuY2U6MH0sewpiZWdpbjoiLyg/IVxcLykiLGVuZDoiL1thLXpdKiJ9XX1dLHJlbGV2YW5jZTowfSxnPVtyLGwsYix7Y2xhc3NOYW1lOiJyZWdleHAiLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLHRdLHZhcmlhbnRzOlt7YmVnaW46IiVyXFwoIixlbmQ6IlxcKSIsCmNvbnRhaW5zOmMoIlxcKCIsIlxcKSIpfSx7YmVnaW46IiVyXFxbIixlbmQ6IlxcXSIsY29udGFpbnM6YygiXFxbIiwiXFxdIil9LHsKYmVnaW46IiVyXFx7IixlbmQ6L1x9Lyxjb250YWluczpjKC9cey8sL1x9Lyl9LHtiZWdpbjoiJXI8IixlbmQ6Ij4iLApjb250YWluczpjKCI8IiwiPiIpfSx7YmVnaW46IiVyXFx8IixlbmQ6IlxcfCJ9XSxyZWxldmFuY2U6MH0sbyx7CmNsYXNzTmFtZToibWV0YSIsYmVnaW46IkBcXFsiLGVuZDoiXFxdIiwKY29udGFpbnM6W2UuaW5oZXJpdChlLlFVT1RFX1NUUklOR19NT0RFLHtjbGFzc05hbWU6Im1ldGEtc3RyaW5nIn0pXQp9LGUuSEFTSF9DT01NRU5UX01PREUse2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIG1vZHVsZSBzdHJ1Y3QiLAplbmQ6IiR8OyIsaWxsZWdhbDovPS8sY29udGFpbnM6W2UuSEFTSF9DT01NRU5UX01PREUsZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7CmJlZ2luOmF9KSx7YmVnaW46IjwifV19LHtjbGFzc05hbWU6ImNsYXNzIixiZWdpbktleXdvcmRzOiJsaWIgZW51bSB1bmlvbiIsCmVuZDoiJHw7IixpbGxlZ2FsOi89Lyxjb250YWluczpbZS5IQVNIX0NPTU1FTlRfTU9ERSxlLmluaGVyaXQoZS5USVRMRV9NT0RFLHsKYmVnaW46YX0pXSxyZWxldmFuY2U6MTB9LHtiZWdpbktleXdvcmRzOiJhbm5vdGF0aW9uIixlbmQ6IiR8OyIsaWxsZWdhbDovPS8sCmNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLGUuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOmF9KV0scmVsZXZhbmNlOjEwfSx7CmNsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImRlZiIsZW5kOi9cQlxiLywKY29udGFpbnM6W2UuaW5oZXJpdChlLlRJVExFX01PREUse2JlZ2luOmksZW5kc1BhcmVudDohMH0pXX0sewpjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbktleXdvcmRzOiJmdW4gbWFjcm8iLGVuZDovXEJcYi8sCmNvbnRhaW5zOltlLmluaGVyaXQoZS5USVRMRV9NT0RFLHtiZWdpbjppLGVuZHNQYXJlbnQ6ITB9KV0scmVsZXZhbmNlOjJ9LHsKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiKCF8XFw/KT86IixyZWxldmFuY2U6MH0sewpjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IjoiLGNvbnRhaW5zOltsLHtiZWdpbjppfV0scmVsZXZhbmNlOjB9LHsKY2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYjBiKFswMV9dKykiK259LHtiZWdpbjoiXFxiMG8oWzAtN19dKykiK24KfSx7YmVnaW46IlxcYjB4KFtBLUZhLWYwLTlfXSspIitufSx7CmJlZ2luOiJcXGIoWzEtOV1bMC05X10qWzAtOV18WzAtOV0pKFxcLlswLTldWzAtOV9dKik/KFtlRV1fP1stK10/WzAtOV9dKik/KF8/ZigzMnw2NCkpPyg/IV8pIgp9LHtiZWdpbjoiXFxiKFsxLTldWzAtOV9dKnwwKSIrbn1dLHJlbGV2YW5jZTowfV0KO3JldHVybiB0LmNvbnRhaW5zPWcsci5jb250YWlucz1nLnNsaWNlKDEpLHtuYW1lOiJDcnlzdGFsIixhbGlhc2VzOlsiY3IiXSwKa2V5d29yZHM6cyxjb250YWluczpnfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoIm1ha2VmaWxlIiwoKCk9PnsidXNlIHN0cmljdCI7cmV0dXJuIGU9Pntjb25zdCBpPXsKY2xhc3NOYW1lOiJ2YXJpYWJsZSIsdmFyaWFudHM6W3tiZWdpbjoiXFwkXFwoIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIlxcKSIsCmNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEVdfSx7YmVnaW46L1wkW0AlPD9cXlwrXCpdL31dfSxhPXtjbGFzc05hbWU6InN0cmluZyIsCmJlZ2luOi8iLyxlbmQ6LyIvLGNvbnRhaW5zOltlLkJBQ0tTTEFTSF9FU0NBUEUsaV19LG49e2NsYXNzTmFtZToidmFyaWFibGUiLApiZWdpbjovXCRcKFtcdy1dK1xzLyxlbmQ6L1wpLyxrZXl3b3Jkczp7CmJ1aWx0X2luOiJzdWJzdCBwYXRzdWJzdCBzdHJpcCBmaW5kc3RyaW5nIGZpbHRlciBmaWx0ZXItb3V0IHNvcnQgd29yZCB3b3JkbGlzdCBmaXJzdHdvcmQgbGFzdHdvcmQgZGlyIG5vdGRpciBzdWZmaXggYmFzZW5hbWUgYWRkc3VmZml4IGFkZHByZWZpeCBqb2luIHdpbGRjYXJkIHJlYWxwYXRoIGFic3BhdGggZXJyb3Igd2FybmluZyBzaGVsbCBvcmlnaW4gZmxhdm9yIGZvcmVhY2ggaWYgb3IgYW5kIGNhbGwgZXZhbCBmaWxlIHZhbHVlIgp9LGNvbnRhaW5zOltpXX0scz17YmVnaW46Il4iK2UuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKig/PVs6Kz9dPz0pIn0scj17CmNsYXNzTmFtZToic2VjdGlvbiIsYmVnaW46L15bXlxzXSs6LyxlbmQ6LyQvLGNvbnRhaW5zOltpXX07cmV0dXJuewpuYW1lOiJNYWtlZmlsZSIsYWxpYXNlczpbIm1rIiwibWFrIl0sa2V5d29yZHM6eyRwYXR0ZXJuOi9bXHctXSsvLAprZXl3b3JkOiJkZWZpbmUgZW5kZWYgdW5kZWZpbmUgaWZkZWYgaWZuZGVmIGlmZXEgaWZuZXEgZWxzZSBlbmRpZiBpbmNsdWRlIC1pbmNsdWRlIHNpbmNsdWRlIG92ZXJyaWRlIGV4cG9ydCB1bmV4cG9ydCBwcml2YXRlIHZwYXRoIgp9LGNvbnRhaW5zOltlLkhBU0hfQ09NTUVOVF9NT0RFLGksYSxuLHMse2NsYXNzTmFtZToibWV0YSIsYmVnaW46L15cLlBIT05ZOi8sCmVuZDovJC8sa2V5d29yZHM6eyRwYXR0ZXJuOi9bXC5cd10rLywibWV0YS1rZXl3b3JkIjoiLlBIT05ZIn19LHJdfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInBvd2Vyc2hlbGwiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IG49ewokcGF0dGVybjovLT9bQS16XC5cLV0rXGIvLAprZXl3b3JkOiJpZiBlbHNlIGZvcmVhY2ggcmV0dXJuIGRvIHdoaWxlIHVudGlsIGVsc2VpZiBiZWdpbiBmb3IgdHJhcCBkYXRhIGR5bmFtaWNwYXJhbSBlbmQgYnJlYWsgdGhyb3cgcGFyYW0gY29udGludWUgZmluYWxseSBpbiBzd2l0Y2ggZXhpdCBmaWx0ZXIgdHJ5IHByb2Nlc3MgY2F0Y2ggaGlkZGVuIHN0YXRpYyBwYXJhbWV0ZXIiLApidWlsdF9pbjoiYWMgYXNucCBjYXQgY2QgQ0ZTIGNoZGlyIGNsYyBjbGVhciBjbGh5IGNsaSBjbHAgY2xzIGNsdiBjbnNuIGNvbXBhcmUgY29weSBjcCBjcGkgY3BwIGN1cmwgY3ZwYSBkYnAgZGVsIGRpZmYgZGlyIGRuc24gZWJwIGVjaG98MCBlcGFsIGVwY3N2IGVwc24gZXJhc2UgZXRzbiBleHNuIGZjIGZoeCBmbCBmdCBmdyBnYWwgZ2JwIGdjIGdjYiBnY2kgZ2NtIGdjcyBnZHIgZ2VyciBnaHkgZ2kgZ2luIGdqYiBnbCBnbSBnbW8gZ3AgZ3BzIGdwdiBncm91cCBnc24gZ3NucCBnc3YgZ3R6IGd1IGd2IGd3bWkgaCBoaXN0b3J5IGljbSBpZXggaWh5IGlpIGlwYWwgaXBjc3YgaXBtbyBpcHNuIGlybSBpc2UgaXdtaSBpd3Iga2lsbCBscCBscyBtYW4gbWQgbWVhc3VyZSBtaSBtb3VudCBtb3ZlIG1wIG12IG5hbCBuZHIgbmkgbm1vIG5wc3NjIG5zbiBudiBvZ3Ygb2ggcG9wZCBwcyBwdXNoZCBwd2QgciByYnAgcmNqYiByY3NuIHJkIHJkciByZW4gcmkgcmpiIHJtIHJtZGlyIHJtbyBybmkgcm5wIHJwIHJzbiByc25wIHJ1amIgcnYgcnZwYSByd21pIHNhamIgc2FsIHNhcHMgc2FzdiBzYnAgc2Mgc2NiIHNlbGVjdCBzZXQgc2hjbSBzaSBzbCBzbGVlcCBzbHMgc29ydCBzcCBzcGpiIHNwcHMgc3BzdiBzdGFydCBzdHogc3VqYiBzdiBzd21pIHRlZSB0cmNtIHR5cGUgd2dldCB3aGVyZSB3amIgd3JpdGUiCn0scz17YmVnaW46ImBbXFxzXFxTXSIscmVsZXZhbmNlOjB9LGk9e2NsYXNzTmFtZToidmFyaWFibGUiLHZhcmlhbnRzOlt7CmJlZ2luOi9cJFxCL30se2NsYXNzTmFtZToia2V5d29yZCIsYmVnaW46L1wkdGhpcy99LHtiZWdpbjovXCRbXHdcZF1bXHdcZF86XSovfV0KfSxhPXtjbGFzc05hbWU6InN0cmluZyIsdmFyaWFudHM6W3tiZWdpbjovIi8sZW5kOi8iL30se2JlZ2luOi9AIi8sZW5kOi9eIkAvfV0sCmNvbnRhaW5zOltzLGkse2NsYXNzTmFtZToidmFyaWFibGUiLGJlZ2luOi9cJFtBLXpdLyxlbmQ6L1teQS16XS99XX0sdD17CmNsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8nLyxlbmQ6LycvfSx7YmVnaW46L0AnLyxlbmQ6L14nQC99XQp9LHI9ZS5pbmhlcml0KGUuQ09NTUVOVChudWxsLG51bGwpLHt2YXJpYW50czpbe2JlZ2luOi8jLyxlbmQ6LyQvfSx7YmVnaW46LzwjLywKZW5kOi8jPi99XSxjb250YWluczpbe2NsYXNzTmFtZToiZG9jdGFnIix2YXJpYW50czpbewpiZWdpbjovXC4oc3lub3BzaXN8ZGVzY3JpcHRpb258ZXhhbXBsZXxpbnB1dHN8b3V0cHV0c3xub3Rlc3xsaW5rfGNvbXBvbmVudHxyb2xlfGZ1bmN0aW9uYWxpdHkpLwp9LHsKYmVnaW46L1wuKHBhcmFtZXRlcnxmb3J3YXJkaGVscHRhcmdldG5hbWV8Zm9yd2FyZGhlbHBjYXRlZ29yeXxyZW1vdGVoZWxwcnVuc3BhY2V8ZXh0ZXJuYWxoZWxwKVxzK1xTKy8KfV19XX0pLGM9e2NsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImNsYXNzIGVudW0iLGVuZDovXHMqW3tdLywKZXhjbHVkZUVuZDohMCxyZWxldmFuY2U6MCxjb250YWluczpbZS5USVRMRV9NT0RFXX0sbD17Y2xhc3NOYW1lOiJmdW5jdGlvbiIsCmJlZ2luOi9mdW5jdGlvblxzKy8sZW5kOi9ccypce3wkLyxleGNsdWRlRW5kOiEwLHJldHVybkJlZ2luOiEwLHJlbGV2YW5jZTowLApjb250YWluczpbe2JlZ2luOiJmdW5jdGlvbiIscmVsZXZhbmNlOjAsY2xhc3NOYW1lOiJrZXl3b3JkIn0se2NsYXNzTmFtZToidGl0bGUiLApiZWdpbjovXHdbXHdcZF0qKCgtKVtcd1xkXSspKi8scmVsZXZhbmNlOjB9LHtiZWdpbjovXCgvLGVuZDovXCkvLApjbGFzc05hbWU6InBhcmFtcyIscmVsZXZhbmNlOjAsY29udGFpbnM6W2ldfV19LG89e2JlZ2luOi91c2luZ1xzLyxlbmQ6LyQvLApyZXR1cm5CZWdpbjohMCxjb250YWluczpbYSx0LHtjbGFzc05hbWU6ImtleXdvcmQiLApiZWdpbjovKHVzaW5nfGFzc2VtYmx5fGNvbW1hbmR8bW9kdWxlfG5hbWVzcGFjZXx0eXBlKS99XX0scD17CmNsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luOi9cWy4qXF1ccypbXHddK1sgXT8/XCgvLGVuZDovJC8scmV0dXJuQmVnaW46ITAsCnJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJrZXl3b3JkIiwKYmVnaW46IigiLmNvbmNhdChuLmtleXdvcmQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccy9nLCJ8IiksIilcXGIiKSxlbmRzUGFyZW50OiEwLApyZWxldmFuY2U6MH0sZS5pbmhlcml0KGUuVElUTEVfTU9ERSx7ZW5kc1BhcmVudDohMH0pXQp9LGc9W3AscixzLGUuTlVNQkVSX01PREUsYSx0LHtjbGFzc05hbWU6ImJ1aWx0X2luIix2YXJpYW50czpbewpiZWdpbjoiKEFkZHxDbGVhcnxDbG9zZXxDb3B5fEVudGVyfEV4aXR8RmluZHxGb3JtYXR8R2V0fEhpZGV8Sm9pbnxMb2NrfE1vdmV8TmV3fE9wZW58T3B0aW1pemV8UG9wfFB1c2h8UmVkb3xSZW1vdmV8UmVuYW1lfFJlc2V0fFJlc2l6ZXxTZWFyY2h8U2VsZWN0fFNldHxTaG93fFNraXB8U3BsaXR8U3RlcHxTd2l0Y2h8VW5kb3xVbmxvY2t8V2F0Y2h8QmFja3VwfENoZWNrcG9pbnR8Q29tcGFyZXxDb21wcmVzc3xDb252ZXJ0fENvbnZlcnRGcm9tfENvbnZlcnRUb3xEaXNtb3VudHxFZGl0fEV4cGFuZHxFeHBvcnR8R3JvdXB8SW1wb3J0fEluaXRpYWxpemV8TGltaXR8TWVyZ2V8T3V0fFB1Ymxpc2h8UmVzdG9yZXxTYXZlfFN5bmN8VW5wdWJsaXNofFVwZGF0ZXxBcHByb3ZlfEFzc2VydHxDb21wbGV0ZXxDb25maXJtfERlbnl8RGlzYWJsZXxFbmFibGV8SW5zdGFsbHxJbnZva2V8UmVnaXN0ZXJ8UmVxdWVzdHxSZXN0YXJ0fFJlc3VtZXxTdGFydHxTdG9wfFN1Ym1pdHxTdXNwZW5kfFVuaW5zdGFsbHxVbnJlZ2lzdGVyfFdhaXR8RGVidWd8TWVhc3VyZXxQaW5nfFJlcGFpcnxSZXNvbHZlfFRlc3R8VHJhY2V8Q29ubmVjdHxEaXNjb25uZWN0fFJlYWR8UmVjZWl2ZXxTZW5kfFdyaXRlfEJsb2NrfEdyYW50fFByb3RlY3R8UmV2b2tlfFVuYmxvY2t8VW5wcm90ZWN0fFVzZXxGb3JFYWNofFNvcnR8VGVlfFdoZXJlKSsoLSlbXFx3XFxkXSsiCn1dfSxpLHtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOi9cJChudWxsfHRydWV8ZmFsc2UpXGIvfSx7CmNsYXNzTmFtZToic2VsZWN0b3ItdGFnIixiZWdpbjovQFxCLyxyZWxldmFuY2U6MH1dLG09e2JlZ2luOi9cWy8sZW5kOi9cXS8sCmV4Y2x1ZGVCZWdpbjohMCxleGNsdWRlRW5kOiEwLHJlbGV2YW5jZTowLGNvbnRhaW5zOltdLmNvbmNhdCgic2VsZiIsZyx7CmJlZ2luOiIoc3RyaW5nfGNoYXJ8Ynl0ZXxpbnR8bG9uZ3xib29sfGRlY2ltYWx8c2luZ2xlfGRvdWJsZXxEYXRlVGltZXx4bWx8YXJyYXl8aGFzaHRhYmxlfHZvaWQpIiwKY2xhc3NOYW1lOiJidWlsdF9pbiIscmVsZXZhbmNlOjB9LHtjbGFzc05hbWU6InR5cGUiLGJlZ2luOi9bXC5cd1xkXSsvLApyZWxldmFuY2U6MH0pfTtyZXR1cm4gcC5jb250YWlucy51bnNoaWZ0KG0pLHtuYW1lOiJQb3dlclNoZWxsIiwKYWxpYXNlczpbInBzIiwicHMxIl0sY2FzZV9pbnNlbnNpdGl2ZTohMCxrZXl3b3JkczpuLGNvbnRhaW5zOmcuY29uY2F0KGMsbCxvLHsKdmFyaWFudHM6W3tjbGFzc05hbWU6Im9wZXJhdG9yIiwKYmVnaW46IigtYW5kfC1hc3wtYmFuZHwtYm5vdHwtYm9yfC1ieG9yfC1jYXNlc2Vuc2l0aXZlfC1jY29udGFpbnN8LWNlcXwtY2dlfC1jZ3R8LWNsZXwtY2xpa2V8LWNsdHwtY21hdGNofC1jbmV8LWNub3Rjb250YWluc3wtY25vdGxpa2V8LWNub3RtYXRjaHwtY29udGFpbnN8LWNyZXBsYWNlfC1jc3BsaXR8LWVxfC1leGFjdHwtZnwtZmlsZXwtZ2V8LWd0fC1pY29udGFpbnN8LWllcXwtaWdlfC1pZ3R8LWlsZXwtaWxpa2V8LWlsdHwtaW1hdGNofC1pbnwtaW5lfC1pbm90Y29udGFpbnN8LWlub3RsaWtlfC1pbm90bWF0Y2h8LWlyZXBsYWNlfC1pc3wtaXNub3R8LWlzcGxpdHwtam9pbnwtbGV8LWxpa2V8LWx0fC1tYXRjaHwtbmV8LW5vdHwtbm90Y29udGFpbnN8LW5vdGlufC1ub3RsaWtlfC1ub3RtYXRjaHwtb3J8LXJlZ2V4fC1yZXBsYWNlfC1zaGx8LXNocnwtc3BsaXR8LXdpbGRjYXJkfC14b3IpXFxiIgp9LHtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOi8oLSlbXHdcZF0rLyxyZWxldmFuY2U6MH1dfSxtKX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJ2aW0iLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+KHtuYW1lOiJWaW0gU2NyaXB0IiwKa2V5d29yZHM6eyRwYXR0ZXJuOi9bISNAXHddKy8sCmtleXdvcmQ6Ik58MCBQfDAgWHwwIGF8MCBhYiBhYmMgYWJvIGFsIGFtIGFufDAgYXIgYXJnYSBhcmdkIGFyZ2UgYXJnZG8gYXJnZyBhcmdsIGFyZ3UgYXMgYXUgYXVnIGF1biBifDAgYk4gYmEgYmFkIGJkIGJlIGJlbCBiZiBibCBibSBibiBibyBicCBiciBicmVhIGJyZWFrYSBicmVha2QgYnJlYWtsIGJybyBidWZkbyBidWZmZXJzIGJ1biBidyBjfDAgY04gY05mIGNhIGNhYmMgY2FkZGIgY2FkIGNhZGRmIGNhbCBjYXQgY2IgY2MgY2NsIGNkIGNlIGNleCBjZiBjZmlyIGNnZXRiIGNnZXRlIGNnIGNoYW5nZXMgY2hkIGNoZSBjaGVja3QgY2wgY2xhIGNsbyBjbSBjbWFwYyBjbWUgY24gY25ldyBjbmYgY25vIGNub3JlYSBjbm9yZW1lIGNvIGNvbCBjb2xvIGNvbSBjb21jIGNvbXAgY29uIGNvbmYgY29wZSBjcCBjcGYgY3EgY3IgY3MgY3N0IGN1IGN1bmEgY3VubWUgY3cgZGVsbSBkZWIgZGVidWdnIGRlbGMgZGVsZiBkaWYgZGlmZmcgZGlmZm8gZGlmZnAgZGlmZnB1IGRpZmZzIGRpZmZ0aGlzIGRpZyBkaSBkbCBkZWxsIGRqIGRsaSBkbyBkb2F1dG9hIGRwIGRyIGRzIGRzcCBlfDAgZWEgZWMgZWNob2UgZWNob2ggZWNob20gZWNob24gZWwgZWxzZWkgZW0gZW4gZW5kZm8gZW5kZiBlbmR0IGVuZHcgZW5lIGV4IGV4ZSBleGkgZXh1IGZ8MCBmaWxlcyBmaWxldCBmaW4gZmluYSBmaW5pIGZpciBmaXggZm8gZm9sZGMgZm9sZGQgZm9sZGRvYyBmb2xkbyBmb3IgZnUgZ28gZ3IgZ3JlcGEgZ3UgZ3YgaGEgaGVscGYgaGVscGcgaGVscHQgaGkgaGlkIGhpcyBpYSBpYWJjIGlmIGlqIGlsIGltIGltYXBjIGltZSBpbm8gaW5vcmVhIGlub3JlbWUgaW50IGlzIGlzcCBpdSBpdW5hIGl1bm1lIGp8MCBqdSBrfDAga2VlcGEga2VlIGtlZXBqIGxOIGxOZiBsfDAgbGFkIGxhZGRiIGxhZGRmIGxhIGxhbiBsYXQgbGIgbGMgbGNoIGxjbCBsY3MgbGUgbGVmdGEgbGV0IGxleCBsZiBsZmlyIGxnZXRiIGxnZXRlIGxnIGxnciBsZ3JlcGEgbGggbGwgbGxhIGxsaSBsbWFrIGxtIGxtYXBjIGxuZSBsbmV3IGxuZiBsbiBsb2FkayBsbyBsb2MgbG9ja3YgbG9sIGxvcGUgbHAgbHBmIGxyIGxzIGx0IGx1IGx1YSBsdWFkIGx1YWYgbHYgbHZpbWdyZXBhIGx3IG18MCBtYSBtYWsgbWFwIG1hcGMgbWFya3MgbWF0IG1lIG1lbnV0IG1lcyBtayBta3MgbWtzcCBta3YgbWt2aWUgbW9kIG16IG16ZiBuYmMgbmIgbmJzIG5ldyBubSBubWFwYyBubWUgbm4gbm5vcmVtZSBub2Egbm8gbm9oIG5vcmVhIG5vcmVtZSBub3JtIG51IG51biBudW5tZSBvbCBvfDAgb20gb21hcGMgb21lIG9uIG9ubyBvbm9yZW1lIG9wdCBvdSBvdW5tZSBvdyBwfDAgcHJvZmQgcHJvZiBwcm8gcHJvbXB0ciBwYyBwZWQgcGUgcGVybGQgcG8gcG9wdSBwcCBwcmUgcHJldiBwcyBwdCBwdE4gcHRmIHB0aiBwdGwgcHRuIHB0cCBwdHIgcHRzIHB1IHB3IHB5MyBweXRob24zIHB5M2QgcHkzZiBweSBweWQgcHlmIHF1aXRhIHFhIHJlYyByZWQgcmVkaSByZWRyIHJlZHJhd3MgcmVnIHJlcyByZXQgcmV0dSByZXcgcmkgcmlnaHRiIHJ1YiBydWJ5ZCBydWJ5ZiBydW5kIHJ1IHJ2IHNOIHNhbiBzYSBzYWwgc2F2IHNiIHNiTiBzYmEgc2JmIHNibCBzYm0gc2JuIHNicCBzYnIgc2NyaXAgc2NyaXB0ZSBzY3Mgc2Ugc2V0ZiBzZXRnIHNldGwgc2Ygc2ZpciBzaCBzaW0gc2lnIHNpbCBzbCBzbGEgc20gc21hcCBzbWFwYyBzbWUgc24gc25pIHNubyBzbm9yIHNub3JlbWUgc29yIHNvIHNwZWxsZCBzcGUgc3BlbGxpIHNwZWxsciBzcGVsbHUgc3BlbGx3IHNwIHNwciBzcmUgc3Qgc3RhIHN0YXJ0ZyBzdGFydHIgc3RhciBzdG9waSBzdGogc3RzIHN1biBzdW5tIHN1bm1lIHN1cyBzdiBzdyBzeSBzeW50aSBzeW5jIHROIHRhYk4gdGFiYyB0YWJkbyB0YWJlIHRhYmYgdGFiZmlyIHRhYmwgdGFibSB0YWJuZXcgdGFibiB0YWJvIHRhYnAgdGFiciB0YWJzIHRhYiB0YSB0YWdzIHRjIHRjbGQgdGNsZiB0ZSB0ZiB0aCB0aiB0bCB0bSB0biB0byB0cCB0ciB0cnkgdHMgdHUgdXwwIHVuZG9qIHVuZG9sIHVuYSB1bmggdW5sIHVubG8gdW5tIHVubWUgdW5zIHVwIHZlIHZlcmIgdmVydCB2aW0gdmltZ3JlcGEgdmkgdml1IHZpZSB2bSB2bWFwYyB2bWUgdm5lIHZuIHZub3JlbWUgdnMgdnUgdnVubWUgd2luZG8gd3wwIHdOIHdhIHdoIHdpIHdpbmMgd2lucCB3biB3cCB3cSB3cWEgd3Mgd3Ugd3YgeHwwIHhhIHhtYXBjIHhtIHhtZSB4biB4bm9yZW1lIHh1IHh1bm1lIHl8MCB6fDAgfiBOZXh0IFByaW50IGFwcGVuZCBhYmJyZXZpYXRlIGFiY2xlYXIgYWJvdmVsZWZ0IGFsbCBhbWVudSBhbm9yZW1lbnUgYXJncyBhcmdhZGQgYXJnZGVsZXRlIGFyZ2VkaXQgYXJnZ2xvYmFsIGFyZ2xvY2FsIGFyZ3VtZW50IGFzY2lpIGF1dG9jbWQgYXVncm91cCBhdW5tZW51IGJ1ZmZlciBiTmV4dCBiYWxsIGJhZGQgYmRlbGV0ZSBiZWhhdmUgYmVsb3dyaWdodCBiZmlyc3QgYmxhc3QgYm1vZGlmaWVkIGJuZXh0IGJvdHJpZ2h0IGJwcmV2aW91cyBicmV3aW5kIGJyZWFrIGJyZWFrYWRkIGJyZWFrZGVsIGJyZWFrbGlzdCBicm93c2UgYnVubG9hZCBid2lwZW91dCBjaGFuZ2UgY05leHQgY05maWxlIGNhYmJyZXYgY2FiY2xlYXIgY2FkZGJ1ZmZlciBjYWRkZXhwciBjYWRkZmlsZSBjYWxsIGNhdGNoIGNidWZmZXIgY2Nsb3NlIGNlbnRlciBjZXhwciBjZmlsZSBjZmlyc3QgY2dldGJ1ZmZlciBjZ2V0ZXhwciBjZ2V0ZmlsZSBjaGRpciBjaGVja3BhdGggY2hlY2t0aW1lIGNsaXN0IGNsYXN0IGNsb3NlIGNtYXAgY21hcGNsZWFyIGNtZW51IGNuZXh0IGNuZXdlciBjbmZpbGUgY25vcmVtYXAgY25vcmVhYmJyZXYgY25vcmVtZW51IGNvcHkgY29sZGVyIGNvbG9yc2NoZW1lIGNvbW1hbmQgY29tY2xlYXIgY29tcGlsZXIgY29udGludWUgY29uZmlybSBjb3BlbiBjcHJldmlvdXMgY3BmaWxlIGNxdWl0IGNyZXdpbmQgY3Njb3BlIGNzdGFnIGN1bm1hcCBjdW5hYmJyZXYgY3VubWVudSBjd2luZG93IGRlbGV0ZSBkZWxtYXJrcyBkZWJ1ZyBkZWJ1Z2dyZWVkeSBkZWxjb21tYW5kIGRlbGZ1bmN0aW9uIGRpZmZ1cGRhdGUgZGlmZmdldCBkaWZmb2ZmIGRpZmZwYXRjaCBkaWZmcHV0IGRpZmZzcGxpdCBkaWdyYXBocyBkaXNwbGF5IGRlbGV0ZWwgZGp1bXAgZGxpc3QgZG9hdXRvY21kIGRvYXV0b2FsbCBkZWxldGVwIGRyb3AgZHNlYXJjaCBkc3BsaXQgZWRpdCBlYXJsaWVyIGVjaG8gZWNob2VyciBlY2hvaGwgZWNob21zZyBlbHNlIGVsc2VpZiBlbWVudSBlbmRpZiBlbmRmb3IgZW5kZnVuY3Rpb24gZW5kdHJ5IGVuZHdoaWxlIGVuZXcgZXhlY3V0ZSBleGl0IGV4dXNhZ2UgZmlsZSBmaWxldHlwZSBmaW5kIGZpbmFsbHkgZmluaXNoIGZpcnN0IGZpeGRlbCBmb2xkIGZvbGRjbG9zZSBmb2xkZG9vcGVuIGZvbGRkb2Nsb3NlZCBmb2xkb3BlbiBmdW5jdGlvbiBnbG9iYWwgZ290byBncmVwIGdyZXBhZGQgZ3VpIGd2aW0gaGFyZGNvcHkgaGVscCBoZWxwZmluZCBoZWxwZ3JlcCBoZWxwdGFncyBoaWdobGlnaHQgaGlkZSBoaXN0b3J5IGluc2VydCBpYWJicmV2IGlhYmNsZWFyIGlqdW1wIGlsaXN0IGltYXAgaW1hcGNsZWFyIGltZW51IGlub3JlbWFwIGlub3JlYWJicmV2IGlub3JlbWVudSBpbnRybyBpc2VhcmNoIGlzcGxpdCBpdW5tYXAgaXVuYWJicmV2IGl1bm1lbnUgam9pbiBqdW1wcyBrZWVwYWx0IGtlZXBtYXJrcyBrZWVwanVtcHMgbE5leHQgbE5maWxlIGxpc3QgbGFkZGV4cHIgbGFkZGJ1ZmZlciBsYWRkZmlsZSBsYXN0IGxhbmd1YWdlIGxhdGVyIGxidWZmZXIgbGNkIGxjaGRpciBsY2xvc2UgbGNzY29wZSBsZWZ0IGxlZnRhYm92ZSBsZXhwciBsZmlsZSBsZmlyc3QgbGdldGJ1ZmZlciBsZ2V0ZXhwciBsZ2V0ZmlsZSBsZ3JlcCBsZ3JlcGFkZCBsaGVscGdyZXAgbGxhc3QgbGxpc3QgbG1ha2UgbG1hcCBsbWFwY2xlYXIgbG5leHQgbG5ld2VyIGxuZmlsZSBsbm9yZW1hcCBsb2Fka2V5bWFwIGxvYWR2aWV3IGxvY2ttYXJrcyBsb2NrdmFyIGxvbGRlciBsb3BlbiBscHJldmlvdXMgbHBmaWxlIGxyZXdpbmQgbHRhZyBsdW5tYXAgbHVhZG8gbHVhZmlsZSBsdmltZ3JlcCBsdmltZ3JlcGFkZCBsd2luZG93IG1vdmUgbWFyayBtYWtlIG1hcGNsZWFyIG1hdGNoIG1lbnUgbWVudXRyYW5zbGF0ZSBtZXNzYWdlcyBta2V4cmMgbWtzZXNzaW9uIG1rc3BlbGwgbWt2aW1yYyBta3ZpZXcgbW9kZSBtenNjaGVtZSBtemZpbGUgbmJjbG9zZSBuYmtleSBuYnNhcnQgbmV4dCBubWFwIG5tYXBjbGVhciBubWVudSBubm9yZW1hcCBubm9yZW1lbnUgbm9hdXRvY21kIG5vcmVtYXAgbm9obHNlYXJjaCBub3JlYWJicmV2IG5vcmVtZW51IG5vcm1hbCBudW1iZXIgbnVubWFwIG51bm1lbnUgb2xkZmlsZXMgb3BlbiBvbWFwIG9tYXBjbGVhciBvbWVudSBvbmx5IG9ub3JlbWFwIG9ub3JlbWVudSBvcHRpb25zIG91bm1hcCBvdW5tZW51IG93bnN5bnRheCBwcmludCBwcm9mZGVsIHByb2ZpbGUgcHJvbXB0ZmluZCBwcm9tcHRyZXBsIHBjbG9zZSBwZWRpdCBwZXJsIHBlcmxkbyBwb3AgcG9wdXAgcHBvcCBwcmVzZXJ2ZSBwcmV2aW91cyBwc2VhcmNoIHB0YWcgcHROZXh0IHB0Zmlyc3QgcHRqdW1wIHB0bGFzdCBwdG5leHQgcHRwcmV2aW91cyBwdHJld2luZCBwdHNlbGVjdCBwdXQgcHdkIHB5M2RvIHB5M2ZpbGUgcHl0aG9uIHB5ZG8gcHlmaWxlIHF1aXQgcXVpdGFsbCBxYWxsIHJlYWQgcmVjb3ZlciByZWRvIHJlZGlyIHJlZHJhdyByZWRyYXdzdGF0dXMgcmVnaXN0ZXJzIHJlc2l6ZSByZXRhYiByZXR1cm4gcmV3aW5kIHJpZ2h0IHJpZ2h0YmVsb3cgcnVieSBydWJ5ZG8gcnVieWZpbGUgcnVuZG8gcnVudGltZSBydmltaW5mbyBzdWJzdGl0dXRlIHNOZXh0IHNhbmRib3ggc2FyZ3VtZW50IHNhbGwgc2F2ZWFzIHNidWZmZXIgc2JOZXh0IHNiYWxsIHNiZmlyc3Qgc2JsYXN0IHNibW9kaWZpZWQgc2JuZXh0IHNicHJldmlvdXMgc2JyZXdpbmQgc2NyaXB0bmFtZXMgc2NyaXB0ZW5jb2Rpbmcgc2NzY29wZSBzZXQgc2V0ZmlsZXR5cGUgc2V0Z2xvYmFsIHNldGxvY2FsIHNmaW5kIHNmaXJzdCBzaGVsbCBzaW1hbHQgc2lnbiBzaWxlbnQgc2xlZXAgc2xhc3Qgc21hZ2ljIHNtYXBjbGVhciBzbWVudSBzbmV4dCBzbmlmZiBzbm9tYWdpYyBzbm9yZW1hcCBzbm9yZW1lbnUgc29ydCBzb3VyY2Ugc3BlbGxkdW1wIHNwZWxsZ29vZCBzcGVsbGluZm8gc3BlbGxyZXBhbGwgc3BlbGx1bmRvIHNwZWxsd3Jvbmcgc3BsaXQgc3ByZXZpb3VzIHNyZXdpbmQgc3RvcCBzdGFnIHN0YXJ0Z3JlcGxhY2Ugc3RhcnRyZXBsYWNlIHN0YXJ0aW5zZXJ0IHN0b3BpbnNlcnQgc3RqdW1wIHN0c2VsZWN0IHN1bmhpZGUgc3VubWFwIHN1bm1lbnUgc3VzcGVuZCBzdmlldyBzd2FwbmFtZSBzeW50YXggc3ludGltZSBzeW5jYmluZCB0TmV4dCB0YWJOZXh0IHRhYmNsb3NlIHRhYmVkaXQgdGFiZmluZCB0YWJmaXJzdCB0YWJsYXN0IHRhYm1vdmUgdGFibmV4dCB0YWJvbmx5IHRhYnByZXZpb3VzIHRhYnJld2luZCB0YWcgdGNsIHRjbGRvIHRjbGZpbGUgdGVhcm9mZiB0Zmlyc3QgdGhyb3cgdGp1bXAgdGxhc3QgdG1lbnUgdG5leHQgdG9wbGVmdCB0cHJldmlvdXMgdHJld2luZCB0c2VsZWN0IHR1bm1lbnUgdW5kbyB1bmRvam9pbiB1bmRvbGlzdCB1bmFiYnJldmlhdGUgdW5oaWRlIHVubGV0IHVubG9ja3ZhciB1bm1hcCB1bm1lbnUgdW5zaWxlbnQgdXBkYXRlIHZnbG9iYWwgdmVyc2lvbiB2ZXJib3NlIHZlcnRpY2FsIHZpbWdyZXAgdmltZ3JlcGFkZCB2aXN1YWwgdml1c2FnZSB2aWV3IHZtYXAgdm1hcGNsZWFyIHZtZW51IHZuZXcgdm5vcmVtYXAgdm5vcmVtZW51IHZzcGxpdCB2dW5tYXAgdnVubWVudSB3cml0ZSB3TmV4dCB3YWxsIHdoaWxlIHdpbnNpemUgd2luY21kIHdpbnBvcyB3bmV4dCB3cHJldmlvdXMgd3FhbGwgd3N2ZXJiIHd1bmRvIHd2aW1pbmZvIHhpdCB4YWxsIHhtYXBjbGVhciB4bWFwIHhtZW51IHhub3JlbWFwIHhub3JlbWVudSB4dW5tYXAgeHVubWVudSB5YW5rIiwKYnVpbHRfaW46InN5bklEdHJhbnMgYXRhbjIgcmFuZ2UgbWF0Y2hhcmcgZGlkX2ZpbGV0eXBlIGFzaW4gZmVlZGtleXMgeG9yIGFyZ3YgY29tcGxldGVfY2hlY2sgYWRkIGdldHdpbnBvc3ggZ2V0cWZsaXN0IGdldHdpbnBvc3kgc2NyZWVuY29sIGNsZWFybWF0Y2hlcyBlbXB0eSBleHRlbmQgZ2V0Y21kcG9zIG16ZXZhbCBnYXJiYWdlY29sbGVjdCBzZXRyZWcgY2VpbCBzcXJ0IGRpZmZfaGxJRCBpbnB1dHNlY3JldCBnZXQgZ2V0ZnBlcm0gZ2V0cGlkIGZpbGV3cml0YWJsZSBzaGlmdHdpZHRoIG1heCBzaW5oIGlzZGlyZWN0b3J5IHN5bklEIHN5c3RlbSBpbnB1dHJlc3RvcmUgd2lubGluZSBhdGFuIHZpc3VhbG1vZGUgaW5wdXRsaXN0IHRhYnBhZ2V3aW5uciByb3VuZCBnZXRyZWd0eXBlIG1hcGNoZWNrIGhhc21hcHRvIGhpc3RkZWwgYXJnaWR4IGZpbmRmaWxlIHNoYTI1NiBleGlzdHMgdG91cHBlciBnZXRjbWRsaW5lIHRhZ2xpc3Qgc3RyaW5nIGdldG1hdGNoZXMgYnVmbnIgc3RyZnRpbWUgd2lud2lkdGggYnVmZXhpc3RzIHN0cnRyYW5zIHRhYnBhZ2VidWZsaXN0IHNldGNtZHBvcyByZW1vdGVfcmVhZCBwcmludGYgc2V0bG9jbGlzdCBnZXRwb3MgZ2V0bGluZSBidWZ3aW5uciBmbG9hdDJuciBsZW4gZ2V0Y21kdHlwZSBkaWZmX2ZpbGxlciBsdWFldmFsIHJlc29sdmUgbGliY2FsbG5yIGZvbGRjbG9zZWRlbmQgcmV2ZXJzZSBmaWx0ZXIgaGFzX2tleSBidWZuYW1lIHN0cjJmbG9hdCBzdHJsZW4gc2V0bGluZSBnZXRjaGFybW9kIHNldGJ1ZnZhciBpbmRleCBzZWFyY2hwb3Mgc2hlbGxlc2NhcGUgdW5kb2ZpbGUgZm9sZGNsb3NlZCBzZXRxZmxpc3QgYnVmbGlzdGVkIHN0cmNoYXJzIHN0cjJuciB2aXJ0Y29sIGZsb29yIHJlbW92ZSB1bmRvdHJlZSByZW1vdGVfZXhwciB3aW5oZWlnaHQgZ2V0dGFid2ludmFyIHJlbHRpbWUgY3Vyc29yIHRhYnBhZ2VuciBmaW5kZGlyIGxvY2FsdGltZSBhY29zIGdldGxvY2xpc3Qgc2VhcmNoIHRhbmggbWF0Y2hlbmQgcmVuYW1lIGdldHRhYnZhciBzdHJkaXNwbGF5d2lkdGggdHlwZSBhYnMgcHkzZXZhbCBzZXR3aW52YXIgdG9sb3dlciB3aWxkbWVudW1vZGUgbG9nMTAgc3BlbGxzdWdnZXN0IGJ1ZmxvYWRlZCBzeW5jb25jZWFsZWQgbmV4dG5vbmJsYW5rIHNlcnZlcjJjbGllbnQgY29tcGxldGUgc2V0dGFid2ludmFyIGV4ZWN1dGFibGUgaW5wdXQgd2luY29sIHNldG1hdGNoZXMgZ2V0ZnR5cGUgaGxJRCBpbnB1dHNhdmUgc2VhcmNocGFpciBvciBzY3JlZW5yb3cgbGluZSBzZXR0YWJ2YXIgaGlzdGFkZCBkZWVwY29weSBzdHJwYXJ0IHJlbW90ZV9wZWVrIGFuZCBldmFsIGdldGZ0aW1lIHN1Ym1hdGNoIHNjcmVlbmNoYXIgd2luc2F2ZXZpZXcgbWF0Y2hhZGQgbWtkaXIgc2NyZWVuYXR0ciBnZXRmb250bmFtZSBsaWJjYWxsIHJlbHRpbWVzdHIgZ2V0ZnNpemUgd2lubnIgaW52ZXJ0IHBvdyBnZXRidWZsaW5lIGJ5dGUybGluZSBzb3VuZGZvbGQgcmVwZWF0IGZuYW1lZXNjYXBlIHRhZ2ZpbGVzIHNpbiBzdHJ3aWR0aCBzcGVsbGJhZHdvcmQgdHJ1bmMgbWFwYXJnIGxvZyBsaXNwaW5kZW50IGhvc3RuYW1lIHNldHBvcyBnbG9icGF0aCByZW1vdGVfZm9yZWdyb3VuZCBnZXRjaGFyIHN5bklEYXR0ciBmbmFtZW1vZGlmeSBjc2NvcGVfY29ubmVjdGlvbiBzdHJpZHggd2luYnVmbnIgaW5kZW50IG1pbiBjb21wbGV0ZV9hZGQgbnIyY2hhciBzZWFyY2hwYWlycG9zIGlucHV0ZGlhbG9nIHZhbHVlcyBtYXRjaGxpc3QgaXRlbXMgaGxleGlzdHMgc3RycmlkeCBicm93c2VkaXIgZXhwYW5kIGZtb2QgcGF0aHNob3J0ZW4gbGluZTJieXRlIGFyZ2MgY291bnQgZ2V0d2ludmFyIGdsb2IgZm9sZHRleHRyZXN1bHQgZ2V0cmVnIGZvcmVncm91bmQgY29zaCBtYXRjaGRlbGV0ZSBoYXMgY2hhcjJuciBzaW1wbGlmeSBoaXN0Z2V0IHNlYXJjaGRlY2wgaWNvbnYgd2lucmVzdGNtZCBwdW12aXNpYmxlIHdyaXRlZmlsZSBmb2xkbGV2ZWwgaGFzbG9jYWxkaXIga2V5cyBjb3MgbWF0Y2hzdHIgZm9sZHRleHQgaGlzdG5yIHRhbiB0ZW1wbmFtZSBnZXRjd2QgYnl0ZWlkeCBnZXRidWZ2YXIgaXNsb2NrZWQgZXNjYXBlIGV2ZW50aGFuZGxlciByZW1vdGVfc2VuZCBzZXJ2ZXJsaXN0IHdpbnJlc3R2aWV3IHN5bnN0YWNrIHB5ZXZhbCBwcmV2bm9uYmxhbmsgcmVhZGZpbGUgY2luZGVudCBmaWxlcmVhZGFibGUgY2hhbmdlbnIgZXhwIgp9LGlsbGVnYWw6LzsvLGNvbnRhaW5zOltlLk5VTUJFUl9NT0RFLHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IiciLGVuZDoiJyIsCmlsbGVnYWw6IlxcbiJ9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46LyIoXFwifFxuXFx8W14iXG5dKSoiLwp9LGUuQ09NTUVOVCgnIicsIiQiKSx7Y2xhc3NOYW1lOiJ2YXJpYWJsZSIsYmVnaW46L1tid3RnbHNhdl06W1x3XGRfXSovfSx7CmNsYXNzTmFtZToiZnVuY3Rpb24iLGJlZ2luS2V5d29yZHM6ImZ1bmN0aW9uIGZ1bmN0aW9uISIsZW5kOiIkIixyZWxldmFuY2U6MCwKY29udGFpbnM6W2UuVElUTEVfTU9ERSx7Y2xhc3NOYW1lOiJwYXJhbXMiLGJlZ2luOiJcXCgiLGVuZDoiXFwpIn1dfSx7CmNsYXNzTmFtZToic3ltYm9sIixiZWdpbjovPFtcdy1dKz4vfV19KX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiamF2YSIsKCgpPT57InVzZSBzdHJpY3QiCjt2YXIgZT0iXFwuKFswLTldKF8qWzAtOV0pKikiLG49IlswLTlhLWZBLUZdKF8qWzAtOWEtZkEtRl0pKiIsYT17CmNsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbewpiZWdpbjpgKFxcYihbMC05XShfKlswLTldKSopKCgke2V9KXxcXC4pP3woJHtlfSkpW2VFXVsrLV0/KFswLTldKF8qWzAtOV0pKilbZkZkRF0/XFxiYAp9LHtiZWdpbjpgXFxiKFswLTldKF8qWzAtOV0pKikoKCR7ZX0pW2ZGZERdP1xcYnxcXC4oW2ZGZERdXFxiKT8pYH0sewpiZWdpbjpgKCR7ZX0pW2ZGZERdP1xcYmB9LHtiZWdpbjoiXFxiKFswLTldKF8qWzAtOV0pKilbZkZkRF1cXGIifSx7CmJlZ2luOmBcXGIwW3hYXSgoJHtufSlcXC4/fCgke259KT9cXC4oJHtufSkpW3BQXVsrLV0/KFswLTldKF8qWzAtOV0pKilbZkZkRF0/XFxiYAp9LHtiZWdpbjoiXFxiKDB8WzEtOV0oXypbMC05XSkqKVtsTF0/XFxiIn0se2JlZ2luOmBcXGIwW3hYXSgke259KVtsTF0/XFxiYH0sewpiZWdpbjoiXFxiMChfKlswLTddKSpbbExdP1xcYiJ9LHtiZWdpbjoiXFxiMFtiQl1bMDFdKF8qWzAxXSkqW2xMXT9cXGIifV0sCnJlbGV2YW5jZTowfTtyZXR1cm4gZT0+ewp2YXIgbj0iZmFsc2Ugc3luY2hyb25pemVkIGludCBhYnN0cmFjdCBmbG9hdCBwcml2YXRlIGNoYXIgYm9vbGVhbiB2YXIgc3RhdGljIG51bGwgaWYgY29uc3QgZm9yIHRydWUgd2hpbGUgbG9uZyBzdHJpY3RmcCBmaW5hbGx5IHByb3RlY3RlZCBpbXBvcnQgbmF0aXZlIGZpbmFsIHZvaWQgZW51bSBlbHNlIGJyZWFrIHRyYW5zaWVudCBjYXRjaCBpbnN0YW5jZW9mIGJ5dGUgc3VwZXIgdm9sYXRpbGUgY2FzZSBhc3NlcnQgc2hvcnQgcGFja2FnZSBkZWZhdWx0IGRvdWJsZSBwdWJsaWMgdHJ5IHRoaXMgc3dpdGNoIGNvbnRpbnVlIHRocm93cyBwcm90ZWN0ZWQgcHVibGljIHByaXZhdGUgbW9kdWxlIHJlcXVpcmVzIGV4cG9ydHMgZG8iLHM9ewpjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJAW1x4YzAtXHUwMmI4YS16QS1aXyRdW1x4YzAtXHUwMmI4YS16QS1aXyQwLTldKiIsCmNvbnRhaW5zOlt7YmVnaW46L1woLyxlbmQ6L1wpLyxjb250YWluczpbInNlbGYiXX1dfTtjb25zdCByPWE7cmV0dXJuewpuYW1lOiJKYXZhIixhbGlhc2VzOlsianNwIl0sa2V5d29yZHM6bixpbGxlZ2FsOi88XC98Iy8sCmNvbnRhaW5zOltlLkNPTU1FTlQoIi9cXCpcXCoiLCJcXCovIix7cmVsZXZhbmNlOjAsY29udGFpbnM6W3tiZWdpbjovXHcrQC8sCnJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJkb2N0YWciLGJlZ2luOiJAW0EtWmEtel0rIn1dfSksewpiZWdpbjovaW1wb3J0IGphdmFcLlthLXpdK1wuLyxrZXl3b3JkczoiaW1wb3J0IixyZWxldmFuY2U6Mgp9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFLGUuQVBPU19TVFJJTkdfTU9ERSxlLlFVT1RFX1NUUklOR19NT0RFLHsKY2xhc3NOYW1lOiJjbGFzcyIsYmVnaW5LZXl3b3JkczoiY2xhc3MgaW50ZXJmYWNlIGVudW0iLGVuZDovW3s7PV0vLApleGNsdWRlRW5kOiEwLGtleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UgZW51bSIsaWxsZWdhbDovWzoiXFtcXV0vLGNvbnRhaW5zOlt7CmJlZ2luS2V5d29yZHM6ImV4dGVuZHMgaW1wbGVtZW50cyJ9LGUuVU5ERVJTQ09SRV9USVRMRV9NT0RFXX0sewpiZWdpbktleXdvcmRzOiJuZXcgdGhyb3cgcmV0dXJuIGVsc2UiLHJlbGV2YW5jZTowfSx7Y2xhc3NOYW1lOiJjbGFzcyIsCmJlZ2luOiJyZWNvcmRcXHMrIitlLlVOREVSU0NPUkVfSURFTlRfUkUrIlxccypcXCgiLHJldHVybkJlZ2luOiEwLGV4Y2x1ZGVFbmQ6ITAsCmVuZDovW3s7PV0vLGtleXdvcmRzOm4sY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJyZWNvcmQifSx7CmJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLywKa2V5d29yZHM6bixyZWxldmFuY2U6MCxjb250YWluczpbZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV0KfSxlLkNfTElORV9DT01NRU5UX01PREUsZS5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LHtjbGFzc05hbWU6ImZ1bmN0aW9uIiwKYmVnaW46IihbXHhjMC1cdTAyYjhhLXpBLVpfJF1bXHhjMC1cdTAyYjhhLXpBLVpfJDAtOV0qKDxbXHhjMC1cdTAyYjhhLXpBLVpfJF1bXHhjMC1cdTAyYjhhLXpBLVpfJDAtOV0qKFxccyosXFxzKltceGMwLVx1MDJiOGEtekEtWl8kXVtceGMwLVx1MDJiOGEtekEtWl8kMC05XSopKj4pP1xccyspKyIrZS5VTkRFUlNDT1JFX0lERU5UX1JFKyJcXHMqXFwoIiwKcmV0dXJuQmVnaW46ITAsZW5kOi9bezs9XS8sZXhjbHVkZUVuZDohMCxrZXl3b3JkczpuLGNvbnRhaW5zOlt7CmJlZ2luOmUuVU5ERVJTQ09SRV9JREVOVF9SRSsiXFxzKlxcKCIscmV0dXJuQmVnaW46ITAscmVsZXZhbmNlOjAsCmNvbnRhaW5zOltlLlVOREVSU0NPUkVfVElUTEVfTU9ERV19LHtjbGFzc05hbWU6InBhcmFtcyIsYmVnaW46L1woLyxlbmQ6L1wpLywKa2V5d29yZHM6bixyZWxldmFuY2U6MCwKY29udGFpbnM6W3MsZS5BUE9TX1NUUklOR19NT0RFLGUuUVVPVEVfU1RSSU5HX01PREUscixlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXQp9LGUuQ19MSU5FX0NPTU1FTlRfTU9ERSxlLkNfQkxPQ0tfQ09NTUVOVF9NT0RFXX0scixzXX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJlbG0iLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+e2NvbnN0IG49ewp2YXJpYW50czpbZS5DT01NRU5UKCItLSIsIiQiKSxlLkNPTU1FTlQoL1x7LS8sLy1cfS8se2NvbnRhaW5zOlsic2VsZiJdfSldfSxpPXsKY2xhc3NOYW1lOiJ0eXBlIixiZWdpbjoiXFxiW0EtWl1bXFx3J10qIixyZWxldmFuY2U6MH0scz17YmVnaW46IlxcKCIsZW5kOiJcXCkiLAppbGxlZ2FsOiciJyxjb250YWluczpbe2NsYXNzTmFtZToidHlwZSIsCmJlZ2luOiJcXGJbQS1aXVtcXHddKihcXCgoXFwuXFwufCx8XFx3KylcXCkpPyJ9LG5dfTtyZXR1cm57bmFtZToiRWxtIiwKa2V5d29yZHM6ImxldCBpbiBpZiB0aGVuIGVsc2UgY2FzZSBvZiB3aGVyZSBtb2R1bGUgaW1wb3J0IGV4cG9zaW5nIHR5cGUgYWxpYXMgYXMgaW5maXggaW5maXhsIGluZml4ciBwb3J0IGVmZmVjdCBjb21tYW5kIHN1YnNjcmlwdGlvbiIsCmNvbnRhaW5zOlt7YmVnaW5LZXl3b3JkczoicG9ydCBlZmZlY3QgbW9kdWxlIixlbmQ6ImV4cG9zaW5nIiwKa2V5d29yZHM6InBvcnQgZWZmZWN0IG1vZHVsZSB3aGVyZSBjb21tYW5kIHN1YnNjcmlwdGlvbiBleHBvc2luZyIsCmNvbnRhaW5zOltzLG5dLGlsbGVnYWw6IlxcV1xcLnw7In0se2JlZ2luOiJpbXBvcnQiLGVuZDoiJCIsCmtleXdvcmRzOiJpbXBvcnQgYXMgZXhwb3NpbmciLGNvbnRhaW5zOltzLG5dLGlsbGVnYWw6IlxcV1xcLnw7In0se2JlZ2luOiJ0eXBlIiwKZW5kOiIkIixrZXl3b3JkczoidHlwZSBhbGlhcyIsY29udGFpbnM6W2kscyx7YmVnaW46L1x7LyxlbmQ6L1x9LywKY29udGFpbnM6cy5jb250YWluc30sbl19LHtiZWdpbktleXdvcmRzOiJpbmZpeCBpbmZpeGwgaW5maXhyIixlbmQ6IiQiLApjb250YWluczpbZS5DX05VTUJFUl9NT0RFLG5dfSx7YmVnaW46InBvcnQiLGVuZDoiJCIsa2V5d29yZHM6InBvcnQiLGNvbnRhaW5zOltuXQp9LHtjbGFzc05hbWU6InN0cmluZyIsYmVnaW46IidcXFxcPy4iLGVuZDoiJyIsaWxsZWdhbDoiLiIKfSxlLlFVT1RFX1NUUklOR19NT0RFLGUuQ19OVU1CRVJfTU9ERSxpLGUuaW5oZXJpdChlLlRJVExFX01PREUsewpiZWdpbjoiXltfYS16XVtcXHcnXSoifSksbix7YmVnaW46Ii0+fDwtIn1dLGlsbGVnYWw6LzsvfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoInNjaGVtZSIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57CnZhciB0PSJbXlxcKFxcKVxcW1xcXVxce1xcfVwiLCdgOyN8XFxcXFxcc10rIixuPXskcGF0dGVybjp0LAoiYnVpbHRpbi1uYW1lIjoiY2FzZS1sYW1iZGEgY2FsbC9jYyBjbGFzcyBkZWZpbmUtY2xhc3MgZXhpdC1oYW5kbGVyIGZpZWxkIGltcG9ydCBpbmhlcml0IGluaXQtZmllbGQgaW50ZXJmYWNlIGxldCotdmFsdWVzIGxldC12YWx1ZXMgbGV0L2VjIG1peGluIG9wdC1sYW1iZGEgb3ZlcnJpZGUgcHJvdGVjdCBwcm92aWRlIHB1YmxpYyByZW5hbWUgcmVxdWlyZSByZXF1aXJlLWZvci1zeW50YXggc3ludGF4IHN5bnRheC1jYXNlIHN5bnRheC1lcnJvciB1bml0L3NpZyB1bmxlc3Mgd2hlbiB3aXRoLXN5bnRheCBhbmQgYmVnaW4gY2FsbC13aXRoLWN1cnJlbnQtY29udGludWF0aW9uIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYXNlIGNvbmQgZGVmaW5lIGRlZmluZS1zeW50YXggZGVsYXkgZG8gZHluYW1pYy13aW5kIGVsc2UgZm9yLWVhY2ggaWYgbGFtYmRhIGxldCBsZXQqIGxldC1zeW50YXggbGV0cmVjIGxldHJlYy1zeW50YXggbWFwIG9yIHN5bnRheC1ydWxlcyAnICogKyAsICxAIC0gLi4uIC8gOyA8IDw9ID0gPT4gPiA+PSBgIGFicyBhY29zIGFuZ2xlIGFwcGVuZCBhcHBseSBhc2luIGFzc29jIGFzc3EgYXNzdiBhdGFuIGJvb2xlYW4/IGNhYXIgY2FkciBjYWxsLXdpdGgtaW5wdXQtZmlsZSBjYWxsLXdpdGgtb3V0cHV0LWZpbGUgY2FsbC13aXRoLXZhbHVlcyBjYXIgY2RkZGFyIGNkZGRkciBjZHIgY2VpbGluZyBjaGFyLT5pbnRlZ2VyIGNoYXItYWxwaGFiZXRpYz8gY2hhci1jaTw9PyBjaGFyLWNpPD8gY2hhci1jaT0/IGNoYXItY2k+PT8gY2hhci1jaT4/IGNoYXItZG93bmNhc2UgY2hhci1sb3dlci1jYXNlPyBjaGFyLW51bWVyaWM/IGNoYXItcmVhZHk/IGNoYXItdXBjYXNlIGNoYXItdXBwZXItY2FzZT8gY2hhci13aGl0ZXNwYWNlPyBjaGFyPD0/IGNoYXI8PyBjaGFyPT8gY2hhcj49PyBjaGFyPj8gY2hhcj8gY2xvc2UtaW5wdXQtcG9ydCBjbG9zZS1vdXRwdXQtcG9ydCBjb21wbGV4PyBjb25zIGNvcyBjdXJyZW50LWlucHV0LXBvcnQgY3VycmVudC1vdXRwdXQtcG9ydCBkZW5vbWluYXRvciBkaXNwbGF5IGVvZi1vYmplY3Q/IGVxPyBlcXVhbD8gZXF2PyBldmFsIGV2ZW4/IGV4YWN0LT5pbmV4YWN0IGV4YWN0PyBleHAgZXhwdCBmbG9vciBmb3JjZSBnY2QgaW1hZy1wYXJ0IGluZXhhY3QtPmV4YWN0IGluZXhhY3Q/IGlucHV0LXBvcnQ/IGludGVnZXItPmNoYXIgaW50ZWdlcj8gaW50ZXJhY3Rpb24tZW52aXJvbm1lbnQgbGNtIGxlbmd0aCBsaXN0IGxpc3QtPnN0cmluZyBsaXN0LT52ZWN0b3IgbGlzdC1yZWYgbGlzdC10YWlsIGxpc3Q/IGxvYWQgbG9nIG1hZ25pdHVkZSBtYWtlLXBvbGFyIG1ha2UtcmVjdGFuZ3VsYXIgbWFrZS1zdHJpbmcgbWFrZS12ZWN0b3IgbWF4IG1lbWJlciBtZW1xIG1lbXYgbWluIG1vZHVsbyBuZWdhdGl2ZT8gbmV3bGluZSBub3QgbnVsbC1lbnZpcm9ubWVudCBudWxsPyBudW1iZXItPnN0cmluZyBudW1iZXI/IG51bWVyYXRvciBvZGQ/IG9wZW4taW5wdXQtZmlsZSBvcGVuLW91dHB1dC1maWxlIG91dHB1dC1wb3J0PyBwYWlyPyBwZWVrLWNoYXIgcG9ydD8gcG9zaXRpdmU/IHByb2NlZHVyZT8gcXVhc2lxdW90ZSBxdW90ZSBxdW90aWVudCByYXRpb25hbD8gcmF0aW9uYWxpemUgcmVhZCByZWFkLWNoYXIgcmVhbC1wYXJ0IHJlYWw/IHJlbWFpbmRlciByZXZlcnNlIHJvdW5kIHNjaGVtZS1yZXBvcnQtZW52aXJvbm1lbnQgc2V0ISBzZXQtY2FyISBzZXQtY2RyISBzaW4gc3FydCBzdHJpbmcgc3RyaW5nLT5saXN0IHN0cmluZy0+bnVtYmVyIHN0cmluZy0+c3ltYm9sIHN0cmluZy1hcHBlbmQgc3RyaW5nLWNpPD0/IHN0cmluZy1jaTw/IHN0cmluZy1jaT0/IHN0cmluZy1jaT49PyBzdHJpbmctY2k+PyBzdHJpbmctY29weSBzdHJpbmctZmlsbCEgc3RyaW5nLWxlbmd0aCBzdHJpbmctcmVmIHN0cmluZy1zZXQhIHN0cmluZzw9PyBzdHJpbmc8PyBzdHJpbmc9PyBzdHJpbmc+PT8gc3RyaW5nPj8gc3RyaW5nPyBzdWJzdHJpbmcgc3ltYm9sLT5zdHJpbmcgc3ltYm9sPyB0YW4gdHJhbnNjcmlwdC1vZmYgdHJhbnNjcmlwdC1vbiB0cnVuY2F0ZSB2YWx1ZXMgdmVjdG9yIHZlY3Rvci0+bGlzdCB2ZWN0b3ItZmlsbCEgdmVjdG9yLWxlbmd0aCB2ZWN0b3ItcmVmIHZlY3Rvci1zZXQhIHdpdGgtaW5wdXQtZnJvbS1maWxlIHdpdGgtb3V0cHV0LXRvLWZpbGUgd3JpdGUgd3JpdGUtY2hhciB6ZXJvPyIKfSxyPXtjbGFzc05hbWU6ImxpdGVyYWwiLGJlZ2luOiIoI3R8I2Z8I1xcXFwiK3QrInwjXFxcXC4pIn0sYT17CmNsYXNzTmFtZToibnVtYmVyIix2YXJpYW50czpbe2JlZ2luOiIoLXxcXCspP1xcZCsoWy4vXVxcZCspPyIscmVsZXZhbmNlOjB9LHsKYmVnaW46IigtfFxcKyk/XFxkKyhbLi9dXFxkKyk/WytcXC1dKC18XFwrKT9cXGQrKFsuL11cXGQrKT9pIixyZWxldmFuY2U6MH0sewpiZWdpbjoiI2JbMC0xXSsoL1swLTFdKyk/In0se2JlZ2luOiIjb1swLTddKygvWzAtN10rKT8ifSx7CmJlZ2luOiIjeFswLTlhLWZdKygvWzAtOWEtZl0rKT8ifV19LGk9ZS5RVU9URV9TVFJJTkdfTU9ERSxjPVtlLkNPTU1FTlQoIjsiLCIkIix7CnJlbGV2YW5jZTowfSksZS5DT01NRU5UKCIjXFx8IiwiXFx8IyIpXSxzPXtiZWdpbjp0LHJlbGV2YW5jZTowfSxsPXsKY2xhc3NOYW1lOiJzeW1ib2wiLGJlZ2luOiInIit0fSxvPXtlbmRzV2l0aFBhcmVudDohMCxyZWxldmFuY2U6MH0sZz17dmFyaWFudHM6W3sKYmVnaW46LycvfSx7YmVnaW46ImAifV0sY29udGFpbnM6W3tiZWdpbjoiXFwoIixlbmQ6IlxcKSIsCmNvbnRhaW5zOlsic2VsZiIscixpLGEscyxsXX1dfSx1PXtjbGFzc05hbWU6Im5hbWUiLHJlbGV2YW5jZTowLGJlZ2luOnQsCmtleXdvcmRzOm59LGQ9e3ZhcmlhbnRzOlt7YmVnaW46IlxcKCIsZW5kOiJcXCkifSx7YmVnaW46IlxcWyIsZW5kOiJcXF0ifV0sCmNvbnRhaW5zOlt7YmVnaW46L2xhbWJkYS8sZW5kc1dpdGhQYXJlbnQ6ITAscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W3UsewpiZWdpbjovXCgvLGVuZDovXCkvLGVuZHNQYXJlbnQ6ITAsY29udGFpbnM6W3NdfV19LHUsb119CjtyZXR1cm4gby5jb250YWlucz1bcixhLGkscyxsLGcsZF0uY29uY2F0KGMpLHtuYW1lOiJTY2hlbWUiLGlsbGVnYWw6L1xTLywKY29udGFpbnM6W2UuU0hFQkFORygpLGEsaSxsLGcsZF0uY29uY2F0KGMpfX19KSgpKTtobGpzLnJlZ2lzdGVyTGFuZ3VhZ2UoImNvZmZlZXNjcmlwdCIsKCgpPT57InVzZSBzdHJpY3QiCjtjb25zdCBlPVsiYXMiLCJpbiIsIm9mIiwiaWYiLCJmb3IiLCJ3aGlsZSIsImZpbmFsbHkiLCJ2YXIiLCJuZXciLCJmdW5jdGlvbiIsImRvIiwicmV0dXJuIiwidm9pZCIsImVsc2UiLCJicmVhayIsImNhdGNoIiwiaW5zdGFuY2VvZiIsIndpdGgiLCJ0aHJvdyIsImNhc2UiLCJkZWZhdWx0IiwidHJ5Iiwic3dpdGNoIiwiY29udGludWUiLCJ0eXBlb2YiLCJkZWxldGUiLCJsZXQiLCJ5aWVsZCIsImNvbnN0IiwiY2xhc3MiLCJkZWJ1Z2dlciIsImFzeW5jIiwiYXdhaXQiLCJzdGF0aWMiLCJpbXBvcnQiLCJmcm9tIiwiZXhwb3J0IiwiZXh0ZW5kcyJdLG49WyJ0cnVlIiwiZmFsc2UiLCJudWxsIiwidW5kZWZpbmVkIiwiTmFOIiwiSW5maW5pdHkiXSxhPVtdLmNvbmNhdChbInNldEludGVydmFsIiwic2V0VGltZW91dCIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJyZXF1aXJlIiwiZXhwb3J0cyIsImV2YWwiLCJpc0Zpbml0ZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwidW5lc2NhcGUiXSxbImFyZ3VtZW50cyIsInRoaXMiLCJzdXBlciIsImNvbnNvbGUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImxvY2FsU3RvcmFnZSIsIm1vZHVsZSIsImdsb2JhbCJdLFsiSW50bCIsIkRhdGFWaWV3IiwiTnVtYmVyIiwiTWF0aCIsIkRhdGUiLCJTdHJpbmciLCJSZWdFeHAiLCJPYmplY3QiLCJGdW5jdGlvbiIsIkJvb2xlYW4iLCJFcnJvciIsIlN5bWJvbCIsIlNldCIsIk1hcCIsIldlYWtTZXQiLCJXZWFrTWFwIiwiUHJveHkiLCJSZWZsZWN0IiwiSlNPTiIsIlByb21pc2UiLCJGbG9hdDY0QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIkFycmF5QnVmZmVyIl0sWyJFdmFsRXJyb3IiLCJJbnRlcm5hbEVycm9yIiwiUmFuZ2VFcnJvciIsIlJlZmVyZW5jZUVycm9yIiwiU3ludGF4RXJyb3IiLCJUeXBlRXJyb3IiLCJVUklFcnJvciJdKQo7cmV0dXJuIHI9Pntjb25zdCB0PXsKa2V5d29yZDplLmNvbmNhdChbInRoZW4iLCJ1bmxlc3MiLCJ1bnRpbCIsImxvb3AiLCJieSIsIndoZW4iLCJhbmQiLCJvciIsImlzIiwiaXNudCIsIm5vdCJdKS5maWx0ZXIoKGk9WyJ2YXIiLCJjb25zdCIsImxldCIsImZ1bmN0aW9uIiwic3RhdGljIl0sCmU9PiFpLmluY2x1ZGVzKGUpKSkuam9pbigiICIpLApsaXRlcmFsOm4uY29uY2F0KFsieWVzIiwibm8iLCJvbiIsIm9mZiJdKS5qb2luKCIgIiksCmJ1aWx0X2luOmEuY29uY2F0KFsibnBtIiwicHJpbnQiXSkuam9pbigiICIpfTt2YXIgaQo7Y29uc3Qgcz0iW0EtWmEteiRfXVswLTlBLVphLXokX10qIixvPXtjbGFzc05hbWU6InN1YnN0IixiZWdpbjovI1x7LyxlbmQ6L1x9LywKa2V5d29yZHM6dH0sYz1bci5CSU5BUllfTlVNQkVSX01PREUsci5pbmhlcml0KHIuQ19OVU1CRVJfTU9ERSx7c3RhcnRzOnsKZW5kOiIoXFxzKi8pPyIscmVsZXZhbmNlOjB9fSkse2NsYXNzTmFtZToic3RyaW5nIix2YXJpYW50czpbe2JlZ2luOi8nJycvLAplbmQ6LycnJy8sY29udGFpbnM6W3IuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjovJy8sZW5kOi8nLywKY29udGFpbnM6W3IuQkFDS1NMQVNIX0VTQ0FQRV19LHtiZWdpbjovIiIiLyxlbmQ6LyIiIi8sCmNvbnRhaW5zOltyLkJBQ0tTTEFTSF9FU0NBUEUsb119LHtiZWdpbjovIi8sZW5kOi8iLywKY29udGFpbnM6W3IuQkFDS1NMQVNIX0VTQ0FQRSxvXX1dfSx7Y2xhc3NOYW1lOiJyZWdleHAiLHZhcmlhbnRzOlt7YmVnaW46Ii8vLyIsCmVuZDoiLy8vIixjb250YWluczpbbyxyLkhBU0hfQ09NTUVOVF9NT0RFXX0se2JlZ2luOiIvL1tnaW1dezAsM30oPz1cXFcpIiwKcmVsZXZhbmNlOjB9LHtiZWdpbjovXC8oPyFbICpdKS4qPyg/IVtcXF0pLlwvW2dpbV17MCwzfSg/PVxXKS99XX0se2JlZ2luOiJAIitzCn0se3N1Ykxhbmd1YWdlOiJqYXZhc2NyaXB0IixleGNsdWRlQmVnaW46ITAsZXhjbHVkZUVuZDohMCx2YXJpYW50czpbewpiZWdpbjoiYGBgIixlbmQ6ImBgYCJ9LHtiZWdpbjoiYCIsZW5kOiJgIn1dfV07by5jb250YWlucz1jCjtjb25zdCBsPXIuaW5oZXJpdChyLlRJVExFX01PREUse2JlZ2luOnN9KSxkPSIoXFwoLipcXClcXHMqKT9cXEJbLT1dPiIsZz17CmNsYXNzTmFtZToicGFyYW1zIixiZWdpbjoiXFwoW15cXChdIixyZXR1cm5CZWdpbjohMCxjb250YWluczpbe2JlZ2luOi9cKC8sCmVuZDovXCkvLGtleXdvcmRzOnQsY29udGFpbnM6WyJzZWxmIl0uY29uY2F0KGMpfV19O3JldHVybntuYW1lOiJDb2ZmZWVTY3JpcHQiLAphbGlhc2VzOlsiY29mZmVlIiwiY3NvbiIsImljZWQiXSxrZXl3b3Jkczp0LGlsbGVnYWw6L1wvXCovLApjb250YWluczpjLmNvbmNhdChbci5DT01NRU5UKCIjIyMiLCIjIyMiKSxyLkhBU0hfQ09NTUVOVF9NT0RFLHsKY2xhc3NOYW1lOiJmdW5jdGlvbiIsYmVnaW46Il5cXHMqIitzKyJcXHMqPVxccyoiK2QsZW5kOiJbLT1dPiIscmV0dXJuQmVnaW46ITAsCmNvbnRhaW5zOltsLGddfSx7YmVnaW46L1s6XCgsPV1ccyovLHJlbGV2YW5jZTowLGNvbnRhaW5zOlt7Y2xhc3NOYW1lOiJmdW5jdGlvbiIsCmJlZ2luOmQsZW5kOiJbLT1dPiIscmV0dXJuQmVnaW46ITAsY29udGFpbnM6W2ddfV19LHtjbGFzc05hbWU6ImNsYXNzIiwKYmVnaW5LZXl3b3JkczoiY2xhc3MiLGVuZDoiJCIsaWxsZWdhbDovWzo9IlxbXF1dLyxjb250YWluczpbewpiZWdpbktleXdvcmRzOiJleHRlbmRzIixlbmRzV2l0aFBhcmVudDohMCxpbGxlZ2FsOi9bOj0iXFtcXV0vLGNvbnRhaW5zOltsXX0sbF0KfSx7YmVnaW46cysiOiIsZW5kOiI6IixyZXR1cm5CZWdpbjohMCxyZXR1cm5FbmQ6ITAscmVsZXZhbmNlOjB9XSl9fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiZGFydCIsKCgpPT57InVzZSBzdHJpY3QiO3JldHVybiBlPT57Y29uc3Qgbj17CmNsYXNzTmFtZToic3Vic3QiLHZhcmlhbnRzOlt7YmVnaW46IlxcJFtBLVphLXowLTlfXSsifV19LGE9e2NsYXNzTmFtZToic3Vic3QiLAp2YXJpYW50czpbe2JlZ2luOi9cJFx7LyxlbmQ6L1x9L31dLGtleXdvcmRzOiJ0cnVlIGZhbHNlIG51bGwgdGhpcyBpcyBuZXcgc3VwZXIiCn0sdD17Y2xhc3NOYW1lOiJzdHJpbmciLHZhcmlhbnRzOlt7YmVnaW46InInJyciLGVuZDoiJycnIn0se2JlZ2luOidyIiIiJywKZW5kOiciIiInfSx7YmVnaW46InInIixlbmQ6IiciLGlsbGVnYWw6IlxcbiJ9LHtiZWdpbjonciInLGVuZDonIicsaWxsZWdhbDoiXFxuIgp9LHtiZWdpbjoiJycnIixlbmQ6IicnJyIsY29udGFpbnM6W2UuQkFDS1NMQVNIX0VTQ0FQRSxuLGFdfSx7YmVnaW46JyIiIicsCmVuZDonIiIiJyxjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG4sYV19LHtiZWdpbjoiJyIsZW5kOiInIixpbGxlZ2FsOiJcXG4iLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG4sYV19LHtiZWdpbjonIicsZW5kOiciJyxpbGxlZ2FsOiJcXG4iLApjb250YWluczpbZS5CQUNLU0xBU0hfRVNDQVBFLG4sYV19XX07YS5jb250YWlucz1bZS5DX05VTUJFUl9NT0RFLHRdCjtjb25zdCBpPVsiQ29tcGFyYWJsZSIsIkRhdGVUaW1lIiwiRHVyYXRpb24iLCJGdW5jdGlvbiIsIkl0ZXJhYmxlIiwiSXRlcmF0b3IiLCJMaXN0IiwiTWFwIiwiTWF0Y2giLCJPYmplY3QiLCJQYXR0ZXJuIiwiUmVnRXhwIiwiU2V0IiwiU3RvcHdhdGNoIiwiU3RyaW5nIiwiU3RyaW5nQnVmZmVyIiwiU3RyaW5nU2luayIsIlN5bWJvbCIsIlR5cGUiLCJVcmkiLCJib29sIiwiZG91YmxlIiwiaW50IiwibnVtIiwiRWxlbWVudCIsIkVsZW1lbnRMaXN0Il0scj1pLm1hcCgoZT0+ZSsiPyIpKQo7cmV0dXJue25hbWU6IkRhcnQiLGtleXdvcmRzOnsKa2V5d29yZDoiYWJzdHJhY3QgYXMgYXNzZXJ0IGFzeW5jIGF3YWl0IGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY29uc3QgY29udGludWUgY292YXJpYW50IGRlZmF1bHQgZGVmZXJyZWQgZG8gZHluYW1pYyBlbHNlIGVudW0gZXhwb3J0IGV4dGVuZHMgZXh0ZW5zaW9uIGV4dGVybmFsIGZhY3RvcnkgZmFsc2UgZmluYWwgZmluYWxseSBmb3IgRnVuY3Rpb24gZ2V0IGhpZGUgaWYgaW1wbGVtZW50cyBpbXBvcnQgaW4gaW5mZXJmYWNlIGlzIGxhdGUgbGlicmFyeSBtaXhpbiBuZXcgbnVsbCBvbiBvcGVyYXRvciBwYXJ0IHJlcXVpcmVkIHJldGhyb3cgcmV0dXJuIHNldCBzaG93IHN0YXRpYyBzdXBlciBzd2l0Y2ggc3luYyB0aGlzIHRocm93IHRydWUgdHJ5IHR5cGVkZWYgdmFyIHZvaWQgd2hpbGUgd2l0aCB5aWVsZCIsCmJ1aWx0X2luOmkuY29uY2F0KHIpLmNvbmNhdChbIk5ldmVyIiwiTnVsbCIsImR5bmFtaWMiLCJwcmludCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJ3aW5kb3ciXSkuam9pbigiICIpLAokcGF0dGVybjovW0EtWmEtel1bQS1aYS16MC05X10qXD8/L30sY29udGFpbnM6W3QsZS5DT01NRU5UKCIvXFwqXFwqIiwiXFwqLyIsewpzdWJMYW5ndWFnZToibWFya2Rvd24iLHJlbGV2YW5jZTowfSksZS5DT01NRU5UKCIvLy8rXFxzKiIsIiQiLHtjb250YWluczpbewpzdWJMYW5ndWFnZToibWFya2Rvd24iLGJlZ2luOiIuIixlbmQ6IiQiLHJlbGV2YW5jZTowfV0KfSksZS5DX0xJTkVfQ09NTUVOVF9NT0RFLGUuQ19CTE9DS19DT01NRU5UX01PREUse2NsYXNzTmFtZToiY2xhc3MiLApiZWdpbktleXdvcmRzOiJjbGFzcyBpbnRlcmZhY2UiLGVuZDovXHsvLGV4Y2x1ZGVFbmQ6ITAsY29udGFpbnM6W3sKYmVnaW5LZXl3b3JkczoiZXh0ZW5kcyBpbXBsZW1lbnRzIn0sZS5VTkRFUlNDT1JFX1RJVExFX01PREVdfSxlLkNfTlVNQkVSX01PREUsewpjbGFzc05hbWU6Im1ldGEiLGJlZ2luOiJAW0EtWmEtel0rIn0se2JlZ2luOiI9PiJ9XX19fSkoKSk7aGxqcy5yZWdpc3Rlckxhbmd1YWdlKCJzbWFsbHRhbGsiLCgoKT0+eyJ1c2Ugc3RyaWN0IjtyZXR1cm4gZT0+ewpjb25zdCBuPSJbYS16XVthLXpBLVowLTlfXSoiLGE9e2NsYXNzTmFtZToic3RyaW5nIixiZWdpbjoiXFwkLnsxfSJ9LHM9ewpjbGFzc05hbWU6InN5bWJvbCIsYmVnaW46IiMiK2UuVU5ERVJTQ09SRV9JREVOVF9SRX07cmV0dXJue25hbWU6IlNtYWxsdGFsayIsCmFsaWFzZXM6WyJzdCJdLGtleXdvcmRzOiJzZWxmIHN1cGVyIG5pbCB0cnVlIGZhbHNlIHRoaXNDb250ZXh0IiwKY29udGFpbnM6W2UuQ09NTUVOVCgnIicsJyInKSxlLkFQT1NfU1RSSU5HX01PREUse2NsYXNzTmFtZToidHlwZSIsCmJlZ2luOiJcXGJbQS1aXVtBLVphLXowLTlfXSoiLHJlbGV2YW5jZTowfSx7YmVnaW46bisiOiIscmVsZXZhbmNlOjAKfSxlLkNfTlVNQkVSX01PREUscyxhLHtiZWdpbjoiXFx8WyBdKiIrbisiKFsgXSsiK24rIikqWyBdKlxcfCIscmV0dXJuQmVnaW46ITAsCmVuZDovXHwvLGlsbGVnYWw6L1xTLyxjb250YWluczpbe2JlZ2luOiIoXFx8WyBdKik/IitufV19LHtiZWdpbjoiI1xcKCIsCmVuZDoiXFwpIixjb250YWluczpbZS5BUE9TX1NUUklOR19NT0RFLGEsZS5DX05VTUJFUl9NT0RFLHNdfV19fX0pKCkpO2hsanMucmVnaXN0ZXJMYW5ndWFnZSgiYXJkdWlubyIsKCgpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoZSl7CnJldHVybigoLi4uZSk9PmUubWFwKChlPT4oZT0+ZT8ic3RyaW5nIj09dHlwZW9mIGU/ZTplLnNvdXJjZTpudWxsKShlKSkpLmpvaW4oIiIpKSgiKCIsZSwiKT8iKQp9cmV0dXJuIHQ9Pntjb25zdCByPWZ1bmN0aW9uKHQpe2NvbnN0IHI9KHQ9Pntjb25zdCByPXQuQ09NTUVOVCgiLy8iLCIkIix7CmNvbnRhaW5zOlt7YmVnaW46L1xcXG4vfV0KfSksbj0iW2EtekEtWl9dXFx3Kjo6IixpPSIoZGVjbHR5cGVcXChhdXRvXFwpfCIrZShuKSsiW2EtekEtWl9dXFx3KiIrZSgiPFtePD5dKz4iKSsiKSIsYT17CmNsYXNzTmFtZToia2V5d29yZCIsYmVnaW46IlxcYlthLXpcXGRfXSpfdFxcYiJ9LHM9e2NsYXNzTmFtZToic3RyaW5nIiwKdmFyaWFudHM6W3tiZWdpbjonKHU4P3xVfEwpPyInLGVuZDonIicsaWxsZWdhbDoiXFxuIiwKY29udGFpbnM6W3QuQkFDS1NMQVNIX0VTQ0FQRV19LHsKYmVnaW46Iih1OD98VXxMKT8nKFxcXFwoeFswLTlBLUZhLWZdezJ9fHVbMC05QS1GYS1mXXs0LDh9fFswLTddezN9fFxcUyl8LikiLAplbmQ6IiciLGlsbGVnYWw6Ii4ifSx0LkVORF9TQU1FX0FTX0JFR0lOKHsKYmVnaW46Lyg/OnU4P3xVfEwpP1IiKFteKClcXCBdezAsMTZ9KVwoLyxlbmQ6L1wpKFteKClcXCBdezAsMTZ9KSIvfSldfSxvPXsKY2xhc3NOYW1lOiJudW1iZXIiLHZhcmlhbnRzOlt7YmVnaW46IlxcYigwYlswMSddKykifSx7CmJlZ2luOiIoLT8pXFxiKFtcXGQnXSsoXFwuW1xcZCddKik/fFxcLltcXGQnXSspKHV8VXxsfEx8dWx8VUx8ZnxGfGJ8QikifSx7CmJlZ2luOiIoLT8pKFxcYjBbeFhdW2EtZkEtRjAtOSddK3woXFxiW1xcZCddKyhcXC5bXFxkJ10qKT98XFwuW1xcZCddKykoW2VFXVstK10/W1xcZCddKyk/KSIKfV0scmVsZXZhbmNlOjB9LGw9e2NsYXNzTmFtZToibWV0YSIsYmVnaW46LyNccypbYS16XStcYi8sZW5kOi8kLyxrZXl3b3Jkczp7CiJtZXRhLWtleXdvcmQiOiJpZiBlbHNlIGVsaWYgZW5kaWYgZGVmaW5lIHVuZGVmIHdhcm5pbmcgZXJyb3IgbGluZSBwcmFnbWEgX1ByYWdtYSBpZmRlZiBpZm5kZWYgaW5jbHVkZSIKfSxjb250YWluczpbe2JlZ2luOi9cXFxuLyxyZWxldmFuY2U6MH0sdC5pbmhlcml0KHMse2NsYXNzTmFtZToibWV0YS1zdHJpbmcifSksewpjbGFzc05hbWU6Im1ldGEtc3RyaW5nIixiZWdpbjovPC4qPz4vLGVuZDovJC8saWxsZWdhbDoiXFxuIgp9LHIsdC5DX0JMT0NLX0NPTU1FTlRfTU9ERV19LGM9e2NsYXNzTmFtZToidGl0bGUiLGJlZ2luOmUobikrdC5JREVOVF9SRSwKcmVsZXZhbmNlOjB9LGQ9ZShuKSt0LklERU5UX1JFKyJcXHMqXFwoIix1PXsKa2V5d29yZDoiaW50IGZsb2F0IHdoaWxlIHByaXZhdGUgY2hhciBjaGFyOF90IGNoYXIxNl90IGNoYXIzMl90IGNhdGNoIGltcG9ydCBtb2R1bGUgZXhwb3J0IHZpcnR1YWwgb3BlcmF0b3Igc2l6ZW9mIGR5bmFtaWNfY2FzdHwxMCB0eXBlZGVmIGNvbnN0X2Nhc3R8MTAgY29uc3QgZm9yIHN0YXRpY19jYXN0fDEwIHVuaW9uIG5hbWVzcGFjZSB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbCB0ZW1wbGF0ZSBtdXRhYmxlIGlmIHB1YmxpYyBmcmllbmQgZG8gZ290byBhdXRvIHZvaWQgZW51bSBlbHNlIGJyZWFrIGV4dGVybiB1c2luZyBhc20gY2FzZSB0eXBlaWQgd2NoYXJfdCBzaG9ydCByZWludGVycHJldF9jYXN0fDEwIGRlZmF1bHQgZG91YmxlIHJlZ2lzdGVyIGV4cGxpY2l0IHNpZ25lZCB0eXBlbmFtZSB0cnkgdGhpcyBzd2l0Y2ggY29udGludWUgaW5saW5lIGRlbGV0ZSBhbGlnbmFzIGFsaWdub2YgY29uc3RleHByIGNvbnN0ZXZhbCBjb25zdGluaXQgZGVjbHR5cGUgY29uY2VwdCBjb19hd2FpdCBjb19yZXR1cm4gY29feWllbGQgcmVxdWlyZXMgbm9leGNlcHQgc3RhdGljX2Fzc2VydCB0aHJlYWRfbG9jYWwgcmVzdHJpY3QgZmluYWwgb3ZlcnJpZGUgYXRvbWljX2Jvb2wgYXRvbWljX2NoYXIgYXRvbWljX3NjaGFyIGF0b21pY191Y2hhciBhdG9taWNfc2hvcnQgYXRvbWljX3VzaG9ydCBhdG9taWNfaW50IGF0b21pY191aW50IGF0b21pY19sb25nIGF0b21pY191bG9uZyBhdG9taWNfbGxvbmcgYXRvbWljX3VsbG9uZyBuZXcgdGhyb3cgcmV0dXJuIGFuZCBhbmRfZXEgYml0YW5kIGJpdG9yIGNvbXBsIG5vdCBub3RfZXEgb3Igb3JfZXEgeG9yIHhvcl9lcSIsCmJ1aWx0X2luOiJzdGQgc3RyaW5nIHdzdHJpbmcgY2luIGNvdXQgY2VyciBjbG9nIHN0ZGluIHN0ZG91dCBzdGRlcnIgc3RyaW5nc3RyZWFtIGlzdHJpbmdzdHJlYW0gb3N0cmluZ3N0cmVhbSBhdXRvX3B0ciBkZXF1ZSBsaXN0IHF1ZXVlIHN0YWNrIHZlY3RvciBtYXAgc2V0IHBhaXIgYml0c2V0IG11bHRpc2V0IG11bHRpbWFwIHVub3JkZXJlZF9zZXQgdW5vcmRlcmVkX21hcCB1bm9yZGVyZWRfbXVsdGlzZXQgdW5vcmRlcmVkX211bHRpbWFwIHByaW9yaXR5X3F1ZXVlIG1ha2VfcGFpciBhcnJheSBzaGFyZWRfcHRyIGFib3J0IHRlcm1pbmF0ZSBhYnMgYWNvcyBhc2luIGF0YW4yIGF0YW4gY2FsbG9jIGNlaWwgY29zaCBjb3MgZXhpdCBleHAgZmFicyBmbG9vciBmbW9kIGZwcmludGYgZnB1dHMgZnJlZSBmcmV4cCBmc2NhbmYgZnV0dXJlIGlzYWxudW0gaXNhbHBoYSBpc2NudHJsIGlzZGlnaXQgaXNncmFwaCBpc2xvd2VyIGlzcHJpbnQgaXNwdW5jdCBpc3NwYWNlIGlzdXBwZXIgaXN4ZGlnaXQgdG9sb3dlciB0b3VwcGVyIGxhYnMgbGRleHAgbG9nMTAgbG9nIG1hbGxvYyByZWFsbG9jIG1lbWNociBtZW1jbXAgbWVtY3B5IG1lbXNldCBtb2RmIHBvdyBwcmludGYgcHV0Y2hhciBwdXRzIHNjYW5mIHNpbmggc2luIHNucHJpbnRmIHNwcmludGYgc3FydCBzc2NhbmYgc3RyY2F0IHN0cmNociBzdHJjbXAgc3RyY3B5IHN0cmNzcG4gc3RybGVuIHN0cm5jYXQgc3RybmNtcCBzdHJuY3B5IHN0cnBicmsgc3RycmNociBzdHJzcG4gc3Ryc3RyIHRhbmggdGFuIHZmcHJpbnRmIHZwcmludGYgdnNwcmludGYgZW5kbCBpbml0aWFsaXplcl9saXN0IHVuaXF1ZV9wdHIgX0Jvb2wgY29tcGxleCBfQ29tcGxleCBpbWFnaW5hcnkgX0ltYWdpbmFyeSIsCmxpdGVyYWw6InRydWUgZmFsc2UgbnVsbHB0ciBOVUxMIn0sbT1bbCxhLHIsdC5DX0JMT0NLX0NPTU1FTlRfTU9ERSxvLHNdLHA9ewp2YXJpYW50czpbe2JlZ2luOi89LyxlbmQ6LzsvfSx7YmVnaW46L1woLyxlbmQ6L1wpL30sewpiZWdpbktleXdvcmRzOiJuZXcgdGhyb3cgcmV0dXJuIGVsc2UiLGVuZDovOy99XSxrZXl3b3Jkczp1LGNvbnRhaW5zOm0uY29uY2F0KFt7CmJlZ2luOi9cKC8sZW5kOi9cKS8sa2V5d29yZHM6dSxjb250YWluczptLmNvbmNhdChbInNlbGYiXSkscmVsZXZhbmNlOjB9XSksCnJlbGV2YW5jZTowfSxnPXtjbGFzc05hbWU6ImZ1bmN0aW9uIixiZWdpbjoiKCIraSsiW1xcKiZcXHNdKykrIitkLApyZXR1cm5CZWdpbjohMCxlbmQ6L1t7Oz1dLyxleGNsdWRlRW5kOiEwLGtleXdvcmRzOnUsaWxsZWdhbDovW15cd1xzXComOjw+XS8sCmNvbnRhaW5zOlt7YmVnaW46ImRlY2x0eXBlXFwoYXV0b1xcKSIsa2V5d29yZHM6dSxyZWxldmFuY2U6MH0se2JlZ2luOmQsCnJldHVybkJlZ2luOiEwLGNvbnRhaW5zOltjXSxyZWxldmFuY2U6MH0se2NsYXNzTmFtZToicGFyYW1zIixiZWdpbjovXCgvLAplbmQ6L1wpLyxrZXl3b3Jkczp1LHJlbGV2YW5jZTowLGNvbnRhaW5zOltyLHQuQ19CTE9DS19DT01NRU5UX01PREUscyxvLGEsewpiZWdpbjovXCgvLGVuZDovXCkvLGtleXdvcmRzOnUscmVsZXZhbmNlOjAsCmNvbnRhaW5zOlsic2VsZiIscix0LkNfQkxPQ0tfQ09NTUVOVF9NT0RFLHMsbyxhXX1dCn0sYSxyLHQuQ19CTE9DS19DT01NRU5UX01PREUsbF19O3JldHVybnsKYWxpYXNlczpbImMiLCJjYyIsImgiLCJjKysiLCJoKysiLCJocHAiLCJoaCIsImh4eCIsImN4eCJdLGtleXdvcmRzOnUsCmRpc2FibGVBdXRvZGV0ZWN0OiEwLGlsbGVnYWw6IjwvIixjb250YWluczpbXS5jb25jYXQocCxnLG0sW2wsewpiZWdpbjoiXFxiKGRlcXVlfGxpc3R8cXVldWV8cHJpb3JpdHlfcXVldWV8cGFpcnxzdGFja3x2ZWN0b3J8bWFwfHNldHxiaXRzZXR8bXVsdGlzZXR8bXVsdGltYXB8dW5vcmRlcmVkX21hcHx1bm9yZGVyZWRfc2V0fHVub3JkZXJlZF9tdWx0aXNldHx1bm9yZGVyZWRfbXVsdGltYXB8YXJyYXkpXFxzKjwiLAplbmQ6Ij4iLGtleXdvcmRzOnUsY29udGFpbnM6WyJzZWxmIixhXX0se2JlZ2luOnQuSURFTlRfUkUrIjo6IixrZXl3b3Jkczp1fSx7CmNsYXNzTmFtZToiY2xhc3MiLGJlZ2luS2V5d29yZHM6ImVudW0gY2xhc3Mgc3RydWN0IHVuaW9uIixlbmQ6L1t7Ozo8Pj1dLywKY29udGFpbnM6W3tiZWdpbktleXdvcmRzOiJmaW5hbCBjbGFzcyBzdHJ1Y3QifSx0LlRJVExFX01PREVdfV0pLGV4cG9ydHM6ewpwcmVwcm9jZXNzb3I6bCxzdHJpbmdzOnMsa2V5d29yZHM6dX19fSkodCkKO3JldHVybiByLmRpc2FibGVBdXRvZGV0ZWN0PSExLHIubmFtZT0iQysrIiwKci5hbGlhc2VzPVsiY2MiLCJjKysiLCJoKysiLCJocHAiLCJoaCIsImh4eCIsImN4eCJdLHJ9KHQpLG49ci5rZXl3b3Jkcwo7cmV0dXJuIG4ua2V5d29yZCs9IiBib29sZWFuIGJ5dGUgd29yZCBTdHJpbmciLApuLmxpdGVyYWwrPSIgRElHSVRBTF9NRVNTQUdFIEZJUk1BVEFfU1RSSU5HIEFOQUxPR19NRVNTQUdFIFJFUE9SVF9ESUdJVEFMIFJFUE9SVF9BTkFMT0cgSU5QVVRfUFVMTFVQIFNFVF9QSU5fTU9ERSBJTlRFUk5BTDJWNTYgU1lTVEVNX1JFU0VUIExFRF9CVUlMVElOIElOVEVSTkFMMVYxIFNZU0VYX1NUQVJUIElOVEVSTkFMIEVYVEVSTkFMIERFRkFVTFQgT1VUUFVUIElOUFVUIEhJR0ggTE9XIiwKbi5idWlsdF9pbis9IiBzZXR1cCBsb29wIEtleWJvYXJkQ29udHJvbGxlciBNb3VzZUNvbnRyb2xsZXIgU29mdHdhcmVTZXJpYWwgRXRoZXJuZXRTZXJ2ZXIgRXRoZXJuZXRDbGllbnQgTGlxdWlkQ3J5c3RhbCBSb2JvdENvbnRyb2wgR1NNVm9pY2VDYWxsIEV0aGVybmV0VURQIEVzcGxvcmFURlQgSHR0cENsaWVudCBSb2JvdE1vdG9yIFdpRmlDbGllbnQgR1NNU2Nhbm5lciBGaWxlU3lzdGVtIFNjaGVkdWxlciBHU01TZXJ2ZXIgWXVuQ2xpZW50IFl1blNlcnZlciBJUEFkZHJlc3MgR1NNQ2xpZW50IEdTTU1vZGVtIEtleWJvYXJkIEV0aGVybmV0IENvbnNvbGUgR1NNQmFuZCBFc3Bsb3JhIFN0ZXBwZXIgUHJvY2VzcyBXaUZpVURQIEdTTV9TTVMgTWFpbGJveCBVU0JIb3N0IEZpcm1hdGEgUEltYWdlIENsaWVudCBTZXJ2ZXIgR1NNUElOIEZpbGVJTyBCcmlkZ2UgU2VyaWFsIEVFUFJPTSBTdHJlYW0gTW91c2UgQXVkaW8gU2Vydm8gRmlsZSBUYXNrIEdQUlMgV2lGaSBXaXJlIFRGVCBHU00gU1BJIFNEIHJ1blNoZWxsQ29tbWFuZEFzeW5jaHJvbm91c2x5IGFuYWxvZ1dyaXRlUmVzb2x1dGlvbiByZXRyaWV2ZUNhbGxpbmdOdW1iZXIgcHJpbnRGaXJtd2FyZVZlcnNpb24gYW5hbG9nUmVhZFJlc29sdXRpb24gc2VuZERpZ2l0YWxQb3J0UGFpciBub0xpc3Rlbk9uTG9jYWxob3N0IHJlYWRKb3lzdGlja0J1dHRvbiBzZXRGaXJtd2FyZVZlcnNpb24gcmVhZEpveXN0aWNrU3dpdGNoIHNjcm9sbERpc3BsYXlSaWdodCBnZXRWb2ljZUNhbGxTdGF0dXMgc2Nyb2xsRGlzcGxheUxlZnQgd3JpdGVNaWNyb3NlY29uZHMgZGVsYXlNaWNyb3NlY29uZHMgYmVnaW5UcmFuc21pc3Npb24gZ2V0U2lnbmFsU3RyZW5ndGggcnVuQXN5bmNocm9ub3VzbHkgZ2V0QXN5bmNocm9ub3VzbHkgbGlzdGVuT25Mb2NhbGhvc3QgZ2V0Q3VycmVudENhcnJpZXIgcmVhZEFjY2VsZXJvbWV0ZXIgbWVzc2FnZUF2YWlsYWJsZSBzZW5kRGlnaXRhbFBvcnRzIGxpbmVGb2xsb3dDb25maWcgY291bnRyeU5hbWVXcml0ZSBydW5TaGVsbENvbW1hbmQgcmVhZFN0cmluZ1VudGlsIHJld2luZERpcmVjdG9yeSByZWFkVGVtcGVyYXR1cmUgc2V0Q2xvY2tEaXZpZGVyIHJlYWRMaWdodFNlbnNvciBlbmRUcmFuc21pc3Npb24gYW5hbG9nUmVmZXJlbmNlIGRldGFjaEludGVycnVwdCBjb3VudHJ5TmFtZVJlYWQgYXR0YWNoSW50ZXJydXB0IGVuY3J5cHRpb25UeXBlIHJlYWRCeXRlc1VudGlsIHJvYm90TmFtZVdyaXRlIHJlYWRNaWNyb3Bob25lIHJvYm90TmFtZVJlYWQgY2l0eU5hbWVXcml0ZSB1c2VyTmFtZVdyaXRlIHJlYWRKb3lzdGlja1kgcmVhZEpveXN0aWNrWCBtb3VzZVJlbGVhc2VkIG9wZW5OZXh0RmlsZSBzY2FuTmV0d29ya3Mgbm9JbnRlcnJ1cHRzIGRpZ2l0YWxXcml0ZSBiZWdpblNwZWFrZXIgbW91c2VQcmVzc2VkIGlzQWN0aW9uRG9uZSBtb3VzZURyYWdnZWQgZGlzcGxheUxvZ29zIG5vQXV0b3Njcm9sbCBhZGRQYXJhbWV0ZXIgcmVtb3RlTnVtYmVyIGdldE1vZGlmaWVycyBrZXlib2FyZFJlYWQgdXNlck5hbWVSZWFkIHdhaXRDb250aW51ZSBwcm9jZXNzSW5wdXQgcGFyc2VDb21tYW5kIHByaW50VmVyc2lvbiByZWFkTmV0d29ya3Mgd3JpdGVNZXNzYWdlIGJsaW5rVmVyc2lvbiBjaXR5TmFtZVJlYWQgcmVhZE1lc3NhZ2Ugc2V0RGF0YU1vZGUgcGFyc2VQYWNrZXQgaXNMaXN0ZW5pbmcgc2V0Qml0T3JkZXIgYmVnaW5QYWNrZXQgaXNEaXJlY3RvcnkgbW90b3JzV3JpdGUgZHJhd0NvbXBhc3MgZGlnaXRhbFJlYWQgY2xlYXJTY3JlZW4gc2VyaWFsRXZlbnQgcmlnaHRUb0xlZnQgc2V0VGV4dFNpemUgbGVmdFRvUmlnaHQgcmVxdWVzdEZyb20ga2V5UmVsZWFzZWQgY29tcGFzc1JlYWQgYW5hbG9nV3JpdGUgaW50ZXJydXB0cyBXaUZpU2VydmVyIGRpc2Nvbm5lY3QgcGxheU1lbG9keSBwYXJzZUZsb2F0IGF1dG9zY3JvbGwgZ2V0UElOVXNlZCBzZXRQSU5Vc2VkIHNldFRpbWVvdXQgc2VuZEFuYWxvZyByZWFkU2xpZGVyIGFuYWxvZ1JlYWQgYmVnaW5Xcml0ZSBjcmVhdGVDaGFyIG1vdG9yc1N0b3Aga2V5UHJlc3NlZCB0ZW1wb1dyaXRlIHJlYWRCdXR0b24gc3VibmV0TWFzayBkZWJ1Z1ByaW50IG1hY0FkZHJlc3Mgd3JpdGVHcmVlbiByYW5kb21TZWVkIGF0dGFjaEdQUlMgcmVhZFN0cmluZyBzZW5kU3RyaW5nIHJlbW90ZVBvcnQgcmVsZWFzZUFsbCBtb3VzZU1vdmVkIGJhY2tncm91bmQgZ2V0WENoYW5nZSBnZXRZQ2hhbmdlIGFuc3dlckNhbGwgZ2V0UmVzdWx0IHZvaWNlQ2FsbCBlbmRQYWNrZXQgY29uc3RyYWluIGdldFNvY2tldCB3cml0ZUpTT04gZ2V0QnV0dG9uIGF2YWlsYWJsZSBjb25uZWN0ZWQgZmluZFVudGlsIHJlYWRCeXRlcyBleGl0VmFsdWUgcmVhZEdyZWVuIHdyaXRlQmx1ZSBzdGFydExvb3AgSVBBZGRyZXNzIGlzUHJlc3NlZCBzZW5kU3lzZXggcGF1c2VNb2RlIGdhdGV3YXlJUCBzZXRDdXJzb3IgZ2V0T2VtS2V5IHR1bmVXcml0ZSBub0Rpc3BsYXkgbG9hZEltYWdlIHN3aXRjaFBJTiBvblJlcXVlc3Qgb25SZWNlaXZlIGNoYW5nZVBJTiBwbGF5RmlsZSBub0J1ZmZlciBwYXJzZUludCBvdmVyZmxvdyBjaGVja1BJTiBrbm9iUmVhZCBiZWdpblRGVCBiaXRDbGVhciB1cGRhdGVJUiBiaXRXcml0ZSBwb3NpdGlvbiB3cml0ZVJHQiBoaWdoQnl0ZSB3cml0ZVJlZCBzZXRTcGVlZCByZWFkQmx1ZSBub1N0cm9rZSByZW1vdGVJUCB0cmFuc2ZlciBzaHV0ZG93biBoYW5nQ2FsbCBiZWdpblNNUyBlbmRXcml0ZSBhdHRhY2hlZCBtYWludGFpbiBub0N1cnNvciBjaGVja1JlZyBjaGVja1BVSyBzaGlmdE91dCBpc1ZhbGlkIHNoaWZ0SW4gcHVsc2VJbiBjb25uZWN0IHByaW50bG4gbG9jYWxJUCBwaW5Nb2RlIGdldElNRUkgZGlzcGxheSBub0JsaW5rIHByb2Nlc3MgZ2V0QmFuZCBydW5uaW5nIGJlZ2luU0QgZHJhd0JNUCBsb3dCeXRlIHNldEJhbmQgcmVsZWFzZSBiaXRSZWFkIHByZXBhcmUgcG9pbnRUbyByZWFkUmVkIHNldE1vZGUgbm9GaWxsIHJlbW92ZSBsaXN0ZW4gc3Ryb2tlIGRldGFjaCBhdHRhY2ggbm9Ub25lIGV4aXN0cyBidWZmZXIgaGVpZ2h0IGJpdFNldCBjaXJjbGUgY29uZmlnIGN1cnNvciByYW5kb20gSVJyZWFkIHNldEROUyBlbmRTTVMgZ2V0S2V5IG1pY3JvcyBtaWxsaXMgYmVnaW4gcHJpbnQgd3JpdGUgcmVhZHkgZmx1c2ggd2lkdGggaXNQSU4gYmxpbmsgY2xlYXIgcHJlc3MgbWtkaXIgcm1kaXIgY2xvc2UgcG9pbnQgeWllbGQgaW1hZ2UgQlNTSUQgY2xpY2sgZGVsYXkgcmVhZCB0ZXh0IG1vdmUgcGVlayBiZWVwIHJlY3QgbGluZSBvcGVuIHNlZWsgZmlsbCBzaXplIHR1cm4gc3RvcCBob21lIGZpbmQgc3RlcCB0b25lIHNxcnQgUlNTSSBTU0lEIGVuZCBiaXQgdGFuIGNvcyBzaW4gcG93IG1hcCBhYnMgbWF4IG1pbiBnZXQgcnVuIHB1dCIsCnIubmFtZT0iQXJkdWlubyIsci5hbGlhc2VzPVsiaW5vIl0sci5zdXBlcnNldE9mPSJjcHAiLHJ9fSkoKSk7";
var hihglightjsInitBase64 =
"ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgncHJlIGNvZGUnKS5mb3JFYWNoKChibG9jaykgPT4gewogICAgaGxqcy5oaWdobGlnaHRCbG9jayhibG9jayk7Cn0pOw==";
var highlightCssBase64 =
"LyoKCkdydXZib3ggc3R5bGUgKGxpZ2h0KSAoYykgUGF2ZWwgUGVydHNldiAob3JpZ2luYWwgc3R5bGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL21vcmhldHovZ3J1dmJveCkKCiovCgouaGxqcyB7CiAgZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3cteDogYXV0bzsKICBwYWRkaW5nOiAwLjVlbTsKICBiYWNrZ3JvdW5kOiAjZmJmMWM3Owp9CgouaGxqcywKLmhsanMtc3Vic3QgewogIGNvbG9yOiAjM2MzODM2Owp9CgovKiBHcnV2Ym94IFJlZCAqLwouaGxqcy1kZWxldGlvbiwKLmhsanMtZm9ybXVsYSwKLmhsanMta2V5d29yZCwKLmhsanMtbGluaywKLmhsanMtc2VsZWN0b3ItdGFnIHsKICBjb2xvcjogIzlkMDAwNjsKfQoKLyogR3J1dmJveCBCbHVlICovCi5obGpzLWJ1aWx0X2luLAouaGxqcy1lbXBoYXNpcywKLmhsanMtbmFtZSwKLmhsanMtcXVvdGUsCi5obGpzLXN0cm9uZywKLmhsanMtdGl0bGUsCi5obGpzLXZhcmlhYmxlIHsKICBjb2xvcjogIzA3NjY3ODsKfQoKLyogR3J1dmJveCBZZWxsb3cgKi8KLmhsanMtYXR0ciwKLmhsanMtcGFyYW1zLAouaGxqcy10ZW1wbGF0ZS10YWcsCi5obGpzLXR5cGUgewogIGNvbG9yOiAjYjU3NjE0Owp9CgovKiBHcnV2Ym94IFB1cnBsZSAqLwouaGxqcy1idWlsdGluLW5hbWUsCi5obGpzLWRvY3RhZywKLmhsanMtbGl0ZXJhbCwKLmhsanMtbnVtYmVyIHsKICBjb2xvcjogIzhmM2Y3MTsKfQoKLyogR3J1dmJveCBPcmFuZ2UgKi8KLmhsanMtY29kZSwKLmhsanMtbWV0YSwKLmhsanMtcmVnZXhwLAouaGxqcy1zZWxlY3Rvci1pZCwKLmhsanMtdGVtcGxhdGUtdmFyaWFibGUgewogIGNvbG9yOiAjYWYzYTAzOwp9CgovKiBHcnV2Ym94IEdyZWVuICovCi5obGpzLWFkZGl0aW9uLAouaGxqcy1tZXRhLXN0cmluZywKLmhsanMtc2VjdGlvbiwKLmhsanMtc2VsZWN0b3ItYXR0ciwKLmhsanMtc2VsZWN0b3ItY2xhc3MsCi5obGpzLXN0cmluZywKLmhsanMtc3ltYm9sIHsKICBjb2xvcjogIzc5NzQwZTsKfQoKLyogR3J1dmJveCBBcXVhICovCi5obGpzLWF0dHJpYnV0ZSwKLmhsanMtYnVsbGV0LAouaGxqcy1jbGFzcywKLmhsanMtZnVuY3Rpb24sCi5obGpzLWZ1bmN0aW9uIC5obGpzLWtleXdvcmQsCi5obGpzLW1ldGEta2V5d29yZCwKLmhsanMtc2VsZWN0b3ItcHNldWRvLAouaGxqcy10YWcgewogIGNvbG9yOiAjNDI3YjU4Owp9CgovKiBHcnV2Ym94IEdyYXkgKi8KLmhsanMtY29tbWVudCB7CiAgY29sb3I6ICM5MjgzNzQ7Cn0KCi8qIEdydXZib3ggUHVycGxlICovCi5obGpzLWxpbmtfbGFiZWwsCi5obGpzLWxpdGVyYWwsCi5obGpzLW51bWJlciB7CiAgY29sb3I6ICM4ZjNmNzE7Cn0KCi5obGpzLWNvbW1lbnQsCi5obGpzLWVtcGhhc2lzIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5obGpzLXNlY3Rpb24sCi5obGpzLXN0cm9uZywKLmhsanMtdGFnIHsKICBmb250LXdlaWdodDogYm9sZDsKfQ==";
var Anki = /** @class */ (function () {
function Anki() {}
Anki.prototype.createModels = function (sourceSupport, codeHighlightSupport) {
return __awaiter(this, void 0, void 0, function () {
var models;
return __generator(this, function (_a) {
models = this.getModels(sourceSupport, false);
if (codeHighlightSupport) {
models = models.concat(this.getModels(sourceSupport, true));
}
return [2 /*return*/, this.invoke("multi", 6, { actions: models })];
});
});
};
Anki.prototype.createDeck = function (deckName) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.invoke("createDeck", 6, { deck: deckName })];
});
});
};
Anki.prototype.storeMediaFiles = function (cards) {
return __awaiter(this, void 0, void 0, function () {
var actions, cards_1, cards_1_1, card, _a, _b, media;
var e_1, _c, e_2, _d;
return __generator(this, function (_e) {
actions = [];
try {
for (
cards_1 = __values(cards), cards_1_1 = cards_1.next();
!cards_1_1.done;
cards_1_1 = cards_1.next()
) {
card = cards_1_1.value;
try {
for (
_a = ((e_2 = void 0), __values(card.getMedias())),
_b = _a.next();
!_b.done;
_b = _a.next()
) {
media = _b.value;
actions.push({
action: "storeMediaFile",
params: media,
});
}
} catch (e_2_1) {
e_2 = { error: e_2_1 };
} finally {
try {
if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
} finally {
if (e_2) throw e_2.error;
}
}
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (cards_1_1 && !cards_1_1.done && (_c = cards_1.return))
_c.call(cards_1);
} finally {
if (e_1) throw e_1.error;
}
}
if (actions) {
return [2 /*return*/, this.invoke("multi", 6, { actions: actions })];
} else {
return [2 /*return*/, {}];
}
});
});
};
Anki.prototype.storeCodeHighlightMedias = function () {
return __awaiter(this, void 0, void 0, function () {
var fileExists, highlightjs, highlightjsInit, highlightjcss;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [
4 /*yield*/,
this.invoke("retrieveMediaFile", 6, {
filename: "_highlightInit.js",
}),
];
case 1:
fileExists = _a.sent();
if (!fileExists) {
highlightjs = {
action: "storeMediaFile",
params: {
filename: "_highlight.js",
data: highlightjsBase64,
},
};
highlightjsInit = {
action: "storeMediaFile",
params: {
filename: "_highlightInit.js",
data: hihglightjsInitBase64,
},
};
highlightjcss = {
action: "storeMediaFile",
params: {
filename: "_highlight.css",
data: highlightCssBase64,
},
};
return [
2 /*return*/,
this.invoke("multi", 6, {
actions: [highlightjs, highlightjsInit, highlightjcss],
}),
];
}
return [2 /*return*/];
}
});
});
};
Anki.prototype.addCards = function (cards) {
return __awaiter(this, void 0, void 0, function () {
var notes;
return __generator(this, function (_a) {
notes = [];
cards.forEach(function (card) {
return notes.push(card.getCard(false));
});
return [
2 /*return*/,
this.invoke("addNotes", 6, {
notes: notes,
}),
];
});
});
};
/**
* Given the new cards with an optional deck name, it updates all the cards on Anki.
*
* Be aware of https://github.com/FooSoft/anki-connect/issues/82. If the Browse pane is opened on Anki,
* the update does not change all the cards.
* @param cards the new cards.
* @param deckName the new deck name.
*/
Anki.prototype.updateCards = function (cards) {
return __awaiter(this, void 0, void 0, function () {
var updateActions, ids, cards_2, cards_2_1, card;
var e_3, _a;
return __generator(this, function (_b) {
updateActions = [];
ids = [];
try {
for (
cards_2 = __values(cards), cards_2_1 = cards_2.next();
!cards_2_1.done;
cards_2_1 = cards_2.next()
) {
card = cards_2_1.value;
updateActions.push({
action: "updateNoteFields",
params: {
note: card.getCard(true),
},
});
updateActions = updateActions.concat(
this.mergeTags(card.oldTags, card.tags, card.id),
);
ids.push(card.id);
}
} catch (e_3_1) {
e_3 = { error: e_3_1 };
} finally {
try {
if (cards_2_1 && !cards_2_1.done && (_a = cards_2.return))
_a.call(cards_2);
} finally {
if (e_3) throw e_3.error;
}
}
// Update deck
updateActions.push({
action: "changeDeck",
params: {
cards: ids,
deck: cards[0].deckName,
},
});
return [
2 /*return*/,
this.invoke("multi", 6, { actions: updateActions }),
];
});
});
};
Anki.prototype.changeDeck = function (ids, deckName) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [
4 /*yield*/,
this.invoke("changeDeck", 6, { cards: ids, deck: deckName }),
];
case 1:
return [2 /*return*/, _a.sent()];
}
});
});
};
Anki.prototype.cardsInfo = function (ids) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, this.invoke("cardsInfo", 6, { cards: ids })];
case 1:
return [2 /*return*/, _a.sent()];
}
});
});
};
Anki.prototype.getCards = function (ids) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, this.invoke("notesInfo", 6, { notes: ids })];
case 1:
return [2 /*return*/, _a.sent()];
}
});
});
};
Anki.prototype.deleteCards = function (ids) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.invoke("deleteNotes", 6, { notes: ids })];
});
});
};
Anki.prototype.ping = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, this.invoke("version", 6)];
case 1:
return [2 /*return*/, _a.sent() === 6];
}
});
});
};
Anki.prototype.mergeTags = function (oldTags, newTags, cardId) {
var e_4, _a, e_5, _b;
var actions = [];
try {
// Find tags to Add
for (
var newTags_1 = __values(newTags), newTags_1_1 = newTags_1.next();
!newTags_1_1.done;
newTags_1_1 = newTags_1.next()
) {
var tag = newTags_1_1.value;
var index = oldTags.indexOf(tag);
if (index > -1) {
oldTags.splice(index, 1);
} else {
actions.push({
action: "addTags",
params: {
notes: [cardId],
tags: tag,
},
});
}
}
} catch (e_4_1) {
e_4 = { error: e_4_1 };
} finally {
try {
if (newTags_1_1 && !newTags_1_1.done && (_a = newTags_1.return))
_a.call(newTags_1);
} finally {
if (e_4) throw e_4.error;
}
}
try {
// All Tags to delete
for (
var oldTags_1 = __values(oldTags), oldTags_1_1 = oldTags_1.next();
!oldTags_1_1.done;
oldTags_1_1 = oldTags_1.next()
) {
var tag = oldTags_1_1.value;
actions.push({
action: "removeTags",
params: {
notes: [cardId],
tags: tag,
},
});
}
} catch (e_5_1) {
e_5 = { error: e_5_1 };
} finally {
try {
if (oldTags_1_1 && !oldTags_1_1.done && (_b = oldTags_1.return))
_b.call(oldTags_1);
} finally {
if (e_5) throw e_5.error;
}
}
return actions;
};
Anki.prototype.invoke = function (action, version, params) {
if (version === void 0) {
version = 6;
}
if (params === void 0) {
params = {};
}
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.addEventListener("error", function () {
return reject("failed to issue request");
});
xhr.addEventListener("load", function () {
try {
var response = JSON.parse(xhr.responseText);
if (Object.getOwnPropertyNames(response).length != 2) {
throw "response has an unexpected number of fields";
}
if (!Object.prototype.hasOwnProperty.call(response, "error")) {
throw "response is missing required error field";
}
if (!Object.prototype.hasOwnProperty.call(response, "result")) {
throw "response is missing required result field";
}
if (response.error) {
throw response.error;
}
resolve(response.result);
} catch (e) {
reject(e);
}
});
xhr.open("POST", "http://127.0.0.1:8765");
xhr.send(
JSON.stringify({ action: action, version: version, params: params }),
);
});
};
Anki.prototype.getModels = function (sourceSupport, codeHighlightSupport) {
var sourceFieldContent = "";
var codeScriptContent = "";
var sourceExtension = "";
var codeExtension = "";
if (sourceSupport) {
sourceFieldContent = "\r\n" + sourceField;
sourceExtension = sourceDeckExtension;
}
if (codeHighlightSupport) {
codeScriptContent = "\r\n" + codeScript + "\r\n";
codeExtension = codeDeckExtension;
}
var css =
'.card {\r\n font-family: arial;\r\n font-size: 20px;\r\n text-align: center;\r\n color: black;\r\n background-color: white;\r\n}\r\n\r\n.tag::before {\r\n\tcontent: "#";\r\n}\r\n\r\n.tag {\r\n color: white;\r\n background-color: #9F2BFF;\r\n border: none;\r\n font-size: 11px;\r\n font-weight: bold;\r\n padding: 1px 8px;\r\n margin: 0px 3px;\r\n text-align: center;\r\n text-decoration: none;\r\n cursor: pointer;\r\n border-radius: 14px;\r\n display: inline;\r\n vertical-align: middle;\r\n}\r\n .cloze { font-weight: bold; color: blue;}.nightMode .cloze { color: lightblue;}';
var front =
"{{Front}}\r\n<p class=\"tags\">{{Tags}}</p>\r\n\r\n<script>\r\n var tagEl = document.querySelector('.tags');\r\n var tags = tagEl.innerHTML.split(' ');\r\n var html = '';\r\n tags.forEach(function(tag) {\r\n\tif (tag) {\r\n\t var newTag = '<span class=\"tag\">' + tag + '</span>';\r\n html += newTag;\r\n \t tagEl.innerHTML = html;\r\n\t}\r\n });\r\n \r\n</script>".concat(
codeScriptContent,
);
var back = "{{FrontSide}}\n\n<hr id=answer>\n\n{{Back}}".concat(
sourceFieldContent,
);
var frontReversed =
"{{Back}}\r\n<p class=\"tags\">{{Tags}}</p>\r\n\r\n<script>\r\n var tagEl = document.querySelector('.tags');\r\n var tags = tagEl.innerHTML.split(' ');\r\n var html = '';\r\n tags.forEach(function(tag) {\r\n\tif (tag) {\r\n\t var newTag = '<span class=\"tag\">' + tag + '</span>';\r\n html += newTag;\r\n \t tagEl.innerHTML = html;\r\n\t}\r\n });\r\n \r\n</script>".concat(
codeScriptContent,
);
var backReversed = "{{FrontSide}}\n\n<hr id=answer>\n\n{{Front}}".concat(
sourceFieldContent,
);
var prompt =
"{{Prompt}}\r\n<p class=\"tags\">\uD83E\uDDE0spaced {{Tags}}</p>\r\n\r\n<script>\r\n var tagEl = document.querySelector('.tags');\r\n var tags = tagEl.innerHTML.split(' ');\r\n var html = '';\r\n tags.forEach(function(tag) {\r\n\tif (tag) {\r\n\t var newTag = '<span class=\"tag\">' + tag + '</span>';\r\n html += newTag;\r\n \t tagEl.innerHTML = html;\r\n\t}\r\n });\r\n \r\n</script>".concat(
codeScriptContent,
);
var promptBack =
"{{FrontSide}}\n\n<hr id=answer>\uD83E\uDDE0 Review done.".concat(
sourceFieldContent,
);
var clozeFront =
"{{cloze:Text}}\n\n<script>\r\n var tagEl = document.querySelector('.tags');\r\n var tags = tagEl.innerHTML.split(' ');\r\n var html = '';\r\n tags.forEach(function(tag) {\r\n\tif (tag) {\r\n\t var newTag = '<span class=\"tag\">' + tag + '</span>';\r\n html += newTag;\r\n \t tagEl.innerHTML = html;\r\n\t}\r\n });\r\n \r\n</script>".concat(
codeScriptContent,
);
var clozeBack = "{{cloze:Text}}\n\n<br>{{Extra}}"
.concat(
sourceFieldContent,
"<script>\r\n var tagEl = document.querySelector('.tags');\r\n var tags = tagEl.innerHTML.split(' ');\r\n var html = '';\r\n tags.forEach(function(tag) {\r\n\tif (tag) {\r\n\t var newTag = '<span class=\"tag\">' + tag + '</span>';\r\n html += newTag;\r\n \t tagEl.innerHTML = html;\r\n\t}\r\n });\r\n \r\n</script>",
)
.concat(codeScriptContent);
var classicFields = ["Front", "Back"];
var promptFields = ["Prompt"];
var clozeFields = ["Text", "Extra"];
if (sourceSupport) {
classicFields = classicFields.concat("Source");
promptFields = promptFields.concat("Source");
clozeFields = clozeFields.concat("Source");
}
var obsidianBasic = {
action: "createModel",
params: {
modelName: "Obsidian-basic"
.concat(sourceExtension)
.concat(codeExtension),
inOrderFields: classicFields,
css: css,
cardTemplates: [
{
Name: "Front / Back",
Front: front,
Back: back,
},
],
},
};
var obsidianBasicReversed = {
action: "createModel",
params: {
modelName: "Obsidian-basic-reversed"
.concat(sourceExtension)
.concat(codeExtension),
inOrderFields: classicFields,
css: css,
cardTemplates: [
{
Name: "Front / Back",
Front: front,
Back: back,
},
{
Name: "Back / Front",
Front: frontReversed,
Back: backReversed,
},
],
},
};
var obsidianCloze = {
action: "createModel",
params: {
modelName: "Obsidian-cloze"
.concat(sourceExtension)
.concat(codeExtension),
inOrderFields: clozeFields,
css: css,
isCloze: true,
cardTemplates: [
{
Name: "Cloze",
Front: clozeFront,
Back: clozeBack,
},
],
},
};
var obsidianSpaced = {
action: "createModel",
params: {
modelName: "Obsidian-spaced"
.concat(sourceExtension)
.concat(codeExtension),
inOrderFields: promptFields,
css: css,
cardTemplates: [
{
Name: "Spaced",
Front: prompt,
Back: promptBack,
},
],
},
};
return [
obsidianBasic,
obsidianBasicReversed,
obsidianCloze,
obsidianSpaced,
];
};
Anki.prototype.requestPermission = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.invoke("requestPermission", 6)];
});
});
};
return Anki;
})();
function arrayBufferToBase64(buffer) {
var binary = "";
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return window.btoa(binary);
}
function arraysEqual(a, b) {
if (a === b) return true;
if (a == null || b == null) return false;
if (a.length !== b.length) return false;
a.sort();
b.sort();
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}
function escapeMarkdown(string, skips) {
if (skips === void 0) {
skips = [];
}
var replacements = [
// [/\*/g, "\\*", "asterisks"],
[/#/g, "#", "number signs"],
// [/\//g, "\\/", "slashes"],
[/\\/g, "\\\\", "backslash"],
[/\(/g, "\\(", "parentheses"],
[/\)/g, "\\)", "parentheses"],
[/\[/g, "\\[", "square brackets"],
[/\]/g, "\\]", "square brackets"],
[/</g, "&lt;", "angle brackets"],
[/>/g, "&gt;", "angle brackets"],
[/_/g, "\\_", "underscores"],
];
return replacements.reduce(function (s, replacement) {
var name = replacement[2];
return name && skips.indexOf(name) !== -1
? s
: s.replace(replacement[0], replacement[1]);
}, string);
}
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}
var SettingsTab = /** @class */ (function (_super) {
__extends(SettingsTab, _super);
function SettingsTab() {
return (_super !== null && _super.apply(this, arguments)) || this;
}
SettingsTab.prototype.display = function () {
var containerEl = this.containerEl;
var plugin = this.plugin;
containerEl.empty();
containerEl.createEl("h1", { text: "Flashcards - Settings" });
var description = createFragment();
description.append(
"This needs to be done only one time. Open Anki and click the button to grant permission.",
createEl("br"),
"Be aware that AnkiConnect must be installed.",
);
new obsidian.Setting(containerEl)
.setName("Give Permission")
.setDesc(description)
.addButton(function (button) {
button.setButtonText("Grant Permission").onClick(function () {
new Anki()
.requestPermission()
.then(function (result) {
if (result.permission === "granted") {
plugin.settings.ankiConnectPermission = true;
plugin.saveData(plugin.settings);
new obsidian.Notice("Anki Connect permission granted");
} else {
new obsidian.Notice("AnkiConnect permission not granted");
}
})
.catch(function (error) {
new obsidian.Notice("Something went wrong, is Anki open?");
console.error(error);
});
});
});
new obsidian.Setting(containerEl)
.setName("Test Anki")
.setDesc("Test that connection between Anki and Obsidian actually works.")
.addButton(function (text) {
text.setButtonText("Test").onClick(function () {
new Anki()
.ping()
.then(function () {
return new obsidian.Notice("Anki works");
})
.catch(function () {
return new obsidian.Notice("Anki is not connected");
});
});
});
containerEl.createEl("h2", { text: "General" });
new obsidian.Setting(containerEl)
.setName("Context-aware mode")
.setDesc("Add the ancestor headings to the question of the flashcard.")
.addToggle(function (toggle) {
return toggle
.setValue(plugin.settings.contextAwareMode)
.onChange(function (value) {
plugin.settings.contextAwareMode = value;
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Source support")
.setDesc(
"Add to every card the source, i.e. the link to the original card. NOTE: Old cards made without source support cannot be updated.",
)
.addToggle(function (toggle) {
return toggle
.setValue(plugin.settings.sourceSupport)
.onChange(function (value) {
plugin.settings.sourceSupport = value;
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Code highlight support")
.setDesc("Add highlight of the code in Anki.")
.addToggle(function (toggle) {
return toggle
.setValue(plugin.settings.codeHighlightSupport)
.onChange(function (value) {
plugin.settings.codeHighlightSupport = value;
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Inline ID support")
.setDesc("Add ID to end of line for inline cards.")
.addToggle(function (toggle) {
return toggle
.setValue(plugin.settings.inlineID)
.onChange(function (value) {
plugin.settings.inlineID = value;
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Folder-based deck name")
.setDesc("Add ID to end of line for inline cards.")
.addToggle(function (toggle) {
return toggle
.setValue(plugin.settings.folderBasedDeck)
.onChange(function (value) {
plugin.settings.folderBasedDeck = value;
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Default deck name")
.setDesc(
"The name of the default deck where the cards will be added when not specified.",
)
.addText(function (text) {
text
.setValue(plugin.settings.deck)
.setPlaceholder("Deck::sub-deck")
.onChange(function (value) {
if (value.length) {
plugin.settings.deck = value;
plugin.saveData(plugin.settings);
} else {
new obsidian.Notice(
"The deck name must be at least 1 character long",
);
}
});
});
new obsidian.Setting(containerEl)
.setName("Default Anki tag")
.setDesc("This tag will be added to each generated card on Anki")
.addText(function (text) {
text
.setValue(plugin.settings.defaultAnkiTag)
.setPlaceholder("Anki tag")
.onChange(function (value) {
if (!value) new obsidian.Notice("No default tags will be added");
plugin.settings.defaultAnkiTag = value.toLowerCase();
plugin.saveData(plugin.settings);
});
});
containerEl.createEl("h2", { text: "Cards Identification" });
new obsidian.Setting(containerEl)
.setName("Flashcards #tag")
.setDesc(
"The tag to identify the flashcards in the notes (case-insensitive).",
)
.addText(function (text) {
text
.setValue(plugin.settings.flashcardsTag)
.setPlaceholder("Card")
.onChange(function (value) {
if (value) {
plugin.settings.flashcardsTag = value.toLowerCase();
plugin.saveData(plugin.settings);
} else {
new obsidian.Notice("The tag must be at least 1 character long");
}
});
});
new obsidian.Setting(containerEl)
.setName("Inline card separator")
.setDesc("The separator to identifty the inline cards in the notes.")
.addText(function (text) {
text
.setValue(plugin.settings.inlineSeparator)
.setPlaceholder("::")
.onChange(function (value) {
// if the value is empty or is the same like the inlineseparatorreverse then set it to the default, otherwise save it
if (
value.trim().length === 0 ||
value === plugin.settings.inlineSeparatorReverse
) {
plugin.settings.inlineSeparator = "::";
if (value.trim().length === 0) {
new obsidian.Notice(
"The separator must be at least 1 character long",
);
} else if (value === plugin.settings.inlineSeparatorReverse) {
new obsidian.Notice(
"The separator must be different from the inline reverse separator",
);
}
} else {
plugin.settings.inlineSeparator = escapeRegExp(value.trim());
new obsidian.Notice("The separator has been changed");
}
plugin.saveData(plugin.settings);
});
});
new obsidian.Setting(containerEl)
.setName("Inline reverse card separator")
.setDesc(
"The separator to identifty the inline revese cards in the notes.",
)
.addText(function (text) {
text
.setValue(plugin.settings.inlineSeparatorReverse)
.setPlaceholder(":::")
.onChange(function (value) {
// if the value is empty or is the same like the inlineseparatorreverse then set it to the default, otherwise save it
if (
value.trim().length === 0 ||
value === plugin.settings.inlineSeparator
) {
plugin.settings.inlineSeparatorReverse = ":::";
if (value.trim().length === 0) {
new obsidian.Notice(
"The separator must be at least 1 character long",
);
} else if (value === plugin.settings.inlineSeparator) {
new obsidian.Notice(
"The separator must be different from the inline separator",
);
}
} else {
plugin.settings.inlineSeparatorReverse = escapeRegExp(
value.trim(),
);
new obsidian.Notice("The separator has been changed");
}
plugin.saveData(plugin.settings);
});
});
};
return SettingsTab;
})(obsidian.PluginSettingTab);
var commonjsGlobal =
typeof globalThis !== "undefined"
? globalThis
: typeof window !== "undefined"
? window
: typeof global !== "undefined"
? global
: typeof self !== "undefined"
? self
: {};
function createCommonjsModule(fn, basedir, module) {
return (
(module = {
path: basedir,
exports: {},
require: function (path, base) {
return commonjsRequire(
path,
base === undefined || base === null ? module.path : base,
);
},
}),
fn(module, module.exports),
module.exports
);
}
function commonjsRequire() {
throw new Error(
"Dynamic requires are not currently supported by @rollup/plugin-commonjs",
);
}
var showdown = createCommonjsModule(function (module) {
(function () {
/**
* Created by Tivie on 13-07-2015.
*/
function getDefaultOpts(simple) {
var defaultOptions = {
omitExtraWLInCodeBlocks: {
defaultValue: false,
describe: "Omit the default extra whiteline added to code blocks",
type: "boolean",
},
noHeaderId: {
defaultValue: false,
describe: "Turn on/off generated header id",
type: "boolean",
},
prefixHeaderId: {
defaultValue: false,
describe:
"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix",
type: "string",
},
rawPrefixHeaderId: {
defaultValue: false,
describe:
'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',
type: "boolean",
},
ghCompatibleHeaderId: {
defaultValue: false,
describe:
"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)",
type: "boolean",
},
rawHeaderId: {
defaultValue: false,
describe:
"Remove only spaces, ' and \" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids",
type: "boolean",
},
headerLevelStart: {
defaultValue: false,
describe: "The header blocks level start",
type: "integer",
},
parseImgDimensions: {
defaultValue: false,
describe: "Turn on/off image dimension parsing",
type: "boolean",
},
simplifiedAutoLink: {
defaultValue: false,
describe: "Turn on/off GFM autolink style",
type: "boolean",
},
excludeTrailingPunctuationFromURLs: {
defaultValue: false,
describe:
"Excludes trailing punctuation from links generated with autoLinking",
type: "boolean",
},
literalMidWordUnderscores: {
defaultValue: false,
describe: "Parse midword underscores as literal underscores",
type: "boolean",
},
literalMidWordAsterisks: {
defaultValue: false,
describe: "Parse midword asterisks as literal asterisks",
type: "boolean",
},
strikethrough: {
defaultValue: false,
describe: "Turn on/off strikethrough support",
type: "boolean",
},
tables: {
defaultValue: false,
describe: "Turn on/off tables support",
type: "boolean",
},
tablesHeaderId: {
defaultValue: false,
describe: "Add an id to table headers",
type: "boolean",
},
ghCodeBlocks: {
defaultValue: true,
describe: "Turn on/off GFM fenced code blocks support",
type: "boolean",
},
tasklists: {
defaultValue: false,
describe: "Turn on/off GFM tasklist support",
type: "boolean",
},
smoothLivePreview: {
defaultValue: false,
describe:
"Prevents weird effects in live previews due to incomplete input",
type: "boolean",
},
smartIndentationFix: {
defaultValue: false,
description: "Tries to smartly fix indentation in es6 strings",
type: "boolean",
},
disableForced4SpacesIndentedSublists: {
defaultValue: false,
description:
"Disables the requirement of indenting nested sublists by 4 spaces",
type: "boolean",
},
simpleLineBreaks: {
defaultValue: false,
description: "Parses simple line breaks as <br> (GFM Style)",
type: "boolean",
},
requireSpaceBeforeHeadingText: {
defaultValue: false,
description:
"Makes adding a space between `#` and the header text mandatory (GFM Style)",
type: "boolean",
},
ghMentions: {
defaultValue: false,
description: "Enables github @mentions",
type: "boolean",
},
ghMentionsLink: {
defaultValue: "https://github.com/{u}",
description:
"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.",
type: "string",
},
encodeEmails: {
defaultValue: true,
description:
"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities",
type: "boolean",
},
openLinksInNewWindow: {
defaultValue: false,
description: "Open all links in new windows",
type: "boolean",
},
backslashEscapesHTMLTags: {
defaultValue: false,
description: "Support for HTML Tag escaping. ex: <div>foo</div>",
type: "boolean",
},
emoji: {
defaultValue: false,
description: "Enable emoji support. Ex: `this is a :smile: emoji`",
type: "boolean",
},
underline: {
defaultValue: false,
description:
"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`",
type: "boolean",
},
completeHTMLDocument: {
defaultValue: false,
description:
"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags",
type: "boolean",
},
metadata: {
defaultValue: false,
description:
"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).",
type: "boolean",
},
splitAdjacentBlockquotes: {
defaultValue: false,
description: "Split adjacent blockquote blocks",
type: "boolean",
},
};
if (simple === false) {
return JSON.parse(JSON.stringify(defaultOptions));
}
var ret = {};
for (var opt in defaultOptions) {
if (defaultOptions.hasOwnProperty(opt)) {
ret[opt] = defaultOptions[opt].defaultValue;
}
}
return ret;
}
function allOptionsOn() {
var options = getDefaultOpts(true),
ret = {};
for (var opt in options) {
if (options.hasOwnProperty(opt)) {
ret[opt] = true;
}
}
return ret;
}
/**
* Created by Tivie on 06-01-2015.
*/
// Private properties
var showdown = {},
parsers = {},
extensions = {},
globalOptions = getDefaultOpts(true),
setFlavor = "vanilla",
flavor = {
github: {
omitExtraWLInCodeBlocks: true,
simplifiedAutoLink: true,
excludeTrailingPunctuationFromURLs: true,
literalMidWordUnderscores: true,
strikethrough: true,
tables: true,
tablesHeaderId: true,
ghCodeBlocks: true,
tasklists: true,
disableForced4SpacesIndentedSublists: true,
simpleLineBreaks: true,
requireSpaceBeforeHeadingText: true,
ghCompatibleHeaderId: true,
ghMentions: true,
backslashEscapesHTMLTags: true,
emoji: true,
splitAdjacentBlockquotes: true,
},
original: {
noHeaderId: true,
ghCodeBlocks: false,
},
ghost: {
omitExtraWLInCodeBlocks: true,
parseImgDimensions: true,
simplifiedAutoLink: true,
excludeTrailingPunctuationFromURLs: true,
literalMidWordUnderscores: true,
strikethrough: true,
tables: true,
tablesHeaderId: true,
ghCodeBlocks: true,
tasklists: true,
smoothLivePreview: true,
simpleLineBreaks: true,
requireSpaceBeforeHeadingText: true,
ghMentions: false,
encodeEmails: true,
},
vanilla: getDefaultOpts(true),
allOn: allOptionsOn(),
};
/**
* helper namespace
* @type {{}}
*/
showdown.helper = {};
/**
* TODO LEGACY SUPPORT CODE
* @type {{}}
*/
showdown.extensions = {};
/**
* Set a global option
* @static
* @param {string} key
* @param {*} value
* @returns {showdown}
*/
showdown.setOption = function (key, value) {
globalOptions[key] = value;
return this;
};
/**
* Get a global option
* @static
* @param {string} key
* @returns {*}
*/
showdown.getOption = function (key) {
return globalOptions[key];
};
/**
* Get the global options
* @static
* @returns {{}}
*/
showdown.getOptions = function () {
return globalOptions;
};
/**
* Reset global options to the default values
* @static
*/
showdown.resetOptions = function () {
globalOptions = getDefaultOpts(true);
};
/**
* Set the flavor showdown should use as default
* @param {string} name
*/
showdown.setFlavor = function (name) {
if (!flavor.hasOwnProperty(name)) {
throw Error(name + " flavor was not found");
}
showdown.resetOptions();
var preset = flavor[name];
setFlavor = name;
for (var option in preset) {
if (preset.hasOwnProperty(option)) {
globalOptions[option] = preset[option];
}
}
};
/**
* Get the currently set flavor
* @returns {string}
*/
showdown.getFlavor = function () {
return setFlavor;
};
/**
* Get the options of a specified flavor. Returns undefined if the flavor was not found
* @param {string} name Name of the flavor
* @returns {{}|undefined}
*/
showdown.getFlavorOptions = function (name) {
if (flavor.hasOwnProperty(name)) {
return flavor[name];
}
};
/**
* Get the default options
* @static
* @param {boolean} [simple=true]
* @returns {{}}
*/
showdown.getDefaultOptions = function (simple) {
return getDefaultOpts(simple);
};
/**
* Get or set a subParser
*
* subParser(name) - Get a registered subParser
* subParser(name, func) - Register a subParser
* @static
* @param {string} name
* @param {function} [func]
* @returns {*}
*/
showdown.subParser = function (name, func) {
if (showdown.helper.isString(name)) {
if (typeof func !== "undefined") {
parsers[name] = func;
} else {
if (parsers.hasOwnProperty(name)) {
return parsers[name];
} else {
throw Error("SubParser named " + name + " not registered!");
}
}
}
};
/**
* Gets or registers an extension
* @static
* @param {string} name
* @param {object|function=} ext
* @returns {*}
*/
showdown.extension = function (name, ext) {
if (!showdown.helper.isString(name)) {
throw Error("Extension 'name' must be a string");
}
name = showdown.helper.stdExtName(name);
// Getter
if (showdown.helper.isUndefined(ext)) {
if (!extensions.hasOwnProperty(name)) {
throw Error("Extension named " + name + " is not registered!");
}
return extensions[name];
// Setter
} else {
// Expand extension if it's wrapped in a function
if (typeof ext === "function") {
ext = ext();
}
// Ensure extension is an array
if (!showdown.helper.isArray(ext)) {
ext = [ext];
}
var validExtension = validate(ext, name);
if (validExtension.valid) {
extensions[name] = ext;
} else {
throw Error(validExtension.error);
}
}
};
/**
* Gets all extensions registered
* @returns {{}}
*/
showdown.getAllExtensions = function () {
return extensions;
};
/**
* Remove an extension
* @param {string} name
*/
showdown.removeExtension = function (name) {
delete extensions[name];
};
/**
* Removes all extensions
*/
showdown.resetExtensions = function () {
extensions = {};
};
/**
* Validate extension
* @param {array} extension
* @param {string} name
* @returns {{valid: boolean, error: string}}
*/
function validate(extension, name) {
var errMsg = name
? "Error in " + name + " extension->"
: "Error in unnamed extension",
ret = {
valid: true,
error: "",
};
if (!showdown.helper.isArray(extension)) {
extension = [extension];
}
for (var i = 0; i < extension.length; ++i) {
var baseMsg = errMsg + " sub-extension " + i + ": ",
ext = extension[i];
if (typeof ext !== "object") {
ret.valid = false;
ret.error =
baseMsg + "must be an object, but " + typeof ext + " given";
return ret;
}
if (!showdown.helper.isString(ext.type)) {
ret.valid = false;
ret.error =
baseMsg +
'property "type" must be a string, but ' +
typeof ext.type +
" given";
return ret;
}
var type = (ext.type = ext.type.toLowerCase());
// normalize extension type
if (type === "language") {
type = ext.type = "lang";
}
if (type === "html") {
type = ext.type = "output";
}
if (type !== "lang" && type !== "output" && type !== "listener") {
ret.valid = false;
ret.error =
baseMsg +
"type " +
type +
' is not recognized. Valid values: "lang/language", "output/html" or "listener"';
return ret;
}
if (type === "listener") {
if (showdown.helper.isUndefined(ext.listeners)) {
ret.valid = false;
ret.error =
baseMsg +
'. Extensions of type "listener" must have a property called "listeners"';
return ret;
}
} else {
if (
showdown.helper.isUndefined(ext.filter) &&
showdown.helper.isUndefined(ext.regex)
) {
ret.valid = false;
ret.error =
baseMsg +
type +
' extensions must define either a "regex" property or a "filter" method';
return ret;
}
}
if (ext.listeners) {
if (typeof ext.listeners !== "object") {
ret.valid = false;
ret.error =
baseMsg +
'"listeners" property must be an object but ' +
typeof ext.listeners +
" given";
return ret;
}
for (var ln in ext.listeners) {
if (ext.listeners.hasOwnProperty(ln)) {
if (typeof ext.listeners[ln] !== "function") {
ret.valid = false;
ret.error =
baseMsg +
'"listeners" property must be an hash of [event name]: [callback]. listeners.' +
ln +
" must be a function but " +
typeof ext.listeners[ln] +
" given";
return ret;
}
}
}
}
if (ext.filter) {
if (typeof ext.filter !== "function") {
ret.valid = false;
ret.error =
baseMsg +
'"filter" must be a function, but ' +
typeof ext.filter +
" given";
return ret;
}
} else if (ext.regex) {
if (showdown.helper.isString(ext.regex)) {
ext.regex = new RegExp(ext.regex, "g");
}
if (!(ext.regex instanceof RegExp)) {
ret.valid = false;
ret.error =
baseMsg +
'"regex" property must either be a string or a RegExp object, but ' +
typeof ext.regex +
" given";
return ret;
}
if (showdown.helper.isUndefined(ext.replace)) {
ret.valid = false;
ret.error =
baseMsg +
'"regex" extensions must implement a replace string or function';
return ret;
}
}
}
return ret;
}
/**
* Validate extension
* @param {object} ext
* @returns {boolean}
*/
showdown.validateExtension = function (ext) {
var validateExtension = validate(ext, null);
if (!validateExtension.valid) {
console.warn(validateExtension.error);
return false;
}
return true;
};
/**
* showdownjs helper functions
*/
if (!showdown.hasOwnProperty("helper")) {
showdown.helper = {};
}
/**
* Check if var is string
* @static
* @param {string} a
* @returns {boolean}
*/
showdown.helper.isString = function (a) {
return typeof a === "string" || a instanceof String;
};
/**
* Check if var is a function
* @static
* @param {*} a
* @returns {boolean}
*/
showdown.helper.isFunction = function (a) {
var getType = {};
return a && getType.toString.call(a) === "[object Function]";
};
/**
* isArray helper function
* @static
* @param {*} a
* @returns {boolean}
*/
showdown.helper.isArray = function (a) {
return Array.isArray(a);
};
/**
* Check if value is undefined
* @static
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
*/
showdown.helper.isUndefined = function (value) {
return typeof value === "undefined";
};
/**
* ForEach helper function
* Iterates over Arrays and Objects (own properties only)
* @static
* @param {*} obj
* @param {function} callback Accepts 3 params: 1. value, 2. key, 3. the original array/object
*/
showdown.helper.forEach = function (obj, callback) {
// check if obj is defined
if (showdown.helper.isUndefined(obj)) {
throw new Error("obj param is required");
}
if (showdown.helper.isUndefined(callback)) {
throw new Error("callback param is required");
}
if (!showdown.helper.isFunction(callback)) {
throw new Error("callback param must be a function/closure");
}
if (typeof obj.forEach === "function") {
obj.forEach(callback);
} else if (showdown.helper.isArray(obj)) {
for (var i = 0; i < obj.length; i++) {
callback(obj[i], i, obj);
}
} else if (typeof obj === "object") {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
callback(obj[prop], prop, obj);
}
}
} else {
throw new Error(
"obj does not seem to be an array or an iterable object",
);
}
};
/**
* Standardidize extension name
* @static
* @param {string} s extension name
* @returns {string}
*/
showdown.helper.stdExtName = function (s) {
return s
.replace(/[_?*+\/\\.^-]/g, "")
.replace(/\s/g, "")
.toLowerCase();
};
function escapeCharactersCallback(wholeMatch, m1) {
var charCodeToEscape = m1.charCodeAt(0);
return "¨E" + charCodeToEscape + "E";
}
/**
* Callback used to escape characters when passing through String.replace
* @static
* @param {string} wholeMatch
* @param {string} m1
* @returns {string}
*/
showdown.helper.escapeCharactersCallback = escapeCharactersCallback;
/**
* Escape characters in a string
* @static
* @param {string} text
* @param {string} charsToEscape
* @param {boolean} afterBackslash
* @returns {XML|string|void|*}
*/
showdown.helper.escapeCharacters = function (
text,
charsToEscape,
afterBackslash,
) {
// First we have to escape the escape characters so that
// we can build a character class out of them
var regexString =
"([" + charsToEscape.replace(/([\[\]\\])/g, "\\$1") + "])";
if (afterBackslash) {
regexString = "\\\\" + regexString;
}
var regex = new RegExp(regexString, "g");
text = text.replace(regex, escapeCharactersCallback);
return text;
};
/**
* Unescape HTML entities
* @param txt
* @returns {string}
*/
showdown.helper.unescapeHTMLEntities = function (txt) {
return txt
.replace(/&quot;/g, '"')
.replace(/&lt;/g, "<")
.replace(/&gt;/g, ">")
.replace(/&amp;/g, "&");
};
var rgxFindMatchPos = function (str, left, right, flags) {
var f = flags || "",
g = f.indexOf("g") > -1,
x = new RegExp(left + "|" + right, "g" + f.replace(/g/g, "")),
l = new RegExp(left, f.replace(/g/g, "")),
pos = [],
t,
s,
m,
start,
end;
do {
t = 0;
while ((m = x.exec(str))) {
if (l.test(m[0])) {
if (!t++) {
s = x.lastIndex;
start = s - m[0].length;
}
} else if (t) {
if (!--t) {
end = m.index + m[0].length;
var obj = {
left: { start: start, end: s },
match: { start: s, end: m.index },
right: { start: m.index, end: end },
wholeMatch: { start: start, end: end },
};
pos.push(obj);
if (!g) {
return pos;
}
}
}
}
} while (t && (x.lastIndex = s));
return pos;
};
/**
* matchRecursiveRegExp
*
* (c) 2007 Steven Levithan <stevenlevithan.com>
* MIT License
*
* Accepts a string to search, a left and right format delimiter
* as regex patterns, and optional regex flags. Returns an array
* of matches, allowing nested instances of left/right delimiters.
* Use the "g" flag to return all matches, otherwise only the
* first is returned. Be careful to ensure that the left and
* right format delimiters produce mutually exclusive matches.
* Backreferences are not supported within the right delimiter
* due to how it is internally combined with the left delimiter.
* When matching strings whose format delimiters are unbalanced
* to the left or right, the output is intentionally as a
* conventional regex library with recursion support would
* produce, e.g. "<<x>" and "<x>>" both produce ["x"] when using
* "<" and ">" as the delimiters (both strings contain a single,
* balanced instance of "<x>").
*
* examples:
* matchRecursiveRegExp("test", "\\(", "\\)")
* returns: []
* matchRecursiveRegExp("<t<<e>><s>>t<>", "<", ">", "g")
* returns: ["t<<e>><s>", ""]
* matchRecursiveRegExp("<div id=\"x\">test</div>", "<div\\b[^>]*>", "</div>", "gi")
* returns: ["test"]
*/
showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) {
var matchPos = rgxFindMatchPos(str, left, right, flags),
results = [];
for (var i = 0; i < matchPos.length; ++i) {
results.push([
str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end),
str.slice(matchPos[i].match.start, matchPos[i].match.end),
str.slice(matchPos[i].left.start, matchPos[i].left.end),
str.slice(matchPos[i].right.start, matchPos[i].right.end),
]);
}
return results;
};
/**
*
* @param {string} str
* @param {string|function} replacement
* @param {string} left
* @param {string} right
* @param {string} flags
* @returns {string}
*/
showdown.helper.replaceRecursiveRegExp = function (
str,
replacement,
left,
right,
flags,
) {
if (!showdown.helper.isFunction(replacement)) {
var repStr = replacement;
replacement = function () {
return repStr;
};
}
var matchPos = rgxFindMatchPos(str, left, right, flags),
finalStr = str,
lng = matchPos.length;
if (lng > 0) {
var bits = [];
if (matchPos[0].wholeMatch.start !== 0) {
bits.push(str.slice(0, matchPos[0].wholeMatch.start));
}
for (var i = 0; i < lng; ++i) {
bits.push(
replacement(
str.slice(
matchPos[i].wholeMatch.start,
matchPos[i].wholeMatch.end,
),
str.slice(matchPos[i].match.start, matchPos[i].match.end),
str.slice(matchPos[i].left.start, matchPos[i].left.end),
str.slice(matchPos[i].right.start, matchPos[i].right.end),
),
);
if (i < lng - 1) {
bits.push(
str.slice(
matchPos[i].wholeMatch.end,
matchPos[i + 1].wholeMatch.start,
),
);
}
}
if (matchPos[lng - 1].wholeMatch.end < str.length) {
bits.push(str.slice(matchPos[lng - 1].wholeMatch.end));
}
finalStr = bits.join("");
}
return finalStr;
};
/**
* Returns the index within the passed String object of the first occurrence of the specified regex,
* starting the search at fromIndex. Returns -1 if the value is not found.
*
* @param {string} str string to search
* @param {RegExp} regex Regular expression to search
* @param {int} [fromIndex = 0] Index to start the search
* @returns {Number}
* @throws InvalidArgumentError
*/
showdown.helper.regexIndexOf = function (str, regex, fromIndex) {
if (!showdown.helper.isString(str)) {
throw "InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";
}
if (regex instanceof RegExp === false) {
throw "InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp";
}
var indexOf = str.substring(fromIndex || 0).search(regex);
return indexOf >= 0 ? indexOf + (fromIndex || 0) : indexOf;
};
/**
* Splits the passed string object at the defined index, and returns an array composed of the two substrings
* @param {string} str string to split
* @param {int} index index to split string at
* @returns {[string,string]}
* @throws InvalidArgumentError
*/
showdown.helper.splitAtIndex = function (str, index) {
if (!showdown.helper.isString(str)) {
throw "InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string";
}
return [str.substring(0, index), str.substring(index)];
};
/**
* Obfuscate an e-mail address through the use of Character Entities,
* transforming ASCII characters into their equivalent decimal or hex entities.
*
* Since it has a random component, subsequent calls to this function produce different results
*
* @param {string} mail
* @returns {string}
*/
showdown.helper.encodeEmailAddress = function (mail) {
var encode = [
function (ch) {
return "&#" + ch.charCodeAt(0) + ";";
},
function (ch) {
return "&#x" + ch.charCodeAt(0).toString(16) + ";";
},
function (ch) {
return ch;
},
];
mail = mail.replace(/./g, function (ch) {
if (ch === "@") {
// this *must* be encoded. I insist.
ch = encode[Math.floor(Math.random() * 2)](ch);
} else {
var r = Math.random();
// roughly 10% raw, 45% hex, 45% dec
ch =
r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch);
}
return ch;
});
return mail;
};
/**
*
* @param str
* @param targetLength
* @param padString
* @returns {string}
*/
showdown.helper.padEnd = function padEnd(str, targetLength, padString) {
/*jshint bitwise: false*/
// eslint-disable-next-line space-infix-ops
targetLength = targetLength >> 0; //floor if number or convert non-number to 0;
/*jshint bitwise: true*/
padString = String(padString || " ");
if (str.length > targetLength) {
return String(str);
} else {
targetLength = targetLength - str.length;
if (targetLength > padString.length) {
padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
}
return String(str) + padString.slice(0, targetLength);
}
};
/**
* POLYFILLS
*/
// use this instead of builtin is undefined for IE8 compatibility
if (typeof console === "undefined") {
console = {
warn: function (msg) {
alert(msg);
},
log: function (msg) {
alert(msg);
},
error: function (msg) {
throw msg;
},
};
}
/**
* Common regexes.
* We declare some common regexes to improve performance
*/
showdown.helper.regexes = {
asteriskDashAndColon: /([*_:~])/g,
};
/**
* EMOJIS LIST
*/
showdown.helper.emojis = {
"+1": "\ud83d\udc4d",
"-1": "\ud83d\udc4e",
100: "\ud83d\udcaf",
1234: "\ud83d\udd22",
"1st_place_medal": "\ud83e\udd47",
"2nd_place_medal": "\ud83e\udd48",
"3rd_place_medal": "\ud83e\udd49",
"8ball": "\ud83c\udfb1",
a: "\ud83c\udd70\ufe0f",
ab: "\ud83c\udd8e",
abc: "\ud83d\udd24",
abcd: "\ud83d\udd21",
accept: "\ud83c\ude51",
aerial_tramway: "\ud83d\udea1",
airplane: "\u2708\ufe0f",
alarm_clock: "\u23f0",
alembic: "\u2697\ufe0f",
alien: "\ud83d\udc7d",
ambulance: "\ud83d\ude91",
amphora: "\ud83c\udffa",
anchor: "\u2693\ufe0f",
angel: "\ud83d\udc7c",
anger: "\ud83d\udca2",
angry: "\ud83d\ude20",
anguished: "\ud83d\ude27",
ant: "\ud83d\udc1c",
apple: "\ud83c\udf4e",
aquarius: "\u2652\ufe0f",
aries: "\u2648\ufe0f",
arrow_backward: "\u25c0\ufe0f",
arrow_double_down: "\u23ec",
arrow_double_up: "\u23eb",
arrow_down: "\u2b07\ufe0f",
arrow_down_small: "\ud83d\udd3d",
arrow_forward: "\u25b6\ufe0f",
arrow_heading_down: "\u2935\ufe0f",
arrow_heading_up: "\u2934\ufe0f",
arrow_left: "\u2b05\ufe0f",
arrow_lower_left: "\u2199\ufe0f",
arrow_lower_right: "\u2198\ufe0f",
arrow_right: "\u27a1\ufe0f",
arrow_right_hook: "\u21aa\ufe0f",
arrow_up: "\u2b06\ufe0f",
arrow_up_down: "\u2195\ufe0f",
arrow_up_small: "\ud83d\udd3c",
arrow_upper_left: "\u2196\ufe0f",
arrow_upper_right: "\u2197\ufe0f",
arrows_clockwise: "\ud83d\udd03",
arrows_counterclockwise: "\ud83d\udd04",
art: "\ud83c\udfa8",
articulated_lorry: "\ud83d\ude9b",
artificial_satellite: "\ud83d\udef0",
astonished: "\ud83d\ude32",
athletic_shoe: "\ud83d\udc5f",
atm: "\ud83c\udfe7",
atom_symbol: "\u269b\ufe0f",
avocado: "\ud83e\udd51",
b: "\ud83c\udd71\ufe0f",
baby: "\ud83d\udc76",
baby_bottle: "\ud83c\udf7c",
baby_chick: "\ud83d\udc24",
baby_symbol: "\ud83d\udebc",
back: "\ud83d\udd19",
bacon: "\ud83e\udd53",
badminton: "\ud83c\udff8",
baggage_claim: "\ud83d\udec4",
baguette_bread: "\ud83e\udd56",
balance_scale: "\u2696\ufe0f",
balloon: "\ud83c\udf88",
ballot_box: "\ud83d\uddf3",
ballot_box_with_check: "\u2611\ufe0f",
bamboo: "\ud83c\udf8d",
banana: "\ud83c\udf4c",
bangbang: "\u203c\ufe0f",
bank: "\ud83c\udfe6",
bar_chart: "\ud83d\udcca",
barber: "\ud83d\udc88",
baseball: "\u26be\ufe0f",
basketball: "\ud83c\udfc0",
basketball_man: "\u26f9\ufe0f",
basketball_woman: "\u26f9\ufe0f&zwj;\u2640\ufe0f",
bat: "\ud83e\udd87",
bath: "\ud83d\udec0",
bathtub: "\ud83d\udec1",
battery: "\ud83d\udd0b",
beach_umbrella: "\ud83c\udfd6",
bear: "\ud83d\udc3b",
bed: "\ud83d\udecf",
bee: "\ud83d\udc1d",
beer: "\ud83c\udf7a",
beers: "\ud83c\udf7b",
beetle: "\ud83d\udc1e",
beginner: "\ud83d\udd30",
bell: "\ud83d\udd14",
bellhop_bell: "\ud83d\udece",
bento: "\ud83c\udf71",
biking_man: "\ud83d\udeb4",
bike: "\ud83d\udeb2",
biking_woman: "\ud83d\udeb4&zwj;\u2640\ufe0f",
bikini: "\ud83d\udc59",
biohazard: "\u2623\ufe0f",
bird: "\ud83d\udc26",
birthday: "\ud83c\udf82",
black_circle: "\u26ab\ufe0f",
black_flag: "\ud83c\udff4",
black_heart: "\ud83d\udda4",
black_joker: "\ud83c\udccf",
black_large_square: "\u2b1b\ufe0f",
black_medium_small_square: "\u25fe\ufe0f",
black_medium_square: "\u25fc\ufe0f",
black_nib: "\u2712\ufe0f",
black_small_square: "\u25aa\ufe0f",
black_square_button: "\ud83d\udd32",
blonde_man: "\ud83d\udc71",
blonde_woman: "\ud83d\udc71&zwj;\u2640\ufe0f",
blossom: "\ud83c\udf3c",
blowfish: "\ud83d\udc21",
blue_book: "\ud83d\udcd8",
blue_car: "\ud83d\ude99",
blue_heart: "\ud83d\udc99",
blush: "\ud83d\ude0a",
boar: "\ud83d\udc17",
boat: "\u26f5\ufe0f",
bomb: "\ud83d\udca3",
book: "\ud83d\udcd6",
bookmark: "\ud83d\udd16",
bookmark_tabs: "\ud83d\udcd1",
books: "\ud83d\udcda",
boom: "\ud83d\udca5",
boot: "\ud83d\udc62",
bouquet: "\ud83d\udc90",
bowing_man: "\ud83d\ude47",
bow_and_arrow: "\ud83c\udff9",
bowing_woman: "\ud83d\ude47&zwj;\u2640\ufe0f",
bowling: "\ud83c\udfb3",
boxing_glove: "\ud83e\udd4a",
boy: "\ud83d\udc66",
bread: "\ud83c\udf5e",
bride_with_veil: "\ud83d\udc70",
bridge_at_night: "\ud83c\udf09",
briefcase: "\ud83d\udcbc",
broken_heart: "\ud83d\udc94",
bug: "\ud83d\udc1b",
building_construction: "\ud83c\udfd7",
bulb: "\ud83d\udca1",
bullettrain_front: "\ud83d\ude85",
bullettrain_side: "\ud83d\ude84",
burrito: "\ud83c\udf2f",
bus: "\ud83d\ude8c",
business_suit_levitating: "\ud83d\udd74",
busstop: "\ud83d\ude8f",
bust_in_silhouette: "\ud83d\udc64",
busts_in_silhouette: "\ud83d\udc65",
butterfly: "\ud83e\udd8b",
cactus: "\ud83c\udf35",
cake: "\ud83c\udf70",
calendar: "\ud83d\udcc6",
call_me_hand: "\ud83e\udd19",
calling: "\ud83d\udcf2",
camel: "\ud83d\udc2b",
camera: "\ud83d\udcf7",
camera_flash: "\ud83d\udcf8",
camping: "\ud83c\udfd5",
cancer: "\u264b\ufe0f",
candle: "\ud83d\udd6f",
candy: "\ud83c\udf6c",
canoe: "\ud83d\udef6",
capital_abcd: "\ud83d\udd20",
capricorn: "\u2651\ufe0f",
car: "\ud83d\ude97",
card_file_box: "\ud83d\uddc3",
card_index: "\ud83d\udcc7",
card_index_dividers: "\ud83d\uddc2",
carousel_horse: "\ud83c\udfa0",
carrot: "\ud83e\udd55",
cat: "\ud83d\udc31",
cat2: "\ud83d\udc08",
cd: "\ud83d\udcbf",
chains: "\u26d3",
champagne: "\ud83c\udf7e",
chart: "\ud83d\udcb9",
chart_with_downwards_trend: "\ud83d\udcc9",
chart_with_upwards_trend: "\ud83d\udcc8",
checkered_flag: "\ud83c\udfc1",
cheese: "\ud83e\uddc0",
cherries: "\ud83c\udf52",
cherry_blossom: "\ud83c\udf38",
chestnut: "\ud83c\udf30",
chicken: "\ud83d\udc14",
children_crossing: "\ud83d\udeb8",
chipmunk: "\ud83d\udc3f",
chocolate_bar: "\ud83c\udf6b",
christmas_tree: "\ud83c\udf84",
church: "\u26ea\ufe0f",
cinema: "\ud83c\udfa6",
circus_tent: "\ud83c\udfaa",
city_sunrise: "\ud83c\udf07",
city_sunset: "\ud83c\udf06",
cityscape: "\ud83c\udfd9",
cl: "\ud83c\udd91",
clamp: "\ud83d\udddc",
clap: "\ud83d\udc4f",
clapper: "\ud83c\udfac",
classical_building: "\ud83c\udfdb",
clinking_glasses: "\ud83e\udd42",
clipboard: "\ud83d\udccb",
clock1: "\ud83d\udd50",
clock10: "\ud83d\udd59",
clock1030: "\ud83d\udd65",
clock11: "\ud83d\udd5a",
clock1130: "\ud83d\udd66",
clock12: "\ud83d\udd5b",
clock1230: "\ud83d\udd67",
clock130: "\ud83d\udd5c",
clock2: "\ud83d\udd51",
clock230: "\ud83d\udd5d",
clock3: "\ud83d\udd52",
clock330: "\ud83d\udd5e",
clock4: "\ud83d\udd53",
clock430: "\ud83d\udd5f",
clock5: "\ud83d\udd54",
clock530: "\ud83d\udd60",
clock6: "\ud83d\udd55",
clock630: "\ud83d\udd61",
clock7: "\ud83d\udd56",
clock730: "\ud83d\udd62",
clock8: "\ud83d\udd57",
clock830: "\ud83d\udd63",
clock9: "\ud83d\udd58",
clock930: "\ud83d\udd64",
closed_book: "\ud83d\udcd5",
closed_lock_with_key: "\ud83d\udd10",
closed_umbrella: "\ud83c\udf02",
cloud: "\u2601\ufe0f",
cloud_with_lightning: "\ud83c\udf29",
cloud_with_lightning_and_rain: "\u26c8",
cloud_with_rain: "\ud83c\udf27",
cloud_with_snow: "\ud83c\udf28",
clown_face: "\ud83e\udd21",
clubs: "\u2663\ufe0f",
cocktail: "\ud83c\udf78",
coffee: "\u2615\ufe0f",
coffin: "\u26b0\ufe0f",
cold_sweat: "\ud83d\ude30",
comet: "\u2604\ufe0f",
computer: "\ud83d\udcbb",
computer_mouse: "\ud83d\uddb1",
confetti_ball: "\ud83c\udf8a",
confounded: "\ud83d\ude16",
confused: "\ud83d\ude15",
congratulations: "\u3297\ufe0f",
construction: "\ud83d\udea7",
construction_worker_man: "\ud83d\udc77",
construction_worker_woman: "\ud83d\udc77&zwj;\u2640\ufe0f",
control_knobs: "\ud83c\udf9b",
convenience_store: "\ud83c\udfea",
cookie: "\ud83c\udf6a",
cool: "\ud83c\udd92",
policeman: "\ud83d\udc6e",
copyright: "\u00a9\ufe0f",
corn: "\ud83c\udf3d",
couch_and_lamp: "\ud83d\udecb",
couple: "\ud83d\udc6b",
couple_with_heart_woman_man: "\ud83d\udc91",
couple_with_heart_man_man:
"\ud83d\udc68&zwj;\u2764\ufe0f&zwj;\ud83d\udc68",
couple_with_heart_woman_woman:
"\ud83d\udc69&zwj;\u2764\ufe0f&zwj;\ud83d\udc69",
couplekiss_man_man:
"\ud83d\udc68&zwj;\u2764\ufe0f&zwj;\ud83d\udc8b&zwj;\ud83d\udc68",
couplekiss_man_woman: "\ud83d\udc8f",
couplekiss_woman_woman:
"\ud83d\udc69&zwj;\u2764\ufe0f&zwj;\ud83d\udc8b&zwj;\ud83d\udc69",
cow: "\ud83d\udc2e",
cow2: "\ud83d\udc04",
cowboy_hat_face: "\ud83e\udd20",
crab: "\ud83e\udd80",
crayon: "\ud83d\udd8d",
credit_card: "\ud83d\udcb3",
crescent_moon: "\ud83c\udf19",
cricket: "\ud83c\udfcf",
crocodile: "\ud83d\udc0a",
croissant: "\ud83e\udd50",
crossed_fingers: "\ud83e\udd1e",
crossed_flags: "\ud83c\udf8c",
crossed_swords: "\u2694\ufe0f",
crown: "\ud83d\udc51",
cry: "\ud83d\ude22",
crying_cat_face: "\ud83d\ude3f",
crystal_ball: "\ud83d\udd2e",
cucumber: "\ud83e\udd52",
cupid: "\ud83d\udc98",
curly_loop: "\u27b0",
currency_exchange: "\ud83d\udcb1",
curry: "\ud83c\udf5b",
custard: "\ud83c\udf6e",
customs: "\ud83d\udec3",
cyclone: "\ud83c\udf00",
dagger: "\ud83d\udde1",
dancer: "\ud83d\udc83",
dancing_women: "\ud83d\udc6f",
dancing_men: "\ud83d\udc6f&zwj;\u2642\ufe0f",
dango: "\ud83c\udf61",
dark_sunglasses: "\ud83d\udd76",
dart: "\ud83c\udfaf",
dash: "\ud83d\udca8",
date: "\ud83d\udcc5",
deciduous_tree: "\ud83c\udf33",
deer: "\ud83e\udd8c",
department_store: "\ud83c\udfec",
derelict_house: "\ud83c\udfda",
desert: "\ud83c\udfdc",
desert_island: "\ud83c\udfdd",
desktop_computer: "\ud83d\udda5",
male_detective: "\ud83d\udd75\ufe0f",
diamond_shape_with_a_dot_inside: "\ud83d\udca0",
diamonds: "\u2666\ufe0f",
disappointed: "\ud83d\ude1e",
disappointed_relieved: "\ud83d\ude25",
dizzy: "\ud83d\udcab",
dizzy_face: "\ud83d\ude35",
do_not_litter: "\ud83d\udeaf",
dog: "\ud83d\udc36",
dog2: "\ud83d\udc15",
dollar: "\ud83d\udcb5",
dolls: "\ud83c\udf8e",
dolphin: "\ud83d\udc2c",
door: "\ud83d\udeaa",
doughnut: "\ud83c\udf69",
dove: "\ud83d\udd4a",
dragon: "\ud83d\udc09",
dragon_face: "\ud83d\udc32",
dress: "\ud83d\udc57",
dromedary_camel: "\ud83d\udc2a",
drooling_face: "\ud83e\udd24",
droplet: "\ud83d\udca7",
drum: "\ud83e\udd41",
duck: "\ud83e\udd86",
dvd: "\ud83d\udcc0",
"e-mail": "\ud83d\udce7",
eagle: "\ud83e\udd85",
ear: "\ud83d\udc42",
ear_of_rice: "\ud83c\udf3e",
earth_africa: "\ud83c\udf0d",
earth_americas: "\ud83c\udf0e",
earth_asia: "\ud83c\udf0f",
egg: "\ud83e\udd5a",
eggplant: "\ud83c\udf46",
eight_pointed_black_star: "\u2734\ufe0f",
eight_spoked_asterisk: "\u2733\ufe0f",
electric_plug: "\ud83d\udd0c",
elephant: "\ud83d\udc18",
email: "\u2709\ufe0f",
end: "\ud83d\udd1a",
envelope_with_arrow: "\ud83d\udce9",
euro: "\ud83d\udcb6",
european_castle: "\ud83c\udff0",
european_post_office: "\ud83c\udfe4",
evergreen_tree: "\ud83c\udf32",
exclamation: "\u2757\ufe0f",
expressionless: "\ud83d\ude11",
eye: "\ud83d\udc41",
eye_speech_bubble: "\ud83d\udc41&zwj;\ud83d\udde8",
eyeglasses: "\ud83d\udc53",
eyes: "\ud83d\udc40",
face_with_head_bandage: "\ud83e\udd15",
face_with_thermometer: "\ud83e\udd12",
fist_oncoming: "\ud83d\udc4a",
factory: "\ud83c\udfed",
fallen_leaf: "\ud83c\udf42",
family_man_woman_boy: "\ud83d\udc6a",
family_man_boy: "\ud83d\udc68&zwj;\ud83d\udc66",
family_man_boy_boy: "\ud83d\udc68&zwj;\ud83d\udc66&zwj;\ud83d\udc66",
family_man_girl: "\ud83d\udc68&zwj;\ud83d\udc67",
family_man_girl_boy: "\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc66",
family_man_girl_girl: "\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc67",
family_man_man_boy: "\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc66",
family_man_man_boy_boy:
"\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc66&zwj;\ud83d\udc66",
family_man_man_girl: "\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67",
family_man_man_girl_boy:
"\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc66",
family_man_man_girl_girl:
"\ud83d\udc68&zwj;\ud83d\udc68&zwj;\ud83d\udc67&zwj;\ud83d\udc67",
family_man_woman_boy_boy:
"\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66",
family_man_woman_girl: "\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67",
family_man_woman_girl_boy:
"\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66",
family_man_woman_girl_girl:
"\ud83d\udc68&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67",
family_woman_boy: "\ud83d\udc69&zwj;\ud83d\udc66",
family_woman_boy_boy: "\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66",
family_woman_girl: "\ud83d\udc69&zwj;\ud83d\udc67",
family_woman_girl_boy: "\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66",
family_woman_girl_girl: "\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67",
family_woman_woman_boy: "\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc66",
family_woman_woman_boy_boy:
"\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc66&zwj;\ud83d\udc66",
family_woman_woman_girl: "\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67",
family_woman_woman_girl_boy:
"\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc66",
family_woman_woman_girl_girl:
"\ud83d\udc69&zwj;\ud83d\udc69&zwj;\ud83d\udc67&zwj;\ud83d\udc67",
fast_forward: "\u23e9",
fax: "\ud83d\udce0",
fearful: "\ud83d\ude28",
feet: "\ud83d\udc3e",
female_detective: "\ud83d\udd75\ufe0f&zwj;\u2640\ufe0f",
ferris_wheel: "\ud83c\udfa1",
ferry: "\u26f4",
field_hockey: "\ud83c\udfd1",
file_cabinet: "\ud83d\uddc4",
file_folder: "\ud83d\udcc1",
film_projector: "\ud83d\udcfd",
film_strip: "\ud83c\udf9e",
fire: "\ud83d\udd25",
fire_engine: "\ud83d\ude92",
fireworks: "\ud83c\udf86",
first_quarter_moon: "\ud83c\udf13",
first_quarter_moon_with_face: "\ud83c\udf1b",
fish: "\ud83d\udc1f",
fish_cake: "\ud83c\udf65",
fishing_pole_and_fish: "\ud83c\udfa3",
fist_raised: "\u270a",
fist_left: "\ud83e\udd1b",
fist_right: "\ud83e\udd1c",
flags: "\ud83c\udf8f",
flashlight: "\ud83d\udd26",
fleur_de_lis: "\u269c\ufe0f",
flight_arrival: "\ud83d\udeec",
flight_departure: "\ud83d\udeeb",
floppy_disk: "\ud83d\udcbe",
flower_playing_cards: "\ud83c\udfb4",
flushed: "\ud83d\ude33",
fog: "\ud83c\udf2b",
foggy: "\ud83c\udf01",
football: "\ud83c\udfc8",
footprints: "\ud83d\udc63",
fork_and_knife: "\ud83c\udf74",
fountain: "\u26f2\ufe0f",
fountain_pen: "\ud83d\udd8b",
four_leaf_clover: "\ud83c\udf40",
fox_face: "\ud83e\udd8a",
framed_picture: "\ud83d\uddbc",
free: "\ud83c\udd93",
fried_egg: "\ud83c\udf73",
fried_shrimp: "\ud83c\udf64",
fries: "\ud83c\udf5f",
frog: "\ud83d\udc38",
frowning: "\ud83d\ude26",
frowning_face: "\u2639\ufe0f",
frowning_man: "\ud83d\ude4d&zwj;\u2642\ufe0f",
frowning_woman: "\ud83d\ude4d",
middle_finger: "\ud83d\udd95",
fuelpump: "\u26fd\ufe0f",
full_moon: "\ud83c\udf15",
full_moon_with_face: "\ud83c\udf1d",
funeral_urn: "\u26b1\ufe0f",
game_die: "\ud83c\udfb2",
gear: "\u2699\ufe0f",
gem: "\ud83d\udc8e",
gemini: "\u264a\ufe0f",
ghost: "\ud83d\udc7b",
gift: "\ud83c\udf81",
gift_heart: "\ud83d\udc9d",
girl: "\ud83d\udc67",
globe_with_meridians: "\ud83c\udf10",
goal_net: "\ud83e\udd45",
goat: "\ud83d\udc10",
golf: "\u26f3\ufe0f",
golfing_man: "\ud83c\udfcc\ufe0f",
golfing_woman: "\ud83c\udfcc\ufe0f&zwj;\u2640\ufe0f",
gorilla: "\ud83e\udd8d",
grapes: "\ud83c\udf47",
green_apple: "\ud83c\udf4f",
green_book: "\ud83d\udcd7",
green_heart: "\ud83d\udc9a",
green_salad: "\ud83e\udd57",
grey_exclamation: "\u2755",
grey_question: "\u2754",
grimacing: "\ud83d\ude2c",
grin: "\ud83d\ude01",
grinning: "\ud83d\ude00",
guardsman: "\ud83d\udc82",
guardswoman: "\ud83d\udc82&zwj;\u2640\ufe0f",
guitar: "\ud83c\udfb8",
gun: "\ud83d\udd2b",
haircut_woman: "\ud83d\udc87",
haircut_man: "\ud83d\udc87&zwj;\u2642\ufe0f",
hamburger: "\ud83c\udf54",
hammer: "\ud83d\udd28",
hammer_and_pick: "\u2692",
hammer_and_wrench: "\ud83d\udee0",
hamster: "\ud83d\udc39",
hand: "\u270b",
handbag: "\ud83d\udc5c",
handshake: "\ud83e\udd1d",
hankey: "\ud83d\udca9",
hatched_chick: "\ud83d\udc25",
hatching_chick: "\ud83d\udc23",
headphones: "\ud83c\udfa7",
hear_no_evil: "\ud83d\ude49",
heart: "\u2764\ufe0f",
heart_decoration: "\ud83d\udc9f",
heart_eyes: "\ud83d\ude0d",
heart_eyes_cat: "\ud83d\ude3b",
heartbeat: "\ud83d\udc93",
heartpulse: "\ud83d\udc97",
hearts: "\u2665\ufe0f",
heavy_check_mark: "\u2714\ufe0f",
heavy_division_sign: "\u2797",
heavy_dollar_sign: "\ud83d\udcb2",
heavy_heart_exclamation: "\u2763\ufe0f",
heavy_minus_sign: "\u2796",
heavy_multiplication_x: "\u2716\ufe0f",
heavy_plus_sign: "\u2795",
helicopter: "\ud83d\ude81",
herb: "\ud83c\udf3f",
hibiscus: "\ud83c\udf3a",
high_brightness: "\ud83d\udd06",
high_heel: "\ud83d\udc60",
hocho: "\ud83d\udd2a",
hole: "\ud83d\udd73",
honey_pot: "\ud83c\udf6f",
horse: "\ud83d\udc34",
horse_racing: "\ud83c\udfc7",
hospital: "\ud83c\udfe5",
hot_pepper: "\ud83c\udf36",
hotdog: "\ud83c\udf2d",
hotel: "\ud83c\udfe8",
hotsprings: "\u2668\ufe0f",
hourglass: "\u231b\ufe0f",
hourglass_flowing_sand: "\u23f3",
house: "\ud83c\udfe0",
house_with_garden: "\ud83c\udfe1",
houses: "\ud83c\udfd8",
hugs: "\ud83e\udd17",
hushed: "\ud83d\ude2f",
ice_cream: "\ud83c\udf68",
ice_hockey: "\ud83c\udfd2",
ice_skate: "\u26f8",
icecream: "\ud83c\udf66",
id: "\ud83c\udd94",
ideograph_advantage: "\ud83c\ude50",
imp: "\ud83d\udc7f",
inbox_tray: "\ud83d\udce5",
incoming_envelope: "\ud83d\udce8",
tipping_hand_woman: "\ud83d\udc81",
information_source: "\u2139\ufe0f",
innocent: "\ud83d\ude07",
interrobang: "\u2049\ufe0f",
iphone: "\ud83d\udcf1",
izakaya_lantern: "\ud83c\udfee",
jack_o_lantern: "\ud83c\udf83",
japan: "\ud83d\uddfe",
japanese_castle: "\ud83c\udfef",
japanese_goblin: "\ud83d\udc7a",
japanese_ogre: "\ud83d\udc79",
jeans: "\ud83d\udc56",
joy: "\ud83d\ude02",
joy_cat: "\ud83d\ude39",
joystick: "\ud83d\udd79",
kaaba: "\ud83d\udd4b",
key: "\ud83d\udd11",
keyboard: "\u2328\ufe0f",
keycap_ten: "\ud83d\udd1f",
kick_scooter: "\ud83d\udef4",
kimono: "\ud83d\udc58",
kiss: "\ud83d\udc8b",
kissing: "\ud83d\ude17",
kissing_cat: "\ud83d\ude3d",
kissing_closed_eyes: "\ud83d\ude1a",
kissing_heart: "\ud83d\ude18",
kissing_smiling_eyes: "\ud83d\ude19",
kiwi_fruit: "\ud83e\udd5d",
koala: "\ud83d\udc28",
koko: "\ud83c\ude01",
label: "\ud83c\udff7",
large_blue_circle: "\ud83d\udd35",
large_blue_diamond: "\ud83d\udd37",
large_orange_diamond: "\ud83d\udd36",
last_quarter_moon: "\ud83c\udf17",
last_quarter_moon_with_face: "\ud83c\udf1c",
latin_cross: "\u271d\ufe0f",
laughing: "\ud83d\ude06",
leaves: "\ud83c\udf43",
ledger: "\ud83d\udcd2",
left_luggage: "\ud83d\udec5",
left_right_arrow: "\u2194\ufe0f",
leftwards_arrow_with_hook: "\u21a9\ufe0f",
lemon: "\ud83c\udf4b",
leo: "\u264c\ufe0f",
leopard: "\ud83d\udc06",
level_slider: "\ud83c\udf9a",
libra: "\u264e\ufe0f",
light_rail: "\ud83d\ude88",
link: "\ud83d\udd17",
lion: "\ud83e\udd81",
lips: "\ud83d\udc44",
lipstick: "\ud83d\udc84",
lizard: "\ud83e\udd8e",
lock: "\ud83d\udd12",
lock_with_ink_pen: "\ud83d\udd0f",
lollipop: "\ud83c\udf6d",
loop: "\u27bf",
loud_sound: "\ud83d\udd0a",
loudspeaker: "\ud83d\udce2",
love_hotel: "\ud83c\udfe9",
love_letter: "\ud83d\udc8c",
low_brightness: "\ud83d\udd05",
lying_face: "\ud83e\udd25",
m: "\u24c2\ufe0f",
mag: "\ud83d\udd0d",
mag_right: "\ud83d\udd0e",
mahjong: "\ud83c\udc04\ufe0f",
mailbox: "\ud83d\udceb",
mailbox_closed: "\ud83d\udcea",
mailbox_with_mail: "\ud83d\udcec",
mailbox_with_no_mail: "\ud83d\udced",
man: "\ud83d\udc68",
man_artist: "\ud83d\udc68&zwj;\ud83c\udfa8",
man_astronaut: "\ud83d\udc68&zwj;\ud83d\ude80",
man_cartwheeling: "\ud83e\udd38&zwj;\u2642\ufe0f",
man_cook: "\ud83d\udc68&zwj;\ud83c\udf73",
man_dancing: "\ud83d\udd7a",
man_facepalming: "\ud83e\udd26&zwj;\u2642\ufe0f",
man_factory_worker: "\ud83d\udc68&zwj;\ud83c\udfed",
man_farmer: "\ud83d\udc68&zwj;\ud83c\udf3e",
man_firefighter: "\ud83d\udc68&zwj;\ud83d\ude92",
man_health_worker: "\ud83d\udc68&zwj;\u2695\ufe0f",
man_in_tuxedo: "\ud83e\udd35",
man_judge: "\ud83d\udc68&zwj;\u2696\ufe0f",
man_juggling: "\ud83e\udd39&zwj;\u2642\ufe0f",
man_mechanic: "\ud83d\udc68&zwj;\ud83d\udd27",
man_office_worker: "\ud83d\udc68&zwj;\ud83d\udcbc",
man_pilot: "\ud83d\udc68&zwj;\u2708\ufe0f",
man_playing_handball: "\ud83e\udd3e&zwj;\u2642\ufe0f",
man_playing_water_polo: "\ud83e\udd3d&zwj;\u2642\ufe0f",
man_scientist: "\ud83d\udc68&zwj;\ud83d\udd2c",
man_shrugging: "\ud83e\udd37&zwj;\u2642\ufe0f",
man_singer: "\ud83d\udc68&zwj;\ud83c\udfa4",
man_student: "\ud83d\udc68&zwj;\ud83c\udf93",
man_teacher: "\ud83d\udc68&zwj;\ud83c\udfeb",
man_technologist: "\ud83d\udc68&zwj;\ud83d\udcbb",
man_with_gua_pi_mao: "\ud83d\udc72",
man_with_turban: "\ud83d\udc73",
tangerine: "\ud83c\udf4a",
mans_shoe: "\ud83d\udc5e",
mantelpiece_clock: "\ud83d\udd70",
maple_leaf: "\ud83c\udf41",
martial_arts_uniform: "\ud83e\udd4b",
mask: "\ud83d\ude37",
massage_woman: "\ud83d\udc86",
massage_man: "\ud83d\udc86&zwj;\u2642\ufe0f",
meat_on_bone: "\ud83c\udf56",
medal_military: "\ud83c\udf96",
medal_sports: "\ud83c\udfc5",
mega: "\ud83d\udce3",
melon: "\ud83c\udf48",
memo: "\ud83d\udcdd",
men_wrestling: "\ud83e\udd3c&zwj;\u2642\ufe0f",
menorah: "\ud83d\udd4e",
mens: "\ud83d\udeb9",
metal: "\ud83e\udd18",
metro: "\ud83d\ude87",
microphone: "\ud83c\udfa4",
microscope: "\ud83d\udd2c",
milk_glass: "\ud83e\udd5b",
milky_way: "\ud83c\udf0c",
minibus: "\ud83d\ude90",
minidisc: "\ud83d\udcbd",
mobile_phone_off: "\ud83d\udcf4",
money_mouth_face: "\ud83e\udd11",
money_with_wings: "\ud83d\udcb8",
moneybag: "\ud83d\udcb0",
monkey: "\ud83d\udc12",
monkey_face: "\ud83d\udc35",
monorail: "\ud83d\ude9d",
moon: "\ud83c\udf14",
mortar_board: "\ud83c\udf93",
mosque: "\ud83d\udd4c",
motor_boat: "\ud83d\udee5",
motor_scooter: "\ud83d\udef5",
motorcycle: "\ud83c\udfcd",
motorway: "\ud83d\udee3",
mount_fuji: "\ud83d\uddfb",
mountain: "\u26f0",
mountain_biking_man: "\ud83d\udeb5",
mountain_biking_woman: "\ud83d\udeb5&zwj;\u2640\ufe0f",
mountain_cableway: "\ud83d\udea0",
mountain_railway: "\ud83d\ude9e",
mountain_snow: "\ud83c\udfd4",
mouse: "\ud83d\udc2d",
mouse2: "\ud83d\udc01",
movie_camera: "\ud83c\udfa5",
moyai: "\ud83d\uddff",
mrs_claus: "\ud83e\udd36",
muscle: "\ud83d\udcaa",
mushroom: "\ud83c\udf44",
musical_keyboard: "\ud83c\udfb9",
musical_note: "\ud83c\udfb5",
musical_score: "\ud83c\udfbc",
mute: "\ud83d\udd07",
nail_care: "\ud83d\udc85",
name_badge: "\ud83d\udcdb",
national_park: "\ud83c\udfde",
nauseated_face: "\ud83e\udd22",
necktie: "\ud83d\udc54",
negative_squared_cross_mark: "\u274e",
nerd_face: "\ud83e\udd13",
neutral_face: "\ud83d\ude10",
new: "\ud83c\udd95",
new_moon: "\ud83c\udf11",
new_moon_with_face: "\ud83c\udf1a",
newspaper: "\ud83d\udcf0",
newspaper_roll: "\ud83d\uddde",
next_track_button: "\u23ed",
ng: "\ud83c\udd96",
no_good_man: "\ud83d\ude45&zwj;\u2642\ufe0f",
no_good_woman: "\ud83d\ude45",
night_with_stars: "\ud83c\udf03",
no_bell: "\ud83d\udd15",
no_bicycles: "\ud83d\udeb3",
no_entry: "\u26d4\ufe0f",
no_entry_sign: "\ud83d\udeab",
no_mobile_phones: "\ud83d\udcf5",
no_mouth: "\ud83d\ude36",
no_pedestrians: "\ud83d\udeb7",
no_smoking: "\ud83d\udead",
"non-potable_water": "\ud83d\udeb1",
nose: "\ud83d\udc43",
notebook: "\ud83d\udcd3",
notebook_with_decorative_cover: "\ud83d\udcd4",
notes: "\ud83c\udfb6",
nut_and_bolt: "\ud83d\udd29",
o: "\u2b55\ufe0f",
o2: "\ud83c\udd7e\ufe0f",
ocean: "\ud83c\udf0a",
octopus: "\ud83d\udc19",
oden: "\ud83c\udf62",
office: "\ud83c\udfe2",
oil_drum: "\ud83d\udee2",
ok: "\ud83c\udd97",
ok_hand: "\ud83d\udc4c",
ok_man: "\ud83d\ude46&zwj;\u2642\ufe0f",
ok_woman: "\ud83d\ude46",
old_key: "\ud83d\udddd",
older_man: "\ud83d\udc74",
older_woman: "\ud83d\udc75",
om: "\ud83d\udd49",
on: "\ud83d\udd1b",
oncoming_automobile: "\ud83d\ude98",
oncoming_bus: "\ud83d\ude8d",
oncoming_police_car: "\ud83d\ude94",
oncoming_taxi: "\ud83d\ude96",
open_file_folder: "\ud83d\udcc2",
open_hands: "\ud83d\udc50",
open_mouth: "\ud83d\ude2e",
open_umbrella: "\u2602\ufe0f",
ophiuchus: "\u26ce",
orange_book: "\ud83d\udcd9",
orthodox_cross: "\u2626\ufe0f",
outbox_tray: "\ud83d\udce4",
owl: "\ud83e\udd89",
ox: "\ud83d\udc02",
package: "\ud83d\udce6",
page_facing_up: "\ud83d\udcc4",
page_with_curl: "\ud83d\udcc3",
pager: "\ud83d\udcdf",
paintbrush: "\ud83d\udd8c",
palm_tree: "\ud83c\udf34",
pancakes: "\ud83e\udd5e",
panda_face: "\ud83d\udc3c",
paperclip: "\ud83d\udcce",
paperclips: "\ud83d\udd87",
parasol_on_ground: "\u26f1",
parking: "\ud83c\udd7f\ufe0f",
part_alternation_mark: "\u303d\ufe0f",
partly_sunny: "\u26c5\ufe0f",
passenger_ship: "\ud83d\udef3",
passport_control: "\ud83d\udec2",
pause_button: "\u23f8",
peace_symbol: "\u262e\ufe0f",
peach: "\ud83c\udf51",
peanuts: "\ud83e\udd5c",
pear: "\ud83c\udf50",
pen: "\ud83d\udd8a",
pencil2: "\u270f\ufe0f",
penguin: "\ud83d\udc27",
pensive: "\ud83d\ude14",
performing_arts: "\ud83c\udfad",
persevere: "\ud83d\ude23",
person_fencing: "\ud83e\udd3a",
pouting_woman: "\ud83d\ude4e",
phone: "\u260e\ufe0f",
pick: "\u26cf",
pig: "\ud83d\udc37",
pig2: "\ud83d\udc16",
pig_nose: "\ud83d\udc3d",
pill: "\ud83d\udc8a",
pineapple: "\ud83c\udf4d",
ping_pong: "\ud83c\udfd3",
pisces: "\u2653\ufe0f",
pizza: "\ud83c\udf55",
place_of_worship: "\ud83d\uded0",
plate_with_cutlery: "\ud83c\udf7d",
play_or_pause_button: "\u23ef",
point_down: "\ud83d\udc47",
point_left: "\ud83d\udc48",
point_right: "\ud83d\udc49",
point_up: "\u261d\ufe0f",
point_up_2: "\ud83d\udc46",
police_car: "\ud83d\ude93",
policewoman: "\ud83d\udc6e&zwj;\u2640\ufe0f",
poodle: "\ud83d\udc29",
popcorn: "\ud83c\udf7f",
post_office: "\ud83c\udfe3",
postal_horn: "\ud83d\udcef",
postbox: "\ud83d\udcee",
potable_water: "\ud83d\udeb0",
potato: "\ud83e\udd54",
pouch: "\ud83d\udc5d",
poultry_leg: "\ud83c\udf57",
pound: "\ud83d\udcb7",
rage: "\ud83d\ude21",
pouting_cat: "\ud83d\ude3e",
pouting_man: "\ud83d\ude4e&zwj;\u2642\ufe0f",
pray: "\ud83d\ude4f",
prayer_beads: "\ud83d\udcff",
pregnant_woman: "\ud83e\udd30",
previous_track_button: "\u23ee",
prince: "\ud83e\udd34",
princess: "\ud83d\udc78",
printer: "\ud83d\udda8",
purple_heart: "\ud83d\udc9c",
purse: "\ud83d\udc5b",
pushpin: "\ud83d\udccc",
put_litter_in_its_place: "\ud83d\udeae",
question: "\u2753",
rabbit: "\ud83d\udc30",
rabbit2: "\ud83d\udc07",
racehorse: "\ud83d\udc0e",
racing_car: "\ud83c\udfce",
radio: "\ud83d\udcfb",
radio_button: "\ud83d\udd18",
radioactive: "\u2622\ufe0f",
railway_car: "\ud83d\ude83",
railway_track: "\ud83d\udee4",
rainbow: "\ud83c\udf08",
rainbow_flag: "\ud83c\udff3\ufe0f&zwj;\ud83c\udf08",
raised_back_of_hand: "\ud83e\udd1a",
raised_hand_with_fingers_splayed: "\ud83d\udd90",
raised_hands: "\ud83d\ude4c",
raising_hand_woman: "\ud83d\ude4b",
raising_hand_man: "\ud83d\ude4b&zwj;\u2642\ufe0f",
ram: "\ud83d\udc0f",
ramen: "\ud83c\udf5c",
rat: "\ud83d\udc00",
record_button: "\u23fa",
recycle: "\u267b\ufe0f",
red_circle: "\ud83d\udd34",
registered: "\u00ae\ufe0f",
relaxed: "\u263a\ufe0f",
relieved: "\ud83d\ude0c",
reminder_ribbon: "\ud83c\udf97",
repeat: "\ud83d\udd01",
repeat_one: "\ud83d\udd02",
rescue_worker_helmet: "\u26d1",
restroom: "\ud83d\udebb",
revolving_hearts: "\ud83d\udc9e",
rewind: "\u23ea",
rhinoceros: "\ud83e\udd8f",
ribbon: "\ud83c\udf80",
rice: "\ud83c\udf5a",
rice_ball: "\ud83c\udf59",
rice_cracker: "\ud83c\udf58",
rice_scene: "\ud83c\udf91",
right_anger_bubble: "\ud83d\uddef",
ring: "\ud83d\udc8d",
robot: "\ud83e\udd16",
rocket: "\ud83d\ude80",
rofl: "\ud83e\udd23",
roll_eyes: "\ud83d\ude44",
roller_coaster: "\ud83c\udfa2",
rooster: "\ud83d\udc13",
rose: "\ud83c\udf39",
rosette: "\ud83c\udff5",
rotating_light: "\ud83d\udea8",
round_pushpin: "\ud83d\udccd",
rowing_man: "\ud83d\udea3",
rowing_woman: "\ud83d\udea3&zwj;\u2640\ufe0f",
rugby_football: "\ud83c\udfc9",
running_man: "\ud83c\udfc3",
running_shirt_with_sash: "\ud83c\udfbd",
running_woman: "\ud83c\udfc3&zwj;\u2640\ufe0f",
sa: "\ud83c\ude02\ufe0f",
sagittarius: "\u2650\ufe0f",
sake: "\ud83c\udf76",
sandal: "\ud83d\udc61",
santa: "\ud83c\udf85",
satellite: "\ud83d\udce1",
saxophone: "\ud83c\udfb7",
school: "\ud83c\udfeb",
school_satchel: "\ud83c\udf92",
scissors: "\u2702\ufe0f",
scorpion: "\ud83e\udd82",
scorpius: "\u264f\ufe0f",
scream: "\ud83d\ude31",
scream_cat: "\ud83d\ude40",
scroll: "\ud83d\udcdc",
seat: "\ud83d\udcba",
secret: "\u3299\ufe0f",
see_no_evil: "\ud83d\ude48",
seedling: "\ud83c\udf31",
selfie: "\ud83e\udd33",
shallow_pan_of_food: "\ud83e\udd58",
shamrock: "\u2618\ufe0f",
shark: "\ud83e\udd88",
shaved_ice: "\ud83c\udf67",
sheep: "\ud83d\udc11",
shell: "\ud83d\udc1a",
shield: "\ud83d\udee1",
shinto_shrine: "\u26e9",
ship: "\ud83d\udea2",
shirt: "\ud83d\udc55",
shopping: "\ud83d\udecd",
shopping_cart: "\ud83d\uded2",
shower: "\ud83d\udebf",
shrimp: "\ud83e\udd90",
signal_strength: "\ud83d\udcf6",
six_pointed_star: "\ud83d\udd2f",
ski: "\ud83c\udfbf",
skier: "\u26f7",
skull: "\ud83d\udc80",
skull_and_crossbones: "\u2620\ufe0f",
sleeping: "\ud83d\ude34",
sleeping_bed: "\ud83d\udecc",
sleepy: "\ud83d\ude2a",
slightly_frowning_face: "\ud83d\ude41",
slightly_smiling_face: "\ud83d\ude42",
slot_machine: "\ud83c\udfb0",
small_airplane: "\ud83d\udee9",
small_blue_diamond: "\ud83d\udd39",
small_orange_diamond: "\ud83d\udd38",
small_red_triangle: "\ud83d\udd3a",
small_red_triangle_down: "\ud83d\udd3b",
smile: "\ud83d\ude04",
smile_cat: "\ud83d\ude38",
smiley: "\ud83d\ude03",
smiley_cat: "\ud83d\ude3a",
smiling_imp: "\ud83d\ude08",
smirk: "\ud83d\ude0f",
smirk_cat: "\ud83d\ude3c",
smoking: "\ud83d\udeac",
snail: "\ud83d\udc0c",
snake: "\ud83d\udc0d",
sneezing_face: "\ud83e\udd27",
snowboarder: "\ud83c\udfc2",
snowflake: "\u2744\ufe0f",
snowman: "\u26c4\ufe0f",
snowman_with_snow: "\u2603\ufe0f",
sob: "\ud83d\ude2d",
soccer: "\u26bd\ufe0f",
soon: "\ud83d\udd1c",
sos: "\ud83c\udd98",
sound: "\ud83d\udd09",
space_invader: "\ud83d\udc7e",
spades: "\u2660\ufe0f",
spaghetti: "\ud83c\udf5d",
sparkle: "\u2747\ufe0f",
sparkler: "\ud83c\udf87",
sparkles: "\u2728",
sparkling_heart: "\ud83d\udc96",
speak_no_evil: "\ud83d\ude4a",
speaker: "\ud83d\udd08",
speaking_head: "\ud83d\udde3",
speech_balloon: "\ud83d\udcac",
speedboat: "\ud83d\udea4",
spider: "\ud83d\udd77",
spider_web: "\ud83d\udd78",
spiral_calendar: "\ud83d\uddd3",
spiral_notepad: "\ud83d\uddd2",
spoon: "\ud83e\udd44",
squid: "\ud83e\udd91",
stadium: "\ud83c\udfdf",
star: "\u2b50\ufe0f",
star2: "\ud83c\udf1f",
star_and_crescent: "\u262a\ufe0f",
star_of_david: "\u2721\ufe0f",
stars: "\ud83c\udf20",
station: "\ud83d\ude89",
statue_of_liberty: "\ud83d\uddfd",
steam_locomotive: "\ud83d\ude82",
stew: "\ud83c\udf72",
stop_button: "\u23f9",
stop_sign: "\ud83d\uded1",
stopwatch: "\u23f1",
straight_ruler: "\ud83d\udccf",
strawberry: "\ud83c\udf53",
stuck_out_tongue: "\ud83d\ude1b",
stuck_out_tongue_closed_eyes: "\ud83d\ude1d",
stuck_out_tongue_winking_eye: "\ud83d\ude1c",
studio_microphone: "\ud83c\udf99",
stuffed_flatbread: "\ud83e\udd59",
sun_behind_large_cloud: "\ud83c\udf25",
sun_behind_rain_cloud: "\ud83c\udf26",
sun_behind_small_cloud: "\ud83c\udf24",
sun_with_face: "\ud83c\udf1e",
sunflower: "\ud83c\udf3b",
sunglasses: "\ud83d\ude0e",
sunny: "\u2600\ufe0f",
sunrise: "\ud83c\udf05",
sunrise_over_mountains: "\ud83c\udf04",
surfing_man: "\ud83c\udfc4",
surfing_woman: "\ud83c\udfc4&zwj;\u2640\ufe0f",
sushi: "\ud83c\udf63",
suspension_railway: "\ud83d\ude9f",
sweat: "\ud83d\ude13",
sweat_drops: "\ud83d\udca6",
sweat_smile: "\ud83d\ude05",
sweet_potato: "\ud83c\udf60",
swimming_man: "\ud83c\udfca",
swimming_woman: "\ud83c\udfca&zwj;\u2640\ufe0f",
symbols: "\ud83d\udd23",
synagogue: "\ud83d\udd4d",
syringe: "\ud83d\udc89",
taco: "\ud83c\udf2e",
tada: "\ud83c\udf89",
tanabata_tree: "\ud83c\udf8b",
taurus: "\u2649\ufe0f",
taxi: "\ud83d\ude95",
tea: "\ud83c\udf75",
telephone_receiver: "\ud83d\udcde",
telescope: "\ud83d\udd2d",
tennis: "\ud83c\udfbe",
tent: "\u26fa\ufe0f",
thermometer: "\ud83c\udf21",
thinking: "\ud83e\udd14",
thought_balloon: "\ud83d\udcad",
ticket: "\ud83c\udfab",
tickets: "\ud83c\udf9f",
tiger: "\ud83d\udc2f",
tiger2: "\ud83d\udc05",
timer_clock: "\u23f2",
tipping_hand_man: "\ud83d\udc81&zwj;\u2642\ufe0f",
tired_face: "\ud83d\ude2b",
tm: "\u2122\ufe0f",
toilet: "\ud83d\udebd",
tokyo_tower: "\ud83d\uddfc",
tomato: "\ud83c\udf45",
tongue: "\ud83d\udc45",
top: "\ud83d\udd1d",
tophat: "\ud83c\udfa9",
tornado: "\ud83c\udf2a",
trackball: "\ud83d\uddb2",
tractor: "\ud83d\ude9c",
traffic_light: "\ud83d\udea5",
train: "\ud83d\ude8b",
train2: "\ud83d\ude86",
tram: "\ud83d\ude8a",
triangular_flag_on_post: "\ud83d\udea9",
triangular_ruler: "\ud83d\udcd0",
trident: "\ud83d\udd31",
triumph: "\ud83d\ude24",
trolleybus: "\ud83d\ude8e",
trophy: "\ud83c\udfc6",
tropical_drink: "\ud83c\udf79",
tropical_fish: "\ud83d\udc20",
truck: "\ud83d\ude9a",
trumpet: "\ud83c\udfba",
tulip: "\ud83c\udf37",
tumbler_glass: "\ud83e\udd43",
turkey: "\ud83e\udd83",
turtle: "\ud83d\udc22",
tv: "\ud83d\udcfa",
twisted_rightwards_arrows: "\ud83d\udd00",
two_hearts: "\ud83d\udc95",
two_men_holding_hands: "\ud83d\udc6c",
two_women_holding_hands: "\ud83d\udc6d",
u5272: "\ud83c\ude39",
u5408: "\ud83c\ude34",
u55b6: "\ud83c\ude3a",
u6307: "\ud83c\ude2f\ufe0f",
u6708: "\ud83c\ude37\ufe0f",
u6709: "\ud83c\ude36",
u6e80: "\ud83c\ude35",
u7121: "\ud83c\ude1a\ufe0f",
u7533: "\ud83c\ude38",
u7981: "\ud83c\ude32",
u7a7a: "\ud83c\ude33",
umbrella: "\u2614\ufe0f",
unamused: "\ud83d\ude12",
underage: "\ud83d\udd1e",
unicorn: "\ud83e\udd84",
unlock: "\ud83d\udd13",
up: "\ud83c\udd99",
upside_down_face: "\ud83d\ude43",
v: "\u270c\ufe0f",
vertical_traffic_light: "\ud83d\udea6",
vhs: "\ud83d\udcfc",
vibration_mode: "\ud83d\udcf3",
video_camera: "\ud83d\udcf9",
video_game: "\ud83c\udfae",
violin: "\ud83c\udfbb",
virgo: "\u264d\ufe0f",
volcano: "\ud83c\udf0b",
volleyball: "\ud83c\udfd0",
vs: "\ud83c\udd9a",
vulcan_salute: "\ud83d\udd96",
walking_man: "\ud83d\udeb6",
walking_woman: "\ud83d\udeb6&zwj;\u2640\ufe0f",
waning_crescent_moon: "\ud83c\udf18",
waning_gibbous_moon: "\ud83c\udf16",
warning: "\u26a0\ufe0f",
wastebasket: "\ud83d\uddd1",
watch: "\u231a\ufe0f",
water_buffalo: "\ud83d\udc03",
watermelon: "\ud83c\udf49",
wave: "\ud83d\udc4b",
wavy_dash: "\u3030\ufe0f",
waxing_crescent_moon: "\ud83c\udf12",
wc: "\ud83d\udebe",
weary: "\ud83d\ude29",
wedding: "\ud83d\udc92",
weight_lifting_man: "\ud83c\udfcb\ufe0f",
weight_lifting_woman: "\ud83c\udfcb\ufe0f&zwj;\u2640\ufe0f",
whale: "\ud83d\udc33",
whale2: "\ud83d\udc0b",
wheel_of_dharma: "\u2638\ufe0f",
wheelchair: "\u267f\ufe0f",
white_check_mark: "\u2705",
white_circle: "\u26aa\ufe0f",
white_flag: "\ud83c\udff3\ufe0f",
white_flower: "\ud83d\udcae",
white_large_square: "\u2b1c\ufe0f",
white_medium_small_square: "\u25fd\ufe0f",
white_medium_square: "\u25fb\ufe0f",
white_small_square: "\u25ab\ufe0f",
white_square_button: "\ud83d\udd33",
wilted_flower: "\ud83e\udd40",
wind_chime: "\ud83c\udf90",
wind_face: "\ud83c\udf2c",
wine_glass: "\ud83c\udf77",
wink: "\ud83d\ude09",
wolf: "\ud83d\udc3a",
woman: "\ud83d\udc69",
woman_artist: "\ud83d\udc69&zwj;\ud83c\udfa8",
woman_astronaut: "\ud83d\udc69&zwj;\ud83d\ude80",
woman_cartwheeling: "\ud83e\udd38&zwj;\u2640\ufe0f",
woman_cook: "\ud83d\udc69&zwj;\ud83c\udf73",
woman_facepalming: "\ud83e\udd26&zwj;\u2640\ufe0f",
woman_factory_worker: "\ud83d\udc69&zwj;\ud83c\udfed",
woman_farmer: "\ud83d\udc69&zwj;\ud83c\udf3e",
woman_firefighter: "\ud83d\udc69&zwj;\ud83d\ude92",
woman_health_worker: "\ud83d\udc69&zwj;\u2695\ufe0f",
woman_judge: "\ud83d\udc69&zwj;\u2696\ufe0f",
woman_juggling: "\ud83e\udd39&zwj;\u2640\ufe0f",
woman_mechanic: "\ud83d\udc69&zwj;\ud83d\udd27",
woman_office_worker: "\ud83d\udc69&zwj;\ud83d\udcbc",
woman_pilot: "\ud83d\udc69&zwj;\u2708\ufe0f",
woman_playing_handball: "\ud83e\udd3e&zwj;\u2640\ufe0f",
woman_playing_water_polo: "\ud83e\udd3d&zwj;\u2640\ufe0f",
woman_scientist: "\ud83d\udc69&zwj;\ud83d\udd2c",
woman_shrugging: "\ud83e\udd37&zwj;\u2640\ufe0f",
woman_singer: "\ud83d\udc69&zwj;\ud83c\udfa4",
woman_student: "\ud83d\udc69&zwj;\ud83c\udf93",
woman_teacher: "\ud83d\udc69&zwj;\ud83c\udfeb",
woman_technologist: "\ud83d\udc69&zwj;\ud83d\udcbb",
woman_with_turban: "\ud83d\udc73&zwj;\u2640\ufe0f",
womans_clothes: "\ud83d\udc5a",
womans_hat: "\ud83d\udc52",
women_wrestling: "\ud83e\udd3c&zwj;\u2640\ufe0f",
womens: "\ud83d\udeba",
world_map: "\ud83d\uddfa",
worried: "\ud83d\ude1f",
wrench: "\ud83d\udd27",
writing_hand: "\u270d\ufe0f",
x: "\u274c",
yellow_heart: "\ud83d\udc9b",
yen: "\ud83d\udcb4",
yin_yang: "\u262f\ufe0f",
yum: "\ud83d\ude0b",
zap: "\u26a1\ufe0f",
zipper_mouth_face: "\ud83e\udd10",
zzz: "\ud83d\udca4",
/* special emojis :P */
octocat:
'<img alt=":octocat:" height="20" width="20" align="absmiddle" src="https://assets-cdn.github.com/images/icons/emoji/octocat.png">',
showdown:
"<span style=\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\">S</span>",
};
/**
* Created by Estevao on 31-05-2015.
*/
/**
* Showdown Converter class
* @class
* @param {object} [converterOptions]
* @returns {Converter}
*/
showdown.Converter = function (converterOptions) {
var /**
* Options used by this converter
* @private
* @type {{}}
*/
options = {},
/**
* Language extensions used by this converter
* @private
* @type {Array}
*/
langExtensions = [],
/**
* Output modifiers extensions used by this converter
* @private
* @type {Array}
*/
outputModifiers = [],
/**
* Event listeners
* @private
* @type {{}}
*/
listeners = {},
/**
* The flavor set in this converter
*/
setConvFlavor = setFlavor,
/**
* Metadata of the document
* @type {{parsed: {}, raw: string, format: string}}
*/
metadata = {
parsed: {},
raw: "",
format: "",
};
_constructor();
/**
* Converter constructor
* @private
*/
function _constructor() {
converterOptions = converterOptions || {};
for (var gOpt in globalOptions) {
if (globalOptions.hasOwnProperty(gOpt)) {
options[gOpt] = globalOptions[gOpt];
}
}
// Merge options
if (typeof converterOptions === "object") {
for (var opt in converterOptions) {
if (converterOptions.hasOwnProperty(opt)) {
options[opt] = converterOptions[opt];
}
}
} else {
throw Error(
"Converter expects the passed parameter to be an object, but " +
typeof converterOptions +
" was passed instead.",
);
}
if (options.extensions) {
showdown.helper.forEach(options.extensions, _parseExtension);
}
}
/**
* Parse extension
* @param {*} ext
* @param {string} [name='']
* @private
*/
function _parseExtension(ext, name) {
name = name || null;
// If it's a string, the extension was previously loaded
if (showdown.helper.isString(ext)) {
ext = showdown.helper.stdExtName(ext);
name = ext;
// LEGACY_SUPPORT CODE
if (showdown.extensions[ext]) {
console.warn(
"DEPRECATION WARNING: " +
ext +
" is an old extension that uses a deprecated loading method." +
"Please inform the developer that the extension should be updated!",
);
legacyExtensionLoading(showdown.extensions[ext], ext);
return;
// END LEGACY SUPPORT CODE
} else if (!showdown.helper.isUndefined(extensions[ext])) {
ext = extensions[ext];
} else {
throw Error(
'Extension "' +
ext +
'" could not be loaded. It was either not found or is not a valid extension.',
);
}
}
if (typeof ext === "function") {
ext = ext();
}
if (!showdown.helper.isArray(ext)) {
ext = [ext];
}
var validExt = validate(ext, name);
if (!validExt.valid) {
throw Error(validExt.error);
}
for (var i = 0; i < ext.length; ++i) {
switch (ext[i].type) {
case "lang":
langExtensions.push(ext[i]);
break;
case "output":
outputModifiers.push(ext[i]);
break;
}
if (ext[i].hasOwnProperty("listeners")) {
for (var ln in ext[i].listeners) {
if (ext[i].listeners.hasOwnProperty(ln)) {
listen(ln, ext[i].listeners[ln]);
}
}
}
}
}
/**
* LEGACY_SUPPORT
* @param {*} ext
* @param {string} name
*/
function legacyExtensionLoading(ext, name) {
if (typeof ext === "function") {
ext = ext(new showdown.Converter());
}
if (!showdown.helper.isArray(ext)) {
ext = [ext];
}
var valid = validate(ext, name);
if (!valid.valid) {
throw Error(valid.error);
}
for (var i = 0; i < ext.length; ++i) {
switch (ext[i].type) {
case "lang":
langExtensions.push(ext[i]);
break;
case "output":
outputModifiers.push(ext[i]);
break;
default: // should never reach here
throw Error("Extension loader error: Type unrecognized!!!");
}
}
}
/**
* Listen to an event
* @param {string} name
* @param {function} callback
*/
function listen(name, callback) {
if (!showdown.helper.isString(name)) {
throw Error(
"Invalid argument in converter.listen() method: name must be a string, but " +
typeof name +
" given",
);
}
if (typeof callback !== "function") {
throw Error(
"Invalid argument in converter.listen() method: callback must be a function, but " +
typeof callback +
" given",
);
}
if (!listeners.hasOwnProperty(name)) {
listeners[name] = [];
}
listeners[name].push(callback);
}
function rTrimInputText(text) {
var rsp = text.match(/^\s*/)[0].length,
rgx = new RegExp("^\\s{0," + rsp + "}", "gm");
return text.replace(rgx, "");
}
/**
* Dispatch an event
* @private
* @param {string} evtName Event name
* @param {string} text Text
* @param {{}} options Converter Options
* @param {{}} globals
* @returns {string}
*/
this._dispatch = function dispatch(evtName, text, options, globals) {
if (listeners.hasOwnProperty(evtName)) {
for (var ei = 0; ei < listeners[evtName].length; ++ei) {
var nText = listeners[evtName][ei](
evtName,
text,
this,
options,
globals,
);
if (nText && typeof nText !== "undefined") {
text = nText;
}
}
}
return text;
};
/**
* Listen to an event
* @param {string} name
* @param {function} callback
* @returns {showdown.Converter}
*/
this.listen = function (name, callback) {
listen(name, callback);
return this;
};
/**
* Converts a markdown string into HTML
* @param {string} text
* @returns {*}
*/
this.makeHtml = function (text) {
//check if text is not falsy
if (!text) {
return text;
}
var globals = {
gHtmlBlocks: [],
gHtmlMdBlocks: [],
gHtmlSpans: [],
gUrls: {},
gTitles: {},
gDimensions: {},
gListLevel: 0,
hashLinkCounts: {},
langExtensions: langExtensions,
outputModifiers: outputModifiers,
converter: this,
ghCodeBlocks: [],
metadata: {
parsed: {},
raw: "",
format: "",
},
};
// This lets us use ¨ trema as an escape char to avoid md5 hashes
// The choice of character is arbitrary; anything that isn't
// magic in Markdown will work.
text = text.replace(/¨/g, "¨T");
// Replace $ with ¨D
// RegExp interprets $ as a special character
// when it's in a replacement string
text = text.replace(/\$/g, "¨D");
// Standardize line endings
text = text.replace(/\r\n/g, "\n"); // DOS to Unix
text = text.replace(/\r/g, "\n"); // Mac to Unix
// Stardardize line spaces
text = text.replace(/\u00A0/g, "&nbsp;");
if (options.smartIndentationFix) {
text = rTrimInputText(text);
}
// Make sure text begins and ends with a couple of newlines:
text = "\n\n" + text + "\n\n";
// detab
text = showdown.subParser("detab")(text, options, globals);
/**
* Strip any lines consisting only of spaces and tabs.
* This makes subsequent regexs easier to write, because we can
* match consecutive blank lines with /\n+/ instead of something
* contorted like /[ \t]*\n+/
*/
text = text.replace(/^[ \t]+$/gm, "");
//run languageExtensions
showdown.helper.forEach(langExtensions, function (ext) {
text = showdown.subParser("runExtension")(
ext,
text,
options,
globals,
);
});
// run the sub parsers
text = showdown.subParser("metadata")(text, options, globals);
text = showdown.subParser("hashPreCodeTags")(text, options, globals);
text = showdown.subParser("githubCodeBlocks")(text, options, globals);
text = showdown.subParser("hashHTMLBlocks")(text, options, globals);
text = showdown.subParser("hashCodeTags")(text, options, globals);
text = showdown.subParser("stripLinkDefinitions")(
text,
options,
globals,
);
text = showdown.subParser("blockGamut")(text, options, globals);
text = showdown.subParser("unhashHTMLSpans")(text, options, globals);
text = showdown.subParser("unescapeSpecialChars")(
text,
options,
globals,
);
// attacklab: Restore dollar signs
text = text.replace(/¨D/g, "$$");
// attacklab: Restore tremas
text = text.replace(/¨T/g, "¨");
// render a complete html document instead of a partial if the option is enabled
text = showdown.subParser("completeHTMLDocument")(
text,
options,
globals,
);
// Run output modifiers
showdown.helper.forEach(outputModifiers, function (ext) {
text = showdown.subParser("runExtension")(
ext,
text,
options,
globals,
);
});
// update metadata
metadata = globals.metadata;
return text;
};
/**
* Converts an HTML string into a markdown string
* @param src
* @param [HTMLParser] A WHATWG DOM and HTML parser, such as JSDOM. If none is supplied, window.document will be used.
* @returns {string}
*/
this.makeMarkdown = this.makeMd = function (src, HTMLParser) {
// replace \r\n with \n
src = src.replace(/\r\n/g, "\n");
src = src.replace(/\r/g, "\n"); // old macs
// due to an edge case, we need to find this: > <
// to prevent removing of non silent white spaces
// ex: <em>this is</em> <strong>sparta</strong>
src = src.replace(/>[ \t]+</, ">¨NBSP;<");
if (!HTMLParser) {
if (window && window.document) {
HTMLParser = window.document;
} else {
throw new Error(
"HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM",
);
}
}
var doc = HTMLParser.createElement("div");
doc.innerHTML = src;
var globals = {
preList: substitutePreCodeTags(doc),
};
// remove all newlines and collapse spaces
clean(doc);
// some stuff, like accidental reference links must now be escaped
// TODO
// doc.innerHTML = doc.innerHTML.replace(/\[[\S\t ]]/);
var nodes = doc.childNodes,
mdDoc = "";
for (var i = 0; i < nodes.length; i++) {
mdDoc += showdown.subParser("makeMarkdown.node")(nodes[i], globals);
}
function clean(node) {
for (var n = 0; n < node.childNodes.length; ++n) {
var child = node.childNodes[n];
if (child.nodeType === 3) {
if (!/\S/.test(child.nodeValue)) {
node.removeChild(child);
--n;
} else {
child.nodeValue = child.nodeValue.split("\n").join(" ");
child.nodeValue = child.nodeValue.replace(/(\s)+/g, "$1");
}
} else if (child.nodeType === 1) {
clean(child);
}
}
}
// find all pre tags and replace contents with placeholder
// we need this so that we can remove all indentation from html
// to ease up parsing
function substitutePreCodeTags(doc) {
var pres = doc.querySelectorAll("pre"),
presPH = [];
for (var i = 0; i < pres.length; ++i) {
if (
pres[i].childElementCount === 1 &&
pres[i].firstChild.tagName.toLowerCase() === "code"
) {
var content = pres[i].firstChild.innerHTML.trim(),
language =
pres[i].firstChild.getAttribute("data-language") || "";
// if data-language attribute is not defined, then we look for class language-*
if (language === "") {
var classes = pres[i].firstChild.className.split(" ");
for (var c = 0; c < classes.length; ++c) {
var matches = classes[c].match(/^language-(.+)$/);
if (matches !== null) {
language = matches[1];
break;
}
}
}
// unescape html entities in content
content = showdown.helper.unescapeHTMLEntities(content);
presPH.push(content);
pres[i].outerHTML =
'<precode language="' +
language +
'" precodenum="' +
i.toString() +
'"></precode>';
} else {
presPH.push(pres[i].innerHTML);
pres[i].innerHTML = "";
pres[i].setAttribute("prenum", i.toString());
}
}
return presPH;
}
return mdDoc;
};
/**
* Set an option of this Converter instance
* @param {string} key
* @param {*} value
*/
this.setOption = function (key, value) {
options[key] = value;
};
/**
* Get the option of this Converter instance
* @param {string} key
* @returns {*}
*/
this.getOption = function (key) {
return options[key];
};
/**
* Get the options of this Converter instance
* @returns {{}}
*/
this.getOptions = function () {
return options;
};
/**
* Add extension to THIS converter
* @param {{}} extension
* @param {string} [name=null]
*/
this.addExtension = function (extension, name) {
name = name || null;
_parseExtension(extension, name);
};
/**
* Use a global registered extension with THIS converter
* @param {string} extensionName Name of the previously registered extension
*/
this.useExtension = function (extensionName) {
_parseExtension(extensionName);
};
/**
* Set the flavor THIS converter should use
* @param {string} name
*/
this.setFlavor = function (name) {
if (!flavor.hasOwnProperty(name)) {
throw Error(name + " flavor was not found");
}
var preset = flavor[name];
setConvFlavor = name;
for (var option in preset) {
if (preset.hasOwnProperty(option)) {
options[option] = preset[option];
}
}
};
/**
* Get the currently set flavor of this converter
* @returns {string}
*/
this.getFlavor = function () {
return setConvFlavor;
};
/**
* Remove an extension from THIS converter.
* Note: This is a costly operation. It's better to initialize a new converter
* and specify the extensions you wish to use
* @param {Array} extension
*/
this.removeExtension = function (extension) {
if (!showdown.helper.isArray(extension)) {
extension = [extension];
}
for (var a = 0; a < extension.length; ++a) {
var ext = extension[a];
for (var i = 0; i < langExtensions.length; ++i) {
if (langExtensions[i] === ext) {
langExtensions[i].splice(i, 1);
}
}
for (var ii = 0; ii < outputModifiers.length; ++i) {
if (outputModifiers[ii] === ext) {
outputModifiers[ii].splice(i, 1);
}
}
}
};
/**
* Get all extension of THIS converter
* @returns {{language: Array, output: Array}}
*/
this.getAllExtensions = function () {
return {
language: langExtensions,
output: outputModifiers,
};
};
/**
* Get the metadata of the previously parsed document
* @param raw
* @returns {string|{}}
*/
this.getMetadata = function (raw) {
if (raw) {
return metadata.raw;
} else {
return metadata.parsed;
}
};
/**
* Get the metadata format of the previously parsed document
* @returns {string}
*/
this.getMetadataFormat = function () {
return metadata.format;
};
/**
* Private: set a single key, value metadata pair
* @param {string} key
* @param {string} value
*/
this._setMetadataPair = function (key, value) {
metadata.parsed[key] = value;
};
/**
* Private: set metadata format
* @param {string} format
*/
this._setMetadataFormat = function (format) {
metadata.format = format;
};
/**
* Private: set metadata raw text
* @param {string} raw
*/
this._setMetadataRaw = function (raw) {
metadata.raw = raw;
};
};
/**
* Turn Markdown link shortcuts into XHTML <a> tags.
*/
showdown.subParser("anchors", function (text, options, globals) {
text = globals.converter._dispatch(
"anchors.before",
text,
options,
globals,
);
var writeAnchorTag = function (
wholeMatch,
linkText,
linkId,
url,
m5,
m6,
title,
) {
if (showdown.helper.isUndefined(title)) {
title = "";
}
linkId = linkId.toLowerCase();
// Special case for explicit empty url
if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) {
url = "";
} else if (!url) {
if (!linkId) {
// lower-case and turn embedded newlines into spaces
linkId = linkText.toLowerCase().replace(/ ?\n/g, " ");
}
url = "#" + linkId;
if (!showdown.helper.isUndefined(globals.gUrls[linkId])) {
url = globals.gUrls[linkId];
if (!showdown.helper.isUndefined(globals.gTitles[linkId])) {
title = globals.gTitles[linkId];
}
} else {
return wholeMatch;
}
}
//url = showdown.helper.escapeCharacters(url, '*_', false); // replaced line to improve performance
url = url.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
var result = '<a href="' + url + '"';
if (title !== "" && title !== null) {
title = title.replace(/"/g, "&quot;");
//title = showdown.helper.escapeCharacters(title, '*_', false); // replaced line to improve performance
title = title.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
result += ' title="' + title + '"';
}
// optionLinksInNewWindow only applies
// to external links. Hash links (#) open in same page
if (options.openLinksInNewWindow && !/^#/.test(url)) {
// escaped _
result += ' rel="noopener noreferrer" target="¨E95Eblank"';
}
result += ">" + linkText + "</a>";
return result;
};
// First, handle reference-style links: [link text] [id]
text = text.replace(
/\[((?:\[[^\]]*]|[^\[\]])*)] ?(?:\n *)?\[(.*?)]()()()()/g,
writeAnchorTag,
);
// Next, inline-style links: [link text](url "optional title")
// cases with crazy urls like ./image/cat1).png
text = text.replace(
/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
writeAnchorTag,
);
// normal cases
text = text.replace(
/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[ \t]*((["'])([^"]*?)\5))?[ \t]?\)/g,
writeAnchorTag,
);
// handle reference-style shortcuts: [link text]
// These must come last in case you've also got [link test][1]
// or [link test](/foo)
text = text.replace(/\[([^\[\]]+)]()()()()()/g, writeAnchorTag);
// Lastly handle GithubMentions if option is enabled
if (options.ghMentions) {
text = text.replace(
/(^|\s)(\\)?(@([a-z\d]+(?:[a-z\d.-]+?[a-z\d]+)*))/gim,
function (wm, st, escape, mentions, username) {
if (escape === "\\") {
return st + mentions;
}
//check if options.ghMentionsLink is a string
if (!showdown.helper.isString(options.ghMentionsLink)) {
throw new Error("ghMentionsLink option must be a string");
}
var lnk = options.ghMentionsLink.replace(/\{u}/g, username),
target = "";
if (options.openLinksInNewWindow) {
target = ' rel="noopener noreferrer" target="¨E95Eblank"';
}
return (
st + '<a href="' + lnk + '"' + target + ">" + mentions + "</a>"
);
},
);
}
text = globals.converter._dispatch(
"anchors.after",
text,
options,
globals,
);
return text;
});
// url allowed chars [a-z\d_.~:/?#[]@!$&'()*+,;=-]
var simpleURLRegex =
/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,
simpleURLRegex2 =
/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,
delimUrlRegex = /()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,
simpleMailRegex =
/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,
delimMailRegex =
/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,
replaceLink = function (options) {
return function (
wm,
leadingMagicChars,
link,
m2,
m3,
trailingPunctuation,
trailingMagicChars,
) {
link = link.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
var lnkTxt = link,
append = "",
target = "",
lmc = leadingMagicChars || "",
tmc = trailingMagicChars || "";
if (/^www\./i.test(link)) {
link = link.replace(/^www\./i, "http://www.");
}
if (
options.excludeTrailingPunctuationFromURLs &&
trailingPunctuation
) {
append = trailingPunctuation;
}
if (options.openLinksInNewWindow) {
target = ' rel="noopener noreferrer" target="¨E95Eblank"';
}
return (
lmc +
'<a href="' +
link +
'"' +
target +
">" +
lnkTxt +
"</a>" +
append +
tmc
);
};
},
replaceMail = function (options, globals) {
return function (wholeMatch, b, mail) {
var href = "mailto:";
b = b || "";
mail = showdown.subParser("unescapeSpecialChars")(
mail,
options,
globals,
);
if (options.encodeEmails) {
href = showdown.helper.encodeEmailAddress(href + mail);
mail = showdown.helper.encodeEmailAddress(mail);
} else {
href = href + mail;
}
return b + '<a href="' + href + '">' + mail + "</a>";
};
};
showdown.subParser("autoLinks", function (text, options, globals) {
text = globals.converter._dispatch(
"autoLinks.before",
text,
options,
globals,
);
text = text.replace(delimUrlRegex, replaceLink(options));
text = text.replace(delimMailRegex, replaceMail(options, globals));
text = globals.converter._dispatch(
"autoLinks.after",
text,
options,
globals,
);
return text;
});
showdown.subParser(
"simplifiedAutoLinks",
function (text, options, globals) {
if (!options.simplifiedAutoLink) {
return text;
}
text = globals.converter._dispatch(
"simplifiedAutoLinks.before",
text,
options,
globals,
);
if (options.excludeTrailingPunctuationFromURLs) {
text = text.replace(simpleURLRegex2, replaceLink(options));
} else {
text = text.replace(simpleURLRegex, replaceLink(options));
}
text = text.replace(simpleMailRegex, replaceMail(options, globals));
text = globals.converter._dispatch(
"simplifiedAutoLinks.after",
text,
options,
globals,
);
return text;
},
);
/**
* These are all the transformations that form block-level
* tags like paragraphs, headers, and list items.
*/
showdown.subParser("blockGamut", function (text, options, globals) {
text = globals.converter._dispatch(
"blockGamut.before",
text,
options,
globals,
);
// we parse blockquotes first so that we can have headings and hrs
// inside blockquotes
text = showdown.subParser("blockQuotes")(text, options, globals);
text = showdown.subParser("headers")(text, options, globals);
// Do Horizontal Rules:
text = showdown.subParser("horizontalRule")(text, options, globals);
text = showdown.subParser("lists")(text, options, globals);
text = showdown.subParser("codeBlocks")(text, options, globals);
text = showdown.subParser("tables")(text, options, globals);
// We already ran _HashHTMLBlocks() before, in Markdown(), but that
// was to escape raw HTML in the original Markdown source. This time,
// we're escaping the markup we've just created, so that we don't wrap
// <p> tags around block-level tags.
text = showdown.subParser("hashHTMLBlocks")(text, options, globals);
text = showdown.subParser("paragraphs")(text, options, globals);
text = globals.converter._dispatch(
"blockGamut.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("blockQuotes", function (text, options, globals) {
text = globals.converter._dispatch(
"blockQuotes.before",
text,
options,
globals,
);
// add a couple extra lines after the text and endtext mark
text = text + "\n\n";
var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm;
if (options.splitAdjacentBlockquotes) {
rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm;
}
text = text.replace(rgx, function (bq) {
// attacklab: hack around Konqueror 3.5.4 bug:
// "----------bug".replace(/^-/g,"") == "bug"
bq = bq.replace(/^[ \t]*>[ \t]?/gm, ""); // trim one level of quoting
// attacklab: clean up hack
bq = bq.replace(/¨0/g, "");
bq = bq.replace(/^[ \t]+$/gm, ""); // trim whitespace-only lines
bq = showdown.subParser("githubCodeBlocks")(bq, options, globals);
bq = showdown.subParser("blockGamut")(bq, options, globals); // recurse
bq = bq.replace(/(^|\n)/g, "$1 ");
// These leading spaces screw with <pre> content, so we need to fix that:
bq = bq.replace(
/(\s*<pre>[^\r]+?<\/pre>)/gm,
function (wholeMatch, m1) {
var pre = m1;
// attacklab: hack around Konqueror 3.5.4 bug:
pre = pre.replace(/^ /gm, "¨0");
pre = pre.replace(/¨0/g, "");
return pre;
},
);
return showdown.subParser("hashBlock")(
"<blockquote>\n" + bq + "\n</blockquote>",
options,
globals,
);
});
text = globals.converter._dispatch(
"blockQuotes.after",
text,
options,
globals,
);
return text;
});
/**
* Process Markdown `<pre><code>` blocks.
*/
showdown.subParser("codeBlocks", function (text, options, globals) {
text = globals.converter._dispatch(
"codeBlocks.before",
text,
options,
globals,
);
// sentinel workarounds for lack of \A and \Z, safari\khtml bug
text += "¨0";
var pattern =
/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g;
text = text.replace(pattern, function (wholeMatch, m1, m2) {
var codeblock = m1,
nextChar = m2,
end = "\n";
codeblock = showdown.subParser("outdent")(codeblock, options, globals);
codeblock = showdown.subParser("encodeCode")(
codeblock,
options,
globals,
);
codeblock = showdown.subParser("detab")(codeblock, options, globals);
codeblock = codeblock.replace(/^\n+/g, ""); // trim leading newlines
codeblock = codeblock.replace(/\n+$/g, ""); // trim trailing newlines
if (options.omitExtraWLInCodeBlocks) {
end = "";
}
codeblock = "<pre><code>" + codeblock + end + "</code></pre>";
return (
showdown.subParser("hashBlock")(codeblock, options, globals) +
nextChar
);
});
// strip sentinel
text = text.replace(/¨0/, "");
text = globals.converter._dispatch(
"codeBlocks.after",
text,
options,
globals,
);
return text;
});
/**
*
* * Backtick quotes are used for <code></code> spans.
*
* * You can use multiple backticks as the delimiters if you want to
* include literal backticks in the code span. So, this input:
*
* Just type ``foo `bar` baz`` at the prompt.
*
* Will translate to:
*
* <p>Just type <code>foo `bar` baz</code> at the prompt.</p>
*
* There's no arbitrary limit to the number of backticks you
* can use as delimters. If you need three consecutive backticks
* in your code, use four for delimiters, etc.
*
* * You can use spaces to get literal backticks at the edges:
*
* ... type `` `bar` `` ...
*
* Turns to:
*
* ... type <code>`bar`</code> ...
*/
showdown.subParser("codeSpans", function (text, options, globals) {
text = globals.converter._dispatch(
"codeSpans.before",
text,
options,
globals,
);
if (typeof text === "undefined") {
text = "";
}
text = text.replace(
/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
function (wholeMatch, m1, m2, m3) {
var c = m3;
c = c.replace(/^([ \t]*)/g, ""); // leading whitespace
c = c.replace(/[ \t]*$/g, ""); // trailing whitespace
c = showdown.subParser("encodeCode")(c, options, globals);
c = m1 + "<code>" + c + "</code>";
c = showdown.subParser("hashHTMLSpans")(c, options, globals);
return c;
},
);
text = globals.converter._dispatch(
"codeSpans.after",
text,
options,
globals,
);
return text;
});
/**
* Create a full HTML document from the processed markdown
*/
showdown.subParser(
"completeHTMLDocument",
function (text, options, globals) {
if (!options.completeHTMLDocument) {
return text;
}
text = globals.converter._dispatch(
"completeHTMLDocument.before",
text,
options,
globals,
);
var doctype = "html",
doctypeParsed = "<!DOCTYPE HTML>\n",
title = "",
charset = '<meta charset="utf-8">\n',
lang = "",
metadata = "";
if (typeof globals.metadata.parsed.doctype !== "undefined") {
doctypeParsed =
"<!DOCTYPE " + globals.metadata.parsed.doctype + ">\n";
doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
if (doctype === "html" || doctype === "html5") {
charset = '<meta charset="utf-8">';
}
}
for (var meta in globals.metadata.parsed) {
if (globals.metadata.parsed.hasOwnProperty(meta)) {
switch (meta.toLowerCase()) {
case "doctype":
break;
case "title":
title =
"<title>" + globals.metadata.parsed.title + "</title>\n";
break;
case "charset":
if (doctype === "html" || doctype === "html5") {
charset =
'<meta charset="' +
globals.metadata.parsed.charset +
'">\n';
} else {
charset =
'<meta name="charset" content="' +
globals.metadata.parsed.charset +
'">\n';
}
break;
case "language":
case "lang":
lang = ' lang="' + globals.metadata.parsed[meta] + '"';
metadata +=
'<meta name="' +
meta +
'" content="' +
globals.metadata.parsed[meta] +
'">\n';
break;
default:
metadata +=
'<meta name="' +
meta +
'" content="' +
globals.metadata.parsed[meta] +
'">\n';
}
}
}
text =
doctypeParsed +
"<html" +
lang +
">\n<head>\n" +
title +
charset +
metadata +
"</head>\n<body>\n" +
text.trim() +
"\n</body>\n</html>";
text = globals.converter._dispatch(
"completeHTMLDocument.after",
text,
options,
globals,
);
return text;
},
);
/**
* Convert all tabs to spaces
*/
showdown.subParser("detab", function (text, options, globals) {
text = globals.converter._dispatch(
"detab.before",
text,
options,
globals,
);
// expand first n-1 tabs
text = text.replace(/\t(?=\t)/g, " "); // g_tab_width
// replace the nth with two sentinels
text = text.replace(/\t/g, "¨A¨B");
// use the sentinel to anchor our regex so it doesn't explode
text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {
var leadingText = m1,
numSpaces = 4 - (leadingText.length % 4); // g_tab_width
// there *must* be a better way to do this:
for (var i = 0; i < numSpaces; i++) {
leadingText += " ";
}
return leadingText;
});
// clean up sentinels
text = text.replace(/¨A/g, " "); // g_tab_width
text = text.replace(/¨B/g, "");
text = globals.converter._dispatch("detab.after", text, options, globals);
return text;
});
showdown.subParser("ellipsis", function (text, options, globals) {
text = globals.converter._dispatch(
"ellipsis.before",
text,
options,
globals,
);
text = text.replace(/\.\.\./g, "…");
text = globals.converter._dispatch(
"ellipsis.after",
text,
options,
globals,
);
return text;
});
/**
* Turn emoji codes into emojis
*
* List of supported emojis: https://github.com/showdownjs/showdown/wiki/Emojis
*/
showdown.subParser("emoji", function (text, options, globals) {
if (!options.emoji) {
return text;
}
text = globals.converter._dispatch(
"emoji.before",
text,
options,
globals,
);
var emojiRgx = /:([\S]+?):/g;
text = text.replace(emojiRgx, function (wm, emojiCode) {
if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {
return showdown.helper.emojis[emojiCode];
}
return wm;
});
text = globals.converter._dispatch("emoji.after", text, options, globals);
return text;
});
/**
* Smart processing for ampersands and angle brackets that need to be encoded.
*/
showdown.subParser(
"encodeAmpsAndAngles",
function (text, options, globals) {
text = globals.converter._dispatch(
"encodeAmpsAndAngles.before",
text,
options,
globals,
);
// Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
// http://bumppo.net/projects/amputator/
text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, "&amp;");
// Encode naked <'s
text = text.replace(/<(?![a-z\/?$!])/gi, "&lt;");
// Encode <
text = text.replace(/</g, "&lt;");
// Encode >
text = text.replace(/>/g, "&gt;");
text = globals.converter._dispatch(
"encodeAmpsAndAngles.after",
text,
options,
globals,
);
return text;
},
);
/**
* Returns the string, with after processing the following backslash escape sequences.
*
* attacklab: The polite way to do this is with the new escapeCharacters() function:
*
* text = escapeCharacters(text,"\\",true);
* text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
*
* ...but we're sidestepping its use of the (slow) RegExp constructor
* as an optimization for Firefox. This function gets called a LOT.
*/
showdown.subParser(
"encodeBackslashEscapes",
function (text, options, globals) {
text = globals.converter._dispatch(
"encodeBackslashEscapes.before",
text,
options,
globals,
);
text = text.replace(
/\\(\\)/g,
showdown.helper.escapeCharactersCallback,
);
text = text.replace(
/\\([`*_{}\[\]()>#+.!~=|-])/g,
showdown.helper.escapeCharactersCallback,
);
text = globals.converter._dispatch(
"encodeBackslashEscapes.after",
text,
options,
globals,
);
return text;
},
);
/**
* Encode/escape certain characters inside Markdown code runs.
* The point is that in code, these characters are literals,
* and lose their special Markdown meanings.
*/
showdown.subParser("encodeCode", function (text, options, globals) {
text = globals.converter._dispatch(
"encodeCode.before",
text,
options,
globals,
);
// Encode all ampersands; HTML entities are not
// entities within a Markdown code span.
text = text
.replace(/&/g, "&amp;")
// Do the angle bracket song and dance:
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
// Now, escape characters that are magic in Markdown:
.replace(
/([*_{}\[\]\\=~-])/g,
showdown.helper.escapeCharactersCallback,
);
text = globals.converter._dispatch(
"encodeCode.after",
text,
options,
globals,
);
return text;
});
/**
* Within tags -- meaning between < and > -- encode [\ ` * _ ~ =] so they
* don't conflict with their use in Markdown for code, italics and strong.
*/
showdown.subParser(
"escapeSpecialCharsWithinTagAttributes",
function (text, options, globals) {
text = globals.converter._dispatch(
"escapeSpecialCharsWithinTagAttributes.before",
text,
options,
globals,
);
// Build a regex to find HTML tags.
var tags = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,
comments = /<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;
text = text.replace(tags, function (wholeMatch) {
return wholeMatch
.replace(/(.)<\/?code>(?=.)/g, "$1`")
.replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
});
text = text.replace(comments, function (wholeMatch) {
return wholeMatch.replace(
/([\\`*_~=|])/g,
showdown.helper.escapeCharactersCallback,
);
});
text = globals.converter._dispatch(
"escapeSpecialCharsWithinTagAttributes.after",
text,
options,
globals,
);
return text;
},
);
/**
* Handle github codeblocks prior to running HashHTML so that
* HTML contained within the codeblock gets escaped properly
* Example:
* ```ruby
* def hello_world(x)
* puts "Hello, #{x}"
* end
* ```
*/
showdown.subParser("githubCodeBlocks", function (text, options, globals) {
// early exit if option is not enabled
if (!options.ghCodeBlocks) {
return text;
}
text = globals.converter._dispatch(
"githubCodeBlocks.before",
text,
options,
globals,
);
text += "¨0";
text = text.replace(
/(?:^|\n)(?: {0,3})(```+|~~~+)(?: *)([^\s`~]*)\n([\s\S]*?)\n(?: {0,3})\1/g,
function (wholeMatch, delim, language, codeblock) {
var end = options.omitExtraWLInCodeBlocks ? "" : "\n";
// First parse the github code block
codeblock = showdown.subParser("encodeCode")(
codeblock,
options,
globals,
);
codeblock = showdown.subParser("detab")(codeblock, options, globals);
codeblock = codeblock.replace(/^\n+/g, ""); // trim leading newlines
codeblock = codeblock.replace(/\n+$/g, ""); // trim trailing whitespace
codeblock =
"<pre><code" +
(language
? ' class="' + language + " language-" + language + '"'
: "") +
">" +
codeblock +
end +
"</code></pre>";
codeblock = showdown.subParser("hashBlock")(
codeblock,
options,
globals,
);
// Since GHCodeblocks can be false positives, we need to
// store the primitive text and the parsed text in a global var,
// and then return a token
return (
"\n\n¨G" +
(globals.ghCodeBlocks.push({
text: wholeMatch,
codeblock: codeblock,
}) -
1) +
"G\n\n"
);
},
);
// attacklab: strip sentinel
text = text.replace(/¨0/, "");
return globals.converter._dispatch(
"githubCodeBlocks.after",
text,
options,
globals,
);
});
showdown.subParser("hashBlock", function (text, options, globals) {
text = globals.converter._dispatch(
"hashBlock.before",
text,
options,
globals,
);
text = text.replace(/(^\n+|\n+$)/g, "");
text = "\n\n¨K" + (globals.gHtmlBlocks.push(text) - 1) + "K\n\n";
text = globals.converter._dispatch(
"hashBlock.after",
text,
options,
globals,
);
return text;
});
/**
* Hash and escape <code> elements that should not be parsed as markdown
*/
showdown.subParser("hashCodeTags", function (text, options, globals) {
text = globals.converter._dispatch(
"hashCodeTags.before",
text,
options,
globals,
);
var repFunc = function (wholeMatch, match, left, right) {
var codeblock =
left +
showdown.subParser("encodeCode")(match, options, globals) +
right;
return "¨C" + (globals.gHtmlSpans.push(codeblock) - 1) + "C";
};
// Hash naked <code>
text = showdown.helper.replaceRecursiveRegExp(
text,
repFunc,
"<code\\b[^>]*>",
"</code>",
"gim",
);
text = globals.converter._dispatch(
"hashCodeTags.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("hashElement", function (text, options, globals) {
return function (wholeMatch, m1) {
var blockText = m1;
// Undo double lines
blockText = blockText.replace(/\n\n/g, "\n");
blockText = blockText.replace(/^\n/, "");
// strip trailing blank lines
blockText = blockText.replace(/\n+$/g, "");
// Replace the element text with a marker ("¨KxK" where x is its key)
blockText =
"\n\n¨K" + (globals.gHtmlBlocks.push(blockText) - 1) + "K\n\n";
return blockText;
};
});
showdown.subParser("hashHTMLBlocks", function (text, options, globals) {
text = globals.converter._dispatch(
"hashHTMLBlocks.before",
text,
options,
globals,
);
var blockTags = [
"pre",
"div",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"blockquote",
"table",
"dl",
"ol",
"ul",
"script",
"noscript",
"form",
"fieldset",
"iframe",
"math",
"style",
"section",
"header",
"footer",
"nav",
"article",
"aside",
"address",
"audio",
"canvas",
"figure",
"hgroup",
"output",
"video",
"p",
],
repFunc = function (wholeMatch, match, left, right) {
var txt = wholeMatch;
// check if this html element is marked as markdown
// if so, it's contents should be parsed as markdown
if (left.search(/\bmarkdown\b/) !== -1) {
txt = left + globals.converter.makeHtml(match) + right;
}
return "\n\n¨K" + (globals.gHtmlBlocks.push(txt) - 1) + "K\n\n";
};
if (options.backslashEscapesHTMLTags) {
// encode backslash escaped HTML tags
text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
return "&lt;" + inside + "&gt;";
});
}
// hash HTML Blocks
for (var i = 0; i < blockTags.length; ++i) {
var opTagPos,
rgx1 = new RegExp("^ {0,3}(<" + blockTags[i] + "\\b[^>]*>)", "im"),
patLeft = "<" + blockTags[i] + "\\b[^>]*>",
patRight = "</" + blockTags[i] + ">";
// 1. Look for the first position of the first opening HTML tag in the text
while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
// if the HTML tag is \ escaped, we need to escape it and break
//2. Split the text in that position
var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
//3. Match recursively
newSubText1 = showdown.helper.replaceRecursiveRegExp(
subTexts[1],
repFunc,
patLeft,
patRight,
"im",
);
// prevent an infinite loop
if (newSubText1 === subTexts[1]) {
break;
}
text = subTexts[0].concat(newSubText1);
}
}
// HR SPECIAL CASE
text = text.replace(
/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
showdown.subParser("hashElement")(text, options, globals),
);
// Special case for standalone HTML comments
text = showdown.helper.replaceRecursiveRegExp(
text,
function (txt) {
return "\n\n¨K" + (globals.gHtmlBlocks.push(txt) - 1) + "K\n\n";
},
"^ {0,3}<!--",
"-->",
"gm",
);
// PHP and ASP-style processor instructions (<?...?> and <%...%>)
text = text.replace(
/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
showdown.subParser("hashElement")(text, options, globals),
);
text = globals.converter._dispatch(
"hashHTMLBlocks.after",
text,
options,
globals,
);
return text;
});
/**
* Hash span elements that should not be parsed as markdown
*/
showdown.subParser("hashHTMLSpans", function (text, options, globals) {
text = globals.converter._dispatch(
"hashHTMLSpans.before",
text,
options,
globals,
);
function hashHTMLSpan(html) {
return "¨C" + (globals.gHtmlSpans.push(html) - 1) + "C";
}
// Hash Self Closing tags
text = text.replace(/<[^>]+?\/>/gi, function (wm) {
return hashHTMLSpan(wm);
});
// Hash tags without properties
text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) {
return hashHTMLSpan(wm);
});
// Hash tags with properties
text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) {
return hashHTMLSpan(wm);
});
// Hash self closing tags without />
text = text.replace(/<[^>]+?>/gi, function (wm) {
return hashHTMLSpan(wm);
});
/*showdown.helper.matchRecursiveRegExp(text, '<code\\b[^>]*>', '</code>', 'gi');*/
text = globals.converter._dispatch(
"hashHTMLSpans.after",
text,
options,
globals,
);
return text;
});
/**
* Unhash HTML spans
*/
showdown.subParser("unhashHTMLSpans", function (text, options, globals) {
text = globals.converter._dispatch(
"unhashHTMLSpans.before",
text,
options,
globals,
);
for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
var repText = globals.gHtmlSpans[i],
// limiter to prevent infinite loop (assume 10 as limit for recurse)
limit = 0;
while (/¨C(\d+)C/.test(repText)) {
var num = RegExp.$1;
repText = repText.replace("¨C" + num + "C", globals.gHtmlSpans[num]);
if (limit === 10) {
console.error("maximum nesting of 10 spans reached!!!");
break;
}
++limit;
}
text = text.replace("¨C" + i + "C", repText);
}
text = globals.converter._dispatch(
"unhashHTMLSpans.after",
text,
options,
globals,
);
return text;
});
/**
* Hash and escape <pre><code> elements that should not be parsed as markdown
*/
showdown.subParser("hashPreCodeTags", function (text, options, globals) {
text = globals.converter._dispatch(
"hashPreCodeTags.before",
text,
options,
globals,
);
var repFunc = function (wholeMatch, match, left, right) {
// encode html entities
var codeblock =
left +
showdown.subParser("encodeCode")(match, options, globals) +
right;
return (
"\n\n¨G" +
(globals.ghCodeBlocks.push({
text: wholeMatch,
codeblock: codeblock,
}) -
1) +
"G\n\n"
);
};
// Hash <pre><code>
text = showdown.helper.replaceRecursiveRegExp(
text,
repFunc,
"^ {0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>",
"^ {0,3}</code>\\s*</pre>",
"gim",
);
text = globals.converter._dispatch(
"hashPreCodeTags.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("headers", function (text, options, globals) {
text = globals.converter._dispatch(
"headers.before",
text,
options,
globals,
);
var headerLevelStart = isNaN(parseInt(options.headerLevelStart))
? 1
: parseInt(options.headerLevelStart),
// Set text-style headers:
// Header 1
// ========
//
// Header 2
// --------
//
setextRegexH1 = options.smoothLivePreview
? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm
: /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
setextRegexH2 = options.smoothLivePreview
? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm
: /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
text = text.replace(setextRegexH1, function (wholeMatch, m1) {
var spanGamut = showdown.subParser("spanGamut")(m1, options, globals),
hID = options.noHeaderId ? "" : ' id="' + headerId(m1) + '"',
hLevel = headerLevelStart,
hashBlock =
"<h" + hLevel + hID + ">" + spanGamut + "</h" + hLevel + ">";
return showdown.subParser("hashBlock")(hashBlock, options, globals);
});
text = text.replace(setextRegexH2, function (matchFound, m1) {
var spanGamut = showdown.subParser("spanGamut")(m1, options, globals),
hID = options.noHeaderId ? "" : ' id="' + headerId(m1) + '"',
hLevel = headerLevelStart + 1,
hashBlock =
"<h" + hLevel + hID + ">" + spanGamut + "</h" + hLevel + ">";
return showdown.subParser("hashBlock")(hashBlock, options, globals);
});
// atx-style headers:
// # Header 1
// ## Header 2
// ## Header 2 with closing hashes ##
// ...
// ###### Header 6
//
var atxStyle = options.requireSpaceBeforeHeadingText
? /^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm
: /^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;
text = text.replace(atxStyle, function (wholeMatch, m1, m2) {
var hText = m2;
if (options.customizedHeaderId) {
hText = m2.replace(/\s?\{([^{]+?)}\s*$/, "");
}
var span = showdown.subParser("spanGamut")(hText, options, globals),
hID = options.noHeaderId ? "" : ' id="' + headerId(m2) + '"',
hLevel = headerLevelStart - 1 + m1.length,
header = "<h" + hLevel + hID + ">" + span + "</h" + hLevel + ">";
return showdown.subParser("hashBlock")(header, options, globals);
});
function headerId(m) {
var title, prefix;
// It is separate from other options to allow combining prefix and customized
if (options.customizedHeaderId) {
var match = m.match(/\{([^{]+?)}\s*$/);
if (match && match[1]) {
m = match[1];
}
}
title = m;
// Prefix id to prevent causing inadvertent pre-existing style matches.
if (showdown.helper.isString(options.prefixHeaderId)) {
prefix = options.prefixHeaderId;
} else if (options.prefixHeaderId === true) {
prefix = "section-";
} else {
prefix = "";
}
if (!options.rawPrefixHeaderId) {
title = prefix + title;
}
if (options.ghCompatibleHeaderId) {
title = title
.replace(/ /g, "-")
// replace previously escaped chars (&, ¨ and $)
.replace(/&amp;/g, "")
.replace(/¨T/g, "")
.replace(/¨D/g, "")
// replace rest of the chars (&~$ are repeated as they might have been escaped)
// borrowed from github's redcarpet (some they should produce similar results)
.replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g, "")
.toLowerCase();
} else if (options.rawHeaderId) {
title = title
.replace(/ /g, "-")
// replace previously escaped chars (&, ¨ and $)
.replace(/&amp;/g, "&")
.replace(/¨T/g, "¨")
.replace(/¨D/g, "$")
// replace " and '
.replace(/["']/g, "-")
.toLowerCase();
} else {
title = title.replace(/[^\w]/g, "").toLowerCase();
}
if (options.rawPrefixHeaderId) {
title = prefix + title;
}
if (globals.hashLinkCounts[title]) {
title = title + "-" + globals.hashLinkCounts[title]++;
} else {
globals.hashLinkCounts[title] = 1;
}
return title;
}
text = globals.converter._dispatch(
"headers.after",
text,
options,
globals,
);
return text;
});
/**
* Turn Markdown link shortcuts into XHTML <a> tags.
*/
showdown.subParser("horizontalRule", function (text, options, globals) {
text = globals.converter._dispatch(
"horizontalRule.before",
text,
options,
globals,
);
var key = showdown.subParser("hashBlock")("<hr />", options, globals);
text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key);
text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key);
text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key);
text = globals.converter._dispatch(
"horizontalRule.after",
text,
options,
globals,
);
return text;
});
/**
* Turn Markdown image shortcuts into <img> tags.
*/
showdown.subParser("images", function (text, options, globals) {
text = globals.converter._dispatch(
"images.before",
text,
options,
globals,
);
var inlineRegExp =
/!\[([^\]]*?)][ \t]*()\([ \t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
crazyRegExp =
/!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,
base64RegExp =
/!\[([^\]]*?)][ \t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,
refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g;
function writeImageTagBase64(
wholeMatch,
altText,
linkId,
url,
width,
height,
m5,
title,
) {
url = url.replace(/\s/g, "");
return writeImageTag(
wholeMatch,
altText,
linkId,
url,
width,
height,
m5,
title,
);
}
function writeImageTag(
wholeMatch,
altText,
linkId,
url,
width,
height,
m5,
title,
) {
var gUrls = globals.gUrls,
gTitles = globals.gTitles,
gDims = globals.gDimensions;
linkId = linkId.toLowerCase();
if (!title) {
title = "";
}
// Special case for explicit empty url
if (wholeMatch.search(/\(<?\s*>? ?(['"].*['"])?\)$/m) > -1) {
url = "";
} else if (url === "" || url === null) {
if (linkId === "" || linkId === null) {
// lower-case and turn embedded newlines into spaces
linkId = altText.toLowerCase().replace(/ ?\n/g, " ");
}
url = "#" + linkId;
if (!showdown.helper.isUndefined(gUrls[linkId])) {
url = gUrls[linkId];
if (!showdown.helper.isUndefined(gTitles[linkId])) {
title = gTitles[linkId];
}
if (!showdown.helper.isUndefined(gDims[linkId])) {
width = gDims[linkId].width;
height = gDims[linkId].height;
}
} else {
return wholeMatch;
}
}
altText = altText
.replace(/"/g, "&quot;")
//altText = showdown.helper.escapeCharacters(altText, '*_', false);
.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
//url = showdown.helper.escapeCharacters(url, '*_', false);
url = url.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
var result = '<img src="' + url + '" alt="' + altText + '"';
if (title && showdown.helper.isString(title)) {
title = title
.replace(/"/g, "&quot;")
//title = showdown.helper.escapeCharacters(title, '*_', false);
.replace(
showdown.helper.regexes.asteriskDashAndColon,
showdown.helper.escapeCharactersCallback,
);
result += ' title="' + title + '"';
}
if (width && height) {
width = width === "*" ? "auto" : width;
height = height === "*" ? "auto" : height;
result += ' width="' + width + '"';
result += ' height="' + height + '"';
}
result += " />";
return result;
}
// First, handle reference-style labeled images: ![alt text][id]
text = text.replace(referenceRegExp, writeImageTag);
// Next, handle inline images: ![alt text](url =<width>x<height> "optional title")
// base64 encoded images
text = text.replace(base64RegExp, writeImageTagBase64);
// cases with crazy urls like ./image/cat1).png
text = text.replace(crazyRegExp, writeImageTag);
// normal cases
text = text.replace(inlineRegExp, writeImageTag);
// handle reference-style shortcuts: ![img text]
text = text.replace(refShortcutRegExp, writeImageTag);
text = globals.converter._dispatch(
"images.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("italicsAndBold", function (text, options, globals) {
text = globals.converter._dispatch(
"italicsAndBold.before",
text,
options,
globals,
);
// it's faster to have 3 separate regexes for each case than have just one
// because of backtracing, in some cases, it could lead to an exponential effect
// called "catastrophic backtrace". Ominous!
function parseInside(txt, left, right) {
/*
if (options.simplifiedAutoLink) {
txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
}
*/
return left + txt + right;
}
// Parse underscores
if (options.literalMidWordUnderscores) {
text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
return parseInside(txt, "<strong><em>", "</em></strong>");
});
text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
return parseInside(txt, "<strong>", "</strong>");
});
text = text.replace(/\b_(\S[\s\S]*?)_\b/g, function (wm, txt) {
return parseInside(txt, "<em>", "</em>");
});
} else {
text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
return /\S$/.test(m)
? parseInside(m, "<strong><em>", "</em></strong>")
: wm;
});
text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
return /\S$/.test(m) ? parseInside(m, "<strong>", "</strong>") : wm;
});
text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) {
// !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)
return /\S$/.test(m) ? parseInside(m, "<em>", "</em>") : wm;
});
}
// Now parse asterisks
if (options.literalMidWordAsterisks) {
text = text.replace(
/([^*]|^)\B\*\*\*(\S[\s\S]*?)\*\*\*\B(?!\*)/g,
function (wm, lead, txt) {
return parseInside(txt, lead + "<strong><em>", "</em></strong>");
},
);
text = text.replace(
/([^*]|^)\B\*\*(\S[\s\S]*?)\*\*\B(?!\*)/g,
function (wm, lead, txt) {
return parseInside(txt, lead + "<strong>", "</strong>");
},
);
text = text.replace(
/([^*]|^)\B\*(\S[\s\S]*?)\*\B(?!\*)/g,
function (wm, lead, txt) {
return parseInside(txt, lead + "<em>", "</em>");
},
);
} else {
text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) {
return /\S$/.test(m)
? parseInside(m, "<strong><em>", "</em></strong>")
: wm;
});
text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) {
return /\S$/.test(m) ? parseInside(m, "<strong>", "</strong>") : wm;
});
text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) {
// !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)
return /\S$/.test(m) ? parseInside(m, "<em>", "</em>") : wm;
});
}
text = globals.converter._dispatch(
"italicsAndBold.after",
text,
options,
globals,
);
return text;
});
/**
* Form HTML ordered (numbered) and unordered (bulleted) lists.
*/
showdown.subParser("lists", function (text, options, globals) {
/**
* Process the contents of a single ordered or unordered list, splitting it
* into individual list items.
* @param {string} listStr
* @param {boolean} trimTrailing
* @returns {string}
*/
function processListItems(listStr, trimTrailing) {
// The $g_list_level global keeps track of when we're inside a list.
// Each time we enter a list, we increment it; when we leave a list,
// we decrement. If it's zero, we're not in a list anymore.
//
// We do this because when we're not inside a list, we want to treat
// something like this:
//
// I recommend upgrading to version
// 8. Oops, now this line is treated
// as a sub-list.
//
// As a single paragraph, despite the fact that the second line starts
// with a digit-period-space sequence.
//
// Whereas when we're inside a list (or sub-list), that line will be
// treated as the start of a sub-list. What a kludge, huh? This is
// an aspect of Markdown's syntax that's hard to parse perfectly
// without resorting to mind-reading. Perhaps the solution is to
// change the syntax rules such that sub-lists must start with a
// starting cardinal number; e.g. "1." or "a.".
globals.gListLevel++;
// trim trailing blank lines:
listStr = listStr.replace(/\n{2,}$/, "\n");
// attacklab: add sentinel to emulate \z
listStr += "¨0";
var rgx =
/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,
isParagraphed = /\n[ \t]*\n(?!¨0)/.test(listStr);
// Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,
// which is a syntax breaking change
// activating this option reverts to old behavior
if (options.disableForced4SpacesIndentedSublists) {
rgx =
/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm;
}
listStr = listStr.replace(
rgx,
function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
checked = checked && checked.trim() !== "";
var item = showdown.subParser("outdent")(m4, options, globals),
bulletStyle = "";
// Support for github tasklists
if (taskbtn && options.tasklists) {
bulletStyle =
' class="task-list-item" style="list-style-type: none;"';
item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
var otp =
'<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';
if (checked) {
otp += " checked";
}
otp += ">";
return otp;
});
}
// ISSUE #312
// This input: - - - a
// causes trouble to the parser, since it interprets it as:
// <ul><li><li><li>a</li></li></li></ul>
// instead of:
// <ul><li>- - a</li></ul>
// So, to prevent it, we will put a marker (¨A)in the beginning of the line
// Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser
item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) {
return "¨A" + wm2;
});
// m1 - Leading line or
// Has a double return (multi paragraph) or
// Has sublist
if (m1 || item.search(/\n{2,}/) > -1) {
item = showdown.subParser("githubCodeBlocks")(
item,
options,
globals,
);
item = showdown.subParser("blockGamut")(item, options, globals);
} else {
// Recursion for sub-lists:
item = showdown.subParser("lists")(item, options, globals);
item = item.replace(/\n$/, ""); // chomp(item)
item = showdown.subParser("hashHTMLBlocks")(
item,
options,
globals,
);
// Colapse double linebreaks
item = item.replace(/\n\n+/g, "\n\n");
if (isParagraphed) {
item = showdown.subParser("paragraphs")(item, options, globals);
} else {
item = showdown.subParser("spanGamut")(item, options, globals);
}
}
// now we need to remove the marker (¨A)
item = item.replace("¨A", "");
// we can finally wrap the line in list item tags
item = "<li" + bulletStyle + ">" + item + "</li>\n";
return item;
},
);
// attacklab: strip sentinel
listStr = listStr.replace(/¨0/g, "");
globals.gListLevel--;
if (trimTrailing) {
listStr = listStr.replace(/\s+$/, "");
}
return listStr;
}
function styleStartNumber(list, listType) {
// check if ol and starts by a number different than 1
if (listType === "ol") {
var res = list.match(/^ *(\d+)\./);
if (res && res[1] !== "1") {
return ' start="' + res[1] + '"';
}
}
return "";
}
/**
* Check and parse consecutive lists (better fix for issue #142)
* @param {string} list
* @param {string} listType
* @param {boolean} trimTrailing
* @returns {string}
*/
function parseConsecutiveLists(list, listType, trimTrailing) {
// check if we caught 2 or more consecutive lists by mistake
// we use the counterRgx, meaning if listType is UL we look for OL and vice versa
var olRgx = options.disableForced4SpacesIndentedSublists
? /^ ?\d+\.[ \t]/gm
: /^ {0,3}\d+\.[ \t]/gm,
ulRgx = options.disableForced4SpacesIndentedSublists
? /^ ?[*+-][ \t]/gm
: /^ {0,3}[*+-][ \t]/gm,
counterRxg = listType === "ul" ? olRgx : ulRgx,
result = "";
if (list.search(counterRxg) !== -1) {
(function parseCL(txt) {
var pos = txt.search(counterRxg),
style = styleStartNumber(list, listType);
if (pos !== -1) {
// slice
result +=
"\n\n<" +
listType +
style +
">\n" +
processListItems(txt.slice(0, pos), !!trimTrailing) +
"</" +
listType +
">\n";
// invert counterType and listType
listType = listType === "ul" ? "ol" : "ul";
counterRxg = listType === "ul" ? olRgx : ulRgx;
//recurse
parseCL(txt.slice(pos));
} else {
result +=
"\n\n<" +
listType +
style +
">\n" +
processListItems(txt, !!trimTrailing) +
"</" +
listType +
">\n";
}
})(list);
} else {
var style = styleStartNumber(list, listType);
result =
"\n\n<" +
listType +
style +
">\n" +
processListItems(list, !!trimTrailing) +
"</" +
listType +
">\n";
}
return result;
}
/** Start of list parsing **/
text = globals.converter._dispatch(
"lists.before",
text,
options,
globals,
);
// add sentinel to hack around khtml/safari bug:
// http://bugs.webkit.org/show_bug.cgi?id=11231
text += "¨0";
if (globals.gListLevel) {
text = text.replace(
/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
function (wholeMatch, list, m2) {
var listType = m2.search(/[*+-]/g) > -1 ? "ul" : "ol";
return parseConsecutiveLists(list, listType, true);
},
);
} else {
text = text.replace(
/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
function (wholeMatch, m1, list, m3) {
var listType = m3.search(/[*+-]/g) > -1 ? "ul" : "ol";
return parseConsecutiveLists(list, listType, false);
},
);
}
// strip sentinel
text = text.replace(/¨0/, "");
text = globals.converter._dispatch("lists.after", text, options, globals);
return text;
});
/**
* Parse metadata at the top of the document
*/
showdown.subParser("metadata", function (text, options, globals) {
if (!options.metadata) {
return text;
}
text = globals.converter._dispatch(
"metadata.before",
text,
options,
globals,
);
function parseMetadataContents(content) {
// raw is raw so it's not changed in any way
globals.metadata.raw = content;
// escape chars forbidden in html attributes
// double quotes
content = content
// ampersand first
.replace(/&/g, "&amp;")
// double quotes
.replace(/"/g, "&quot;");
content = content.replace(/\n {4}/g, " ");
content.replace(/^([\S ]+): +([\s\S]+?)$/gm, function (wm, key, value) {
globals.metadata.parsed[key] = value;
return "";
});
}
text = text.replace(
/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/,
function (wholematch, format, content) {
parseMetadataContents(content);
return "¨M";
},
);
text = text.replace(
/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/,
function (wholematch, format, content) {
if (format) {
globals.metadata.format = format;
}
parseMetadataContents(content);
return "¨M";
},
);
text = text.replace(/¨M/g, "");
text = globals.converter._dispatch(
"metadata.after",
text,
options,
globals,
);
return text;
});
/**
* Remove one level of line-leading tabs or spaces
*/
showdown.subParser("outdent", function (text, options, globals) {
text = globals.converter._dispatch(
"outdent.before",
text,
options,
globals,
);
// attacklab: hack around Konqueror 3.5.4 bug:
// "----------bug".replace(/^-/g,"") == "bug"
text = text.replace(/^(\t|[ ]{1,4})/gm, "¨0"); // attacklab: g_tab_width
// attacklab: clean up hack
text = text.replace(/¨0/g, "");
text = globals.converter._dispatch(
"outdent.after",
text,
options,
globals,
);
return text;
});
/**
*
*/
showdown.subParser("paragraphs", function (text, options, globals) {
text = globals.converter._dispatch(
"paragraphs.before",
text,
options,
globals,
);
// Strip leading and trailing lines:
text = text.replace(/^\n+/g, "");
text = text.replace(/\n+$/g, "");
var grafs = text.split(/\n{2,}/g),
grafsOut = [],
end = grafs.length; // Wrap <p> tags
for (var i = 0; i < end; i++) {
var str = grafs[i];
// if this is an HTML marker, copy it
if (str.search(/¨(K|G)(\d+)\1/g) >= 0) {
grafsOut.push(str);
// test for presence of characters to prevent empty lines being parsed
// as paragraphs (resulting in undesired extra empty paragraphs)
} else if (str.search(/\S/) >= 0) {
str = showdown.subParser("spanGamut")(str, options, globals);
str = str.replace(/^([ \t]*)/g, "<p>");
str += "</p>";
grafsOut.push(str);
}
}
/** Unhashify HTML blocks */
end = grafsOut.length;
for (i = 0; i < end; i++) {
var blockText = "",
grafsOutIt = grafsOut[i],
codeFlag = false;
// if this is a marker for an html block...
// use RegExp.test instead of string.search because of QML bug
while (/¨(K|G)(\d+)\1/.test(grafsOutIt)) {
var delim = RegExp.$1,
num = RegExp.$2;
if (delim === "K") {
blockText = globals.gHtmlBlocks[num];
} else {
// we need to check if ghBlock is a false positive
if (codeFlag) {
// use encoded version of all text
blockText = showdown.subParser("encodeCode")(
globals.ghCodeBlocks[num].text,
options,
globals,
);
} else {
blockText = globals.ghCodeBlocks[num].codeblock;
}
}
blockText = blockText.replace(/\$/g, "$$$$"); // Escape any dollar signs
grafsOutIt = grafsOutIt.replace(
/(\n\n)?¨(K|G)\d+\2(\n\n)?/,
blockText,
);
// Check if grafsOutIt is a pre->code
if (/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(grafsOutIt)) {
codeFlag = true;
}
}
grafsOut[i] = grafsOutIt;
}
text = grafsOut.join("\n");
// Strip leading and trailing lines:
text = text.replace(/^\n+/g, "");
text = text.replace(/\n+$/g, "");
return globals.converter._dispatch(
"paragraphs.after",
text,
options,
globals,
);
});
/**
* Run extension
*/
showdown.subParser("runExtension", function (ext, text, options, globals) {
if (ext.filter) {
text = ext.filter(text, globals.converter, options);
} else if (ext.regex) {
// TODO remove this when old extension loading mechanism is deprecated
var re = ext.regex;
if (!(re instanceof RegExp)) {
re = new RegExp(re, "g");
}
text = text.replace(re, ext.replace);
}
return text;
});
/**
* These are all the transformations that occur *within* block-level
* tags like paragraphs, headers, and list items.
*/
showdown.subParser("spanGamut", function (text, options, globals) {
text = globals.converter._dispatch(
"spanGamut.before",
text,
options,
globals,
);
text = showdown.subParser("codeSpans")(text, options, globals);
text = showdown.subParser("escapeSpecialCharsWithinTagAttributes")(
text,
options,
globals,
);
text = showdown.subParser("encodeBackslashEscapes")(
text,
options,
globals,
);
// Process anchor and image tags. Images must come first,
// because ![foo][f] looks like an anchor.
text = showdown.subParser("images")(text, options, globals);
text = showdown.subParser("anchors")(text, options, globals);
// Make links out of things like `<http://example.com/>`
// Must come after anchors, because you can use < and >
// delimiters in inline links like [this](<url>).
text = showdown.subParser("autoLinks")(text, options, globals);
text = showdown.subParser("simplifiedAutoLinks")(text, options, globals);
text = showdown.subParser("emoji")(text, options, globals);
text = showdown.subParser("underline")(text, options, globals);
text = showdown.subParser("italicsAndBold")(text, options, globals);
text = showdown.subParser("strikethrough")(text, options, globals);
text = showdown.subParser("ellipsis")(text, options, globals);
// we need to hash HTML tags inside spans
text = showdown.subParser("hashHTMLSpans")(text, options, globals);
// now we encode amps and angles
text = showdown.subParser("encodeAmpsAndAngles")(text, options, globals);
// Do hard breaks
if (options.simpleLineBreaks) {
// GFM style hard breaks
// only add line breaks if the text does not contain a block (special case for lists)
if (!/\n\n¨K/.test(text)) {
text = text.replace(/\n+/g, "<br />\n");
}
} else {
// Vanilla hard breaks
text = text.replace(/ +\n/g, "<br />\n");
}
text = globals.converter._dispatch(
"spanGamut.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("strikethrough", function (text, options, globals) {
function parseInside(txt) {
if (options.simplifiedAutoLink) {
txt = showdown.subParser("simplifiedAutoLinks")(
txt,
options,
globals,
);
}
return "<del>" + txt + "</del>";
}
if (options.strikethrough) {
text = globals.converter._dispatch(
"strikethrough.before",
text,
options,
globals,
);
text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) {
return parseInside(txt);
});
text = globals.converter._dispatch(
"strikethrough.after",
text,
options,
globals,
);
}
return text;
});
/**
* Strips link definitions from text, stores the URLs and titles in
* hash references.
* Link defs are in the form: ^[id]: url "optional title"
*/
showdown.subParser(
"stripLinkDefinitions",
function (text, options, globals) {
var regex =
/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,
base64Regex =
/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm;
// attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
text += "¨0";
var replaceFunc = function (
wholeMatch,
linkId,
url,
width,
height,
blankLines,
title,
) {
linkId = linkId.toLowerCase();
if (url.match(/^data:.+?\/.+?;base64,/)) {
// remove newlines
globals.gUrls[linkId] = url.replace(/\s/g, "");
} else {
globals.gUrls[linkId] = showdown.subParser("encodeAmpsAndAngles")(
url,
options,
globals,
); // Link IDs are case-insensitive
}
if (blankLines) {
// Oops, found blank lines, so it's not a title.
// Put back the parenthetical statement we stole.
return blankLines + title;
} else {
if (title) {
globals.gTitles[linkId] = title.replace(/"|'/g, "&quot;");
}
if (options.parseImgDimensions && width && height) {
globals.gDimensions[linkId] = {
width: width,
height: height,
};
}
}
// Completely remove the definition from the text
return "";
};
// first we try to find base64 link references
text = text.replace(base64Regex, replaceFunc);
text = text.replace(regex, replaceFunc);
// attacklab: strip sentinel
text = text.replace(/¨0/, "");
return text;
},
);
showdown.subParser("tables", function (text, options, globals) {
if (!options.tables) {
return text;
}
var tableRgx =
/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,
//singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm;
singeColTblRgx =
/^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm;
function parseStyles(sLine) {
if (/^:[ \t]*--*$/.test(sLine)) {
return ' style="text-align:left;"';
} else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
return ' style="text-align:right;"';
} else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
return ' style="text-align:center;"';
} else {
return "";
}
}
function parseHeaders(header, style) {
var id = "";
header = header.trim();
// support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility
if (options.tablesHeaderId || options.tableHeaderId) {
id = ' id="' + header.replace(/ /g, "_").toLowerCase() + '"';
}
header = showdown.subParser("spanGamut")(header, options, globals);
return "<th" + id + style + ">" + header + "</th>\n";
}
function parseCells(cell, style) {
var subText = showdown.subParser("spanGamut")(cell, options, globals);
return "<td" + style + ">" + subText + "</td>\n";
}
function buildTable(headers, cells) {
var tb = "<table>\n<thead>\n<tr>\n",
tblLgn = headers.length;
for (var i = 0; i < tblLgn; ++i) {
tb += headers[i];
}
tb += "</tr>\n</thead>\n<tbody>\n";
for (i = 0; i < cells.length; ++i) {
tb += "<tr>\n";
for (var ii = 0; ii < tblLgn; ++ii) {
tb += cells[i][ii];
}
tb += "</tr>\n";
}
tb += "</tbody>\n</table>\n";
return tb;
}
function parseTable(rawTable) {
var i,
tableLines = rawTable.split("\n");
for (i = 0; i < tableLines.length; ++i) {
// strip wrong first and last column if wrapped tables are used
if (/^ {0,3}\|/.test(tableLines[i])) {
tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, "");
}
if (/\|[ \t]*$/.test(tableLines[i])) {
tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, "");
}
// parse code spans first, but we only support one line code spans
tableLines[i] = showdown.subParser("codeSpans")(
tableLines[i],
options,
globals,
);
}
var rawHeaders = tableLines[0].split("|").map(function (s) {
return s.trim();
}),
rawStyles = tableLines[1].split("|").map(function (s) {
return s.trim();
}),
rawCells = [],
headers = [],
styles = [],
cells = [];
tableLines.shift();
tableLines.shift();
for (i = 0; i < tableLines.length; ++i) {
if (tableLines[i].trim() === "") {
continue;
}
rawCells.push(
tableLines[i].split("|").map(function (s) {
return s.trim();
}),
);
}
if (rawHeaders.length < rawStyles.length) {
return rawTable;
}
for (i = 0; i < rawStyles.length; ++i) {
styles.push(parseStyles(rawStyles[i]));
}
for (i = 0; i < rawHeaders.length; ++i) {
if (showdown.helper.isUndefined(styles[i])) {
styles[i] = "";
}
headers.push(parseHeaders(rawHeaders[i], styles[i]));
}
for (i = 0; i < rawCells.length; ++i) {
var row = [];
for (var ii = 0; ii < headers.length; ++ii) {
if (showdown.helper.isUndefined(rawCells[i][ii]));
row.push(parseCells(rawCells[i][ii], styles[ii]));
}
cells.push(row);
}
return buildTable(headers, cells);
}
text = globals.converter._dispatch(
"tables.before",
text,
options,
globals,
);
// find escaped pipe characters
text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback);
// parse multi column tables
text = text.replace(tableRgx, parseTable);
// parse one column tables
text = text.replace(singeColTblRgx, parseTable);
text = globals.converter._dispatch(
"tables.after",
text,
options,
globals,
);
return text;
});
showdown.subParser("underline", function (text, options, globals) {
if (!options.underline) {
return text;
}
text = globals.converter._dispatch(
"underline.before",
text,
options,
globals,
);
if (options.literalMidWordUnderscores) {
text = text.replace(/\b___(\S[\s\S]*?)___\b/g, function (wm, txt) {
return "<u>" + txt + "</u>";
});
text = text.replace(/\b__(\S[\s\S]*?)__\b/g, function (wm, txt) {
return "<u>" + txt + "</u>";
});
} else {
text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
return /\S$/.test(m) ? "<u>" + m + "</u>" : wm;
});
text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
return /\S$/.test(m) ? "<u>" + m + "</u>" : wm;
});
}
// escape remaining underscores to prevent them being parsed by italic and bold
text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);
text = globals.converter._dispatch(
"underline.after",
text,
options,
globals,
);
return text;
});
/**
* Swap back in all the special characters we've hidden.
*/
showdown.subParser(
"unescapeSpecialChars",
function (text, options, globals) {
text = globals.converter._dispatch(
"unescapeSpecialChars.before",
text,
options,
globals,
);
text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) {
var charCodeToReplace = parseInt(m1);
return String.fromCharCode(charCodeToReplace);
});
text = globals.converter._dispatch(
"unescapeSpecialChars.after",
text,
options,
globals,
);
return text;
},
);
showdown.subParser("makeMarkdown.blockquote", function (node, globals) {
var txt = "";
if (node.hasChildNodes()) {
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
var innerTxt = showdown.subParser("makeMarkdown.node")(
children[i],
globals,
);
if (innerTxt === "") {
continue;
}
txt += innerTxt;
}
}
// cleanup
txt = txt.trim();
txt = "> " + txt.split("\n").join("\n> ");
return txt;
});
showdown.subParser("makeMarkdown.codeBlock", function (node, globals) {
var lang = node.getAttribute("language"),
num = node.getAttribute("precodenum");
return "```" + lang + "\n" + globals.preList[num] + "\n```";
});
showdown.subParser("makeMarkdown.codeSpan", function (node) {
return "`" + node.innerHTML + "`";
});
showdown.subParser("makeMarkdown.emphasis", function (node, globals) {
var txt = "";
if (node.hasChildNodes()) {
txt += "*";
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(children[i], globals);
}
txt += "*";
}
return txt;
});
showdown.subParser(
"makeMarkdown.header",
function (node, globals, headerLevel) {
var headerMark = new Array(headerLevel + 1).join("#"),
txt = "";
if (node.hasChildNodes()) {
txt = headerMark + " ";
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(
children[i],
globals,
);
}
}
return txt;
},
);
showdown.subParser("makeMarkdown.hr", function () {
return "---";
});
showdown.subParser("makeMarkdown.image", function (node) {
var txt = "";
if (node.hasAttribute("src")) {
txt += "![" + node.getAttribute("alt") + "](";
txt += "<" + node.getAttribute("src") + ">";
if (node.hasAttribute("width") && node.hasAttribute("height")) {
txt +=
" =" +
node.getAttribute("width") +
"x" +
node.getAttribute("height");
}
if (node.hasAttribute("title")) {
txt += ' "' + node.getAttribute("title") + '"';
}
txt += ")";
}
return txt;
});
showdown.subParser("makeMarkdown.links", function (node, globals) {
var txt = "";
if (node.hasChildNodes() && node.hasAttribute("href")) {
var children = node.childNodes,
childrenLength = children.length;
txt = "[";
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(children[i], globals);
}
txt += "](";
txt += "<" + node.getAttribute("href") + ">";
if (node.hasAttribute("title")) {
txt += ' "' + node.getAttribute("title") + '"';
}
txt += ")";
}
return txt;
});
showdown.subParser("makeMarkdown.list", function (node, globals, type) {
var txt = "";
if (!node.hasChildNodes()) {
return "";
}
var listItems = node.childNodes,
listItemsLenght = listItems.length,
listNum = node.getAttribute("start") || 1;
for (var i = 0; i < listItemsLenght; ++i) {
if (
typeof listItems[i].tagName === "undefined" ||
listItems[i].tagName.toLowerCase() !== "li"
) {
continue;
}
// define the bullet to use in list
var bullet = "";
if (type === "ol") {
bullet = listNum.toString() + ". ";
} else {
bullet = "- ";
}
// parse list item
txt +=
bullet +
showdown.subParser("makeMarkdown.listItem")(listItems[i], globals);
++listNum;
}
// add comment at the end to prevent consecutive lists to be parsed as one
txt += "\n<!-- -->\n";
return txt.trim();
});
showdown.subParser("makeMarkdown.listItem", function (node, globals) {
var listItemTxt = "";
var children = node.childNodes,
childrenLenght = children.length;
for (var i = 0; i < childrenLenght; ++i) {
listItemTxt += showdown.subParser("makeMarkdown.node")(
children[i],
globals,
);
}
// if it's only one liner, we need to add a newline at the end
if (!/\n$/.test(listItemTxt)) {
listItemTxt += "\n";
} else {
// it's multiparagraph, so we need to indent
listItemTxt = listItemTxt
.split("\n")
.join("\n ")
.replace(/^ {4}$/gm, "")
.replace(/\n\n+/g, "\n\n");
}
return listItemTxt;
});
showdown.subParser(
"makeMarkdown.node",
function (node, globals, spansOnly) {
spansOnly = spansOnly || false;
var txt = "";
// edge case of text without wrapper paragraph
if (node.nodeType === 3) {
return showdown.subParser("makeMarkdown.txt")(node, globals);
}
// HTML comment
if (node.nodeType === 8) {
return "<!--" + node.data + "-->\n\n";
}
// process only node elements
if (node.nodeType !== 1) {
return "";
}
var tagName = node.tagName.toLowerCase();
switch (tagName) {
//
// BLOCKS
//
case "h1":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 1) +
"\n\n";
}
break;
case "h2":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 2) +
"\n\n";
}
break;
case "h3":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 3) +
"\n\n";
}
break;
case "h4":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 4) +
"\n\n";
}
break;
case "h5":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 5) +
"\n\n";
}
break;
case "h6":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.header")(node, globals, 6) +
"\n\n";
}
break;
case "p":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.paragraph")(node, globals) +
"\n\n";
}
break;
case "blockquote":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.blockquote")(node, globals) +
"\n\n";
}
break;
case "hr":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.hr")(node, globals) + "\n\n";
}
break;
case "ol":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.list")(node, globals, "ol") +
"\n\n";
}
break;
case "ul":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.list")(node, globals, "ul") +
"\n\n";
}
break;
case "precode":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.codeBlock")(node, globals) +
"\n\n";
}
break;
case "pre":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.pre")(node, globals) + "\n\n";
}
break;
case "table":
if (!spansOnly) {
txt =
showdown.subParser("makeMarkdown.table")(node, globals) +
"\n\n";
}
break;
//
// SPANS
//
case "code":
txt = showdown.subParser("makeMarkdown.codeSpan")(node, globals);
break;
case "em":
case "i":
txt = showdown.subParser("makeMarkdown.emphasis")(node, globals);
break;
case "strong":
case "b":
txt = showdown.subParser("makeMarkdown.strong")(node, globals);
break;
case "del":
txt = showdown.subParser("makeMarkdown.strikethrough")(
node,
globals,
);
break;
case "a":
txt = showdown.subParser("makeMarkdown.links")(node, globals);
break;
case "img":
txt = showdown.subParser("makeMarkdown.image")(node, globals);
break;
default:
txt = node.outerHTML + "\n\n";
}
// common normalization
// TODO eventually
return txt;
},
);
showdown.subParser("makeMarkdown.paragraph", function (node, globals) {
var txt = "";
if (node.hasChildNodes()) {
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(children[i], globals);
}
}
// some text normalization
txt = txt.trim();
return txt;
});
showdown.subParser("makeMarkdown.pre", function (node, globals) {
var num = node.getAttribute("prenum");
return "<pre>" + globals.preList[num] + "</pre>";
});
showdown.subParser("makeMarkdown.strikethrough", function (node, globals) {
var txt = "";
if (node.hasChildNodes()) {
txt += "~~";
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(children[i], globals);
}
txt += "~~";
}
return txt;
});
showdown.subParser("makeMarkdown.strong", function (node, globals) {
var txt = "";
if (node.hasChildNodes()) {
txt += "**";
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(children[i], globals);
}
txt += "**";
}
return txt;
});
showdown.subParser("makeMarkdown.table", function (node, globals) {
var txt = "",
tableArray = [[], []],
headings = node.querySelectorAll("thead>tr>th"),
rows = node.querySelectorAll("tbody>tr"),
i,
ii;
for (i = 0; i < headings.length; ++i) {
var headContent = showdown.subParser("makeMarkdown.tableCell")(
headings[i],
globals,
),
allign = "---";
if (headings[i].hasAttribute("style")) {
var style = headings[i]
.getAttribute("style")
.toLowerCase()
.replace(/\s/g, "");
switch (style) {
case "text-align:left;":
allign = ":---";
break;
case "text-align:right;":
allign = "---:";
break;
case "text-align:center;":
allign = ":---:";
break;
}
}
tableArray[0][i] = headContent.trim();
tableArray[1][i] = allign;
}
for (i = 0; i < rows.length; ++i) {
var r = tableArray.push([]) - 1,
cols = rows[i].getElementsByTagName("td");
for (ii = 0; ii < headings.length; ++ii) {
var cellContent = " ";
if (typeof cols[ii] !== "undefined") {
cellContent = showdown.subParser("makeMarkdown.tableCell")(
cols[ii],
globals,
);
}
tableArray[r].push(cellContent);
}
}
var cellSpacesCount = 3;
for (i = 0; i < tableArray.length; ++i) {
for (ii = 0; ii < tableArray[i].length; ++ii) {
var strLen = tableArray[i][ii].length;
if (strLen > cellSpacesCount) {
cellSpacesCount = strLen;
}
}
}
for (i = 0; i < tableArray.length; ++i) {
for (ii = 0; ii < tableArray[i].length; ++ii) {
if (i === 1) {
if (tableArray[i][ii].slice(-1) === ":") {
tableArray[i][ii] =
showdown.helper.padEnd(
tableArray[i][ii].slice(-1),
cellSpacesCount - 1,
"-",
) + ":";
} else {
tableArray[i][ii] = showdown.helper.padEnd(
tableArray[i][ii],
cellSpacesCount,
"-",
);
}
} else {
tableArray[i][ii] = showdown.helper.padEnd(
tableArray[i][ii],
cellSpacesCount,
);
}
}
txt += "| " + tableArray[i].join(" | ") + " |\n";
}
return txt.trim();
});
showdown.subParser("makeMarkdown.tableCell", function (node, globals) {
var txt = "";
if (!node.hasChildNodes()) {
return "";
}
var children = node.childNodes,
childrenLength = children.length;
for (var i = 0; i < childrenLength; ++i) {
txt += showdown.subParser("makeMarkdown.node")(
children[i],
globals,
true,
);
}
return txt.trim();
});
showdown.subParser("makeMarkdown.txt", function (node) {
var txt = node.nodeValue;
// multiple spaces are collapsed
txt = txt.replace(/ +/g, " ");
// replace the custom ¨NBSP; with a space
txt = txt.replace(/¨NBSP;/g, " ");
// ", <, > and & should replace escaped html entities
txt = showdown.helper.unescapeHTMLEntities(txt);
// escape markdown magic characters
// emphasis, strong and strikethrough - can appear everywhere
// we also escape pipe (|) because of tables
// and escape ` because of code blocks and spans
txt = txt.replace(/([*_~|`])/g, "\\$1");
// escape > because of blockquotes
txt = txt.replace(/^(\s*)>/g, "\\$1>");
// hash character, only troublesome at the beginning of a line because of headers
txt = txt.replace(/^#/gm, "\\#");
// horizontal rules
txt = txt.replace(/^(\s*)([-=]{3,})(\s*)$/, "$1\\$2$3");
// dot, because of ordered lists, only troublesome at the beginning of a line when preceded by an integer
txt = txt.replace(/^( {0,3}\d+)\./gm, "$1\\.");
// +, * and -, at the beginning of a line becomes a list, so we need to escape them also (asterisk was already escaped)
txt = txt.replace(/^( {0,3})([+-])/gm, "$1\\$2");
// images and links, ] followed by ( is problematic, so we escape it
txt = txt.replace(/]([\s]*)\(/g, "\\]$1\\(");
// reference URIs must also be escaped
txt = txt.replace(/^ {0,3}\[([\S \t]*?)]:/gm, "\\[$1]:");
return txt;
});
var root = this;
// AMD Loader
if (module.exports) {
module.exports = showdown;
// Regular Browser loader
} else {
root.showdown = showdown;
}
}).call(commonjsGlobal);
});
var Card = /** @class */ (function () {
function Card(
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) {
if (containsCode === void 0) {
containsCode = false;
}
this.id = id;
this.deckName = deckName;
this.initialContent = initialContent;
this.fields = fields;
this.reversed = reversed;
this.initialOffset = initialOffset;
this.endOffset = endOffset;
this.tags = tags;
this.inserted = inserted;
this.mediaNames = mediaNames;
this.mediaBase64Encoded = [];
this.oldTags = [];
this.containsCode = containsCode;
this.modelName = "";
}
Card.prototype.match = function (card) {
// TODO not supported currently
// if (this.modelName !== card.modelName) {
// return false
// }
var e_1, _a;
var fields = Object.entries(card.fields);
// This is the case of a switch from a model to another one. It cannot be handeled
if (fields.length !== Object.entries(this.fields).length) {
return true;
}
try {
for (
var fields_1 = __values(fields), fields_1_1 = fields_1.next();
!fields_1_1.done;
fields_1_1 = fields_1.next()
) {
var field = fields_1_1.value;
var fieldName = field[0];
if (field[1].value !== this.fields[fieldName]) {
return false;
}
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (fields_1_1 && !fields_1_1.done && (_a = fields_1.return))
_a.call(fields_1);
} finally {
if (e_1) throw e_1.error;
}
}
return arraysEqual(card.tags, this.tags);
};
Card.prototype.getCodeDeckNameExtension = function () {
return this.containsCode ? codeDeckExtension : "";
};
return Card;
})();
var Flashcard = /** @class */ (function (_super) {
__extends(Flashcard, _super);
function Flashcard(
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) {
if (id === void 0) {
id = -1;
}
if (tags === void 0) {
tags = [];
}
if (inserted === void 0) {
inserted = false;
}
var _this =
_super.call(
this,
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) || this;
_this.toString = function () {
return "Q: ".concat(_this.fields[0], "\nA: ").concat(_this.fields[1]);
};
_this.modelName = _this.reversed
? "Obsidian-basic-reversed"
: "Obsidian-basic";
if (fields["Source"]) {
_this.modelName += sourceDeckExtension;
}
if (containsCode) {
_this.modelName += codeDeckExtension;
}
return _this;
}
Flashcard.prototype.getCard = function (update) {
if (update === void 0) {
update = false;
}
var card = {
deckName: this.deckName,
modelName: this.modelName,
fields: this.fields,
tags: this.tags,
};
if (update) {
card["id"] = this.id;
}
return card;
};
Flashcard.prototype.getMedias = function () {
var _this = this;
var medias = [];
this.mediaBase64Encoded.forEach(function (data, index) {
medias.push({
filename: _this.mediaNames[index],
data: data,
});
});
return medias;
};
Flashcard.prototype.getIdFormat = function () {
return "^" + this.id.toString() + "\n";
};
return Flashcard;
})(Card);
var Inlinecard = /** @class */ (function (_super) {
__extends(Inlinecard, _super);
function Inlinecard(
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) {
if (id === void 0) {
id = -1;
}
if (tags === void 0) {
tags = [];
}
if (inserted === void 0) {
inserted = false;
}
var _this =
_super.call(
this,
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) || this;
_this.toString = function () {
return "Q: "
.concat(_this.fields[0], " \nA: ")
.concat(_this.fields[1], " ");
};
_this.modelName = _this.reversed
? "Obsidian-basic-reversed"
: "Obsidian-basic";
if (fields["Source"]) {
_this.modelName += sourceDeckExtension;
}
if (containsCode) {
_this.modelName += codeDeckExtension;
}
return _this;
}
Inlinecard.prototype.getCard = function (update) {
if (update === void 0) {
update = false;
}
var card = {
deckName: this.deckName,
modelName: this.modelName,
fields: this.fields,
tags: this.tags,
};
if (update) {
card["id"] = this.id;
}
return card;
};
Inlinecard.prototype.getMedias = function () {
var _this = this;
var medias = [];
this.mediaBase64Encoded.forEach(function (data, index) {
medias.push({
filename: _this.mediaNames[index],
data: data,
});
});
return medias;
};
Inlinecard.prototype.getIdFormat = function () {
return "^" + this.id.toString();
};
return Inlinecard;
})(Card);
var Spacedcard = /** @class */ (function (_super) {
__extends(Spacedcard, _super);
function Spacedcard(
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) {
if (id === void 0) {
id = -1;
}
if (tags === void 0) {
tags = [];
}
if (inserted === void 0) {
inserted = false;
}
var _this =
_super.call(
this,
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) || this;
_this.toString = function () {
return "Prompt: ".concat(_this.fields[0]);
};
_this.modelName = "Obsidian-spaced";
if (fields["Source"]) {
_this.modelName += sourceDeckExtension;
}
if (containsCode) {
_this.modelName += codeDeckExtension;
}
return _this;
}
Spacedcard.prototype.getCard = function (update) {
if (update === void 0) {
update = false;
}
var card = {
deckName: this.deckName,
modelName: this.modelName,
fields: this.fields,
tags: this.tags,
};
if (update) {
card["id"] = this.id;
}
return card;
};
Spacedcard.prototype.getMedias = function () {
var _this = this;
var medias = [];
this.mediaBase64Encoded.forEach(function (data, index) {
medias.push({
filename: _this.mediaNames[index],
data: data,
});
});
return medias;
};
Spacedcard.prototype.getIdFormat = function () {
return "^" + this.id.toString() + "\n";
};
return Spacedcard;
})(Card);
var Clozecard = /** @class */ (function (_super) {
__extends(Clozecard, _super);
function Clozecard(
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) {
if (id === void 0) {
id = -1;
}
if (tags === void 0) {
tags = [];
}
if (inserted === void 0) {
inserted = false;
}
var _this =
_super.call(
this,
id,
deckName,
initialContent,
fields,
reversed,
initialOffset,
endOffset,
tags,
inserted,
mediaNames,
containsCode,
) || this;
_this.toString = function () {
return "Cloze: ".concat(_this.fields[0]);
};
_this.modelName = "Obsidian-cloze";
if (fields["Source"]) {
_this.modelName += sourceDeckExtension;
}
if (containsCode) {
_this.modelName += codeDeckExtension;
}
return _this;
}
Clozecard.prototype.getCard = function (update) {
if (update === void 0) {
update = false;
}
var card = {
deckName: this.deckName,
modelName: this.modelName,
fields: this.fields,
tags: this.tags,
};
if (update) {
card["id"] = this.id;
}
return card;
};
Clozecard.prototype.getMedias = function () {
var _this = this;
var medias = [];
this.mediaBase64Encoded.forEach(function (data, index) {
medias.push({
filename: _this.mediaNames[index],
data: data,
});
});
return medias;
};
Clozecard.prototype.getIdFormat = function () {
return "\n^" + this.id.toString();
};
return Clozecard;
})(Card);
var Parser = /** @class */ (function () {
function Parser(regex, settings) {
this.regex = regex;
this.settings = settings;
this.htmlConverter = new showdown.Converter();
this.htmlConverter.setOption("simplifiedAutoLink", true);
this.htmlConverter.setOption("tables", true);
this.htmlConverter.setOption("tasks", true);
this.htmlConverter.setOption("strikethrough", true);
this.htmlConverter.setOption("ghCodeBlocks", true);
this.htmlConverter.setOption("requireSpaceBeforeHeadingText", true);
this.htmlConverter.setOption("simpleLineBreaks", true);
}
Parser.prototype.generateFlashcards = function (
file,
deck,
vault,
note,
globalTags,
) {
var e_1, _a;
if (globalTags === void 0) {
globalTags = [];
}
var contextAware = this.settings.contextAwareMode;
var cards = [];
var headings = [];
if (contextAware) {
// https://regex101.com/r/agSp9X/4
headings = __spreadArray(
[],
__read(file.matchAll(this.regex.headingsRegex)),
false,
);
}
note = this.substituteObsidianLinks("[[".concat(note, "]]"), vault);
cards = cards.concat(
this.generateCardsWithTag(file, headings, deck, vault, note, globalTags),
);
cards = cards.concat(
this.generateInlineCards(file, headings, deck, vault, note, globalTags),
);
cards = cards.concat(
this.generateSpacedCards(file, headings, deck, vault, note, globalTags),
);
cards = cards.concat(
this.generateClozeCards(file, headings, deck, vault, note, globalTags),
);
// Filter out cards that are fully inside a code block, a math block or a math inline block
var codeBlocks = __spreadArray(
[],
__read(file.matchAll(this.regex.obsidianCodeBlock)),
false,
);
var mathBlocks = __spreadArray(
[],
__read(file.matchAll(this.regex.mathBlock)),
false,
);
var mathInline = __spreadArray(
[],
__read(file.matchAll(this.regex.mathInline)),
false,
);
var blocksToFilter = __spreadArray(
__spreadArray(
__spreadArray([], __read(codeBlocks), false),
__read(mathBlocks),
false,
),
__read(mathInline),
false,
);
var rangesToDiscard = blocksToFilter.map(function (x) {
return [x.index, x.index + x[0].length];
});
cards = cards.filter(function (card) {
var cardRange = [card.initialOffset, card.endOffset];
var isInRangeToDiscard = rangesToDiscard.some(function (range) {
return cardRange[0] >= range[0] && cardRange[1] <= range[1];
});
return !isInRangeToDiscard;
});
cards.sort(function (a, b) {
return a.endOffset - b.endOffset;
});
var defaultAnkiTag = this.settings.defaultAnkiTag;
if (defaultAnkiTag) {
try {
for (
var cards_1 = __values(cards), cards_1_1 = cards_1.next();
!cards_1_1.done;
cards_1_1 = cards_1.next()
) {
var card = cards_1_1.value;
card.tags.push(defaultAnkiTag);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (cards_1_1 && !cards_1_1.done && (_a = cards_1.return))
_a.call(cards_1);
} finally {
if (e_1) throw e_1.error;
}
}
}
return cards;
};
/**
* Gives back the ancestor headings of a line.
* @param headings The list of all the headings available in a file.
* @param line The line whose ancestors need to be calculated.
* @param headingLevel The level of the first ancestor heading, i.e. the number of #.
*/
Parser.prototype.getContext = function (headings, index, headingLevel) {
var context = [];
var currentIndex = index;
var goalLevel = 6;
var i = headings.length - 1;
// Get the level of the first heading before the index (i.e. above the current line)
if (headingLevel !== -1) {
// This is the case of a #flashcard in a heading
goalLevel = headingLevel - 1;
} else {
// Find first heading and its level
// This is the case of a #flashcard in a paragraph
for (i; i >= 0; i--) {
if (headings[i].index < currentIndex) {
currentIndex = headings[i].index;
goalLevel = headings[i][1].length - 1;
context.unshift(headings[i][2].trim());
break;
}
}
}
// Search for the other headings
for (i; i >= 0; i--) {
var currentLevel = headings[i][1].length;
if (currentLevel == goalLevel && headings[i].index < currentIndex) {
currentIndex = headings[i].index;
goalLevel = currentLevel - 1;
context.unshift(headings[i][2].trim());
}
}
return context;
};
Parser.prototype.generateSpacedCards = function (
file,
headings,
deck,
vault,
note,
globalTags,
) {
var e_2, _a;
if (globalTags === void 0) {
globalTags = [];
}
var contextAware = this.settings.contextAwareMode;
var cards = [];
var matches = __spreadArray(
[],
__read(file.matchAll(this.regex.cardsSpacedStyle)),
false,
);
try {
for (
var matches_1 = __values(matches), matches_1_1 = matches_1.next();
!matches_1_1.done;
matches_1_1 = matches_1.next()
) {
var match = matches_1_1.value;
var reversed = false;
var headingLevel = -1;
if (match[1]) {
headingLevel =
match[1].trim().length !== 0 ? match[1].trim().length : -1;
}
// Match.index - 1 because otherwise in the context there will be even match[1], i.e. the question itself
var context = contextAware
? this.getContext(headings, match.index - 1, headingLevel)
: "";
var originalPrompt = match[2].trim();
var prompt_1 = contextAware
? __spreadArray(
__spreadArray([], __read(context), false),
[match[2].trim()],
false,
).join("".concat(this.settings.contextSeparator))
: match[2].trim();
var medias = this.getImageLinks(prompt_1);
medias = medias.concat(this.getAudioLinks(prompt_1));
prompt_1 = this.parseLine(prompt_1, vault);
var initialOffset = match.index;
var endingLine = match.index + match[0].length;
var tags = this.parseTags(match[4], globalTags);
var id = match[5] ? Number(match[5]) : -1;
var inserted = match[5] ? true : false;
var fields = { Prompt: prompt_1 };
if (this.settings.sourceSupport) {
fields["Source"] = note;
}
var containsCode = this.containsCode([prompt_1]);
var card = new Spacedcard(
id,
deck,
originalPrompt,
fields,
reversed,
initialOffset,
endingLine,
tags,
inserted,
medias,
containsCode,
);
cards.push(card);
}
} catch (e_2_1) {
e_2 = { error: e_2_1 };
} finally {
try {
if (matches_1_1 && !matches_1_1.done && (_a = matches_1.return))
_a.call(matches_1);
} finally {
if (e_2) throw e_2.error;
}
}
return cards;
};
Parser.prototype.generateClozeCards = function (
file,
headings,
deck,
vault,
note,
globalTags,
) {
var e_3, _a;
if (globalTags === void 0) {
globalTags = [];
}
var contextAware = this.settings.contextAwareMode;
var cards = [];
var matches = __spreadArray(
[],
__read(file.matchAll(this.regex.cardsClozeWholeLine)),
false,
);
var mathBlocks = __spreadArray(
[],
__read(file.matchAll(this.regex.mathBlock)),
false,
);
var mathInline = __spreadArray(
[],
__read(file.matchAll(this.regex.mathInline)),
false,
);
var blocksToFilter = __spreadArray(
__spreadArray([], __read(mathBlocks), false),
__read(mathInline),
false,
);
var rangesToDiscard = blocksToFilter.map(function (x) {
return [x.index, x.index + x[0].length];
});
var _loop_1 = function (match) {
var reversed = false;
var headingLevel = -1;
if (match[1]) {
headingLevel =
match[1].trim().length !== 0 ? match[1].trim().length : -1;
}
// Match.index - 1 because otherwise in the context there will be even match[1], i.e. the question itself
var context = contextAware
? this_1.getContext(headings, match.index - 1, headingLevel)
: "";
// If all the curly clozes are inside a math block, then do not create the card
match[2].matchAll(this_1.regex.singleClozeCurly);
var matchIndex = match.index;
// Identify curly clozes, drop all the ones that are in math blocks i.e. ($\frac{1}{12}$) and substitute the others with Anki syntax
var clozeText = match[2].replace(
this_1.regex.singleClozeCurly,
function (match, g1, g2, g3, offset) {
var globalOffset = matchIndex + offset;
var isInMathBlock = rangesToDiscard.some(function (x) {
return (
globalOffset >= x[0] && globalOffset + match[0].length <= x[1]
);
});
if (isInMathBlock) {
return match;
} else {
if (g2) {
return "{{c".concat(g2, "::").concat(g3, "}}");
} else {
return "{{c1::".concat(g3, "}}");
}
}
},
);
// Replace the highlight clozes in the line with Anki syntax
clozeText = clozeText.replace(
this_1.regex.singleClozeHighlight,
"{{c1::$2}}",
);
if (clozeText === match[2]) {
return "continue";
}
var originalLine = match[2].trim();
// Add context
clozeText = contextAware
? __spreadArray(
__spreadArray([], __read(context), false),
[clozeText.trim()],
false,
).join("".concat(this_1.settings.contextSeparator))
: clozeText.trim();
var medias = this_1.getImageLinks(clozeText);
medias = medias.concat(this_1.getAudioLinks(clozeText));
clozeText = this_1.parseLine(clozeText, vault);
var initialOffset = match.index;
var endingLine = match.index + match[0].length;
var tags = this_1.parseTags(match[4], globalTags);
var id = match[5] ? Number(match[5]) : -1;
var inserted = match[5] ? true : false;
var fields = { Text: clozeText, Extra: "" };
if (this_1.settings.sourceSupport) {
fields["Source"] = note;
}
var containsCode = this_1.containsCode([clozeText]);
var card = new Clozecard(
id,
deck,
originalLine,
fields,
reversed,
initialOffset,
endingLine,
tags,
inserted,
medias,
containsCode,
);
cards.push(card);
};
var this_1 = this;
try {
for (
var matches_2 = __values(matches), matches_2_1 = matches_2.next();
!matches_2_1.done;
matches_2_1 = matches_2.next()
) {
var match = matches_2_1.value;
_loop_1(match);
}
} catch (e_3_1) {
e_3 = { error: e_3_1 };
} finally {
try {
if (matches_2_1 && !matches_2_1.done && (_a = matches_2.return))
_a.call(matches_2);
} finally {
if (e_3) throw e_3.error;
}
}
return cards;
};
Parser.prototype.generateInlineCards = function (
file,
headings,
deck,
vault,
note,
globalTags,
) {
var e_4, _a;
if (globalTags === void 0) {
globalTags = [];
}
var contextAware = this.settings.contextAwareMode;
var cards = [];
var matches = __spreadArray(
[],
__read(file.matchAll(this.regex.cardsInlineStyle)),
false,
);
try {
for (
var matches_3 = __values(matches), matches_3_1 = matches_3.next();
!matches_3_1.done;
matches_3_1 = matches_3.next()
) {
var match = matches_3_1.value;
if (
match[2].toLowerCase().startsWith("cards-deck") ||
match[2].toLowerCase().startsWith("tags")
) {
continue;
}
var reversed = match[3] === this.settings.inlineSeparatorReverse;
var headingLevel = -1;
if (match[1]) {
headingLevel =
match[1].trim().length !== 0 ? match[1].trim().length : -1;
}
// Match.index - 1 because otherwise in the context there will be even match[1], i.e. the question itself
var context = contextAware
? this.getContext(headings, match.index - 1, headingLevel)
: "";
var originalQuestion = match[2].trim();
var question = contextAware
? __spreadArray(
__spreadArray([], __read(context), false),
[match[2].trim()],
false,
).join("".concat(this.settings.contextSeparator))
: match[2].trim();
var answer = match[4].trim();
var medias = this.getImageLinks(question);
medias = medias.concat(this.getImageLinks(answer));
medias = medias.concat(this.getAudioLinks(answer));
question = this.parseLine(question, vault);
answer = this.parseLine(answer, vault);
var initialOffset = match.index;
var endingLine = match.index + match[0].length;
var tags = this.parseTags(match[5], globalTags);
var id = match[6] ? Number(match[6]) : -1;
var inserted = match[6] ? true : false;
var fields = { Front: question, Back: answer };
if (this.settings.sourceSupport) {
fields["Source"] = note;
}
var containsCode = this.containsCode([question, answer]);
var card = new Inlinecard(
id,
deck,
originalQuestion,
fields,
reversed,
initialOffset,
endingLine,
tags,
inserted,
medias,
containsCode,
);
cards.push(card);
}
} catch (e_4_1) {
e_4 = { error: e_4_1 };
} finally {
try {
if (matches_3_1 && !matches_3_1.done && (_a = matches_3.return))
_a.call(matches_3);
} finally {
if (e_4) throw e_4.error;
}
}
return cards;
};
Parser.prototype.generateCardsWithTag = function (
file,
headings,
deck,
vault,
note,
globalTags,
) {
var e_5, _a;
if (globalTags === void 0) {
globalTags = [];
}
var contextAware = this.settings.contextAwareMode;
var cards = [];
var matches = __spreadArray(
[],
__read(file.matchAll(this.regex.flashscardsWithTag)),
false,
);
var embedMap = this.getEmbedMap();
try {
for (
var matches_4 = __values(matches), matches_4_1 = matches_4.next();
!matches_4_1.done;
matches_4_1 = matches_4.next()
) {
var match = matches_4_1.value;
var reversed =
match[3].trim().toLowerCase() ===
"#".concat(this.settings.flashcardsTag, "-reverse") ||
match[3].trim().toLowerCase() ===
"#".concat(this.settings.flashcardsTag, "/reverse");
var headingLevel = match[1].trim().length !== 0 ? match[1].length : -1;
// Match.index - 1 because otherwise in the context there will be even match[1], i.e. the question itself
var context = contextAware
? this.getContext(headings, match.index - 1, headingLevel).concat([])
: "";
var originalQuestion = match[2].trim();
var question = contextAware
? __spreadArray(
__spreadArray([], __read(context), false),
[match[2].trim()],
false,
).join("".concat(this.settings.contextSeparator))
: match[2].trim();
var answer = match[5].trim();
var medias = this.getImageLinks(question);
medias = medias.concat(this.getImageLinks(answer));
medias = medias.concat(this.getAudioLinks(answer));
answer = this.getEmbedWrapContent(embedMap, answer);
question = this.parseLine(question, vault);
answer = this.parseLine(answer, vault);
var initialOffset = match.index;
var endingLine = match.index + match[0].length;
var tags = this.parseTags(match[4], globalTags);
var id = match[6] ? Number(match[6]) : -1;
var inserted = match[6] ? true : false;
var fields = { Front: question, Back: answer };
if (this.settings.sourceSupport) {
fields["Source"] = note;
}
var containsCode = this.containsCode([question, answer]);
var card = new Flashcard(
id,
deck,
originalQuestion,
fields,
reversed,
initialOffset,
endingLine,
tags,
inserted,
medias,
containsCode,
);
cards.push(card);
}
} catch (e_5_1) {
e_5 = { error: e_5_1 };
} finally {
try {
if (matches_4_1 && !matches_4_1.done && (_a = matches_4.return))
_a.call(matches_4);
} finally {
if (e_5) throw e_5.error;
}
}
return cards;
};
Parser.prototype.containsCode = function (str) {
var e_6, _a;
try {
for (
var str_1 = __values(str), str_1_1 = str_1.next();
!str_1_1.done;
str_1_1 = str_1.next()
) {
var s = str_1_1.value;
if (s.match(this.regex.codeBlock)) {
return true;
}
}
} catch (e_6_1) {
e_6 = { error: e_6_1 };
} finally {
try {
if (str_1_1 && !str_1_1.done && (_a = str_1.return)) _a.call(str_1);
} finally {
if (e_6) throw e_6.error;
}
}
return false;
};
Parser.prototype.getCardsToDelete = function (file) {
// Find block IDs with no content above it
return __spreadArray(
[],
__read(file.matchAll(this.regex.cardsToDelete)),
false,
).map(function (match) {
return Number(match[1]);
});
};
Parser.prototype.parseLine = function (str, vaultName) {
return this.htmlConverter.makeHtml(
this.mathToAnki(
this.substituteObsidianLinks(
this.substituteImageLinks(this.substituteAudioLinks(str)),
vaultName,
),
),
);
};
Parser.prototype.getImageLinks = function (str) {
var e_7, _a, e_8, _b;
var wikiMatches = str.matchAll(this.regex.wikiImageLinks);
var markdownMatches = str.matchAll(this.regex.markdownImageLinks);
var links = [];
try {
for (
var wikiMatches_1 = __values(wikiMatches),
wikiMatches_1_1 = wikiMatches_1.next();
!wikiMatches_1_1.done;
wikiMatches_1_1 = wikiMatches_1.next()
) {
var wikiMatch = wikiMatches_1_1.value;
links.push(wikiMatch[1]);
}
} catch (e_7_1) {
e_7 = { error: e_7_1 };
} finally {
try {
if (
wikiMatches_1_1 &&
!wikiMatches_1_1.done &&
(_a = wikiMatches_1.return)
)
_a.call(wikiMatches_1);
} finally {
if (e_7) throw e_7.error;
}
}
try {
for (
var markdownMatches_1 = __values(markdownMatches),
markdownMatches_1_1 = markdownMatches_1.next();
!markdownMatches_1_1.done;
markdownMatches_1_1 = markdownMatches_1.next()
) {
var markdownMatch = markdownMatches_1_1.value;
links.push(decodeURIComponent(markdownMatch[1]));
}
} catch (e_8_1) {
e_8 = { error: e_8_1 };
} finally {
try {
if (
markdownMatches_1_1 &&
!markdownMatches_1_1.done &&
(_b = markdownMatches_1.return)
)
_b.call(markdownMatches_1);
} finally {
if (e_8) throw e_8.error;
}
}
return links;
};
Parser.prototype.getAudioLinks = function (str) {
var e_9, _a;
var wikiMatches = str.matchAll(this.regex.wikiAudioLinks);
var links = [];
try {
for (
var wikiMatches_2 = __values(wikiMatches),
wikiMatches_2_1 = wikiMatches_2.next();
!wikiMatches_2_1.done;
wikiMatches_2_1 = wikiMatches_2.next()
) {
var wikiMatch = wikiMatches_2_1.value;
links.push(wikiMatch[1]);
}
} catch (e_9_1) {
e_9 = { error: e_9_1 };
} finally {
try {
if (
wikiMatches_2_1 &&
!wikiMatches_2_1.done &&
(_a = wikiMatches_2.return)
)
_a.call(wikiMatches_2);
} finally {
if (e_9) throw e_9.error;
}
}
return links;
};
Parser.prototype.substituteObsidianLinks = function (str, vaultName) {
var linkRegex = /\[\[(.+?)(?:\|(.+?))?\]\]/gim;
vaultName = encodeURIComponent(vaultName);
return str.replace(linkRegex, function (match, filename, rename) {
var href = "obsidian://open?vault="
.concat(vaultName, "&file=")
.concat(encodeURIComponent(filename), ".md");
var fileRename = rename ? rename : filename;
return '<a href="'.concat(href, '">').concat(fileRename, "</a>");
});
};
Parser.prototype.substituteImageLinks = function (str) {
str = str.replace(this.regex.wikiImageLinks, "<img src='$1'>");
str = str.replace(this.regex.markdownImageLinks, "<img src='$1'>");
return str;
};
Parser.prototype.substituteAudioLinks = function (str) {
return str.replace(this.regex.wikiAudioLinks, "[sound:$1]");
};
Parser.prototype.mathToAnki = function (str) {
str = str.replace(this.regex.mathBlock, function (match, p1, p2) {
return "\\\\[" + escapeMarkdown(p2) + " \\\\]";
});
str = str.replace(this.regex.mathInline, function (match, p1, p2) {
return "\\\\(" + escapeMarkdown(p2) + "\\\\)";
});
return str;
};
Parser.prototype.parseTags = function (str, globalTags) {
var e_10, _a;
var tags = __spreadArray([], __read(globalTags), false);
if (str) {
try {
for (
var _b = __values(str.split("#")), _c = _b.next();
!_c.done;
_c = _b.next()
) {
var tag = _c.value;
var newTag = tag.trim();
if (newTag) {
// Replace obsidian hierarchy tags delimeter \ with anki delimeter ::
newTag = newTag.replace(this.regex.tagHierarchy, "::");
tags.push(newTag);
}
}
} catch (e_10_1) {
e_10 = { error: e_10_1 };
} finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
} finally {
if (e_10) throw e_10.error;
}
}
}
return tags;
};
Parser.prototype.getAnkiIDsBlocks = function (file) {
return Array.from(file.matchAll(/\^(\d{13})\s*/gm));
};
Parser.prototype.getEmbedMap = function () {
var _this = this;
// key:link url
// value: embed content parse from html document
var embedMap = new Map();
var embedList = Array.from(
document.documentElement.getElementsByClassName("internal-embed"),
);
Array.from(embedList).forEach(function (el) {
// markdown-embed-content markdown-embed-page
var embedValue = _this.htmlConverter.makeMarkdown(
_this.htmlConverter.makeHtml(el.outerHTML).toString(),
);
var embedKey = el.getAttribute("src");
embedMap.set(embedKey, embedValue);
// console.log("embedKey: \n" + embedKey);
// console.log("embedValue: \n" + embedValue);
});
return embedMap;
};
Parser.prototype.getEmbedWrapContent = function (embedMap, embedContent) {
var result = embedContent.match(this.regex.embedBlock);
while ((result = this.regex.embedBlock.exec(embedContent))) {
// console.log("result[0]: " + result[0]);
// console.log("embedMap.get(result[1]): " + embedMap.get(result[1]));
embedContent = embedContent.concat(embedMap.get(result[1]));
}
return embedContent;
};
return Parser;
})();
var Regex = /** @class */ (function () {
function Regex(settings) {
this.update(settings);
}
Regex.prototype.update = function (settings) {
// https://regex101.com/r/BOieWh/1
this.headingsRegex = /^ {0,3}(#{1,6}) +([^\n]+?) ?((?: *#\S+)*) *$/gim;
// Supported images https://publish.obsidian.md/help/How+to/Embed+files
this.wikiImageLinks =
/!\[\[(.*\.(?:png|jpg|jpeg|gif|bmp|svg|tiff)).*?\]\]/gim;
this.markdownImageLinks =
/!\[\]\((.*\.(?:png|jpg|jpeg|gif|bmp|svg|tiff)).*?\)/gim;
this.wikiAudioLinks =
/!\[\[(.*\.(?:mp3|webm|wav|m4a|ogg|3gp|flac)).*?\]\]/gim;
// https://regex101.com/r/eqnJeW/1
this.obsidianCodeBlock = /(?:```(?:.*?\n?)+?```)(?:\n|$)/gim;
this.codeBlock = /<code\b[^>]*>(.*?)<\/code>/gims;
this.mathBlock = /(\$\$)(.*?)(\$\$)/gis;
this.mathInline = /(\$)(.*?)(\$)/gi;
this.cardsDeckLine = /cards-deck: [\p{L}]+/giu;
this.cardsToDelete = /^\s*(?:\n)(?:\^(\d{13}))(?:\n\s*?)?/gm;
// https://regex101.com/r/WxuFI2/1
this.globalTagsSplitter =
/\[\[(.*?)\]\]|#([\p{L}\d:\-_/]+)|([\p{L}\d:\-_/]+)/gimu;
this.tagHierarchy = /\//gm;
// Cards
var flags = "gimu";
// https://regex101.com/r/p3yQwY/2
var str =
"( {0,3}[#]*)((?:[^\\n]\\n?)+?)(#" +
settings.flashcardsTag +
"(?:[/-]reverse)?)((?: *#[\\p{Number}\\p{Letter}\\-\\/_]+)*) *?\\n+((?:[^\\n]\\n?)*?(?=\\^\\d{13}|$))(?:\\^(\\d{13}))?";
this.flashscardsWithTag = new RegExp(str, flags);
// https://regex101.com/r/8wmOo8/1
var sepLongest =
settings.inlineSeparator.length >= settings.inlineSeparatorReverse.length
? settings.inlineSeparator
: settings.inlineSeparatorReverse;
var sepShortest =
settings.inlineSeparator.length < settings.inlineSeparatorReverse.length
? settings.inlineSeparator
: settings.inlineSeparatorReverse;
// sepLongest is the longest between the inlineSeparator and the inlineSeparatorReverse because if the order is ::|::: then always the first will be matched
// sepShortest is the shortest
if (settings.inlineID) {
str =
"( {0,3}[#]{0,6})?(?:(?:[\\t ]*)(?:\\d.|[-+*]|#{1,6}))?(.+?) ?(" +
sepLongest +
"|" +
sepShortest +
") ?(.+?)((?: *#[\\p{Letter}\\-\\/_]+)+)?(?:\\s+\\^(\\d{13})|$)";
} else {
str =
"( {0,3}[#]{0,6})?(?:(?:[\\t ]*)(?:\\d.|[-+*]|#{1,6}))?(.+?) ?(" +
sepLongest +
"|" +
sepShortest +
") ?(.+?)((?: *#[\\p{Letter}\\-\\/_]+)+|$)(?:\\n\\^(\\d{13}))?";
}
this.cardsInlineStyle = new RegExp(str, flags);
// https://regex101.com/r/HOXF5E/1
str =
"( {0,3}[#]*)((?:[^\\n]\\n?)+?)(#" +
settings.flashcardsTag +
"[/-]spaced)((?: *#[\\p{Letter}-]+)*) *\\n?(?:\\^(\\d{13}))?";
this.cardsSpacedStyle = new RegExp(str, flags);
// https://regex101.com/r/cgtnLf/1
str =
"( {0,3}[#]{0,6})?(?:(?:[\\t ]*)(?:\\d.|[-+*]|#{1,6}))?(.*?(==.+?==|\\{.+?\\}).*?)((?: *#[\\w\\-\\/_]+)+|$)(?:\n\\^(\\d{13}))?";
this.cardsClozeWholeLine = new RegExp(str, flags);
this.singleClozeCurly = /((?:{)(?:(\d):?)?(.+?)(?:}))/g;
this.singleClozeHighlight = /((?:==)(.+?)(?:==))/g;
// Matches any embedded block but the one with an used extension from the wikilinks
this.embedBlock =
/!\[\[(.*?)(?<!\.(?:png|jpg|jpeg|gif|bmp|svg|tiff|mp3|webm|wav|m4a|ogg|3gp|flac))\]\]/g;
};
return Regex;
})();
var CardsService = /** @class */ (function () {
function CardsService(app, settings) {
this.app = app;
this.settings = settings;
this.regex = new Regex(this.settings);
this.parser = new Parser(this.regex, this.settings);
this.anki = new Anki();
}
CardsService.prototype.execute = function (activeFile) {
return __awaiter(this, void 0, void 0, function () {
var err_1,
filePath,
sourcePath,
fileCachedMetadata,
vaultName,
globalTags,
frontmatter,
deckName,
_a,
ankiBlocks,
ankiCards,
_b,
cards,
_c,
cardsToCreate,
cardsToUpdate,
cardsNotInAnki,
cardIds,
cardsToDelete,
cardsNotInAnki_1,
cardsNotInAnki_1_1,
card,
deckNeedToBeChanged,
err_2;
var e_1, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
this.regex.update(this.settings);
_e.label = 1;
case 1:
_e.trys.push([1, 3, , 4]);
return [4 /*yield*/, this.anki.ping()];
case 2:
_e.sent();
return [3 /*break*/, 4];
case 3:
err_1 = _e.sent();
console.error(err_1);
return [
2 /*return*/,
["Error: Anki must be open with AnkiConnect installed."],
];
case 4:
// Init for the execute phase
this.updateFile = false;
this.totalOffset = 0;
this.notifications = [];
filePath = activeFile.basename;
sourcePath = activeFile.path;
fileCachedMetadata =
this.app.metadataCache.getFileCache(activeFile);
vaultName = this.app.vault.getName();
globalTags = undefined;
frontmatter = fileCachedMetadata.frontmatter;
deckName = "";
if (frontmatter["cards-deck"]) {
deckName = frontmatter["cards-deck"];
} else if (
this.settings.folderBasedDeck &&
activeFile.parent.path !== "/"
) {
// If the current file is in the path "programming/java/strings.md" then the deck name is "programming::java"
deckName = activeFile.parent.path.split("/").join("::");
} else {
deckName = this.settings.deck;
}
_e.label = 5;
case 5:
_e.trys.push([5, 16, , 17]);
this.anki.storeCodeHighlightMedias();
return [
4 /*yield*/,
this.anki.createModels(
this.settings.sourceSupport,
this.settings.codeHighlightSupport,
),
];
case 6:
_e.sent();
return [4 /*yield*/, this.anki.createDeck(deckName)];
case 7:
_e.sent();
_a = this;
return [4 /*yield*/, this.app.vault.read(activeFile)];
case 8:
_a.file = _e.sent();
if (!this.file.endsWith("\n")) {
this.file += "\n";
}
globalTags = this.parseGlobalTags(this.file);
ankiBlocks = this.parser.getAnkiIDsBlocks(this.file);
if (!ankiBlocks) return [3 /*break*/, 10];
return [
4 /*yield*/,
this.anki.getCards(this.getAnkiIDs(ankiBlocks)),
];
case 9:
_b = _e.sent();
return [3 /*break*/, 11];
case 10:
_b = undefined;
_e.label = 11;
case 11:
ankiCards = _b;
cards = this.parser.generateFlashcards(
this.file,
deckName,
vaultName,
filePath,
globalTags,
);
(_c = __read(this.filterByUpdate(ankiCards, cards), 3)),
(cardsToCreate = _c[0]),
(cardsToUpdate = _c[1]),
(cardsNotInAnki = _c[2]);
cardIds = this.getCardsIds(ankiCards, cards);
cardsToDelete = this.parser.getCardsToDelete(this.file);
console.info("Flashcards: Cards to create");
console.info(cardsToCreate);
console.info("Flashcards: Cards to update");
console.info(cardsToUpdate);
console.info("Flashcards: Cards to delete");
console.info(cardsToDelete);
if (cardsNotInAnki) {
console.info("Flashcards: Cards not in Anki (maybe deleted)");
try {
for (
cardsNotInAnki_1 = __values(cardsNotInAnki),
cardsNotInAnki_1_1 = cardsNotInAnki_1.next();
!cardsNotInAnki_1_1.done;
cardsNotInAnki_1_1 = cardsNotInAnki_1.next()
) {
card = cardsNotInAnki_1_1.value;
this.notifications.push(
"Error: Card with ID ".concat(card.id, " is not in Anki!"),
);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (
cardsNotInAnki_1_1 &&
!cardsNotInAnki_1_1.done &&
(_d = cardsNotInAnki_1.return)
)
_d.call(cardsNotInAnki_1);
} finally {
if (e_1) throw e_1.error;
}
}
}
console.info(cardsNotInAnki);
this.insertMedias(cards, sourcePath);
return [
4 /*yield*/,
this.deleteCardsOnAnki(cardsToDelete, ankiBlocks),
];
case 12:
_e.sent();
return [4 /*yield*/, this.updateCardsOnAnki(cardsToUpdate)];
case 13:
_e.sent();
return [4 /*yield*/, this.insertCardsOnAnki(cardsToCreate)];
case 14:
_e.sent();
return [4 /*yield*/, this.deckNeedToBeChanged(cardIds, deckName)];
case 15:
deckNeedToBeChanged = _e.sent();
if (deckNeedToBeChanged) {
try {
this.anki.changeDeck(cardIds, deckName);
this.notifications.push("Cards moved in new deck");
} catch (_f) {
return [
2 /*return*/,
["Error: Could not update deck the file."],
];
}
}
// Update file
if (this.updateFile) {
try {
this.app.vault.modify(activeFile, this.file);
} catch (err) {
return [2 /*return*/, ["Error: Could not update the file."]];
}
}
this.updateFrontmatter(deckName);
if (!this.notifications.length) {
this.notifications.push(
"Nothing to do. Everything is up to date",
);
}
return [2 /*return*/, this.notifications];
case 16:
err_2 = _e.sent();
console.error(err_2);
return [3 /*break*/, 17];
case 17:
return [2 /*return*/];
}
});
});
};
CardsService.prototype.insertMedias = function (cards, sourcePath) {
return __awaiter(this, void 0, void 0, function () {
var err_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
// Currently the media are created for every run, this is not a problem since Anki APIs overwrite the file
// A more efficient way would be to keep track of the medias saved
return [4 /*yield*/, this.generateMediaLinks(cards, sourcePath)];
case 1:
// Currently the media are created for every run, this is not a problem since Anki APIs overwrite the file
// A more efficient way would be to keep track of the medias saved
_a.sent();
return [4 /*yield*/, this.anki.storeMediaFiles(cards)];
case 2:
_a.sent();
return [3 /*break*/, 4];
case 3:
err_3 = _a.sent();
console.error(err_3);
return [3 /*break*/, 4];
case 4:
return [2 /*return*/];
}
});
});
};
CardsService.prototype.generateMediaLinks = function (cards, sourcePath) {
return __awaiter(this, void 0, void 0, function () {
var cards_1,
cards_1_1,
card,
_a,
_b,
media,
image,
binaryMedia,
e_2_1,
e_3_1;
var e_3, _c, e_2, _d;
return __generator(this, function (_e) {
switch (_e.label) {
case 0:
if (!(this.app.vault.adapter instanceof obsidian.FileSystemAdapter))
return [3 /*break*/, 16];
_e.label = 1;
case 1:
_e.trys.push([1, 14, 15, 16]);
(cards_1 = __values(cards)), (cards_1_1 = cards_1.next());
_e.label = 2;
case 2:
if (!!cards_1_1.done) return [3 /*break*/, 13];
card = cards_1_1.value;
_e.label = 3;
case 3:
_e.trys.push([3, 10, 11, 12]);
(_a = ((e_2 = void 0), __values(card.mediaNames))),
(_b = _a.next());
_e.label = 4;
case 4:
if (!!_b.done) return [3 /*break*/, 9];
media = _b.value;
image = this.app.metadataCache.getFirstLinkpathDest(
decodeURIComponent(media),
sourcePath,
);
_e.label = 5;
case 5:
_e.trys.push([5, 7, , 8]);
return [4 /*yield*/, this.app.vault.readBinary(image)];
case 6:
binaryMedia = _e.sent();
card.mediaBase64Encoded.push(arrayBufferToBase64(binaryMedia));
return [3 /*break*/, 8];
case 7:
_e.sent();
return [3 /*break*/, 8];
case 8:
_b = _a.next();
return [3 /*break*/, 4];
case 9:
return [3 /*break*/, 12];
case 10:
e_2_1 = _e.sent();
e_2 = { error: e_2_1 };
return [3 /*break*/, 12];
case 11:
try {
if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
} finally {
if (e_2) throw e_2.error;
}
return [7 /*endfinally*/];
case 12:
cards_1_1 = cards_1.next();
return [3 /*break*/, 2];
case 13:
return [3 /*break*/, 16];
case 14:
e_3_1 = _e.sent();
e_3 = { error: e_3_1 };
return [3 /*break*/, 16];
case 15:
try {
if (cards_1_1 && !cards_1_1.done && (_c = cards_1.return))
_c.call(cards_1);
} finally {
if (e_3) throw e_3.error;
}
return [7 /*endfinally*/];
case 16:
return [2 /*return*/];
}
});
});
};
CardsService.prototype.insertCardsOnAnki = function (cardsToCreate) {
return __awaiter(this, void 0, void 0, function () {
var insertedCards_1, ids, total_1, err_5;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!cardsToCreate.length) return [3 /*break*/, 4];
insertedCards_1 = 0;
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, this.anki.addCards(cardsToCreate)];
case 2:
ids = _a.sent();
// Add IDs from response to Flashcard[]
ids.map(function (id, index) {
cardsToCreate[index].id = id;
});
total_1 = 0;
cardsToCreate.forEach(function (card) {
if (card.id === null) {
new obsidian.Notice(
"Error, could not add: '".concat(card.initialContent, "'"),
noticeTimeout,
);
} else {
card.reversed ? (insertedCards_1 += 2) : insertedCards_1++;
}
card.reversed ? (total_1 += 2) : total_1++;
});
this.writeAnkiBlocks(cardsToCreate);
this.notifications.push(
"Inserted successfully "
.concat(insertedCards_1, "/")
.concat(total_1, " cards."),
);
return [2 /*return*/, insertedCards_1];
case 3:
err_5 = _a.sent();
console.error(err_5);
return [3 /*break*/, 4];
case 4:
return [2 /*return*/];
}
});
});
};
CardsService.prototype.updateFrontmatter = function (deckName) {
const activeFile = this.app.workspace.getActiveFile();
this.app.fileManager.processFrontMatter(activeFile, (frontmatter) => {
frontmatter["cards-deck"] = deckName;
});
};
CardsService.prototype.writeAnkiBlocks = function (cardsToCreate) {
var e_4, _a;
try {
for (
var cardsToCreate_1 = __values(cardsToCreate),
cardsToCreate_1_1 = cardsToCreate_1.next();
!cardsToCreate_1_1.done;
cardsToCreate_1_1 = cardsToCreate_1.next()
) {
var card = cardsToCreate_1_1.value;
// Card.id cannot be null, because if written already previously it has an ID,
// if it has been inserted it has an ID too
if (card.id !== null && !card.inserted) {
var id = card.getIdFormat();
if (card instanceof Inlinecard) {
if (this.settings.inlineID) {
id = " " + id;
} else {
id = "\n" + id;
}
}
card.endOffset += this.totalOffset;
var offset = card.endOffset;
this.updateFile = true;
this.file =
this.file.substring(0, offset) +
id +
this.file.substring(offset, this.file.length + 1);
this.totalOffset += id.length;
}
}
} catch (e_4_1) {
e_4 = { error: e_4_1 };
} finally {
try {
if (
cardsToCreate_1_1 &&
!cardsToCreate_1_1.done &&
(_a = cardsToCreate_1.return)
)
_a.call(cardsToCreate_1);
} finally {
if (e_4) throw e_4.error;
}
}
};
CardsService.prototype.updateCardsOnAnki = function (cards) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
if (cards.length) {
try {
this.anki.updateCards(cards);
this.notifications.push(
"Updated successfully "
.concat(cards.length, "/")
.concat(cards.length, " cards."),
);
} catch (err) {
console.error(err);
}
return [2 /*return*/, cards.length];
}
return [2 /*return*/];
});
});
};
CardsService.prototype.deleteCardsOnAnki = function (cards, ankiBlocks) {
return __awaiter(this, void 0, void 0, function () {
var deletedCards, ankiBlocks_1, ankiBlocks_1_1, block, id;
var e_5, _a;
return __generator(this, function (_b) {
if (cards.length) {
deletedCards = 0;
try {
for (
ankiBlocks_1 = __values(ankiBlocks),
ankiBlocks_1_1 = ankiBlocks_1.next();
!ankiBlocks_1_1.done;
ankiBlocks_1_1 = ankiBlocks_1.next()
) {
block = ankiBlocks_1_1.value;
id = Number(block[1]);
// Deletion of cards that need to be deleted (i.e. blocks ID that don't have content)
if (cards.includes(id)) {
try {
this.anki.deleteCards(cards);
deletedCards++;
this.updateFile = true;
this.file =
this.file.substring(0, block["index"]) +
this.file.substring(
block["index"] + block[0].length,
this.file.length,
);
this.totalOffset -= block[0].length;
this.notifications.push(
"Deleted successfully "
.concat(deletedCards, "/")
.concat(cards.length, " cards."),
);
} catch (err) {
console.error(err);
Error("Error, could not delete the card from Anki");
}
}
}
} catch (e_5_1) {
e_5 = { error: e_5_1 };
} finally {
try {
if (
ankiBlocks_1_1 &&
!ankiBlocks_1_1.done &&
(_a = ankiBlocks_1.return)
)
_a.call(ankiBlocks_1);
} finally {
if (e_5) throw e_5.error;
}
}
return [2 /*return*/, deletedCards];
}
return [2 /*return*/];
});
});
};
CardsService.prototype.getAnkiIDs = function (blocks) {
var e_6, _a;
var IDs = [];
try {
for (
var blocks_1 = __values(blocks), blocks_1_1 = blocks_1.next();
!blocks_1_1.done;
blocks_1_1 = blocks_1.next()
) {
var b = blocks_1_1.value;
IDs.push(Number(b[1]));
}
} catch (e_6_1) {
e_6 = { error: e_6_1 };
} finally {
try {
if (blocks_1_1 && !blocks_1_1.done && (_a = blocks_1.return))
_a.call(blocks_1);
} finally {
if (e_6) throw e_6.error;
}
}
return IDs;
};
CardsService.prototype.filterByUpdate = function (ankiCards, generatedCards) {
var e_7, _a;
var cardsToCreate = [];
var cardsToUpdate = [];
var cardsNotInAnki = [];
if (ankiCards) {
var _loop_1 = function (flashcard) {
// Inserted means that anki blocks are available, that means that the card should
// (the user can always delete it) be in Anki
var ankiCard = undefined;
if (flashcard.inserted) {
ankiCard = ankiCards.filter(function (card) {
return Number(card.noteId) === flashcard.id;
})[0];
if (!ankiCard) {
cardsNotInAnki.push(flashcard);
} else if (!flashcard.match(ankiCard)) {
flashcard.oldTags = ankiCard.tags;
cardsToUpdate.push(flashcard);
}
} else {
cardsToCreate.push(flashcard);
}
};
try {
for (
var generatedCards_1 = __values(generatedCards),
generatedCards_1_1 = generatedCards_1.next();
!generatedCards_1_1.done;
generatedCards_1_1 = generatedCards_1.next()
) {
var flashcard = generatedCards_1_1.value;
_loop_1(flashcard);
}
} catch (e_7_1) {
e_7 = { error: e_7_1 };
} finally {
try {
if (
generatedCards_1_1 &&
!generatedCards_1_1.done &&
(_a = generatedCards_1.return)
)
_a.call(generatedCards_1);
} finally {
if (e_7) throw e_7.error;
}
}
} else {
cardsToCreate = __spreadArray([], __read(generatedCards), false);
}
return [cardsToCreate, cardsToUpdate, cardsNotInAnki];
};
CardsService.prototype.deckNeedToBeChanged = function (cardsIds, deckName) {
return __awaiter(this, void 0, void 0, function () {
var cardsInfo;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, this.anki.cardsInfo(cardsIds)];
case 1:
cardsInfo = _a.sent();
console.log("Flashcards: Cards info");
console.log(cardsInfo);
if (cardsInfo.length !== 0) {
return [2 /*return*/, cardsInfo[0].deckName !== deckName];
}
return [2 /*return*/, false];
}
});
});
};
CardsService.prototype.getCardsIds = function (ankiCards, generatedCards) {
var e_8, _a;
var ids = [];
if (ankiCards) {
var _loop_2 = function (flashcard) {
var ankiCard = undefined;
if (flashcard.inserted) {
ankiCard = ankiCards.filter(function (card) {
return Number(card.noteId) === flashcard.id;
})[0];
if (ankiCard) {
ids = ids.concat(ankiCard.cards);
}
}
};
try {
for (
var generatedCards_2 = __values(generatedCards),
generatedCards_2_1 = generatedCards_2.next();
!generatedCards_2_1.done;
generatedCards_2_1 = generatedCards_2.next()
) {
var flashcard = generatedCards_2_1.value;
_loop_2(flashcard);
}
} catch (e_8_1) {
e_8 = { error: e_8_1 };
} finally {
try {
if (
generatedCards_2_1 &&
!generatedCards_2_1.done &&
(_a = generatedCards_2.return)
)
_a.call(generatedCards_2);
} finally {
if (e_8) throw e_8.error;
}
}
}
return ids;
};
CardsService.prototype.parseGlobalTags = function (file) {
var globalTags = [];
var tags = file.match(/(?:cards-)?tags: ?(.*)/im);
globalTags = tags ? tags[1].match(this.regex.globalTagsSplitter) : [];
if (globalTags) {
for (var i = 0; i < globalTags.length; i++) {
globalTags[i] = globalTags[i].replace("#", "");
globalTags[i] = globalTags[i].replace(/\//g, "::");
globalTags[i] = globalTags[i].replace(/\[\[(.*)\]\]/, "$1");
globalTags[i] = globalTags[i].trim();
globalTags[i] = globalTags[i].replace(/ /g, "-");
}
return globalTags;
}
return [];
};
return CardsService;
})();
var ObsidianFlashcard = /** @class */ (function (_super) {
__extends(ObsidianFlashcard, _super);
function ObsidianFlashcard() {
return (_super !== null && _super.apply(this, arguments)) || this;
}
ObsidianFlashcard.prototype.onload = function () {
return __awaiter(this, void 0, void 0, function () {
var anki, _a, statusBar;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
obsidian.addIcon("flashcards", flashcardsIcon);
anki = new Anki();
_a = this;
return [4 /*yield*/, this.loadData()];
case 1:
_a.settings = _b.sent() || this.getDefaultSettings();
this.cardsService = new CardsService(this.app, this.settings);
statusBar = this.addStatusBarItem();
this.addCommand({
id: "generate-flashcard-current-file",
name: "Generate for the current file",
checkCallback: function (checking) {
var activeFile = _this.app.workspace.getActiveFile();
if (activeFile) {
if (!checking) {
_this.generateCards(activeFile);
}
return true;
}
return false;
},
});
this.addRibbonIcon(
"flashcards",
"Generate flashcards",
function () {
var activeFile = _this.app.workspace.getActiveFile();
if (activeFile) {
_this.generateCards(activeFile);
} else {
new obsidian.Notice("Open a file before");
}
},
);
this.addSettingTab(new SettingsTab(this.app, this));
this.registerInterval(
window.setInterval(function () {
return anki
.ping()
.then(function () {
return statusBar.setText("Anki ⚡️");
})
.catch(function () {
return statusBar.setText("");
});
}, 15 * 1000),
);
return [2 /*return*/];
}
});
});
};
ObsidianFlashcard.prototype.onunload = function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
return [4 /*yield*/, this.saveData(this.settings)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
ObsidianFlashcard.prototype.getDefaultSettings = function () {
return {
contextAwareMode: true,
sourceSupport: false,
codeHighlightSupport: false,
inlineID: false,
contextSeparator: " > ",
deck: "Default",
folderBasedDeck: true,
flashcardsTag: "card",
inlineSeparator: "::",
inlineSeparatorReverse: ":::",
defaultAnkiTag: "obsidian",
ankiConnectPermission: false,
};
};
ObsidianFlashcard.prototype.generateCards = function (activeFile) {
this.cardsService
.execute(activeFile)
.then(function (res) {
var e_1, _a;
try {
for (
var res_1 = __values(res), res_1_1 = res_1.next();
!res_1_1.done;
res_1_1 = res_1.next()
) {
var r = res_1_1.value;
new obsidian.Notice(r, noticeTimeout);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (res_1_1 && !res_1_1.done && (_a = res_1.return)) _a.call(res_1);
} finally {
if (e_1) throw e_1.error;
}
}
console.log(res);
})
.catch(function (err) {});
};
return ObsidianFlashcard;
})(obsidian.Plugin);
module.exports = ObsidianFlashcard;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment