@tricoteuses/assemblee 1.0.6 → 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 (135) 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.d.ts +16 -115
  74. package/lib/raw_types/dossiers_legislatifs.js +26 -435
  75. package/lib/raw_types/dossiers_legislatifs.mjs +26 -412
  76. package/lib/raw_types/scrutins.js +6 -81
  77. package/lib/raw_types/scrutins.mjs +9 -57
  78. package/lib/scripts/bugs_helper.js +2 -181
  79. package/lib/scripts/bugs_helper.mjs +2 -39
  80. package/lib/scripts/clean_data.js +27 -143
  81. package/lib/scripts/clean_data.mjs +15 -34
  82. package/lib/scripts/clean_reorganized_data.js +76 -240
  83. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  84. package/lib/scripts/diff_amendements.js +19 -79
  85. package/lib/scripts/diff_amendements.mjs +17 -35
  86. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  88. package/lib/scripts/get_today_reunions.js +4 -22
  89. package/lib/scripts/get_today_reunions.mjs +1 -7
  90. package/lib/scripts/merge_scrutins.js +3 -47
  91. package/lib/scripts/merge_scrutins.mjs +1 -9
  92. package/lib/scripts/parse_textes_lois.js +15 -44
  93. package/lib/scripts/parse_textes_lois.mjs +18 -19
  94. package/lib/scripts/raw_types_from_amendements.js +3 -95
  95. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  96. package/lib/scripts/reorganize_data.js +74 -294
  97. package/lib/scripts/reorganize_data.mjs +22 -133
  98. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  99. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  100. package/lib/scripts/retrieve_documents.js +4 -192
  101. package/lib/scripts/retrieve_documents.mjs +2 -50
  102. package/lib/scripts/retrieve_open_data.js +44 -116
  103. package/lib/scripts/retrieve_open_data.mjs +14 -19
  104. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  105. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  106. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  108. package/lib/scripts/retrieve_textes_lois.js +3 -122
  109. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  110. package/lib/scripts/test_load.js +2 -10
  111. package/lib/scripts/test_load.mjs +2 -1
  112. package/lib/scripts/test_load_big_files.js +2 -10
  113. package/lib/scripts/test_load_big_files.mjs +2 -1
  114. package/lib/scripts/validate_json.js +4 -119
  115. package/lib/scripts/validate_json.mjs +2 -36
  116. package/lib/shared_types/codes_actes.js +1 -24
  117. package/lib/shared_types/codes_actes.mjs +3 -10
  118. package/lib/strings.js +1 -5
  119. package/lib/strings.mjs +1 -1
  120. package/lib/types/acteurs_et_organes.js +9 -84
  121. package/lib/types/acteurs_et_organes.mjs +10 -63
  122. package/lib/types/agendas.js +8 -90
  123. package/lib/types/agendas.mjs +11 -66
  124. package/lib/types/amendements.d.ts +2 -0
  125. package/lib/types/amendements.js +12 -92
  126. package/lib/types/amendements.mjs +15 -70
  127. package/lib/types/dossiers_legislatifs.js +8 -96
  128. package/lib/types/dossiers_legislatifs.mjs +10 -72
  129. package/lib/types/legislatures.js +1 -3
  130. package/lib/types/legislatures.mjs +1 -2
  131. package/lib/types/scrutins.js +8 -82
  132. package/lib/types/scrutins.mjs +11 -58
  133. package/lib/urls.js +3 -27
  134. package/lib/urls.mjs +3 -21
  135. package/package.json +1 -1
@@ -1,111 +1,58 @@
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.function.name.js");
6
-
7
5
  require("core-js/modules/es.array.from.js");
8
-
9
6
  require("core-js/modules/es.array.is-array.js");
10
-
7
+ require("core-js/modules/es.object.define-property.js");
11
8
  require("core-js/modules/es.symbol.to-string-tag.js");
12
-
13
9
  require("core-js/modules/es.json.to-string-tag.js");
14
-
15
10
  require("core-js/modules/es.math.to-string-tag.js");
16
-
17
- require("core-js/modules/es.object.define-property.js");
18
-
19
11
  require("core-js/modules/es.object.create.js");
20
-
21
12
  require("core-js/modules/es.object.get-prototype-of.js");
22
-
23
13
  require("core-js/modules/es.array.for-each.js");
24
-
25
14
  require("core-js/modules/web.dom-collections.for-each.js");
26
-
27
15
  require("core-js/modules/es.object.set-prototype-of.js");
28
-
29
16
  require("core-js/modules/es.array.reverse.js");
30
-
31
17
  require("core-js/modules/es.symbol.js");
32
-
33
18
  require("core-js/modules/es.symbol.description.js");
34
-
35
19
  require("core-js/modules/es.object.to-string.js");
36
-
37
20
  require("core-js/modules/es.symbol.async-iterator.js");
38
-
39
21
  require("core-js/modules/es.symbol.iterator.js");
40
-
41
22
  require("core-js/modules/es.array.iterator.js");
42
-
43
23
  require("core-js/modules/es.string.iterator.js");
44
-
45
24
  require("core-js/modules/web.dom-collections.iterator.js");
46
-
47
25
  require("core-js/modules/es.promise.js");
48
-
49
26
  require("core-js/modules/es.regexp.exec.js");
50
-
51
27
  require("core-js/modules/es.string.replace.js");
