@tricoteuses/assemblee 1.0.7 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
@@ -1,132 +1,70 @@
1
1
  "use strict";
2
2
 
3
3
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
4
  require("core-js/modules/es.object.set-prototype-of.js");
6
-
7
5
  require("core-js/modules/es.function.bind.js");
8
-
9
6
  require("core-js/modules/es.object.get-prototype-of.js");
10
-
11
7
  require("core-js/modules/es.object.to-string.js");
12
-
13
8
  require("core-js/modules/es.reflect.construct.js");
14
-
15
9
  require("core-js/modules/es.object.create.js");
16
-
17
10
  require("core-js/modules/es.promise.js");
18
-
19
11
  require("core-js/modules/es.array.slice.js");
20
-
21
12
  require("core-js/modules/es.array.from.js");
22
-
23
13
  require("core-js/modules/es.string.iterator.js");
24
-
25
14
  require("core-js/modules/es.symbol.js");
26
-
27
15
  require("core-js/modules/es.symbol.description.js");
28
-
29
16
  require("core-js/modules/es.symbol.iterator.js");
30
-
31
17
  require("core-js/modules/es.array.iterator.js");
32
-
33
18
  require("core-js/modules/web.dom-collections.iterator.js");
34
-
35
19
  require("core-js/modules/es.array.is-array.js");
36
-
37
20
  require("core-js/modules/es.symbol.async-iterator.js");
38
-
39
21
  require("core-js/modules/es.symbol.to-string-tag.js");
40
-
41
22
  require("core-js/modules/es.json.to-string-tag.js");
42
-
43
23
  require("core-js/modules/es.math.to-string-tag.js");
44
-
45
24
  require("core-js/modules/es.array.for-each.js");
46
-
47
25
  require("core-js/modules/web.dom-collections.for-each.js");
48
-
49
26
  require("core-js/modules/es.array.reverse.js");
50
-
51
27
  Object.defineProperty(exports, "__esModule", {
52
28
  value: true
53
29
  });
54
30
  exports.remapJo = exports.Plugin = void 0;
55
-
56
31
  require("core-js/modules/es.function.name.js");
57
-
58
32
  require("core-js/modules/es.array.join.js");
59
-
60
33
  require("core-js/modules/es.array.splice.js");
61
-
62
34
  require("core-js/modules/es.date.to-string.js");
63
-
64
35
  require("core-js/modules/es.array.concat.js");
65
-
66
36
  require("core-js/modules/es.object.keys.js");
67
-
68
37
  require("core-js/modules/es.array.includes.js");
69
-
70
38
  require("core-js/modules/es.string.includes.js");
71
-
72
39
  require("core-js/modules/es.number.constructor.js");
73
-
74
40
  require("core-js/modules/es.regexp.exec.js");
75
-
76
41
  require("core-js/modules/es.regexp.constructor.js");
77
-
78
42
  require("core-js/modules/es.regexp.to-string.js");
79
-
80
43
  require("core-js/modules/es.object.define-property.js");
81
-
82
44
  var _glob = _interopRequireDefault(require("glob"));
83
-
84
45
  var _nodeHtmlParser = require("node-html-parser");
85
-
86
46
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
87
-
88
47
  var _file_systems = require("../file_systems");
89
-
90
48
  var _bugs = require("../bugs");
91
-
92
49
  var _datasets = require("../datasets");
