@tricoteuses/senat 1.1.2 → 1.3.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.
Files changed (259) hide show
  1. package/README.md +53 -15
  2. package/lib/aggregates.d.ts +4 -6
  3. package/lib/aggregates.mjs +908 -780
  4. package/lib/aggregates.ts +8 -122
  5. package/lib/data/legislatures.json +38 -0
  6. package/lib/databases.d.ts +9 -0
  7. package/lib/databases.js +41 -11
  8. package/lib/databases.mjs +32 -1
  9. package/lib/databases.ts +40 -1
  10. package/lib/fields.mjs +64 -18
  11. package/lib/index.d.ts +5 -7
  12. package/lib/index.js +8 -112
  13. package/lib/index.mjs +4 -7
  14. package/lib/index.ts +9 -30
  15. package/lib/inserters.d.ts +0 -4
  16. package/lib/inserters.mjs +461 -337
  17. package/lib/inserters.ts +0 -24
  18. package/lib/legislatures.json +38 -0
  19. package/lib/loaders.d.ts +64 -0
  20. package/lib/loaders.js +682 -0
  21. package/lib/loaders.mjs +158 -0
  22. package/lib/loaders.ts +271 -0
  23. package/lib/model/ameli.d.ts +105 -4
  24. package/lib/model/ameli.js +20 -160
  25. package/lib/model/ameli.mjs +84 -57
  26. package/lib/model/ameli.ts +94 -80
  27. package/lib/model/debats.d.ts +0 -4
  28. package/lib/model/debats.js +1 -122
  29. package/lib/model/debats.mjs +1 -43
  30. package/lib/model/debats.ts +0 -68
  31. package/lib/model/dosleg.d.ts +227 -29
  32. package/lib/model/dosleg.js +92 -832
  33. package/lib/model/dosleg.mjs +196 -337
  34. package/lib/model/dosleg.ts +213 -531
  35. package/lib/model/index.d.ts +4 -5
  36. package/lib/model/index.js +14 -15
  37. package/lib/model/index.mjs +4 -5
  38. package/lib/model/index.ts +8 -5
  39. package/lib/model/questions.d.ts +88 -2
  40. package/lib/model/questions.js +40 -45
  41. package/lib/model/questions.mjs +71 -8
  42. package/lib/model/questions.ts +90 -11
  43. package/lib/model/sens.d.ts +524 -2
  44. package/lib/model/sens.js +172 -49
  45. package/lib/model/sens.mjs +415 -9
  46. package/lib/model/sens.ts +514 -16
  47. package/lib/model/texte.d.ts +7 -0
  48. package/lib/model/texte.js +321 -0
  49. package/lib/model/texte.mjs +208 -0
  50. package/lib/model/texte.ts +229 -0
  51. package/lib/model/util.d.ts +7 -1
  52. package/lib/model/util.js +37 -53
  53. package/lib/model/util.mjs +19 -10
  54. package/lib/model/util.ts +30 -14
  55. package/lib/raw_types/ameli.d.ts +912 -538
  56. package/lib/raw_types/ameli.js +1 -39
  57. package/lib/raw_types/ameli.mjs +4 -1
  58. package/lib/raw_types/ameli.ts +947 -597
  59. package/lib/raw_types/debats.d.ts +204 -124
  60. package/lib/raw_types/debats.js +1 -18
  61. package/lib/raw_types/debats.mjs +4 -1
  62. package/lib/raw_types/debats.ts +218 -141
  63. package/lib/raw_types/dosleg.d.ts +3533 -2024
  64. package/lib/raw_types/dosleg.js +1 -92
  65. package/lib/raw_types/dosleg.mjs +4 -1
  66. package/lib/raw_types/dosleg.ts +3621 -2189
  67. package/lib/raw_types/questions.d.ts +404 -220
  68. package/lib/raw_types/questions.js +1 -18
  69. package/lib/raw_types/questions.mjs +4 -1
  70. package/lib/raw_types/questions.ts +404 -226
  71. package/lib/raw_types/sens.d.ts +4391 -2706
  72. package/lib/raw_types/sens.js +1 -108
  73. package/lib/raw_types/sens.mjs +4 -1
  74. package/lib/raw_types/sens.ts +4495 -2903
  75. package/lib/raw_types_kysely/ameli.d.ts +6 -0
  76. package/lib/raw_types_kysely/ameli.mjs +7 -0
  77. package/lib/raw_types_kysely/ameli.ts +6 -0
  78. package/lib/raw_types_kysely/debats.d.ts +6 -0
  79. package/lib/raw_types_kysely/debats.mjs +7 -0
  80. package/lib/raw_types_kysely/debats.ts +6 -0
  81. package/lib/raw_types_kysely/dosleg.d.ts +6 -0
  82. package/lib/raw_types_kysely/dosleg.mjs +7 -0
  83. package/lib/raw_types_kysely/dosleg.ts +6 -0
  84. package/lib/raw_types_kysely/questions.d.ts +6 -0
  85. package/lib/raw_types_kysely/questions.mjs +7 -0
  86. package/lib/raw_types_kysely/questions.ts +6 -0
  87. package/lib/raw_types_kysely/sens.d.ts +6 -0
  88. package/lib/raw_types_kysely/sens.mjs +7 -0
  89. package/lib/raw_types_kysely/sens.ts +6 -0
  90. package/lib/raw_types_kysely/texte.d.ts +45 -0
  91. package/lib/raw_types_kysely/texte.mjs +7 -0
  92. package/lib/raw_types_kysely/texte.ts +53 -0
  93. package/lib/raw_types_schemats/ameli.d.ts +541 -0
  94. package/lib/raw_types_schemats/ameli.js +45 -0
  95. package/lib/raw_types_schemats/ameli.mjs +2 -0
  96. package/lib/raw_types_schemats/ameli.ts +601 -0
  97. package/lib/raw_types_schemats/debats.d.ts +127 -0
  98. package/lib/raw_types_schemats/debats.js +24 -0
  99. package/lib/raw_types_schemats/debats.mjs +2 -0
  100. package/lib/raw_types_schemats/debats.ts +145 -0
  101. package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
  102. package/lib/raw_types_schemats/dosleg.js +98 -0
  103. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  104. package/lib/raw_types_schemats/dosleg.ts +2195 -0
  105. package/lib/raw_types_schemats/questions.d.ts +233 -0
  106. package/lib/raw_types_schemats/questions.js +24 -0
  107. package/lib/raw_types_schemats/questions.mjs +2 -0
  108. package/lib/raw_types_schemats/questions.ts +251 -0
  109. package/lib/raw_types_schemats/sens.d.ts +2709 -0
  110. package/lib/raw_types_schemats/sens.js +114 -0
  111. package/lib/raw_types_schemats/sens.mjs +2 -0
  112. package/lib/raw_types_schemats/sens.ts +2907 -0
  113. package/lib/scripts/convert_data.js +574 -215
  114. package/lib/scripts/convert_data.mjs +134 -99
  115. package/lib/scripts/convert_data.ts +173 -112
  116. package/lib/scripts/datautil.d.ts +5 -0
  117. package/lib/scripts/datautil.js +64 -0
  118. package/lib/scripts/datautil.mjs +16 -0
  119. package/lib/scripts/datautil.ts +19 -0
  120. package/lib/scripts/parse_textes.js +132 -0
  121. package/lib/scripts/parse_textes.mjs +46 -0
  122. package/lib/scripts/parse_textes.ts +65 -0
  123. package/lib/scripts/retrieve_documents.d.ts +1 -0
  124. package/lib/scripts/retrieve_documents.js +521 -0
  125. package/lib/scripts/retrieve_documents.mjs +249 -0
  126. package/lib/scripts/retrieve_documents.ts +298 -0
  127. package/lib/scripts/retrieve_open_data.js +77 -69
  128. package/lib/scripts/retrieve_open_data.mjs +48 -49
  129. package/lib/scripts/retrieve_open_data.ts +74 -58
  130. package/lib/scripts/retrieve_senateurs_photos.js +45 -63
  131. package/lib/scripts/retrieve_senateurs_photos.mjs +4 -21
  132. package/lib/scripts/retrieve_senateurs_photos.ts +6 -29
  133. package/lib/scripts/retrieve_textes.mjs +325 -74
  134. package/lib/scripts/retrieve_textes.ts +111 -63
  135. package/lib/scripts/shared/cli_helpers.d.ts +44 -0
  136. package/lib/scripts/shared/cli_helpers.js +35 -0
  137. package/lib/scripts/shared/cli_helpers.ts +36 -0
  138. package/lib/scripts/shared/util.d.ts +3 -0
  139. package/lib/scripts/shared/util.js +102 -0
  140. package/lib/scripts/shared/util.ts +33 -0
  141. package/lib/src/aggregates.d.ts +52 -0
  142. package/lib/src/aggregates.mjs +726 -0
  143. package/lib/src/config.d.ts +2 -0
  144. package/lib/src/config.mjs +16 -0
  145. package/lib/src/databases.d.ts +18 -0
  146. package/lib/src/databases.mjs +55 -0
  147. package/lib/src/datasets.d.ts +28 -0
  148. package/lib/src/datasets.mjs +78 -0
  149. package/lib/src/fields.d.ts +10 -0
  150. package/lib/src/fields.mjs +22 -0
  151. package/lib/src/index.d.ts +8 -0
  152. package/lib/src/index.mjs +7 -0
  153. package/lib/src/inserters.d.ts +98 -0
  154. package/lib/src/inserters.mjs +360 -0
  155. package/lib/src/loaders.d.ts +36 -0
  156. package/lib/src/loaders.mjs +107 -0
  157. package/lib/src/model/ameli.d.ts +4 -0
  158. package/lib/src/model/ameli.js +57 -0
  159. package/lib/src/model/debats.d.ts +4 -0
  160. package/lib/src/model/debats.js +43 -0
  161. package/lib/src/model/dosleg.d.ts +197 -0
  162. package/lib/src/model/dosleg.js +169 -0
  163. package/lib/src/model/index.d.ts +4 -0
  164. package/lib/src/model/index.js +4 -0
  165. package/lib/src/model/questions.d.ts +89 -0
  166. package/lib/src/model/questions.js +76 -0
  167. package/lib/src/model/sens.d.ts +390 -0
  168. package/lib/src/model/sens.js +339 -0
  169. package/lib/src/model/texte.d.ts +7 -0
  170. package/lib/src/model/texte.js +183 -0
  171. package/lib/src/raw_types_kysely/ameli.d.ts +915 -0
  172. package/lib/src/raw_types_kysely/ameli.js +5 -0
  173. package/lib/src/raw_types_kysely/debats.d.ts +207 -0
  174. package/lib/src/raw_types_kysely/debats.js +5 -0
  175. package/lib/src/raw_types_kysely/dosleg.d.ts +3532 -0
  176. package/lib/src/raw_types_kysely/dosleg.js +5 -0
  177. package/lib/src/raw_types_kysely/questions.d.ts +414 -0
  178. package/lib/src/raw_types_kysely/questions.js +5 -0
  179. package/lib/src/raw_types_kysely/sens.d.ts +4394 -0
  180. package/lib/src/raw_types_kysely/sens.js +5 -0
  181. package/lib/src/raw_types_schemats/ameli.d.ts +541 -0
  182. package/lib/src/raw_types_schemats/ameli.js +2 -0
  183. package/lib/src/raw_types_schemats/debats.d.ts +127 -0
  184. package/lib/src/raw_types_schemats/debats.js +2 -0
  185. package/lib/src/raw_types_schemats/dosleg.d.ts +2027 -0
  186. package/lib/src/raw_types_schemats/dosleg.js +2 -0
  187. package/lib/src/raw_types_schemats/questions.d.ts +231 -0
  188. package/lib/src/raw_types_schemats/questions.js +2 -0
  189. package/lib/src/raw_types_schemats/sens.d.ts +2709 -0
  190. package/lib/src/raw_types_schemats/sens.js +2 -0
  191. package/lib/src/scripts/convert_data.d.ts +1 -0
  192. package/lib/src/scripts/convert_data.js +95 -0
  193. package/lib/src/scripts/datautil.d.ts +5 -0
  194. package/lib/src/scripts/datautil.js +16 -0
  195. package/lib/src/scripts/parse_textes.d.ts +1 -0
  196. package/lib/src/scripts/parse_textes.js +47 -0
  197. package/lib/src/scripts/retrieve_documents.d.ts +1 -0
  198. package/lib/src/scripts/retrieve_documents.js +258 -0
  199. package/lib/src/scripts/retrieve_open_data.d.ts +1 -0
  200. package/lib/src/scripts/retrieve_open_data.js +214 -0
  201. package/lib/src/scripts/retrieve_senateurs_photos.d.ts +1 -0
  202. package/lib/src/scripts/retrieve_senateurs_photos.js +147 -0
  203. package/lib/src/scripts/shared/cli_helpers.d.ts +44 -0
  204. package/lib/src/scripts/shared/cli_helpers.js +32 -0
  205. package/lib/src/scripts/shared/util.d.ts +3 -0
  206. package/lib/src/scripts/shared/util.js +28 -0
  207. package/lib/src/strings.d.ts +1 -0
  208. package/lib/src/strings.mjs +18 -0
  209. package/lib/src/types/ameli.d.ts +10 -0
  210. package/lib/src/types/ameli.js +13 -0
  211. package/lib/src/types/debats.d.ts +4 -0
  212. package/lib/src/types/debats.js +2 -0
  213. package/lib/src/types/dosleg.d.ts +98 -0
  214. package/lib/src/types/dosleg.js +151 -0
  215. package/lib/src/types/questions.d.ts +2 -0
  216. package/lib/src/types/questions.js +1 -0
  217. package/lib/src/types/sens.d.ts +10 -0
  218. package/lib/src/types/sens.js +1 -0
  219. package/lib/src/types/sessions.d.ts +42 -0
  220. package/lib/src/types/sessions.js +43 -0
  221. package/lib/src/types/texte.d.ts +61 -0
  222. package/lib/src/types/texte.js +16 -0
  223. package/lib/src/validators/config.d.ts +1 -0
  224. package/lib/src/validators/config.js +54 -0
  225. package/lib/src/validators/senat.d.ts +0 -0
  226. package/lib/src/validators/senat.js +24 -0
  227. package/lib/types/ameli.d.ts +1 -1
  228. package/lib/types/ameli.js +2 -2
  229. package/lib/types/ameli.ts +1 -1
  230. package/lib/types/debats.d.ts +1 -1
  231. package/lib/types/debats.js +2 -2
  232. package/lib/types/debats.ts +1 -1
  233. package/lib/types/dosleg.d.ts +2 -2
  234. package/lib/types/dosleg.js +2 -2
  235. package/lib/types/dosleg.ts +2 -2
  236. package/lib/types/questions.d.ts +1 -1
  237. package/lib/types/questions.js +2 -2
  238. package/lib/types/questions.ts +1 -1
  239. package/lib/types/sens.d.ts +1 -3
  240. package/lib/types/sens.js +2 -5
  241. package/lib/types/sens.mjs +1 -23
  242. package/lib/types/sens.ts +1 -25
  243. package/lib/types/sessions.d.ts +42 -0
  244. package/lib/types/sessions.js +51 -0
  245. package/lib/types/sessions.mjs +43 -0
  246. package/lib/types/sessions.ts +42 -0
  247. package/lib/types/texte.d.ts +65 -0
  248. package/lib/types/texte.js +24 -0
  249. package/lib/types/texte.mjs +16 -0
  250. package/lib/types/texte.ts +76 -0
  251. package/package.json +35 -10
  252. package/lib/aggregates.js +0 -1122
  253. package/lib/fields.js +0 -68
  254. package/lib/inserters.js +0 -518
  255. package/lib/scripts/fix_db.js +0 -144
  256. package/lib/scripts/fix_db.mjs +0 -64
  257. package/lib/scripts/fix_db.ts +0 -75
  258. package/lib/scripts/retrieve_textes.js +0 -179
  259. /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
