UNPKG

@tricoteuses/assemblee

Version:

Retrieve, clean up & handle French Assemblée nationale's open data

340 lines (339 loc) 38.5 kB
"use strict"; require("core-js/modules/es.symbol.js"); require("core-js/modules/es.symbol.description.js"); require("core-js/modules/es.symbol.iterator.js"); require("core-js/modules/es.array.from.js"); require("core-js/modules/es.array.iterator.js"); require("core-js/modules/es.array.slice.js"); require("core-js/modules/es.date.to-string.js"); require("core-js/modules/es.function.name.js"); require("core-js/modules/es.object.define-property.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.string.iterator.js"); require("core-js/modules/web.dom-collections.iterator.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanScrutin = cleanScrutin; require("core-js/modules/es.array.filter.js"); require("core-js/modules/es.array.is-array.js"); require("core-js/modules/es.object.to-string.js"); require("core-js/modules/es.object.values.js"); var _assert = _interopRequireDefault(require("assert")); var _xml = require("./xml"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function cleanDecompteNominatif(decompteNominatif) { (0, _xml.cleanXmlArtefacts)(decompteNominatif); var nonVotants = decompteNominatif.nonVotants; if (nonVotants === undefined) { nonVotants = decompteNominatif.nonVotant; delete decompteNominatif.nonVotant; } else { _assert["default"].strictEqual(decompteNominatif.nonVotant, undefined); } if (nonVotants !== undefined) { if (typeof nonVotants === "string") { _assert["default"].strictEqual(nonVotants, "0"); nonVotants = []; } else if (!Array.isArray(nonVotants)) { (0, _assert["default"])(nonVotants); nonVotants = [nonVotants]; } var nonVotantsArray = nonVotants; nonVotants = []; var _iterator = _createForOfIteratorHelper(nonVotantsArray), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var nonVotant = _step.value; if (nonVotant === null) { continue; } nonVotant = nonVotant.votant; if (Array.isArray(nonVotant)) { var _nonVotants; (_nonVotants = nonVotants).push.apply(_nonVotants, _toConsumableArray(nonVotant)); } else { (0, _assert["default"])(nonVotant); nonVotants.push(nonVotant); } } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } if (nonVotants.length === 0) { delete decompteNominatif.nonVotants; } else { decompteNominatif.nonVotants = nonVotants; var _iterator2 = _createForOfIteratorHelper(nonVotants), _step2; try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var votant = _step2.value; cleanVotant(votant); } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } } } var pour = decompteNominatif.pour; if (pour === undefined) { pour = decompteNominatif.pours; delete decompteNominatif.pours; } else { _assert["default"].strictEqual(decompteNominatif.pours, undefined); } if (pour !== undefined) { pour = pour.votant; if (!Array.isArray(pour)) { (0, _assert["default"])(pour); pour = [pour]; } if (pour.length === 0) { delete decompteNominatif.pour; } else { decompteNominatif.pour = pour; var _iterator3 = _createForOfIteratorHelper(pour), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var _votant = _step3.value; cleanVotant(_votant); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } } var contre = decompteNominatif.contre; if (contre === undefined) { contre = decompteNominatif.contres; delete decompteNominatif.contres; } else { _assert["default"].strictEqual(decompteNominatif.contres, undefined); } if (contre !== undefined) { contre = contre.votant; if (!Array.isArray(contre)) { (0, _assert["default"])(contre); contre = [contre]; } if (contre.length === 0) { delete decompteNominatif.contre; } else { decompteNominatif.contre = contre; var _iterator4 = _createForOfIteratorHelper(contre), _step4; try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _votant2 = _step4.value; cleanVotant(_votant2); } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } } } var abstentions = decompteNominatif.abstentions; if (abstentions === undefined) { abstentions = decompteNominatif.abstention; delete decompteNominatif.abstention; } else { _assert["default"].strictEqual(decompteNominatif.abstention, undefined); } if (abstentions !== undefined) { if (!Array.isArray(abstentions)) { (0, _assert["default"])(abstentions); abstentions = [abstentions]; } var abstentionsArray = abstentions; abstentions = []; var _iterator5 = _createForOfIteratorHelper(abstentionsArray), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var absentionsItem = _step5.value; if (absentionsItem === null) { continue; } absentionsItem = absentionsItem.votant; if (Array.isArray(absentionsItem)) { var _abstentions; (_abstentions = abstentions).push.apply(_abstentions, _toConsumableArray(absentionsItem)); } else { (0, _assert["default"])(absentionsItem); abstentions.push(absentionsItem); } } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } if (abstentions.length === 0) { delete decompteNominatif.abstentions; } else { decompteNominatif.abstentions = abstentions; var _iterator6 = _createForOfIteratorHelper(abstentions), _step6; try { for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) { var _votant3 = _step6.value; cleanVotant(_votant3); } } catch (err) { _iterator6.e(err); } finally { _iterator6.f(); } } } var nonVotantsVolontaires = decompteNominatif.nonVotantsVolontaires; if (nonVotantsVolontaires !== undefined) { if (!Array.isArray(nonVotantsVolontaires)) { nonVotantsVolontaires = [nonVotantsVolontaires]; } var nonVotantsVolontairesArray = nonVotantsVolontaires; nonVotantsVolontaires = []; var _iterator7 = _createForOfIteratorHelper(nonVotantsVolontairesArray), _step7; try { for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) { var _absentionsItem = _step7.value; if (_absentionsItem === null) { continue; } _absentionsItem = _absentionsItem.votant; if (Array.isArray(_absentionsItem)) { var _nonVotantsVolontaire; (_nonVotantsVolontaire = nonVotantsVolontaires).push.apply(_nonVotantsVolontaire, _toConsumableArray(_absentionsItem)); } else { (0, _assert["default"])(_absentionsItem); nonVotantsVolontaires.push(_absentionsItem); } } } catch (err) { _iterator7.e(err); } finally { _iterator7.f(); } if (nonVotantsVolontaires.length === 0) { delete decompteNominatif.nonVotantsVolontaires; } else { decompteNominatif.nonVotantsVolontaires = nonVotantsVolontaires; var _iterator8 = _createForOfIteratorHelper(nonVotantsVolontaires), _step8; try { for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) { var _votant4 = _step8.value; cleanVotant(_votant4); } } catch (err) { _iterator8.e(err); } finally { _iterator8.f(); } } } } function cleanScrutin(scrutin) { (0, _xml.cleanXmlArtefacts)(scrutin); var demandeur = scrutin.demandeur; (0, _assert["default"])(demandeur); { (0, _xml.cleanXmlArtefacts)(demandeur); _assert["default"].strictEqual(demandeur.referenceLegislative, undefined); } var objet = scrutin.objet; (0, _assert["default"])(objet); { (0, _xml.cleanXmlArtefacts)(objet); _assert["default"].strictEqual(objet.referenceLegislative, undefined); } var ventilationVotes = scrutin.ventilationVotes; (0, _assert["default"])(ventilationVotes); { ventilationVotes = ventilationVotes.organe; (0, _assert["default"])(ventilationVotes); var groupes = ventilationVotes.groupes; (0, _assert["default"])(groupes); { groupes = groupes.groupe; (0, _assert["default"])(Array.isArray(groupes)); var _iterator9 = _createForOfIteratorHelper(groupes), _step9; try { for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) { var groupe = _step9.value; var vote = groupe.vote; (0, _assert["default"])(vote); { var decompteVoix = vote.decompteVoix; (0, _assert["default"])(decompteVoix); { if (decompteVoix.abstention !== undefined) { _assert["default"].strictEqual(decompteVoix.abstentions, undefined); decompteVoix.abstentions = decompteVoix.abstention; delete decompteVoix.abstention; } if (decompteVoix.nonVotant !== undefined) { _assert["default"].strictEqual(decompteVoix.nonVotants, undefined); decompteVoix.nonVotants = decompteVoix.nonVotant; delete decompteVoix.nonVotant; } } var decompteNominatif = vote.decompteNominatif; (0, _assert["default"])(decompteNominatif); cleanDecompteNominatif(decompteNominatif); } } } catch (err) { _iterator9.e(err); } finally { _iterator9.f(); } ventilationVotes.groupes = groupes; } scrutin.ventilationVotes = ventilationVotes; } var miseAuPoint = scrutin.miseAuPoint; if (miseAuPoint !== undefined) { cleanDecompteNominatif(miseAuPoint); var dysfonctionnement = miseAuPoint.dysfonctionnement; if (dysfonctionnement !== undefined) { cleanDecompteNominatif(dysfonctionnement); if (Object.values(dysfonctionnement).filter(function (value) { return value !== undefined; }).length === 0) { delete miseAuPoint.dysfonctionnement; } } if (Object.values(miseAuPoint).filter(function (value) { return value !== undefined; }).length === 0) { delete scrutin.miseAuPoint; } } } function cleanVotant(votant) { (0, _xml.cleanBooleanAttribute)(votant, "parDelegation"); (0, _xml.cleanIntegerAttribute)(votant, "numPlace"); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfeG1sIiwiZSIsIl9fZXNNb2R1bGUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJmcm9tIiwiaXNBcnJheSIsIl9hcnJheUxpa2VUb0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJ0IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwibyIsImEiLCJ1IiwiY2FsbCIsIm5leHQiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwidGVzdCIsImNsZWFuRGVjb21wdGVOb21pbmF0aWYiLCJkZWNvbXB0ZU5vbWluYXRpZiIsImNsZWFuWG1sQXJ0ZWZhY3RzIiwibm9uVm90YW50cyIsInVuZGVmaW5lZCIsIm5vblZvdGFudCIsImFzc2VydCIsInN0cmljdEVxdWFsIiwibm9uVm90YW50c0FycmF5IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ2b3RhbnQiLCJfbm9uVm90YW50cyIsInB1c2giLCJhcHBseSIsImVyciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJjbGVhblZvdGFudCIsInBvdXIiLCJwb3VycyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJjb250cmUiLCJjb250cmVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFic3RlbnRpb25zIiwiYWJzdGVudGlvbiIsImFic3RlbnRpb25zQXJyYXkiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiYWJzZW50aW9uc0l0ZW0iLCJfYWJzdGVudGlvbnMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2Iiwibm9uVm90YW50c1ZvbG9udGFpcmVzIiwibm9uVm90YW50c1ZvbG9udGFpcmVzQXJyYXkiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiX25vblZvdGFudHNWb2xvbnRhaXJlIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsImNsZWFuU2NydXRpbiIsInNjcnV0aW4iLCJkZW1hbmRldXIiLCJyZWZlcmVuY2VMZWdpc2xhdGl2ZSIsIm9iamV0IiwidmVudGlsYXRpb25Wb3RlcyIsIm9yZ2FuZSIsImdyb3VwZXMiLCJncm91cGUiLCJfaXRlcmF0b3I5IiwiX3N0ZXA5Iiwidm90ZSIsImRlY29tcHRlVm9peCIsIm1pc2VBdVBvaW50IiwiZHlzZm9uY3Rpb25uZW1lbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhbkludGVnZXJBdHRyaWJ1dGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xlYW5lcnMvc2NydXRpbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcblxuaW1wb3J0IHtcbiAgY2xlYW5Cb29sZWFuQXR0cmlidXRlLFxuICBjbGVhbkludGVnZXJBdHRyaWJ1dGUsXG4gIGNsZWFuWG1sQXJ0ZWZhY3RzLFxufSBmcm9tIFwiLi94bWxcIlxuXG5mdW5jdGlvbiBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGRlY29tcHRlTm9taW5hdGlmOiBhbnkpIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZGVjb21wdGVOb21pbmF0aWYpXG5cbiAgbGV0IG5vblZvdGFudHMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzXG4gIGlmIChub25Wb3RhbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBub25Wb3RhbnRzID0gZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50XG4gICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudFxuICB9IGVsc2Uge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnQsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAobm9uVm90YW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBub25Wb3RhbnRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobm9uVm90YW50cywgXCIwXCIpXG4gICAgICBub25Wb3RhbnRzID0gW11cbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vblZvdGFudHMpKSB7XG4gICAgICBhc3NlcnQobm9uVm90YW50cylcbiAgICAgIG5vblZvdGFudHMgPSBbbm9uVm90YW50c11cbiAgICB9XG4gICAgY29uc3Qgbm9uVm90YW50c0FycmF5ID0gbm9uVm90YW50c1xuICAgIG5vblZvdGFudHMgPSBbXVxuICAgIGZvciAobGV0IG5vblZvdGFudCBvZiBub25Wb3RhbnRzQXJyYXkpIHtcbiAgICAgIGlmIChub25Wb3RhbnQgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIG5vblZvdGFudCA9IG5vblZvdGFudC52b3RhbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vblZvdGFudCkpIHtcbiAgICAgICAgbm9uVm90YW50cy5wdXNoKC4uLm5vblZvdGFudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChub25Wb3RhbnQpXG4gICAgICAgIG5vblZvdGFudHMucHVzaChub25Wb3RhbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub25Wb3RhbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLm5vblZvdGFudHNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50cyA9IG5vblZvdGFudHNcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIG5vblZvdGFudHMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwb3VyID0gZGVjb21wdGVOb21pbmF0aWYucG91clxuICBpZiAocG91ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcG91ciA9IGRlY29tcHRlTm9taW5hdGlmLnBvdXJzXG4gICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLnBvdXJzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLnBvdXJzLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKHBvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHBvdXIgPSBwb3VyLnZvdGFudFxuICAgIGlmICghQXJyYXkuaXNBcnJheShwb3VyKSkge1xuICAgICAgYXNzZXJ0KHBvdXIpXG4gICAgICBwb3VyID0gW3BvdXJdXG4gICAgfVxuICAgIGlmIChwb3VyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLnBvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYucG91ciA9IHBvdXJcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIHBvdXIpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBjb250cmUgPSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVcbiAgaWYgKGNvbnRyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29udHJlID0gZGVjb21wdGVOb21pbmF0aWYuY29udHJlc1xuICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmVzXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZXMsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAoY29udHJlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb250cmUgPSBjb250cmUudm90YW50XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyZSkpIHtcbiAgICAgIGFzc2VydChjb250cmUpXG4gICAgICBjb250cmUgPSBbY29udHJlXVxuICAgIH1cbiAgICBpZiAoY29udHJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZGVsZXRlIGRlY29tcHRlTm9taW5hdGlmLmNvbnRyZVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvbXB0ZU5vbWluYXRpZi5jb250cmUgPSBjb250cmVcbiAgICAgIGZvciAoY29uc3Qgdm90YW50IG9mIGNvbnRyZSkge1xuICAgICAgICBjbGVhblZvdGFudCh2b3RhbnQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGFic3RlbnRpb25zID0gZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnNcbiAgaWYgKGFic3RlbnRpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICBhYnN0ZW50aW9ucyA9IGRlY29tcHRlTm9taW5hdGlmLmFic3RlbnRpb25cbiAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvblxuICB9IGVsc2Uge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZU5vbWluYXRpZi5hYnN0ZW50aW9uLCB1bmRlZmluZWQpXG4gIH1cbiAgaWYgKGFic3RlbnRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWJzdGVudGlvbnMpKSB7XG4gICAgICBhc3NlcnQoYWJzdGVudGlvbnMpXG4gICAgICBhYnN0ZW50aW9ucyA9IFthYnN0ZW50aW9uc11cbiAgICB9XG4gICAgY29uc3QgYWJzdGVudGlvbnNBcnJheSA9IGFic3RlbnRpb25zXG4gICAgYWJzdGVudGlvbnMgPSBbXVxuICAgIGZvciAobGV0IGFic2VudGlvbnNJdGVtIG9mIGFic3RlbnRpb25zQXJyYXkpIHtcbiAgICAgIGlmIChhYnNlbnRpb25zSXRlbSA9PT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgYWJzZW50aW9uc0l0ZW0gPSBhYnNlbnRpb25zSXRlbS52b3RhbnRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFic2VudGlvbnNJdGVtKSkge1xuICAgICAgICBhYnN0ZW50aW9ucy5wdXNoKC4uLmFic2VudGlvbnNJdGVtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KGFic2VudGlvbnNJdGVtKVxuICAgICAgICBhYnN0ZW50aW9ucy5wdXNoKGFic2VudGlvbnNJdGVtKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzdGVudGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYuYWJzdGVudGlvbnMgPSBhYnN0ZW50aW9uc1xuICAgICAgZm9yIChjb25zdCB2b3RhbnQgb2YgYWJzdGVudGlvbnMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBub25Wb3RhbnRzVm9sb250YWlyZXMgPSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgaWYgKG5vblZvdGFudHNWb2xvbnRhaXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vblZvdGFudHNWb2xvbnRhaXJlcykpIHtcbiAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcyA9IFtub25Wb3RhbnRzVm9sb250YWlyZXNdXG4gICAgfVxuICAgIGNvbnN0IG5vblZvdGFudHNWb2xvbnRhaXJlc0FycmF5ID0gbm9uVm90YW50c1ZvbG9udGFpcmVzXG4gICAgbm9uVm90YW50c1ZvbG9udGFpcmVzID0gW11cbiAgICBmb3IgKGxldCBhYnNlbnRpb25zSXRlbSBvZiBub25Wb3RhbnRzVm9sb250YWlyZXNBcnJheSkge1xuICAgICAgaWYgKGFic2VudGlvbnNJdGVtID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBhYnNlbnRpb25zSXRlbSA9IGFic2VudGlvbnNJdGVtLnZvdGFudFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYWJzZW50aW9uc0l0ZW0pKSB7XG4gICAgICAgIG5vblZvdGFudHNWb2xvbnRhaXJlcy5wdXNoKC4uLmFic2VudGlvbnNJdGVtKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXNzZXJ0KGFic2VudGlvbnNJdGVtKVxuICAgICAgICBub25Wb3RhbnRzVm9sb250YWlyZXMucHVzaChhYnNlbnRpb25zSXRlbSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vblZvdGFudHNWb2xvbnRhaXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRlbGV0ZSBkZWNvbXB0ZU5vbWluYXRpZi5ub25Wb3RhbnRzVm9sb250YWlyZXNcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb21wdGVOb21pbmF0aWYubm9uVm90YW50c1ZvbG9udGFpcmVzID0gbm9uVm90YW50c1ZvbG9udGFpcmVzXG4gICAgICBmb3IgKGNvbnN0IHZvdGFudCBvZiBub25Wb3RhbnRzVm9sb250YWlyZXMpIHtcbiAgICAgICAgY2xlYW5Wb3RhbnQodm90YW50KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TY3J1dGluKHNjcnV0aW46IGFueSk6IHZvaWQge1xuICBjbGVhblhtbEFydGVmYWN0cyhzY3J1dGluKVxuXG4gIGNvbnN0IGRlbWFuZGV1ciA9IHNjcnV0aW4uZGVtYW5kZXVyXG4gIGFzc2VydChkZW1hbmRldXIpXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkZW1hbmRldXIpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVtYW5kZXVyLnJlZmVyZW5jZUxlZ2lzbGF0aXZlLCB1bmRlZmluZWQpXG4gIH1cblxuICBjb25zdCBvYmpldCA9IHNjcnV0aW4ub2JqZXRcbiAgYXNzZXJ0KG9iamV0KVxuICB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMob2JqZXQpXG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqZXQucmVmZXJlbmNlTGVnaXNsYXRpdmUsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGxldCB2ZW50aWxhdGlvblZvdGVzID0gc2NydXRpbi52ZW50aWxhdGlvblZvdGVzXG4gIGFzc2VydCh2ZW50aWxhdGlvblZvdGVzKVxuICB7XG4gICAgdmVudGlsYXRpb25Wb3RlcyA9IHZlbnRpbGF0aW9uVm90ZXMub3JnYW5lXG4gICAgYXNzZXJ0KHZlbnRpbGF0aW9uVm90ZXMpXG5cbiAgICBsZXQgZ3JvdXBlcyA9IHZlbnRpbGF0aW9uVm90ZXMuZ3JvdXBlc1xuICAgIGFzc2VydChncm91cGVzKVxuICAgIHtcbiAgICAgIGdyb3VwZXMgPSBncm91cGVzLmdyb3VwZVxuICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoZ3JvdXBlcykpXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwZSBvZiBncm91cGVzKSB7XG4gICAgICAgIGNvbnN0IHZvdGUgPSBncm91cGUudm90ZVxuICAgICAgICBhc3NlcnQodm90ZSlcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IGRlY29tcHRlVm9peCA9IHZvdGUuZGVjb21wdGVWb2l4XG4gICAgICAgICAgYXNzZXJ0KGRlY29tcHRlVm9peClcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZGVjb21wdGVWb2l4LmFic3RlbnRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVjb21wdGVWb2l4LmFic3RlbnRpb25zLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGRlY29tcHRlVm9peC5hYnN0ZW50aW9ucyA9IGRlY29tcHRlVm9peC5hYnN0ZW50aW9uXG4gICAgICAgICAgICAgIGRlbGV0ZSBkZWNvbXB0ZVZvaXguYWJzdGVudGlvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGVjb21wdGVWb2l4Lm5vblZvdGFudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvbXB0ZVZvaXgubm9uVm90YW50cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBkZWNvbXB0ZVZvaXgubm9uVm90YW50cyA9IGRlY29tcHRlVm9peC5ub25Wb3RhbnRcbiAgICAgICAgICAgICAgZGVsZXRlIGRlY29tcHRlVm9peC5ub25Wb3RhbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWNvbXB0ZU5vbWluYXRpZiA9IHZvdGUuZGVjb21wdGVOb21pbmF0aWZcbiAgICAgICAgICBhc3NlcnQoZGVjb21wdGVOb21pbmF0aWYpXG4gICAgICAgICAgY2xlYW5EZWNvbXB0ZU5vbWluYXRpZihkZWNvbXB0ZU5vbWluYXRpZilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmVudGlsYXRpb25Wb3Rlcy5ncm91cGVzID0gZ3JvdXBlc1xuICAgIH1cblxuICAgIHNjcnV0aW4udmVudGlsYXRpb25Wb3RlcyA9IHZlbnRpbGF0aW9uVm90ZXNcbiAgfVxuXG4gIGNvbnN0IG1pc2VBdVBvaW50ID0gc2NydXRpbi5taXNlQXVQb2ludFxuICBpZiAobWlzZUF1UG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuRGVjb21wdGVOb21pbmF0aWYobWlzZUF1UG9pbnQpXG5cbiAgICBsZXQgZHlzZm9uY3Rpb25uZW1lbnQgPSBtaXNlQXVQb2ludC5keXNmb25jdGlvbm5lbWVudFxuICAgIGlmIChkeXNmb25jdGlvbm5lbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhbkRlY29tcHRlTm9taW5hdGlmKGR5c2ZvbmN0aW9ubmVtZW50KVxuICAgICAgaWYgKFxuICAgICAgICBPYmplY3QudmFsdWVzKGR5c2ZvbmN0aW9ubmVtZW50KS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgbWlzZUF1UG9pbnQuZHlzZm9uY3Rpb25uZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3QudmFsdWVzKG1pc2VBdVBvaW50KS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICBkZWxldGUgc2NydXRpbi5taXNlQXVQb2ludFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhblZvdGFudCh2b3RhbnQ6IGFueSkge1xuICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUodm90YW50LCBcInBhckRlbGVnYXRpb25cIilcbiAgY2xlYW5JbnRlZ2VyQXR0cmlidXRlKHZvdGFudCwgXCJudW1QbGFjZVwiKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLElBQUEsR0FBQUQsT0FBQTtBQUljLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxtQkFBQUMsQ0FBQSxXQUFBQyxrQkFBQSxDQUFBRCxDQUFBLEtBQUFFLGdCQUFBLENBQUFGLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUgsQ0FBQSxLQUFBSSxrQkFBQTtBQUFBLFNBQUFBLG1CQUFBLGNBQUFDLFNBQUE7QUFBQSxTQUFBSCxpQkFBQUYsQ0FBQSw4QkFBQU0sTUFBQSxZQUFBTixDQUFBLENBQUFNLE1BQUEsQ0FBQUMsUUFBQSxhQUFBUCxDQUFBLHVCQUFBUSxLQUFBLENBQUFDLElBQUEsQ0FBQVQsQ0FBQTtBQUFBLFNBQUFDLG1CQUFBRCxDQUFBLFFBQUFRLEtBQUEsQ0FBQUUsT0FBQSxDQUFBVixDQUFBLFVBQUFXLGlCQUFBLENBQUFYLENBQUE7QUFBQSxTQUFBWSwyQkFBQVosQ0FBQSxFQUFBSCxDQUFBLFFBQUFnQixDQUFBLHlCQUFBUCxNQUFBLElBQUFOLENBQUEsQ0FBQU0sTUFBQSxDQUFBQyxR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LFNBQVMsQ0FBQztnQkFDdERtRCxZQUFZLENBQUNwRCxVQUFVLEdBQUdvRCxZQUFZLENBQUNsRCxTQUFTO2dCQUNoRCxPQUFPa0QsWUFBWSxDQUFDbEQsU0FBUztjQUMvQjtZQUNGO1lBRUEsSUFBTUosaUJBQWlCLEdBQUdxRCxJQUFJLENBQUNyRCxpQkFBaUI7WUFDaEQsSUFBQUssa0JBQU0sRUFBQ0wsaUJBQWlCLENBQUM7WUFDekJELHNCQUFzQixDQUFDQyxpQkFBaUIsQ0FBQztVQUMzQztRQUNGO01BQUMsU0FBQWMsR0FBQTtRQUFBcUMsVUFBQSxDQUFBdkYsQ0FBQSxDQUFBa0QsR0FBQTtNQUFBO1FBQUFxQyxVQUFBLENBQUEvRCxDQUFBO01BQUE7TUFDRDJELGdCQUFnQixDQUFDRSxPQUFPLEdBQUdBLE9BQU87SUFDcEM7SUFFQU4sT0FBTyxDQUFDSSxnQkFBZ0IsR0FBR0EsZ0JBQWdCO0VBQzdDO0VBRUEsSUFBTVEsV0FBVyxHQUFHWixPQUFPLENBQUNZLFdBQVc7RUFDdkMsSUFBSUEsV0FBVyxLQUFLcEQsU0FBUyxFQUFFO0lBQzdCSixzQkFBc0IsQ0FBQ3dELFdBQVcsQ0FBQztJQUVuQyxJQUFJQyxpQkFBaUIsR0FBR0QsV0FBVyxDQUFDQyxpQkFBaUI7SUFDckQsSUFBSUEsaUJBQWlCLEtBQUtyRCxTQUFTLEVBQUU7TUFDbkNKLHNCQUFzQixDQUFDeUQsaUJBQWlCLENBQUM7TUFDekMsSUFDRUMsTUFBTSxDQUFDQyxNQUFNLENBQUNGLGlCQUFpQixDQUFDLENBQUNHLE1BQU0sQ0FBQyxVQUFDeEUsS0FBSztRQUFBLE9BQUtBLEtBQUssS0FBS2dCLFNBQVM7TUFBQSxFQUFDLENBQ3BFdEIsTUFBTSxLQUFLLENBQUMsRUFDZjtRQUNBLE9BQU8wRSxXQUFXLENBQUNDLGlCQUFpQjtNQUN0QztJQUNGO0lBRUEsSUFDRUMsTUFBTSxDQUFDQyxNQUFNLENBQUNILFdBQVcsQ0FBQyxDQUFDSSxNQUFNLENBQUMsVUFBQ3hFLEtBQUs7TUFBQSxPQUFLQSxLQUFLLEtBQUtnQixTQUFTO0lBQUEsRUFBQyxDQUM5RHRCLE1BQU0sS0FBSyxDQUFDLEVBQ2Y7TUFDQSxPQUFPOEQsT0FBTyxDQUFDWSxXQUFXO0lBQzVCO0VBQ0Y7QUFDRjtBQUVBLFNBQVN0QyxXQUFXQSxDQUFDUCxNQUFXLEVBQUU7RUFDaEMsSUFBQWtELDBCQUFxQixFQUFDbEQsTUFBTSxFQUFFLGVBQWUsQ0FBQztFQUM5QyxJQUFBbUQsMEJBQXFCLEVBQUNuRCxNQUFNLEVBQUUsVUFBVSxDQUFDO0FBQzNDIiwiaWdub3JlTGlzdCI6W119