93
-
94
50
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
95
-
96
- 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 exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
97
-
51
+ 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 exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
98
52
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
99
-
100
53
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
101
-
102
54
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
103
-
104
55
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
105
-
106
56
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
107
-
108
57
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
109
-
110
58
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
111
-
112
59
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
113
-
114
60
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
115
-
116
61
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
117
-
118
62
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
119
-
120
63
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
121
-
122
64
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
123
-
124
65
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
125
-
126
66
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
127
-
128
67
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
129
-
130
68
  var remapJo = {
131
69
  RUANR5L15S2017IDS20667: "20172002",
132
70
  RUANR5L15S2018IDS20817: "20180086",
@@ -151,36 +89,24 @@ var remapJo = {
151
89
  RUANR5L15S2020IDS22106: "20200125"
152
90
  };
153
91
  exports.remapJo = remapJo;
154
-
155
92
  var Plugin = /*#__PURE__*/function (_BasePlugin) {
156
93
  _inherits(Plugin, _BasePlugin);
157
-
158
94
  var _super = _createSuper(Plugin);
159
-
160
95
  function Plugin(options) {
161
96
  var _this;
162
-
163
97
  _classCallCheck(this, Plugin);
164
-
165
98
  _this = _super.call(this, options, "agenda-00002");
166
-
167
99
  _defineProperty(_assertThisInitialized(_this), "cr2filenames", void 0);
168
-
169
100
  _defineProperty(_assertThisInitialized(_this), "date2crs", void 0);
170
-
171
101
  _defineProperty(_assertThisInitialized(_this), "cr2date", void 0);
172
-
173
102
  _defineProperty(_assertThisInitialized(_this), "filename2date", void 0);
174
-
175
103
  return _this;
176
104
  }
177
-
178
105
  _createClass(Plugin, [{
179
106
  key: "preCheck",
180
107
  value: function () {
181
108
  var _preCheck = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
182
109
  var _iterator, _step, cr, content, doc, root, found, _iterator2, _step2, meta, date;
183
-
184
110
  return _regeneratorRuntime().wrap(function _callee$(_context) {
185
111
  while (1) {
186
112
  switch (_context.prev = _context.next) {
@@ -189,9 +115,7 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
189
115
  _context.next = 2;
190
116
  break;
191
117
  }
192
-
193
118
  throw "--cr is required";
194
-
195
119
  case 2:
196
120
  this.filename2date = {};
197
121
  this.cr2filenames = {};
@@ -199,15 +123,12 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
199
123
  this.cr2date = {};
200
124
  _iterator = _createForOfIteratorHelper((0, _file_systems.getFiles)(["".concat(this.options.cr, "/*.asp")]));
201
125
  _context.prev = 7;
202
-
203
126
  _iterator.s();
204
-
205
127
  case 9:
206
128
  if ((_step = _iterator.n()).done) {
207
129
  _context.next = 41;
208
130
  break;
209
131
  }
210
-
211
132
  cr = _step.value;
212
133
  this.cr2filenames[cr] = [];
213
134
  content = _fsExtra["default"].readFileSync(cr, {
@@ -218,76 +139,55 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
218
139
  found = false;
219
140
  _iterator2 = _createForOfIteratorHelper(root.querySelectorAll("meta"));
220
141
  _context.prev = 17;
221
-
222
142
  _iterator2.s();
223
-
224
143
  case 19:
225
144
  if ((_step2 = _iterator2.n()).done) {
226
145
  _context.next = 30;
227
146
  break;
228
147
  }
229
-
230
148
  meta = _step2.value;
231
-
232
149
  if (!(meta.attributes["name"] == "QUANTIEME_SEANCE")) {
233
150
  _context.next = 28;
234
151
  break;
235
152
  }
236
-
237
153
  date = meta.attributes["content"].split(" ").splice(-3).join(" ");
238
154
  if (!(date in this.date2crs)) this.date2crs[date] = [];
239
155
  this.date2crs[date].push(cr);
240
156
  this.cr2date[cr] = date;
241
157
  found = true;
242
158
  return _context.abrupt("break", 30);
243
-
244
159
  case 28:
245
160
  _context.next = 19;
246
161
  break;
247
-
248
162
  case 30:
249
163
  _context.next = 35;
250
164
  break;
251
-
252
165
  case 32:
253
166
  _context.prev = 32;
254
167
  _context.t0 = _context["catch"](17);
255
-
256
168
  _iterator2.e(_context.t0);
257
-
258
169
  case 35:
259
170
  _context.prev = 35;
260
-
261
171
  _iterator2.f();
262
-
263
172
  return _context.finish(35);
264
-
265
173
  case 38:
266
174
  if (!found) {
267
175
  console.error("".concat(cr, " is missing the meta name=\"QUANTIEME_SEANCE\""));
268
176
  }
269
-
270
177
  case 39:
271
178
  _context.next = 9;
272
179
  break;
273
-
274
180
  case 41:
275
181
  _context.next = 46;
276
182
  break;
277
-
278
183
  case 43:
279
184
  _context.prev = 43;
280
185
  _context.t1 = _context["catch"](7);
281
-
282
186
  _iterator.e(_context.t1);
283
-
284
187
  case 46:
285
188
  _context.prev = 46;
286
-
287
189
  _iterator.f();
288
-
289
190
  return _context.finish(46);
290
-
291
191
  case 49:
292
192
  case "end":
293
193
  return _context.stop();
@@ -295,11 +195,9 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
295
195
  }
296
196
  }, _callee, this, [[7, 43, 46, 49], [17, 32, 35, 38]]);
297
197
  }));
298
-
299
198
  function preCheck() {
300
199
  return _preCheck.apply(this, arguments);
301
200
  }
302
-
303
201
  return preCheck;
304
202
  }()
305
203
  }, {
@@ -315,9 +213,7 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
315
213
  _context2.next = 2;
316
214
  break;
317
215
  }
318
-
319
216
  return _context2.abrupt("return", null);
320
-
321
217
  case 2:
322
218
  if (this.options.verbose) console.log("agenda-00002: ".concat(filename));
323
219
  status = "ok";
@@ -334,31 +230,23 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
334
230
  });
335
231
  dateSeanceString = "".concat(day, " ").concat(month, " ").concat(year);
336
232
  this.filename2date[filename] = dateSeanceString;
337
-
338
233
  if (!(agenda.identifiants == undefined || agenda.identifiants.idJo == undefined)) {
339
234
  _context2.next = 20;
340
235
  break;
341
236
  }
342
-
343
237
  week = 7 * 24 * 60 * 60 * 1000;
344
-
345
238
  if (!(dateSeance >= new Date(new Date().getTime() - week))) {
346
239
  _context2.next = 17;
347
240
  break;
348
241
  }
349
-
350
242
  return _context2.abrupt("return", null);
351
-
352
243
  case 17:
353
244
  idJo = undefined;
354
-
355
245
  case 18:
356
246
  _context2.next = 21;
357
247
  break;
358
-
359
248
  case 20:
360
249
  idJo = agenda.identifiants.idJo;
361
-
362
250
  case 21:
363
251
  if (agenda.uid in remapJo) {
364
252
  if (idJo == remapJo[agenda.uid]) {
@@ -369,25 +257,20 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
369
257
  status = "will-be-fixed";
370
258
  }
371
259
  }
372
-
373
260
  if (!(idJo == undefined)) {
374
261
  _context2.next = 24;
375
262
  break;
376
263
  }
377
-
378
264
  return _context2.abrupt("return", {
379
265
  status: "needs-fixing",
380
266
  info: ["idJo field is missing"]
381
267
  });
382
-
383
268
  case 24:
384
269
  pattern = "".concat(this.options.cr, "/*_").concat(idJo, ".asp");
385
270
  expanded = _glob["default"].sync(pattern);
386
271
  if (expanded.length > 0) cr = expanded[0];else cr = undefined;
387
-
388
272
  if (cr != undefined) {
389
273
  this.cr2filenames[cr].push(filename);
390
-
391
274
  if (dateSeanceString != this.cr2date[cr]) {
392
275
  info.push("".concat(Plugin.comptesRendusUrls(cr), " meta QUANTIEME_SEANCE contains ").concat(this.cr2date[cr], " instead of the expected ").concat(dateSeanceString));
393
276
  status = "needs-fixing";
@@ -398,12 +281,10 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
398
281
  status = "needs-fixing";
399
282
  }
400
283
  }
401
-
402
284
  return _context2.abrupt("return", {
403
285
  status: status,
404
286
  info: info
405
287
  });
406
-
407
288
  case 29:
408
289
  case "end":
409
290
  return _context2.stop();
@@ -411,11 +292,9 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
411
292
  }
412
293
  }, _callee2, this);
413
294
  }));
414
-
415
295
  function check(_x, _x2) {
416
296
  return _check.apply(this, arguments);
417
297
  }
418
-
419
298
  return check;
420
299
  }()
421
300
  }, {
@@ -424,10 +303,8 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
424
303
  var date = this.filename2date[filename];
425
304
  if (!(date in this.date2crs)) return [];
426
305
  var candidates = [];
427
-
428
306
  var _iterator3 = _createForOfIteratorHelper(this.date2crs[date]),
429
- _step3;
430
-
307
+ _step3;
431
308
  try {
432
309
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
433
310
  var cr = _step3.value;
@@ -438,7 +315,6 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
438
315
  } finally {
439
316
  _iterator3.f();
440
317
  }
441
-
442
318
  return candidates;
443
319
  }