package/lib/inserters.js DELETED
@@ -1,518 +0,0 @@
1
- "use strict";
2
-
3
- require("core-js/modules/es.symbol.js");
4
- require("core-js/modules/es.symbol.description.js");
5
- require("core-js/modules/es.symbol.iterator.js");
6
- require("core-js/modules/es.array.from.js");
7
- require("core-js/modules/es.array.is-array.js");
8
- require("core-js/modules/es.array.slice.js");
9
- require("core-js/modules/es.function.name.js");
10
- require("core-js/modules/es.object.define-property.js");
11
- require("core-js/modules/es.regexp.exec.js");
12
- require("core-js/modules/es.regexp.to-string.js");
13
- Object.defineProperty(exports, "__esModule", {
14
- value: true
15
- });
16
- exports.insertAudReferences = insertAudReferences;
17
- exports.insertAuteurReferences = insertAuteurReferences;
18
- exports.insertDateSeanceReferences = insertDateSeanceReferences;
19
- exports.insertDocAttReferences = insertDocAttReferences;
20
- exports.insertEcrReferences = insertEcrReferences;
21
- exports.insertLecassReferences = insertLecassReferences;
22
- exports.insertLecassrapReferences = insertLecassrapReferences;
23
- exports.insertLectureReferences = insertLectureReferences;
24
- exports.insertLoiReferences = insertLoiReferences;
25
- exports.insertQuestionReferences = insertQuestionReferences;
26
- exports.insertRapReferences = insertRapReferences;
27
- exports.insertSenReferences = insertSenReferences;
28
- exports.insertTexteReferences = insertTexteReferences;
29
- require("core-js/modules/es.array.concat.js");
30
- require("core-js/modules/es.array.iterator.js");
31
- require("core-js/modules/es.date.to-iso-string.js");
32
- require("core-js/modules/es.date.to-string.js");
33
- require("core-js/modules/es.object.to-string.js");
34
- require("core-js/modules/es.set.js");
35
- require("core-js/modules/es.string.iterator.js");
36
- require("core-js/modules/web.dom-collections.iterator.js");
37
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
38
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
39
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
40
- function insertAudReferences(aud, data, visitedIdsByTableName) {
41
- var visitedIds = visitedIdsByTableName.aud;
42
- if (visitedIds === undefined) {
43
- visitedIds = visitedIdsByTableName.aud = new Set();
44
- }
45
- if (!visitedIds.has(aud.audcle)) {
46
- visitedIds.add(aud.audcle);
47
- if (aud.orgcod !== null && data.org !== undefined) {
48
- var org = data.org[aud.orgcod];
49
- if (org !== undefined) {
50
- aud.org = org;
51
- // insertOrgReferences(org, data, visitedIdsByTableName)
52
- }
53
- }
54
-
55
- // TODO
56
- }
57
- return aud;
58
- }
59
- function insertAuteurReferences(auteur, data, visitedIdsByTableName) {
60
- var visitedIds = visitedIdsByTableName.auteur;
61
- if (visitedIds === undefined) {
62
- visitedIds = visitedIdsByTableName.auteur = new Set();
63
- }
64
- if (!visitedIds.has(auteur.autcod)) {
65
- visitedIds.add(auteur.autcod);
66
- if (data.qua !== undefined) {
67
- var qua = data.qua[auteur.quacod];
68
- if (qua !== undefined) {
69
- auteur.qua = qua;
70
- // insertQuaReferences(qua, data, visitedIdsByTableName)
71
- }
72
- }
73
-
74
- // TODO
75
- }
76
- return auteur;
77
- }
78
- function insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName) {
79
- var visitedIds = visitedIdsByTableName.date_seance;
80
- if (visitedIds === undefined) {
81
- visitedIds = visitedIdsByTableName.date_seance = new Set();
82
- }
83
- if (!visitedIds.has(dateSeance.code)) {
84
- visitedIds.add(dateSeance.code);
85
- if (dateSeance.date_s !== null && data.debats !== undefined) {
86
- var dateString = dateSeance.date_s instanceof Date ? dateSeance.date_s.toISOString() : dateSeance.date_s;
87
- var debat = data.debats[dateString];
88
- if (debat !== undefined) {
89
- dateSeance.debat = debat;
90
- // insertDebatReferences(debat, data, visitedIdsByTableName)
91
- }
92
- }
93
- dateSeance.scrs = [];
94
- if (dateSeance.scrids !== undefined && data.scr !== undefined) {
95
- var _iterator = _createForOfIteratorHelper(dateSeance.scrids),
96
- _step;
97
- try {
98
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
99
- var scrid = _step.value;
100
- var scr = data.scr[scrid];
101
- if (scr !== undefined) {
102
- dateSeance.scrs.push(scr);
103
- // insertScrReferences(scr, data, visitedIdsByTableName)
104
- }
105
- }
106
- } catch (err) {
107
- _iterator.e(err);
108
- } finally {
109
- _iterator.f();
110
- }
111
- }
112
- }
113
- return dateSeance;
114
- }
115
- function insertDocAttReferences(docatt, data, visitedIdsByTableName) {
116
- var performInsertRapReferences = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
117
- var visitedIds = visitedIdsByTableName.docatt;
118
- if (visitedIds === undefined) {
119
- visitedIds = visitedIdsByTableName.docatt = new Set();
120
- }
121
- if (!visitedIds.has(docatt.docattcle)) {
122
- visitedIds.add(docatt.docattcle);
123
- if (performInsertRapReferences && docatt.rapcod !== null && data.rap !== undefined) {
124
- var rap = data.rap[docatt.rapcod];
125
- if (rap !== undefined) {
126
- docatt.rap = rap;
127
- insertRapReferences(rap, data, visitedIdsByTableName);
128
- }
129
- }
130
- if (docatt.typattcod !== null && data.typatt !== undefined) {
131
- var typatt = data.typatt[docatt.typattcod];
132
- if (typatt !== undefined) {
133
- docatt.typatt = typatt;
134
- // insertTypAttReferences(typatt, data, visitedIdsByTableName)
135
- }
136
- }
137
- }
138
- return docatt;
139
- }
140
- function insertEcrReferences(ecr, data, visitedIdsByTableName) {
141
- var visitedIds = visitedIdsByTableName.ecr;
142
- if (visitedIds === undefined) {
143
- visitedIds = visitedIdsByTableName.ecr = new Set();
144
- }
145
- if (!visitedIds.has(ecr.ecrnum)) {
146
- visitedIds.add(ecr.ecrnum);
147
- if (ecr.autcod !== null && data.auteur !== undefined) {
148
- var aut = data.auteur[ecr.autcod];
149
- if (aut !== undefined) {
150
- ecr.aut = aut;
151
- insertAuteurReferences(aut, data, visitedIdsByTableName);
152
- }
153
- }
154
-
155
- // TODO
156
- }
157
- return ecr;
158
- }
159
- function insertLecassrapReferences(lecassrap, data, visitedIdsByTableName) {
160
- var visitedIds = visitedIdsByTableName.lecassrap;
161
- if (visitedIds === undefined) {
162
- visitedIds = visitedIdsByTableName.lecassrap = new Set();
163
- }
164
- var lecasrapid = "".concat(lecassrap.lecassidt, " ").concat(lecassrap.rapcod);
165
- if (!visitedIds.has(lecasrapid)) {
166
- visitedIds.add(lecasrapid);
167
- if (lecassrap.rapcod !== null && data.rap !== undefined) {
168
- var rap = data.rap[lecassrap.rapcod];
169
- if (rap !== undefined) {
170
- lecassrap.rap = rap;
171
- insertRapReferences(rap, data, visitedIdsByTableName);
172
- }
173
- }
174
- }
175
- return lecassrap;
176
- }
177
- function insertLecassReferences(lecass, data, visitedIdsByTableName) {
178
- var visitedIds = visitedIdsByTableName.lecass;
179
- if (visitedIds === undefined) {
180
- visitedIds = visitedIdsByTableName.lecass = new Set();
181
- }
182
- if (!visitedIds.has(lecass.lecassidt)) {
183
- visitedIds.add(lecass.lecassidt);
184
- if (lecass.codass !== null && data.ass !== undefined) {
185
- var ass = data.ass[lecass.codass];
186
- if (ass !== undefined) {
187
- lecass.ass = ass;
188
- // insertAssReferences(ass, data, visitedIdsByTableName)
189
- }
190
- }
191
- if (lecass.orgcod !== null && data.org !== undefined) {
192
- var org = data.org[lecass.orgcod];
193
- if (org !== undefined) {
194
- lecass.org = org;
195
- // insertOrgReferences(org, data, visitedIdsByTableName)
196
- }
197
- }
198
- lecass.auds = [];
199
- if (lecass.audcles !== undefined && data.aud !== undefined) {
200
- var _iterator2 = _createForOfIteratorHelper(lecass.audcles),
201
- _step2;
202
- try {
203
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
204
- var audcle = _step2.value;
205
- var aud = data.aud[audcle];
206
- if (aud !== undefined) {
207
- lecass.auds.push(aud);
208
- insertAudReferences(aud, data, visitedIdsByTableName);
209
- }
210
- }
211
- } catch (err) {
212
- _iterator2.e(err);
213
- } finally {
214
- _iterator2.f();
215
- }
216
- }
217
- lecass.datesSeances = [];
218
- if (lecass.datesSeancesCodes !== undefined && data.date_seance !== undefined) {
219
- var _iterator3 = _createForOfIteratorHelper(lecass.datesSeancesCodes),
220
- _step3;
221
- try {
222
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
223
- var dateSeanceCode = _step3.value;
224
- var dateSeance = data.date_seance[dateSeanceCode];
225
- if (dateSeance !== undefined) {
226
- lecass.datesSeances.push(dateSeance);
227
- insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName);
228
- }
229
- }
230
- } catch (err) {
231
- _iterator3.e(err);
232
- } finally {
233
- _iterator3.f();
234
- }
235
- }
236
- lecass.lecassraps = [];
237
- if (lecass.lecassrapids !== undefined && data.lecassrap !== undefined) {
238
- var _iterator4 = _createForOfIteratorHelper(lecass.lecassrapids),
239
- _step4;
240
- try {
241
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
242
- var lecassrapid = _step4.value;
243
- var lecassrap = data.lecassrap[lecassrapid];
244
- if (lecassrap !== undefined) {
245
- lecass.lecassraps.push(lecassrap);
246
- insertLecassrapReferences(lecassrap, data, visitedIdsByTableName);
247
- }
248
- }
249
- } catch (err) {
250
- _iterator4.e(err);
251
- } finally {
252
- _iterator4.f();
253
- }
254
- }
255
- lecass.textes = [];
256
- if (lecass.texcods !== undefined && data.texte !== undefined) {
257
- var _iterator5 = _createForOfIteratorHelper(lecass.texcods),
258
- _step5;
259
- try {
260
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
261
- var texcod = _step5.value;
262
- var texte = data.texte[texcod];
263
- if (texte !== undefined) {
264
- lecass.textes.push(texte);
265
- insertTexteReferences(texte, data, visitedIdsByTableName);
266
- }
267
- }
268
- } catch (err) {
269
- _iterator5.e(err);
270
- } finally {
271
- _iterator5.f();
272
- }
273
- }
274
- }
275
- return lecass;
276
- }
277
- function insertLectureReferences(lecture, data, visitedIdsByTableName) {
278
- var visitedIds = visitedIdsByTableName.lecture;
279
- if (visitedIds === undefined) {
280
- visitedIds = visitedIdsByTableName.lecture = new Set();
281
- }
282
- if (!visitedIds.has(lecture.lecidt)) {
283
- visitedIds.add(lecture.lecidt);
284
- if (lecture.typleccod !== null && data.typlec !== undefined) {
285
- var typlec = data.typlec[lecture.typleccod];
286
- if (typlec !== undefined) {
287
- lecture.typlec = typlec;
288
- // insertTyplecReferences(typlec, data, visitedIdsByTableName)
289
- }
290
- }
291
- lecture.lecasss = [];
292
- if (lecture.lecassidts !== undefined && data.lecass !== undefined) {
293
- var _iterator6 = _createForOfIteratorHelper(lecture.lecassidts),
294
- _step6;
295
- try {
296
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
297
- var lecassidt = _step6.value;
298
- var lecass = data.lecass[lecassidt];
299
- if (lecass !== undefined) {
300
- lecture.lecasss.push(lecass);
301
- insertLecassReferences(lecass, data, visitedIdsByTableName);
302
- }
303
- }
304
- } catch (err) {
305
- _iterator6.e(err);
306
- } finally {
307
- _iterator6.f();
308
- }
309
- }
310
- }
311
- return lecture;
312
- }
313
- function insertLoiReferences(loi, data, visitedIdsByTableName) {
314
- var visitedIds = visitedIdsByTableName.loi;
315
- if (visitedIds === undefined) {
316
- visitedIds = visitedIdsByTableName.loi = new Set();
317
- }
318
- if (!visitedIds.has(loi.loicod)) {
319
- visitedIds.add(loi.loicod);
320
- if (loi.typloicod !== null && data.typloi !== undefined) {
321
- var typloi = data.typloi[loi.typloicod];
322
- if (typloi !== undefined) {
323
- loi.typloi = typloi;
324
- // insertTyploiReferences(typloi, data, visitedIdsByTableName)
325
- }
326
- }
327
- if (loi.etaloicod !== null && data.etaloi !== undefined) {
328
- var etaloi = data.etaloi[loi.etaloicod];
329
- if (etaloi !== undefined) {
330
- loi.etaloi = etaloi;
331
- // insertEtaloiReferences(etaloi, data, visitedIdsByTableName)
332
- }
333
- }
334
- if (loi.deccoccod !== null && data.deccoc !== undefined) {
335
- var deccoc = data.deccoc[loi.deccoccod];
336
- if (deccoc !== undefined) {
337
- loi.deccoc = deccoc;
338
- // insertDeccocReferences(deccoc, data, visitedIdsByTableName)
339
- }
340
- }
341
- loi.lectures = [];
342
- if (loi.lecidts !== undefined && data.lecture !== undefined) {
343
- var _iterator7 = _createForOfIteratorHelper(loi.lecidts),
344
- _step7;
345
- try {
346
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
347
- var lecidt = _step7.value;
348
- var lecture = data.lecture[lecidt];
349
- if (lecture !== undefined) {
350
- loi.lectures.push(lecture);
351
- insertLectureReferences(lecture, data, visitedIdsByTableName);
352
- }
353
- }
354
- } catch (err) {
355
- _iterator7.e(err);
356
- } finally {
357
- _iterator7.f();
358
- }
359
- }
360
- }
361
- return loi;
362
- }
363
- function insertQuestionReferences(question,
364
- // @ts-ignore TO BE REMOVED WHEN DONE
365
- data,
366
- // @ts-ignore TO BE REMOVED WHEN DONE
367
- visitedIdsByTableName) {
368
- // TODO
369
- return question;
370
- }
371
- function insertRapReferences(rap, data, visitedIdsByTableName) {
372
- var visitedIds = visitedIdsByTableName.rap;
373
- if (visitedIds === undefined) {
374
- visitedIds = visitedIdsByTableName.rap = new Set();
375
- }
376
- if (!visitedIds.has(rap.rapcod)) {
377
- visitedIds.add(rap.rapcod);
378
- if (rap.coddenrap !== null && data.denrap !== undefined) {
379
- var denrap = data.denrap[rap.coddenrap];
380
- if (denrap !== undefined) {
381
- rap.denrap = denrap;
382
- // insertDenrapReferences(denrap, data, visitedIdsByTableName)
383
- }
384
- }
385
- rap.docatts = [];
386
- if (rap.docattcles !== undefined && data.docatt !== undefined) {
387
- var _iterator8 = _createForOfIteratorHelper(rap.docattcles),
388
- _step8;
389
- try {
390
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
391
- var docattcle = _step8.value;
392
- var docatt = data.docatt[docattcle];
393
- if (docatt !== undefined) {
394
- rap.docatts.push(docatt);
395
- insertDocAttReferences(docatt, data, visitedIdsByTableName, false);
396
- }
397
- }
398
- } catch (err) {
399
- _iterator8.e(err);
400
- } finally {
401
- _iterator8.f();
402
- }
403
- }
404
- rap.ecrs = [];
405
- if (rap.ecrnums !== undefined && data.ecr !== undefined) {
406
- var _iterator9 = _createForOfIteratorHelper(rap.ecrnums),
407
- _step9;
408
- try {
409
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
410
- var ecrnum = _step9.value;
411
- var ecr = data.ecr[ecrnum];
412
- if (ecr !== undefined) {
413
- rap.ecrs.push(ecr);
414
- insertEcrReferences(ecr, data, visitedIdsByTableName);
415
- }
416
- }
417
- } catch (err) {
418
- _iterator9.e(err);
419
- } finally {
420
- _iterator9.f();
421
- }
422
- }
423
- rap.orgs = [];
424
- if (rap.orgcods !== undefined && data.org !== undefined) {
425
- var _iterator10 = _createForOfIteratorHelper(rap.orgcods),
426
- _step10;
427
- try {
428
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
429
- var orgcod = _step10.value;
430
- var org = data.org[orgcod];
431
- if (org !== undefined) {
432
- rap.orgs.push(org);
433
- // insertOrgReferences(org, data, visitedIdsByTableName)
434
- }
435
- }
436
- } catch (err) {
437
- _iterator10.e(err);
438
- } finally {
439
- _iterator10.f();
440
- }
441
- }
442
- }
443
- return rap;
444
- }
445
- function insertSenReferences(sen,
446
- // @ts-ignore TO BE REMOVED WHEN DONE
447
- data,
448
- // @ts-ignore TO BE REMOVED WHEN DONE
449
- visitedIdsByTableName) {
450
- // TODO
451
- return sen;
452
- }
453
- function insertTexteReferences(texte, data, visitedIdsByTableName) {
454
- var visitedIds = visitedIdsByTableName.texte;
455
- if (visitedIds === undefined) {
456
- visitedIds = visitedIdsByTableName.texte = new Set();
457
- }
458
- if (!visitedIds.has(texte.texcod)) {
459
- visitedIds.add(texte.texcod);
460
- texte.ecrs = [];
461
- if (texte.ecrnums !== undefined && data.ecr !== undefined) {
462
- var _iterator11 = _createForOfIteratorHelper(texte.ecrnums),
463
- _step11;
464
- try {
465
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
466
- var ecrnum = _step11.value;
467
- var ecr = data.ecr[ecrnum];
468
- if (ecr !== undefined) {
469
- texte.ecrs.push(ecr);
470
- insertEcrReferences(ecr, data, visitedIdsByTableName);
471
- }
472
- }
473
- } catch (err) {
474
- _iterator11.e(err);
475
- } finally {
476
- _iterator11.f();
477
- }
478
- }
479
- if (texte.orgcod !== null && data.org !== undefined) {
480
- var org = data.org[texte.orgcod];
481
- if (org !== undefined) {
482
- texte.org = org;
483
- // insertOrgReferences(org, data, visitedIdsByTableName)
484
- }
485
- }
486
- if (texte.oritxtcod !== null && data.oritxt !== undefined) {
487
- var oritxt = data.oritxt[texte.oritxtcod];
488
- if (oritxt !== undefined) {
489
- texte.oritxt = oritxt;
490
- // insertOritxtReferences(oritxt, data, visitedIdsByTableName)
491
- }
492
- }
493
- if (texte.txtAmeliId !== undefined && data.txt_ameli !== undefined) {
494
- var txtAmeli = data.txt_ameli[texte.txtAmeliId];
495
- if (txtAmeli !== undefined) {
496
- texte.txtAmeli = txtAmeli;
497
- }
498
- }
499
- if (texte.typtxtcod !== null && data.typtxt !== undefined) {
500
- var typtxt = data.typtxt[texte.typtxtcod];
501
- if (typtxt !== undefined) {
502
- texte.typtxt = typtxt;
503
- // insertTyptxtReferences(typtxt, data, visitedIdsByTableName)
504
- }
505
- }
506
- if (texte.typurl !== null && data.typurl !== undefined) {
507
- var typurl = data.typurl[texte.typurl];
508
- if (typurl !== undefined) {
509
- texte.libtypurl = typurl.libtypurl;
510
- // insertTypurlReferences(typurl, data, visitedIdsByTableName)
511
- }
512
- }
513
-
514
- // TODO
515
- }
516
- return texte;
517
- }
518
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBdWRSZWZlcmVuY2VzIiwiYXVkIiwiZGF0YSIsInZpc2l0ZWRJZHNCeVRhYmxlTmFtZSIsInZpc2l0ZWRJZHMiLCJ1bmRlZmluZWQiLCJTZXQiLCJoYXMiLCJhdWRjbGUiLCJhZGQiLCJvcmdjb2QiLCJvcmciLCJpbnNlcnRBdXRldXJSZWZlcmVuY2VzIiwiYXV0ZXVyIiwiYXV0Y29kIiwicXVhIiwicXVhY29kIiwiaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMiLCJkYXRlU2VhbmNlIiwiZGF0ZV9zZWFuY2UiLCJjb2RlIiwiZGF0ZV9zIiwiZGViYXRzIiwiZGF0ZVN0cmluZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImRlYmF0Iiwic2NycyIsInNjcmlkcyIsInNjciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJzY3JpZCIsInZhbHVlIiwicHVzaCIsImVyciIsImUiLCJmIiwiaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyIsImRvY2F0dCIsInBlcmZvcm1JbnNlcnRSYXBSZWZlcmVuY2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZG9jYXR0Y2xlIiwicmFwY29kIiwicmFwIiwiaW5zZXJ0UmFwUmVmZXJlbmNlcyIsInR5cGF0dGNvZCIsInR5cGF0dCIsImluc2VydEVjclJlZmVyZW5jZXMiLCJlY3IiLCJlY3JudW0iLCJhdXQiLCJpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzIiwibGVjYXNzcmFwIiwibGVjYXNyYXBpZCIsImNvbmNhdCIsImxlY2Fzc2lkdCIsImluc2VydExlY2Fzc1JlZmVyZW5jZXMiLCJsZWNhc3MiLCJjb2Rhc3MiLCJhc3MiLCJhdWRzIiwiYXVkY2xlcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJkYXRlc1NlYW5jZXMiLCJkYXRlc1NlYW5jZXNDb2RlcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJkYXRlU2VhbmNlQ29kZSIsImxlY2Fzc3JhcHMiLCJsZWNhc3NyYXBpZHMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibGVjYXNzcmFwaWQiLCJ0ZXh0ZXMiLCJ0ZXhjb2RzIiwidGV4dGUiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwidGV4Y29kIiwiaW5zZXJ0VGV4dGVSZWZlcmVuY2VzIiwiaW5zZXJ0TGVjdHVyZVJlZmVyZW5jZXMiLCJsZWN0dXJlIiwibGVjaWR0IiwidHlwbGVjY29kIiwidHlwbGVjIiwibGVjYXNzcyIsImxlY2Fzc2lkdHMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiaW5zZXJ0TG9pUmVmZXJlbmNlcyIsImxvaSIsImxvaWNvZCIsInR5cGxvaWNvZCIsInR5cGxvaSIsImV0YWxvaWNvZCIsImV0YWxvaSIsImRlY2NvY2NvZCIsImRlY2NvYyIsImxlY3R1cmVzIiwibGVjaWR0cyIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMiLCJxdWVzdGlvbiIsImNvZGRlbnJhcCIsImRlbnJhcCIsImRvY2F0dHMiLCJkb2NhdHRjbGVzIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsImVjcnMiLCJlY3JudW1zIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsIm9yZ3MiLCJvcmdjb2RzIiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiaW5zZXJ0U2VuUmVmZXJlbmNlcyIsInNlbiIsIl9pdGVyYXRvcjExIiwiX3N0ZXAxMSIsIm9yaXR4dGNvZCIsIm9yaXR4dCIsInR4dEFtZWxpSWQiLCJ0eHRfYW1lbGkiLCJ0eHRBbWVsaSIsInR5cHR4dGNvZCIsInR5cHR4dCIsInR5cHVybCIsImxpYnR5cHVybCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnNlcnRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHh0QW1lbGkgfSBmcm9tIFwiLi90eXBlcy9hbWVsaVwiXG5pbXBvcnQgeyBEZWJhdCB9IGZyb20gXCIuL3R5cGVzL2RlYmF0c1wiXG5pbXBvcnQge1xuICBBc3MsXG4gIEF1ZCxcbiAgQXV0ZXVyLFxuICBEYXRlU2VhbmNlLFxuICBEZWNDb2MsXG4gIERlblJhcCxcbiAgRG9jQXR0LFxuICBFY3IsXG4gIEV0YUxvaSxcbiAgTGVjQXNzLFxuICBMZWNBc3NSYXAsXG4gIExlY3R1cmUsXG4gIExvaSxcbiAgT3JnLFxuICBPcmlUeHQsXG4gIFF1YSxcbiAgUmFwLFxuICBTY3IsXG4gIFRleHRlLFxuICBUeXBBdHQsXG4gIFR5cExlYyxcbiAgVHlwTG9pLFxuICBUeXBUeHQsXG4gIFR5cFVybCxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zbGVnXCJcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IFNlbiB9IGZyb20gXCIuL3R5cGVzL3NlbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dERhdGEge1xuICByZWFkb25seSBhc3M/OiB7IFtpZDogc3RyaW5nXTogQXNzIH1cbiAgcmVhZG9ubHkgYXVkPzogeyBbaWQ6IHN0cmluZ106IEF1ZCB9XG4gIHJlYWRvbmx5IGF1dGV1cj86IHsgW2lkOiBzdHJpbmddOiBBdXRldXIgfVxuICByZWFkb25seSBkYXRlX3NlYW5jZT86IHsgW2lkOiBzdHJpbmddOiBEYXRlU2VhbmNlIH1cbiAgcmVhZG9ubHkgZGViYXRzPzogeyBbaWQ6IHN0cmluZ106IERlYmF0IH1cbiAgcmVhZG9ubHkgZGVjY29jPzogeyBbaWQ6IHN0cmluZ106IERlY0NvYyB9XG4gIHJlYWRvbmx5IGRlbnJhcD86IHsgW2lkOiBzdHJpbmddOiBEZW5SYXAgfVxuICByZWFkb25seSBkb2NhdHQ/OiB7IFtpZDogc3RyaW5nXTogRG9jQXR0IH1cbiAgcmVhZG9ubHkgZWNyPzogeyBbaWQ6IHN0cmluZ106IEVjciB9XG4gIHJlYWRvbmx5IGV0YWxvaT86IHsgW2lkOiBzdHJpbmddOiBFdGFMb2kgfVxuICByZWFkb25seSBsZWNhc3M/OiB7IFtpZDogc3RyaW5nXTogTGVjQXNzIH1cbiAgcmVhZG9ubHkgbGVjYXNzcmFwPzogeyBbaWQ6IHN0cmluZ106IExlY0Fzc1JhcCB9XG4gIHJlYWRvbmx5IGxlY3R1cmU/OiB7IFtpZDogc3RyaW5nXTogTGVjdHVyZSB9XG4gIHJlYWRvbmx5IGxvaT86IHsgW2lkOiBzdHJpbmddOiBMb2kgfVxuICByZWFkb25seSBvcmc/OiB7IFtpZDogc3RyaW5nXTogT3JnIH1cbiAgcmVhZG9ubHkgb3JpdHh0PzogeyBbaWQ6IHN0cmluZ106IE9yaVR4dCB9XG4gIHJlYWRvbmx5IHF1YT86IHsgW2lkOiBzdHJpbmddOiBRdWEgfVxuICByZWFkb25seSByYXA/OiB7IFtpZDogc3RyaW5nXTogUmFwIH1cbiAgcmVhZG9ubHkgc2NyPzogeyBbaWQ6IHN0cmluZ106IFNjciB9XG4gIHJlYWRvbmx5IHRleHRlPzogeyBbaWQ6IHN0cmluZ106IFRleHRlIH1cbiAgcmVhZG9ubHkgdHlwYXR0PzogeyBbaWQ6IHN0cmluZ106IFR5cEF0dCB9XG4gIHJlYWRvbmx5IHR5cGxlYz86IHsgW2lkOiBzdHJpbmddOiBUeXBMZWMgfVxuICByZWFkb25seSB0eXBsb2k/OiB7IFtpZDogc3RyaW5nXTogVHlwTG9pIH1cbiAgcmVhZG9ubHkgdHlwdHh0PzogeyBbaWQ6IHN0cmluZ106IFR5cFR4dCB9XG4gIHJlYWRvbmx5IHR5cHVybD86IHsgW2lkOiBzdHJpbmddOiBUeXBVcmwgfVxuICByZWFkb25seSB0eHRfYW1lbGk/OiB7IFtpZDogc3RyaW5nXTogVHh0QW1lbGkgfVxufVxuXG50eXBlIFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSA9IHsgW3RhYmxlTmFtZTogc3RyaW5nXTogU2V0PG51bWJlciB8IHN0cmluZz4gfVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXVkUmVmZXJlbmNlcyhcbiAgYXVkOiBBdWQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1ZFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdWQgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGF1ZC5hdWRjbGUpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoYXVkLmF1ZGNsZSlcblxuICAgIGlmIChhdWQub3JnY29kICE9PSBudWxsICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW2F1ZC5vcmdjb2RdXG4gICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXVkLm9yZyA9IG9yZ1xuICAgICAgICAvLyBpbnNlcnRPcmdSZWZlcmVuY2VzKG9yZywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHJldHVybiBhdWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEF1dGV1clJlZmVyZW5jZXMoXG4gIGF1dGV1cjogQXV0ZXVyLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdXRldXJcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuYXV0ZXVyID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhhdXRldXIuYXV0Y29kKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGF1dGV1ci5hdXRjb2QpXG5cbiAgICBpZiAoZGF0YS5xdWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcXVhID0gZGF0YS5xdWFbYXV0ZXVyLnF1YWNvZF1cbiAgICAgIGlmIChxdWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIucXVhID0gcXVhXG4gICAgICAgIC8vIGluc2VydFF1YVJlZmVyZW5jZXMocXVhLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGF1dGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoXG4gIGRhdGVTZWFuY2U6IERhdGVTZWFuY2UsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmRhdGVfc2VhbmNlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmRhdGVfc2VhbmNlID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkYXRlU2VhbmNlLmNvZGUpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoZGF0ZVNlYW5jZS5jb2RlKVxuXG4gICAgaWYgKGRhdGVTZWFuY2UuZGF0ZV9zICE9PSBudWxsICYmIGRhdGEuZGViYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPVxuICAgICAgICBkYXRlU2VhbmNlLmRhdGVfcyBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGRhdGVTZWFuY2UuZGF0ZV9zLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IGRhdGVTZWFuY2UuZGF0ZV9zXG4gICAgICBjb25zdCBkZWJhdCA9IGRhdGEuZGViYXRzW2RhdGVTdHJpbmddXG4gICAgICBpZiAoZGViYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRlU2VhbmNlLmRlYmF0ID0gZGViYXRcbiAgICAgICAgLy8gaW5zZXJ0RGViYXRSZWZlcmVuY2VzKGRlYmF0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0ZVNlYW5jZS5zY3JzID0gW11cbiAgICBpZiAoZGF0ZVNlYW5jZS5zY3JpZHMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnNjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHNjcmlkIG9mIGRhdGVTZWFuY2Uuc2NyaWRzKSB7XG4gICAgICAgIGNvbnN0IHNjciA9IGRhdGEuc2NyW3NjcmlkXVxuICAgICAgICBpZiAoc2NyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkYXRlU2VhbmNlLnNjcnMucHVzaChzY3IpXG4gICAgICAgICAgLy8gaW5zZXJ0U2NyUmVmZXJlbmNlcyhzY3IsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU2VhbmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnREb2NBdHRSZWZlcmVuY2VzKFxuICBkb2NhdHQ6IERvY0F0dCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4gIHBlcmZvcm1JbnNlcnRSYXBSZWZlcmVuY2VzPXRydWVcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5kb2NhdHRcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZG9jYXR0ID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkb2NhdHQuZG9jYXR0Y2xlKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGRvY2F0dC5kb2NhdHRjbGUpXG5cbiAgICBpZiAocGVyZm9ybUluc2VydFJhcFJlZmVyZW5jZXMgJiYgZG9jYXR0LnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtkb2NhdHQucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9jYXR0LnR5cGF0dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBhdHQgPSBkYXRhLnR5cGF0dFtkb2NhdHQudHlwYXR0Y29kXVxuICAgICAgaWYgKHR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC50eXBhdHQgPSB0eXBhdHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwQXR0UmVmZXJlbmNlcyh0eXBhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jYXR0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFY3JSZWZlcmVuY2VzKFxuICBlY3I6IEVjcixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZWNyXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmVjciA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoZWNyLmVjcm51bSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChlY3IuZWNybnVtKVxuXG4gICAgaWYgKGVjci5hdXRjb2QgIT09IG51bGwgJiYgZGF0YS5hdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0ID0gZGF0YS5hdXRldXJbZWNyLmF1dGNvZF1cbiAgICAgIGlmIChhdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlY3IuYXV0ID0gYXV0XG4gICAgICAgIGluc2VydEF1dGV1clJlZmVyZW5jZXMoYXV0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGVjclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyhcbiAgbGVjYXNzcmFwOiBMZWNBc3NSYXAsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2Fzc3JhcFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWNhc3NyYXAgPSBuZXcgU2V0KClcbiAgfVxuICBjb25zdCBsZWNhc3JhcGlkID0gYCR7bGVjYXNzcmFwLmxlY2Fzc2lkdH0gJHtsZWNhc3NyYXAucmFwY29kfWBcbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhsZWNhc3JhcGlkKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY2FzcmFwaWQpXG5cbiAgICBpZiAobGVjYXNzcmFwLnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtsZWNhc3NyYXAucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY2Fzc3JhcC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjYXNzcmFwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMZWNhc3NSZWZlcmVuY2VzKFxuICBsZWNhc3M6IExlY0FzcyxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUubGVjYXNzXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2FzcyA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMobGVjYXNzLmxlY2Fzc2lkdCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChsZWNhc3MubGVjYXNzaWR0KVxuXG4gICAgaWYgKGxlY2Fzcy5jb2Rhc3MgIT09IG51bGwgJiYgZGF0YS5hc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXNzID0gZGF0YS5hc3NbbGVjYXNzLmNvZGFzc11cbiAgICAgIGlmIChhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3MuYXNzID0gYXNzXG4gICAgICAgIC8vIGluc2VydEFzc1JlZmVyZW5jZXMoYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxlY2Fzcy5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbbGVjYXNzLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3Mub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmF1ZHMgPSBbXVxuICAgIGlmIChsZWNhc3MuYXVkY2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuYXVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYXVkY2xlIG9mIGxlY2Fzcy5hdWRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGF1ZCA9IGRhdGEuYXVkW2F1ZGNsZV1cbiAgICAgICAgaWYgKGF1ZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmF1ZHMucHVzaChhdWQpXG4gICAgICAgICAgaW5zZXJ0QXVkUmVmZXJlbmNlcyhhdWQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxlY2Fzcy5kYXRlc1NlYW5jZXMgPSBbXVxuICAgIGlmIChsZWNhc3MuZGF0ZXNTZWFuY2VzQ29kZXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGVfc2VhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0ZVNlYW5jZUNvZGUgb2YgbGVjYXNzLmRhdGVzU2VhbmNlc0NvZGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTZWFuY2UgPSBkYXRhLmRhdGVfc2VhbmNlW2RhdGVTZWFuY2VDb2RlXVxuICAgICAgICBpZiAoZGF0ZVNlYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmRhdGVzU2VhbmNlcy5wdXNoKGRhdGVTZWFuY2UpXG4gICAgICAgICAgaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoZGF0ZVNlYW5jZSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmxlY2Fzc3JhcHMgPSBbXVxuICAgIGlmIChsZWNhc3MubGVjYXNzcmFwaWRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3NyYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NyYXBpZCBvZiBsZWNhc3MubGVjYXNzcmFwaWRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2Fzc3JhcCA9IGRhdGEubGVjYXNzcmFwW2xlY2Fzc3JhcGlkXVxuICAgICAgICBpZiAobGVjYXNzcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZWNhc3MubGVjYXNzcmFwcy5wdXNoKGxlY2Fzc3JhcClcbiAgICAgICAgICBpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzKGxlY2Fzc3JhcCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLnRleHRlcyA9IFtdXG4gICAgaWYgKGxlY2Fzcy50ZXhjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS50ZXh0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHRleGNvZCBvZiBsZWNhc3MudGV4Y29kcykge1xuICAgICAgICBjb25zdCB0ZXh0ZSA9IGRhdGEudGV4dGVbdGV4Y29kXVxuICAgICAgICBpZiAodGV4dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxlY2Fzcy50ZXh0ZXMucHVzaCh0ZXh0ZSlcbiAgICAgICAgICBpbnNlcnRUZXh0ZVJlZmVyZW5jZXModGV4dGUsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWNhc3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExlY3R1cmVSZWZlcmVuY2VzKFxuICBsZWN0dXJlOiBMZWN0dXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWN0dXJlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY3R1cmUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxlY3R1cmUubGVjaWR0KSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY3R1cmUubGVjaWR0KVxuXG4gICAgaWYgKGxlY3R1cmUudHlwbGVjY29kICE9PSBudWxsICYmIGRhdGEudHlwbGVjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxlYyA9IGRhdGEudHlwbGVjW2xlY3R1cmUudHlwbGVjY29kXVxuICAgICAgaWYgKHR5cGxlYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY3R1cmUudHlwbGVjID0gdHlwbGVjXG4gICAgICAgIC8vIGluc2VydFR5cGxlY1JlZmVyZW5jZXModHlwbGVjLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjdHVyZS5sZWNhc3NzID0gW11cbiAgICBpZiAobGVjdHVyZS5sZWNhc3NpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NpZHQgb2YgbGVjdHVyZS5sZWNhc3NpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2FzcyA9IGRhdGEubGVjYXNzW2xlY2Fzc2lkdF1cbiAgICAgICAgaWYgKGxlY2FzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjdHVyZS5sZWNhc3NzLnB1c2gobGVjYXNzKVxuICAgICAgICAgIGluc2VydExlY2Fzc1JlZmVyZW5jZXMobGVjYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjdHVyZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TG9pUmVmZXJlbmNlcyhcbiAgbG9pOiBMb2ksXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxvaVxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sb2kgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxvaS5sb2ljb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQobG9pLmxvaWNvZClcblxuICAgIGlmIChsb2kudHlwbG9pY29kICE9PSBudWxsICYmIGRhdGEudHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxvaSA9IGRhdGEudHlwbG9pW2xvaS50eXBsb2ljb2RdXG4gICAgICBpZiAodHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLnR5cGxvaSA9IHR5cGxvaVxuICAgICAgICAvLyBpbnNlcnRUeXBsb2lSZWZlcmVuY2VzKHR5cGxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZXRhbG9pY29kICE9PSBudWxsICYmIGRhdGEuZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGV0YWxvaSA9IGRhdGEuZXRhbG9pW2xvaS5ldGFsb2ljb2RdXG4gICAgICBpZiAoZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmV0YWxvaSA9IGV0YWxvaVxuICAgICAgICAvLyBpbnNlcnRFdGFsb2lSZWZlcmVuY2VzKGV0YWxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZGVjY29jY29kICE9PSBudWxsICYmIGRhdGEuZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlY2NvYyA9IGRhdGEuZGVjY29jW2xvaS5kZWNjb2Njb2RdXG4gICAgICBpZiAoZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmRlY2NvYyA9IGRlY2NvY1xuICAgICAgICAvLyBpbnNlcnREZWNjb2NSZWZlcmVuY2VzKGRlY2NvYywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvaS5sZWN0dXJlcyA9IFtdXG4gICAgaWYgKGxvaS5sZWNpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWN0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbGVjaWR0IG9mIGxvaS5sZWNpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY3R1cmUgPSBkYXRhLmxlY3R1cmVbbGVjaWR0XVxuICAgICAgICBpZiAobGVjdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9pLmxlY3R1cmVzLnB1c2gobGVjdHVyZSlcbiAgICAgICAgICBpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyhsZWN0dXJlLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMoXG4gIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgLy8gQHRzLWlnbm9yZSBUTyBCRSBSRU1PVkVEIFdIRU4gRE9ORVxuICBkYXRhOiBPdXRwdXREYXRhLFxuICAvLyBAdHMtaWdub3JlIFRPIEJFIFJFTU9WRUQgV0hFTiBET05FXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHF1ZXN0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRSYXBSZWZlcmVuY2VzKFxuICByYXA6IFJhcCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUucmFwXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnJhcCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMocmFwLnJhcGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChyYXAucmFwY29kKVxuXG4gICAgaWYgKHJhcC5jb2RkZW5yYXAgIT09IG51bGwgJiYgZGF0YS5kZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVucmFwID0gZGF0YS5kZW5yYXBbcmFwLmNvZGRlbnJhcF1cbiAgICAgIGlmIChkZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByYXAuZGVucmFwID0gZGVucmFwXG4gICAgICAgIC8vIGluc2VydERlbnJhcFJlZmVyZW5jZXMoZGVucmFwLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLmRvY2F0dHMgPSBbXVxuICAgIGlmIChyYXAuZG9jYXR0Y2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZG9jYXR0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZG9jYXR0Y2xlIG9mIHJhcC5kb2NhdHRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGRvY2F0dCA9IGRhdGEuZG9jYXR0W2RvY2F0dGNsZV1cbiAgICAgICAgaWYgKGRvY2F0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLmRvY2F0dHMucHVzaChkb2NhdHQpXG4gICAgICAgICAgaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyhkb2NhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByYXAuZWNycyA9IFtdXG4gICAgaWYgKHJhcC5lY3JudW1zICE9PSB1bmRlZmluZWQgJiYgZGF0YS5lY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBlY3JudW0gb2YgcmFwLmVjcm51bXMpIHtcbiAgICAgICAgY29uc3QgZWNyID0gZGF0YS5lY3JbZWNybnVtXVxuICAgICAgICBpZiAoZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByYXAuZWNycy5wdXNoKGVjcilcbiAgICAgICAgICBpbnNlcnRFY3JSZWZlcmVuY2VzKGVjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLm9yZ3MgPSBbXVxuICAgIGlmIChyYXAub3JnY29kcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgb3JnY29kIG9mIHJhcC5vcmdjb2RzKSB7XG4gICAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW29yZ2NvZF1cbiAgICAgICAgaWYgKG9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLm9yZ3MucHVzaChvcmcpXG4gICAgICAgICAgLy8gaW5zZXJ0T3JnUmVmZXJlbmNlcyhvcmcsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByYXBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNlblJlZmVyZW5jZXMoXG4gIHNlbjogU2VuLFxuICAvLyBAdHMtaWdub3JlIFRPIEJFIFJFTU9WRUQgV0hFTiBET05FXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIC8vIEB0cy1pZ25vcmUgVE8gQkUgUkVNT1ZFRCBXSEVOIERPTkVcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gc2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUZXh0ZVJlZmVyZW5jZXMoXG4gIHRleHRlOiBUZXh0ZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUudGV4dGVcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUudGV4dGUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKHRleHRlLnRleGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZCh0ZXh0ZS50ZXhjb2QpXG5cbiAgICB0ZXh0ZS5lY3JzID0gW11cbiAgICBpZiAodGV4dGUuZWNybnVtcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZWNybnVtIG9mIHRleHRlLmVjcm51bXMpIHtcbiAgICAgICAgY29uc3QgZWNyID0gZGF0YS5lY3JbZWNybnVtXVxuICAgICAgICBpZiAoZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0ZXh0ZS5lY3JzLnB1c2goZWNyKVxuICAgICAgICAgIGluc2VydEVjclJlZmVyZW5jZXMoZWNyLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUub3JnY29kICE9PSBudWxsICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW3RleHRlLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5vcmcgPSBvcmdcbiAgICAgICAgLy8gaW5zZXJ0T3JnUmVmZXJlbmNlcyhvcmcsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUub3JpdHh0Y29kICE9PSBudWxsICYmIGRhdGEub3JpdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yaXR4dCA9IGRhdGEub3JpdHh0W3RleHRlLm9yaXR4dGNvZF1cbiAgICAgIGlmIChvcml0eHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5vcml0eHQgPSBvcml0eHRcbiAgICAgICAgLy8gaW5zZXJ0T3JpdHh0UmVmZXJlbmNlcyhvcml0eHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHh0QW1lbGlJZCAhPT0gdW5kZWZpbmVkICYmIGRhdGEudHh0X2FtZWxpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR4dEFtZWxpID0gZGF0YS50eHRfYW1lbGlbdGV4dGUudHh0QW1lbGlJZF1cbiAgICAgIGlmICh0eHRBbWVsaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRleHRlLnR4dEFtZWxpID0gdHh0QW1lbGlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHlwdHh0Y29kICE9PSBudWxsICYmIGRhdGEudHlwdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cHR4dCA9IGRhdGEudHlwdHh0W3RleHRlLnR5cHR4dGNvZF1cbiAgICAgIGlmICh0eXB0eHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS50eXB0eHQgPSB0eXB0eHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwdHh0UmVmZXJlbmNlcyh0eXB0eHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHlwdXJsICE9PSBudWxsICYmIGRhdGEudHlwdXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cHVybCA9IGRhdGEudHlwdXJsW3RleHRlLnR5cHVybF1cbiAgICAgIGlmICh0eXB1cmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5saWJ0eXB1cmwgPSB0eXB1cmwubGlidHlwdXJsXG4gICAgICAgIC8vIGluc2VydFR5cHVybFJlZmVyZW5jZXModHlwdXJsLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHRleHRlXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThETyxTQUFTQSxtQkFBbUJBLENBQ2pDQyxHQUFRLEVBQ1JDLElBQWdCLEVBQ2hCQyxxQkFBNEMsRUFDNUM7RUFDQSxJQUFJQyxVQUFVLEdBQUdELHFCQUFxQixDQUFDRixHQUFHO0VBQzFDLElBQUlHLFVBQVUsS0FBS0MsU0FBUyxFQUFFO0lBQzVCRCxVQUFVLEdBQUdELHFCQUFxQixDQUFDRixHQUFHLEdBQUcsSUFBSUssR0FBRyxDQUFDLENBQUM7RUFDcEQ7RUFDQSxJQUFJLENBQUNGLFVBQVUsQ0FBQ0csR0FBRyxDQUFDTixHQUFHLENBQUNPLE1BQU0sQ0FBQyxFQUFFO0lBQy9CSixVQUFVLENBQUNLLEdBQUcsQ0FBQ1IsR0FBRyxDQUFDTyxNQUFNLENBQUM7SUFFMUIsSUFBSVAsR0FBRyxDQUFDUyxNQUFNLEtBQUssSUFBSSxJQUFJUixJQUFJLENBQUNTLEdBQUcsS0FBS04sU0FBUyxFQUFFO01BQ2pELElBQU1NLEdBQUcsR0FBR1QsSUFBSSxDQUFDUyxHQUFHLENBQUNWLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDO01BQ2hDLElBQUlDLEdBQUcsS0FBS04sU0FBUyxFQUFFO1FBQ3JCSixHQUFHLENBQUNVLEdBQUcsR0FBR0EsR0FBRztRQUNiO01BQ0Y7SUFDRjs7SUFFQTtFQUNGO0VBRUEsT0FBT1YsR0FBRztBQUNaO0FBRU8sU0FBU1csc0JBQXNCQSxDQUNwQ0MsTUFBYyxFQUNkWCxJQUFnQixFQUNoQkMscUJBQTRDLEVBQzVDO0VBQ0EsSUFB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