52
-
53
28
  require("core-js/modules/es.string.trim.js");
54
-
55
29
  require("core-js/modules/es.array.join.js");
56
-
57
30
  require("core-js/modules/es.array.concat.js");
58
-
59
31
  require("core-js/modules/es.array.slice.js");
60
-
61
32
  var _child_process = require("child_process");
62
-
63
33
  var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
64
-
65
34
  var _deepEqual = _interopRequireDefault(require("deep-equal"));
66
-
67
35
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
68
-
69
36
  var _path = _interopRequireDefault(require("path"));
70
-
71
37
  var _git = require("../git");
72
-
73
38
  var _parsers = require("../parsers");
74
-
75
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
76
-
77
- 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; }
78
-
40
+ 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; }
79
41
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
80
-
81
42
  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."); }
82
-
83
43
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
84
-
85
44
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
86
-
87
45
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
88
-
89
46
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
90
-
91
47
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
92
-
93
48
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
94
-
95
49
  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); } }
96
-
97
50
  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); }); }; }
98
-
99
51
  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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
100
-
101
52
  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); }
102
-
103
53
  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; }
104
-
105
54
  function _asyncIterator(iterable) { var method, async, sync, retry = 2; for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) { if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
106
-
107
55
  function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function (value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(value) { var ret = this.s["return"]; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, "throw": function _throw(value) { var thr = this.s["return"]; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); }
108
-
109
56
  var optionsDefinitions = [{
110
57
  alias: "C",
111
58
  help: "clone repositories from given group (or organization) git URL",
@@ -149,20 +96,15 @@ var optionsDefinitions = [{
149
96
  type: String
150
97
  }];
151
98
  var options = (0, _commandLineArgs["default"])(optionsDefinitions);
152
-
153
99
  function commitAndPush(repositoryDir, options, remotes) {
154
100
  var error = false;
155
-
156
101
  if (options.commit) {
157
102
  (0, _git.commit)(repositoryDir, "Nouvelle moisson");
158
-
159
103
  var _iterator2 = _createForOfIteratorHelper(remotes || []),
160
- _step2;
161
-
104
+ _step2;
162
105
  try {
163
106
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
164
107
  var remote = _step2.value;
165
-
166
108
  try {
167
109
  (0, _child_process.execSync)("git push ".concat(remote, " master"), {
168
110
  cwd: repositoryDir,
@@ -182,24 +124,19 @@ function commitAndPush(repositoryDir, options, remotes) {
182
124
  _iterator2.f();
183
125
  }
184
126
  }
185
-
186
127
  return error;
187
128
  }
188
-
189
129
  function main() {
190
130
  return _main.apply(this, arguments);
191
131
  }
192
-
193
132
  function _main() {
194
133
  _main = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
195
134
  var gitGroupUrl, amendementsDir, cacheDir, _i, _arr, etat, url, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step$value, amendementUrlPath, amendement, amendementUrlPathSplitted, amendementFilePath, existingAmendement;
196
-
197
135
  return _regeneratorRuntime().wrap(function _callee$(_context) {
198
136
  while (1) {
199
137
  switch (_context.prev = _context.next) {
200
138
  case 0:
201
139
  gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
202
-
203
140
  if (gitGroupUrl !== undefined) {
204
141
  (0, _child_process.execSync)("git clone ".concat(gitGroupUrl, "/Amendements_en_attente.git"), {
205
142
  cwd: options.dataDir,
@@ -208,21 +145,17 @@ function _main() {
208
145
  stdio: ["ignore", "ignore", "pipe"]
209
146
  });
210
147
  }
211
-
212
148
  amendementsDir = _path["default"].join(options.dataDir, "Amendements_en_attente");
213
149
  _context.next = 5;
214
150
  return _fsExtra["default"].ensureDir(amendementsDir);
215
-
216
151
  case 5:
217
152
  cacheDir = _path["default"].join(options.dataDir, "Amendements_en_attente_cache");
218
153
  _i = 0, _arr = ["En recevabilité", "En traitement"];
219
-
220
154
  case 7:
221
155
  if (!(_i < _arr.length)) {
222
156
  _context.next = 58;
223
157
  break;
224
158
  }
225
-
226
159
  etat = _arr[_i];
227
160
  url = "https://www.assemblee-nationale.fr/dyn/".concat(options.legislature, "/amendements?etat=").concat(encodeURIComponent(etat));
228
161
  _iteratorAbruptCompletion = false;
@@ -232,52 +165,41 @@ function _main() {
232
165
  silent: options.silent,
233
166
  verbose: options.verbose
234
167
  }));
235
-
236
168
  case 14:
237
169
  _context.next = 16;
238
170
  return _iterator.next();
239
-
240
171
  case 16:
241
172
  if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) {
242
173
  _context.next = 39;
243
174
  break;
244
175
  }
245
-
246
176
  _step$value = _slicedToArray(_step.value, 2), amendementUrlPath = _step$value[0], amendement = _step$value[1];
247
177
  amendementUrlPathSplitted = amendementUrlPath.split("/");
248
178
  amendementFilePath = _path["default"].join.apply(_path["default"], [amendementsDir].concat(_toConsumableArray(amendementUrlPathSplitted.slice(2)))) + ".json";
249
179
  _context.next = 22;
250
180
  return _fsExtra["default"].ensureDir(_path["default"].dirname(amendementFilePath));
251
-
252
181
  case 22:
253
182
  _context.next = 24;
254
183
  return _fsExtra["default"].pathExists(amendementFilePath);
255
-
256
184
  case 24:
257
185
  if (!_context.sent) {
258
186
  _context.next = 30;
259
187
  break;
260
188
  }
261
-
262
189
  _context.next = 27;
263
190
  return _fsExtra["default"].readJson(amendementFilePath);
264
-
265
191
  case 27:
266
192
  _context.t0 = _context.sent;
267
193
  _context.next = 31;
268
194
  break;
269
-
270
195
  case 30:
271
196
  _context.t0 = null;
272
-
273
197
  case 31:
274
198
  existingAmendement = _context.t0;
275
-
276
199
  if ((0, _deepEqual["default"])(amendement, existingAmendement)) {
277
200
  _context.next = 36;
278
201
  break;
279
202
  }
280
-
281
203
  if (!options.silent) {
282
204
  if (existingAmendement === null) {
283
205
  console.log("Adding amendement JSON: ".concat(amendementFilePath, "\u2026"));
@@ -285,65 +207,50 @@ function _main() {
285
207
  console.log("Updating amendement JSON: ".concat(amendementFilePath, "\u2026"));
286
208
  }
287
209
  }
288
-
289
210
  _context.next = 36;
290
211
  return _fsExtra["default"].writeJson(amendementFilePath, amendement, {
291
212
  spaces: 2
292
213
  });
293
-
294
214
  case 36:
295
215
  _iteratorAbruptCompletion = false;
296
216
  _context.next = 14;
297
217
  break;
298
-
299
218
  case 39:
300
219
  _context.next = 45;
301
220
  break;
302
-
303
221
  case 41:
304
222
  _context.prev = 41;
305
223
  _context.t1 = _context["catch"](12);
306
224
  _didIteratorError = true;
307
225
  _iteratorError = _context.t1;
308
-
309
226
  case 45:
310
227
  _context.prev = 45;
311
228
  _context.prev = 46;
312
-
313
229
  if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) {
314
230
  _context.next = 50;
315
231
  break;
316
232
  }
317
-
318
233
  _context.next = 50;
319
234
  return _iterator["return"]();
320
-
321
235
  case 50:
322
236
  _context.prev = 50;
323
-
324
237
  if (!_didIteratorError) {
325
238
  _context.next = 53;
326
239
  break;
327
240
  }
328
-
329
241
  throw _iteratorError;
330
-
331
242
  case 53:
332
243
  return _context.finish(50);
333
-
334
244
  case 54:
335
245
  return _context.finish(45);
336
-
337
246
  case 55:
338
247
  _i++;
339
248
  _context.next = 7;
340
249
  break;
341
-
342
250
  case 58:
343
251
  if (commitAndPush(amendementsDir, options, options.remote)) {
344
252
  process.exit(2);
345
253
  }
346
-
347
254
  case 59:
348
255
  case "end":
349
256
  return _context.stop();
@@ -353,9 +260,8 @@ function _main() {
353
260
  }));
354
261
  return _main.apply(this, arguments);
355
262
  }
356
-
357
263
  main()["catch"](function (error) {
358
264
  console.log(error);
359
265
  process.exit(1);
360
266
  });
361
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiZXJyb3IiLCJjb21taXQiLCJyZW1vdGUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwiY29uc29sZSIsIm91dHB1dCIsIm1haW4iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJkYXRhRGlyIiwiYW1lbmRlbWVudHNEaXIiLCJwYXRoIiwiam9pbiIsImZzIiwiZW5zdXJlRGlyIiwiY2FjaGVEaXIiLCJldGF0IiwidXJsIiwibGVnaXNsYXR1cmUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMiLCJpbmNyZW1lbnRhbCIsInNpbGVudCIsInZlcmJvc2UiLCJhbWVuZGVtZW50VXJsUGF0aCIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkIiwic3BsaXQiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJzbGljZSIsImRpcm5hbWUiLCJwYXRoRXhpc3RzIiwicmVhZEpzb24iLCJleGlzdGluZ0FtZW5kZW1lbnQiLCJkZWVwRXF1YWwiLCJsb2ciLCJ3cml0ZUpzb24iLCJzcGFjZXMiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfcGVuZGluZ19hbWVuZG1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwiZGVlcC1lcXVhbFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY29tbWl0IH0gZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMgfSBmcm9tIFwiLi4vcGFyc2Vyc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiaVwiLFxuICAgIGhlbHA6IFwiaW5jcmVtZW50YWwgbW9kZTogcmV0cmlldmUgb25seSBhbWVuZG1lbnRzIHdob3NlIHBvc2l0aW9uIGluIHNlYXJjaCBoYXMgY2hhbmdlZFwiLFxuICAgIG5hbWU6IFwiaW5jcmVtZW50YWxcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBjb21taXQocmVwb3NpdG9yeURpciwgXCJOb3V2ZWxsZSBtb2lzc29uXCIpXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS9BbWVuZGVtZW50c19lbl9hdHRlbnRlLmdpdGAsIHtcbiAgICAgIGN3ZDogb3B0aW9ucy5kYXRhRGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudHNEaXIgPSBwYXRoLmpvaW4ob3B0aW9ucy5kYXRhRGlyLCBcIkFtZW5kZW1lbnRzX2VuX2F0dGVudGVcIilcbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGFtZW5kZW1lbnRzRGlyKVxuICBjb25zdCBjYWNoZURpciA9IHBhdGguam9pbihvcHRpb25zLmRhdGFEaXIsIFwiQW1lbmRlbWVudHNfZW5fYXR0ZW50ZV9jYWNoZVwiKVxuICBmb3IgKGNvbnN0IGV0YXQgb2YgW1wiRW4gcmVjZXZhYmlsaXTDqVwiLCBcIkVuIHRyYWl0ZW1lbnRcIl0pIHtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9keW4vJHtcbiAgICAgIG9wdGlvbnMubGVnaXNsYXR1cmVcbiAgICB9L2FtZW5kZW1lbnRzP2V0YXQ9JHtlbmNvZGVVUklDb21wb25lbnQoZXRhdCl9YFxuICAgIGZvciBhd2FpdCAoY29uc3QgW1xuICAgICAgYW1lbmRlbWVudFVybFBhdGgsXG4gICAgICBhbWVuZGVtZW50LFxuICAgIF0gb2YgaXRlclJlY2hlcmNoZVJhd0FtZW5kZW1lbnRzKFxuICAgICAgY2FjaGVEaXIsXG4gICAgICB1cmwsXG4gICAgICBvcHRpb25zLmluY3JlbWVudGFsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICB7IHNpbGVudDogb3B0aW9ucy5zaWxlbnQsIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSB9LFxuICAgICkpIHtcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRVcmxQYXRoU3BsaXR0ZWQgPSBhbWVuZGVtZW50VXJsUGF0aCEuc3BsaXQoXCIvXCIpXG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPVxuICAgICAgICBwYXRoLmpvaW4oYW1lbmRlbWVudHNEaXIsIC4uLmFtZW5kZW1lbnRVcmxQYXRoU3BsaXR0ZWQuc2xpY2UoMikpICtcbiAgICAgICAgXCIuanNvblwiXG4gICAgICBhd2FpdCBmcy5lbnN1cmVEaXIocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRGaWxlUGF0aCkpXG4gICAgICBjb25zdCBleGlzdGluZ0FtZW5kZW1lbnQgPSAoYXdhaXQgZnMucGF0aEV4aXN0cyhhbWVuZGVtZW50RmlsZVBhdGgpKVxuICAgICAgICA/IGF3YWl0IGZzLnJlYWRKc29uKGFtZW5kZW1lbnRGaWxlUGF0aClcbiAgICAgICAgOiBudWxsXG4gICAgICBpZiAoIWRlZXBFcXVhbChhbWVuZGVtZW50LCBleGlzdGluZ0FtZW5kZW1lbnQpKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbWVuZGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQWRkaW5nIGFtZW5kZW1lbnQgSlNPTjogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFVwZGF0aW5nIGFtZW5kZW1lbnQgSlNPTjogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZnMud3JpdGVKc29uKGFtZW5kZW1lbnRGaWxlUGF0aCwgYW1lbmRlbWVudCwgeyBzcGFjZXM6IDIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY29tbWl0QW5kUHVzaChhbWVuZGVtZW50c0Rpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH1cbn1cblxubWFpbigpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmxvZyhlcnJvcilcbiAgcHJvY2Vzcy5leGl0KDEpXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7OzsrQ0FOQSxvSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsK0RBRlI7RUFHRUMsSUFBSSxFQUFFLE9BSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxvQkFGUjtFQUdFQyxJQUFJLEVBQUUsUUFIUjtFQUlFQyxJQUFJLEVBQUVFO0FBSlIsQ0FQeUIsRUFhekI7RUFDRUwsS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLGlGQUZSO0VBR0VDLElBQUksRUFBRSxhQUhSO0VBSUVD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
267
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsImRlZmF1bHRPcHRpb24iLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwiY29tbWl0QW5kUHVzaCIsInJlcG9zaXRvcnlEaXIiLCJyZW1vdGVzIiwiZXJyb3IiLCJjb21taXQiLCJyZW1vdGUiLCJleGVjU3luYyIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwiY29uc29sZSIsIm91dHB1dCIsIm1haW4iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJkYXRhRGlyIiwiYW1lbmRlbWVudHNEaXIiLCJwYXRoIiwiam9pbiIsImZzIiwiZW5zdXJlRGlyIiwiY2FjaGVEaXIiLCJldGF0IiwidXJsIiwibGVnaXNsYXR1cmUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMiLCJpbmNyZW1lbnRhbCIsInNpbGVudCIsInZlcmJvc2UiLCJhbWVuZGVtZW50VXJsUGF0aCIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkIiwic3BsaXQiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJzbGljZSIsImRpcm5hbWUiLCJwYXRoRXhpc3RzIiwicmVhZEpzb24iLCJleGlzdGluZ0FtZW5kZW1lbnQiLCJkZWVwRXF1YWwiLCJsb2ciLCJ3cml0ZUpzb24iLCJzcGFjZXMiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfcGVuZGluZ19hbWVuZG1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwiZGVlcC1lcXVhbFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY29tbWl0IH0gZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMgfSBmcm9tIFwiLi4vcGFyc2Vyc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcIkNcIixcbiAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICBuYW1lOiBcImNsb25lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgbmFtZTogXCJjb21taXRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiaVwiLFxuICAgIGhlbHA6IFwiaW5jcmVtZW50YWwgbW9kZTogcmV0cmlldmUgb25seSBhbWVuZG1lbnRzIHdob3NlIHBvc2l0aW9uIGluIHNlYXJjaCBoYXMgY2hhbmdlZFwiLFxuICAgIG5hbWU6IFwiaW5jcmVtZW50YWxcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwibFwiLFxuICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBjb21taXQocmVwb3NpdG9yeURpciwgXCJOb3V2ZWxsZSBtb2lzc29uXCIpXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2YgcmVtb3RlcyB8fCBbXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdXNoICR7cmVtb3RlfSBtYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiByZXBvc2l0b3J5RGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGNoaWxkUHJvY2Vzcykge1xuICAgICAgICAvLyBEb24ndCBzdG9wIHdoZW4gcHVzaCBmYWlscy5cbiAgICAgICAgY29uc29sZS5lcnJvcigoY2hpbGRQcm9jZXNzIGFzIGFueSkub3V0cHV0KVxuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVycm9yXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS9BbWVuZGVtZW50c19lbl9hdHRlbnRlLmdpdGAsIHtcbiAgICAgIGN3ZDogb3B0aW9ucy5kYXRhRGlyLFxuICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudHNEaXIgPSBwYXRoLmpvaW4ob3B0aW9ucy5kYXRhRGlyLCBcIkFtZW5kZW1lbnRzX2VuX2F0dGVudGVcIilcbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGFtZW5kZW1lbnRzRGlyKVxuICBjb25zdCBjYWNoZURpciA9IHBhdGguam9pbihvcHRpb25zLmRhdGFEaXIsIFwiQW1lbmRlbWVudHNfZW5fYXR0ZW50ZV9jYWNoZVwiKVxuICBmb3IgKGNvbnN0IGV0YXQgb2YgW1wiRW4gcmVjZXZhYmlsaXTDqVwiLCBcIkVuIHRyYWl0ZW1lbnRcIl0pIHtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9keW4vJHtcbiAgICAgIG9wdGlvbnMubGVnaXNsYXR1cmVcbiAgICB9L2FtZW5kZW1lbnRzP2V0YXQ9JHtlbmNvZGVVUklDb21wb25lbnQoZXRhdCl9YFxuICAgIGZvciBhd2FpdCAoY29uc3QgW1xuICAgICAgYW1lbmRlbWVudFVybFBhdGgsXG4gICAgICBhbWVuZGVtZW50LFxuICAgIF0gb2YgaXRlclJlY2hlcmNoZVJhd0FtZW5kZW1lbnRzKFxuICAgICAgY2FjaGVEaXIsXG4gICAgICB1cmwsXG4gICAgICBvcHRpb25zLmluY3JlbWVudGFsLFxuICAgICAgbnVsbCxcbiAgICAgIG51bGwsXG4gICAgICB7IHNpbGVudDogb3B0aW9ucy5zaWxlbnQsIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSB9LFxuICAgICkpIHtcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRVcmxQYXRoU3BsaXR0ZWQgPSBhbWVuZGVtZW50VXJsUGF0aCEuc3BsaXQoXCIvXCIpXG4gICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPVxuICAgICAgICBwYXRoLmpvaW4oYW1lbmRlbWVudHNEaXIsIC4uLmFtZW5kZW1lbnRVcmxQYXRoU3BsaXR0ZWQuc2xpY2UoMikpICtcbiAgICAgICAgXCIuanNvblwiXG4gICAgICBhd2FpdCBmcy5lbnN1cmVEaXIocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRGaWxlUGF0aCkpXG4gICAgICBjb25zdCBleGlzdGluZ0FtZW5kZW1lbnQgPSAoYXdhaXQgZnMucGF0aEV4aXN0cyhhbWVuZGVtZW50RmlsZVBhdGgpKVxuICAgICAgICA/IGF3YWl0IGZzLnJlYWRKc29uKGFtZW5kZW1lbnRGaWxlUGF0aClcbiAgICAgICAgOiBudWxsXG4gICAgICBpZiAoIWRlZXBFcXVhbChhbWVuZGVtZW50LCBleGlzdGluZ0FtZW5kZW1lbnQpKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbWVuZGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQWRkaW5nIGFtZW5kZW1lbnQgSlNPTjogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFVwZGF0aW5nIGFtZW5kZW1lbnQgSlNPTjogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgZnMud3JpdGVKc29uKGFtZW5kZW1lbnRGaWxlUGF0aCwgYW1lbmRlbWVudCwgeyBzcGFjZXM6IDIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY29tbWl0QW5kUHVzaChhbWVuZGVtZW50c0Rpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgcHJvY2Vzcy5leGl0KDIpXG4gIH1cbn1cblxubWFpbigpLmNhdGNoKChlcnJvcikgPT4ge1xuICBjb25zb2xlLmxvZyhlcnJvcilcbiAgcHJvY2Vzcy5leGl0KDEpXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFBd0Q7QUFBQSwrQ0FOeEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSxJQUFNQSxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsK0RBQStEO0VBQ3JFQyxJQUFJLEVBQUUsT0FBTztFQUNiQyxJQUFJLEVBQUVDO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSxvQkFBb0I7RUFDMUJDLElBQUksRUFBRSxRQUFRO0VBQ2RDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLGlGQUFpRjtFQUN2RkMsSUFB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
@@ -48,13 +48,10 @@ const optionsDefinitions = [{
48
48
  type: String
49
49
  }];
50
50
  const options = commandLineArgs(optionsDefinitions);
51
-
52
51
  function commitAndPush(repositoryDir, options, remotes) {
53
52
  let error = false;
54
-
55
53
  if (options.commit) {
56
54
  commit(repositoryDir, "Nouvelle moisson");
57
-
58
55
  for (const remote of remotes || []) {
59
56
  try {
60
57
  execSync(`git push ${remote} master`, {
@@ -70,13 +67,10 @@ function commitAndPush(repositoryDir, options, remotes) {
70
67
  }
71
68
  }
72
69
  }
73
-
74
70
  return error;
75
71
  }
76
-
77
72
  async function main() {
78
73
  const gitGroupUrl = options.clone ? options.clone.trim().replace(/\/+$/, "") : undefined;
79
-
80
74
  if (gitGroupUrl !== undefined) {
81
75
  execSync(`git clone ${gitGroupUrl}/Amendements_en_attente.git`, {
82
76
  cwd: options.dataDir,
@@ -85,14 +79,11 @@ async function main() {
85
79
  stdio: ["ignore", "ignore", "pipe"]
86
80
  });
87
81
  }
88
-
89
82
  const amendementsDir = path.join(options.dataDir, "Amendements_en_attente");
90
83
  await fs.ensureDir(amendementsDir);
91
84
  const cacheDir = path.join(options.dataDir, "Amendements_en_attente_cache");
92
-
93
85
  for (const etat of ["En recevabilité", "En traitement"]) {
94
86
  const url = `https://www.assemblee-nationale.fr/dyn/${options.legislature}/amendements?etat=${encodeURIComponent(etat)}`;
95
-
96
87
  for await (const [amendementUrlPath, amendement] of iterRechercheRawAmendements(cacheDir, url, options.incremental, null, null, {
97
88
  silent: options.silent,
98
89
  verbose: options.verbose
@@ -101,7 +92,6 @@ async function main() {
101
92
  const amendementFilePath = path.join(amendementsDir, ...amendementUrlPathSplitted.slice(2)) + ".json";
102
93
  await fs.ensureDir(path.dirname(amendementFilePath));
103
94
  const existingAmendement = (await fs.pathExists(amendementFilePath)) ? await fs.readJson(amendementFilePath) : null;
104
-
105
95
  if (!deepEqual(amendement, existingAmendement)) {
106
96
  if (!options.silent) {
107
97
  if (existingAmendement === null) {
@@ -110,21 +100,18 @@ async function main() {
110
100
  console.log(`Updating amendement JSON: ${amendementFilePath}…`);
111
101
  }
112
102
  }
113
-
114
103
  await fs.writeJson(amendementFilePath, amendement, {
115
104
  spaces: 2
116
105
  });
117
106
  }
118
107
  }
119
108
  }
120
-
121
109
  if (commitAndPush(amendementsDir, options, options.remote)) {
122
110
  process.exit(2);
123
111
  }
124
112
  }
125
-
126
113
  main().catch(error => {
127
114
  console.log(error);
128
115
  process.exit(1);
129
116
  });
130
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImRlZXBFcXVhbCIsImZzIiwicGF0aCIsImNvbW1pdCIsIml0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsInJlbW90ZXMiLCJlcnJvciIsInJlbW90ZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwiY29uc29sZSIsIm91dHB1dCIsIm1haW4iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJkYXRhRGlyIiwiYW1lbmRlbWVudHNEaXIiLCJqb2luIiwiZW5zdXJlRGlyIiwiY2FjaGVEaXIiLCJldGF0IiwidXJsIiwibGVnaXNsYXR1cmUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhbWVuZGVtZW50VXJsUGF0aCIsImFtZW5kZW1lbnQiLCJpbmNyZW1lbnRhbCIsInNpbGVudCIsInZlcmJvc2UiLCJhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkIiwic3BsaXQiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJzbGljZSIsImRpcm5hbWUiLCJleGlzdGluZ0FtZW5kZW1lbnQiLCJwYXRoRXhpc3RzIiwicmVhZEpzb24iLCJsb2ciLCJ3cml0ZUpzb24iLCJzcGFjZXMiLCJleGl0IiwiY2F0Y2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZXRyaWV2ZV9wZW5kaW5nX2FtZW5kbWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJkZWVwLWVxdWFsXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBjb21taXQgfSBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyB9IGZyb20gXCIuLi9wYXJzZXJzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJpXCIsXG4gICAgaGVscDogXCJpbmNyZW1lbnRhbCBtb2RlOiByZXRyaWV2ZSBvbmx5IGFtZW5kbWVudHMgd2hvc2UgcG9zaXRpb24gaW4gc2VhcmNoIGhhcyBjaGFuZ2VkXCIsXG4gICAgbmFtZTogXCJpbmNyZW1lbnRhbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgcmVtb3Rlcz86IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9L0FtZW5kZW1lbnRzX2VuX2F0dGVudGUuZ2l0YCwge1xuICAgICAgY3dkOiBvcHRpb25zLmRhdGFEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50c0RpciA9IHBhdGguam9pbihvcHRpb25zLmRhdGFEaXIsIFwiQW1lbmRlbWVudHNfZW5fYXR0ZW50ZVwiKVxuICBhd2FpdCBmcy5lbnN1cmVEaXIoYW1lbmRlbWVudHNEaXIpXG4gIGNvbnN0IGNhY2hlRGlyID0gcGF0aC5qb2luKG9wdGlvbnMuZGF0YURpciwgXCJBbWVuZGVtZW50c19lbl9hdHRlbnRlX2NhY2hlXCIpXG4gIGZvciAoY29uc3QgZXRhdCBvZiBbXCJFbiByZWNldmFiaWxpdMOpXCIsIFwiRW4gdHJhaXRlbWVudFwiXSkge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL2R5bi8ke1xuICAgICAgb3B0aW9ucy5sZWdpc2xhdHVyZVxuICAgIH0vYW1lbmRlbWVudHM/ZXRhdD0ke2VuY29kZVVSSUNvbXBvbmVudChldGF0KX1gXG4gICAgZm9yIGF3YWl0IChjb25zdCBbXG4gICAgICBhbWVuZGVtZW50VXJsUGF0aCxcbiAgICAgIGFtZW5kZW1lbnQsXG4gICAgXSBvZiBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMoXG4gICAgICBjYWNoZURpcixcbiAgICAgIHVybCxcbiAgICAgIG9wdGlvbnMuaW5jcmVtZW50YWwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIHsgc2lsZW50OiBvcHRpb25zLnNpbGVudCwgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlIH0sXG4gICAgKSkge1xuICAgICAgY29uc3QgYW1lbmRlbWVudFVybFBhdGhTcGxpdHRlZCA9IGFtZW5kZW1lbnRVcmxQYXRoIS5zcGxpdChcIi9cIilcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9XG4gICAgICAgIHBhdGguam9pbihhbWVuZGVtZW50c0RpciwgLi4uYW1lbmRlbWVudFVybFBhdGhTcGxpdHRlZC5zbGljZSgyKSkgK1xuICAgICAgICBcIi5qc29uXCJcbiAgICAgIGF3YWl0IGZzLmVuc3VyZURpcihwYXRoLmRpcm5hbWUoYW1lbmRlbWVudEZpbGVQYXRoKSlcbiAgICAgIGNvbnN0IGV4aXN0aW5nQW1lbmRlbWVudCA9IChhd2FpdCBmcy5wYXRoRXhpc3RzKGFtZW5kZW1lbnRGaWxlUGF0aCkpXG4gICAgICAgID8gYXdhaXQgZnMucmVhZEpzb24oYW1lbmRlbWVudEZpbGVQYXRoKVxuICAgICAgICA6IG51bGxcbiAgICAgIGlmICghZGVlcEVxdWFsKGFtZW5kZW1lbnQsIGV4aXN0aW5nQW1lbmRlbWVudCkpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGlmIChleGlzdGluZ0FtZW5kZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBZGRpbmcgYW1lbmRlbWVudCBKU09OOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVXBkYXRpbmcgYW1lbmRlbWVudCBKU09OOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmcy53cml0ZUpzb24oYW1lbmRlbWVudEZpbGVQYXRoLCBhbWVuZGVtZW50LCB7IHNwYWNlczogMiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjb21taXRBbmRQdXNoKGFtZW5kZW1lbnRzRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICBwcm9jZXNzLmV4aXQoMilcbiAgfVxufVxuXG5tYWluKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUubG9nKGVycm9yKVxuICBwcm9jZXNzLmV4aXQoMSlcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVQsUUFBeUIsZUFBekI7QUFDQSxPQUFPQyxlQUFQLE1BQTRCLG1CQUE1QjtBQUNBLE9BQU9DLFNBQVAsTUFBc0IsWUFBdEI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakI7U0FFU0MsTTtTQUNBQywyQjtBQUVULE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSwrREFGUjtFQUdFQyxJQUFJLEVBQUUsT0FIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FEeUIsRUFPekI7RUFDRUosS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLG9CQUZSO0VBR0VDLElBQUksRUFBRSxRQUhSO0VBSUVDLElBQUksRUFBRUU7QUFKUixDQVB5QixFQWF6QjtFQUNFTCxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsaUZBRlI7RUFHRUMs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
117
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImRlZXBFcXVhbCIsImZzIiwicGF0aCIsImNvbW1pdCIsIml0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21taXRBbmRQdXNoIiwicmVwb3NpdG9yeURpciIsInJlbW90ZXMiLCJlcnJvciIsInJlbW90ZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiY2hpbGRQcm9jZXNzIiwiY29uc29sZSIsIm91dHB1dCIsIm1haW4iLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJkYXRhRGlyIiwiYW1lbmRlbWVudHNEaXIiLCJqb2luIiwiZW5zdXJlRGlyIiwiY2FjaGVEaXIiLCJldGF0IiwidXJsIiwibGVnaXNsYXR1cmUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJhbWVuZGVtZW50VXJsUGF0aCIsImFtZW5kZW1lbnQiLCJpbmNyZW1lbnRhbCIsInNpbGVudCIsInZlcmJvc2UiLCJhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkIiwic3BsaXQiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJzbGljZSIsImRpcm5hbWUiLCJleGlzdGluZ0FtZW5kZW1lbnQiLCJwYXRoRXhpc3RzIiwicmVhZEpzb24iLCJsb2ciLCJ3cml0ZUpzb24iLCJzcGFjZXMiLCJleGl0IiwiY2F0Y2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZXRyaWV2ZV9wZW5kaW5nX2FtZW5kbWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJkZWVwLWVxdWFsXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBjb21taXQgfSBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyB9IGZyb20gXCIuLi9wYXJzZXJzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgY2xlYW4gZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJpXCIsXG4gICAgaGVscDogXCJpbmNyZW1lbnRhbCBtb2RlOiByZXRyaWV2ZSBvbmx5IGFtZW5kbWVudHMgd2hvc2UgcG9zaXRpb24gaW4gc2VhcmNoIGhhcyBjaGFuZ2VkXCIsXG4gICAgbmFtZTogXCJpbmNyZW1lbnRhbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgcmVtb3Rlcz86IHN0cmluZ1tdLFxuKTogYm9vbGVhbiB7XG4gIGxldCBlcnJvciA9IGZhbHNlXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIGNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9L0FtZW5kZW1lbnRzX2VuX2F0dGVudGUuZ2l0YCwge1xuICAgICAgY3dkOiBvcHRpb25zLmRhdGFEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50c0RpciA9IHBhdGguam9pbihvcHRpb25zLmRhdGFEaXIsIFwiQW1lbmRlbWVudHNfZW5fYXR0ZW50ZVwiKVxuICBhd2FpdCBmcy5lbnN1cmVEaXIoYW1lbmRlbWVudHNEaXIpXG4gIGNvbnN0IGNhY2hlRGlyID0gcGF0aC5qb2luKG9wdGlvbnMuZGF0YURpciwgXCJBbWVuZGVtZW50c19lbl9hdHRlbnRlX2NhY2hlXCIpXG4gIGZvciAoY29uc3QgZXRhdCBvZiBbXCJFbiByZWNldmFiaWxpdMOpXCIsIFwiRW4gdHJhaXRlbWVudFwiXSkge1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL2R5bi8ke1xuICAgICAgb3B0aW9ucy5sZWdpc2xhdHVyZVxuICAgIH0vYW1lbmRlbWVudHM/ZXRhdD0ke2VuY29kZVVSSUNvbXBvbmVudChldGF0KX1gXG4gICAgZm9yIGF3YWl0IChjb25zdCBbXG4gICAgICBhbWVuZGVtZW50VXJsUGF0aCxcbiAgICAgIGFtZW5kZW1lbnQsXG4gICAgXSBvZiBpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMoXG4gICAgICBjYWNoZURpcixcbiAgICAgIHVybCxcbiAgICAgIG9wdGlvbnMuaW5jcmVtZW50YWwsXG4gICAgICBudWxsLFxuICAgICAgbnVsbCxcbiAgICAgIHsgc2lsZW50OiBvcHRpb25zLnNpbGVudCwgdmVyYm9zZTogb3B0aW9ucy52ZXJib3NlIH0sXG4gICAgKSkge1xuICAgICAgY29uc3QgYW1lbmRlbWVudFVybFBhdGhTcGxpdHRlZCA9IGFtZW5kZW1lbnRVcmxQYXRoIS5zcGxpdChcIi9cIilcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9XG4gICAgICAgIHBhdGguam9pbihhbWVuZGVtZW50c0RpciwgLi4uYW1lbmRlbWVudFVybFBhdGhTcGxpdHRlZC5zbGljZSgyKSkgK1xuICAgICAgICBcIi5qc29uXCJcbiAgICAgIGF3YWl0IGZzLmVuc3VyZURpcihwYXRoLmRpcm5hbWUoYW1lbmRlbWVudEZpbGVQYXRoKSlcbiAgICAgIGNvbnN0IGV4aXN0aW5nQW1lbmRlbWVudCA9IChhd2FpdCBmcy5wYXRoRXhpc3RzKGFtZW5kZW1lbnRGaWxlUGF0aCkpXG4gICAgICAgID8gYXdhaXQgZnMucmVhZEpzb24oYW1lbmRlbWVudEZpbGVQYXRoKVxuICAgICAgICA6IG51bGxcbiAgICAgIGlmICghZGVlcEVxdWFsKGFtZW5kZW1lbnQsIGV4aXN0aW5nQW1lbmRlbWVudCkpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGlmIChleGlzdGluZ0FtZW5kZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBZGRpbmcgYW1lbmRlbWVudCBKU09OOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVXBkYXRpbmcgYW1lbmRlbWVudCBKU09OOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmcy53cml0ZUpzb24oYW1lbmRlbWVudEZpbGVQYXRoLCBhbWVuZGVtZW50LCB7IHNwYWNlczogMiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjb21taXRBbmRQdXNoKGFtZW5kZW1lbnRzRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICBwcm9jZXNzLmV4aXQoMilcbiAgfVxufVxuXG5tYWluKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUubG9nKGVycm9yKVxuICBwcm9jZXNzLmV4aXQoMSlcbn0pXG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsUUFBUSxlQUFlO0FBQ3hDLE9BQU9DLGVBQWUsTUFBTSxtQkFBbUI7QUFDL0MsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUVkQyxNQUFNO0FBQUEsU0FDTkMsMkJBQTJCO0FBRXBDLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQkMsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFTCxLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVB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