@tricoteuses/assemblee 1.0.7 → 1.1.1
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.
- package/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.js +6 -96
- package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -1,135 +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.function.name.js");
|
|
6
|
-
|
|
7
5
|
require("core-js/modules/es.array.from.js");
|
|
8
|
-
|
|
9
6
|
require("core-js/modules/es.string.iterator.js");
|
|
10
|
-
|
|
11
7
|
require("core-js/modules/es.symbol.js");
|
|
12
|
-
|
|
13
8
|
require("core-js/modules/es.symbol.description.js");
|
|
14
|
-
|
|
15
9
|
require("core-js/modules/es.symbol.iterator.js");
|
|
16
|
-
|
|
17
10
|
require("core-js/modules/es.array.iterator.js");
|
|
18
|
-
|
|
19
11
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
20
|
-
|
|
21
12
|
require("core-js/modules/es.array.is-array.js");
|
|
22
|
-
|
|
23
13
|
require("core-js/modules/es.promise.js");
|
|
24
|
-
|
|
25
14
|
require("core-js/modules/es.symbol.async-iterator.js");
|
|
26
|
-
|
|
27
15
|
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
28
|
-
|
|
29
16
|
require("core-js/modules/es.json.to-string-tag.js");
|
|
30
|
-
|
|
31
17
|
require("core-js/modules/es.math.to-string-tag.js");
|
|
32
|
-
|
|
33
18
|
require("core-js/modules/es.object.create.js");
|
|
34
|
-
|
|
35
19
|
require("core-js/modules/es.object.get-prototype-of.js");
|
|
36
|
-
|
|
37
20
|
require("core-js/modules/es.array.for-each.js");
|
|
38
|
-
|
|
39
21
|
require("core-js/modules/web.dom-collections.for-each.js");
|
|
40
|
-
|
|
41
22
|
require("core-js/modules/es.object.set-prototype-of.js");
|
|
42
|
-
|
|
43
23
|
require("core-js/modules/es.array.reverse.js");
|
|
44
|
-
|
|
45
24
|
require("core-js/modules/es.weak-map.js");
|
|
46
|
-
|
|
47
25
|
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
48
|
-
|
|
49
26
|
require("core-js/modules/es.array.concat.js");
|
|
50
|
-
|
|
51
27
|
require("core-js/modules/es.array.map.js");
|
|
52
|
-
|
|
53
28
|
require("core-js/modules/es.date.to-string.js");
|
|
54
|
-
|
|
55
29
|
require("core-js/modules/es.object.to-string.js");
|
|
56
|
-
|
|
57
30
|
require("core-js/modules/es.regexp.to-string.js");
|
|
58
|
-
|
|
59
31
|
require("core-js/modules/es.array.slice.js");
|
|
60
|
-
|
|
61
32
|
require("core-js/modules/es.array.join.js");
|
|
62
|
-
|
|
63
33
|
require("core-js/modules/es.regexp.exec.js");
|
|
64
|
-
|
|
65
34
|
require("core-js/modules/es.string.starts-with.js");
|
|
66
|
-
|
|
67
35
|
require("core-js/modules/es.array.includes.js");
|
|
68
|
-
|
|
69
36
|
require("core-js/modules/es.string.includes.js");
|
|
70
|
-
|
|
71
37
|
require("core-js/modules/es.string.ends-with.js");
|
|
72
|
-
|
|
73
38
|
require("core-js/modules/es.object.define-property.js");
|
|
74
|
-
|
|
75
39
|
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
|
|
76
|
-
|
|
77
40
|
var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
|
|
78
|
-
|
|
79
41
|
var git = _interopRequireWildcard(require("../../src/git"));
|
|
80
|
-
|
|
81
42
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
82
|
-
|
|
83
43
|
var _path = _interopRequireDefault(require("path"));
|
|
84
|
-
|
|
85
44
|
var _file_systems = require("../file_systems");
|
|
86
|
-
|
|
87
45
|
var _urls = require("../urls");
|
|
88
|
-
|
|
89
46
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
90
|
-
|
|
91
47
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
92
|
-
|
|
93
48
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
94
|
-
|
|
95
49
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
96
|
-
|
|
97
50
|
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."); }
|
|
98
|
-
|
|
99
51
|
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; }
|
|
100
|
-
|
|
101
52
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
102
|
-
|
|
103
|
-
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; }
|
|
104
|
-
|
|
53
|
+
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; }
|
|
105
54
|
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); } }
|
|
106
|
-
|
|
107
55
|
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); }); }; }
|
|
108
|
-
|
|
109
56
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
110
|
-
|
|
111
57
|
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."); }
|
|
112
|
-
|
|
113
58
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
114
|
-
|
|
115
59
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
116
|
-
|
|
117
60
|
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; } } }; }
|
|
118
|
-
|
|
119
61
|
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); }
|
|
120
|
-
|
|
121
62
|
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; }
|
|
122
|
-
|
|
123
63
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
124
|
-
|
|
125
64
|
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); } }
|
|
126
|
-
|
|
127
65
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
128
|
-
|
|
129
66
|
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; }
|
|
130
|
-
|
|
131
67
|
var fetch = require("node-fetch");
|
|
132
|
-
|
|
133
68
|
function parseArgs(argv) {
|
|
134
69
|
var optionsDefinitions = [{
|
|
135
70
|
alias: "c",
|
|
@@ -189,34 +124,26 @@ function parseArgs(argv) {
|
|
|
189
124
|
var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
|
|
190
125
|
argv: argv
|
|
191
126
|
});
|
|
192
|
-
|
|
193
127
|
if ("help" in options) {
|
|
194
128
|
var usage = (0, _commandLineUsage["default"])(sections);
|
|
195
129
|
console.warn(usage);
|
|
196
130
|
return null;
|
|
197
131
|
}
|
|
198
|
-
|
|
199
132
|
return options;
|
|
200
133
|
}
|
|
201
|
-
|
|
202
134
|
var Retrieve = /*#__PURE__*/function () {
|
|
203
135
|
function Retrieve(options) {
|
|
204
136
|
_classCallCheck(this, Retrieve);
|
|
205
|
-
|
|
206
137
|
_defineProperty(this, "options", void 0);
|
|
207
|
-
|
|
208
138
|
this.options = options;
|
|
209
139
|
}
|
|
210
|
-
|
|
211
140
|
_createClass(Retrieve, [{
|
|
212
141
|
key: "getDivisions",
|
|
213
142
|
value: function getDivisions(division) {
|
|
214
143
|
var divisions = [division];
|
|
215
|
-
|
|
216
144
|
if (division.divisions != undefined) {
|
|
217
145
|
var _iterator = _createForOfIteratorHelper(division.divisions),
|
|
218
|
-
|
|
219
|
-
|
|
146
|
+
_step;
|
|
220
147
|
try {
|
|
221
148
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
222
149
|
var d = _step.value;
|
|
@@ -228,15 +155,13 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
228
155
|
_iterator.f();
|
|
229
156
|
}
|
|
230
157
|
}
|
|
231
|
-
|
|
232
158
|
return divisions;
|
|
233
159
|
}
|
|
234
160
|
}, {
|
|
235
161
|
key: "getDivisionsOrDocument",
|
|
236
162
|
value: function getDivisionsOrDocument(document) {
|
|
237
163
|
var _ref,
|
|
238
|
-
|
|
239
|
-
|
|
164
|
+
_this = this;
|
|
240
165
|
if (document.divisions != undefined) return (_ref = []).concat.apply(_ref, _toConsumableArray(document.divisions.map(function (d) {
|
|
241
166
|
return _this.getDivisions(d);
|
|
242
167
|
})));else return [document];
|
|
@@ -253,22 +178,16 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
253
178
|
_context.next = 2;
|
|
254
179
|
break;
|
|
255
180
|
}
|
|
256
|
-
|
|
257
181
|
return _context.abrupt("return");
|
|
258
|
-
|
|
259
182
|
case 2:
|
|
260
183
|
git.commit(repositoryDir, "Nouvelle moisson");
|
|
261
|
-
|
|
262
184
|
if (!(this.options.remote == undefined)) {
|
|
263
185
|
_context.next = 5;
|
|
264
186
|
break;
|
|
265
187
|
}
|
|
266
|
-
|
|
267
188
|
return _context.abrupt("return");
|
|
268
|
-
|
|
269
189
|
case 5:
|
|
270
190
|
git.run(repositoryDir, "push ".concat(this.options.remote, " HEAD:master"));
|
|
271
|
-
|
|
272
191
|
case 6:
|
|
273
192
|
case "end":
|
|
274
193
|
return _context.stop();
|
|
@@ -276,11 +195,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
276
195
|
}
|
|
277
196
|
}, _callee, this);
|
|
278
197
|
}));
|
|
279
|
-
|
|
280
198
|
function commitAndPush(_x) {
|
|
281
199
|
return _commitAndPush.apply(this, arguments);
|
|
282
200
|
}
|
|
283
|
-
|
|
284
201
|
return commitAndPush;
|
|
285
202
|
}()
|
|
286
203
|
}, {
|
|
@@ -288,14 +205,12 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
288
205
|
value: function getUrls(divisionOrDocument, format) {
|
|
289
206
|
var ext = format == "html" ? "raw" : "pdf";
|
|
290
207
|
var urls = ["http://www.assemblee-nationale.fr/dyn/docs/".concat(divisionOrDocument.uid, ".").concat(ext)];
|
|
291
|
-
|
|
292
208
|
if (format == "html") {
|
|
293
209
|
urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.RawHtml));
|
|
294
210
|
urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.Html));
|
|
295
211
|
} else if (format == "pdf") {
|
|
296
212
|
urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.Pdf));
|
|
297
213
|
}
|
|
298
|
-
|
|
299
214
|
return urls;
|
|
300
215
|
}
|
|
301
216
|
}, {
|
|
@@ -311,15 +226,12 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
311
226
|
_context2.next = 6;
|
|
312
227
|
break;
|
|
313
228
|
}
|
|
314
|
-
|
|
315
229
|
isNotEmpty = _fsExtra["default"].statSync(filePath).size > 0;
|
|
316
230
|
retryFailed = "retry-failed" in this.options;
|
|
317
|
-
|
|
318
231
|
if (!(!retryFailed || isNotEmpty)) {
|
|
319
232
|
_context2.next = 6;
|
|
320
233
|
break;
|
|
321
234
|
}
|
|
322
|
-
|
|
323
235
|
if (this.options.verbose) {
|
|
324
236
|
if (isNotEmpty) {
|
|
325
237
|
urlPath = "".concat(filePath, ".url");
|
|
@@ -329,12 +241,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
329
241
|
console.log("".concat(uid, ": Cached FAIL ").concat(filePath));
|
|
330
242
|
}
|
|
331
243
|
}
|
|
332
|
-
|
|
333
244
|
return _context2.abrupt("return", false);
|
|
334
|
-
|
|
335
245
|
case 6:
|
|
336
246
|
return _context2.abrupt("return", true);
|
|
337
|
-
|
|
338
247
|
case 7:
|
|
339
248
|
case "end":
|
|
340
249
|
return _context2.stop();
|
|
@@ -342,11 +251,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
342
251
|
}
|
|
343
252
|
}, _callee2, this);
|
|
344
253
|
}));
|
|
345
|
-
|
|
346
254
|
function needsDownload(_x2, _x3) {
|
|
347
255
|
return _needsDownload.apply(this, arguments);
|
|
348
256
|
}
|
|
349
|
-
|
|
350
257
|
return needsDownload;
|
|
351
258
|
}()
|
|
352
259
|
}, {
|
|
@@ -354,7 +261,6 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
354
261
|
value: function () {
|
|
355
262
|
var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(url, filePath, format, uid) {
|
|
356
263
|
var response, page, status, _Retrieve$sanityCheck, _Retrieve$sanityCheck2;
|
|
357
|
-
|
|
358
264
|
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
359
265
|
while (1) {
|
|
360
266
|
switch (_context3.prev = _context3.next) {
|
|
@@ -362,18 +268,14 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
362
268
|
if (this.options.verbose) console.log("".concat(uid, ": fetch(").concat(url, ")"));
|
|
363
269
|
_context3.next = 3;
|
|
364
270
|
return fetch(url);
|
|
365
|
-
|
|
366
271
|
case 3:
|
|
367
272
|
response = _context3.sent;
|
|
368
273
|
_context3.next = 6;
|
|
369
274
|
return response.buffer();
|
|
370
|
-
|
|
371
275
|
case 6:
|
|
372
276
|
page = _context3.sent;
|
|
373
|
-
|
|
374
277
|
if (!response.ok) {
|
|
375
278
|
status = response.status;
|
|
376
|
-
|
|
377
279
|
if (response.status !== 404) {
|
|
378
280
|
if (this.options.verbose) {
|
|
379
281
|
console.error("Error while getting page \"".concat(url, "\" (uid: ").concat(uid, "):\n\nError:\n").concat(JSON.stringify({
|
|
@@ -382,7 +284,6 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
382
284
|
}, null, 2)));
|
|
383
285
|
}
|
|
384
286
|
}
|
|
385
|
-
|
|
386
287
|
_fsExtra["default"].writeFileSync(filePath, "");
|
|
387
288
|
} else {
|
|
388
289
|
;
|
|
@@ -390,12 +291,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
390
291
|
_Retrieve$sanityCheck2 = _slicedToArray(_Retrieve$sanityCheck, 2);
|
|
391
292
|
page = _Retrieve$sanityCheck2[0];
|
|
392
293
|
status = _Retrieve$sanityCheck2[1];
|
|
393
|
-
|
|
394
294
|
_fsExtra["default"].writeFileSync(filePath, page);
|
|
395
295
|
}
|
|
396
|
-
|
|
397
296
|
return _context3.abrupt("return", status);
|
|
398
|
-
|
|
399
297
|
case 9:
|
|
400
298
|
case "end":
|
|
401
299
|
return _context3.stop();
|
|
@@ -403,11 +301,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
403
301
|
}
|
|
404
302
|
}, _callee3, this);
|
|
405
303
|
}));
|
|
406
|
-
|
|
407
304
|
function get(_x4, _x5, _x6, _x7) {
|
|
408
305
|
return _get.apply(this, arguments);
|
|
409
306
|
}
|
|
410
|
-
|
|
411
307
|
return get;
|
|
412
308
|
}()
|
|
413
309
|
}, {
|
|
@@ -415,7 +311,6 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
415
311
|
value: function () {
|
|
416
312
|
var _download = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(textesDir, divisionOrDocument, format) {
|
|
417
313
|
var uid, filePath, success, info, url, _iterator2, _step2, status, urlPath;
|
|
418
|
-
|
|
419
314
|
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
420
315
|
while (1) {
|
|
421
316
|
switch (_context4.prev = _context4.next) {
|
|
@@ -424,100 +319,74 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
424
319
|
filePath = "".concat(textesDir, "/uid/").concat(uid, ".").concat(format);
|
|
425
320
|
_context4.next = 4;
|
|
426
321
|
return this.needsDownload(filePath, uid);
|
|
427
|
-
|
|
428
322
|
case 4:
|
|
429
323
|
if (_context4.sent) {
|
|
430
324
|
_context4.next = 6;
|
|
431
325
|
break;
|
|
432
326
|
}
|
|
433
|
-
|
|
434
327
|
return _context4.abrupt("return", 0);
|
|
435
|
-
|
|
436
328
|
case 6:
|
|
437
329
|
if (this.options.verbose) console.log("".concat(uid, ": Checking ").concat(filePath));
|
|
438
330
|
success = false;
|
|
439
331
|
info = "";
|
|
440
332
|
_iterator2 = _createForOfIteratorHelper(this.getUrls(divisionOrDocument, format));
|
|
441
333
|
_context4.prev = 10;
|
|
442
|
-
|
|
443
334
|
_iterator2.s();
|
|
444
|
-
|
|
445
335
|
case 12:
|
|
446
336
|
if ((_step2 = _iterator2.n()).done) {
|
|
447
337
|
_context4.next = 29;
|
|
448
338
|
break;
|
|
449
339
|
}
|
|
450
|
-
|
|
451
340
|
url = _step2.value;
|
|
452
|
-
|
|
453
341
|
if (!("dry-run" in this.options)) {
|
|
454
342
|
_context4.next = 19;
|
|
455
343
|
break;
|
|
456
344
|
}
|
|
457
|
-
|
|
458
345
|
info += " * ".concat(url, "\n");
|
|
459
346
|
return _context4.abrupt("continue", 27);
|
|
460
|
-
|
|
461
347
|
case 19:
|
|
462
348
|
info += " * ".concat(url, " ");
|
|
463
|
-
|
|
464
349
|
case 20:
|
|
465
350
|
_context4.next = 22;
|
|
466
351
|
return this.get(url, filePath, format, uid);
|
|
467
|
-
|
|
468
352
|
case 22:
|
|
469
353
|
status = _context4.sent;
|
|
470
354
|
info += "".concat(status, "\n");
|
|
471
|
-
|
|
472
355
|
if (!(status == "OK")) {
|
|
473
356
|
_context4.next = 27;
|
|
474
357
|
break;
|
|
475
358
|
}
|
|
476
|
-
|
|
477
359
|
success = true;
|
|
478
360
|
return _context4.abrupt("break", 29);
|
|
479
|
-
|
|
480
361
|
case 27:
|
|
481
362
|
_context4.next = 12;
|
|
482
363
|
break;
|
|
483
|
-
|
|
484
364
|
case 29:
|
|
485
365
|
_context4.next = 34;
|
|
486
366
|
break;
|
|
487
|
-
|
|
488
367
|
case 31:
|
|
489
368
|
_context4.prev = 31;
|
|
490
369
|
_context4.t0 = _context4["catch"](10);
|
|
491
|
-
|
|
492
370
|
_iterator2.e(_context4.t0);
|
|
493
|
-
|
|
494
371
|
case 34:
|
|
495
372
|
_context4.prev = 34;
|
|
496
|
-
|
|
497
373
|
_iterator2.f();
|
|
498
|
-
|
|
499
374
|
return _context4.finish(34);
|
|
500
|
-
|
|
501
375
|
case 37:
|
|
502
376
|
urlPath = "".concat(filePath, ".url");
|
|
503
|
-
|
|
504
377
|
if (success) {
|
|
505
378
|
_fsExtra["default"].writeFileSync(urlPath, url);
|
|
506
379
|
} else if (_fsExtra["default"].existsSync(urlPath)) {
|
|
507
380
|
_fsExtra["default"].unlinkSync(urlPath);
|
|
508
381
|
}
|
|
509
|
-
|
|
510
382
|
if (!(info != "" && !this.options.silent)) {
|
|
511
383
|
_context4.next = 44;
|
|
512
384
|
break;
|
|
513
385
|
}
|
|
514
|
-
|
|
515
386
|
console.log("* ".concat(Retrieve.urlFromUid(uid), ": Retrieving ").concat(filePath, "\n").concat(info.slice(0, -1)));
|
|
516
387
|
return _context4.abrupt("return", 1);
|
|
517
|
-
|
|
518
388
|
case 44:
|
|
519
389
|
return _context4.abrupt("return", 0);
|
|
520
|
-
|
|
521
390
|
case 45:
|
|
522
391
|
case "end":
|
|
523
392
|
return _context4.stop();
|
|
@@ -525,11 +394,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
525
394
|
}
|
|
526
395
|
}, _callee4, this, [[10, 31, 34, 37]]);
|
|
527
396
|
}));
|
|
528
|
-
|
|
529
397
|
function download(_x8, _x9, _x10) {
|
|
530
398
|
return _download.apply(this, arguments);
|
|
531
399
|
}
|
|
532
|
-
|
|
533
400
|
return download;
|
|
534
401
|
}()
|
|
535
402
|
}, {
|
|
@@ -537,148 +404,107 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
537
404
|
value: function () {
|
|
538
405
|
var _retrieveDocuments = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
539
406
|
var gitDir, textesDir, _iterator3, _step3, filename, document, _iterator4, _step4, divisionOrDocument, status, _i2, _arr2, format;
|
|
540
|
-
|
|
541
407
|
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
542
408
|
while (1) {
|
|
543
409
|
switch (_context5.prev = _context5.next) {
|
|
544
410
|
case 0:
|
|
545
411
|
gitDir = "".concat(this.options.textes, "/.git");
|
|
546
|
-
|
|
547
412
|
if (_fsExtra["default"].existsSync(gitDir)) {
|
|
548
413
|
_context5.next = 4;
|
|
549
414
|
break;
|
|
550
415
|
}
|
|
551
|
-
|
|
552
416
|
console.error("".concat(gitDir, " is expected to exist but does not"));
|
|
553
417
|
return _context5.abrupt("return", 1);
|
|
554
|
-
|
|
555
418
|
case 4:
|
|
556
419
|
textesDir = _path["default"].join(this.options.textes, this.options.legislature);
|
|
557
|
-
|
|
558
420
|
_fsExtra["default"].ensureDirSync("".concat(textesDir, "/uid"));
|
|
559
|
-
|
|
560
421
|
_iterator3 = _createForOfIteratorHelper((0, _file_systems.getFiles)(this.options.data));
|
|
561
422
|
_context5.prev = 7;
|
|
562
|
-
|
|
563
423
|
_iterator3.s();
|
|
564
|
-
|
|
565
424
|
case 9:
|
|
566
425
|
if ((_step3 = _iterator3.n()).done) {
|
|
567
426
|
_context5.next = 45;
|
|
568
427
|
break;
|
|
569
428
|
}
|
|
570
|
-
|
|
571
429
|
filename = _step3.value;
|
|
572
430
|
document = (0, _file_systems.load)(filename);
|
|
573
|
-
|
|
574
431
|
if (!(/^....SN/.test(document.uid) || /^DECL/.test(document.uid))) {
|
|
575
432
|
_context5.next = 14;
|
|
576
433
|
break;
|
|
577
434
|
}
|
|
578
|
-
|
|
579
435
|
return _context5.abrupt("continue", 43);
|
|
580
|
-
|
|
581
436
|
case 14:
|
|
582
437
|
_iterator4 = _createForOfIteratorHelper(this.getDivisionsOrDocument(document));
|
|
583
438
|
_context5.prev = 15;
|
|
584
|
-
|
|
585
439
|
_iterator4.s();
|
|
586
|
-
|
|
587
440
|
case 17:
|
|
588
441
|
if ((_step4 = _iterator4.n()).done) {
|
|
589
442
|
_context5.next = 35;
|
|
590
443
|
break;
|
|
591
444
|
}
|
|
592
|
-
|
|
593
445
|
divisionOrDocument = _step4.value;
|
|
594
|
-
|
|
595
446
|
if (!/-COMPA$/.test(divisionOrDocument.uid)) {
|
|
596
447
|
_context5.next = 21;
|
|
597
448
|
break;
|
|
598
449
|
}
|
|
599
|
-
|
|
600
450
|
return _context5.abrupt("continue", 33);
|
|
601
|
-
|
|
602
451
|
case 21:
|
|
603
452
|
status = 0;
|
|
604
453
|
_i2 = 0, _arr2 = ["html", "pdf"];
|
|
605
|
-
|
|
606
454
|
case 23:
|
|
607
455
|
if (!(_i2 < _arr2.length)) {
|
|
608
456
|
_context5.next = 32;
|
|
609
457
|
break;
|
|
610
458
|
}
|
|
611
|
-
|
|
612
459
|
format = _arr2[_i2];
|
|
613
460
|
_context5.t0 = status;
|
|
614
461
|
_context5.next = 28;
|
|
615
462
|
return this.download(textesDir, divisionOrDocument, format);
|
|
616
|
-
|
|
617
463
|
case 28:
|
|
618
464
|
status = _context5.t0 |= _context5.sent;
|
|
619
|
-
|
|
620
465
|
case 29:
|
|
621
466
|
_i2++;
|
|
622
467
|
_context5.next = 23;
|
|
623
468
|
break;
|
|
624
|
-
|
|
625
469
|
case 32:
|
|
626
470
|
if (status && !this.options.silent) console.log("---");
|
|
627
|
-
|
|
628
471
|
case 33:
|
|
629
472
|
_context5.next = 17;
|
|
630
473
|
break;
|
|
631
|
-
|
|
632
474
|
case 35:
|
|
633
475
|
_context5.next = 40;
|
|
634
476
|
break;
|
|
635
|
-
|
|
636
477
|
case 37:
|
|
637
478
|
_context5.prev = 37;
|
|
638
479
|
_context5.t1 = _context5["catch"](15);
|
|
639
|
-
|
|
640
480
|
_iterator4.e(_context5.t1);
|
|
641
|
-
|
|
642
481
|
case 40:
|
|
643
482
|
_context5.prev = 40;
|
|
644
|
-
|
|
645
483
|
_iterator4.f();
|
|
646
|
-
|
|
647
484
|
return _context5.finish(40);
|
|
648
|
-
|
|
649
485
|
case 43:
|
|
650
486
|
_context5.next = 9;
|
|
651
487
|
break;
|
|
652
|
-
|
|
653
488
|
case 45:
|
|
654
489
|
_context5.next = 50;
|
|
655
490
|
break;
|
|
656
|
-
|
|
657
491
|
case 47:
|
|
658
492
|
_context5.prev = 47;
|
|
659
493
|
_context5.t2 = _context5["catch"](7);
|
|
660
|
-
|
|
661
494
|
_iterator3.e(_context5.t2);
|
|
662
|
-
|
|
663
495
|
case 50:
|
|
664
496
|
_context5.prev = 50;
|
|
665
|
-
|
|
666
497
|
_iterator3.f();
|
|
667
|
-
|
|
668
498
|
return _context5.finish(50);
|
|
669
|
-
|
|
670
499
|
case 53:
|
|
671
500
|
if ("dry-run" in this.options) {
|
|
672
501
|
_context5.next = 56;
|
|
673
502
|
break;
|
|
674
503
|
}
|
|
675
|
-
|
|
676
504
|
_context5.next = 56;
|
|
677
505
|
return this.commitAndPush(textesDir);
|
|
678
|
-
|
|
679
506
|
case 56:
|
|
680
507
|
return _context5.abrupt("return", 0);
|
|
681
|
-
|
|
682
508
|
case 57:
|
|
683
509
|
case "end":
|
|
684
510
|
return _context5.stop();
|
|
@@ -686,11 +512,9 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
686
512
|
}
|
|
687
513
|
}, _callee5, this, [[7, 47, 50, 53], [15, 37, 40, 43]]);
|
|
688
514
|
}));
|
|
689
|
-
|
|
690
515
|
function retrieveDocuments() {
|
|
691
516
|
return _retrieveDocuments.apply(this, arguments);
|
|
692
517
|
}
|
|
693
|
-
|
|
694
518
|
return retrieveDocuments;
|
|
695
519
|
}()
|
|
696
520
|
}], [{
|
|
@@ -702,14 +526,11 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
702
526
|
if (!head.startsWith("%PDF")) return [Buffer.from(""), "bad pdf ".concat(encodeURIComponent(head), "...")];
|
|
703
527
|
} else if (format == "html") {
|
|
704
528
|
var _length = Math.min(page.length, 50);
|
|
705
|
-
|
|
706
529
|
var _head = page.slice(0, _length).toString();
|
|
707
|
-
|
|
708
530
|
if (!_head.includes("DOCTYPE") && !_head.includes("<?xml")) {
|
|
709
531
|
return [Buffer.from(""), "bad html ".concat(encodeURIComponent(_head.slice(0, 4)), "...")];
|
|
710
532
|
}
|
|
711
533
|
}
|
|
712
|
-
|
|
713
534
|
return [page, "OK"];
|
|
714
535
|
}
|
|
715
536
|
}, {
|
|
@@ -719,16 +540,12 @@ var Retrieve = /*#__PURE__*/function () {
|
|
|
719
540
|
return "[".concat(uid, "](").concat(url, "/uid/").concat(uid, ".json)");
|
|
720
541
|
}
|
|
721
542
|
}]);
|
|
722
|
-
|
|
723
543
|
return Retrieve;
|
|
724
544
|
}();
|
|
725
|
-
|
|
726
545
|
function main(_x11) {
|
|
727
546
|
return _main.apply(this, arguments);
|
|
728
547
|
}
|
|
729
548
|
/* istanbul ignore if */
|
|
730
|
-
|
|
731
|
-
|
|
732
549
|
function _main() {
|
|
733
550
|
_main = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(argv) {
|
|
734
551
|
var options, retrieve;
|
|
@@ -737,18 +554,14 @@ function _main() {
|
|
|
737
554
|
switch (_context6.prev = _context6.next) {
|
|
738
555
|
case 0:
|
|
739
556
|
options = parseArgs(argv);
|
|
740
|
-
|
|
741
557
|
if (!(options === null)) {
|
|
742
558
|
_context6.next = 3;
|
|
743
559
|
break;
|
|
744
560
|
}
|
|
745
|
-
|
|
746
561
|
return _context6.abrupt("return", 1);
|
|
747
|
-
|
|
748
562
|
case 3:
|
|
749
563
|
retrieve = new Retrieve(options);
|
|
750
564
|
return _context6.abrupt("return", retrieve.retrieveDocuments());
|
|
751
|
-
|
|
752
565
|
case 5:
|
|
753
566
|
case "end":
|
|
754
567
|
return _context6.stop();
|
|
@@ -758,11 +571,10 @@ function _main() {
|
|
|
758
571
|
}));
|
|
759
572
|
return _main.apply(this, arguments);
|
|
760
573
|
}
|
|
761
|
-
|
|
762
574
|
if (process.argv[1].endsWith("retrieve_documents.ts")) main(process.argv).then(function (status) {
|
|
763
575
|
process.exit(status);
|
|
764
576
|
})["catch"](function (error) {
|
|
765
577
|
console.error(error);
|
|
766
578
|
process.exit(1);
|
|
767
579
|
});
|
|
768
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZXRjaCIsInJlcXVpcmUiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwiU3RyaW5nIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJ1c2FnZSIsImNvbW1hbmRMaW5lVXNhZ2UiLCJjb25zb2xlIiwid2FybiIsIlJldHJpZXZlIiwiZGl2aXNpb24iLCJkaXZpc2lvbnMiLCJ1bmRlZmluZWQiLCJkIiwiY29uY2F0IiwiZ2V0RGl2aXNpb25zIiwiZG9jdW1lbnQiLCJtYXAiLCJyZXBvc2l0b3J5RGlyIiwiY29tbWl0IiwiZ2l0IiwicmVtb3RlIiwicnVuIiwiZGl2aXNpb25PckRvY3VtZW50IiwiZm9ybWF0IiwiZXh0IiwidXJscyIsInVpZCIsInB1c2giLCJ1cmxGcm9tRG9jdW1lbnQiLCJEb2N1bWVudFVybEZvcm1hdCIsIlJhd0h0bWwiLCJIdG1sIiwiUGRmIiwiZmlsZVBhdGgiLCJmcyIsImV4aXN0c1N5bmMiLCJpc05vdEVtcHR5Iiwic3RhdFN5bmMiLCJzaXplIiwicmV0cnlGYWlsZWQiLCJ2ZXJib3NlIiwidXJsUGF0aCIsInVybCIsInJlYWRGaWxlU3luYyIsInRvU3RyaW5nIiwibG9nIiwicmVzcG9uc2UiLCJidWZmZXIiLCJwYWdlIiwib2siLCJzdGF0dXMiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb2RlIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJ3cml0ZUZpbGVTeW5jIiwic2FuaXR5Q2hlY2tGb3JtYXQiLCJ0ZXh0ZXNEaXIiLCJuZWVkc0Rvd25sb2FkIiwic3VjY2VzcyIsImluZm8iLCJnZXRVcmxzIiwiZ2V0IiwidW5saW5rU3luYyIsInNpbGVudCIsInVybEZyb21VaWQiLCJzbGljZSIsImdpdERpciIsInRleHRlcyIsInBhdGgiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJlbnN1cmVEaXJTeW5jIiwiZ2V0RmlsZXMiLCJkYXRhIiwiZmlsZW5hbWUiLCJsb2FkIiwidGVzdCIsImdldERpdmlzaW9uc09yRG9jdW1lbnQiLCJkb3dubG9hZCIsImNvbW1pdEFuZFB1c2giLCJsZW5ndGgiLCJNYXRoIiwibWluIiwiaGVhZCIsInN0YXJ0c1dpdGgiLCJCdWZmZXIiLCJmcm9tIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJtYWluIiwicmV0cmlldmUiLCJyZXRyaWV2ZURvY3VtZW50cyIsInByb2Nlc3MiLCJlbmRzV2l0aCIsInRoZW4iLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZG9jdW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi8uLi9zcmMvZ2l0XCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxubGV0IGZldGNoID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIilcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0LCB1cmxGcm9tRG9jdW1lbnQgfSBmcm9tIFwiLi4vdXJsc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJjXCIsXG4gICAgICBoZWxwOiBcImNvbW1pdCBkb2N1bWVudHNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJkcnkgcnVuXCIsXG4gICAgICBuYW1lOiBcImRyeS1ydW5cIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcInJldHJ5IGZhaWxlZCBkb2N1bWVudHNcIixcbiAgICAgIG5hbWU6IFwicmV0cnktZmFpbGVkXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJyZXRyeSBhbGwgZG9jdW1lbnRzXCIsXG4gICAgICBuYW1lOiBcInJldHJ5XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwibFwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJyXCIsXG4gICAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwidGV4dGVzIGRpclwiLFxuICAgICAgbmFtZTogXCJ0ZXh0ZXNcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJmaWxlcyBvciBnbG9icyB0byBkb2N1bWVudHNcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJkYXRhXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiUmV0cmlldmUgZG9jdW1lbnRzXCIsXG4gICAgICBjb250ZW50OiBcIlJldHJpZXZlIGRvY3VtZW50c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAoXCJoZWxwXCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHVzYWdlID0gY29tbWFuZExpbmVVc2FnZShzZWN0aW9ucylcbiAgICBjb25zb2xlLndhcm4odXNhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5jbGFzcyBSZXRyaWV2ZSB7XG4gIG9wdGlvbnM6IGFueVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgfVxuXG4gIGdldERpdmlzaW9ucyhkaXZpc2lvbjogYW55KSB7XG4gICAgbGV0IGRpdmlzaW9ucyA9IFtkaXZpc2lvbl1cbiAgICBpZiAoZGl2aXNpb24uZGl2aXNpb25zICE9IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRpdmlzaW9uLmRpdmlzaW9ucylcbiAgICAgICAgZGl2aXNpb25zID0gZGl2aXNpb25zLmNvbmNhdCh0aGlzLmdldERpdmlzaW9ucyhkKSlcbiAgICB9XG4gICAgcmV0dXJuIGRpdmlzaW9uc1xuICB9XG5cbiAgZ2V0RGl2aXNpb25zT3JEb2N1bWVudChkb2N1bWVudDogYW55KSB7XG4gICAgaWYgKGRvY3VtZW50LmRpdmlzaW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgICAuLi5kb2N1bWVudC5kaXZpc2lvbnMubWFwKChkOiBhbnkpID0+IHRoaXMuZ2V0RGl2aXNpb25zKGQpKSxcbiAgICAgIClcbiAgICBlbHNlIHJldHVybiBbZG9jdW1lbnRdXG4gIH1cblxuICBhc3luYyBjb21taXRBbmRQdXNoKHJlcG9zaXRvcnlEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tbWl0ID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVtb3RlID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gICAgZ2l0LnJ1bihyZXBvc2l0b3J5RGlyLCBgcHVzaCAke3RoaXMub3B0aW9ucy5yZW1vdGV9IEhFQUQ6bWFzdGVyYClcbiAgfVxuXG4gIGdldFVybHMoZGl2aXNpb25PckRvY3VtZW50OiBhbnksIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09IFwiaHRtbFwiID8gXCJyYXdcIiA6IFwicGRmXCJcbiAgICBsZXQgdXJsczogYW55ID0gW1xuICAgICAgYGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9keW4vZG9jcy8ke2RpdmlzaW9uT3JEb2N1bWVudC51aWR9LiR7ZXh0fWAsXG4gICAgXVxuICAgIGlmIChmb3JtYXQgPT0gXCJodG1sXCIpIHtcbiAgICAgIHVybHMucHVzaCh1cmxGcm9tRG9jdW1lbnQoZGl2aXNpb25PckRvY3VtZW50LCBEb2N1bWVudFVybEZvcm1hdC5SYXdIdG1sKSlcbiAgICAgIHVybHMucHVzaCh1cmxGcm9tRG9jdW1lbnQoZGl2aXNpb25PckRvY3VtZW50LCBEb2N1bWVudFVybEZvcm1hdC5IdG1sKSlcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBcInBkZlwiKSB7XG4gICAgICB1cmxzLnB1c2godXJsRnJvbURvY3VtZW50KGRpdmlzaW9uT3JEb2N1bWVudCwgRG9jdW1lbnRVcmxGb3JtYXQuUGRmKSlcbiAgICB9XG4gICAgcmV0dXJuIHVybHNcbiAgfVxuXG4gIHN0YXRpYyBzYW5pdHlDaGVja0Zvcm1hdChwYWdlOiBCdWZmZXIsIGZvcm1hdDogc3RyaW5nKTogW0J1ZmZlciwgc3RyaW5nXSB7XG4gICAgaWYgKGZvcm1hdCA9PSBcInBkZlwiKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihwYWdlLmxlbmd0aCwgNClcbiAgICAgIGNvbnN0IGhlYWQgPSBwYWdlLnNsaWNlKDAsIGxlbmd0aCkudG9TdHJpbmcoKVxuICAgICAgaWYgKCFoZWFkLnN0YXJ0c1dpdGgoXCIlUERGXCIpKVxuICAgICAgICByZXR1cm4gW0J1ZmZlci5mcm9tKFwiXCIpLCBgYmFkIHBkZiAke2VuY29kZVVSSUNvbXBvbmVudChoZWFkKX0uLi5gXVxuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IFwiaHRtbFwiKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihwYWdlLmxlbmd0aCwgNTApXG4gICAgICBjb25zdCBoZWFkID0gcGFnZS5zbGljZSgwLCBsZW5ndGgpLnRvU3RyaW5nKClcbiAgICAgIGlmICghaGVhZC5pbmNsdWRlcyhcIkRPQ1RZUEVcIikgJiYgIWhlYWQuaW5jbHVkZXMoXCI8P3htbFwiKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKFwiXCIpLFxuICAgICAgICAgIGBiYWQgaHRtbCAke2VuY29kZVVSSUNvbXBvbmVudChoZWFkLnNsaWNlKDAsIDQpKX0uLi5gLFxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbcGFnZSwgXCJPS1wiXVxuICB9XG5cbiAgYXN5bmMgbmVlZHNEb3dubG9hZChmaWxlUGF0aDogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgY29uc3QgaXNOb3RFbXB0eSA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKS5zaXplID4gMFxuICAgICAgY29uc3QgcmV0cnlGYWlsZWQgPSBcInJldHJ5LWZhaWxlZFwiIGluIHRoaXMub3B0aW9uc1xuICAgICAgaWYgKCFyZXRyeUZhaWxlZCB8fCBpc05vdEVtcHR5KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGlmIChpc05vdEVtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXRoID0gYCR7ZmlsZVBhdGh9LnVybGBcbiAgICAgICAgICAgIGxldCB1cmxcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHVybFBhdGgpKVxuICAgICAgICAgICAgICB1cmwgPSBmcy5yZWFkRmlsZVN5bmModXJsUGF0aCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgZWxzZSB1cmwgPSBcIjx1bmtub3duIHVybD5cIlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dWlkfTogQ2FjaGVkIE9LICR7ZmlsZVBhdGh9IGZyb20gJHt1cmx9YClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dWlkfTogQ2FjaGVkIEZBSUwgJHtmaWxlUGF0aH1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxuICAgIGZvcm1hdDogc3RyaW5nLFxuICAgIHVpZDogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkgY29uc29sZS5sb2coYCR7dWlkfTogZmV0Y2goJHt1cmx9KWApXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpXG4gICAgbGV0IHBhZ2U6IGFueSA9IGF3YWl0IHJlc3BvbnNlLmJ1ZmZlcigpXG4gICAgbGV0IHN0YXR1c1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgRXJyb3Igd2hpbGUgZ2V0dGluZyBwYWdlIFwiJHt1cmx9XCIgKHVpZDogJHt1aWR9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgXCJcIilcbiAgICB9IGVsc2Uge1xuICAgICAgO1twYWdlLCBzdGF0dXNdID0gUmV0cmlldmUuc2FuaXR5Q2hlY2tGb3JtYXQocGFnZSwgZm9ybWF0KVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgcGFnZSlcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG5cbiAgc3RhdGljIHVybEZyb21VaWQodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICBcImh0dHBzOi8vZ2l0LmVuLXJvb3Qub3JnL3RyaWNvdGV1c2VzL2RhdGEudHJpY290ZXVzZXMuZnIvRG9zc2llcnNfTGVnaXNsYXRpZnNfWFYvLS90cmVlL21hc3Rlci9kb2N1bWVudHNcIlxuICAgIHJldHVybiBgWyR7dWlkfV0oJHt1cmx9L3VpZC8ke3VpZH0uanNvbilgXG4gIH1cblxuICBhc3luYyBkb3dubG9hZChcbiAgICB0ZXh0ZXNEaXI6IHN0cmluZyxcbiAgICBkaXZpc2lvbk9yRG9jdW1lbnQ6IGFueSxcbiAgICBmb3JtYXQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1aWQgPSBkaXZpc2lvbk9yRG9jdW1lbnQudWlkXG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHt0ZXh0ZXNEaXJ9L3VpZC8ke3VpZH0uJHtmb3JtYXR9YFxuICAgIGlmICghKGF3YWl0IHRoaXMubmVlZHNEb3dubG9hZChmaWxlUGF0aCwgdWlkKSkpIHJldHVybiAwXG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJib3NlKSBjb25zb2xlLmxvZyhgJHt1aWR9OiBDaGVja2luZyAke2ZpbGVQYXRofWApXG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZVxuICAgIGxldCBpbmZvID0gXCJcIlxuICAgIGxldCB1cmxcblxuICAgIGZvciAodXJsIG9mIHRoaXMuZ2V0VXJscyhkaXZpc2lvbk9yRG9jdW1lbnQsIGZvcm1hdCkpIHtcbiAgICAgIGlmIChcImRyeS1ydW5cIiBpbiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgaW5mbyArPSBgICAqICR7dXJsfVxcbmBcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gYCAgKiAke3VybH0gYFxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdldCh1cmwsIGZpbGVQYXRoLCBmb3JtYXQsIHVpZClcblxuICAgICAgaW5mbyArPSBgJHtzdGF0dXN9XFxuYFxuICAgICAgaWYgKHN0YXR1cyA9PSBcIk9LXCIpIHtcbiAgICAgICAgc3VjY2VzcyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXJsUGF0aCA9IGAke2ZpbGVQYXRofS51cmxgXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModXJsUGF0aCwgdXJsKVxuICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh1cmxQYXRoKSkge1xuICAgICAgZnMudW5saW5rU3luYyh1cmxQYXRoKVxuICAgIH1cbiAgICBpZiAoaW5mbyAhPSBcIlwiICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCogJHtSZXRyaWV2ZS51cmxGcm9tVWlkKHVpZCl9OiBSZXRyaWV2aW5nICR7ZmlsZVBhdGh9XFxuJHtpbmZvLnNsaWNlKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgLTEsXG4gICAgICAgICl9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEb2N1bWVudHMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBnaXREaXIgPSBgJHt0aGlzLm9wdGlvbnMudGV4dGVzfS8uZ2l0YFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke2dpdERpcn0gaXMgZXhwZWN0ZWQgdG8gZXhpc3QgYnV0IGRvZXMgbm90YClcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgY29uc3QgdGV4dGVzRGlyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50ZXh0ZXMsIHRoaXMub3B0aW9ucy5sZWdpc2xhdHVyZSlcbiAgICBmcy5lbnN1cmVEaXJTeW5jKGAke3RleHRlc0Rpcn0vdWlkYClcblxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZ2V0RmlsZXModGhpcy5vcHRpb25zLmRhdGEpKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGxvYWQoZmlsZW5hbWUpXG4gICAgICBpZiAoL14uLi4uU04vLnRlc3QoZG9jdW1lbnQudWlkKSB8fCAvXkRFQ0wvLnRlc3QoZG9jdW1lbnQudWlkKSkgY29udGludWVcbiAgICAgIGZvciAoY29uc3QgZGl2aXNpb25PckRvY3VtZW50IG9mIHRoaXMuZ2V0RGl2aXNpb25zT3JEb2N1bWVudChkb2N1bWVudCkpIHtcbiAgICAgICAgaWYgKC8tQ09NUEEkLy50ZXN0KGRpdmlzaW9uT3JEb2N1bWVudC51aWQpKSBjb250aW51ZVxuICAgICAgICBsZXQgc3RhdHVzID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBbXCJodG1sXCIsIFwicGRmXCJdKSB7XG4gICAgICAgICAgc3RhdHVzIHw9IGF3YWl0IHRoaXMuZG93bmxvYWQodGV4dGVzRGlyLCBkaXZpc2lvbk9yRG9jdW1lbnQsIGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSBjb25zb2xlLmxvZyhcIi0tLVwiKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwiZHJ5LXJ1blwiIGluIHRoaXMub3B0aW9ucykpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUHVzaCh0ZXh0ZXNEaXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGNvbnN0IHJldHJpZXZlID0gbmV3IFJldHJpZXZlKG9wdGlvbnMpXG4gIHJldHVybiByZXRyaWV2ZS5yZXRyaWV2ZURvY3VtZW50cygpXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJldHJpZXZlX2RvY3VtZW50cy50c1wiKSlcbiAgbWFpbihwcm9jZXNzLmFyZ3YpXG4gICAgLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgICAgcHJvY2Vzcy5leGl0KHN0YXR1cylcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OytDQVBBLG9KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBSUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsWUFBRCxDQUFuQjs7QUFNQSxTQUFTQyxTQUFULENBQW1CQyxJQUFuQixFQUF3QztFQUN0QyxJQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtJQUNFQyxLQUFLLEVBQUUsR0FEVDtJQUVFQyxJQUFJLEVBQUUsa0JBRlI7SUFHRUMsSUFBSSxFQUFFLFFBSFI7SUFJRUMsSUFBSSxFQUFFQztFQUpSLENBRHlCLEVBT3pCO0lBQ0VILElBQUksRUFBRSxTQURSO0lBRUVDLElBQUksRUFBRSxTQUZSO0lBR0VDLElBQUksRUFBRUM7RUFIUixDQVB5QixFQVl6QjtJQUNFSCxJQUFJLEVBQUUsd0JBRFI7SUFFRUMsSUFBSSxFQUFFLGNBRlI7SUFHRUMsSUFBSSxFQUFFQztFQUhSLENBWnlCLEVBaUJ6QjtJQUNFSCxJQUFJLEVBQUUscUJBRFI7SUFFRUMsSUFBSSxFQUFFLE9BRlI7SUFHRUMsSUFBSSxFQUFFQztFQUhSLENBakJ5QixFQXNCekI7SUFDRUosS0FBSyxFQUFFLEdBRFQ7SUFFRUssWUFBWSxFQUFFLElBRmhCO0lBR0VILElBQUksRUFBRSxhQUhSO0lBSUVDLElBQUksRUFB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
|
|
580
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZXRjaCIsInJlcXVpcmUiLCJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiZGVmYXVsdFZhbHVlIiwiU3RyaW5nIiwiZGVmYXVsdE9wdGlvbiIsIm11bHRpcGxlIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJ1c2FnZSIsImNvbW1hbmRMaW5lVXNhZ2UiLCJjb25zb2xlIiwid2FybiIsIlJldHJpZXZlIiwiZGl2aXNpb24iLCJkaXZpc2lvbnMiLCJ1bmRlZmluZWQiLCJkIiwiY29uY2F0IiwiZ2V0RGl2aXNpb25zIiwiZG9jdW1lbnQiLCJtYXAiLCJyZXBvc2l0b3J5RGlyIiwiY29tbWl0IiwiZ2l0IiwicmVtb3RlIiwicnVuIiwiZGl2aXNpb25PckRvY3VtZW50IiwiZm9ybWF0IiwiZXh0IiwidXJscyIsInVpZCIsInB1c2giLCJ1cmxGcm9tRG9jdW1lbnQiLCJEb2N1bWVudFVybEZvcm1hdCIsIlJhd0h0bWwiLCJIdG1sIiwiUGRmIiwiZmlsZVBhdGgiLCJmcyIsImV4aXN0c1N5bmMiLCJpc05vdEVtcHR5Iiwic3RhdFN5bmMiLCJzaXplIiwicmV0cnlGYWlsZWQiLCJ2ZXJib3NlIiwidXJsUGF0aCIsInVybCIsInJlYWRGaWxlU3luYyIsInRvU3RyaW5nIiwibG9nIiwicmVzcG9uc2UiLCJidWZmZXIiLCJwYWdlIiwib2siLCJzdGF0dXMiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb2RlIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJ3cml0ZUZpbGVTeW5jIiwic2FuaXR5Q2hlY2tGb3JtYXQiLCJ0ZXh0ZXNEaXIiLCJuZWVkc0Rvd25sb2FkIiwic3VjY2VzcyIsImluZm8iLCJnZXRVcmxzIiwiZ2V0IiwidW5saW5rU3luYyIsInNpbGVudCIsInVybEZyb21VaWQiLCJzbGljZSIsImdpdERpciIsInRleHRlcyIsInBhdGgiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJlbnN1cmVEaXJTeW5jIiwiZ2V0RmlsZXMiLCJkYXRhIiwiZmlsZW5hbWUiLCJsb2FkIiwidGVzdCIsImdldERpdmlzaW9uc09yRG9jdW1lbnQiLCJkb3dubG9hZCIsImNvbW1pdEFuZFB1c2giLCJsZW5ndGgiLCJNYXRoIiwibWluIiwiaGVhZCIsInN0YXJ0c1dpdGgiLCJCdWZmZXIiLCJmcm9tIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJtYWluIiwicmV0cmlldmUiLCJyZXRyaWV2ZURvY3VtZW50cyIsInByb2Nlc3MiLCJlbmRzV2l0aCIsInRoZW4iLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZG9jdW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi8uLi9zcmMvZ2l0XCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxubGV0IGZldGNoID0gcmVxdWlyZShcIm5vZGUtZmV0Y2hcIilcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IERvY3VtZW50VXJsRm9ybWF0LCB1cmxGcm9tRG9jdW1lbnQgfSBmcm9tIFwiLi4vdXJsc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJjXCIsXG4gICAgICBoZWxwOiBcImNvbW1pdCBkb2N1bWVudHNcIixcbiAgICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJkcnkgcnVuXCIsXG4gICAgICBuYW1lOiBcImRyeS1ydW5cIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcInJldHJ5IGZhaWxlZCBkb2N1bWVudHNcIixcbiAgICAgIG5hbWU6IFwicmV0cnktZmFpbGVkXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJyZXRyeSBhbGwgZG9jdW1lbnRzXCIsXG4gICAgICBuYW1lOiBcInJldHJ5XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwibFwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgICBuYW1lOiBcImxlZ2lzbGF0dXJlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJyXCIsXG4gICAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwidGV4dGVzIGRpclwiLFxuICAgICAgbmFtZTogXCJ0ZXh0ZXNcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInZcIixcbiAgICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgICAgaGVscDogXCJmaWxlcyBvciBnbG9icyB0byBkb2N1bWVudHNcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJkYXRhXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiUmV0cmlldmUgZG9jdW1lbnRzXCIsXG4gICAgICBjb250ZW50OiBcIlJldHJpZXZlIGRvY3VtZW50c1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAoXCJoZWxwXCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHVzYWdlID0gY29tbWFuZExpbmVVc2FnZShzZWN0aW9ucylcbiAgICBjb25zb2xlLndhcm4odXNhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5jbGFzcyBSZXRyaWV2ZSB7XG4gIG9wdGlvbnM6IGFueVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IGFueSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgfVxuXG4gIGdldERpdmlzaW9ucyhkaXZpc2lvbjogYW55KSB7XG4gICAgbGV0IGRpdmlzaW9ucyA9IFtkaXZpc2lvbl1cbiAgICBpZiAoZGl2aXNpb24uZGl2aXNpb25zICE9IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRpdmlzaW9uLmRpdmlzaW9ucylcbiAgICAgICAgZGl2aXNpb25zID0gZGl2aXNpb25zLmNvbmNhdCh0aGlzLmdldERpdmlzaW9ucyhkKSlcbiAgICB9XG4gICAgcmV0dXJuIGRpdmlzaW9uc1xuICB9XG5cbiAgZ2V0RGl2aXNpb25zT3JEb2N1bWVudChkb2N1bWVudDogYW55KSB7XG4gICAgaWYgKGRvY3VtZW50LmRpdmlzaW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gW10uY29uY2F0KFxuICAgICAgICAuLi5kb2N1bWVudC5kaXZpc2lvbnMubWFwKChkOiBhbnkpID0+IHRoaXMuZ2V0RGl2aXNpb25zKGQpKSxcbiAgICAgIClcbiAgICBlbHNlIHJldHVybiBbZG9jdW1lbnRdXG4gIH1cblxuICBhc3luYyBjb21taXRBbmRQdXNoKHJlcG9zaXRvcnlEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tbWl0ID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVtb3RlID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gICAgZ2l0LnJ1bihyZXBvc2l0b3J5RGlyLCBgcHVzaCAke3RoaXMub3B0aW9ucy5yZW1vdGV9IEhFQUQ6bWFzdGVyYClcbiAgfVxuXG4gIGdldFVybHMoZGl2aXNpb25PckRvY3VtZW50OiBhbnksIGZvcm1hdDogc3RyaW5nKSB7XG4gICAgY29uc3QgZXh0ID0gZm9ybWF0ID09IFwiaHRtbFwiID8gXCJyYXdcIiA6IFwicGRmXCJcbiAgICBsZXQgdXJsczogYW55ID0gW1xuICAgICAgYGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9keW4vZG9jcy8ke2RpdmlzaW9uT3JEb2N1bWVudC51aWR9LiR7ZXh0fWAsXG4gICAgXVxuICAgIGlmIChmb3JtYXQgPT0gXCJodG1sXCIpIHtcbiAgICAgIHVybHMucHVzaCh1cmxGcm9tRG9jdW1lbnQoZGl2aXNpb25PckRvY3VtZW50LCBEb2N1bWVudFVybEZvcm1hdC5SYXdIdG1sKSlcbiAgICAgIHVybHMucHVzaCh1cmxGcm9tRG9jdW1lbnQoZGl2aXNpb25PckRvY3VtZW50LCBEb2N1bWVudFVybEZvcm1hdC5IdG1sKSlcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBcInBkZlwiKSB7XG4gICAgICB1cmxzLnB1c2godXJsRnJvbURvY3VtZW50KGRpdmlzaW9uT3JEb2N1bWVudCwgRG9jdW1lbnRVcmxGb3JtYXQuUGRmKSlcbiAgICB9XG4gICAgcmV0dXJuIHVybHNcbiAgfVxuXG4gIHN0YXRpYyBzYW5pdHlDaGVja0Zvcm1hdChwYWdlOiBCdWZmZXIsIGZvcm1hdDogc3RyaW5nKTogW0J1ZmZlciwgc3RyaW5nXSB7XG4gICAgaWYgKGZvcm1hdCA9PSBcInBkZlwiKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihwYWdlLmxlbmd0aCwgNClcbiAgICAgIGNvbnN0IGhlYWQgPSBwYWdlLnNsaWNlKDAsIGxlbmd0aCkudG9TdHJpbmcoKVxuICAgICAgaWYgKCFoZWFkLnN0YXJ0c1dpdGgoXCIlUERGXCIpKVxuICAgICAgICByZXR1cm4gW0J1ZmZlci5mcm9tKFwiXCIpLCBgYmFkIHBkZiAke2VuY29kZVVSSUNvbXBvbmVudChoZWFkKX0uLi5gXVxuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IFwiaHRtbFwiKSB7XG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihwYWdlLmxlbmd0aCwgNTApXG4gICAgICBjb25zdCBoZWFkID0gcGFnZS5zbGljZSgwLCBsZW5ndGgpLnRvU3RyaW5nKClcbiAgICAgIGlmICghaGVhZC5pbmNsdWRlcyhcIkRPQ1RZUEVcIikgJiYgIWhlYWQuaW5jbHVkZXMoXCI8P3htbFwiKSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEJ1ZmZlci5mcm9tKFwiXCIpLFxuICAgICAgICAgIGBiYWQgaHRtbCAke2VuY29kZVVSSUNvbXBvbmVudChoZWFkLnNsaWNlKDAsIDQpKX0uLi5gLFxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbcGFnZSwgXCJPS1wiXVxuICB9XG5cbiAgYXN5bmMgbmVlZHNEb3dubG9hZChmaWxlUGF0aDogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgY29uc3QgaXNOb3RFbXB0eSA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKS5zaXplID4gMFxuICAgICAgY29uc3QgcmV0cnlGYWlsZWQgPSBcInJldHJ5LWZhaWxlZFwiIGluIHRoaXMub3B0aW9uc1xuICAgICAgaWYgKCFyZXRyeUZhaWxlZCB8fCBpc05vdEVtcHR5KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGlmIChpc05vdEVtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXRoID0gYCR7ZmlsZVBhdGh9LnVybGBcbiAgICAgICAgICAgIGxldCB1cmxcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHVybFBhdGgpKVxuICAgICAgICAgICAgICB1cmwgPSBmcy5yZWFkRmlsZVN5bmModXJsUGF0aCkudG9TdHJpbmcoKVxuICAgICAgICAgICAgZWxzZSB1cmwgPSBcIjx1bmtub3duIHVybD5cIlxuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dWlkfTogQ2FjaGVkIE9LICR7ZmlsZVBhdGh9IGZyb20gJHt1cmx9YClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dWlkfTogQ2FjaGVkIEZBSUwgJHtmaWxlUGF0aH1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBmaWxlUGF0aDogc3RyaW5nLFxuICAgIGZvcm1hdDogc3RyaW5nLFxuICAgIHVpZDogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkgY29uc29sZS5sb2coYCR7dWlkfTogZmV0Y2goJHt1cmx9KWApXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpXG4gICAgbGV0IHBhZ2U6IGFueSA9IGF3YWl0IHJlc3BvbnNlLmJ1ZmZlcigpXG4gICAgbGV0IHN0YXR1c1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgRXJyb3Igd2hpbGUgZ2V0dGluZyBwYWdlIFwiJHt1cmx9XCIgKHVpZDogJHt1aWR9KTpcXG5cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgXCJcIilcbiAgICB9IGVsc2Uge1xuICAgICAgO1twYWdlLCBzdGF0dXNdID0gUmV0cmlldmUuc2FuaXR5Q2hlY2tGb3JtYXQocGFnZSwgZm9ybWF0KVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgcGFnZSlcbiAgICB9XG4gICAgcmV0dXJuIHN0YXR1c1xuICB9XG5cbiAgc3RhdGljIHVybEZyb21VaWQodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9XG4gICAgICBcImh0dHBzOi8vZ2l0LmVuLXJvb3Qub3JnL3RyaWNvdGV1c2VzL2RhdGEudHJpY290ZXVzZXMuZnIvRG9zc2llcnNfTGVnaXNsYXRpZnNfWFYvLS90cmVlL21hc3Rlci9kb2N1bWVudHNcIlxuICAgIHJldHVybiBgWyR7dWlkfV0oJHt1cmx9L3VpZC8ke3VpZH0uanNvbilgXG4gIH1cblxuICBhc3luYyBkb3dubG9hZChcbiAgICB0ZXh0ZXNEaXI6IHN0cmluZyxcbiAgICBkaXZpc2lvbk9yRG9jdW1lbnQ6IGFueSxcbiAgICBmb3JtYXQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1aWQgPSBkaXZpc2lvbk9yRG9jdW1lbnQudWlkXG4gICAgY29uc3QgZmlsZVBhdGggPSBgJHt0ZXh0ZXNEaXJ9L3VpZC8ke3VpZH0uJHtmb3JtYXR9YFxuICAgIGlmICghKGF3YWl0IHRoaXMubmVlZHNEb3dubG9hZChmaWxlUGF0aCwgdWlkKSkpIHJldHVybiAwXG4gICAgaWYgKHRoaXMub3B0aW9ucy52ZXJib3NlKSBjb25zb2xlLmxvZyhgJHt1aWR9OiBDaGVja2luZyAke2ZpbGVQYXRofWApXG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZVxuICAgIGxldCBpbmZvID0gXCJcIlxuICAgIGxldCB1cmxcblxuICAgIGZvciAodXJsIG9mIHRoaXMuZ2V0VXJscyhkaXZpc2lvbk9yRG9jdW1lbnQsIGZvcm1hdCkpIHtcbiAgICAgIGlmIChcImRyeS1ydW5cIiBpbiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgaW5mbyArPSBgICAqICR7dXJsfVxcbmBcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8gKz0gYCAgKiAke3VybH0gYFxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLmdldCh1cmwsIGZpbGVQYXRoLCBmb3JtYXQsIHVpZClcblxuICAgICAgaW5mbyArPSBgJHtzdGF0dXN9XFxuYFxuICAgICAgaWYgKHN0YXR1cyA9PSBcIk9LXCIpIHtcbiAgICAgICAgc3VjY2VzcyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXJsUGF0aCA9IGAke2ZpbGVQYXRofS51cmxgXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModXJsUGF0aCwgdXJsKVxuICAgIH0gZWxzZSBpZiAoZnMuZXhpc3RzU3luYyh1cmxQYXRoKSkge1xuICAgICAgZnMudW5saW5rU3luYyh1cmxQYXRoKVxuICAgIH1cbiAgICBpZiAoaW5mbyAhPSBcIlwiICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYCogJHtSZXRyaWV2ZS51cmxGcm9tVWlkKHVpZCl9OiBSZXRyaWV2aW5nICR7ZmlsZVBhdGh9XFxuJHtpbmZvLnNsaWNlKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgLTEsXG4gICAgICAgICl9YCxcbiAgICAgIClcbiAgICAgIHJldHVybiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmV0cmlldmVEb2N1bWVudHMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBnaXREaXIgPSBgJHt0aGlzLm9wdGlvbnMudGV4dGVzfS8uZ2l0YFxuICAgIGlmICghZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke2dpdERpcn0gaXMgZXhwZWN0ZWQgdG8gZXhpc3QgYnV0IGRvZXMgbm90YClcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgY29uc3QgdGV4dGVzRGlyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50ZXh0ZXMsIHRoaXMub3B0aW9ucy5sZWdpc2xhdHVyZSlcbiAgICBmcy5lbnN1cmVEaXJTeW5jKGAke3RleHRlc0Rpcn0vdWlkYClcblxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZ2V0RmlsZXModGhpcy5vcHRpb25zLmRhdGEpKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGxvYWQoZmlsZW5hbWUpXG4gICAgICBpZiAoL14uLi4uU04vLnRlc3QoZG9jdW1lbnQudWlkKSB8fCAvXkRFQ0wvLnRlc3QoZG9jdW1lbnQudWlkKSkgY29udGludWVcbiAgICAgIGZvciAoY29uc3QgZGl2aXNpb25PckRvY3VtZW50IG9mIHRoaXMuZ2V0RGl2aXNpb25zT3JEb2N1bWVudChkb2N1bWVudCkpIHtcbiAgICAgICAgaWYgKC8tQ09NUEEkLy50ZXN0KGRpdmlzaW9uT3JEb2N1bWVudC51aWQpKSBjb250aW51ZVxuICAgICAgICBsZXQgc3RhdHVzID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBbXCJodG1sXCIsIFwicGRmXCJdKSB7XG4gICAgICAgICAgc3RhdHVzIHw9IGF3YWl0IHRoaXMuZG93bmxvYWQodGV4dGVzRGlyLCBkaXZpc2lvbk9yRG9jdW1lbnQsIGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdHVzICYmICF0aGlzLm9wdGlvbnMuc2lsZW50KSBjb25zb2xlLmxvZyhcIi0tLVwiKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwiZHJ5LXJ1blwiIGluIHRoaXMub3B0aW9ucykpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWl0QW5kUHVzaCh0ZXh0ZXNEaXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGNvbnN0IHJldHJpZXZlID0gbmV3IFJldHJpZXZlKG9wdGlvbnMpXG4gIHJldHVybiByZXRyaWV2ZS5yZXRyaWV2ZURvY3VtZW50cygpXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJldHJpZXZlX2RvY3VtZW50cy50c1wiKSlcbiAgbWFpbihwcm9jZXNzLmFyZ3YpXG4gICAgLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgICAgcHJvY2Vzcy5leGl0KHN0YXR1cylcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQTREO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsK0NBUDVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFHQSxJQUFJQSxLQUFLLEdBQUdDLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFNakMsU0FBU0MsU0FBUyxDQUFDQyxJQUFjLEVBQU87RUFDdEMsSUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7SUFDRUMsS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLGtCQUFrQjtJQUN4QkMsSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSCxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUUsU0FBUztJQUNmQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VILElBQUksRUFBRSx3QkFBd0I7SUFDOUJDLElBQUksRUFBRSxjQUFjO0lBQ3BCQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VILElBQUksRUFBRSxxQkFBcUI7SUFDM0JDLElBQUksRUFBRSxPQUFPO0lBQ2JDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUosS0FBSyxFQUFFLEdBQUc7SUFDVkssWUFBWSxFQUFFLElBQUk7SUFDbEJILElBQUksRUFBRSxhQUFhO0lBQ25CQyxJQUFJLEVBQUVHO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VOLEtBQUssRUFBRSxHQUFHO0lBQ1ZDLElBQUksRUFBRSw2QkFBNkI7SUFDbkNDLElBQUksRUFBRSxRQUFRO0lBQ2RDLElBQUksRUFBRUc7RUFDUixDQUFDLEVBQ0Q7SUFDRU4sS0FBSyxFQUFFLEdBQUc7SUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtJQUMxQkMsSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSCxJQUFJLEVBQUUsWUFBWTtJQUNsQkMsSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFRztFQUNSLENBQUMsRUFDRDtJQUNFTixLQUFLLEVBQUUsR0FBRztJQUNWQyxJQUFJLEVBQUUsY0FBYztJQUNwQkMsSUFBSSxFQUFFLFNBQVM7SUFDZkMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFRyxhQUFhLEVBQUUsSUFBSTtJQUNuQk4sSUFBSSxFQUFFLDZCQUE2QjtJQUNuQ08sUUFBUSxFQUFFLElBQUk7SUFDZE4sSUFBSSxFQUFFLE1BQU07SUFDWkMsSUFBSSxFQUFFRztFQUNSLENBQUMsQ0FDRjtFQUNELElBQU1HLFFBQVEsR0FBRyxDQUNmO0lBQ0VDLE1BQU0sRUFBRSxvQkFBb0I7SUFDNUJDLE9BQU8sRUFBRTtFQUNYLENBQUMsRUFDRDtJQUNFRCxNQUFNLEVBQUUsU0FBUztJQUNqQkUsVUFBVSxFQUFFYjtFQUNkLENBQUMsQ0FDRjtFQUNELElBQU1jLE9BQU8sR0FBRyxJQUFBQywyQkFBZSxFQUFDZixrQkFBa0IsRUFBRTtJQUNsREQsSUFBSSxFQUFFQTtFQUNSLENBQUMsQ0FBQztFQUVGLElBQUksTUFBTSxJQUFJZSxPQUFPLEVBQUU7SUFDckIsSUFBTUUsS0FBSyxHQUFHLElBQUFDLDRCQUFnQixFQUFDUCxRQUFRLENBQUM7SUFDeENRLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDSCxLQUFLLENBQUM7SUFDbkIsT0FBTyxJQUFJO0VBQ2I7RUFDQSxPQUFPRixPQUFPO0FBQ2hCO0FBQUMsSUFFS00sUUFBUTtFQUdaLGtCQUFZTixPQUFZLEVBQUU7SUFBQTtJQUFBO0lBQ3hCLElBQUksQ0FBQ0EsT0FBTyxHQUFHQSxPQUFPO0VBQ3hCO0VBQUM7SUFBQTtJQUFBLE9BRUQsc0JBQWFPLFFBQWEsRUFBRTtNQUMxQixJQUFJQyxTQUFTLEdBQUcsQ0FBQ0QsUUFBUSxDQUFDO01BQzFCLElBQUlBLFFBQVEsQ0FBQ0MsU0FBUyxJQUFJQyxTQUFTLEVBQUU7UUFBQSwyQ0FDbkJGLFFBQVEsQ0FBQ0MsU0FBUztVQUFBO1FBQUE7VUFBbEMsb0RBQ0U7WUFBQSxJQURTRSxDQUFDO1lBQ1ZGLFNBQVMsR0FBR0EsU0FBUyxDQUFDRyxNQUFNLENBQUMsSUFBSSxDQUFDQyxZQUFZLENBQUNGLENBQUMsQ0FBQyxDQUFDO1VBQUQ7UUFBQztVQUFBO1FBQUE7VUFBQTtRQUFBO01BQ3REO01BQ0EsT0FBT0YsU0FBUztJQUNsQjtFQUFDO0lBQUE7SUFBQSxPQUVELGdDQUF1QkssUUFBYSxFQUFFO01BQUE7UUFBQTtNQUNwQyxJQUFJQSxRQUFRLENBQUNMLFNBQVMsSUFBSUMsU0FBUyxFQUNqQyxPQUFPLFVBQUUsRUFBQ0UsTUFBTSxnQ0FDWEUsUUFBUSxDQUFDTCxTQUFTLENBQUNNLEdBQUcsQ0FBQyxVQUFDSixDQUFNO1FBQUEsT0FBSyxLQUFJLENBQUNFLFlBQVksQ0FBQ0YsQ0FBQyxDQUFDO01BQUEsRUFBQyxFQUM1RCxNQUNFLE9BQU8sQ0FBQ0csUUFBUSxDQUFDO0lBQ3hCO0VBQUM7SUFBQTtJQUFBO01BQUEsZ0ZBRUQsaUJBQW9CRSxhQUFxQjtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUFBLE1BQ25DLElBQUksQ0FBQ2YsT0FBTyxDQUFDZ0IsTUFBTSxJQUFJUCxTQUFTO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ3BDUSxHQUFHLENBQUNELE1BQU0sQ0FBQ0QsYUFBYSxFQUFFLGtCQUFrQixDQUFDO2dCQUFBLE1BRXpDLElBQUksQ0FBQ2YsT0FBTyxDQUFDa0IsTUFBTSxJQUFJVCxTQUFTO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQ3BDUSxHQUFHLENBQUNFLEdBQUcsQ0FBQ0osYUFBYSxpQkFBVSxJQUFJLENBQUNmLE9BQU8sQ0FBQ2tCLE1BQU0sa0JBQWU7Y0FBQTtjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBO01BQUEsQ0FDbEU7TUFBQTtRQUFBO01BQUE7TUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBLE9BRUQsaUJBQVFFLGtCQUF1QixFQUFFQyxNQUFjLEVBQUU7TUFDL0MsSUFBTUMsR0FBRyxHQUFHRCxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxLQUFLO01BQzVDLElBQUlFLElBQVMsR0FBRyxzREFDZ0NILGtCQUFrQixDQUFDSSxHQUFHLGNBQUlGLEdBQUcsRUFDNUU7TUFDRCxJQUFJRCxNQUFNLElBQUksTUFBTSxFQUFFO1FBQ3BCRSxJQUFJLENBQUNFLElBQUksQ0FBQyxJQUFBQyxxQkFBZSxFQUFDTixrQkFBa0IsRUFBRU8sdUJBQWlCLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFTCxJQUFJLENBQUNFLElBQUksQ0FBQyxJQUFBQyxxQkFBZSxFQUFDTixrQkFBa0IsRUFBRU8sdUJBQWlCLENBQUNFLElBQUksQ0FBQyxDQUFDO01BQ3hFLENBQUMsTUFBTSxJQUFJUixNQUFNLElBQUksS0FBSyxFQUFFO1FBQzFCRSxJQUFJLENBQUNFLElBQUksQ0FBQyxJQUFBQyxxQkFBZSxFQUFDTixrQkFBa0IsRUFBRU8sdUJBQWlCLENBQUNHLEdBQUcsQ0FBQyxDQUFDO01BQ3ZFO01BQ0EsT0FBT1AsSUFBSTtJQUNiO0VBQUM7SUFBQTtJQUFBO01BQUEsZ0ZBcUJELGtCQUFvQlEsUUFBZ0IsRUFBRVAsR0FBVztRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBQUEsS0FDM0NRLG1CQUFFLENBQUNDLFVBQVUsQ0FBQ0YsUUFBUSxDQUFDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNuQkcsVUFBVSxHQUFHRixtQkFBRSxDQUFDRyxRQUFRLENBQUNKLFFBQVEsQ0FBQyxDQUFDSyxJQUFJLEdBQUcsQ0FBQztnQkFDM0NDLFdBQVcsR0FBRyxjQUFjLElBQUksSUFBSSxDQUFDckMsT0FBTztnQkFBQSxNQUM5QyxDQUFDcUMsV0FBVyxJQUFJSCxVQUFVO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUM1QixJQUFJLElBQUksQ0FBQ2xDLE9BQU8sQ0FBQ3NDLE9BQU8sRUFBRTtrQkFDeEIsSUFBSUosVUFBVSxFQUFFO29CQUNSSyxPQUFPLGFBQU1SLFFBQVE7b0JBRTNCLElBQUlDLG1CQUFFLENBQUNDLFVBQVUsQ0FBQ00sT0FBTyxDQUFDLEVBQ3hCQyxHQUFHLEdBQUdSLG1CQUFFLENBQUNTLFlBQVksQ0FBQ0YsT0FBTyxDQUFDLENBQUNHLFFBQVEsRUFBRSxNQUN0Q0YsR0FBRyxHQUFHLGVBQWU7b0JBQzFCcEMsT0FBTyxDQUFDdUMsR0FBRyxXQUFJbkIsR0FBRyx5QkFBZU8sUUFBUSxtQkFBU1MsR0FBRyxFQUFHO2tCQUMxRCxDQUFDLE1BQU07b0JBQ0xwQyxPQUFPLENBQUN1QyxHQUFHLFdBQUluQixHQUFHLDJCQUFpQk8sUUFBUSxFQUFHO2tCQUNoRDtnQkFDRjtnQkFBQyxrQ0FDTSxLQUFLO2NBQUE7Z0JBQUEsa0NBR1QsSUFBSTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUNaO01BQUE7UUFBQTtNQUFBO01BQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBLHNFQUVELGtCQUNFUyxHQUFXLEVBQ1hULFFBQWdCLEVBQ2hCVixNQUFjLEVBQ2RHLEdBQVc7UUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFBO2dCQUVYLElBQUksSUFBSSxDQUFDeEIsT0FBTyxDQUFDc0MsT0FBTyxFQUFFbEMsT0FBTyxDQUFDdUMsR0FBRyxXQUFJbkIsR0FBRyxxQkFBV2dCLEdBQUcsT0FBSTtnQkFBQTtnQkFBQSxPQUN2QzFELEtBQUssQ0FBQzBELEdBQUcsQ0FBQztjQUFBO2dCQUEzQkksUUFBUTtnQkFBQTtnQkFBQSxPQUNRQSxRQUFRLENBQUNDLE1BQU0sRUFBRTtjQUFBO2dCQUFuQ0MsSUFBUztnQkFFYixJQUFJLENBQUNGLFFBQVEsQ0FBQ0csRUFBRSxFQUFFO2tCQUNoQkMsTUFBTSxHQUFHSixRQUFRLENBQUNJLE1BQU07a0JBQ3hCLElBQUlKLFFBQVEsQ0FBQ0ksTUFBTSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxJQUFJLENBQUNoRCxPQUFPLENBQUNzQyxPQUFPLEVBQUU7c0JBQ3hCbEMsT0FBTyxDQUFDNkMsS0FBSyxzQ0FDa0JULEdBQUcsc0JBQVdoQixHQUFHLDJCQUFpQjBCLElBQUksQ0FBQ0MsU0FBUyxDQUMzRTt3QkFBRUMsSUFBSSxFQUFFUixRQUFRLENBQUNJLE1BQU07d0JBQUVLLE9BQU8sRUFBRVQsUUFBUSxDQUFDVTtzQkFBVyxDQUFDLEVBQ3ZELElBQUksRUFDSixDQUFDLENBQ0YsRUFDRjtvQkFDSDtrQkFDRjtrQkFDQXRCLG1CQUFFLENBQUN1QixhQUFhLENBQUN4QixRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNoQyxDQUFDLE1BQU07a0JBQ0w7a0JBQUMsd0JBQWlCekIsUUFBUSxDQUFDa0QsaUJBQWlCLENBQUNWLElBQUksRUFBRXpCLE1BQU0sQ0FBQztrQkFBQTtrQkFBeER5QixJQUFJO2tCQUFFRSxNQUFNO2tCQUNkaEIsbUJBQUUsQ0FBQ3VCLGFBQWEsQ0FBQ3hCLFFBQVEsRUFBRWUsSUFBSSxDQUFDO2dCQUNsQztnQkFBQyxrQ0FDTUUsTUFBTTtjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUNkO01BQUE7UUFBQTtNQUFBO01BQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBLDJFQVFELGtCQUNFUyxTQUFpQixFQUNqQnJDLGtCQUF1QixFQUN2QkMsTUFBYztRQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUE7Z0JBRVJHLEdBQUcsR0FBR0osa0JBQWtCLENBQUNJLEdBQUc7Z0JBQzVCTyxRQUFRLGFBQU0wQixTQUFTLGtCQUFRakMsR0FBRyxjQUFJSCxNQUFNO2dCQUFBO2dCQUFBLE9BQ3RDLElBQUksQ0FBQ3FDLGFBQWEsQ0FBQzNCLFFBQVEsRUFBRVAsR0FBRyxDQUFDO2NBQUE7Z0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQUEsa0NBQVUsQ0FBQztjQUFBO2dCQUN4RCxJQUFJLElBQUksQ0FBQ3hCLE9BQU8sQ0FBQ3NDLE9BQU8sRUFBRWxDLE9BQU8sQ0FBQ3VDLEdBQUcsV0FBSW5CLEdBQUcsd0JBQWNPLFFBQVEsRUFBRztnQkFDakU0QixPQUFPLEdBQUcsS0FBSztnQkFDZkMsSUFBSSxHQUFHLEVBQUU7Z0JBQUEsd0NBR0QsSUFBSSxDQUFDQyxPQUFPLENBQUN6QyxrQkFBa0IsRUFBRUMsTUFBTSxDQUFDO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQS9DbUIsR0FBRztnQkFBQSxNQUNGLFNBQVMsSUFBSSxJQUFJLENBQUN4QyxPQUFPO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUMzQjRELElBQUksa0JBQVdwQixHQUFHLE9BQUk7Z0JBQUE7Y0FBQTtnQkFHdEJvQixJQUFJLGtCQUFXcEIsR0FBRyxNQUFHO2NBQUE7Z0JBQUE7Z0JBQUEsT0FHRixJQUFJLENBQUNzQixHQUFHLENBQUN0QixHQUFHLEVBQUVULFFBQVEsRUFBRVYsTUFBTSxFQUFFRyxHQUFHLENBQUM7Y0FBQTtnQkFBbkR3QixNQUFNO2dCQUVaWSxJQUFJLGNBQU9aLE1BQU0sT0FBSTtnQkFBQSxNQUNqQkEsTUFBTSxJQUFJLElBQUk7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ2hCVyxPQUFPLEdBQUcsSUFBSTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBSVpwQixPQUFPLGFBQU1SLFFBQVE7Z0JBQzNCLElBQUk0QixPQUFPLEVBQUU7a0JBQ1gzQixtQkFBRSxDQUFDdUIsYUFBYSxDQUFDaEIsT0FBTyxFQUFFQyxHQUFHLENBQUM7Z0JBQ2hDLENBQUMsTUFBTSxJQUFJUixtQkFBRSxDQUFDQyxVQUFVLENBQUNNLE9BQU8sQ0FBQyxFQUFFO2tCQUNqQ1AsbUJBQUUsQ0FBQytCLFVBQVUsQ0FBQ3hCLE9BQU8sQ0FBQztnQkFDeEI7Z0JBQUMsTUFDR3FCLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM1RCxPQUFPLENBQUNnRSxNQUFNO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUNwQzVELE9BQU8sQ0FBQ3VDLEdBQUcsYUFDSnJDLFFBQVEsQ0FBQzJELFVBQVUsQ0FBQ3pDLEdBQUcsQ0FBQywwQkFBZ0JPLFFBQVEsZUFBSzZCLElBQUksQ0FBQ00sS0FBSyxDQUNsRSxDQUFDLEVBQ0QsQ0FBQyxDQUFDLENBQ0gsRUFDRjtnQkFBQSxrQ0FDTSxDQUFDO2NBQUE7Z0JBQUEsa0NBRUQsQ0FBQztjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUVYO01BQUE7UUFBQTtNQUFBO01BQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtNQUFBLG9GQUVEO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FBQTtnQkFDUUMsTUFBTSxhQUFNLElBQUksQ0FBQ25FLE9BQU8sQ0FBQ29FLE1BQU07Z0JBQUEsSUFDaENwQyxtQkFBRSxDQUFDQyxVQUFVLENBQUNrQyxNQUFNLENBQUM7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQ3hCL0QsT0FBTyxDQUFDNkMsS0FBSyxXQUFJa0IsTUFBTSx3Q0FBcUM7Z0JBQUEsa0NBQ3JELENBQUM7Y0FBQTtnQkFHSlYsU0FBUyxHQUFHWSxnQkFBSSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDdEUsT0FBTyxDQUFDb0UsTUFBTSxFQUFFLElBQUksQ0FBQ3BFLE9BQU8sQ0FBQ3VFLFdBQVcsQ0FBQztnQkFDMUV2QyxtQkFBRSxDQUFDd0MsYUFBYSxXQUFJZixTQUFTLFVBQU87Z0JBQUEsd0NBRWIsSUFBQWdCLHNCQUFRLEVBQUMsSUFBSSxDQUFDekUsT0FBTyxDQUFDMEUsSUFBSSxDQUFDO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQXZDQyxRQUFRO2dCQUNYOUQsUUFBUSxHQUFHLElBQUErRCxrQkFBSSxFQUFDRCxRQUFRLENBQUM7Z0JBQUEsTUFDM0IsU0FBUyxDQUFDRSxJQUFJLENBQUNoRSxRQUFRLENBQUNXLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQ3FELElBQUksQ0FBQ2hFLFFBQVEsQ0FBQ1csR0FBRyxDQUFDO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUEsd0NBQzdCLElBQUksQ0FBQ3NELHNCQUFzQixDQUFDakUsUUFBUSxDQUFDO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7a0JBQUE7a0JBQUE7Z0JBQUE7Z0JBQTNETyxrQkFBa0I7Z0JBQUEsS0FDdkIsU0FBUyxDQUFDeUQsSUFBSSxDQUFDekQsa0JBQWtCLENBQUNJLEdBQUcsQ0FBQztrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUN0Q3dCLE1BQU0sR0FBRyxDQUFDO2dCQUFBLGlCQUNPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztjQUFBO2dCQUFBO2tCQUFBO2tCQUFBO2dCQUFBO2dCQUF6QjNCLE1BQU07Z0JBQUEsZUFDZjJCLE1BQU07Z0JBQUE7Z0JBQUEsT0FBVSxJQUFJLENBQUMrQixRQUFRLENBQUN0QixTQUFTLEVBQUVyQyxrQkFBa0IsRUFBRUMsTUFBTSxDQUFDO2NBQUE7Z0JBQXBFMkIsTUFBTTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBRVIsSUFBSUEsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDaEQsT0FBTyxDQUFDZ0UsTUFBTSxFQUFFNUQsT0FBTyxDQUFDdUMsR0FBRyxDQUFDLEtBQUssQ0FBQztjQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQTtnQkFBQTtjQUFBO2dCQUFBO2dCQUFBO2dCQUFBO2NBQUE7Z0JBQUE7Z0JBQUE7Z0JBQUE7Y0FBQTtnQkFBQSxJQUlwRCxTQUFTLElBQUksSUFBSSxDQUFDM0MsT0FBTztrQkFBQTtrQkFBQTtnQkFBQTtnQkFBQTtnQkFBQSxPQUN2QixJQUFJLENBQUNnRixhQUFhLENBQUN2QixTQUFTLENBQUM7Y0FBQTtnQkFBQSxrQ0FHOUIsQ0FBQztjQUFBO2NBQUE7Z0JBQUE7WUFBQTtVQUFBO1FBQUE7TUFBQSxDQUNUO01BQUE7UUFBQTtNQUFBO01BQUE7SUFBQTtFQUFBO0lBQUE7SUFBQSxPQTNKRCwyQkFBeUJYLElBQVksRUFBRXpCLE1BQWMsRUFBb0I7TUFDdkUsSUFBSUEsTUFBTSxJQUFJLEtBQUssRUFBRTtRQUNuQixJQUFNNEQsTUFBTSxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ3JDLElBQUksQ0FBQ21DLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBTUcsSUFBSSxHQUFHdEMsSUFBSSxDQUFDb0IsS0FBSyxDQUFDLENBQUMsRUFBRWUsTUFBTSxDQUFDLENBQUN2QyxRQUFRLEVBQUU7UUFDN0MsSUFBSSxDQUFDMEMsSUFBSSxDQUFDQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQzFCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFhQyxrQkFBa0IsQ0FBQ0osSUFBSSxDQUFDLFNBQU07TUFDdEUsQ0FBQyxNQUFNLElBQUkvRCxNQUFNLElBQUksTUFBTSxFQUFFO1FBQzNCLElBQU00RCxPQUFNLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxDQUFDckMsSUFBSSxDQUFDbUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUN4QyxJQUFNRyxLQUFJLEdBQUd0QyxJQUFJLENBQUNvQixLQUFLLENBQUMsQ0FBQyxFQUFFZSxPQUFNLENBQUMsQ0FBQ3ZDLFFBQVEsRUFBRTtRQUM3QyxJQUFJLENBQUMwQyxLQUFJLENBQUNLLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDTCxLQUFJLENBQUNLLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtVQUN4RCxPQUFPLENBQ0xILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFDSEMsa0JBQWtCLENBQUNKLEtBQUksQ0FBQ2xCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FDakQ7UUFDSDtNQUNGO01BQ0EsT0FBTyxDQUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNyQjtFQUFDO0lBQUE7SUFBQSxPQXdERCxvQkFBa0J0QixHQUFXLEVBQVU7TUFDckMsSUFBTWdCLEdBQUcsR0FDUCx5R0FBeUc7TUFDM0csa0JBQVdoQixHQUFHLGVBQUtnQixHQUFHLGtCQUFRaEIsR0FBRztJQUNuQztFQUFDO0VBQUE7QUFBQTtBQUFBLFNBaUZZa0UsSUFBSTtFQUFBO0FBQUE7QUFPbkI7QUFBQTtFQUFBLG1FQVBBLGtCQUFvQnpHLElBQVM7SUFBQTtJQUFBO01BQUE7UUFBQTtVQUFBO1lBQ3JCZSxPQUFPLEdBQUdoQixTQUFTLENBQUNDLElBQUksQ0FBQztZQUFBLE1BQzNCZSxPQUFPLEtBQUssSUFBSTtjQUFBO2NBQUE7WUFBQTtZQUFBLGtDQUFTLENBQUM7VUFBQTtZQUN4QjJGLFFBQVEsR0FBRyxJQUFJckYsUUFBUSxDQUFDTixPQUFPLENBQUM7WUFBQSxrQ0FDL0IyRixRQUFRLENBQUNDLGlCQUFpQixFQUFFO1VBQUE7VUFBQTtZQUFBO1FBQUE7TUFBQTtJQUFBO0VBQUEsQ0FDcEM7RUFBQTtBQUFBO0FBR0QsSUFBSUMsT0FBTyxDQUFDNUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDNkcsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQ25ESixJQUFJLENBQUNHLE9BQU8sQ0FBQzVHLElBQUksQ0FBQyxDQUNmOEcsSUFBSSxDQUFDLFVBQUMvQyxNQUFNLEVBQUs7RUFDaEI2QyxPQUFPLENBQUNHLElBQUksQ0FBQ2hELE1BQU0sQ0FBQztBQUN0QixDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUNDLEtBQUssRUFBSztFQUNoQjdDLE9BQU8sQ0FBQzZDLEtBQUssQ0FBQ0EsS0FBSyxDQUFDO0VBQ3BCNEMsT0FBTyxDQUFDRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyJ9
|