444
320
  }, {
@@ -446,41 +322,32 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
446
322
  value: function () {
447
323
  var _postCheck = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(analysis) {
448
324
  var _i, _Object$keys, filename, result, info;
449
-
450
325
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
451
326
  while (1) {
452
327
  switch (_context3.prev = _context3.next) {
453
328
  case 0:
454
329
  _i = 0, _Object$keys = Object.keys(analysis);
455
-
456
330
  case 1:
457
331
  if (!(_i < _Object$keys.length)) {
458
332
  _context3.next = 11;
459
333
  break;
460
334
  }
461
-
462
335
  filename = _Object$keys[_i];
463
336
  result = analysis[filename]["agenda-00002"];
464
-
465
337
  if (!(result == null || result["status"] != "needs-fixing")) {
466
338
  _context3.next = 6;
467
339
  break;
468
340
  }
469
-
470
341
  return _context3.abrupt("continue", 8);
471
-
472
342
  case 6:
473
343
  info = result["info"].join("");
474
-
475
344
  if (info.includes("meta QUANTIEME") || info.includes("idJo field is missing")) {
476
345
  result["info"] = result["info"].concat(this.findCandidates(filename));
477
346
  }
478
-
479
347
  case 8:
480
348
  _i++;
481
349
  _context3.next = 1;
482
350
  break;
483
-
484
351
  case 11:
485
352
  case "end":
486
353
  return _context3.stop();
@@ -488,11 +355,9 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
488
355
  }
489
356
  }, _callee3, this);
490
357
  }));
491
-
492
358
  function postCheck(_x3) {
493
359
  return _postCheck.apply(this, arguments);
494
360
  }
495
-
496
361
  return postCheck;
497
362
  }()
498
363
  }, {
@@ -508,25 +373,19 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
508
373
  _context4.next = 2;
509
374
  break;
510
375
  }
511
-
512
376
  return _context4.abrupt("return", null);
513
-
514
377
  case 2:
515
378
  idJo = remapJo[agenda.uid];
516
379
  numSeanceJo = String(Number(idJo.substring(5)));
517
-
518
380
  if (!(agenda.identifiants.idJo == idJo && agenda.identifiants.numSeanceJo == numSeanceJo)) {
519
381
  _context4.next = 6;
520
382
  break;
521
383
  }
522
-
523
384
  return _context4.abrupt("return", false);
524
-
525
385
  case 6:
526
386
  agenda.identifiants.idJo = idJo;
527
387
  agenda.identifiants.numSeanceJo = numSeanceJo;
528
388
  return _context4.abrupt("return", true);
529
-
530
389
  case 9:
531
390
  case "end":
532
391
  return _context4.stop();
@@ -534,11 +393,9 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
534
393
  }
535
394
  }, _callee4);
536
395
  }));
537
-
538
396
  function fix(_x4) {
539
397
  return _fix.apply(this, arguments);
540
398
  }
541
-
542
399
  return fix;
543
400
  }()
544
401
  }], [{
@@ -551,9 +408,7 @@ var Plugin = /*#__PURE__*/function (_BasePlugin) {
551
408
  return "[".concat(file, "](https://git.en-root.org/tricoteuses/html/comptes-rendus/-/tree/master/").concat(file, ")");
552
409
  }
553
410
  }]);
554
-
555
411
  return Plugin;
556
412
  }(_bugs.BasePlugin);
557
-
558
413
  exports.Plugin = Plugin;
