@tricoteuses/assemblee 1.10.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/README.md +8 -1
  2. package/lib/amendements-79bwpkvR.js +154 -0
  3. package/lib/amendements-CV3s5a0M.js +667 -0
  4. package/lib/cleaners/index.d.ts +9 -9
  5. package/lib/cleaners.js +564 -0
  6. package/lib/datasets.d.ts +3 -3
  7. package/lib/dossiers_legislatifs.d.ts +2 -2
  8. package/lib/index.d.ts +17 -22
  9. package/lib/index.js +1542 -314
  10. package/lib/inserters.d.ts +5 -5
  11. package/lib/loaders-9mHdTl9L.js +4158 -0
  12. package/lib/loaders.d.ts +12 -12
  13. package/lib/loaders.js +29 -1689
  14. package/lib/organes.d.ts +1 -1
  15. package/lib/parse-Ccs6wcUg.js +2512 -0
  16. package/lib/parsers/index.d.ts +2 -3
  17. package/lib/parsers/plf.d.ts +1 -0
  18. package/lib/parsers/recherche_amendements.d.ts +2 -2
  19. package/lib/parsers/textes_lois.d.ts +1 -23
  20. package/lib/parsers.js +398 -0
  21. package/lib/raw_types/debats.d.ts +2 -2
  22. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
  23. package/lib/schemas/acteurs_et_organes.json +1166 -0
  24. package/lib/schemas/agendas.json +1745 -0
  25. package/lib/schemas/amendements.json +2085 -0
  26. package/lib/schemas/debats.json +842 -0
  27. package/lib/schemas/dossiers_legislatifs.json +3874 -0
  28. package/lib/schemas/legislatures.json +17 -0
  29. package/lib/schemas/questions.json +704 -0
  30. package/lib/schemas/scrutins.json +701 -0
  31. package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
  32. package/lib/types/acteurs_et_organes.d.ts +340 -0
  33. package/lib/types/agendas.d.ts +236 -10
  34. package/lib/types/amendements.d.ts +276 -1
  35. package/lib/types/debats.d.ts +52 -2
  36. package/lib/types/dossiers_legislatifs.d.ts +403 -9
  37. package/lib/types/questions.d.ts +99 -2
  38. package/lib/types/scrutins.d.ts +101 -0
  39. package/lib/urls.d.ts +2 -2
  40. package/package.json +32 -94
  41. package/lib/api.js +0 -52
  42. package/lib/api.mjs +0 -45
  43. package/lib/bugs/acteur-00010/plugin.test.js +0 -90
  44. package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
  45. package/lib/bugs/acteur-00010.d.ts +0 -7
  46. package/lib/bugs/acteur-00010.js +0 -116
  47. package/lib/bugs/acteur-00010.mjs +0 -26
  48. package/lib/bugs/agenda-00002/plugin.test.js +0 -124
  49. package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
  50. package/lib/bugs/agenda-00002.d.ts +0 -15
  51. package/lib/bugs/agenda-00002.js +0 -406
  52. package/lib/bugs/agenda-00002.mjs +0 -172
  53. package/lib/bugs/agenda-00008/plugin.test.js +0 -92
  54. package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
  55. package/lib/bugs/agenda-00008.d.ts +0 -7
  56. package/lib/bugs/agenda-00008.js +0 -123
  57. package/lib/bugs/agenda-00008.mjs +0 -26
  58. package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
  59. package/lib/bugs/agenda-00011/plugin.test.js +0 -263
  60. package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
  61. package/lib/bugs/agenda-00011.d.ts +0 -16
  62. package/lib/bugs/agenda-00011.js +0 -333
  63. package/lib/bugs/agenda-00011.mjs +0 -125
  64. package/lib/bugs.d.ts +0 -21
  65. package/lib/bugs.js +0 -452
  66. package/lib/bugs.mjs +0 -70
  67. package/lib/cleaners/actes_legislatifs.js +0 -315
  68. package/lib/cleaners/actes_legislatifs.mjs +0 -253
  69. package/lib/cleaners/acteurs.js +0 -265
  70. package/lib/cleaners/acteurs.mjs +0 -180
  71. package/lib/cleaners/amendements.js +0 -294
  72. package/lib/cleaners/amendements.mjs +0 -227
  73. package/lib/cleaners/debats.js +0 -12
  74. package/lib/cleaners/debats.mjs +0 -5
  75. package/lib/cleaners/documents.js +0 -205
  76. package/lib/cleaners/documents.mjs +0 -133
  77. package/lib/cleaners/dossiers_legislatifs.js +0 -131
  78. package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
  79. package/lib/cleaners/index.js +0 -70
  80. package/lib/cleaners/index.mjs +0 -10
  81. package/lib/cleaners/organes.js +0 -65
  82. package/lib/cleaners/organes.mjs +0 -48
  83. package/lib/cleaners/questions.js +0 -12
  84. package/lib/cleaners/questions.mjs +0 -5
  85. package/lib/cleaners/reunions.js +0 -312
  86. package/lib/cleaners/reunions.mjs +0 -255
  87. package/lib/cleaners/scrutins.js +0 -340
  88. package/lib/cleaners/scrutins.mjs +0 -221
  89. package/lib/cleaners/xml.js +0 -74
  90. package/lib/cleaners/xml.mjs +0 -59
  91. package/lib/datasets.js +0 -837
  92. package/lib/datasets.mjs +0 -755
  93. package/lib/dates.js +0 -124
  94. package/lib/dates.mjs +0 -100
  95. package/lib/dossiers_legislatifs.js +0 -346
  96. package/lib/dossiers_legislatifs.mjs +0 -208
  97. package/lib/file_systems.js +0 -162
  98. package/lib/file_systems.mjs +0 -62
  99. package/lib/git.js +0 -223
  100. package/lib/git.mjs +0 -151
  101. package/lib/index.mjs +0 -17
  102. package/lib/inserters.js +0 -521
  103. package/lib/inserters.mjs +0 -337
  104. package/lib/loaders.mjs +0 -886
  105. package/lib/logger.js +0 -35
  106. package/lib/logger.mjs +0 -26
  107. package/lib/organes.js +0 -22
  108. package/lib/organes.mjs +0 -15
  109. package/lib/parsers/documents.d.ts +0 -62
  110. package/lib/parsers/documents.js +0 -453
  111. package/lib/parsers/documents.mjs +0 -370
  112. package/lib/parsers/index.js +0 -40
  113. package/lib/parsers/index.mjs +0 -4
  114. package/lib/parsers/recherche_amendements.js +0 -403
  115. package/lib/parsers/recherche_amendements.mjs +0 -167
  116. package/lib/parsers/textes_lois.js +0 -307
  117. package/lib/parsers/textes_lois.mjs +0 -264
  118. package/lib/raw_types/acteurs_et_organes.js +0 -1215
  119. package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
  120. package/lib/raw_types/agendas.js +0 -777
  121. package/lib/raw_types/agendas.mjs +0 -724
  122. package/lib/raw_types/amendements.js +0 -1052
  123. package/lib/raw_types/amendements.mjs +0 -993
  124. package/lib/raw_types/debats.js +0 -630
  125. package/lib/raw_types/debats.mjs +0 -573
  126. package/lib/raw_types/dossiers_legislatifs.js +0 -1529
  127. package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
  128. package/lib/raw_types/questions.js +0 -469
  129. package/lib/raw_types/questions.mjs +0 -416
  130. package/lib/raw_types/scrutins.js +0 -651
  131. package/lib/raw_types/scrutins.mjs +0 -598
  132. package/lib/schemas/acteur/Acteur.json +0 -56
  133. package/lib/schemas/acteur/AdresseElectronique.json +0 -52
  134. package/lib/schemas/acteur/AdressePostale.json +0 -75
  135. package/lib/schemas/acteur/Civ.json +0 -14
  136. package/lib/schemas/acteur/Collaborateur.json +0 -29
  137. package/lib/schemas/acteur/EtatCivil.json +0 -51
  138. package/lib/schemas/acteur/Ident.json +0 -40
  139. package/lib/schemas/acteur/Lieu.json +0 -66
  140. package/lib/schemas/acteur/Mandat.json +0 -192
  141. package/lib/schemas/acteur/Profession.json +0 -46
  142. package/lib/schemas/agenda/Agenda.json +0 -318
  143. package/lib/schemas/agenda/CycleDeVie.json +0 -45
  144. package/lib/schemas/agenda/PointOdj.json +0 -82
  145. package/lib/schemas/amendement/Amendement.json +0 -246
  146. package/lib/schemas/amendement/Diff.json +0 -25
  147. package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
  148. package/lib/schemas/amendement/Identifiant.json +0 -62
  149. package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
  150. package/lib/schemas/amendement/Representation.json +0 -67
  151. package/lib/schemas/amendement/Total.json +0 -26
  152. package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
  153. package/lib/schemas/converted_from_type/agendas.json +0 -1100
  154. package/lib/schemas/converted_from_type/amendements.json +0 -3191
  155. package/lib/schemas/converted_from_type/debats.json +0 -682
  156. package/lib/schemas/converted_from_type/deputes.json +0 -26
  157. package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
  158. package/lib/schemas/converted_from_type/legislatures.json +0 -16
  159. package/lib/schemas/converted_from_type/questions.json +0 -328
  160. package/lib/schemas/converted_from_type/scrutins.json +0 -393
  161. package/lib/schemas/debat/Contenu.json +0 -75
  162. package/lib/schemas/debat/Debat.json +0 -40
  163. package/lib/schemas/debat/Metadonnees.json +0 -75
  164. package/lib/schemas/debat/Orateur.json +0 -60
  165. package/lib/schemas/debat/Point.json +0 -169
  166. package/lib/schemas/debat/Sommaire.json +0 -71
  167. package/lib/schemas/debat/SommaireElement.json +0 -108
  168. package/lib/schemas/debat/Texte.json +0 -34
  169. package/lib/schemas/document/CodeLibelle.json +0 -25
  170. package/lib/schemas/document/Document.json +0 -385
  171. package/lib/schemas/document/Indexation.json +0 -38
  172. package/lib/schemas/dossier/ActeLegislatif.json +0 -211
  173. package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
  174. package/lib/schemas/dossier/Agenda.json +0 -23
  175. package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
  176. package/lib/schemas/dossier/Decision.json +0 -25
  177. package/lib/schemas/dossier/Dossier.json +0 -124
  178. package/lib/schemas/dossier/EtudeImpact.json +0 -29
  179. package/lib/schemas/dossier/EtudePlf.json +0 -105
  180. package/lib/schemas/dossier/Europe.json +0 -42
  181. package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
  182. package/lib/schemas/dossier/InfoJO.json +0 -23
  183. package/lib/schemas/dossier/Initiateur.json +0 -36
  184. package/lib/schemas/dossier/Motion.json +0 -27
  185. package/lib/schemas/dossier/Promulgation.json +0 -62
  186. package/lib/schemas/dossier/Rapporteur.json +0 -36
  187. package/lib/schemas/dossier/Texte.json +0 -47
  188. package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
  189. package/lib/schemas/organe/Organe.json +0 -136
  190. package/lib/schemas/organe/ViMoDe.json +0 -28
  191. package/lib/schemas/question/Auteur.json +0 -58
  192. package/lib/schemas/question/Cloture.json +0 -28
  193. package/lib/schemas/question/InfoJO.json +0 -40
  194. package/lib/schemas/question/MinAttribElement.json +0 -30
  195. package/lib/schemas/question/Question.json +0 -172
  196. package/lib/schemas/question/Renouvellement.json +0 -17
  197. package/lib/schemas/question/Signalement.json +0 -21
  198. package/lib/schemas/question/Texte.json +0 -24
  199. package/lib/schemas/scrutin/DecompteVoix.json +0 -35
  200. package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
  201. package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
  202. package/lib/schemas/scrutin/OrganeVotant.json +0 -88
  203. package/lib/schemas/scrutin/Scrutin.json +0 -187
  204. package/lib/schemas/scrutin/Votant.json +0 -37
  205. package/lib/scripts/bugs_helper.d.ts +0 -13
  206. package/lib/scripts/bugs_helper.js +0 -595
  207. package/lib/scripts/bugs_helper.mjs +0 -251
  208. package/lib/scripts/clean_reorganized_data.js +0 -613
  209. package/lib/scripts/clean_reorganized_data.mjs +0 -276
  210. package/lib/scripts/diff_amendements.js +0 -249
  211. package/lib/scripts/diff_amendements.mjs +0 -202
  212. package/lib/scripts/document_dossiers_legislatifs.js +0 -655
  213. package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
  214. package/lib/scripts/get_today_reunions.js +0 -37
  215. package/lib/scripts/get_today_reunions.mjs +0 -31
  216. package/lib/scripts/merge_scrutins.js +0 -97
  217. package/lib/scripts/merge_scrutins.mjs +0 -47
  218. package/lib/scripts/parse_textes_lois.d.ts +0 -1
  219. package/lib/scripts/parse_textes_lois.js +0 -171
  220. package/lib/scripts/parse_textes_lois.mjs +0 -140
  221. package/lib/scripts/process_open_dataset.js +0 -301
  222. package/lib/scripts/process_open_dataset.mjs +0 -134
  223. package/lib/scripts/raw_types_from_amendements.js +0 -135
  224. package/lib/scripts/raw_types_from_amendements.mjs +0 -134
  225. package/lib/scripts/reorganize_data.js +0 -805
  226. package/lib/scripts/reorganize_data.mjs +0 -517
  227. package/lib/scripts/retrieve_deputes_photos.js +0 -310
  228. package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
  229. package/lib/scripts/retrieve_documents.js +0 -547
  230. package/lib/scripts/retrieve_documents.mjs +0 -242
  231. package/lib/scripts/retrieve_open_data.js +0 -107
  232. package/lib/scripts/retrieve_open_data.mjs +0 -26
  233. package/lib/scripts/retrieve_pending_amendments.js +0 -206
  234. package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
  235. package/lib/scripts/retrieve_senateurs_photos.js +0 -234
  236. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
  237. package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
  238. package/lib/scripts/retrieve_textes_lois.js +0 -240
  239. package/lib/scripts/retrieve_textes_lois.mjs +0 -85
  240. package/lib/scripts/shared/cli_helpers.js +0 -89
  241. package/lib/scripts/shared/cli_helpers.mjs +0 -81
  242. package/lib/scripts/test_iter_load.js +0 -155
  243. package/lib/scripts/test_iter_load.mjs +0 -72
  244. package/lib/scripts/test_load.js +0 -26
  245. package/lib/scripts/test_load.mjs +0 -16
  246. package/lib/scripts/test_load_big_files.js +0 -26
  247. package/lib/scripts/test_load_big_files.mjs +0 -16
  248. package/lib/scripts/validate_json.js +0 -353
  249. package/lib/scripts/validate_json.mjs +0 -184
  250. package/lib/shared_types/codes_actes.js +0 -231
  251. package/lib/shared_types/codes_actes.mjs +0 -224
  252. package/lib/strings.js +0 -16
  253. package/lib/strings.mjs +0 -7
  254. package/lib/types/acteurs_et_organes.js +0 -965
  255. package/lib/types/acteurs_et_organes.mjs +0 -906
  256. package/lib/types/agendas.js +0 -628
  257. package/lib/types/agendas.mjs +0 -575
  258. package/lib/types/amendements.js +0 -899
  259. package/lib/types/amendements.mjs +0 -842
  260. package/lib/types/debats.js +0 -619
  261. package/lib/types/debats.mjs +0 -562
  262. package/lib/types/dossiers_legislatifs.js +0 -1188
  263. package/lib/types/dossiers_legislatifs.mjs +0 -1130
  264. package/lib/types/legislatures.js +0 -17
  265. package/lib/types/legislatures.mjs +0 -10
  266. package/lib/types/questions.js +0 -454
  267. package/lib/types/questions.mjs +0 -401
  268. package/lib/types/scrutins.js +0 -556
  269. package/lib/types/scrutins.mjs +0 -503
  270. package/lib/urls.js +0 -325
  271. package/lib/urls.mjs +0 -258
  272. /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
  273. /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
  274. /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
