@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
263 lines (262 loc) • 58.3 kB
JavaScript
"use strict";
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.async-iterator.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.symbol.to-string-tag.js");
require("core-js/modules/es.array.for-each.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.array.reverse.js");
require("core-js/modules/es.function.name.js");
require("core-js/modules/es.json.to-string-tag.js");
require("core-js/modules/es.math.to-string-tag.js");
require("core-js/modules/es.object.create.js");
require("core-js/modules/es.object.define-property.js");
require("core-js/modules/es.object.get-prototype-of.js");
require("core-js/modules/es.object.set-prototype-of.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.for-each.js");
require("core-js/modules/web.dom-collections.iterator.js");
require("core-js/modules/es.array.slice.js");
require("core-js/modules/es.object.to-string.js");
require("core-js/modules/es.promise.js");
var _file_systems = require("../../file_systems");
var _chai = require("chai");
var _agenda = require("../agenda-00011");
var _fetchMock = _interopRequireDefault(require("fetch-mock"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
var id = "00011";
suite("Plugin".concat(id));
test("#Plugin".concat(id, "FindSession"), /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var plugin, sessions;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
plugin = new _agenda.Plugin({});
sessions = [{
debut: "2019-09-10",
fin: "2019-09-27"
}, {
debut: "2019-10-01",
fin: "2020-06-30"
}, {
debut: "2020-06-31",
fin: "2020-07-31"
}, {
debut: "2020-08-01",
fin: "2020-08-31"
}, {
debut: "2020-09-01",
fin: "2020-09-30"
}];
plugin.sessions = sessions.slice(0, 2);
// between sessions
_chai.assert.strictEqual(plugin.lookupSession("2019-09-28"), null);
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
_chai.assert.deepEqual(plugin.lookupSession("2020-02-02"), plugin.sessions[1]);
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
plugin.sessions = sessions.slice(0, 1);
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
_chai.assert.strictEqual(plugin.lookupSession("2020-02-02"), null);
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
plugin.sessions = sessions;
_chai.assert.strictEqual(plugin.lookupSession("2017-01-01"), null);
_chai.assert.deepEqual(plugin.lookupSession("2019-09-15"), plugin.sessions[0]);
_chai.assert.deepEqual(plugin.lookupSession("2020-02-02"), plugin.sessions[1]);
_chai.assert.deepEqual(plugin.lookupSession("2020-09-01"), plugin.sessions[4]);
_chai.assert.deepEqual(plugin.lookupSession("2020-09-30"), plugin.sessions[4]);
_chai.assert.strictEqual(plugin.lookupSession("2022-01-01"), null);
case 20:
case "end":
return _context.stop();
}
}, _callee);
})));
test("#Plugin".concat(id, "Load"), /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
var plugin, d, wikidata, expected;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
plugin = new _agenda.Plugin({});
d = "src/bugs/agenda-".concat(id);
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
plugin.fetch = _fetchMock["default"].route(/query\.wikidata\.org/, {
body: wikidata,
status: 200
});
_context2.next = 6;
return plugin.preFix();
case 6:
expected = [{
debut: "2019-09-10",
fin: "2019-09-27",
label: "SESSION02"
}, {
debut: "2019-10-01",
fin: "2020-06-30",
label: "SESSION01"
}];
_chai.assert.deepEqual(plugin.sessions, expected);
case 8:
case "end":
return _context2.stop();
}
}, _callee2);
})));
test("#Plugin".concat(id, "Fix"), /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
var plugin, d, wikidata, f, content, _f, _content, _f2, _content2, _f3, _content3, _f4, _content4, _f5, _content5;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
plugin = new _agenda.Plugin({});
d = "src/bugs/agenda-".concat(id);
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
plugin.fetch = _fetchMock["default"].route(/query\.wikidata\.org/, {
body: wikidata,
status: 200
});
_context3.next = 6;
return plugin.preFix();
case 6:
(0, _chai.assert)(plugin.sessions != undefined);
f = "".concat(d, "/ok.json");
content = (0, _file_systems.load)(f);
(0, _chai.assert)("sessionRef" in content, content);
_context3.t0 = _chai.assert;
_context3.next = 13;
return plugin.fix(content, f);
case 13:
_context3.t1 = _context3.sent;
_context3.t2 = f;
_context3.t0.equal.call(_context3.t0, _context3.t1, true, _context3.t2);
(0, _chai.assert)(!("sessionRef" in content), content);
(0, _chai.assert)(content.session.label, "SESSION01");
_f = "".concat(d, "/oldschema.json");
_content = (0, _file_systems.load)(_f);
_chai.assert.equal(_content.schemaVersion, "agenda-1.0");
_context3.t3 = _chai.assert;
_context3.next = 24;
return plugin.fix(_content, _f);
case 24:
_context3.t4 = _context3.sent;
_context3.t5 = _f;
_context3.t3.equal.call(_context3.t3, _context3.t4, true, _context3.t5);
_chai.assert.equal(_content.schemaVersion, "agenda-1.1");
_f2 = "".concat(d, "/noschema.json");
_content2 = (0, _file_systems.load)(_f2);
_chai.assert.strictEqual(_content2.schemaVersion, undefined);
_context3.t6 = _chai.assert;
_context3.next = 34;
return plugin.fix(_content2, _f2);
case 34:
_context3.t7 = _context3.sent;
_context3.t8 = _f2;
_context3.t6.equal.call(_context3.t6, _context3.t7, true, _context3.t8);
_chai.assert.equal(_content2.schemaVersion, "agenda-1.1");
_f3 = "".concat(d, "/nosessionref.json");
_content3 = (0, _file_systems.load)(_f3);
_context3.t9 = _chai.assert;
_context3.next = 43;
return plugin.fix(_content3, _f3);
case 43:
_context3.t10 = _context3.sent;
_context3.t11 = _f3;
_context3.t9.equal.call(_context3.t9, _context3.t10, true, _context3.t11);
_chai.assert.equal(_content3.session.label, "SESSION01");
_f4 = "".concat(d, "/session.json");
_content4 = (0, _file_systems.load)(_f4);
_chai.assert.equal(_content4.session.label, "SOMETHING");
_context3.t12 = _chai.assert;
_context3.next = 53;
return plugin.fix(_content4, _f4);
case 53:
_context3.t13 = _context3.sent;
_context3.t14 = _f4;
_context3.t12.equal.call(_context3.t12, _context3.t13, true, _context3.t14);
_chai.assert.equal(_content4.session.label, "SESSION01");
_f5 = "".concat(d, "/not_seance_type.json");
_content5 = (0, _file_systems.load)(_f5);
_context3.t15 = _chai.assert;
_context3.next = 62;
return plugin.fix(_content5, _f5);
case 62:
_context3.t16 = _context3.sent;
_context3.t17 = _f5;
_context3.t15.equal.call(_context3.t15, _context3.t16, null, _context3.t17);
case 65:
case "end":
return _context3.stop();
}
}, _callee3);
})));
test("#Plugin".concat(id, "Check"), /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
var plugin, d, wikidata, f, content, result, _f6, _content6, _result;
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
plugin = new _agenda.Plugin({});
d = "src/bugs/agenda-".concat(id);
wikidata = (0, _file_systems.load)("".concat(d, "/wikidata.json"));
plugin.fetch = _fetchMock["default"].route(/query\.wikidata\.org/, {
body: wikidata,
status: 200
});
_context4.next = 6;
return plugin.preCheck();
case 6:
(0, _chai.assert)(plugin.sessions != undefined);
f = "".concat(d, "/ok.json");
content = (0, _file_systems.load)(f);
_context4.next = 11;
return plugin.check(content, f);
case 11:
result = _context4.sent;
_chai.assert.deepEqual(result, {
status: "ok",
info: [""]
}, f);
_f6 = "".concat(d, "/badtimestamp.json");
_content6 = (0, _file_systems.load)(_f6);
_context4.next = 17;
return plugin.check(_content6, _f6);
case 17:
_result = _context4.sent;
_chai.assert.deepEqual(_result, {
status: "needs-fixing",
info: ["2017-06-20 is not in a session"]
}, _f6);
case 19:
case "end":
return _context4.stop();
}
}, _callee4);
})));
test("#Plugin".concat(id, "FetchFail"), /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
var plugin, status;
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
plugin = new _agenda.Plugin({});
plugin.fetch = _fetchMock["default"].route(/query\.wikidata\.org/, 500);
status = "unexpected";
_context5.next = 5;
return plugin.preFix().then(function () {
return status = "exception not thrown";
})["catch"](function (e) {
return status = String(e.status);
});
case 5:
_chai.assert.equal(status, "500");
case 6:
case "end":
return _context5.stop();
}
}, _callee5);
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmlsZV9zeXN0ZW1zIiwicmVxdWlyZSIsIl9jaGFpIiwiX2FnZW5kYSIsIl9mZXRjaE1vY2siLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJpZCIsInN1aXRlIiwiY29uY2F0IiwidGVzdCIsIl9jYWxsZWUiLCJwbHVnaW4iLCJzZXNzaW9ucyIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJQbHVnaW4iLCJkZWJ1dCIsImZpbiIsImFzc2VydCIsInN0cmljdEVxdWFsIiwibG9va3VwU2Vzc2lvbiIsImRlZXBFcXVhbCIsIl9jYWxsZWUyIiwid2lraWRhdGEiLCJleHBlY3RlZCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImxvYWQiLCJmZXRjaCIsImZldGNoTW9jayIsInJvdXRlIiwiYm9keSIsInN0YXR1cyIsInByZUZpeCIsImxhYmVsIiwiX2NhbGxlZTMiLCJjb250ZW50IiwiX2YiLCJfY29udGVudCIsIl9mMiIsIl9jb250ZW50MiIsIl9mMyIsIl9jb250ZW50MyIsIl9mNCIsIl9jb250ZW50NCIsIl9mNSIsIl9jb250ZW50NSIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsInVuZGVmaW5lZCIsInQwIiwiZml4IiwidDEiLCJ0MiIsImVxdWFsIiwic2Vzc2lvbiIsInNjaGVtYVZlcnNpb24iLCJ0MyIsInQ0IiwidDUiLCJ0NiIsInQ3IiwidDgiLCJ0OSIsInQxMCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSIsInQxNiIsInQxNyIsIl9jYWxsZWU0IiwicmVzdWx0IiwiX2Y2IiwiX2NvbnRlbnQ2IiwiX3Jlc3VsdCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsInByZUNoZWNrIiwiY2hlY2siLCJpbmZvIiwiX2NhbGxlZTUiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJTdHJpbmciXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVncy9hZ2VuZGEtMDAwMTEvcGx1Z2luLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZCB9IGZyb20gXCIuLi8uLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSBcIi4uL2FnZW5kYS0wMDAxMVwiXG5pbXBvcnQgZmV0Y2hNb2NrIGZyb20gXCJmZXRjaC1tb2NrXCJcblxuY29uc3QgaWQgPSBcIjAwMDExXCJcblxuc3VpdGUoYFBsdWdpbiR7aWR9YClcblxudGVzdChgI1BsdWdpbiR7aWR9RmluZFNlc3Npb25gLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBsdWdpbiA9IG5ldyBQbHVnaW4oe30pXG5cbiAgY29uc3Qgc2Vzc2lvbnMgPSBbXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0wOS0xMFwiLFxuICAgICAgZmluOiBcIjIwMTktMDktMjdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlYnV0OiBcIjIwMTktMTAtMDFcIixcbiAgICAgIGZpbjogXCIyMDIwLTA2LTMwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWJ1dDogXCIyMDIwLTA2LTMxXCIsXG4gICAgICBmaW46IFwiMjAyMC0wNy0zMVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAyMC0wOC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDgtMzFcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlYnV0OiBcIjIwMjAtMDktMDFcIixcbiAgICAgIGZpbjogXCIyMDIwLTA5LTMwXCIsXG4gICAgfSxcbiAgXVxuXG4gIHBsdWdpbi5zZXNzaW9ucyA9IHNlc3Npb25zLnNsaWNlKDAsIDIpXG4gIC8vIGJldHdlZW4gc2Vzc2lvbnNcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxOS0wOS0yOFwiKSwgbnVsbClcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxNy0wMS0wMVwiKSwgbnVsbClcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTktMDktMTVcIiksIHBsdWdpbi5zZXNzaW9uc1swXSlcbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjAtMDItMDJcIiksIHBsdWdpbi5zZXNzaW9uc1sxXSlcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAyMi0wMS0wMVwiKSwgbnVsbClcblxuICBwbHVnaW4uc2Vzc2lvbnMgPSBzZXNzaW9ucy5zbGljZSgwLCAxKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE3LTAxLTAxXCIpLCBudWxsKVxuICBhc3NlcnQuZGVlcEVxdWFsKHBsdWdpbi5sb29rdXBTZXNzaW9uKFwiMjAxOS0wOS0xNVwiKSwgcGx1Z2luLnNlc3Npb25zWzBdKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIwLTAyLTAyXCIpLCBudWxsKVxuICBhc3NlcnQuc3RyaWN0RXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIyLTAxLTAxXCIpLCBudWxsKVxuXG4gIHBsdWdpbi5zZXNzaW9ucyA9IHNlc3Npb25zXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMTctMDEtMDFcIiksIG51bGwpXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDE5LTA5LTE1XCIpLCBwbHVnaW4uc2Vzc2lvbnNbMF0pXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIwLTAyLTAyXCIpLCBwbHVnaW4uc2Vzc2lvbnNbMV0pXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIwLTA5LTAxXCIpLCBwbHVnaW4uc2Vzc2lvbnNbNF0pXG4gIGFzc2VydC5kZWVwRXF1YWwocGx1Z2luLmxvb2t1cFNlc3Npb24oXCIyMDIwLTA5LTMwXCIpLCBwbHVnaW4uc2Vzc2lvbnNbNF0pXG4gIGFzc2VydC5zdHJpY3RFcXVhbChwbHVnaW4ubG9va3VwU2Vzc2lvbihcIjIwMjItMDEtMDFcIiksIG51bGwpXG59KVxuXG50ZXN0KGAjUGx1Z2luJHtpZH1Mb2FkYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHt9KVxuICBjb25zdCBkID0gYHNyYy9idWdzL2FnZW5kYS0ke2lkfWBcblxuICBjb25zdCB3aWtpZGF0YSA9IGxvYWQoYCR7ZH0vd2lraWRhdGEuanNvbmApXG4gIHBsdWdpbi5mZXRjaCA9IGZldGNoTW9jay5yb3V0ZSgvcXVlcnlcXC53aWtpZGF0YVxcLm9yZy8sIHtcbiAgICBib2R5OiB3aWtpZGF0YSxcbiAgICBzdGF0dXM6IDIwMCxcbiAgfSlcbiAgYXdhaXQgcGx1Z2luLnByZUZpeCgpXG5cbiAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0wOS0xMFwiLFxuICAgICAgZmluOiBcIjIwMTktMDktMjdcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVidXQ6IFwiMjAxOS0xMC0wMVwiLFxuICAgICAgZmluOiBcIjIwMjAtMDYtMzBcIixcbiAgICAgIGxhYmVsOiBcIlNFU1NJT04wMVwiLFxuICAgIH0sXG4gIF1cbiAgYXNzZXJ0LmRlZXBFcXVhbChwbHVnaW4uc2Vzc2lvbnMsIGV4cGVjdGVkKVxufSlcblxudGVzdChgI1BsdWdpbiR7aWR9Rml4YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHt9KVxuICBjb25zdCBkID0gYHNyYy9idWdzL2FnZW5kYS0ke2lkfWBcblxuICBjb25zdCB3aWtpZGF0YSA9IGxvYWQoYCR7ZH0vd2lraWRhdGEuanNvbmApXG4gIHBsdWdpbi5mZXRjaCA9IGZldGNoTW9jay5yb3V0ZSgvcXVlcnlcXC53aWtpZGF0YVxcLm9yZy8sIHtcbiAgICBib2R5OiB3aWtpZGF0YSxcbiAgICBzdGF0dXM6IDIwMCxcbiAgfSlcblxuICBhd2FpdCBwbHVnaW4ucHJlRml4KClcbiAgYXNzZXJ0KHBsdWdpbi5zZXNzaW9ucyAhPSB1bmRlZmluZWQpXG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9vay5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgYXNzZXJ0KFwic2Vzc2lvblJlZlwiIGluIGNvbnRlbnQsIGNvbnRlbnQpXG4gICAgYXNzZXJ0LmVxdWFsKGF3YWl0IHBsdWdpbi5maXgoY29udGVudCwgZiksIHRydWUsIGYpXG4gICAgYXNzZXJ0KCEoXCJzZXNzaW9uUmVmXCIgaW4gY29udGVudCksIGNvbnRlbnQpXG4gICAgYXNzZXJ0KGNvbnRlbnQuc2Vzc2lvbi5sYWJlbCwgXCJTRVNTSU9OMDFcIilcbiAgfVxuXG4gIHtcbiAgICBjb25zdCBmID0gYCR7ZH0vb2xkc2NoZW1hLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQuZXF1YWwoY29udGVudC5zY2hlbWFWZXJzaW9uLCBcImFnZW5kYS0xLjBcIilcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgdHJ1ZSwgZilcbiAgICBhc3NlcnQuZXF1YWwoY29udGVudC5zY2hlbWFWZXJzaW9uLCBcImFnZW5kYS0xLjFcIilcbiAgfVxuXG4gIHtcbiAgICBjb25zdCBmID0gYCR7ZH0vbm9zY2hlbWEuanNvbmBcbiAgICBjb25zdCBjb250ZW50ID0gbG9hZChmKVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb250ZW50LnNjaGVtYVZlcnNpb24sIHVuZGVmaW5lZClcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgdHJ1ZSwgZilcbiAgICBhc3NlcnQuZXF1YWwoY29udGVudC5zY2hlbWFWZXJzaW9uLCBcImFnZW5kYS0xLjFcIilcbiAgfVxuXG4gIHtcbiAgICBjb25zdCBmID0gYCR7ZH0vbm9zZXNzaW9ucmVmLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQuZXF1YWwoYXdhaXQgcGx1Z2luLmZpeChjb250ZW50LCBmKSwgdHJ1ZSwgZilcbiAgICBhc3NlcnQuZXF1YWwoY29udGVudC5zZXNzaW9uLmxhYmVsLCBcIlNFU1NJT04wMVwiKVxuICB9XG5cbiAge1xuICAgIGNvbnN0IGYgPSBgJHtkfS9zZXNzaW9uLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBhc3NlcnQuZXF1YWwoY29udGVudC5zZXNzaW9uLmxhYmVsLCBcIlNPTUVUSElOR1wiKVxuICAgIGFzc2VydC5lcXVhbChhd2FpdCBwbHVnaW4uZml4KGNvbnRlbnQsIGYpLCB0cnVlLCBmKVxuICAgIGFzc2VydC5lcXVhbChjb250ZW50LnNlc3Npb24ubGFiZWwsIFwiU0VTU0lPTjAxXCIpXG4gIH1cblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L25vdF9zZWFuY2VfdHlwZS5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgYXNzZXJ0LmVxdWFsKGF3YWl0IHBsdWdpbi5maXgoY29udGVudCwgZiksIG51bGwsIGYpXG4gIH1cbn0pXG5cbnRlc3QoYCNQbHVnaW4ke2lkfUNoZWNrYCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luKHt9KVxuICBjb25zdCBkID0gYHNyYy9idWdzL2FnZW5kYS0ke2lkfWBcblxuICBjb25zdCB3aWtpZGF0YSA9IGxvYWQoYCR7ZH0vd2lraWRhdGEuanNvbmApXG4gIHBsdWdpbi5mZXRjaCA9IGZldGNoTW9jay5yb3V0ZSgvcXVlcnlcXC53aWtpZGF0YVxcLm9yZy8sIHtcbiAgICBib2R5OiB3aWtpZGF0YSxcbiAgICBzdGF0dXM6IDIwMCxcbiAgfSlcblxuICBhd2FpdCBwbHVnaW4ucHJlQ2hlY2soKVxuICBhc3NlcnQocGx1Z2luLnNlc3Npb25zICE9IHVuZGVmaW5lZClcblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L29rLmpzb25gXG4gICAgY29uc3QgY29udGVudCA9IGxvYWQoZilcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwbHVnaW4uY2hlY2soY29udGVudCwgZilcbiAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdCwgeyBzdGF0dXM6IFwib2tcIiwgaW5mbzogW1wiXCJdIH0sIGYpXG4gIH1cblxuICB7XG4gICAgY29uc3QgZiA9IGAke2R9L2JhZHRpbWVzdGFtcC5qc29uYFxuICAgIGNvbnN0IGNvbnRlbnQgPSBsb2FkKGYpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLmNoZWNrKGNvbnRlbnQsIGYpXG4gICAgYXNzZXJ0LmRlZXBFcXVhbChcbiAgICAgIHJlc3VsdCxcbiAgICAgIHsgc3RhdHVzOiBcIm5lZWRzLWZpeGluZ1wiLCBpbmZvOiBbXCIyMDE3LTA2LTIwIGlzIG5vdCBpbiBhIHNlc3Npb25cIl0gfSxcbiAgICAgIGYsXG4gICAgKVxuICB9XG59KVxuXG50ZXN0KGAjUGx1Z2luJHtpZH1GZXRjaEZhaWxgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBsdWdpbiA9IG5ldyBQbHVnaW4oe30pXG5cbiAgcGx1Z2luLmZldGNoID0gZmV0Y2hNb2NrLnJvdXRlKC9xdWVyeVxcLndpa2lkYXRhXFwub3JnLywgNTAwKVxuXG4gIGxldCBzdGF0dXMgPSBcInVuZXhwZWN0ZWRcIlxuICBhd2FpdCBwbHVnaW5cbiAgICAucHJlRml4KClcbiAgICAudGhlbigoKSA9PiAoc3RhdHVzID0gXCJleGNlcHRpb24gbm90IHRocm93blwiKSlcbiAgICAuY2F0Y2goKGUpID0+IChzdGF0dXMgPSBTdHJpbmcoZS5zdGF0dXMpKSlcbiAgYXNzZXJ0LmVxdWFsKHN0YXR1cywgXCI1MDBcIilcbn0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLGFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUFrQyxTQUFBSSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLGdCQUFBQSxDQUFBO0FBQUEsU0FBQUUsb0JBQUEsa0JBRmxDLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBRixDQUFBLFNBQUFHLENBQUEsRUFBQUgsQ0FBQSxPQUFBSSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFILENBQUEsRUFBQUksQ0FBQSxJQUFBRCxDQUFBLENBQUFILENBQUEsSUFBQUksQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBSCxDQUFBLEVBQUFJLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENB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Q0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFVCxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RU0sWUFBTSxDQUFDRyxTQUFTLENBQUNWLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFVCxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RU0sWUFBTSxDQUFDQyxXQUFXLENBQUNSLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztRQUU1RFQsTUFBTSxDQUFDQyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ3BCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDMEIsWUFBTSxDQUFDQyxXQUFXLENBQUNSLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztRQUM1REYsWUFBTSxDQUFDRyxTQUFTLENBQUNWLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFVCxNQUFNLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RU0sWUFBTSxDQUFDQyxXQUFXLENBQUNSLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztRQUM1REYsWUFBTSxDQUFDQyxXQUFXLENBQUNSLE1BQU0sQ0FBQ1MsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQztRQUU1RFQsTUFBTSxDQUFDQyxRQUFRLEdBQUdBLFFBQVE7UUFDMUJNLFlBQU0sQ0FBQ0MsV0FBVyxDQUFDUixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDNURGLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRVQsTUFBTSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEVNLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRVQsTUFBTSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEVNLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRVQsTUFBTSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEVNLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRVQsTUFBTSxDQUFDQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEVNLFlBQU0sQ0FBQ0MsV0FBVyxDQUFDUixNQUFNLENBQUNTLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLENBQUM7TUFBQTtNQUFBO1FBQUEsT0FBQU4sUUFBQSxDQUFBckIsSUFBQTtJQUFBO0VBQUEsR0FBQWlCLE9BQUE7QUFBQSxDQUM3RCxHQUFDO0FBRUZELElBQUksV0FBQUQsTUFBQSxDQUFXRixFQUFFLHdCQUFBTCxpQkFBQSxjQUFBdkcsbUJBQUEsR0FBQW1GLElBQUEsQ0FBUSxTQUFBeUMsU0FBQTtFQUFBLElBQUFYLE1BQUEsRUFBQTFFLENBQUEsRUFBQXNGLFFBQUEsRUFBQUMsUUFBQTtFQUFBLE9BQUE5SCxtQkFBQSxHQUFBc0IsSUFBQSxVQUFBeUcsVUFBQUMsU0FBQTtJQUFBLGtCQUFBQSxTQUFBLENBQUFwQyxJQUFBLEdBQUFvQyxTQUFBLENBQUEvRCxJQUFBO01BQUE7UUFDakJnRCxNQUFNLEdBQUcsSUFBSUksY0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCOUUsQ0FBQyxzQkFBQXVFLE1BQUEsQ0FBc0JGLEVBQUU7UUFFekJpQixRQUFRLEdBQUcsSUFBQUksa0JBQUksS0FBQW5CLE1BQUEsQ0FBSXZFLENBQUMsbUJBQWdCLENBQUM7UUFDM0MwRSxNQUFNLENBQUNpQixLQUFLLEdBQUdDLHFCQUFTLENBQUNDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtVQUNyREMsSUFBSSxFQUFFUixRQUFRO1VBQ2RTLE1BQU0sRUFBRTtRQUNWLENBQUMsQ0FBQztRQUFBTixTQUFBLENBQUEvRCxJQUFBO1FBQUEsT0FDSWdELE1BQU0sQ0FBQ3NCLE1BQU0sQ0FBQyxDQUFDO01BQUE7UUFFZlQsUUFBUSxHQUFHLENBQ2Y7VUFDRVIsS0FBSyxFQUFFLFlBQVk7VUFDbkJDLEdBQUcsRUFBRSxZQUFZO1VBQ2pCaUIsS0FBSyxFQUFFO1FBQ1QsQ0FBQyxFQUNEO1VBQ0VsQixLQUFLLEVBQUUsWUFBWTtVQUNuQkMsR0FBRyxFQUFFLFlBQVk7VUFDakJpQixLQUFLLEVBQUU7UUFDVCxDQUFDLENBQ0Y7UUFDRGhCLFlBQU0sQ0FBQ0csU0FBUyxDQUFDVixNQUFNLENBQUNDLFFBQVEsRUFBRVksUUFBUSxDQUFDO01BQUE7TUFBQTtRQUFBLE9BQUFFLFNBQUEsQ0FBQWpDLElBQ