559
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW1hcEpvIiwiUlVBTlI1TDE1UzIwMTdJRFMyMDY2NyIsIlJVQU5SNUwxNVMyMDE4SURTMjA4MTciLCJSVUFOUjVMMTVTMjAxOElEUzIwODY0IiwiUlVBTlI1TDE1UzIwMThJRFMyMDk4MSIsIlJVQU5SNUwxNVMyMDE5SURTMjE1MDciLCJSVUFOUjVMMTVTMjAxOUlEUzIxNjA4IiwiUlVBTlI1TDE1UzIwMjBJRFMyMTg0MCIsIlJVQU5SNUwxNVMyMDIwSURTMjE4NDEiLCJSVUFOUjVMMTVTMjAyMElEUzIxODU5IiwiUlVBTlI1TDE1UzIwMjBJRFMyMTk3MCIsIlJVQU5SNUwxNVMyMDIwSURTMjE5ODMiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDE5IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjAyMCIsIlJVQU5SNUwxNVMyMDIwSURTMjIwMjEiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDU0IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjA1NSIsIlJVQU5SNUwxNVMyMDIwSURTMjIwNTYiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDU3IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjA4NyIsIlJVQU5SNUwxNVMyMDIwSURTMjIwODkiLCJSVUFOUjVMMTVTMjAyMElEUzIyMTA2IiwiUGx1Z2luIiwib3B0aW9ucyIsImNyIiwidW5kZWZpbmVkIiwiZmlsZW5hbWUyZGF0ZSIsImNyMmZpbGVuYW1lcyIsImRhdGUyY3JzIiwiY3IyZGF0ZSIsImdldEZpbGVzIiwiY29udGVudCIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJkb2MiLCJwYXJzZSIsInJvb3QiLCJmb3VuZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtZXRhIiwiYXR0cmlidXRlcyIsImRhdGUiLCJzcGxpdCIsInNwbGljZSIsImpvaW4iLCJwdXNoIiwiY29uc29sZSIsImVycm9yIiwiYWdlbmRhIiwiZmlsZW5hbWUiLCJ4c2lUeXBlIiwibGlldSIsImNvZGUiLCJjeWNsZURlVmllIiwiZXRhdCIsInZlcmJvc2UiLCJsb2ciLCJzdGF0dXMiLCJpbmZvIiwiZGF0ZVNlYW5jZSIsIkRhdGUiLCJpZGVudGlmaWFudHMiLCJzdWJzdHJpbmciLCJ5ZWFyIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiZGF5IiwibW9udGgiLCJkYXRlU2VhbmNlU3RyaW5nIiwiaWRKbyIsIndlZWsiLCJnZXRUaW1lIiwidWlkIiwicGF0dGVybiIsImV4cGFuZGVkIiwiZ2xvYiIsInN5bmMiLCJsZW5ndGgiLCJjb21wdGVzUmVuZHVzVXJscyIsImNhbmRpZGF0ZXMiLCJtYXN0ZXJVcmwiLCJhbmFseXNpcyIsIk9iamVjdCIsImtleXMiLCJyZXN1bHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsImZpbmRDYW5kaWRhdGVzIiwibnVtU2VhbmNlSm8iLCJTdHJpbmciLCJOdW1iZXIiLCJyZSIsIm1hdGNoIiwiUmVnRXhwIiwiZXhlYyIsImZpbGUiLCJCYXNlUGx1Z2luIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1Z3MvYWdlbmRhLTAwMDAyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnbG9iIGZyb20gXCJnbG9iXCJcbmltcG9ydCB7IEhUTUxFbGVtZW50LCBwYXJzZSwgVGV4dE5vZGUgfSBmcm9tIFwibm9kZS1odG1sLXBhcnNlclwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCB7IGdldEZpbGVzIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBCYXNlUGx1Z2luIH0gZnJvbSBcIi4uL2J1Z3NcIlxuaW1wb3J0IHsgbWFzdGVyVXJsIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcblxuZXhwb3J0IGxldCByZW1hcEpvOiBhbnkgPSB7XG4gIFJVQU5SNUwxNVMyMDE3SURTMjA2Njc6IFwiMjAxNzIwMDJcIixcbiAgUlVBTlI1TDE1UzIwMThJRFMyMDgxNzogXCIyMDE4MDA4NlwiLFxuICBSVUFOUjVMMTVTMjAxOElEUzIwODY0OiBcIjIwMTgwMTIxXCIsXG4gIFJVQU5SNUwxNVMyMDE4SURTMjA5ODE6IFwiMjAxODAxNzRcIixcbiAgUlVBTlI1TDE1UzIwMTlJRFMyMTUwNzogXCIyMDE5MDE1M1wiLFxuICBSVUFOUjVMMTVTMjAxOUlEUzIxNjA4OiBcIjIwMTkwMjE4XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjE4NDA6IFwiMjAyMDAwMDJcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMTg0MTogXCIyMDIwMDAwM1wiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIxODU5OiBcIjIwMjAwMDAxXCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjE5NzA6IFwiMjAyMDAwOTBcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMTk4MzogXCIyMDIwMDA5MlwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDE5OiBcIjIwMjAwMTE3XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwMjA6IFwiMjAyMDAxMThcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjAyMTogXCIyMDIwMDExOVwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDU0OiBcIjIwMjAwMTM0XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwNTU6IFwiMjAyMDAxMzVcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjA1NjogXCIyMDIwMDEzNlwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDU3OiBcIjIwMjAwMTM3XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwODc6IFwiMjAyMDAxMzlcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjA4OTogXCIyMDIwMDE0MFwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMTA2OiBcIjIwMjAwMTI1XCIsXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgY3IyZmlsZW5hbWVzOiBhbnlcbiAgZGF0ZTJjcnM6IGFueVxuICBjcjJkYXRlOiBhbnlcbiAgZmlsZW5hbWUyZGF0ZTogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMDJcIilcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY3IgPT0gdW5kZWZpbmVkKSB0aHJvdyBcIi0tY3IgaXMgcmVxdWlyZWRcIlxuICAgIHRoaXMuZmlsZW5hbWUyZGF0ZSA9IHt9XG4gICAgdGhpcy5jcjJmaWxlbmFtZXMgPSB7fVxuICAgIHRoaXMuZGF0ZTJjcnMgPSB7fVxuICAgIHRoaXMuY3IyZGF0ZSA9IHt9XG4gICAgZm9yIChjb25zdCBjciBvZiBnZXRGaWxlcyhbYCR7dGhpcy5vcHRpb25zLmNyfS8qLmFzcGBdKSkge1xuICAgICAgdGhpcy5jcjJmaWxlbmFtZXNbY3JdID0gW11cblxuICAgICAgY29uc3QgY29udGVudDogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNyLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblxuICAgICAgdHlwZSBQYXJzZVJlc3VsdCA9XG4gICAgICAgIHwgKFRleHROb2RlICYgeyB2YWxpZD86IGJvb2xlYW4gfSlcbiAgICAgICAgfCAoSFRNTEVsZW1lbnQgJiB7IHZhbGlkPzogYm9vbGVhbiB9KVxuICAgICAgY29uc3QgZG9jOiBQYXJzZVJlc3VsdCA9IHBhcnNlKGNvbnRlbnQpXG4gICAgICBjb25zdCByb290ID0gZG9jIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnRcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICBmb3IgKGNvbnN0IG1ldGEgb2Ygcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwibWV0YVwiKSkge1xuICAgICAgICBpZiAobWV0YS5hdHRyaWJ1dGVzW1wibmFtZVwiXSA9PSBcIlFVQU5USUVNRV9TRUFOQ0VcIikge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBtZXRhLmF0dHJpYnV0ZXNbXCJjb250ZW50XCJdXG4gICAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICAuc3BsaWNlKC0zKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpXG4gICAgICAgICAgaWYgKCEoZGF0ZSBpbiB0aGlzLmRhdGUyY3JzKSkgdGhpcy5kYXRlMmNyc1tkYXRlXSA9IFtdXG4gICAgICAgICAgdGhpcy5kYXRlMmNyc1tkYXRlXS5wdXNoKGNyKVxuICAgICAgICAgIHRoaXMuY3IyZGF0ZVtjcl0gPSBkYXRlXG4gICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAke2NyfSBpcyBtaXNzaW5nIHRoZSBtZXRhIG5hbWU9XCJRVUFOVElFTUVfU0VBTkNFXCJgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb21wdGVzUmVuZHVzVXJscyhmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZSA9IFwiXi4qL2NvbXB0ZXMtcmVuZHVzLyguKilcIlxuICAgIGNvbnN0IG1hdGNoID0gbmV3IFJlZ0V4cChyZSkuZXhlYyhmaWxlbmFtZSlcbiAgICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIGZpbGVuYW1lXG4gICAgY29uc3QgZmlsZSA9IG1hdGNoWzFdXG4gICAgcmV0dXJuIGBbJHtmaWxlfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvaHRtbC9jb21wdGVzLXJlbmR1cy8tL3RyZWUvbWFzdGVyLyR7ZmlsZX0pYFxuICB9XG5cbiAgYXN5bmMgY2hlY2soYWdlbmRhOiBhbnksIGZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIgfHxcbiAgICAgIGFnZW5kYS5jeWNsZURlVmllLmV0YXQgPT0gXCJTdXBwcmltw6lcIiB8fFxuICAgICAgYWdlbmRhLmN5Y2xlRGVWaWUuZXRhdCA9PSBcIkFubnVsw6lcIlxuICAgIClcbiAgICAgIHJldHVybiBudWxsXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBhZ2VuZGEtMDAwMDI6ICR7ZmlsZW5hbWV9YClcbiAgICBsZXQgc3RhdHVzID0gXCJva1wiXG4gICAgbGV0IGluZm86IGFueSA9IFtdXG5cbiAgICBjb25zdCBkYXRlU2VhbmNlID0gbmV3IERhdGUoYWdlbmRhLmlkZW50aWZpYW50cy5kYXRlU2VhbmNlLnN1YnN0cmluZygwLCAxMCkpXG4gICAgY29uc3QgeWVhciA9IGRhdGVTZWFuY2UudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZnJcIiwgeyB5ZWFyOiBcIm51bWVyaWNcIiB9KVxuICAgIGNvbnN0IGRheSA9IGRhdGVTZWFuY2UudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZnJcIiwgeyBkYXk6IFwiMi1kaWdpdFwiIH0pXG4gICAgY29uc3QgbW9udGggPSBkYXRlU2VhbmNlLnRvTG9jYWxlRGF0ZVN0cmluZyhcImZyXCIsIHsgbW9udGg6IFwibG9uZ1wiIH0pXG4gICAgY29uc3QgZGF0ZVNlYW5jZVN0cmluZyA9IGAke2RheX0gJHttb250aH0gJHt5ZWFyfWBcbiAgICB0aGlzLmZpbGVuYW1lMmRhdGVbZmlsZW5hbWVdID0gZGF0ZVNlYW5jZVN0cmluZ1xuXG4gICAgbGV0IGlkSm9cblxuICAgIGlmIChcbiAgICAgIGFnZW5kYS5pZGVudGlmaWFudHMgPT0gdW5kZWZpbmVkIHx8XG4gICAgICBhZ2VuZGEuaWRlbnRpZmlhbnRzLmlkSm8gPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCB3ZWVrID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDBcbiAgICAgIGlmIChkYXRlU2VhbmNlID49IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gd2VlaykpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkSm8gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWRKbyA9IGFnZW5kYS5pZGVudGlmaWFudHMuaWRKb1xuICAgIH1cblxuICAgIGlmIChhZ2VuZGEudWlkIGluIHJlbWFwSm8pIHtcbiAgICAgIGlmIChpZEpvID09IHJlbWFwSm9bYWdlbmRhLnVpZF0pIHtcbiAgICAgICAgaW5mby5wdXNoKGBpZEpvIGFscmVhZHkgaXMgJHtpZEpvfWApXG4gICAgICAgIHN0YXR1cyA9IFwiYWxyZWFkeS1maXhlZFwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZEpvID0gcmVtYXBKb1thZ2VuZGEudWlkXVxuICAgICAgICBzdGF0dXMgPSBcIndpbGwtYmUtZml4ZWRcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZEpvID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBcIm5lZWRzLWZpeGluZ1wiLFxuICAgICAgICBpbmZvOiBbXCJpZEpvIGZpZWxkIGlzIG1pc3NpbmdcIl0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybiA9IGAke3RoaXMub3B0aW9ucy5jcn0vKl8ke2lkSm99LmFzcGBcbiAgICBjb25zdCBleHBhbmRlZCA9IGdsb2Iuc3luYyhwYXR0ZXJuKVxuICAgIGxldCBjclxuICAgIGlmIChleHBhbmRlZC5sZW5ndGggPiAwKSBjciA9IGV4cGFuZGVkWzBdXG4gICAgZWxzZSBjciA9IHVuZGVmaW5lZFxuICAgIGlmIChjciAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3IyZmlsZW5hbWVzW2NyXS5wdXNoKGZpbGVuYW1lKVxuXG4gICAgICBpZiAoZGF0ZVNlYW5jZVN0cmluZyAhPSB0aGlzLmNyMmRhdGVbY3JdKSB7XG4gICAgICAgIGluZm8ucHVzaChcbiAgICAgICAgICBgJHtQbHVnaW4uY29tcHRlc1JlbmR1c1VybHMoY3IpfSBtZXRhIFFVQU5USUVNRV9TRUFOQ0UgY29udGFpbnMgJHtcbiAgICAgICAgICAgIHRoaXMuY3IyZGF0ZVtjcl1cbiAgICAgICAgICB9IGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkICR7ZGF0ZVNlYW5jZVN0cmluZ31gLFxuICAgICAgICApXG4gICAgICAgIHN0YXR1cyA9IFwibmVlZHMtZml4aW5nXCJcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXR1cyAhPSBcIndpbGwtYmUtZml4ZWRcIikge1xuICAgICAgICBpbmZvLnB1c2goYCR7cGF0dGVybn0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgICBzdGF0dXMgPSBcIm5lZWRzLWZpeGluZ1wiXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLCBpbmZvOiBpbmZvIH1cbiAgfVxuXG4gIGZpbmRDYW5kaWRhdGVzKGZpbGVuYW1lOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmZpbGVuYW1lMmRhdGVbZmlsZW5hbWVdXG4gICAgaWYgKCEoZGF0ZSBpbiB0aGlzLmRhdGUyY3JzKSkgcmV0dXJuIFtdXG4gICAgbGV0IGNhbmRpZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY3Igb2YgdGhpcy5kYXRlMmNyc1tkYXRlXSkge1xuICAgICAgaWYgKHRoaXMuY3IyZmlsZW5hbWVzW2NyXS5sZW5ndGggPiAwKVxuICAgICAgICBjYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgYCR7UGx1Z2luLmNvbXB0ZXNSZW5kdXNVcmxzKFxuICAgICAgICAgICAgY3IsXG4gICAgICAgICAgKX0gaXMgbm90IGEgY2FuZGlkYXRlIGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieSAke21hc3RlclVybChcbiAgICAgICAgICAgIHRoaXMuY3IyZmlsZW5hbWVzW2NyXSxcbiAgICAgICAgICApfWAsXG4gICAgICAgIClcbiAgICAgIGVsc2UgY2FuZGlkYXRlcy5wdXNoKGAke1BsdWdpbi5jb21wdGVzUmVuZHVzVXJscyhjcil9IGlzIGEgY2FuZGlkYXRlYClcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXNcbiAgfVxuXG4gIGFzeW5jIHBvc3RDaGVjayhhbmFseXNpczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKGFuYWx5c2lzKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHlzaXNbZmlsZW5hbWVdW1wiYWdlbmRhLTAwMDAyXCJdXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgcmVzdWx0W1wic3RhdHVzXCJdICE9IFwibmVlZHMtZml4aW5nXCIpIGNvbnRpbnVlXG4gICAgICBjb25zdCBpbmZvID0gcmVzdWx0W1wiaW5mb1wiXS5qb2luKFwiXCIpXG4gICAgICBpZiAoXG4gICAgICAgIGluZm8uaW5jbHVkZXMoXCJtZXRhIFFVQU5USUVNRVwiKSB8fFxuICAgICAgICBpbmZvLmluY2x1ZGVzKFwiaWRKbyBmaWVsZCBpcyBtaXNzaW5nXCIpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W1wiaW5mb1wiXSA9IHJlc3VsdFtcImluZm9cIl0uY29uY2F0KHRoaXMuZmluZENhbmRpZGF0ZXMoZmlsZW5hbWUpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCEoYWdlbmRhLnVpZCBpbiByZW1hcEpvKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBpZEpvID0gcmVtYXBKb1thZ2VuZGEudWlkXVxuICAgIGNvbnN0IG51bVNlYW5jZUpvID0gU3RyaW5nKE51bWJlcihpZEpvLnN1YnN0cmluZyg1KSkpXG4gICAgaWYgKFxuICAgICAgYWdlbmRhLmlkZW50aWZpYW50cy5pZEpvID09IGlkSm8gJiZcbiAgICAgIGFnZW5kYS5pZGVudGlmaWFudHMubnVtU2VhbmNlSm8gPT0gbnVtU2VhbmNlSm9cbiAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBhZ2VuZGEuaWRlbnRpZmlhbnRzLmlkSm8gPSBpZEpvXG4gICAgYWdlbmRhLmlkZW50aWZpYW50cy5udW1TZWFuY2VKbyA9IG51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
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW1hcEpvIiwiUlVBTlI1TDE1UzIwMTdJRFMyMDY2NyIsIlJVQU5SNUwxNVMyMDE4SURTMjA4MTciLCJSVUFOUjVMMTVTMjAxOElEUzIwODY0IiwiUlVBTlI1TDE1UzIwMThJRFMyMDk4MSIsIlJVQU5SNUwxNVMyMDE5SURTMjE1MDciLCJSVUFOUjVMMTVTMjAxOUlEUzIxNjA4IiwiUlVBTlI1TDE1UzIwMjBJRFMyMTg0MCIsIlJVQU5SNUwxNVMyMDIwSURTMjE4NDEiLCJSVUFOUjVMMTVTMjAyMElEUzIxODU5IiwiUlVBTlI1TDE1UzIwMjBJRFMyMTk3MCIsIlJVQU5SNUwxNVMyMDIwSURTMjE5ODMiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDE5IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjAyMCIsIlJVQU5SNUwxNVMyMDIwSURTMjIwMjEiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDU0IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjA1NSIsIlJVQU5SNUwxNVMyMDIwSURTMjIwNTYiLCJSVUFOUjVMMTVTMjAyMElEUzIyMDU3IiwiUlVBTlI1TDE1UzIwMjBJRFMyMjA4NyIsIlJVQU5SNUwxNVMyMDIwSURTMjIwODkiLCJSVUFOUjVMMTVTMjAyMElEUzIyMTA2IiwiUGx1Z2luIiwib3B0aW9ucyIsImNyIiwidW5kZWZpbmVkIiwiZmlsZW5hbWUyZGF0ZSIsImNyMmZpbGVuYW1lcyIsImRhdGUyY3JzIiwiY3IyZGF0ZSIsImdldEZpbGVzIiwiY29udGVudCIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJkb2MiLCJwYXJzZSIsInJvb3QiLCJmb3VuZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtZXRhIiwiYXR0cmlidXRlcyIsImRhdGUiLCJzcGxpdCIsInNwbGljZSIsImpvaW4iLCJwdXNoIiwiY29uc29sZSIsImVycm9yIiwiYWdlbmRhIiwiZmlsZW5hbWUiLCJ4c2lUeXBlIiwibGlldSIsImNvZGUiLCJjeWNsZURlVmllIiwiZXRhdCIsInZlcmJvc2UiLCJsb2ciLCJzdGF0dXMiLCJpbmZvIiwiZGF0ZVNlYW5jZSIsIkRhdGUiLCJpZGVudGlmaWFudHMiLCJzdWJzdHJpbmciLCJ5ZWFyIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwiZGF5IiwibW9udGgiLCJkYXRlU2VhbmNlU3RyaW5nIiwiaWRKbyIsIndlZWsiLCJnZXRUaW1lIiwidWlkIiwicGF0dGVybiIsImV4cGFuZGVkIiwiZ2xvYiIsInN5bmMiLCJsZW5ndGgiLCJjb21wdGVzUmVuZHVzVXJscyIsImNhbmRpZGF0ZXMiLCJtYXN0ZXJVcmwiLCJhbmFseXNpcyIsIk9iamVjdCIsImtleXMiLCJyZXN1bHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsImZpbmRDYW5kaWRhdGVzIiwibnVtU2VhbmNlSm8iLCJTdHJpbmciLCJOdW1iZXIiLCJyZSIsIm1hdGNoIiwiUmVnRXhwIiwiZXhlYyIsImZpbGUiLCJCYXNlUGx1Z2luIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1Z3MvYWdlbmRhLTAwMDAyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnbG9iIGZyb20gXCJnbG9iXCJcbmltcG9ydCB7IEhUTUxFbGVtZW50LCBwYXJzZSwgVGV4dE5vZGUgfSBmcm9tIFwibm9kZS1odG1sLXBhcnNlclwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCB7IGdldEZpbGVzIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBCYXNlUGx1Z2luIH0gZnJvbSBcIi4uL2J1Z3NcIlxuaW1wb3J0IHsgbWFzdGVyVXJsIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcblxuZXhwb3J0IGxldCByZW1hcEpvOiBhbnkgPSB7XG4gIFJVQU5SNUwxNVMyMDE3SURTMjA2Njc6IFwiMjAxNzIwMDJcIixcbiAgUlVBTlI1TDE1UzIwMThJRFMyMDgxNzogXCIyMDE4MDA4NlwiLFxuICBSVUFOUjVMMTVTMjAxOElEUzIwODY0OiBcIjIwMTgwMTIxXCIsXG4gIFJVQU5SNUwxNVMyMDE4SURTMjA5ODE6IFwiMjAxODAxNzRcIixcbiAgUlVBTlI1TDE1UzIwMTlJRFMyMTUwNzogXCIyMDE5MDE1M1wiLFxuICBSVUFOUjVMMTVTMjAxOUlEUzIxNjA4OiBcIjIwMTkwMjE4XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjE4NDA6IFwiMjAyMDAwMDJcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMTg0MTogXCIyMDIwMDAwM1wiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIxODU5OiBcIjIwMjAwMDAxXCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjE5NzA6IFwiMjAyMDAwOTBcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMTk4MzogXCIyMDIwMDA5MlwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDE5OiBcIjIwMjAwMTE3XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwMjA6IFwiMjAyMDAxMThcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjAyMTogXCIyMDIwMDExOVwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDU0OiBcIjIwMjAwMTM0XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwNTU6IFwiMjAyMDAxMzVcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjA1NjogXCIyMDIwMDEzNlwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMDU3OiBcIjIwMjAwMTM3XCIsXG4gIFJVQU5SNUwxNVMyMDIwSURTMjIwODc6IFwiMjAyMDAxMzlcIixcbiAgUlVBTlI1TDE1UzIwMjBJRFMyMjA4OTogXCIyMDIwMDE0MFwiLFxuICBSVUFOUjVMMTVTMjAyMElEUzIyMTA2OiBcIjIwMjAwMTI1XCIsXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgY3IyZmlsZW5hbWVzOiBhbnlcbiAgZGF0ZTJjcnM6IGFueVxuICBjcjJkYXRlOiBhbnlcbiAgZmlsZW5hbWUyZGF0ZTogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMDJcIilcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY3IgPT0gdW5kZWZpbmVkKSB0aHJvdyBcIi0tY3IgaXMgcmVxdWlyZWRcIlxuICAgIHRoaXMuZmlsZW5hbWUyZGF0ZSA9IHt9XG4gICAgdGhpcy5jcjJmaWxlbmFtZXMgPSB7fVxuICAgIHRoaXMuZGF0ZTJjcnMgPSB7fVxuICAgIHRoaXMuY3IyZGF0ZSA9IHt9XG4gICAgZm9yIChjb25zdCBjciBvZiBnZXRGaWxlcyhbYCR7dGhpcy5vcHRpb25zLmNyfS8qLmFzcGBdKSkge1xuICAgICAgdGhpcy5jcjJmaWxlbmFtZXNbY3JdID0gW11cblxuICAgICAgY29uc3QgY29udGVudDogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNyLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcblxuICAgICAgdHlwZSBQYXJzZVJlc3VsdCA9XG4gICAgICAgIHwgKFRleHROb2RlICYgeyB2YWxpZD86IGJvb2xlYW4gfSlcbiAgICAgICAgfCAoSFRNTEVsZW1lbnQgJiB7IHZhbGlkPzogYm9vbGVhbiB9KVxuICAgICAgY29uc3QgZG9jOiBQYXJzZVJlc3VsdCA9IHBhcnNlKGNvbnRlbnQpXG4gICAgICBjb25zdCByb290ID0gZG9jIGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnRcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICBmb3IgKGNvbnN0IG1ldGEgb2Ygcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFwibWV0YVwiKSkge1xuICAgICAgICBpZiAobWV0YS5hdHRyaWJ1dGVzW1wibmFtZVwiXSA9PSBcIlFVQU5USUVNRV9TRUFOQ0VcIikge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBtZXRhLmF0dHJpYnV0ZXNbXCJjb250ZW50XCJdXG4gICAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICAuc3BsaWNlKC0zKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpXG4gICAgICAgICAgaWYgKCEoZGF0ZSBpbiB0aGlzLmRhdGUyY3JzKSkgdGhpcy5kYXRlMmNyc1tkYXRlXSA9IFtdXG4gICAgICAgICAgdGhpcy5kYXRlMmNyc1tkYXRlXS5wdXNoKGNyKVxuICAgICAgICAgIHRoaXMuY3IyZGF0ZVtjcl0gPSBkYXRlXG4gICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAke2NyfSBpcyBtaXNzaW5nIHRoZSBtZXRhIG5hbWU9XCJRVUFOVElFTUVfU0VBTkNFXCJgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjb21wdGVzUmVuZHVzVXJscyhmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZSA9IFwiXi4qL2NvbXB0ZXMtcmVuZHVzLyguKilcIlxuICAgIGNvbnN0IG1hdGNoID0gbmV3IFJlZ0V4cChyZSkuZXhlYyhmaWxlbmFtZSlcbiAgICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIGZpbGVuYW1lXG4gICAgY29uc3QgZmlsZSA9IG1hdGNoWzFdXG4gICAgcmV0dXJuIGBbJHtmaWxlfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvaHRtbC9jb21wdGVzLXJlbmR1cy8tL3RyZWUvbWFzdGVyLyR7ZmlsZX0pYFxuICB9XG5cbiAgYXN5bmMgY2hlY2soYWdlbmRhOiBhbnksIGZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIgfHxcbiAgICAgIGFnZW5kYS5jeWNsZURlVmllLmV0YXQgPT0gXCJTdXBwcmltw6lcIiB8fFxuICAgICAgYWdlbmRhLmN5Y2xlRGVWaWUuZXRhdCA9PSBcIkFubnVsw6lcIlxuICAgIClcbiAgICAgIHJldHVybiBudWxsXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBhZ2VuZGEtMDAwMDI6ICR7ZmlsZW5hbWV9YClcbiAgICBsZXQgc3RhdHVzID0gXCJva1wiXG4gICAgbGV0IGluZm86IGFueSA9IFtdXG5cbiAgICBjb25zdCBkYXRlU2VhbmNlID0gbmV3IERhdGUoYWdlbmRhLmlkZW50aWZpYW50cy5kYXRlU2VhbmNlLnN1YnN0cmluZygwLCAxMCkpXG4gICAgY29uc3QgeWVhciA9IGRhdGVTZWFuY2UudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZnJcIiwgeyB5ZWFyOiBcIm51bWVyaWNcIiB9KVxuICAgIGNvbnN0IGRheSA9IGRhdGVTZWFuY2UudG9Mb2NhbGVEYXRlU3RyaW5nKFwiZnJcIiwgeyBkYXk6IFwiMi1kaWdpdFwiIH0pXG4gICAgY29uc3QgbW9udGggPSBkYXRlU2VhbmNlLnRvTG9jYWxlRGF0ZVN0cmluZyhcImZyXCIsIHsgbW9udGg6IFwibG9uZ1wiIH0pXG4gICAgY29uc3QgZGF0ZVNlYW5jZVN0cmluZyA9IGAke2RheX0gJHttb250aH0gJHt5ZWFyfWBcbiAgICB0aGlzLmZpbGVuYW1lMmRhdGVbZmlsZW5hbWVdID0gZGF0ZVNlYW5jZVN0cmluZ1xuXG4gICAgbGV0IGlkSm9cblxuICAgIGlmIChcbiAgICAgIGFnZW5kYS5pZGVudGlmaWFudHMgPT0gdW5kZWZpbmVkIHx8XG4gICAgICBhZ2VuZGEuaWRlbnRpZmlhbnRzLmlkSm8gPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCB3ZWVrID0gNyAqIDI0ICogNjAgKiA2MCAqIDEwMDBcbiAgICAgIGlmIChkYXRlU2VhbmNlID49IG5ldyBEYXRlKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gd2VlaykpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkSm8gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWRKbyA9IGFnZW5kYS5pZGVudGlmaWFudHMuaWRKb1xuICAgIH1cblxuICAgIGlmIChhZ2VuZGEudWlkIGluIHJlbWFwSm8pIHtcbiAgICAgIGlmIChpZEpvID09IHJlbWFwSm9bYWdlbmRhLnVpZF0pIHtcbiAgICAgICAgaW5mby5wdXNoKGBpZEpvIGFscmVhZHkgaXMgJHtpZEpvfWApXG4gICAgICAgIHN0YXR1cyA9IFwiYWxyZWFkeS1maXhlZFwiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZEpvID0gcmVtYXBKb1thZ2VuZGEudWlkXVxuICAgICAgICBzdGF0dXMgPSBcIndpbGwtYmUtZml4ZWRcIlxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZEpvID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBcIm5lZWRzLWZpeGluZ1wiLFxuICAgICAgICBpbmZvOiBbXCJpZEpvIGZpZWxkIGlzIG1pc3NpbmdcIl0sXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybiA9IGAke3RoaXMub3B0aW9ucy5jcn0vKl8ke2lkSm99LmFzcGBcbiAgICBjb25zdCBleHBhbmRlZCA9IGdsb2Iuc3luYyhwYXR0ZXJuKVxuICAgIGxldCBjclxuICAgIGlmIChleHBhbmRlZC5sZW5ndGggPiAwKSBjciA9IGV4cGFuZGVkWzBdXG4gICAgZWxzZSBjciA9IHVuZGVmaW5lZFxuICAgIGlmIChjciAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3IyZmlsZW5hbWVzW2NyXS5wdXNoKGZpbGVuYW1lKVxuXG4gICAgICBpZiAoZGF0ZVNlYW5jZVN0cmluZyAhPSB0aGlzLmNyMmRhdGVbY3JdKSB7XG4gICAgICAgIGluZm8ucHVzaChcbiAgICAgICAgICBgJHtQbHVnaW4uY29tcHRlc1JlbmR1c1VybHMoY3IpfSBtZXRhIFFVQU5USUVNRV9TRUFOQ0UgY29udGFpbnMgJHtcbiAgICAgICAgICAgIHRoaXMuY3IyZGF0ZVtjcl1cbiAgICAgICAgICB9IGluc3RlYWQgb2YgdGhlIGV4cGVjdGVkICR7ZGF0ZVNlYW5jZVN0cmluZ31gLFxuICAgICAgICApXG4gICAgICAgIHN0YXR1cyA9IFwibmVlZHMtZml4aW5nXCJcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXR1cyAhPSBcIndpbGwtYmUtZml4ZWRcIikge1xuICAgICAgICBpbmZvLnB1c2goYCR7cGF0dGVybn0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgICBzdGF0dXMgPSBcIm5lZWRzLWZpeGluZ1wiXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLCBpbmZvOiBpbmZvIH1cbiAgfVxuXG4gIGZpbmRDYW5kaWRhdGVzKGZpbGVuYW1lOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmZpbGVuYW1lMmRhdGVbZmlsZW5hbWVdXG4gICAgaWYgKCEoZGF0ZSBpbiB0aGlzLmRhdGUyY3JzKSkgcmV0dXJuIFtdXG4gICAgbGV0IGNhbmRpZGF0ZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY3Igb2YgdGhpcy5kYXRlMmNyc1tkYXRlXSkge1xuICAgICAgaWYgKHRoaXMuY3IyZmlsZW5hbWVzW2NyXS5sZW5ndGggPiAwKVxuICAgICAgICBjYW5kaWRhdGVzLnB1c2goXG4gICAgICAgICAgYCR7UGx1Z2luLmNvbXB0ZXNSZW5kdXNVcmxzKFxuICAgICAgICAgICAgY3IsXG4gICAgICAgICAgKX0gaXMgbm90IGEgY2FuZGlkYXRlIGJlY2F1c2UgaXQgaXMgcmVmZXJlbmNlZCBieSAke21hc3RlclVybChcbiAgICAgICAgICAgIHRoaXMuY3IyZmlsZW5hbWVzW2NyXSxcbiAgICAgICAgICApfWAsXG4gICAgICAgIClcbiAgICAgIGVsc2UgY2FuZGlkYXRlcy5wdXNoKGAke1BsdWdpbi5jb21wdGVzUmVuZHVzVXJscyhjcil9IGlzIGEgY2FuZGlkYXRlYClcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXNcbiAgfVxuXG4gIGFzeW5jIHBvc3RDaGVjayhhbmFseXNpczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKGFuYWx5c2lzKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYW5hbHlzaXNbZmlsZW5hbWVdW1wiYWdlbmRhLTAwMDAyXCJdXG4gICAgICBpZiAocmVzdWx0ID09IG51bGwgfHwgcmVzdWx0W1wic3RhdHVzXCJdICE9IFwibmVlZHMtZml4aW5nXCIpIGNvbnRpbnVlXG4gICAgICBjb25zdCBpbmZvID0gcmVzdWx0W1wiaW5mb1wiXS5qb2luKFwiXCIpXG4gICAgICBpZiAoXG4gICAgICAgIGluZm8uaW5jbHVkZXMoXCJtZXRhIFFVQU5USUVNRVwiKSB8fFxuICAgICAgICBpbmZvLmluY2x1ZGVzKFwiaWRKbyBmaWVsZCBpcyBtaXNzaW5nXCIpXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W1wiaW5mb1wiXSA9IHJlc3VsdFtcImluZm9cIl0uY29uY2F0KHRoaXMuZmluZENhbmRpZGF0ZXMoZmlsZW5hbWUpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCEoYWdlbmRhLnVpZCBpbiByZW1hcEpvKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBpZEpvID0gcmVtYXBKb1thZ2VuZGEudWlkXVxuICAgIGNvbnN0IG51bVNlYW5jZUpvID0gU3RyaW5nKE51bWJlcihpZEpvLnN1YnN0cmluZyg1KSkpXG4gICAgaWYgKFxuICAgICAgYWdlbmRhLmlkZW50aWZpYW50cy5pZEpvID09IGlkSm8gJiZcbiAgICAgIGFnZW5kYS5pZGVudGlmaWFudHMubnVtU2VhbmNlSm8gPT0gbnVtU2VhbmNlSm9cbiAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBhZ2VuZGEuaWRlbnRpZmlhbnRzLmlkSm8gPSBpZEpvXG4gICAgYWdlbmRhLmlkZW50aWZpYW50cy5udW1TZWFuY2VKbyA9IG51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