package/lib/inserters.js DELETED
@@ -1,521 +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.iterator.js");
9
- require("core-js/modules/es.array.slice.js");
10
- require("core-js/modules/es.date.to-string.js");
11
- require("core-js/modules/es.function.name.js");
12
- require("core-js/modules/es.object.define-property.js");
13
- require("core-js/modules/es.object.to-string.js");
14
- require("core-js/modules/es.regexp.exec.js");
15
- require("core-js/modules/es.regexp.to-string.js");
16
- require("core-js/modules/es.string.iterator.js");
17
- require("core-js/modules/web.dom-collections.iterator.js");
18
- Object.defineProperty(exports, "__esModule", {
19
- value: true
20
- });
21
- exports.insertActeurReferences = insertActeurReferences;
22
- exports.insertAmendementReferences = insertAmendementReferences;
23
- exports.insertDocumentReferences = insertDocumentReferences;
24
- exports.insertDossierReferences = insertDossierReferences;
25
- exports.insertOrganeReferences = insertOrganeReferences;
26
- exports.insertReunionReferences = insertReunionReferences;
27
- exports.insertScrutinReferences = insertScrutinReferences;
28
- 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; } } }; }
29
- 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; } }
30
- 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; }
31
- function insertActeLegislatifReferences(acte, data, visitedUids) {
32
- if (!visitedUids.has(acte.uid)) {
33
- visitedUids.add(acte.uid);
34
- if (data.documentByUid !== undefined && acte.depotInitialLectureDefinitiveRef !== undefined) {
35
- var document = data.documentByUid[acte.depotInitialLectureDefinitiveRef];
36
- if (document !== undefined) {
37
- acte.depotInitialLectureDefinitive = document;
38
- insertDocumentReferences(document, data, visitedUids);
39
- }
40
- }
41
- if (data.organeByUid !== undefined && acte.organeRef !== undefined) {
42
- var organe = data.organeByUid[acte.organeRef];
43
- if (organe !== undefined) {
44
- acte.organe = organe;
45
- insertOrganeReferences(organe, data, visitedUids);
46
- }
47
- }
48
- if (data.organeByUid !== undefined && acte.provenanceRef !== undefined) {
49
- var _organe = data.organeByUid[acte.provenanceRef];
50
- if (_organe !== undefined) {
51
- acte.provenance = _organe;
52
- insertOrganeReferences(_organe, data, visitedUids);
53
- }
54
- }
55
- if (data.acteurByUid !== undefined && acte.rapporteurs !== undefined) {
56
- var _iterator = _createForOfIteratorHelper(acte.rapporteurs),
57
- _step;
58
- try {
59
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
60
- var rapporteur = _step.value;
61
- var acteur = data.acteurByUid[rapporteur.acteurRef];
62
- if (acteur !== undefined) {
63
- rapporteur.acteur = acteur;
64
- insertActeurReferences(acteur, data, visitedUids);
65
- }
66
- }
67
- } catch (err) {
68
- _iterator.e(err);
69
- } finally {
70
- _iterator.f();
71
- }
72
- }
73
- if (data.reunionByUid !== undefined && acte.reunionRef !== undefined) {
74
- var reunion = data.reunionByUid[acte.reunionRef];
75
- if (reunion !== undefined) {
76
- acte.reunion = reunion;
77
- insertReunionReferences(reunion, data, visitedUids);
78
- if (acte.odjRef !== undefined) {
79
- var odj = reunion.odj;
80
- if (odj !== undefined && odj.pointsOdj !== undefined) {
81
- var _iterator2 = _createForOfIteratorHelper(odj.pointsOdj),
82
- _step2;
83
- try {
84
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
85
- var pointOdj = _step2.value;
86
- if (pointOdj.uid === acte.odjRef) {
87
- acte.odj = pointOdj;
88
- break;
89
- }
90
- }
91
- } catch (err) {
92
- _iterator2.e(err);
93
- } finally {
94
- _iterator2.f();
95
- }
96
- }
97
- }
98
- }
99
- }
100
- if (data.documentByUid !== undefined && acte.texteAdopteRef !== undefined) {
101
- var _document = data.documentByUid[acte.texteAdopteRef];
102
- if (_document !== undefined) {
103
- acte.texteAdopte = _document;
104
- insertDocumentReferences(_document, data, visitedUids);
105
- }
106
- }
107
- if (data.documentByUid !== undefined && acte.texteAssocieRef !== undefined) {
108
- var _document2 = data.documentByUid[acte.texteAssocieRef];
109
- if (_document2 !== undefined) {
110
- acte.texteAssocie = _document2;
111
- insertDocumentReferences(_document2, data, visitedUids);
112
- }
113
- }
114
- if (data.documentByUid !== undefined && acte.textesAssocies !== undefined) {
115
- var _iterator3 = _createForOfIteratorHelper(acte.textesAssocies),
116
- _step3;
117
- try {
118
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
119
- var texteAssocie = _step3.value;
120
- var _document3 = data.documentByUid[texteAssocie.texteAssocieRef];
121
- if (_document3 !== undefined) {
122
- texteAssocie.texteAssocie = _document3;
123
- insertDocumentReferences(_document3, data, visitedUids);
124
- }
125
- }
126
- } catch (err) {
127
- _iterator3.e(err);
128
- } finally {
129
- _iterator3.f();
130
- }
131
- }
132
- if (data.scrutinByUid !== undefined && acte.voteRefs !== undefined) {
133
- var scrutins = [];
134
- var _iterator4 = _createForOfIteratorHelper(acte.voteRefs),
135
- _step4;
136
- try {
137
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
138
- var voteRef = _step4.value;
139
- var scrutin = data.scrutinByUid[voteRef];
140
- if (scrutin !== undefined) {
141
- scrutins.push(scrutin);
142
- insertScrutinReferences(scrutin, data, visitedUids);
143
- }
144
- }
145
- } catch (err) {
146
- _iterator4.e(err);
147
- } finally {
148
- _iterator4.f();
149
- }
150
- acte.votes = scrutins;
151
- }
152
- var _iterator5 = _createForOfIteratorHelper(acte.actesLegislatifs || []),
153
- _step5;
154
- try {
155
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
156
- var childActe = _step5.value;
157
- insertActeLegislatifReferences(childActe, data, visitedUids);
158
- }
159
- } catch (err) {
160
- _iterator5.e(err);
161
- } finally {
162
- _iterator5.f();
163
- }
164
- }
165
- return acte;
166
- }
167
- function insertActeurReferences(acteur, data, visitedUids) {
168
- if (!visitedUids.has(acteur.uid)) {
169
- visitedUids.add(acteur.uid);
170
- if (data.organeByUid !== undefined) {
171
- var _iterator6 = _createForOfIteratorHelper(acteur.mandats || []),
172
- _step6;
173
- try {
174
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
175
- var mandat = _step6.value;
176
- var organes = [];
177
- var _iterator7 = _createForOfIteratorHelper(mandat.organesRefs),
178
- _step7;
179
- try {
180
- for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
181
- var organeRef = _step7.value;
182
- var organe = data.organeByUid[organeRef];
183
- if (organe !== undefined) {
184
- organes.push(organe);
185
- insertOrganeReferences(organe, data, visitedUids);
186
- }
187
- }
188
- } catch (err) {
189
- _iterator7.e(err);
190
- } finally {
191
- _iterator7.f();
192
- }
193
- mandat.organes = organes;
194
- }
195
- } catch (err) {
196
- _iterator6.e(err);
197
- } finally {
198
- _iterator6.f();
199
- }
200
- }
201
- }
202
- return acteur;
203
- }
204
- function insertAmendementReferences(amendement, data, visitedUids) {
205
- if (!visitedUids.has(amendement.uid)) {
206
- visitedUids.add(amendement.uid);
207
- var signataires = amendement.signataires;
208
- var auteur = signataires.auteur;
209
- if (data.acteurByUid !== undefined && auteur.acteurRef !== undefined) {
210
- var acteur = data.acteurByUid[auteur.acteurRef];
211
- if (acteur !== undefined) {
212
- auteur.acteur = acteur;
213
- insertActeurReferences(acteur, data, visitedUids);
214
- }
215
- }
216
- if (data.organeByUid !== undefined && auteur.auteurRapporteurOrganeRef !== undefined) {
217
- var auteurRapporteurOrgane = data.organeByUid[auteur.auteurRapporteurOrganeRef];
218
- if (auteurRapporteurOrgane !== undefined) {
219
- auteur.auteurRapporteurOrgane = auteurRapporteurOrgane;
220
- insertOrganeReferences(auteurRapporteurOrgane, data, visitedUids);
221
- }
222
- }
223
- if (data.organeByUid !== undefined && auteur.gouvernementRef !== undefined) {
224
- var gouvernement = data.organeByUid[auteur.gouvernementRef];
225
- if (gouvernement !== undefined) {
226
- auteur.gouvernement = gouvernement;
227
- insertOrganeReferences(gouvernement, data, visitedUids);
228
- }
229
- }
230
- if (data.organeByUid !== undefined && auteur.groupePolitiqueRef !== undefined) {
231
- var organe = data.organeByUid[auteur.groupePolitiqueRef];
232
- if (organe !== undefined) {
233
- auteur.groupePolitique = organe;
234
- insertOrganeReferences(organe, data, visitedUids);
235
- }
236
- }
237
- if (data.acteurByUid !== undefined) {
238
- var cosignatairesRefs = signataires.cosignatairesRefs;
239
- if (cosignatairesRefs !== undefined) {
240
- var cosignataires = [];
241
- var _iterator8 = _createForOfIteratorHelper(signataires.cosignatairesRefs || []),
242
- _step8;
243
- try {
244
- for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
245
- var cosignataireRef = _step8.value;
246
- var cosignataire = data.acteurByUid[cosignataireRef];
247
- if (cosignataire !== undefined) {
248
- cosignataires.push(cosignataire);
249
- insertActeurReferences(cosignataire, data, visitedUids);
250
- }
251
- }
252
- } catch (err) {
253
- _iterator8.e(err);
254
- } finally {
255
- _iterator8.f();
256
- }
257
- signataires.cosignataires = cosignataires;
258
- }
259
- }
260
- }
261
- return amendement;
262
- }
263
- function insertDivisionReferences(division, data, visitedUids) {
264
- var _iterator9 = _createForOfIteratorHelper(division.auteurs),
265
- _step9;
266
- try {
267
- for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
268
- var auteur = _step9.value;
269
- var acteurSummary = auteur.acteur;
270
- if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
271
- var acteur = data.acteurByUid[acteurSummary.acteurRef];
272
- if (acteur !== undefined) {
273
- acteurSummary.acteur = acteur;
274
- insertActeurReferences(acteur, data, visitedUids);
275
- }
276
- }
277
- if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
278
- var organe = data.organeByUid[auteur.organeRef];
279
- if (organe !== undefined) {
280
- auteur.organe = organe;
281
- insertOrganeReferences(organe, data, visitedUids);
282
- }
283
- }
284
- }
285
- } catch (err) {
286
- _iterator9.e(err);
287
- } finally {
288
- _iterator9.f();
289
- }
290
- if (data.dossierByUid !== undefined) {
291
- var dossier = data.dossierByUid[division.dossierRef];
292
- if (dossier !== undefined) {
293
- division.dossier = dossier;
294
- insertDossierReferences(dossier, data, visitedUids);
295
- }
296
- }
297
- var _iterator10 = _createForOfIteratorHelper(division.divisions || []),
298
- _step10;
299
- try {
300
- for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
301
- var childDivision = _step10.value;
302
- insertDivisionReferences(childDivision, data, visitedUids);
303
- }
304
- } catch (err) {
305
- _iterator10.e(err);
306
- } finally {
307
- _iterator10.f();
308
- }
309
- return division;
310
- }
311
- function insertDocumentReferences(document, data, visitedUids) {
312
- if (!visitedUids.has(document.uid)) {
313
- visitedUids.add(document.uid);
314
- var _iterator11 = _createForOfIteratorHelper(document.auteurs),
315
- _step11;
316
- try {
317
- for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
318
- var auteur = _step11.value;
319
- var acteurSummary = auteur.acteur;
320
- if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
321
- var acteur = data.acteurByUid[acteurSummary.acteurRef];
322
- if (acteur !== undefined) {
323
- acteurSummary.acteur = acteur;
324
- insertActeurReferences(acteur, data, visitedUids);
325
- }
326
- }
327
- if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
328
- var organe = data.organeByUid[auteur.organeRef];
329
- if (organe !== undefined) {
330
- auteur.organe = organe;
331
- insertOrganeReferences(organe, data, visitedUids);
332
- }
333
- }
334
- }
335
- } catch (err) {
336
- _iterator11.e(err);
337
- } finally {
338
- _iterator11.f();
339
- }
340
- if (data.dossierByUid !== undefined) {
341
- var dossier = data.dossierByUid[document.dossierRef];
342
- if (dossier !== undefined) {
343
- document.dossier = dossier;
344
- insertDossierReferences(dossier, data, visitedUids);
345
- }
346
- }
347
- var _iterator12 = _createForOfIteratorHelper(document.divisions || []),
348
- _step12;
349
- try {
350
- for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
351
- var division = _step12.value;
352
- insertDivisionReferences(division, data, visitedUids);
353
- }
354
- } catch (err) {
355
- _iterator12.e(err);
356
- } finally {
357
- _iterator12.f();
358
- }
359
- }
360
- return document;
361
- }
362
- function insertDossierReferences(dossier, data, visitedUids) {
363
- if (!visitedUids.has(dossier.uid)) {
364
- var _dossier$actesLegisla;
365
- visitedUids.add(dossier.uid);
366
- var _iterator13 = _createForOfIteratorHelper((_dossier$actesLegisla = dossier.actesLegislatifs) !== null && _dossier$actesLegisla !== void 0 ? _dossier$actesLegisla : []),
367
- _step13;
368
- try {
369
- for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {
370
- var acte = _step13.value;
371
- insertActeLegislatifReferences(acte, data, visitedUids);
372
- }
373
- } catch (err) {
374
- _iterator13.e(err);
375
- } finally {
376
- _iterator13.f();
377
- }
378
- var initiateur = dossier.initiateur;
379
- if (initiateur !== undefined) {
380
- if (data.acteurByUid !== undefined) {
381
- var _iterator14 = _createForOfIteratorHelper(initiateur.acteurs || []),
382
- _step14;
383
- try {
384
- for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {
385
- var acteurSummary = _step14.value;
386
- var acteur = data.acteurByUid[acteurSummary.acteurRef];
387
- if (acteur !== undefined) {
388
- acteurSummary.acteur = acteur;
389
- insertActeurReferences(acteur, data, visitedUids);
390
- }
391
- if (acteur !== undefined && acteurSummary.mandatRef !== undefined) {
392
- var _iterator15 = _createForOfIteratorHelper(acteur.mandats || []),
393
- _step15;
394
- try {
395
- for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {
396
- var mandat = _step15.value;
397
- if (mandat.uid === acteurSummary.mandatRef) {
398
- acteurSummary.mandat = mandat;
399
- break;
400
- }
401
- }
402
- } catch (err) {
403
- _iterator15.e(err);
404
- } finally {
405
- _iterator15.f();
406
- }
407
- }
408
- }
409
- } catch (err) {
410
- _iterator14.e(err);
411
- } finally {
412
- _iterator14.f();
413
- }
414
- }
415
- if (data.organeByUid !== undefined && initiateur.organeRef !== undefined) {
416
- var organe = data.organeByUid[initiateur.organeRef];
417
- if (organe !== undefined) {
418
- initiateur.organe = organe;
419
- insertOrganeReferences(organe, data, visitedUids);
420
- }
421
- }
422
- }
423
- }
424
- return dossier;
425
- }
426
- function insertOrganeReferences(organe, data, visitedUids) {
427
- if (!visitedUids.has(organe.uid)) {
428
- visitedUids.add(organe.uid);
429
- if (data.organeByUid !== undefined && organe.organeParentRef !== undefined) {
430
- var organeParent = data.organeByUid[organe.organeParentRef];
431
- if (organeParent !== undefined) {
432
- organe.organeParent = organeParent;
433
- insertOrganeReferences(organeParent, data, visitedUids);
434
- }
435
- }
436
- if (data.organeByUid !== undefined && organe.organePrecedentRef !== undefined) {
437
- var organePrecedent = data.organeByUid[organe.organePrecedentRef];
438
- if (organePrecedent !== undefined) {
439
- organe.organePrecedent = organePrecedent;
440
- insertOrganeReferences(organePrecedent, data, visitedUids);
441
- }
442
- }
443
-
444
- // TODO
445
- }
446
- return organe;
447
- }
448
- function insertReunionReferences(reunion, data, visitedUids) {
449
- if (!visitedUids.has(reunion.uid)) {
450
- visitedUids.add(reunion.uid);
451
- var demandeurs = reunion.demandeurs;
452
- if (demandeurs !== undefined) {
453
- if (data.acteurByUid !== undefined) {
454
- var _iterator16 = _createForOfIteratorHelper(demandeurs.acteurs || []),
455
- _step16;
456
- try {
457
- for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {
458
- var acteurSummary = _step16.value;
459
- var acteur = data.acteurByUid[acteurSummary.acteurRef];
460
- if (acteur !== undefined) {
461
- acteurSummary.acteur = acteur;
462
- insertActeurReferences(acteur, data, visitedUids);
463
- }
464
- }
465
- } catch (err) {
466
- _iterator16.e(err);
467
- } finally {
468
- _iterator16.f();
469
- }
470
- }
471
- if (data.organeByUid !== undefined) {
472
- var organeSummary = demandeurs.organe;
473
- if (organeSummary !== undefined) {
474
- var organe = data.organeByUid[organeSummary.organeRef];
475
- if (organe !== undefined) {
476
- organeSummary.organe = organe;
477
- insertOrganeReferences(organe, data, visitedUids);
478
- }
479
- }
480
- }
481
- }
482
- if (data.organeByUid !== undefined && reunion.organeReuniRef !== undefined) {
483
- var organeReuni = data.organeByUid[reunion.organeReuniRef];
484
- if (organeReuni !== undefined) {
485
- reunion.organeReuni = organeReuni;
486
- insertOrganeReferences(organeReuni, data, visitedUids);
487
- }
488
- }
489
- if (data.acteurByUid !== undefined) {
490
- var participants = reunion.participants;
491
- if (participants !== undefined) {
492
- var _iterator17 = _createForOfIteratorHelper(participants.participantsInternes || []),
493
- _step17;
494
- try {
495
- for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {
496
- var participantInterne = _step17.value;
497
- var _acteur = data.acteurByUid[participantInterne.acteurRef];
498
- if (_acteur !== undefined) {
499
- participantInterne.acteur = _acteur;
500
- insertActeurReferences(_acteur, data, visitedUids);
501
- }
502
- }
503
- } catch (err) {
504
- _iterator17.e(err);
505
- } finally {
506
- _iterator17.f();
507
- }
508
- }
509
- }
510
- }
511
- return reunion;
512
- }
513
- function insertScrutinReferences(scrutin, _data, visitedUids) {
514
- if (!visitedUids.has(scrutin.uid)) {
515
- visitedUids.add(scrutin.uid);
516
-
517
- // TODO
518
- }
519
- return scrutin;
520
- }
521
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJyYXBwb3J0ZXVyIiwidmFsdWUiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwiZXJyIiwiZSIsImYiLCJyZXVuaW9uQnlVaWQiLCJyZXVuaW9uUmVmIiwicmV1bmlvbiIsImluc2VydFJldW5pb25SZWZlcmVuY2VzIiwib2RqUmVmIiwib2RqIiwicG9pbnRzT2RqIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsInNjcnV0aW5CeVVpZCIsInZvdGVSZWZzIiwic2NydXRpbnMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0Iiwidm90ZVJlZiIsInNjcnV0aW4iLCJwdXNoIiwiaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMiLCJ2b3RlcyIsIl9pdGVyYXRvcjUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwiX3N0ZXA1IiwiY2hpbGRBY3RlIiwiX2l0ZXJhdG9yNiIsIm1hbmRhdHMiLCJfc3RlcDYiLCJtYW5kYXQiLCJvcmdhbmVzIiwiX2l0ZXJhdG9yNyIsIm9yZ2FuZXNSZWZzIiwiX3N0ZXA3IiwiaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMiLCJhbWVuZGVtZW50Iiwic2lnbmF0YWlyZXMiLCJhdXRldXIiLCJhdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSIsImdvdXZlcm5lbWVudFJlZiIsImdvdXZlcm5lbWVudCIsImdyb3VwZVBvbGl0aXF1ZVJlZiIsImdyb3VwZVBvbGl0aXF1ZSIsImNvc2lnbmF0YWlyZXNSZWZzIiwiY29zaWduYXRhaXJlcyIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsIl9pdGVyYXRvcjkiLCJhdXRldXJzIiwiX3N0ZXA5IiwiYWN0ZXVyU3VtbWFyeSIsImRvc3NpZXJCeVVpZCIsImRvc3NpZXIiLCJkb3NzaWVyUmVmIiwiaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMiLCJfaXRlcmF0b3IxMCIsImRpdmlzaW9ucyIsIl9zdGVwMTAiLCJjaGlsZERpdmlzaW9uIiwiX2l0ZXJhdG9yMTEiLCJfc3RlcDExIiwiX2l0ZXJhdG9yMTIiLCJfc3RlcDEyIiwiX2Rvc3NpZXIkYWN0ZXNMZWdpc2xhIiwiX2l0ZXJhdG9yMTMiLCJfc3RlcDEzIiwiaW5pdGlhdGV1ciIsIl9pdGVyYXRvcjE0IiwiYWN0ZXVycyIsIl9zdGVwMTQiLCJtYW5kYXRSZWYiLCJfaXRlcmF0b3IxNSIsIl9zdGVwMTUiLCJvcmdhbmVQYXJlbnRSZWYiLCJvcmdhbmVQYXJlbnQiLCJvcmdhbmVQcmVjZWRlbnRSZWYiLCJvcmdhbmVQcmVjZWRlbnQiLCJkZW1hbmRldXJzIiwiX2l0ZXJhdG9yMTYiLCJfc3RlcDE2Iiwib3JnYW5lU3VtbWFyeSIsIm9yZ2FuZVJldW5pUmVmIiwib3JnYW5lUmV1bmkiLCJwYXJ0aWNpcGFudHMiLCJfaXRlcmF0b3IxNyIsInBhcnRpY2lwYW50c0ludGVybmVzIiwiX3N0ZXAxNyIsInBhcnRpY2lwYW50SW50ZXJuZSIsIl9kYXRhIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luc2VydGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RldXIsIE9yZ2FuZSB9IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50IH0gZnJvbSBcIi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgQWN0ZUxlZ2lzbGF0aWYsXG4gIERpdmlzaW9uLFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0RGF0YSB7XG4gIHJlYWRvbmx5IGFjdGV1ckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfVxuICByZWFkb25seSBkb2N1bWVudEJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9XG4gIHJlYWRvbmx5IGRvc3NpZXJCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfVxuICByZWFkb25seSBvcmdhbmVCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH1cbiAgcmVhZG9ubHkgcmV1bmlvbkJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH1cbiAgcmVhZG9ubHkgc2NydXRpbkJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKFxuICBhY3RlOiBBY3RlTGVnaXNsYXRpZixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZFVpZHM6IFNldDxzdHJpbmc+LFxuKSB7XG4gIGlmICghdmlzaXRlZFVpZHMuaGFzKGFjdGUudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RlLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLmRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50ID0gZGF0YS5kb2N1bWVudEJ5VWlkW2FjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWZdXG4gICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLmRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RlLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUub3JnYW5lUmVmXVxuICAgICAgaWYgKG9yZ2FuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUub3JnYW5lID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RlLnByb3ZlbmFuY2VSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFthY3RlLnByb3ZlbmFuY2VSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5wcm92ZW5hbmNlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RlLnJhcHBvcnRldXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgcmFwcG9ydGV1ciBvZiBhY3RlLnJhcHBvcnRldXJzKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcmFwcG9ydGV1ci5hY3RldXJSZWZdXG4gICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJhcHBvcnRldXIuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLnJldW5pb25CeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmV1bmlvblJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXVuaW9uID0gZGF0YS5yZXVuaW9uQnlVaWRbYWN0ZS5yZXVuaW9uUmVmXVxuICAgICAgaWYgKHJldW5pb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnJldW5pb24gPSByZXVuaW9uXG4gICAgICAgIGluc2VydFJldW5pb25SZWZlcmVuY2VzKHJldW5pb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICBpZiAoYWN0ZS5vZGpSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkICYmIG9kai5wb2ludHNPZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqKSB7XG4gICAgICAgICAgICAgIGlmIChwb2ludE9kai51aWQgPT09IGFjdGUub2RqUmVmKSB7XG4gICAgICAgICAgICAgICAgYWN0ZS5vZGogPSBwb2ludE9kalxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVBZG9wdGVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS50ZXh0ZUFkb3B0ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBZG9wdGUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLmRvY3VtZW50QnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYWN0ZS50ZXh0ZUFzc29jaWVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS50ZXh0ZUFzc29jaWVSZWZdXG4gICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnRleHRlQXNzb2NpZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmRvY3VtZW50QnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RlLnRleHRlc0Fzc29jaWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgdGV4dGVBc3NvY2llIG9mIGFjdGUudGV4dGVzQXNzb2NpZXMpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbdGV4dGVBc3NvY2llLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLnNjcnV0aW5CeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudm90ZVJlZnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc2NydXRpbnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB2b3RlUmVmIG9mIGFjdGUudm90ZVJlZnMpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IGRhdGEuc2NydXRpbkJ5VWlkW3ZvdGVSZWZdXG4gICAgICAgIGlmIChzY3J1dGluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGlucy5wdXNoKHNjcnV0aW4pXG4gICAgICAgICAgaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoc2NydXRpbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFjdGUudm90ZXMgPSBzY3J1dGluc1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGRBY3RlIG9mIGFjdGUuYWN0ZXNMZWdpc2xhdGlmcyB8fCBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGNoaWxkQWN0ZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEFjdGV1clJlZmVyZW5jZXMoXG4gIGFjdGV1cjogQWN0ZXVyLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZXVyLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYWN0ZXVyLnVpZClcblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZXMgPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVJlZiBvZiBtYW5kYXQub3JnYW5lc1JlZnMpIHtcbiAgICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZXMucHVzaChvcmdhbmUpXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1hbmRhdC5vcmdhbmVzID0gb3JnYW5lc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhY3RldXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzKFxuICBhbWVuZGVtZW50OiBBbWVuZGVtZW50LFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYW1lbmRlbWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFtZW5kZW1lbnQudWlkKVxuXG4gICAgY29uc3Qgc2lnbmF0YWlyZXMgPSBhbWVuZGVtZW50LnNpZ25hdGFpcmVzXG4gICAgY29uc3QgYXV0ZXVyID0gc2lnbmF0YWlyZXMuYXV0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhdXRldXIuYWN0ZXVyUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYXV0ZXVyLmFjdGV1clJlZl1cbiAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBhdXRldXJSYXBwb3J0ZXVyT3JnYW5lID1cbiAgICAgICAgZGF0YS5vcmdhbmVCeVVpZFthdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZl1cbiAgICAgIGlmIChhdXRldXJSYXBwb3J0ZXVyT3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLmF1dGV1clJhcHBvcnRldXJPcmdhbmUgPSBhdXRldXJSYXBwb3J0ZXVyT3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXV0ZXVyLmdvdXZlcm5lbWVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBnb3V2ZXJuZW1lbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5nb3V2ZXJuZW1lbnRSZWZdXG4gICAgICBpZiAoZ291dmVybmVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLmdvdXZlcm5lbWVudCA9IGdvdXZlcm5lbWVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKGdvdXZlcm5lbWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5ncm91cGVQb2xpdGlxdWVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXRhLmFjdGV1ckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGNvc2lnbmF0YWlyZXNSZWZzID0gc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1JlZnNcbiAgICAgIGlmIChjb3NpZ25hdGFpcmVzUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNvc2lnbmF0YWlyZXMgPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IGNvc2lnbmF0YWlyZVJlZiBvZiBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmcyB8fCBbXSkge1xuICAgICAgICAgIGNvbnN0IGNvc2lnbmF0YWlyZSA9IGRhdGEuYWN0ZXVyQnlVaWRbY29zaWduYXRhaXJlUmVmXVxuICAgICAgICAgIGlmIChjb3NpZ25hdGFpcmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29zaWduYXRhaXJlcy5wdXNoKGNvc2lnbmF0YWlyZSlcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoY29zaWduYXRhaXJlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlcyA9IGNvc2lnbmF0YWlyZXNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYW1lbmRlbWVudFxufVxuXG5mdW5jdGlvbiBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoXG4gIGRpdmlzaW9uOiBEaXZpc2lvbixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZFVpZHM6IFNldDxzdHJpbmc+LFxuKSB7XG4gIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRpdmlzaW9uLmF1dGV1cnMpIHtcbiAgICBjb25zdCBhY3RldXJTdW1tYXJ5ID0gYXV0ZXVyLmFjdGV1clxuICAgIGlmIChkYXRhLmFjdGV1ckJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZXVyU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFthdXRldXIub3JnYW5lUmVmXVxuICAgICAgaWYgKG9yZ2FuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLmRvc3NpZXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RpdmlzaW9uLmRvc3NpZXJSZWZdXG4gICAgaWYgKGRvc3NpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGl2aXNpb24uZG9zc2llciA9IGRvc3NpZXJcbiAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2hpbGREaXZpc2lvbiBvZiBkaXZpc2lvbi5kaXZpc2lvbnMgfHwgW10pIHtcbiAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoY2hpbGREaXZpc2lvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gIH1cblxuICByZXR1cm4gZGl2aXNpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhcbiAgZG9jdW1lbnQ6IERvY3VtZW50LFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9jdW1lbnQudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChkb2N1bWVudC51aWQpXG5cbiAgICBmb3IgKGNvbnN0IGF1dGV1ciBvZiBkb2N1bWVudC5hdXRldXJzKSB7XG4gICAgICBjb25zdCBhY3RldXJTdW1tYXJ5ID0gYXV0ZXVyLmFjdGV1clxuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhdXRldXIub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFthdXRldXIub3JnYW5lUmVmXVxuICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhdXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRvc3NpZXIgPSBkYXRhLmRvc3NpZXJCeVVpZFtkb2N1bWVudC5kb3NzaWVyUmVmXVxuICAgICAgaWYgKGRvc3NpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5kb3NzaWVyID0gZG9zc2llclxuICAgICAgICBpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyhkb3NzaWVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRpdmlzaW9uIG9mIGRvY3VtZW50LmRpdmlzaW9ucyB8fCBbXSkge1xuICAgICAgaW5zZXJ0RGl2aXNpb25SZWZlcmVuY2VzKGRpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jdW1lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKFxuICBkb3NzaWVyOiBEb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZFVpZHM6IFNldDxzdHJpbmc+LFxuKSB7XG4gIGlmICghdmlzaXRlZFVpZHMuaGFzKGRvc3NpZXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChkb3NzaWVyLnVpZClcblxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBkb3NzaWVyLmFjdGVzTGVnaXNsYXRpZnMgPz8gW10pIHtcbiAgICAgIGluc2VydEFjdGVMZWdpc2xhdGlmUmVmZXJlbmNlcyhhY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWF0ZXVyID0gZG9zc2llci5pbml0aWF0ZXVyXG4gICAgaWYgKGluaXRpYXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgaW5pdGlhdGV1ci5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hbmRhdCBvZiBhY3RldXIubWFuZGF0cyB8fCBbXSkge1xuICAgICAgICAgICAgICBpZiAobWFuZGF0LnVpZCA9PT0gYWN0ZXVyU3VtbWFyeS5tYW5kYXRSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RldXJTdW1tYXJ5Lm1hbmRhdCA9IG1hbmRhdFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGluaXRpYXRldXIub3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2luaXRpYXRldXIub3JnYW5lUmVmXVxuICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbml0aWF0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb3NzaWVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKFxuICBvcmdhbmU6IE9yZ2FuZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZFVpZHM6IFNldDxzdHJpbmc+LFxuKSB7XG4gIGlmICghdmlzaXRlZFVpZHMuaGFzKG9yZ2FuZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKG9yZ2FuZS51aWQpXG5cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9yZ2FuZS5vcmdhbmVQYXJlbnRSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3Qgb3JnYW5lUGFyZW50ID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmUub3JnYW5lUGFyZW50UmVmXVxuICAgICAgaWYgKG9yZ2FuZVBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9yZ2FuZS5vcmdhbmVQYXJlbnQgPSBvcmdhbmVQYXJlbnRcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmVQYXJlbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVByZWNlZGVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQcmVjZWRlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQcmVjZWRlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUHJlY2VkZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVByZWNlZGVudCA9IG9yZ2FuZVByZWNlZGVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVByZWNlZGVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJBLFNBQVNBLDhCQUE4QkEsQ0FDckNDLElBQW9CLEVBQ3BCQyxJQUFnQixFQUNoQkMsV0FBd0IsRUFDeEI7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDSCxJQUFJLENBQUNJLEdBQUcsQ0FBQyxFQUFFO0lBQzlCRixXQUFXLENBQUNHLEdBQUcsQ0FBQ0wsSUFBSSxDQUFDSSxHQUFHLENBQUM7SUFFekIsSUFDRUgsSUFBSSxDQUFDSyxhQUFhLEtBQUtDLFNBQVMsSUFDaENQLElBQUksQ0FBQ1EsZ0NBQWdDLEtBQUtELFNBQVMsRUFDbkQ7TUFDQSxJQUFNRSxRQUFRLEdBQUdSLElBQUksQ0FBQ0ssYUFBYSxDQUFDTixJQUFJLENBQUNRLGdDQUFnQyxDQUFDO01BQzFFLElBQUlDLFFBQVEsS0FBS0YsU0FBUyxFQUFFO1FBQzFCUCxJQUFJLENBQUNVLDZCQUE2QixHQUFHRCxRQUFRO1FBQzdDRSx3QkFBd0IsQ0FBQ0YsUUFBUSxFQUFFUixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN2RDtJQUNGO0lBQ0EsSUFBSUQsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsSUFBSVAsSUFBSSxDQUFDYSxTQUFTLEtBQUtOLFNBQVMsRUFBRTtNQUNsRSxJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBVyxDQUFDWixJQUFJLENBQUNhLFNBQVMsQ0FBQztNQUMvQyxJQUFJQyxNQUFNLEtBQUtQLFNBQVMsRUFBRTtRQUN4QlAsSUFBSSxDQUFDYyxNQUFNLEdBQUdBLE1BQU07UUFDcEJDLHNCQUFzQixDQUFDRCxNQUFNLEVBQUViLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ25EO0lBQ0Y7SUFDQSxJQUFJRCxJQUFJLENBQUNXLFdBQVcsS0FBS0wsU0FBUyxJQUFJUCxJQUFJLENBQUNnQixhQUFhLEtBQUtULFNBQVMsRUFBRTtNQUN0RSxJQUFNTyxPQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBVyxDQUFDWixJQUFJLENBQUNnQixhQUFhLENBQUM7TUFDbkQsSUFBSUYsT0FBTSxLQUFLUCxTQUFTLEVBQUU7UUFDeEJQLElBQUksQ0FBQ2lCLFVBQVUsR0FBR0gsT0FBTTtRQUN4QkMsc0JBQXNCLENBQUNELE9BQU0sRUFBRWIsSUFBSSxFQUFFQyxXQUFXLENBQUM7TUFDbkQ7SUFDRjtJQUNBLElBQUlELElBQUksQ0FBQ2lCLFdBQVcsS0FBS1gsU0FBUyxJQUFJUCxJQUFJLENBQUNtQixXQUFXLEtBQUtaLFNBQVMsRUFBRTtNQUFBLElBQUFhLFNBQUEsR0FBQUMsMEJBQUEsQ0FDM0NyQixJQUFJLENBQUNtQixXQUFXO1FBQUFHLEtBQUE7TUFBQTtRQUF6QyxLQUFBRixTQUFBLENBQUFHLENBQUEsTUFBQUQsS0FBQSxHQUFBRixTQUFBLENBQUFJLENBQUEsSUFBQUMsSUFBQSxHQUEyQztVQUFBLElBQWhDQyxVQUFVLEdBQUFKLEtBQUEsQ0FBQUssS0FBQTtVQUNuQixJQUFNQyxNQUFNLEdBQUczQixJQUFJLENBQUNpQixXQUFXLENBQUNRLFVBQVUsQ0FBQ0csU0FBUyxDQUFDO1VBQ3JELElBQUlELE1BQU0sS0FBS3JCLFNBQVMsRUFBRTtZQUN4Qm1CLFVBQVUsQ0FBQ0UsTUFBTSxHQUFHQSxNQUFNO1lBQzFCRSxzQkFBc0IsQ0FBQ0YsTUFBTSxFQUFFM0IsSUFBSSxFQUFFQyxXQUFXLENBQUM7VUFDbkQ7UUFDRjtNQUFDLFNBQUE2QixHQUFBO1FBQUFYLFNBQUEsQ0FBQVksQ0FBQSxDQUFBRCxHQUFBO01BQUE7UUFBQVgsU0FBQSxDQUFBYSxDQUFBO01BQUE7SUFDSDtJQUNBLElBQUloQyxJQUFJLENBQUNpQyxZQUFZLEtBQUszQixTQUFTLElBQUlQLElBQUksQ0FBQ21DLFVBQVUsS0FBSzVCLFNBQVMsRUFBRTtNQUNwRSxJQUFNNkIsT0FBTyxHQUFHbkMsSUFBSSxDQUFDaUMsWUFBWSxDQUFDbEMsSUFBSSxDQUFDbUMsVUFBVSxDQUFDO01BQ2xELElBQUlDLE9BQU8sS0FBSzdCLFNBQVMsRUFBRTtRQUN6QlAsSUFBSSxDQUFDb0MsT0FBTyxHQUFHQSxPQUFPO1FBQ3RCQyx1QkFBdUIsQ0FBQ0QsT0FBTyxFQUFFbkMsSUFBSSxFQUFFQyxXQUFXLENBQUM7UUFDbkQsSUFBSUYsSUFBSSxDQUFDc0MsTUFBTSxLQUFLL0IsU0FBUyxFQUFFO1VBQzdCLElBQU1nQyxHQUFHLEdBQUdILE9BQU8sQ0FBQ0csR0FBRztVQUN2QixJQUFJQSxHQUFHLEtBQUtoQyxTQUFTLElBQUlnQyxHQUFHLENBQUNDLFNBQVMsS0FBS2pDLFNBQVMsRUFBRTtZQUFBLElBQUFrQyxVQUFBLEdBQUFwQiwwQkFBQSxDQUM3QmtCLEdBQUcsQ0FBQ0MsU0FBUztjQUFBRSxNQUFBO1lBQUE7Y0FBcEMsS0FBQUQsVUFBQSxDQUFBbEIsQ0FBQSxNQUFBbUIsTUFBQSxHQUFBRCxVQUFBLENBQUFqQixDQUFBLElBQUFDLElBQUEsR0FBc0M7Z0JBQUEsSUFBM0JrQixRQUFRLEdBQUFELE1BQUEsQ0FBQWYsS0FBQTtnQkFDakIsSUFBSWdCLFFBQVEsQ0FBQ3ZDLEdBQUcsS0FBS0osSUFBSSxDQUFDc0MsTUFBTSxFQUFFO2tCQUNoQ3RDLElBQUksQ0FBQ3VDLEdBQUcsR0FBR0ksUUFBUTtrQkFDbkI7Z0JBQ0Y7Y0FDRjtZQUFDLFNBQUFaLEdBQUE7Y0FBQVUsVUFBQSxDQUFBVCxDQUFBLENBQUFELEdBQUE7WUFBQTtjQUFBVSxVQUFBLENBQUFSLENBQUE7WUFBQTtVQUNIO1FBQ0Y7TUFDRjtJQUNGO0lBQ0EsSUFBSWhDLElBQUksQ0FBQ0ssYUFBYSxLQUFLQyxTQUFTLElBQUlQLElBQUksQ0FBQzRDLGNBQWMsS0FBS3JDLFNBQVMsRUFBRTtNQUN6RSxJQUFNRSxTQUFRLEdBQUdSLElBQUksQ0FBQ0ssYUFBYSxDQUFDTixJQUFJLENBQUM0QyxjQUFjLENBQUM7TUFDeEQsSUFBSW5DLFNBQVEsS0FBS0YsU0FBUyxFQUFFO1FBQzFCUCxJQUFJLENBQUM2QyxXQUFXLEdBQUdwQyxTQUFRO1FBQzNCRSx3QkFBd0IsQ0FBQ0YsU0FBUSxFQUFFUixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN2RDtJQUNGO0lBQ0EsSUFDRUQsSUFBSSxDQUFDSyxhQUFhLEtBQUtDLFNBQVMsSUFDaENQLElBQUksQ0FBQzhDLGVBQWUsS0FBS3ZDLFNBQVMsRUFDbEM7TUFDQSxJQUFNRSxVQUFRLEdBQUdSLElBQUksQ0FBQ0ssYUFBYSxDQUFDTixJQUFJLENBQUM4QyxlQUFlLENBQUM7TUFDekQsSUFBSXJDLFVBQVEsS0FBS0YsU0FBUyxFQUFFO1FBQzFCUCxJQUFJLENBQUMrQyxZQUFZLEdBQUd0QyxVQUFRO1FBQzVCRSx3QkFBd0IsQ0FBQ0YsVUFBUSxFQUFFUixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN2RDtJQUNGO0lBQ0EsSUFBSUQsSUFBSSxDQUFDSyxhQUFhLEtBQUtDLFNBQVMsSUFBSVAsSUFBSSxDQUFDZ0QsY0FBYyxLQUFLekMsU0FBUyxFQUFFO01BQUEsSUFBQTBDLFVBQUEsR0FBQTVCLDBCQUFBLENBQzlDckIsSUFBSSxDQUFDZ0QsY0FBYztRQUFBRSxNQUFBO01BQUE7UUFBOUMsS0FBQUQsVUFBQSxDQUFBMUIsQ0FBQSxNQUFBMkIsTUFBQSxHQUFBRCxVQUFBLENBQUF6QixDQUFBLElBQUFDLElBQUEsR0FBZ0Q7VUFBQSxJQUFyQ3NCLFlBQVksR0FBQUcsTUFBQSxDQUFBdkIsS0FBQTtVQUNyQixJQUFNbEIsVUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQWEsQ0FBQ3lDLFlBQVksQ0FBQ0QsZUFBZSxDQUFDO1VBQ2pFLElBQUlyQyxVQUFRLEtBQUtGLFNBQVMsRUFBRTtZQUMxQndDLFlBQVksQ0FBQ0EsWUFBWSxHQUFHdEMsVUFBUTtZQUNwQ0Usd0JBQXdCLENBQUNGLFVBQVEsRUFBRVIsSUFBSSxFQUFFQyxXQUFXLENBQUM7VUFDdkQ7UUFDRjtNQUFDLFNBQUE2QixHQUFBO1FBQUFrQixVQUFBLENBQUFqQixDQUFBLENBQUFELEdBQUE7TUFBQTtRQUFBa0IsVUFBQSxDQUFBaEIsQ0FBQTtNQUFBO0lBQ0g7SUFDQSxJQUFJaEMsSUFBSSxDQUFDa0QsWUFBWSxLQUFLNUMsU0FBUyxJQUFJUCxJQUFJLENBQUNvRCxRQUFRLEtBQUs3QyxTQUFTLEVBQUU7TUFDbEUsSUFBTThDLFFBQVEsR0FBRyxFQUFFO01BQUEsSUFBQUMsVUFBQSxHQUFBakMsMEJBQUEsQ0FDR3JCLElBQUksQ0FBQ29ELFFBQVE7UUFBQUcsTUFBQTtNQUFBO1FBQW5DLEtBQUFELFVBQUEsQ0FBQS9CLENBQUEsTUFBQWdDLE1BQUEsR0FBQUQsVUFBQSxDQUFBOUIsQ0FBQSxJQUFBQyxJQUFBLEdBQXFDO1VBQUEsSUFBMUIrQixPQUFPLEdBQUFELE1BQUEsQ0FBQTVCLEtBQUE7VUFDaEIsSUFBTThCLE9BQU8sR0FBR3hELElBQUksQ0FBQ2tELFlBQVksQ0FBQ0ssT0FBTyxDQUFDO1VBQzFDLElBQUlDLE9BQU8sS0FBS2xELFNBQVMsRUFBRTtZQUN6QjhDLFFBQVEsQ0FBQ0ssSUFBSSxDQUFDRCxPQUFPLENBQUM7WUFDdEJFLHVCQUF1QixDQUFDRixPQUFPLEVBQUV4RCxJQUFJLEVBQUVDLFdBQVcsQ0FBQztVQUNyRDtRQUNGO01BQUMsU0FBQTZCLEdBQUE7UUFBQXVCLFVBQUEsQ0FBQXRCLENBQUEsQ0FBQUQsR0FBQTtNQUFBO1FBQUF1QixVQUFBLENBQUFyQixDQUFBO01BQUE7TUFDRGpDLElBQUksQ0FBQzRELEtBQUssR0FBR1AsUUFBUTtJQUN2QjtJQUFDLElBQUFRLFVBQUEsR0FBQXhDLDBCQUFBLENBRXVCckIsSUFBSSxDQUFDOEQsZ0JBQWdCLElBQUksRUFBRTtNQUFBQyxNQUFBO0lBQUE7TUFBbkQsS0FBQUYsVUFBQSxDQUFBdEMsQ0FBQSxNQUFBd0MsTUFBQSxHQUFBRixVQUFBLENBQUFyQyxDQUFBLElBQUFDLElBQUEsR0FBcUQ7UUFBQSxJQUExQ3VDLFNBQVMsR0FBQUQsTUFBQSxDQUFBcEMsS0FBQTtRQUNsQjVCLDhCQUE4QixDQUFDaUUsU0FBUyxFQUFFL0QsSUFBSSxFQUFFQyxXQUFXLENBQUM7TUFDOUQ7SUFBQyxTQUFBNkIsR0FBQTtNQUFBOEIsVUFBQSxDQUFBN0IsQ0FBQSxDQUFBRCxHQUFBO0lBQUE7TUFBQThCLFVBQUEsQ0FBQTVCLENBQUE7SUFBQTtFQUNIO0VBRUEsT0FBT2pDLElBQUk7QUFDYjtBQUVPLFNBQVM4QixzQkFBc0JBLENBQ3BDRixNQUFjLEVBQ2QzQixJQUFnQixFQUNoQkMsV0FBd0IsRUFDeEI7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDeUIsTUFBTSxDQUFDeEIsR0FBRyxDQUFDLEVBQUU7SUFDaENGLFdBQVcsQ0FBQ0csR0FBRyxDQUFDdUIsTUFBTSxDQUFDeEIsR0FBRyxDQUFDO0lBRTNCLElBQUlILElBQUksQ0FBQ1csV0FBVyxLQUFLTCxTQUFTLEVBQUU7TUFBQSxJQUFBMEQsVUFBQSxHQUFBNUMsMEJBQUEsQ0FDYk8sTUFBTSxDQUFDc0MsT0FBTyxJQUFJLEVBQUU7UUFBQUMsTUFBQTtNQUFBO1FBQXpDLEtBQUFGLFVBQUEsQ0FBQTFDLENBQUEsTUFBQTRDLE1BQUEsR0FBQUYsVUFBQSxDQUFBekMsQ0FBQSxJQUFBQyxJQUFBLEdBQTJDO1VBQUEsSUFBaEMyQyxNQUFNLEdBQUFELE1BQUEsQ0FBQXhDLEtBQUE7VUFDZixJQUFNMEMsT0FBTyxHQUFHLEVBQUU7VUFBQSxJQUFBQyxVQUFBLEdBQUFqRCwwQkFBQSxDQUNNK0MsTUFBTSxDQUFDRyxXQUFXO1lBQUFDLE1BQUE7VUFBQTtZQUExQyxLQUFBRixVQUFBLENBQUEvQyxDQUFBLE1BQUFpRCxNQUFBLEdBQUFGLFVBQUEsQ0FBQTlDLENBQUEsSUFBQUMsSUFBQSxHQUE0QztjQUFBLElBQWpDWixTQUFTLEdBQUEyRCxNQUFBLENBQUE3QyxLQUFBO2NBQ2xCLElBQU1iLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFXLENBQUNDLFNBQVMsQ0FBQztjQUMxQyxJQUFJQyxNQUFNLEtBQUtQLFNBQVMsRUFBRTtnQkFDeEI4RCxPQUFPLENBQUNYLElBQUksQ0FBQzVDLE1BQU0sQ0FBQztnQkFDcEJDLHNCQUFzQixDQUFDRCxNQUFNLEVBQUViLElBQUksRUFBRUMsV0FBVyxDQUFDO2NBQ25EO1lBQ0Y7VUFBQyxTQUFBNkIsR0FBQTtZQUFBdUMsVUFBQSxDQUFBdEMsQ0FBQSxDQUFBRCxHQUFBO1VBQUE7WUFBQXVDLFVBQUEsQ0FBQXJDLENBQUE7VUFBQTtVQUNEbUMsTUFBTSxDQUFDQyxPQUFPLEdBQUdBLE9BQU87UUFDMUI7TUFBQyxTQUFBdEMsR0FBQTtRQUFBa0MsVUFBQSxDQUFBakMsQ0FBQSxDQUFBRCxHQUFBO01BQUE7UUFBQWtDLFVBQUEsQ0FBQWhDLENBQUE7TUFBQTtJQUNIO0VBQ0Y7RUFFQSxPQUFPTCxNQUFNO0FBQ2Y7QUFFTyxTQUFTNkMsMEJBQTBCQSxDQUN4Q0MsVUFBc0IsRUFDdEJ6RSxJQUFnQixFQUNoQkMsV0FBd0IsRUFDeEI7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDdUUsVUFBVSxDQUFDdEUsR0FBRyxDQUFDLEVBQUU7SUFDcENGLFdBQVcsQ0FBQ0csR0FBRyxDQUFDcUUsVUFBVSxDQUFDdEUsR0FBRyxDQUFDO0lBRS9CLElBQU11RSxXQUFXLEdBQUdELFVBQVUsQ0FBQ0MsV0FBVztJQUMxQyxJQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0MsTUFBTTtJQUNqQyxJQUFJM0UsSUFBSSxDQUFDaUIsV0FBVyxLQUFLWCxTQUFTLElBQUlxRSxNQUFNLENBQUMvQyxTQUFTLEtBQUt0QixTQUFTLEVBQUU7TUFDcEUsSUFBTXFCLE1BQU0sR0FBRzNCLElBQUksQ0FBQ2lCLFdBQVcsQ0FBQzBELE1BQU0sQ0FBQy9DLFNBQVMsQ0FBQztNQUNqRCxJQUFJRCxNQUFNLEtBQUtyQixTQUFTLEVBQUU7UUFDeEJxRSxNQUFNLENBQUNoRCxNQUFNLEdBQUdBLE1BQU07UUFDdEJFLHNCQUFzQixDQUFDRixNQUFNLEVBQUUzQixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUNuRDtJQUNGO0lBQ0EsSUFDRUQsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsSUFDOUJxRSxNQUFNLENBQUNDLHlCQUF5QixLQUFLdEUsU0FBUyxFQUM5QztNQUNBLElBQU11RSxzQkFBc0IsR0FDMUI3RSxJQUFJLENBQUNXLFdBQVcsQ0FBQ2dFLE1BQU0sQ0FBQ0MseUJBQXlCLENBQUM7TUFDcEQsSUFBSUMsc0JBQXNCLEtBQUt2RSxTQUFTLEVBQUU7UUFDeENxRSxNQUFNLENBQUNFLHNCQUFzQixHQUFHQSxzQkFBc0I7UUFDdEQvRCxzQkFBc0IsQ0FBQytELHNCQUFzQixFQUFFN0UsSUFBSSxFQUFFQyxXQUFXLENBQUM7TUFDbkU7SUFDRjtJQUNBLElBQ0VELElBQUksQ0FBQ1csV0FBVyxLQUFLTCxTQUFTLElBQzlCcUUsTUFBTSxDQUFDRyxlQUFlLEtBQUt4RSxTQUFTLEVBQ3BDO01BQ0EsSUFBTXlFLFlBQVksR0FBRy9FLElBQUksQ0FBQ1csV0FBVyxDQUFDZ0UsTUFBTSxDQUFDRyxlQUFlLENBQUM7TUFDN0QsSUFBSUMsWUFBWSxLQUFLekUsU0FBUyxFQUFFO1FBQzlCcUUsTUFBTSxDQUFDSSxZQUFZLEdBQUdBLFlBQVk7UUFDbENqRSxzQkFBc0IsQ0FBQ2lFLFlBQVksRUFBRS9FLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ3pEO0lBQ0Y7SUFDQSxJQUNFRCxJQUFJLENBQUNXLFdBQVcsS0FBS0wsU0FBUyxJQUM5QnFFLE1BQU0sQ0FBQ0ssa0JBQWtCLEtBQUsxRSxTQUFTLEVBQ3ZDO01BQ0EsSUFBTU8sTUFBTSxHQUFHYixJQUFJLENBQUNXLFdBQVcsQ0FBQ2dFLE1BQU0sQ0FBQ0ssa0JBQWtCLENBQUM7TUFDMUQsSUFBSW5FLE1BQU0sS0FBS1AsU0FBUyxFQUFFO1FBQ3hCcUUsTUFBTSxDQUFDTSxlQUFlLEdBQUdwRSxNQUFNO1FBQy9CQyxzQkFBc0IsQ0FBQ0QsTUFBTSxFQUFFYixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUNuRDtJQUNGO0lBQ0EsSUFBSUQsSUFBSSxDQUFDaUIsV0FBVyxLQUFLWCxTQUFTLEVBQUU7TUFDbEMsSUFBTTRFLGlCQUFpQixHQUFHUixXQUFXLENBQUNRLGlCQUFpQjtNQUN2RCxJQUFJQSxpQkFBaUIsS0FBSzVFLFNBQVMsRUFBRTtRQUNuQyxJQUFNNkUsYUFBYSxHQUFHLEVBQUU7UUFBQSxJQUFBQyxVQUFBLEdBQUFoRSwwQkFBQSxDQUNNc0QsV0FBVyxDQUFDUSxpQkFBaUIsSUFBSSxFQUFFO1VBQUFHLE1BQUE7UUFBQTtVQUFqRSxLQUFBRCxVQUFBLENBQUE5RCxDQUFBLE1BQUErRCxNQUFBLEdBQUFELFVBQUEsQ0FBQTdELENBQUEsSUFBQUMsSUFBQSxHQUFtRTtZQUFBLElBQXhEOEQsZUFBZSxHQUFBRCxNQUFBLENBQUEzRCxLQUFBO1lBQ3hCLElBQU02RCxZQUFZLEdBQUd2RixJQUFJLENBQUNpQixXQUFXLENBQUNxRSxlQUFlLENBQUM7WUFDdEQsSUFBSUMsWUFBWSxLQUFLakYsU0FBUyxFQUFFO2NBQzlCNkUsYUFBYSxDQUFDMUIsSUFBSSxDQUFDOEIsWUFBWSxDQUFDO2NBQ2hDMUQsc0JBQXNCLENBQUMwRCxZQUFZLEVBQUV2RixJQUFJLEVBQUVDLFdBQVcsQ0FBQztZQUN6RDtVQUNGO1FBQUMsU0FBQTZCLEdBQUE7VUFBQXNELFVBQUEsQ0FBQXJELENBQUEsQ0FBQUQsR0FBQTtRQUFBO1VBQUFzRCxVQUFBLENBQUFwRCxDQUFBO1FBQUE7UUFDRDBDLFdBQVcsQ0FBQ1MsYUFBYSxHQUFHQSxhQUFhO01BQzNDO0lBQ0Y7RUFDRjtFQUVBLE9BQU9WLFVBQVU7QUFDbkI7QUFFQSxTQUFTZSx3QkFBd0JBLENBQy9CQyxRQUFrQixFQUNsQnpGLElBQWdCLEVBQ2hCQyxXQUF3QixFQUN4QjtFQUFBLElBQUF5RixVQUFBLEdBQUF0RSwwQkFBQSxDQUNxQnFFLFFBQVEsQ0FBQ0UsT0FBTztJQUFBQyxNQUFBO0VBQUE7SUFBckMsS0FBQUYsVUFBQSxDQUFBcEUsQ0FBQSxNQUFBc0UsTUFBQSxHQUFBRixVQUFBLENBQUFuRSxDQUFBLElBQUFDLElBQUEsR0FBdUM7TUFBQSxJQUE1Qm1ELE1BQU0sR0FBQWlCLE1BQUEsQ0FBQWxFLEtBQUE7TUFDZixJQUFNbUUsYUFBYSxHQUFHbEIsTUFBTSxDQUFDaEQsTUFBTTtNQUNuQyxJQUFJM0IsSUFBSSxDQUFDaUIsV0FBVyxLQUFLWCxTQUFTLElBQUl1RixhQUFhLEtBQUt2RixTQUFTLEVBQUU7UUFDakUsSUFBTXFCLE1BQU0sR0FBRzNCLElBQUksQ0FBQ2lCLFdBQVcsQ0FBQzRFLGFBQWEsQ0FBQ2pFLFNBQVMsQ0FBQztRQUN4RCxJQUFJRCxNQUFNLEtBQUtyQixTQUFTLEVBQUU7VUFDeEJ1RixhQUFhLENBQUNsRSxNQUFNLEdBQUdBLE1BQU07VUFDN0JFLHNCQUFzQixDQUFDRixNQUFNLEVBQUUzQixJQUFJLEVBQUVDLFdBQVcsQ0FBQztRQUNuRDtNQUNGO01BRUEsSUFBSUQsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsSUFBSXFFLE1BQU0sQ0FBQy9ELFNBQVMsS0FBS04sU0FBUyxFQUFFO1FBQ3BFLElBQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFXLENBQUNnRSxNQUFNLENBQUMvRCxTQUFTLENBQUM7UUFDakQsSUFBSUMsTUFBTSxLQUFLUCxTQUFTLEVBQUU7VUFDeEJxRSxNQUFNLENBQUM5RCxNQUFNLEdBQUdBLE1BQU07VUFDdEJDLHNCQUFzQixDQUFDRCxNQUFNLEVBQUViLElBQUksRUFBRUMsV0FBVyxDQUFDO1FBQ25EO01BQ0Y7SUFDRjtFQUFDLFNBQUE2QixHQUFBO0lBQUE0RCxVQUFBLENBQUEzRCxDQUFBLENBQUFELEdBQUE7RUFBQTtJQUFBNEQsVUFBQSxDQUFBMUQsQ0FBQTtFQUFBO0VBRUQsSUFBSWhDLElBQUksQ0FBQzhGLFlBQVksS0FBS3hGLFNBQVMsRUFBRTtJQUNuQyxJQUFNeUYsT0FBTyxHQUFHL0YsSUFBSSxDQUFDOEYsWUFBWSxDQUFDTCxRQUFRLENBQUNPLFVBQVUsQ0FBQztJQUN0RCxJQUFJRCxPQUFPLEtBQUt6RixTQUFTLEVBQUU7TUFDekJtRixRQUFRLENBQUNNLE9BQU8sR0FBR0EsT0FBTztNQUMxQkUsdUJBQXVCLENBQUNGLE9BQU8sRUFBRS9GLElBQUksRUFBRUMsV0FBVyxDQUFDO0lBQ3JEO0VBQ0Y7RUFBQyxJQUFBaUcsV0FBQSxHQUFBOUUsMEJBQUEsQ0FFMkJxRSxRQUFRLENBQUNVLFNBQVMsSUFBSSxFQUFFO0lBQUFDLE9BQUE7RUFBQTtJQUFwRCxLQUFBRixXQUFBLENBQUE1RSxDQUFBLE1BQUE4RSxPQUFBLEdBQUFGLFdBQUEsQ0FBQTNFLENBQUEsSUFBQUMsSUFBQSxHQUFzRDtNQUFBLElBQTNDNkUsYUFBYSxHQUFBRCxPQUFBLENBQUExRSxLQUFBO01BQ3RCOEQsd0JBQXdCLENBQUNhLGFBQWEsRUFBRXJHLElBQUksRUFBRUMsV0FBVyxDQUFDO0lBQzVEO0VBQUMsU0FBQTZCLEdBQUE7SUFBQW9FLFdBQUEsQ0FBQW5FLENBQUEsQ0FBQUQsR0FBQTtFQUFBO0lBQUFvRSxXQUFBLENBQUFsRSxDQUFBO0VBQUE7RUFFRCxPQUFPeUQsUUFBUTtBQUNqQjtBQUVPLFNBQVMvRSx3QkFBd0JBLENBQ3RDRixRQUFrQixFQUNsQlIsSUFBZ0IsRUFDaEJDLFdBQXdCLEVBQ3hCO0VBQ0EsSUFBSSxDQUFDQSxXQUFXLENBQUNDLEdBQUcsQ0FBQ00sUUFBUSxDQUFDTCxHQUFHLENBQUMsRUFBRTtJQUNsQ0YsV0FBVyxDQUFDRyxHQUFHLENBQUNJLFFBQVEsQ0FBQ0wsR0FBRyxDQUFDO0lBQUEsSUFBQW1HLFdBQUEsR0FBQWxGLDBCQUFBLENBRVJaLFFBQVEsQ0FBQ21GLE9BQU87TUFBQVksT0FBQTtJQUFBO01BQXJDLEtBQUFELFdBQUEsQ0FBQWhGLENBQUEsTUFBQWlGLE9BQUEsR0FBQUQsV0FBQSxDQUFBL0UsQ0FBQSxJQUFBQyxJQUFBLEdBQXVDO1FBQUEsSUFBNUJtRCxNQUFNLEdBQUE0QixPQUFBLENBQUE3RSxLQUFBO1FBQ2YsSUFBTW1FLGFBQWEsR0FBR2xCLE1BQU0sQ0FBQ2hELE1BQU07UUFDbkMsSUFBSTNCLElBQUksQ0FBQ2lCLFdBQVcsS0FBS1gsU0FBUyxJQUFJdUYsYUFBYSxLQUFLdkYsU0FBUyxFQUFFO1VBQ2pFLElBQU1xQixNQUFNLEdBQUczQixJQUFJLENBQUNpQixXQUFXLENBQUM0RSxhQUFhLENBQUNqRSxTQUFTLENBQUM7VUFDeEQsSUFBSUQsTUFBTSxLQUFLckIsU0FBUyxFQUFFO1lBQ3hCdUYsYUFBYSxDQUFDbEUsTUFBTSxHQUFHQSxNQUFNO1lBQzdCRSxzQkFBc0IsQ0FBQ0YsTUFBTSxFQUFFM0IsSUFBSSxFQUFFQyxXQUFXLENBQUM7VUFDbkQ7UUFDRjtRQUVBLElBQUlELElBQUksQ0FBQ1csV0FBVyxLQUFLTCxTQUFTLElBQUlxRSxNQUFNLENBQUMvRCxTQUFTLEtBQUtOLFNBQVMsRUFBRTtVQUNwRSxJQUFNTyxNQUFNLEdBQUdiLElBQUksQ0FBQ1csV0FBVyxDQUFDZ0UsTUFBTSxDQUFDL0QsU0FBUyxDQUFDO1VBQ2pELElBQUlDLE1BQU0sS0FBS1AsU0FBUyxFQUFFO1lBQ3hCcUUsTUFBTSxDQUFDOUQsTUFBTSxHQUFHQSxNQUFNO1lBQ3RCQyxzQkFBc0IsQ0FBQ0QsTUFBTSxFQUFFYixJQUFJLEVBQUVDLFdBQVcsQ0FBQztVQUNuRDtRQUNGO01BQ0Y7SUFBQyxTQUFBNkIsR0FBQTtNQUFBd0UsV0FBQSxDQUFBdkUsQ0FBQSxDQUFBRCxHQUFBO0lBQUE7TUFBQXdFLFdBQUEsQ0FBQXRFLENBQUE7SUFBQTtJQUVELElBQUloQyxJQUFJLENBQUM4RixZQUFZLEtBQUt4RixTQUFTLEVBQUU7TUFDbkMsSUFBTXlGLE9BQU8sR0FBRy9GLElBQUksQ0FBQzhGLFlBQVksQ0FBQ3RGLFFBQVEsQ0FBQ3dGLFVBQVUsQ0FBQztNQUN0RCxJQUFJRCxPQUFPLEtBQUt6RixTQUFTLEVBQUU7UUFDekJFLFFBQVEsQ0FBQ3VGLE9BQU8sR0FBR0EsT0FBTztRQUMxQkUsdUJBQXVCLENBQUNGLE9BQU8sRUFBRS9GLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ3JEO0lBQ0Y7SUFBQyxJQUFBdUcsV0FBQSxHQUFBcEYsMEJBQUEsQ0FFc0JaLFFBQVEsQ0FBQzJGLFNBQVMsSUFBSSxFQUFFO01BQUFNLE9BQUE7SUFBQTtNQUEvQyxLQUFBRCxXQUFBLENBQUFsRixDQUFBLE1BQUFtRixPQUFBLEdBQUFELFdBQUEsQ0FBQWpGLENBQUEsSUFBQUMsSUFBQSxHQUFpRDtRQUFBLElBQXRDaUUsUUFBUSxHQUFBZ0IsT0FBQSxDQUFBL0UsS0FBQTtRQUNqQjhELHdCQUF3QixDQUFDQyxRQUFRLEVBQUV6RixJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN2RDtJQUFDLFNBQUE2QixHQUFBO01BQUEwRSxXQUFBLENBQUF6RSxDQUFBLENBQUFELEdBQUE7SUFBQTtNQUFBMEUsV0FBQSxDQUFBeEUsQ0FBQTtJQUFBO0VBQ0g7RUFFQSxPQUFPeEIsUUFBUTtBQUNqQjtBQUVPLFNBQVN5Rix1QkFBdUJBLENBQ3JDRixPQUE2QixFQUM3Qi9GLElBQWdCLEVBQ2hCQyxXQUF3QixFQUN4QjtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFHLENBQUM2RixPQUFPLENBQUM1RixHQUFHLENBQUMsRUFBRTtJQUFBLElBQUF1RyxxQkFBQTtJQUNqQ3pHLFdBQVcsQ0FBQ0csR0FBRyxDQUFDMkYsT0FBTyxDQUFDNUYsR0FBRyxDQUFDO0lBQUEsSUFBQXdHLFdBQUEsR0FBQXZGLDBCQUFBLEVBQUFzRixxQkFBQSxHQUVUWCxPQUFPLENBQUNsQyxnQkFBZ0IsY0FBQTZDLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRTtNQUFBRSxPQUFBO0lBQUE7TUFBakQsS0FBQUQsV0FBQSxDQUFBckYsQ0FBQSxNQUFBc0YsT0FBQSxHQUFBRCxXQUFBLENBQUFwRixDQUFBLElBQUFDLElBQUEsR0FBbUQ7UUFBQSxJQUF4Q3pCLElBQUksR0FBQTZHLE9BQUEsQ0FBQWxGLEtBQUE7UUFDYjVCLDhCQUE4QixDQUFDQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ3pEO0lBQUMsU0FBQTZCLEdBQUE7TUFBQTZFLFdBQUEsQ0FBQTVFLENBQUEsQ0FBQUQsR0FBQTtJQUFBO01BQUE2RSxXQUFBLENBQUEzRSxDQUFBO0lBQUE7SUFFRCxJQUFNNkUsVUFBVSxHQUFHZCxPQUFPLENBQUNjLFVBQVU7SUFDckMsSUFBSUEsVUFBVSxLQUFLdkcsU0FBUyxFQUFFO01BQzVCLElBQUlOLElBQUksQ0FBQ2lCLFdBQVcsS0FBS1gsU0FBUyxFQUFFO1FBQUEsSUFBQXdHLFdBQUEsR0FBQTFGLDBCQUFBLENBQ055RixVQUFVLENBQUNFLE9BQU8sSUFBSSxFQUFFO1VBQUFDLE9BQUE7UUFBQTtVQUFwRCxLQUFBRixXQUFBLENBQUF4RixDQUFBLE1BQUEwRixPQUFBLEdBQUFGLFdBQUEsQ0FBQXZGLENBQUEsSUFBQUMsSUFBQSxHQUFzRDtZQUFBLElBQTNDcUUsYUFBYSxHQUFBbUIsT0FBQSxDQUFBdEYsS0FBQTtZQUN0QixJQUFNQyxNQUFNLEdBQUczQixJQUFJLENBQUNpQixXQUFXLENBQUM0RSxhQUFhLENBQUNqRSxTQUFTLENBQUM7WUFDeEQsSUFBSUQsTUFBTSxLQUFLckIsU0FBUyxFQUFFO2NBQ3hCdUYsYUFBYSxDQUFDbEUsTUFBTSxHQUFHQSxNQUFNO2NBQzdCRSxzQkFBc0IsQ0FBQ0YsTUFBTSxFQUFFM0IsSUFBSSxFQUFFQyxXQUFXLENBQUM7WUFDbkQ7WUFDQSxJQUFJMEIsTUFBTSxLQUFLckIsU0FBUyxJQUFJdUYsYUFBYSxDQUFDb0IsU0FBUyxLQUFLM0csU0FBUyxFQUFFO2NBQUEsSUFBQTRHLFdBQUEsR0FBQTlGLDBCQUFBLENBQzVDTyxNQUFNLENBQUNzQyxPQUFPLElBQUksRUFBRTtnQkFBQWtELE9BQUE7Y0FBQTtnQkFBekMsS0FBQUQsV0FBQSxDQUFBNUYsQ0FBQSxNQUFBNkYsT0FBQSxHQUFBRCxXQUFBLENBQUEzRixDQUFBLElBQUFDLElBQUEsR0FBMkM7a0JBQUEsSUFBaEMyQyxNQUFNLEdBQUFnRCxPQUFBLENBQUF6RixLQUFBO2tCQUNmLElBQUl5QyxNQUFNLENBQUNoRSxHQUFHLEtBQUswRixhQUFhLENBQUNvQixTQUFTLEVBQUU7b0JBQzFDcEIsYUFBYSxDQUFDMUIsTUFBTSxHQUFHQSxNQUFNO29CQUM3QjtrQkFDRjtnQkFDRjtjQUFDLFNBQUFyQyxHQUFBO2dCQUFBb0YsV0FBQSxDQUFBbkYsQ0FBQSxDQUFBRCxHQUFBO2NBQUE7Z0JBQUFvRixXQUFBLENBQUFsRixDQUFBO2NBQUE7WUFDSDtVQUNGO1FBQUMsU0FBQUYsR0FBQTtVQUFBZ0YsV0FBQSxDQUFBL0UsQ0FBQSxDQUFBRCxHQUFBO1FBQUE7VUFBQWdGLFdBQUEsQ0FBQTlFLENBQUE7UUFBQTtNQUNIO01BQ0EsSUFDRWhDLElBQUksQ0FBQ1csV0FBVyxLQUFLTCxTQUFTLElBQzlCdUcsVUFBVSxDQUFDakcsU0FBUyxLQUFLTixTQUFTLEVBQ2xDO1FBQ0EsSUFBTU8sTUFBTSxHQUFHYixJQUFJLENBQUNXLFdBQVcsQ0FBQ2tHLFVBQVUsQ0FBQ2pHLFNBQVMsQ0FBQztRQUNyRCxJQUFJQyxNQUFNLEtBQUtQLFNBQVMsRUFBRTtVQUN4QnVHLFVBQVUsQ0FBQ2hHLE1BQU0sR0FBR0EsTUFBTTtVQUMxQkMsc0JBQXNCLENBQUNELE1BQU0sRUFBRWIsSUFBSSxFQUFFQyxXQUFXLENBQUM7UUFDbkQ7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxPQUFPOEYsT0FBTztBQUNoQjtBQUVPLFNBQVNqRixzQkFBc0JBLENBQ3BDRCxNQUFjLEVBQ2RiLElBQWdCLEVBQ2hCQyxXQUF3QixFQUN4QjtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFHLENBQUNXLE1BQU0sQ0FBQ1YsR0FBRyxDQUFDLEVBQUU7SUFDaENGLFdBQVcsQ0FBQ0csR0FBRyxDQUFDUyxNQUFNLENBQUNWLEdBQUcsQ0FBQztJQUUzQixJQUNFSCxJQUFJLENBQUNXLFdBQVcsS0FBS0wsU0FBUyxJQUM5Qk8sTUFBTSxDQUFDdUcsZUFBZSxLQUFLOUcsU0FBUyxFQUNwQztNQUNBLElBQU0rRyxZQUFZLEdBQUdySCxJQUFJLENBQUNXLFdBQVcsQ0FBQ0UsTUFBTSxDQUFDdUcsZUFBZSxDQUFDO01BQzdELElBQUlDLFlBQVksS0FBSy9HLFNBQVMsRUFBRTtRQUM5Qk8sTUFBTSxDQUFDd0csWUFBWSxHQUFHQSxZQUFZO1FBQ2xDdkcsc0JBQXNCLENBQUN1RyxZQUFZLEVBQUVySCxJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN6RDtJQUNGO0lBRUEsSUFDRUQsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsSUFDOUJPLE1BQU0sQ0FBQ3lHLGtCQUFrQixLQUFLaEgsU0FBUyxFQUN2QztNQUNBLElBQU1pSCxlQUFlLEdBQUd2SCxJQUFJLENBQUNXLFdBQVcsQ0FBQ0UsTUFBTSxDQUFDeUcsa0JBQWtCLENBQUM7TUFDbkUsSUFBSUMsZUFBZSxLQUFLakgsU0FBUyxFQUFFO1FBQ2pDTyxNQUFNLENBQUMwRyxlQUFlLEdBQUdBLGVBQWU7UUFDeEN6RyxzQkFBc0IsQ0FBQ3lHLGVBQWUsRUFBRXZILElBQUksRUFBRUMsV0FBVyxDQUFDO01BQzVEO0lBQ0Y7O0lBRUE7RUFDRjtFQUVBLE9BQU9ZLE1BQU07QUFDZjtBQUVPLFNBQVN1Qix1QkFBdUJBLENBQ3JDRCxPQUFnQixFQUNoQm5DLElBQWdCLEVBQ2hCQyxXQUF3QixFQUN4QjtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFHLENBQUNpQyxPQUFPLENBQUNoQyxHQUFHLENBQUMsRUFBRTtJQUNqQ0YsV0FBVyxDQUFDRyxHQUFHLENBQUMrQixPQUFPLENBQUNoQyxHQUFHLENBQUM7SUFFNUIsSUFBTXFILFVBQVUsR0FBR3JGLE9BQU8sQ0FBQ3FGLFVBQVU7SUFDckMsSUFBSUEsVUFBVSxLQUFLbEgsU0FBUyxFQUFFO01BQzVCLElBQUlOLElBQUksQ0FBQ2lCLFdBQVcsS0FBS1gsU0FBUyxFQUFFO1FBQUEsSUFBQW1ILFdBQUEsR0FBQXJHLDBCQUFBLENBQ05vRyxVQUFVLENBQUNULE9BQU8sSUFBSSxFQUFFO1VBQUFXLE9BQUE7UUFBQTtVQUFwRCxLQUFBRCxXQUFBLENBQUFuRyxDQUFBLE1BQUFvRyxPQUFBLEdBQUFELFdBQUEsQ0FBQWxHLENBQUEsSUFBQUMsSUFBQSxHQUFzRDtZQUFBLElBQTNDcUUsYUFBYSxHQUFBNkIsT0FBQSxDQUFBaEcsS0FBQTtZQUN0QixJQUFNQyxNQUFNLEdBQUczQixJQUFJLENBQUNpQixXQUFXLENBQUM0RSxhQUFhLENBQUNqRSxTQUFTLENBQUM7WUFDeEQsSUFBSUQsTUFBTSxLQUFLckIsU0FBUyxFQUFFO2NBQ3hCdUYsYUFBYSxDQUFDbEUsTUFBTSxHQUFHQSxNQUFNO2NBQzdCRSxzQkFBc0IsQ0FBQ0YsTUFBTSxFQUFFM0IsSUFBSSxFQUFFQyxXQUFXLENBQUM7WUFDbkQ7VUFDRjtRQUFDLFNBQUE2QixHQUFBO1VBQUEyRixXQUFBLENBQUExRixDQUFBLENBQUFELEdBQUE7UUFBQTtVQUFBMkYsV0FBQSxDQUFBekYsQ0FBQTtRQUFBO01BQ0g7TUFDQSxJQUFJaEMsSUFBSSxDQUFDVyxXQUFXLEtBQUtMLFNBQVMsRUFBRTtRQUNsQyxJQUFNcUgsYUFBYSxHQUFHSCxVQUFVLENBQUMzRyxNQUFNO1FBQ3ZDLElBQUk4RyxhQUFhLEtBQUtySCxTQUFTLEVBQUU7VUFDL0IsSUFBTU8sTUFBTSxHQUFHYixJQUFJLENBQUNXLFdBQVcsQ0FBQ2dILGFBQWEsQ0FBQy9HLFNBQVMsQ0FBQztVQUN4RCxJQUFJQyxNQUFNLEtBQUtQLFNBQVMsRUFBRTtZQUN4QnFILGFBQWEsQ0FBQzlHLE1BQU0sR0FBR0EsTUFBTTtZQUM3QkMsc0JBQXNCLENBQUNELE1BQU0sRUFBRWIsSUFBSSxFQUFFQyxXQUFXLENBQUM7VUFDbkQ7UUFDRjtNQUNGO0lBQ0Y7SUFDQSxJQUNFRCxJQUFJLENBQUNXLFdBQVcsS0FBS0wsU0FBUyxJQUM5QjZCLE9BQU8sQ0FBQ3lGLGNBQWMsS0FBS3RILFNBQVMsRUFDcEM7TUFDQSxJQUFNdUgsV0FBVyxHQUFHN0gsSUFBSSxDQUFDVyxXQUFXLENBQUN3QixPQUFPLENBQUN5RixjQUFjLENBQUM7TUFDNUQsSUFBSUMsV0FBVyxLQUFLdkgsU0FBUyxFQUFFO1FBQzdCNkIsT0FBTyxDQUFDMEYsV0FBVyxHQUFHQSxXQUFXO1FBQ2pDL0csc0JBQXNCLENBQUMrRyxXQUFXLEVBQUU3SCxJQUFJLEVBQUVDLFdBQVcsQ0FBQztNQUN4RDtJQUNGO0lBQ0EsSUFBSUQsSUFBSSxDQUFDaUIsV0FBVyxLQUFLWCxTQUFTLEVBQUU7TUFDbEMsSUFBTXdILFlBQVksR0FBRzNGLE9BQU8sQ0FBQzJGLFlBQVk7TUFDekMsSUFBSUEsWUFBWSxLQUFLeEgsU0FBUyxFQUFFO1FBQUEsSUFBQXlILFdBQUEsR0FBQTNHLDBCQUFBLENBQ0cwRyxZQUFZLENBQUNFLG9CQUFvQixJQUNoRSxFQUFFO1VBQUFDLE9BQUE7UUFBQTtVQURKLEtBQUFGLFdBQUEsQ0FBQXpHLENBQUEsTUFBQTJHLE9BQUEsR0FBQUYsV0FBQSxDQUFBeEcsQ0FBQSxJQUFBQyxJQUFBLEdBQ007WUFBQSxJQURLMEcsa0JBQWtCLEdBQUFELE9BQUEsQ0FBQXZHLEtBQUE7WUFFM0IsSUFBTUMsT0FBTSxHQUFHM0IsSUFBSSxDQUFDaUIsV0FBVyxDQUFDaUgsa0JBQWtCLENBQUN0RyxTQUFTLENBQUM7WUFDN0QsSUFBSUQsT0FBTSxLQUFLckIsU0FBUyxFQUFFO2NBQ3hCNEgsa0JBQWtCLENBQUN2RyxNQUFNLEdBQUdBLE9BQU07Y0FDbENFLHNCQUFzQixDQUFDRixPQUFNLEVBQUUzQixJQUFJLEVBQUVDLFdBQVcsQ0FBQztZQUNuRDtVQUNGO1FBQUMsU0FBQTZCLEdBQUE7VUFBQWlHLFdBQUEsQ0FBQWhHLENBQUEsQ0FBQUQsR0FBQTtRQUFBO1VBQUFpRyxXQUFBLENBQUEvRixDQUFBO1FBQUE7TUFDSDtJQUNGO0VBQ0Y7RUFFQSxPQUFPRyxPQUFPO0FBQ2hCO0FBRU8sU0FBU3VCLHVCQUF1QkEsQ0FDckNGLE9BQWdCLEVBQ2hCMkUsS0FBaUIsRUFDakJsSSxXQUF3QixFQUN4QjtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFHLENBQUNzRCxPQUFPLENBQUNyRCxHQUFHLENBQUMsRUFBRTtJQUNqQ0YsV0FBVyxDQUFDRyxHQUFHLENBQUNvRCxPQUFPLENBQUNyRCxHQUFHLENBQUM7O0lBRTVCO0VBQ0Y7RUFFQSxPQUFPcUQsT0FBTztBQUNoQiIsImlnbm9yZUxpc3QiOltdfQ==