@tricoteuses/assemblee 1.10.5 → 2.0.2

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 (400) hide show
  1. package/README.md +8 -1
  2. package/lib/amendements-CN7bRFdP.js +259 -0
  3. package/lib/amendements-CN7bRFdP.js.map +1 -0
  4. package/lib/amendements-Cg1lyCBp.js +735 -0
  5. package/lib/amendements-Cg1lyCBp.js.map +1 -0
  6. package/lib/api.d.ts +1 -0
  7. package/lib/api.d.ts.map +1 -0
  8. package/lib/cleaners/actes_legislatifs.d.ts +1 -0
  9. package/lib/cleaners/actes_legislatifs.d.ts.map +1 -0
  10. package/lib/cleaners/acteurs.d.ts +1 -0
  11. package/lib/cleaners/acteurs.d.ts.map +1 -0
  12. package/lib/cleaners/amendements.d.ts +1 -0
  13. package/lib/cleaners/amendements.d.ts.map +1 -0
  14. package/lib/cleaners/debats.d.ts +1 -0
  15. package/lib/cleaners/debats.d.ts.map +1 -0
  16. package/lib/cleaners/documents.d.ts +1 -0
  17. package/lib/cleaners/documents.d.ts.map +1 -0
  18. package/lib/cleaners/dossiers_legislatifs.d.ts +1 -0
  19. package/lib/cleaners/dossiers_legislatifs.d.ts.map +1 -0
  20. package/lib/cleaners/index.d.ts +10 -9
  21. package/lib/cleaners/index.d.ts.map +1 -0
  22. package/lib/cleaners/organes.d.ts +1 -0
  23. package/lib/cleaners/organes.d.ts.map +1 -0
  24. package/lib/cleaners/questions.d.ts +1 -0
  25. package/lib/cleaners/questions.d.ts.map +1 -0
  26. package/lib/cleaners/reunions.d.ts +1 -0
  27. package/lib/cleaners/reunions.d.ts.map +1 -0
  28. package/lib/cleaners/scrutins.d.ts +1 -0
  29. package/lib/cleaners/scrutins.d.ts.map +1 -0
  30. package/lib/cleaners/xml.d.ts +1 -0
  31. package/lib/cleaners/xml.d.ts.map +1 -0
  32. package/lib/cleaners.js +1138 -0
  33. package/lib/cleaners.js.map +1 -0
  34. package/lib/datasets.d.ts +4 -3
  35. package/lib/datasets.d.ts.map +1 -0
  36. package/lib/dates.d.ts +1 -0
  37. package/lib/dates.d.ts.map +1 -0
  38. package/lib/debats-BwZYgzXe.js +3978 -0
  39. package/lib/debats-BwZYgzXe.js.map +1 -0
  40. package/lib/dossiers_legislatifs.d.ts +3 -2
  41. package/lib/dossiers_legislatifs.d.ts.map +1 -0
  42. package/lib/file_systems.d.ts +1 -0
  43. package/lib/file_systems.d.ts.map +1 -0
  44. package/lib/git.d.ts +1 -0
  45. package/lib/git.d.ts.map +1 -0
  46. package/lib/index.d.ts +18 -22
  47. package/lib/index.d.ts.map +1 -0
  48. package/lib/index.js +1916 -285
  49. package/lib/index.js.map +1 -0
  50. package/lib/inserters.d.ts +6 -5
  51. package/lib/inserters.d.ts.map +1 -0
  52. package/lib/loaders.d.ts +13 -12
  53. package/lib/loaders.d.ts.map +1 -0
  54. package/lib/loaders.js +812 -1516
  55. package/lib/loaders.js.map +1 -0
  56. package/lib/logger.d.ts +1 -0
  57. package/lib/logger.d.ts.map +1 -0
  58. package/lib/organes.d.ts +2 -1
  59. package/lib/organes.d.ts.map +1 -0
  60. package/lib/parse-CzW8NHW5.js +2850 -0
  61. package/lib/parse-CzW8NHW5.js.map +1 -0
  62. package/lib/parsers/index.d.ts +3 -3
  63. package/lib/parsers/index.d.ts.map +1 -0
  64. package/lib/parsers/plf.d.ts +2 -0
  65. package/lib/parsers/plf.d.ts.map +1 -0
  66. package/lib/parsers/recherche_amendements.d.ts +3 -2
  67. package/lib/parsers/recherche_amendements.d.ts.map +1 -0
  68. package/lib/parsers/textes_lois.d.ts +2 -23
  69. package/lib/parsers/textes_lois.d.ts.map +1 -0
  70. package/lib/parsers.js +393 -0
  71. package/lib/parsers.js.map +1 -0
  72. package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
  73. package/lib/raw_types/acteurs_et_organes.d.ts.map +1 -0
  74. package/lib/raw_types/agendas.d.ts +1 -0
  75. package/lib/raw_types/agendas.d.ts.map +1 -0
  76. package/lib/raw_types/amendements.d.ts +1 -0
  77. package/lib/raw_types/amendements.d.ts.map +1 -0
  78. package/lib/raw_types/debats.d.ts +3 -2
  79. package/lib/raw_types/debats.d.ts.map +1 -0
  80. package/lib/raw_types/dossiers_legislatifs.d.ts +2 -1
  81. package/lib/raw_types/dossiers_legislatifs.d.ts.map +1 -0
  82. package/lib/raw_types/questions.d.ts +1 -0
  83. package/lib/raw_types/questions.d.ts.map +1 -0
  84. package/lib/raw_types/scrutins.d.ts +1 -0
  85. package/lib/raw_types/scrutins.d.ts.map +1 -0
  86. package/lib/schemas/acteurs_et_organes.d.json +982 -0
  87. package/lib/schemas/acteurs_et_organes.json +1166 -0
  88. package/lib/schemas/agendas.d.json +1561 -0
  89. package/lib/schemas/agendas.json +1745 -0
  90. package/lib/schemas/amendements.d.json +1901 -0
  91. package/lib/schemas/amendements.json +2085 -0
  92. package/lib/schemas/debats.d.json +623 -0
  93. package/lib/schemas/debats.json +842 -0
  94. package/lib/schemas/dossiers_legislatifs.d.json +3690 -0
  95. package/lib/schemas/dossiers_legislatifs.json +3874 -0
  96. package/lib/schemas/legislatures.d.json +17 -0
  97. package/lib/schemas/legislatures.json +17 -0
  98. package/lib/schemas/questions.d.json +520 -0
  99. package/lib/schemas/questions.json +704 -0
  100. package/lib/schemas/scrutins.d.json +517 -0
  101. package/lib/schemas/scrutins.json +701 -0
  102. package/lib/scripts/add_links_to_documents.d.ts +2 -0
  103. package/lib/scripts/add_links_to_documents.d.ts.map +1 -0
  104. package/lib/scripts/clean_reorganized_data.d.ts +1 -0
  105. package/lib/scripts/clean_reorganized_data.d.ts.map +1 -0
  106. package/lib/scripts/copy-schemas.d.ts +2 -0
  107. package/lib/scripts/copy-schemas.d.ts.map +1 -0
  108. package/lib/scripts/diff_amendements.d.ts +1 -0
  109. package/lib/scripts/diff_amendements.d.ts.map +1 -0
  110. package/lib/scripts/document_dossiers_legislatifs.d.ts +1 -0
  111. package/lib/scripts/document_dossiers_legislatifs.d.ts.map +1 -0
  112. package/lib/scripts/generate-json-schemas.d.ts +2 -0
  113. package/lib/scripts/generate-json-schemas.d.ts.map +1 -0
  114. package/lib/scripts/get_today_reunions.d.ts +1 -0
  115. package/lib/scripts/get_today_reunions.d.ts.map +1 -0
  116. package/lib/scripts/merge_scrutins.d.ts +1 -0
  117. package/lib/scripts/merge_scrutins.d.ts.map +1 -0
  118. package/lib/scripts/process_open_dataset.d.ts +1 -0
  119. package/lib/scripts/process_open_dataset.d.ts.map +1 -0
  120. package/lib/scripts/raw_types_from_amendements.d.ts +1 -0
  121. package/lib/scripts/raw_types_from_amendements.d.ts.map +1 -0
  122. package/lib/scripts/reorganize_data.d.ts +1 -0
  123. package/lib/scripts/reorganize_data.d.ts.map +1 -0
  124. package/lib/scripts/retrieve_deputes_photos.d.ts +2 -1
  125. package/lib/scripts/retrieve_deputes_photos.d.ts.map +1 -0
  126. package/lib/scripts/retrieve_documents.d.ts +1 -0
  127. package/lib/scripts/retrieve_documents.d.ts.map +1 -0
  128. package/lib/scripts/retrieve_open_data.d.ts +1 -0
  129. package/lib/scripts/retrieve_open_data.d.ts.map +1 -0
  130. package/lib/scripts/retrieve_pending_amendments.d.ts +1 -0
  131. package/lib/scripts/retrieve_pending_amendments.d.ts.map +1 -0
  132. package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
  133. package/lib/scripts/retrieve_senateurs_photos.d.ts.map +1 -0
  134. package/lib/scripts/shared/cli_helpers.d.ts +1 -0
  135. package/lib/scripts/shared/cli_helpers.d.ts.map +1 -0
  136. package/lib/scripts/test_iter_load.d.ts +1 -0
  137. package/lib/scripts/test_iter_load.d.ts.map +1 -0
  138. package/lib/scripts/test_load.d.ts +1 -0
  139. package/lib/scripts/test_load.d.ts.map +1 -0
  140. package/lib/scripts/test_load_big_files.d.ts +1 -0
  141. package/lib/scripts/test_load_big_files.d.ts.map +1 -0
  142. package/lib/scripts/validate_json.d.ts +1 -0
  143. package/lib/scripts/validate_json.d.ts.map +1 -0
  144. package/lib/shared_types/codes_actes.d.ts +1 -0
  145. package/lib/shared_types/codes_actes.d.ts.map +1 -0
  146. package/lib/strings.d.ts +1 -0
  147. package/lib/strings.d.ts.map +1 -0
  148. package/lib/types/acteurs_et_organes.d.ts +341 -0
  149. package/lib/types/acteurs_et_organes.d.ts.map +1 -0
  150. package/lib/types/agendas.d.ts +237 -10
  151. package/lib/types/agendas.d.ts.map +1 -0
  152. package/lib/types/amendements.d.ts +277 -1
  153. package/lib/types/amendements.d.ts.map +1 -0
  154. package/lib/types/debats.d.ts +53 -2
  155. package/lib/types/debats.d.ts.map +1 -0
  156. package/lib/types/dossiers_legislatifs.d.ts +404 -9
  157. package/lib/types/dossiers_legislatifs.d.ts.map +1 -0
  158. package/lib/types/legislatures.d.ts +1 -0
  159. package/lib/types/legislatures.d.ts.map +1 -0
  160. package/lib/types/questions.d.ts +100 -2
  161. package/lib/types/questions.d.ts.map +1 -0
  162. package/lib/types/scrutins.d.ts +102 -0
  163. package/lib/types/scrutins.d.ts.map +1 -0
  164. package/lib/urls.d.ts +3 -2
  165. package/lib/urls.d.ts.map +1 -0
  166. package/package.json +31 -95
  167. package/lib/api.js +0 -52
  168. package/lib/api.mjs +0 -45
  169. package/lib/bugs/acteur-00010/plugin.test.d.ts +0 -1
  170. package/lib/bugs/acteur-00010/plugin.test.js +0 -90
  171. package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
  172. package/lib/bugs/acteur-00010.d.ts +0 -7
  173. package/lib/bugs/acteur-00010.js +0 -116
  174. package/lib/bugs/acteur-00010.mjs +0 -26
  175. package/lib/bugs/agenda-00002/plugin.test.d.ts +0 -1
  176. package/lib/bugs/agenda-00002/plugin.test.js +0 -124
  177. package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
  178. package/lib/bugs/agenda-00002.d.ts +0 -15
  179. package/lib/bugs/agenda-00002.js +0 -406
  180. package/lib/bugs/agenda-00002.mjs +0 -172
  181. package/lib/bugs/agenda-00008/plugin.test.d.ts +0 -1
  182. package/lib/bugs/agenda-00008/plugin.test.js +0 -92
  183. package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
  184. package/lib/bugs/agenda-00008.d.ts +0 -7
  185. package/lib/bugs/agenda-00008.js +0 -123
  186. package/lib/bugs/agenda-00008.mjs +0 -26
  187. package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
  188. package/lib/bugs/agenda-00011/plugin.test.js +0 -263
  189. package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
  190. package/lib/bugs/agenda-00011.d.ts +0 -16
  191. package/lib/bugs/agenda-00011.js +0 -333
  192. package/lib/bugs/agenda-00011.mjs +0 -125
  193. package/lib/bugs.d.ts +0 -21
  194. package/lib/bugs.js +0 -452
  195. package/lib/bugs.mjs +0 -70
  196. package/lib/cleaners/actes_legislatifs.js +0 -315
  197. package/lib/cleaners/actes_legislatifs.mjs +0 -253
  198. package/lib/cleaners/acteurs.js +0 -265
  199. package/lib/cleaners/acteurs.mjs +0 -180
  200. package/lib/cleaners/amendements.js +0 -294
  201. package/lib/cleaners/amendements.mjs +0 -227
  202. package/lib/cleaners/debats.js +0 -12
  203. package/lib/cleaners/debats.mjs +0 -5
  204. package/lib/cleaners/documents.js +0 -205
  205. package/lib/cleaners/documents.mjs +0 -133
  206. package/lib/cleaners/dossiers_legislatifs.js +0 -131
  207. package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
  208. package/lib/cleaners/index.js +0 -70
  209. package/lib/cleaners/index.mjs +0 -10
  210. package/lib/cleaners/organes.js +0 -65
  211. package/lib/cleaners/organes.mjs +0 -48
  212. package/lib/cleaners/questions.js +0 -12
  213. package/lib/cleaners/questions.mjs +0 -5
  214. package/lib/cleaners/reunions.js +0 -312
  215. package/lib/cleaners/reunions.mjs +0 -255
  216. package/lib/cleaners/scrutins.js +0 -340
  217. package/lib/cleaners/scrutins.mjs +0 -221
  218. package/lib/cleaners/xml.js +0 -74
  219. package/lib/cleaners/xml.mjs +0 -59
  220. package/lib/datasets.js +0 -837
  221. package/lib/datasets.mjs +0 -755
  222. package/lib/dates.js +0 -124
  223. package/lib/dates.mjs +0 -100
  224. package/lib/dossiers_legislatifs.js +0 -346
  225. package/lib/dossiers_legislatifs.mjs +0 -208
  226. package/lib/file_systems.js +0 -162
  227. package/lib/file_systems.mjs +0 -62
  228. package/lib/git.js +0 -223
  229. package/lib/git.mjs +0 -151
  230. package/lib/index.mjs +0 -17
  231. package/lib/inserters.js +0 -521
  232. package/lib/inserters.mjs +0 -337
  233. package/lib/loaders.mjs +0 -886
  234. package/lib/logger.js +0 -35
  235. package/lib/logger.mjs +0 -26
  236. package/lib/organes.js +0 -22
  237. package/lib/organes.mjs +0 -15
  238. package/lib/parsers/documents.d.ts +0 -62
  239. package/lib/parsers/documents.js +0 -453
  240. package/lib/parsers/documents.mjs +0 -370
  241. package/lib/parsers/index.js +0 -40
  242. package/lib/parsers/index.mjs +0 -4
  243. package/lib/parsers/recherche_amendements.js +0 -403
  244. package/lib/parsers/recherche_amendements.mjs +0 -167
  245. package/lib/parsers/textes_lois.js +0 -307
  246. package/lib/parsers/textes_lois.mjs +0 -264
  247. package/lib/raw_types/acteurs_et_organes.js +0 -1215
  248. package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
  249. package/lib/raw_types/agendas.js +0 -777
  250. package/lib/raw_types/agendas.mjs +0 -724
  251. package/lib/raw_types/amendements.js +0 -1052
  252. package/lib/raw_types/amendements.mjs +0 -993
  253. package/lib/raw_types/debats.js +0 -630
  254. package/lib/raw_types/debats.mjs +0 -573
  255. package/lib/raw_types/dossiers_legislatifs.js +0 -1529
  256. package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
  257. package/lib/raw_types/questions.js +0 -469
  258. package/lib/raw_types/questions.mjs +0 -416
  259. package/lib/raw_types/scrutins.js +0 -651
  260. package/lib/raw_types/scrutins.mjs +0 -598
  261. package/lib/schemas/acteur/Acteur.json +0 -56
  262. package/lib/schemas/acteur/AdresseElectronique.json +0 -52
  263. package/lib/schemas/acteur/AdressePostale.json +0 -75
  264. package/lib/schemas/acteur/Civ.json +0 -14
  265. package/lib/schemas/acteur/Collaborateur.json +0 -29
  266. package/lib/schemas/acteur/EtatCivil.json +0 -51
  267. package/lib/schemas/acteur/Ident.json +0 -40
  268. package/lib/schemas/acteur/Lieu.json +0 -66
  269. package/lib/schemas/acteur/Mandat.json +0 -192
  270. package/lib/schemas/acteur/Profession.json +0 -46
  271. package/lib/schemas/agenda/Agenda.json +0 -318
  272. package/lib/schemas/agenda/CycleDeVie.json +0 -45
  273. package/lib/schemas/agenda/PointOdj.json +0 -82
  274. package/lib/schemas/amendement/Amendement.json +0 -246
  275. package/lib/schemas/amendement/Diff.json +0 -25
  276. package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
  277. package/lib/schemas/amendement/Identifiant.json +0 -62
  278. package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
  279. package/lib/schemas/amendement/Representation.json +0 -67
  280. package/lib/schemas/amendement/Total.json +0 -26
  281. package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
  282. package/lib/schemas/converted_from_type/agendas.json +0 -1100
  283. package/lib/schemas/converted_from_type/amendements.json +0 -3191
  284. package/lib/schemas/converted_from_type/debats.json +0 -682
  285. package/lib/schemas/converted_from_type/deputes.json +0 -26
  286. package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
  287. package/lib/schemas/converted_from_type/legislatures.json +0 -16
  288. package/lib/schemas/converted_from_type/questions.json +0 -328
  289. package/lib/schemas/converted_from_type/scrutins.json +0 -393
  290. package/lib/schemas/debat/Contenu.json +0 -75
  291. package/lib/schemas/debat/Debat.json +0 -40
  292. package/lib/schemas/debat/Metadonnees.json +0 -75
  293. package/lib/schemas/debat/Orateur.json +0 -60
  294. package/lib/schemas/debat/Point.json +0 -169
  295. package/lib/schemas/debat/Sommaire.json +0 -71
  296. package/lib/schemas/debat/SommaireElement.json +0 -108
  297. package/lib/schemas/debat/Texte.json +0 -34
  298. package/lib/schemas/document/CodeLibelle.json +0 -25
  299. package/lib/schemas/document/Document.json +0 -385
  300. package/lib/schemas/document/Indexation.json +0 -38
  301. package/lib/schemas/dossier/ActeLegislatif.json +0 -211
  302. package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
  303. package/lib/schemas/dossier/Agenda.json +0 -23
  304. package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
  305. package/lib/schemas/dossier/Decision.json +0 -25
  306. package/lib/schemas/dossier/Dossier.json +0 -124
  307. package/lib/schemas/dossier/EtudeImpact.json +0 -29
  308. package/lib/schemas/dossier/EtudePlf.json +0 -105
  309. package/lib/schemas/dossier/Europe.json +0 -42
  310. package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
  311. package/lib/schemas/dossier/InfoJO.json +0 -23
  312. package/lib/schemas/dossier/Initiateur.json +0 -36
  313. package/lib/schemas/dossier/Motion.json +0 -27
  314. package/lib/schemas/dossier/Promulgation.json +0 -62
  315. package/lib/schemas/dossier/Rapporteur.json +0 -36
  316. package/lib/schemas/dossier/Texte.json +0 -47
  317. package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
  318. package/lib/schemas/organe/Organe.json +0 -136
  319. package/lib/schemas/organe/ViMoDe.json +0 -28
  320. package/lib/schemas/question/Auteur.json +0 -58
  321. package/lib/schemas/question/Cloture.json +0 -28
  322. package/lib/schemas/question/InfoJO.json +0 -40
  323. package/lib/schemas/question/MinAttribElement.json +0 -30
  324. package/lib/schemas/question/Question.json +0 -172
  325. package/lib/schemas/question/Renouvellement.json +0 -17
  326. package/lib/schemas/question/Signalement.json +0 -21
  327. package/lib/schemas/question/Texte.json +0 -24
  328. package/lib/schemas/scrutin/DecompteVoix.json +0 -35
  329. package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
  330. package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
  331. package/lib/schemas/scrutin/OrganeVotant.json +0 -88
  332. package/lib/schemas/scrutin/Scrutin.json +0 -187
  333. package/lib/schemas/scrutin/Votant.json +0 -37
  334. package/lib/scripts/bugs_helper.d.ts +0 -13
  335. package/lib/scripts/bugs_helper.js +0 -595
  336. package/lib/scripts/bugs_helper.mjs +0 -251
  337. package/lib/scripts/clean_reorganized_data.js +0 -613
  338. package/lib/scripts/clean_reorganized_data.mjs +0 -276
  339. package/lib/scripts/diff_amendements.js +0 -249
  340. package/lib/scripts/diff_amendements.mjs +0 -202
  341. package/lib/scripts/document_dossiers_legislatifs.js +0 -655
  342. package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
  343. package/lib/scripts/get_today_reunions.js +0 -37
  344. package/lib/scripts/get_today_reunions.mjs +0 -31
  345. package/lib/scripts/merge_scrutins.js +0 -97
  346. package/lib/scripts/merge_scrutins.mjs +0 -47
  347. package/lib/scripts/parse_textes_lois.d.ts +0 -1
  348. package/lib/scripts/parse_textes_lois.js +0 -171
  349. package/lib/scripts/parse_textes_lois.mjs +0 -140
  350. package/lib/scripts/process_open_dataset.js +0 -301
  351. package/lib/scripts/process_open_dataset.mjs +0 -134
  352. package/lib/scripts/raw_types_from_amendements.js +0 -135
  353. package/lib/scripts/raw_types_from_amendements.mjs +0 -134
  354. package/lib/scripts/reorganize_data.js +0 -805
  355. package/lib/scripts/reorganize_data.mjs +0 -517
  356. package/lib/scripts/retrieve_deputes_photos.js +0 -310
  357. package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
  358. package/lib/scripts/retrieve_documents.js +0 -547
  359. package/lib/scripts/retrieve_documents.mjs +0 -242
  360. package/lib/scripts/retrieve_open_data.js +0 -107
  361. package/lib/scripts/retrieve_open_data.mjs +0 -26
  362. package/lib/scripts/retrieve_pending_amendments.js +0 -206
  363. package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
  364. package/lib/scripts/retrieve_senateurs_photos.js +0 -234
  365. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
  366. package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
  367. package/lib/scripts/retrieve_textes_lois.js +0 -240
  368. package/lib/scripts/retrieve_textes_lois.mjs +0 -85
  369. package/lib/scripts/shared/cli_helpers.js +0 -89
  370. package/lib/scripts/shared/cli_helpers.mjs +0 -81
  371. package/lib/scripts/test_iter_load.js +0 -155
  372. package/lib/scripts/test_iter_load.mjs +0 -72
  373. package/lib/scripts/test_load.js +0 -26
  374. package/lib/scripts/test_load.mjs +0 -16
  375. package/lib/scripts/test_load_big_files.js +0 -26
  376. package/lib/scripts/test_load_big_files.mjs +0 -16
  377. package/lib/scripts/validate_json.js +0 -353
  378. package/lib/scripts/validate_json.mjs +0 -184
  379. package/lib/shared_types/codes_actes.js +0 -231
  380. package/lib/shared_types/codes_actes.mjs +0 -224
  381. package/lib/strings.js +0 -16
  382. package/lib/strings.mjs +0 -7
  383. package/lib/types/acteurs_et_organes.js +0 -965
  384. package/lib/types/acteurs_et_organes.mjs +0 -906
  385. package/lib/types/agendas.js +0 -628
  386. package/lib/types/agendas.mjs +0 -575
  387. package/lib/types/amendements.js +0 -899
  388. package/lib/types/amendements.mjs +0 -842
  389. package/lib/types/debats.js +0 -619
  390. package/lib/types/debats.mjs +0 -562
  391. package/lib/types/dossiers_legislatifs.js +0 -1188
  392. package/lib/types/dossiers_legislatifs.mjs +0 -1130
  393. package/lib/types/legislatures.js +0 -17
  394. package/lib/types/legislatures.mjs +0 -10
  395. package/lib/types/questions.js +0 -454
  396. package/lib/types/questions.mjs +0 -401
  397. package/lib/types/scrutins.js +0 -556
  398. package/lib/types/scrutins.mjs +0 -503
  399. package/lib/urls.js +0 -325
  400. package/lib/urls.mjs +0 -258
package/lib/datasets.js DELETED
@@ -1,837 +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.function.name.js");
11
- require("core-js/modules/es.object.define-property.js");
12
- require("core-js/modules/es.string.iterator.js");
13
- require("core-js/modules/web.dom-collections.iterator.js");
14
- Object.defineProperty(exports, "__esModule", {
15
- value: true
16
- });
17
- exports.EnabledDatasets = exports.DatasetStructure = void 0;
18
- exports.datasetDirectorySchema = datasetDirectorySchema;
19
- exports.datasets = void 0;
20
- exports.diffUpstream = diffUpstream;
21
- exports.fileDatasetUrl = fileDatasetUrl;
22
- exports.filterByLegislature = filterByLegislature;
23
- exports.getDatasets = getDatasets;
24
- exports.getEnabledDatasets = getEnabledDatasets;
25
- exports.getSchemas = getSchemas;
26
- exports.masterUrl = masterUrl;
27
- exports.validDataset = validDataset;
28
- require("core-js/modules/es.array.concat.js");
29
- require("core-js/modules/es.array.filter.js");
30
- require("core-js/modules/es.array.includes.js");
31
- require("core-js/modules/es.array.join.js");
32
- require("core-js/modules/es.array.map.js");
33
- require("core-js/modules/es.array.reduce.js");
34
- require("core-js/modules/es.date.to-string.js");
35
- require("core-js/modules/es.object.entries.js");
36
- require("core-js/modules/es.object.keys.js");
37
- require("core-js/modules/es.object.to-string.js");
38
- require("core-js/modules/es.object.values.js");
39
- require("core-js/modules/es.regexp.constructor.js");
40
- require("core-js/modules/es.regexp.exec.js");
41
- require("core-js/modules/es.regexp.to-string.js");
42
- require("core-js/modules/es.string.includes.js");
43
- var _crypto = require("crypto");
44
- var _assert = _interopRequireDefault(require("assert"));
45
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
46
- var _path = _interopRequireDefault(require("path"));
47
- var _legislatures = require("./types/legislatures");
48
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
49
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
50
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
51
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
52
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
53
- 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; } } }; }
54
- 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; } }
55
- 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; }
56
- var DatasetStructure = exports.DatasetStructure = /*#__PURE__*/function (DatasetStructure) {
57
- DatasetStructure[DatasetStructure["SingleFile"] = 0] = "SingleFile";
58
- DatasetStructure[DatasetStructure["SegmentedFiles"] = 1] = "SegmentedFiles";
59
- return DatasetStructure;
60
- }({});
61
- var EnabledDatasets = exports.EnabledDatasets = /*#__PURE__*/function (EnabledDatasets) {
62
- EnabledDatasets[EnabledDatasets["None"] = 0] = "None";
63
- EnabledDatasets[EnabledDatasets["ActeursEtOrganes"] = 1] = "ActeursEtOrganes";
64
- EnabledDatasets[EnabledDatasets["Agendas"] = 2] = "Agendas";
65
- EnabledDatasets[EnabledDatasets["Amendements"] = 4] = "Amendements";
66
- EnabledDatasets[EnabledDatasets["DossiersLegislatifs"] = 8] = "DossiersLegislatifs";
67
- EnabledDatasets[EnabledDatasets["Photos"] = 16] = "Photos";
68
- EnabledDatasets[EnabledDatasets["Scrutins"] = 32] = "Scrutins";
69
- EnabledDatasets[EnabledDatasets["Questions"] = 64] = "Questions";
70
- EnabledDatasets[EnabledDatasets["ComptesRendusSeances"] = 128] = "ComptesRendusSeances";
71
- EnabledDatasets[EnabledDatasets["All"] = 255] = "All";
72
- return EnabledDatasets;
73
- }({}); // The zip files (named NAME.json.zip) usually contain a single subfolder named "json"
74
- // containing the actual contents
75
- // We'd rather rename the folder NAME.json
76
- function repairForJsonSubdirectory(dataset, dataDir) {
77
- var targetDir = _path["default"].join(dataDir, dataset.filename);
78
- if (_fsExtra["default"].existsSync(targetDir)) {
79
- _fsExtra["default"].removeSync(targetDir);
80
- }
81
- if (_fsExtra["default"].existsSync(_path["default"].join(dataDir, "json"))) {
82
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "json"), targetDir);
83
- } else {
84
- _fsExtra["default"].mkdirSync(targetDir);
85
- }
86
- }
87
- var datasets = exports.datasets = {
88
- acteursEtOrganes: [{
89
- // AMO10 (XVII)
90
- //
91
- // Contient les députés actifs
92
- // * avec tous les mandats en cours
93
- // * y compris avec leur parti politique (typeOrgane: "PARPOL")
94
- // * mais sans les mandats achevés (y compris dans cette législature)
95
- //
96
- // Organes :
97
- // * Contient seulement les organes correspondants aux mandats en cours
98
- // * avec le xsiType de l'organe
99
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
100
- // * avec des délégations sénatoriales en cours
101
- // * avec des groupes sénatoriaux en cours
102
- // * avec des ministères en cours
103
- // * avec les Présidences de la République (y compris Sarkozy)
104
- // * avec le Conseil constitutionnel
105
- //
106
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO20
107
- // (qui est lui même un sous-ensemble de l'AMO30).
108
- // Il n'apporte donc absolument rien par rapport à AMO20 ou l'AMO30.
109
- filename: "AMO10_deputes_actifs_mandats_actifs_organes_XVII.json",
110
- ignoreForWeb: true,
111
- legislature: _legislatures.Legislature.DixSept,
112
- repairZip: repairForJsonSubdirectory,
113
- structure: DatasetStructure.SegmentedFiles,
114
- title: "Députés actifs et organes de la XVIIème législature",
115
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes.json.zip"
116
- }, {
117
- // AMO10 (XVI)
118
- //
119
- // Contient les députés actifs
120
- // * avec tous les mandats en cours
121
- // * y compris avec leur parti politique (typeOrgane: "PARPOL")
122
- // * mais sans les mandats achevés (y compris dans cette législature)
123
- //
124
- // Organes :
125
- // * Contient seulement les organes correspondants aux mandats en cours
126
- // * avec le xsiType de l'organe
127
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
128
- // * avec des délégations sénatoriales en cours
129
- // * avec des groupes sénatoriaux en cours
130
- // * avec des ministères en cours
131
- // * avec les Présidences de la République (y compris Sarkozy)
132
- // * avec le Conseil constitutionnel
133
- //
134
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO20
135
- // (qui est lui même un sous-ensemble de l'AMO30).
136
- // Il n'apporte donc absolument rien par rapport à AMO20 ou l'AMO30.
137
- filename: "AMO10_deputes_actifs_mandats_actifs_organes_XVI.json",
138
- ignoreForWeb: true,
139
- legislature: _legislatures.Legislature.Seize,
140
- repairZip: repairForJsonSubdirectory,
141
- structure: DatasetStructure.SegmentedFiles,
142
- title: "Députés actifs et organes de la XVIème législature",
143
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes.json.zip"
144
- }, {
145
- // AMO10 (XV)
146
- //
147
- // Contient les députés actifs
148
- // * avec tous les mandats en cours
149
- // * y compris avec leur parti politique (typeOrgane: "PARPOL")
150
- // * mais sans les mandats achevés (y compris dans cette législature)
151
- //
152
- // Organes :
153
- // * Contient seulement les organes correspondants aux mandats en cours
154
- // * avec le xsiType de l'organe
155
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
156
- // * avec des délégations sénatoriales en cours
157
- // * avec des groupes sénatoriaux en cours
158
- // * avec des ministères en cours
159
- // * avec les Présidences de la République (y compris Sarkozy)
160
- // * avec le Conseil constitutionnel
161
- //
162
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO20
163
- // (qui est lui même un sous-ensemble de l'AMO30).
164
- // Il n'apporte donc absolument rien par rapport à AMO20 ou l'AMO30.
165
- filename: "AMO10_deputes_actifs_mandats_actifs_organes_XV.json",
166
- ignoreForWeb: true,
167
- legislature: _legislatures.Legislature.Quinze,
168
- repairZip: repairForJsonSubdirectory,
169
- structure: DatasetStructure.SegmentedFiles,
170
- title: "Députés actifs et organes de la XVème législature",
171
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_actifs_mandats_actifs_organes/AMO10_deputes_actifs_mandats_actifs_organes_XV.json.zip"
172
- }, {
173
- // AMO20 (XVII)
174
- //
175
- // Contient les députés de la législature, actifs ou non (invalidés, etc), les sénateurs actuels
176
- // Pour les députés :
177
- // * avec tous leurs mandats de la législature
178
- // * y compris les mandats achevés
179
- // * y compris leurs partis politiques (typeOrgane: "PARPOL")
180
- // * mais sans les mandats des législatures précédentes (qui sont dans AMO40)
181
- //
182
- // Contient tous les organes référencés par les mandats
183
- // * avec le xsiType de l'organe
184
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
185
- // * avec des délégations sénatoriales en cours
186
- // * avec des groupes sénatoriaux en cours
187
- // * avec des ministères en cours
188
- // * avec les Présidences de la République (y compris Sarkozy)
189
- // * avec le Conseil constitutionnel
190
- //
191
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO30.
192
- // Il n'apporte donc absolument rien par rapport à l'AMO30.
193
- filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XVII.json",
194
- ignoreForWeb: true,
195
- legislature: _legislatures.Legislature.DixSept,
196
- repairZip: repairForJsonSubdirectory,
197
- structure: DatasetStructure.SegmentedFiles,
198
- title: "Acteurs et organes de la XVIIème législature",
199
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes.json.zip"
200
- }, {
201
- // AMO20 (XVI)
202
- //
203
- // Contient les députés de la législature, actifs ou non (invalidés, etc), les sénateurs actuels
204
- // Pour les députés :
205
- // * avec tous leurs mandats de la législature
206
- // * y compris les mandats achevés
207
- // * y compris leurs partis politiques (typeOrgane: "PARPOL")
208
- // * mais sans les mandats des législatures précédentes (qui sont dans AMO40)
209
- //
210
- // Contient tous les organes référencés par les mandats
211
- // * avec le xsiType de l'organe
212
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
213
- // * avec des délégations sénatoriales en cours
214
- // * avec des groupes sénatoriaux en cours
215
- // * avec des ministères en cours
216
- // * avec les Présidences de la République (y compris Sarkozy)
217
- // * avec le Conseil constitutionnel
218
- //
219
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO30.
220
- // Il n'apporte donc absolument rien par rapport à l'AMO30.
221
- filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XVI.json",
222
- ignoreForWeb: true,
223
- legislature: _legislatures.Legislature.Seize,
224
- repairZip: repairForJsonSubdirectory,
225
- structure: DatasetStructure.SegmentedFiles,
226
- title: "Acteurs et organes de la XVIème législature",
227
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes.json.zip"
228
- }, {
229
- // AMO20 (XV)
230
- //
231
- // Contient les députés de la législature, actifs ou non (invalidés, etc), les sénateurs actuels
232
- // Pour les députés :
233
- // * avec tous leurs mandats de la législature
234
- // * y compris les mandats achevés
235
- // * y compris leurs partis politiques (typeOrgane: "PARPOL")
236
- // * mais sans les mandats des législatures précédentes (qui sont dans AMO40)
237
- //
238
- // Contient tous les organes référencés par les mandats
239
- // * avec le xsiType de l'organe
240
- // * avec des commissions sénatoriales (permanentes et spéciales) en cours
241
- // * avec des délégations sénatoriales en cours
242
- // * avec des groupes sénatoriaux en cours
243
- // * avec des ministères en cours
244
- // * avec les Présidences de la République (y compris Sarkozy)
245
- // * avec le Conseil constitutionnel
246
- //
247
- // Ce fichier est un sous-ensemble à tous les niveaux du fichier AMO30.
248
- // Il n'apporte donc absolument rien par rapport à l'AMO30.
249
- filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XV.json",
250
- ignoreForWeb: true,
251
- legislature: _legislatures.Legislature.Quinze,
252
- repairZip: repairForJsonSubdirectory,
253
- structure: DatasetStructure.SegmentedFiles,
254
- title: "Acteurs et organes de la XVème législature",
255
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_senateurs_ministres_legislature/AMO20_dep_sen_min_tous_mandats_et_organes_XV.json.zip"
256
- }, {
257
- // AMO20 (XIV)
258
- //
259
- // Comme AMO20 (XV) mais pour la XIVème législature
260
- // Tous les acteurs sauf un (PA429892) sont présents en plus à jour dans AMO30.
261
- // Cet acteur PA429892 (ancienne Sénatrice) n'est présent dans aucun des autres
262
- // fichiers AMO.
263
- // Tous les organes sont présents en plus complets dans AMO30.
264
- //
265
- // Ce fichier est donc à un détail prêt (PA429892) un sous-ensemble d'AMO30.
266
- // Il n'apporte donc quasiment rien par rapport à l'AMO30.
267
- filename: "AMO20_dep_sen_min_tous_mandats_et_organes_XIV.json",
268
- ignoreForWeb: true,
269
- legislature: _legislatures.Legislature.Quatorze,
270
- structure: DatasetStructure.SingleFile,
271
- title: "Acteurs et organes de la XIVème législature",
272
- url: "http://data.assemblee-nationale.fr/static/openData/repository/14/amo/deputes_senateurs_ministres_legislatures_XIV/AMO20_dep_sen_min_tous_mandats_et_organes_XIV.json.zip"
273
- }, {
274
- // AMO30 (XVII)
275
- //
276
- // Ce fichier contient tous les acteurs et organes.
277
- // C'est un sur-ensemble des fichiers AMO20.
278
- filename: "AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json",
279
- legislature: _legislatures.Legislature.All,
280
- repairZip: repairForJsonSubdirectory,
281
- structure: DatasetStructure.SegmentedFiles,
282
- title: "Historique de tous les acteurs et organes depuis la XIème législature",
283
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/amo/tous_acteurs_mandats_organes_xi_legislature/AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json.zip"
284
- },
285
- // {
286
- // // AMO30 (XVI)
287
- // //
288
- // // Ce fichier contient tous les acteurs et organes.
289
- // // C'est un sur-ensemble des fichiers AMO20.
290
- // filename: "AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json",
291
- // legislature: Legislature.All,
292
- // repairZip: repairForJsonSubdirectory,
293
- // structure: DatasetStructure.SegmentedFiles,
294
- // title:
295
- // "Historique de tous les acteurs et organes depuis la XIème législature",
296
- // url: "http://data.assemblee-nationale.fr/static/openData/repository/16/amo/tous_acteurs_mandats_organes_xi_legislature/AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json.zip",
297
- // },
298
- // {
299
- // // AMO30 (XV)
300
- // //
301
- // // Ce fichier contient tous les acteurs et organes.
302
- // // C'est un sur-ensemble des fichiers AMO20.
303
- // filename: "AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json",
304
- // legislature: Legislature.All,
305
- // repairZip: (dataset: Dataset, dataDir: string) => {
306
- // const targetDir = path.join(dataDir, dataset.filename)
307
- // if (fs.existsSync(targetDir)) {
308
- // fs.removeSync(targetDir)
309
- // }
310
- // fs.moveSync(path.join(dataDir, "json"), targetDir)
311
- // },
312
- // structure: DatasetStructure.SegmentedFiles,
313
- // title:
314
- // "Historique de tous les acteurs et organes depuis la XIème législature",
315
- // url: "http://data.assemblee-nationale.fr/static/openData/repository/15/amo/tous_acteurs_mandats_organes_xi_legislature/AMO30_tous_acteurs_tous_mandats_tous_organes_historique.json.zip",
316
- // },
317
- {
318
- // AMO40 (XVII)
319
- //
320
- // Contient les députés actifs (les mêmes qu'AMO20)
321
- // * avec presque tous leurs mandats
322
- // * y compris les mandats achevés et ceux des législatures précédentes
323
- // * y compris leurs partis politiques précédents
324
- // * mais sans leur parti politique actuel (typeOrgane: "PARPOL")
325
- //
326
- // Contient beaucoup d'organes référencés, y compris ceux des législatures
327
- // précédentes
328
- // * mais il manque le xsiType des organes
329
- // * ne contient pas les organes sénatoriaux
330
- // * ne contient pas les ministères
331
- // * ne contient pas la Présidence de la République
332
- // * ne contient pas le Conseil constitutionnel
333
- //
334
- // Pour les acteurs, ce dépôt est un sous-ensemble strict de AMO30 :
335
- // Il a moins d'acteurs et il sont moins complets.
336
- //
337
- // Pour les organes :
338
- // Quand l'organe est aussi présent dans AMO30, il vaut mieux prendre celui
339
- // d'AMO30, car il contient le xsiType (c'est la seule différence semble-t-i).
340
- // Sinon, il faut le prendre seulement si on est intéressé par les législatures
341
- // précédentes.
342
- filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVII.json",
343
- ignoreForWeb: true,
344
- legislature: _legislatures.Legislature.DixSept,
345
- repairZip: function repairZip(dataset, dataDir) {
346
- var targetDir = _path["default"].join(dataDir, dataset.filename);
347
- if (_fsExtra["default"].existsSync(targetDir)) {
348
- _fsExtra["default"].removeSync(targetDir);
349
- }
350
- _fsExtra["default"].mkdirSync(targetDir);
351
- if (_fsExtra["default"].pathExistsSync(_path["default"].join(dataDir, "acteur"))) {
352
- // Note; Le répertoire acteur peut disparaître en fin de législature
353
- // quand les mandats des députés s'interrompent.
354
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
355
- }
356
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
357
- },
358
- structure: DatasetStructure.SegmentedFiles,
359
- title: "Députés actifs et organes de la XVIIème législature",
360
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises.json.zip"
361
- }, {
362
- // AMO40 (XVI)
363
- //
364
- // Contient les députés actifs (les mêmes qu'AMO20)
365
- // * avec presque tous leurs mandats
366
- // * y compris les mandats achevés et ceux des législatures précédentes
367
- // * y compris leurs partis politiques précédents
368
- // * mais sans leur parti politique actuel (typeOrgane: "PARPOL")
369
- //
370
- // Contient beaucoup d'organes référencés, y compris ceux des législatures
371
- // précédentes
372
- // * mais il manque le xsiType des organes
373
- // * ne contient pas les organes sénatoriaux
374
- // * ne contient pas les ministères
375
- // * ne contient pas la Présidence de la République
376
- // * ne contient pas le Conseil constitutionnel
377
- //
378
- // Pour les acteurs, ce dépôt est un sous-ensemble strict de AMO30 :
379
- // Il a moins d'acteurs et il sont moins complets.
380
- //
381
- // Pour les organes :
382
- // Quand l'organe est aussi présent dans AMO30, il vaut mieux prendre celui
383
- // d'AMO30, car il contient le xsiType (c'est la seule différence semble-t-i).
384
- // Sinon, il faut le prendre seulement si on est intéressé par les législatures
385
- // précédentes.
386
- filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XVI.json",
387
- ignoreForWeb: true,
388
- legislature: _legislatures.Legislature.Seize,
389
- repairZip: function repairZip(dataset, dataDir) {
390
- var targetDir = _path["default"].join(dataDir, dataset.filename);
391
- if (_fsExtra["default"].existsSync(targetDir)) {
392
- _fsExtra["default"].removeSync(targetDir);
393
- }
394
- _fsExtra["default"].mkdirSync(targetDir);
395
- if (_fsExtra["default"].pathExistsSync(_path["default"].join(dataDir, "acteur"))) {
396
- // Note; Le répertoire acteur peut disparaître en fin de législature
397
- // quand les mandats des députés s'interrompent.
398
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
399
- }
400
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
401
- },
402
- structure: DatasetStructure.SegmentedFiles,
403
- title: "Députés actifs et organes de la XVIème législature",
404
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises.json.zip"
405
- }, {
406
- // AMO40 (XV)
407
- //
408
- // Contient les députés actifs (les mêmes qu'AMO20)
409
- // * avec presque tous leurs mandats
410
- // * y compris les mandats achevés et ceux des législatures précédentes
411
- // * y compris leurs partis politiques précédents
412
- // * mais sans leur parti politique actuel (typeOrgane: "PARPOL")
413
- //
414
- // Contient beaucoup d'organes référencés, y compris ceux des législatures
415
- // précédentes
416
- // * mais il manque le xsiType des organes
417
- // * ne contient pas les organes sénatoriaux
418
- // * ne contient pas les ministères
419
- // * ne contient pas la Présidence de la République
420
- // * ne contient pas le Conseil constitutionnel
421
- //
422
- // Pour les acteurs, ce dépôt est un sous-ensemble strict de AMO30 :
423
- // Il a moins d'acteurs et il sont moins complets.
424
- //
425
- // Pour les organes :
426
- // Quand l'organe est aussi présent dans AMO30, il vaut mieux prendre celui
427
- // d'AMO30, car il contient le xsiType (c'est la seule différence semble-t-i).
428
- // Sinon, il faut le prendre seulement si on est intéressé par les législatures
429
- // précédentes.
430
- filename: "AMO40_deputes_actifs_mandats_actifs_organes_divises_XV.json",
431
- ignoreForWeb: true,
432
- legislature: _legislatures.Legislature.Quinze,
433
- repairZip: function repairZip(dataset, dataDir) {
434
- var targetDir = _path["default"].join(dataDir, dataset.filename);
435
- if (_fsExtra["default"].existsSync(targetDir)) {
436
- _fsExtra["default"].removeSync(targetDir);
437
- }
438
- _fsExtra["default"].mkdirSync(targetDir);
439
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
440
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
441
- },
442
- structure: DatasetStructure.SegmentedFiles,
443
- title: "Députés actifs et organes de la XVème législature",
444
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/amo/deputes_actifs_mandats_actifs_organes_divises/AMO40_deputes_actifs_mandats_actifs_organes_divises_XV.json.zip"
445
- }, {
446
- // AMO50 (XVII)
447
- //
448
- // Attention, ce fichier n'est pas mis à jour régulièrement !
449
- //
450
- // Pour les acteurs :
451
- // * c'est un sous ensemble obsolète d'AMO30
452
- // * il manque les xsiType aux mandats
453
- //
454
- // Pour les organes :
455
- // * c'est un sous ensemble obsolète d'AMO30
456
- // * il manque les xsiType
457
- //
458
- // Ce fichier n'apporte donc absolument rien par rapport à l'AMO30,
459
- // dont il est un sous ensemble obsolète.
460
- filename: "AMO50_acteurs_mandats_organes_divises_XVII.json",
461
- ignoreForWeb: true,
462
- legislature: _legislatures.Legislature.DixSept,
463
- repairZip: function repairZip(dataset, dataDir) {
464
- var targetDir = _path["default"].join(dataDir, dataset.filename);
465
- if (_fsExtra["default"].existsSync(targetDir)) {
466
- _fsExtra["default"].removeSync(targetDir);
467
- }
468
- _fsExtra["default"].mkdirSync(targetDir);
469
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "mandat"), _path["default"].join(targetDir, "mandat"));
470
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
471
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
472
- },
473
- structure: DatasetStructure.SegmentedFiles,
474
- title: "Acteurs, mandats et organes de la XVIIème législature (fichiers séparés, y compris mandats)",
475
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises.json.zip"
476
- }, {
477
- // AMO50 (XVI)
478
- //
479
- // Attention, ce fichier n'est pas mis à jour régulièrement !
480
- //
481
- // Pour les acteurs :
482
- // * c'est un sous ensemble obsolète d'AMO30
483
- // * il manque les xsiType aux mandats
484
- //
485
- // Pour les organes :
486
- // * c'est un sous ensemble obsolète d'AMO30
487
- // * il manque les xsiType
488
- //
489
- // Ce fichier n'apporte donc absolument rien par rapport à l'AMO30,
490
- // dont il est un sous ensemble obsolète.
491
- filename: "AMO50_acteurs_mandats_organes_divises_XVI.json",
492
- ignoreForWeb: true,
493
- legislature: _legislatures.Legislature.Seize,
494
- repairZip: function repairZip(dataset, dataDir) {
495
- var targetDir = _path["default"].join(dataDir, dataset.filename);
496
- if (_fsExtra["default"].existsSync(targetDir)) {
497
- _fsExtra["default"].removeSync(targetDir);
498
- }
499
- _fsExtra["default"].mkdirSync(targetDir);
500
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "mandat"), _path["default"].join(targetDir, "mandat"));
501
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
502
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
503
- },
504
- structure: DatasetStructure.SegmentedFiles,
505
- title: "Acteurs, mandats et organes de la XVIème législature (fichiers séparés, y compris mandats)",
506
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises.json.zip"
507
- }, {
508
- // AMO50 (XV)
509
- //
510
- // Attention, ce fichier n'est pas mis à jour régulièrement !
511
- //
512
- // Pour les acteurs :
513
- // * c'est un sous ensemble obsolète d'AMO30
514
- // * il manque les xsiType aux mandats
515
- //
516
- // Pour les organes :
517
- // * c'est un sous ensemble obsolète d'AMO30
518
- // * il manque les xsiType
519
- //
520
- // Ce fichier n'apporte donc absolument rien par rapport à l'AMO30,
521
- // dont il est un sous ensemble obsolète.
522
- filename: "AMO50_acteurs_mandats_organes_divises_XV.json",
523
- ignoreForWeb: true,
524
- legislature: _legislatures.Legislature.Quinze,
525
- repairZip: function repairZip(dataset, dataDir) {
526
- var targetDir = _path["default"].join(dataDir, dataset.filename);
527
- if (_fsExtra["default"].existsSync(targetDir)) {
528
- _fsExtra["default"].removeSync(targetDir);
529
- }
530
- _fsExtra["default"].mkdirSync(targetDir);
531
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "mandat"), _path["default"].join(targetDir, "mandat"));
532
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "acteur"), _path["default"].join(targetDir, "acteur"));
533
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "organe"), _path["default"].join(targetDir, "organe"));
534
- },
535
- structure: DatasetStructure.SegmentedFiles,
536
- title: "Acteurs, mandats et organes de la XVème législature (fichiers séparés, y compris mandats)",
537
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/amo/acteurs_mandats_organes_divises/AMO50_acteurs_mandats_organes_divises_XV.json.zip"
538
- }],
539
- agendas: [{
540
- filename: "Agenda_XVII.json",
541
- legislature: _legislatures.Legislature.DixSept,
542
- repairZip: repairForJsonSubdirectory,
543
- structure: DatasetStructure.SegmentedFiles,
544
- title: "Agenda de la XVIIème législature",
545
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/vp/reunions/Agenda.json.zip"
546
- }, {
547
- filename: "Agenda_XVI.json",
548
- legislature: _legislatures.Legislature.Seize,
549
- repairZip: repairForJsonSubdirectory,
550
- structure: DatasetStructure.SegmentedFiles,
551
- title: "Agenda de la XVIème législature",
552
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/vp/reunions/Agenda.json.zip"
553
- }, {
554
- filename: "Agenda_XV.json",
555
- legislature: _legislatures.Legislature.Quinze,
556
- repairZip: repairForJsonSubdirectory,
557
- structure: DatasetStructure.SegmentedFiles,
558
- title: "Agenda de la XVème législature",
559
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/vp/reunions/Agenda_XV.json.zip"
560
- }, {
561
- filename: "Agenda_XIV.json",
562
- legislature: _legislatures.Legislature.Quatorze,
563
- structure: DatasetStructure.SingleFile,
564
- title: "Agenda de la XIVème législature",
565
- url: "http://data.assemblee-nationale.fr/static/openData/repository/14/vp/reunions/Agenda_XIV.json.zip"
566
- }],
567
- amendements: [{
568
- filename: "Amendements_XVII.json",
569
- legislature: _legislatures.Legislature.DixSept,
570
- repairZip: repairForJsonSubdirectory,
571
- structure: DatasetStructure.SegmentedFiles,
572
- title: "Amendements de la XVIIème législature",
573
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/loi/amendements_div_legis/Amendements.json.zip"
574
- }, {
575
- filename: "Amendements_XVI.json",
576
- legislature: _legislatures.Legislature.Seize,
577
- repairZip: repairForJsonSubdirectory,
578
- structure: DatasetStructure.SegmentedFiles,
579
- title: "Amendements de la XVIème législature",
580
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/loi/amendements_div_legis/Amendements.json.zip"
581
- }, {
582
- filename: "Amendements_XV.json",
583
- legislature: _legislatures.Legislature.Quinze,
584
- repairZip: repairForJsonSubdirectory,
585
- structure: DatasetStructure.SegmentedFiles,
586
- title: "Amendements de la XVème législature",
587
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/loi/amendements_legis/Amendements_XV.json.zip"
588
- }
589
- // {
590
- // filename: "Amendements_XIV.json",
591
- // ignoreForWeb: true,
592
- // legislature: Legislature.Quatorze,
593
- // structure: DatasetStructure.SingleFile,
594
- // title: "Amendements de la XIVème législature",
595
- // url:
596
- // "http://data.assemblee-nationale.fr/static/openData/repository/14/loi/amendements_legis_XIV/Amendements_XIV.json.zip",
597
- // },
598
- ],
599
- dossiersLegislatifs: [{
600
- filename: "Dossiers_Legislatifs_XVII.json",
601
- legislature: _legislatures.Legislature.DixSept,
602
- repairZip: repairForJsonSubdirectory,
603
- structure: DatasetStructure.SegmentedFiles,
604
- title: "Dossiers législatifs de la XVIIème législature",
605
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/loi/dossiers_legislatifs/Dossiers_Legislatifs.json.zip"
606
- }, {
607
- filename: "Dossiers_Legislatifs_XVI.json",
608
- legislature: _legislatures.Legislature.Seize,
609
- repairZip: repairForJsonSubdirectory,
610
- structure: DatasetStructure.SegmentedFiles,
611
- title: "Dossiers législatifs de la XVIème législature",
612
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/loi/dossiers_legislatifs/Dossiers_Legislatifs.json.zip"
613
- }, {
614
- filename: "Dossiers_Legislatifs_XV.json",
615
- legislature: _legislatures.Legislature.Quinze,
616
- repairZip: repairForJsonSubdirectory,
617
- structure: DatasetStructure.SegmentedFiles,
618
- title: "Dossiers législatifs de la XVème législature",
619
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/loi/dossiers_legislatifs/Dossiers_Legislatifs_XV.json.zip"
620
- }, {
621
- filename: "Dossiers_Legislatifs_XIV.json",
622
- legislature: _legislatures.Legislature.Quatorze,
623
- structure: DatasetStructure.SingleFile,
624
- title: "Dossiers législatifs de la XIVème législature",
625
- url: "http://data.assemblee-nationale.fr/static/openData/repository/14/loi/dossiers_legislatifs/Dossiers_Legislatifs_XIV.json.zip"
626
- }],
627
- scrutins: [{
628
- filename: "Scrutins_XVII.json",
629
- legislature: _legislatures.Legislature.DixSept,
630
- repairZip: repairForJsonSubdirectory,
631
- structure: DatasetStructure.SegmentedFiles,
632
- title: "Scrutins de la XVIIème législature",
633
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/loi/scrutins/Scrutins.json.zip"
634
- }, {
635
- filename: "Scrutins_XVI.json",
636
- legislature: _legislatures.Legislature.Seize,
637
- repairZip: repairForJsonSubdirectory,
638
- structure: DatasetStructure.SegmentedFiles,
639
- title: "Scrutins de la XVIème législature",
640
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/loi/scrutins/Scrutins.json.zip"
641
- }, {
642
- filename: "Scrutins_XV.json",
643
- legislature: _legislatures.Legislature.Quinze,
644
- repairZip: repairForJsonSubdirectory,
645
- structure: DatasetStructure.SegmentedFiles,
646
- title: "Scrutins de la XVème législature",
647
- url: "http://data.assemblee-nationale.fr/static/openData/repository/15/loi/scrutins/Scrutins_XV.json.zip"
648
- }, {
649
- filename: "Scrutins_XIV.json",
650
- legislature: _legislatures.Legislature.Quatorze,
651
- structure: DatasetStructure.SingleFile,
652
- title: "Scrutins de la XIVème législature",
653
- url: "http://data.assemblee-nationale.fr/static/openData/repository/14/loi/scrutins/Scrutins_XIV.json.zip"
654
- }],
655
- questions: [{
656
- filename: "Questions_ecrites_XVII.json",
657
- legislature: _legislatures.Legislature.DixSept,
658
- repairZip: repairForJsonSubdirectory,
659
- structure: DatasetStructure.SegmentedFiles,
660
- title: "Questions écrites de la XVIIème législature",
661
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_ecrites/Questions_ecrites.json.zip"
662
- }, {
663
- filename: "Questions_ecrites_XVI.json",
664
- legislature: _legislatures.Legislature.Seize,
665
- repairZip: repairForJsonSubdirectory,
666
- structure: DatasetStructure.SegmentedFiles,
667
- title: "Questions écrites de la XVIème législature",
668
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_ecrites/Questions_ecrites.json.zip"
669
- }, {
670
- filename: "Questions_gouvernement_XVII.json",
671
- legislature: _legislatures.Legislature.DixSept,
672
- repairZip: repairForJsonSubdirectory,
673
- structure: DatasetStructure.SegmentedFiles,
674
- title: "Questions au gouvernement de la XVIIème législature",
675
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_gouvernement/Questions_gouvernement.json.zip"
676
- }, {
677
- filename: "Questions_gouvernement_XVI.json",
678
- legislature: _legislatures.Legislature.Seize,
679
- repairZip: repairForJsonSubdirectory,
680
- structure: DatasetStructure.SegmentedFiles,
681
- title: "Questions au gouvernement de la XVIème législature",
682
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_gouvernement/Questions_gouvernement.json.zip"
683
- }, {
684
- filename: "Questions_orales_XVII.json",
685
- legislature: _legislatures.Legislature.DixSept,
686
- repairZip: repairForJsonSubdirectory,
687
- structure: DatasetStructure.SegmentedFiles,
688
- title: "Questions orales sans débats de la XVIIème législature",
689
- url: "http://data.assemblee-nationale.fr/static/openData/repository/17/questions/questions_orales_sans_debat/Questions_orales_sans_debat.json.zip"
690
- }, {
691
- filename: "Questions_orales_XVI.json",
692
- legislature: _legislatures.Legislature.Seize,
693
- repairZip: repairForJsonSubdirectory,
694
- structure: DatasetStructure.SegmentedFiles,
695
- title: "Questions orales sans débats de la XVIème législature",
696
- url: "http://data.assemblee-nationale.fr/static/openData/repository/16/questions/questions_orales_sans_debat/Questions_orales_sans_debat.json.zip"
697
- }],
698
- comptesRendusSeances: [{
699
- filename: "Comptes_Rendus_Seances_XVII.xml",
700
- legislature: _legislatures.Legislature.DixSept,
701
- repairZip: function repairZip(dataset, dataDir) {
702
- var targetDir = _path["default"].join(dataDir, dataset.filename);
703
- if (_fsExtra["default"].existsSync(targetDir)) {
704
- _fsExtra["default"].removeSync(targetDir);
705
- }
706
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "xml"), targetDir);
707
- },
708
- structure: DatasetStructure.SegmentedFiles,
709
- title: "Comptes rendus des séances publiques de la XVIIème législature",
710
- url: "https://data.assemblee-nationale.fr/static/openData/repository/17/vp/syceronbrut/syseron.xml.zip"
711
- }, {
712
- filename: "Comptes_Rendus_Seances_XVI.xml",
713
- legislature: _legislatures.Legislature.Seize,
714
- repairZip: function repairZip(dataset, dataDir) {
715
- var targetDir = _path["default"].join(dataDir, dataset.filename);
716
- if (_fsExtra["default"].existsSync(targetDir)) {
717
- _fsExtra["default"].removeSync(targetDir);
718
- }
719
- _fsExtra["default"].moveSync(_path["default"].join(dataDir, "xml"), targetDir);
720
- },
721
- structure: DatasetStructure.SegmentedFiles,
722
- title: "Comptes rendus des séances publiques de la XVIème législature",
723
- url: "https://data.assemblee-nationale.fr/static/openData/repository/16/vp/syceronbrut/syseron.xml.zip"
724
- }]
725
- };
726
- var directory2schema = {
727
- ".*Agenda_.*": "agenda",
728
- ".*Scrutins_.*": "scrutin",
729
- ".*Questions_.*": "question",
730
- ".*Amendements_.*": "amendement",
731
- ".*Dossiers_Legislatifs_.*/documents": "document",
732
- ".*Dossiers_Legislatifs_.*/dossiers": "dossier",
733
- ".*acteurs_mandats_organes/organes": "organe",
734
- ".*acteurs_mandats_organes/acteurs": "acteur",
735
- ".*AMO30_tous_acteurs_tous_mandats_tous_organes_historique.*/organes": "organe",
736
- ".*AMO30_tous_acteurs_tous_mandats_tous_organes_historique.*/acteurs": "acteur",
737
- ".*Comptes_Rendus_Seances_.*": "debat"
738
- };
739
- function getDatasets() {
740
- return ["Agenda_XIV", "Agenda_XV", "Agenda_XVI", "Agenda_XVII", "Scrutins_XIV", "Scrutins_XV", "Scrutins_XVI", "Scrutins_XVII", "Questions_Ecrites_XVI", "Questions_Ecrites_XVII", "Questions_Gouvernement_XVI", "Questions_Gouvernement_XVII", "Amendements_XIV", "Amendements_XV", "Amendements_XVI", "Amendements_XVII", "Dossiers_Legislatifs_XIV", "Dossiers_Legislatifs_XV", "Dossiers_Legislatifs_XVI", "Dossiers_Legislatifs_XVII", "AMO30_tous_acteurs_tous_mandats_tous_organes_historique", "acteurs_mandats_organes", "Comptes_Rendus_Seances_XVI", "Comptes_Rendus_Seances_XVII"];
741
- }
742
- function validDataset(dir) {
743
- var _iterator = _createForOfIteratorHelper(getDatasets()),
744
- _step;
745
- try {
746
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
747
- var dataset = _step.value;
748
- if (dir.includes(dataset)) return true;
749
- }
750
- } catch (err) {
751
- _iterator.e(err);
752
- } finally {
753
- _iterator.f();
754
- }
755
- return false;
756
- }
757
- function getSchemas() {
758
- return Object.values(directory2schema);
759
- }
760
- function datasetDirectorySchema(dataset) {
761
- var directories;
762
- if (dataset.includes("Dossiers_Legislatifs_")) {
763
- directories = ["".concat(dataset, "/documents"), "".concat(dataset, "/dossiers")];
764
- } else if (dataset.includes("acteurs_mandats_organes") || dataset.includes("AMO30_tous_acteurs_tous_mandats_tous_organes_historique")) {
765
- directories = ["".concat(dataset, "/organes"), "".concat(dataset, "/acteurs")];
766
- } else {
767
- directories = [dataset];
768
- }
769
- var results = [];
770
- var _iterator2 = _createForOfIteratorHelper(directories),
771
- _step2;
772
- try {
773
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
774
- var directory = _step2.value;
775
- for (var _i = 0, _Object$keys = Object.keys(directory2schema); _i < _Object$keys.length; _i++) {
776
- var re = _Object$keys[_i];
777
- if (new RegExp(re).exec(directory)) results.push(["".concat(directory, "/**/*.json"), directory2schema[re]]);
778
- }
779
- }
780
- } catch (err) {
781
- _iterator2.e(err);
782
- } finally {
783
- _iterator2.f();
784
- }
785
- return results;
786
- }
787
- function fileDatasetUrl(filename) {
788
- var re = "^.*/(.*)_nettoye/(.*)";
789
- var match = new RegExp(re).exec(filename);
790
- if (match == null) return null;
791
- var _ref = [match[1], match[2]],
792
- dataset = _ref[0],
793
- file = _ref[1];
794
- if (dataset == "AMO30_tous_acteurs_tous_mandats_tous_organes_historique") dataset = "acteurs_mandats_organes";
795
- return [dataset, file];
796
- }
797
- function diffUpstream(filename) {
798
- var datasetUrl = fileDatasetUrl(filename);
799
- if (datasetUrl == null) return filename;
800
- var _datasetUrl = _slicedToArray(datasetUrl, 2),
801
- dataset = _datasetUrl[0],
802
- file = _datasetUrl[1];
803
- var sum = (0, _crypto.createHash)("sha1").update(file).digest("hex").toString();
804
- return "[".concat(file, "](https://git.en-root.org/tricoteuses/data.tricoteuses.fr/").concat(dataset, "/-/compare/upstream...master#").concat(sum, ")");
805
- }
806
- function masterUrl(filename) {
807
- var datasetUrl = fileDatasetUrl(filename);
808
- if (datasetUrl == null) return filename;
809
- var _datasetUrl2 = _slicedToArray(datasetUrl, 2),
810
- dataset = _datasetUrl2[0],
811
- file = _datasetUrl2[1];
812
- return "[".concat(file, "](https://git.en-root.org/tricoteuses/data.tricoteuses.fr/").concat(dataset, "/-/tree/master/").concat(file, ")");
813
- }
814
- function filterByLegislature(datasets, legislature) {
815
- // When a given legislature is 0, it is the same as giving no legislature:
816
- // It means "every legislatures".
817
- if (legislature !== 0 && legislature !== undefined) {
818
- for (var _i2 = 0, _Object$entries = Object.entries(datasets); _i2 < _Object$entries.length; _i2++) {
819
- var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),
820
- key = _Object$entries$_i[0],
821
- value = _Object$entries$_i[1];
822
- datasets[key] = value.filter(function (dataset) {
823
- return dataset.legislature === _legislatures.Legislature.All || legislature === dataset.legislature;
824
- });
825
- }
826
- }
827
- return datasets;
828
- }
829
- function getEnabledDatasets(categories) {
830
- categories.map(function (datasetName) {
831
- return _assert["default"].notStrictEqual(EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
832
- });
833
- return categories.reduce(function (enabledDatasets, datasetName) {
834
- return enabledDatasets | EnabledDatasets[datasetName];
835
- }, EnabledDatasets.None);
836
- }
837
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvIiwicmVxdWlyZSIsIl9hc3NlcnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9sZWdpc2xhdHVyZXMiLCJlIiwiX19lc01vZHVsZSIsIl9zbGljZWRUb0FycmF5IiwiciIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJsIiwidCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwibiIsImkiLCJ1IiwiYSIsImYiLCJvIiwiY2FsbCIsIm5leHQiLCJPYmplY3QiLCJkb25lIiwicHVzaCIsInZhbHVlIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbiIsIkYiLCJzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJEYXRhc2V0U3RydWN0dXJlIiwiZXhwb3J0cyIsIkVuYWJsZWREYXRhc2V0cyIsInJlcGFpckZvckpzb25TdWJkaXJlY3RvcnkiLCJkYXRhc2V0IiwiZGF0YURpciIsInRhcmdldERpciIsInBhdGgiLCJqb2luIiwiZmlsZW5hbWUiLCJmcyIsImV4aXN0c1N5bmMiLCJyZW1vdmVTeW5jIiwibW92ZVN5bmMiLCJta2RpclN5bmMiLCJkYXRhc2V0cyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJpZ25vcmVGb3JXZWIiLCJsZWdpc2xhdHVyZSIsIkxlZ2lzbGF0dXJlIiwiRGl4U2VwdCIsInJlcGFpclppcCIsInN0cnVjdHVyZSIsIlNlZ21lbnRlZEZpbGVzIiwidGl0bGUiLCJ1cmwiLCJTZWl6ZSIsIlF1aW56ZSIsIlF1YXRvcnplIiwiU2luZ2xlRmlsZSIsIkFsbCIsInBhdGhFeGlzdHNTeW5jIiwiYWdlbmRhcyIsImFtZW5kZW1lbnRzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsInNjcnV0aW5zIiwicXVlc3Rpb25zIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJkaXJlY3Rvcnkyc2NoZW1hIiwiZ2V0RGF0YXNldHMiLCJ2YWxpZERhdGFzZXQiLCJkaXIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImluY2x1ZGVzIiwiZXJyIiwiZ2V0U2NoZW1hcyIsInZhbHVlcyIsImRhdGFzZXREaXJlY3RvcnlTY2hlbWEiLCJkaXJlY3RvcmllcyIsImNvbmNhdCIsInJlc3VsdHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiZGlyZWN0b3J5IiwiX2kiLCJfT2JqZWN0JGtleXMiLCJrZXlzIiwicmUiLCJSZWdFeHAiLCJleGVjIiwiZmlsZURhdGFzZXRVcmwiLCJtYXRjaCIsIl9yZWYiLCJmaWxlIiwiZGlmZlVwc3RyZWFtIiwiZGF0YXNldFVybCIsIl9kYXRhc2V0VXJsIiwic3VtIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsIm1hc3RlclVybCIsIl9kYXRhc2V0VXJsMiIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJ1bmRlZmluZWQiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMiLCJlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwia2V5IiwiZmlsdGVyIiwiZ2V0RW5hYmxlZERhdGFzZXRzIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJyZWR1Y2UiLCJlbmFibGVkRGF0YXNldHMiLCJOb25lIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGFzZXRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFzZXQge1xuICBmaWxlbmFtZTogc3RyaW5nXG4gIGlnbm9yZUZvcldlYj86IGJvb2xlYW5cbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlXG4gIHJlcGFpclppcD86IChkYXRhc2V0OiBEYXRhc2V0LCBkYXRhRGlyOiBzdHJpbmcpID0+IHZvaWRcbiAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlXG4gIHRpdGxlOiBzdHJpbmdcbiAgdXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXNldHMge1xuICBhY3RldXJzRXRPcmdhbmVzOiBEYXRhc2V0W11cbiAgYWdlbmRhczogRGF0YXNldFtdXG4gIGFtZW5kZW1lbnRzOiBEYXRhc2V0W11cbiAgZG9zc2llcnNMZWdpc2xhdGlmczogRGF0YXNldFtdXG4gIHNjcnV0aW5zOiBEYXRhc2V0W11cbiAgcXVlc3Rpb25zOiBEYXRhc2V0W11cbiAgY29tcHRlc1JlbmR1c1NlYW5jZXM6IERhdGFzZXRbXVxufVxuXG5leHBvcnQgZW51bSBEYXRhc2V0U3RydWN0dXJlIHtcbiAgU2luZ2xlRmlsZSxcbiAgU2VnbWVudGVkRmlsZXMsXG59XG5cbmV4cG9ydCBlbnVtIEVuYWJsZWREYXRhc2V0cyB7XG4gIE5vbmUgPSAwLFxuICBBY3RldXJzRXRPcmdhbmVzID0gMSA8PCAwLFxuICBBZ2VuZGFzID0gMSA8PCAxLFxuICBBbWVuZGVtZW50cyA9IDEgPDwgMixcbiAgRG9zc2llcnNMZWdpc2xhdGlmcyA9IDEgPDwgMyxcbiAgUGhvdG9zID0gMSA8PCA0LFxuICBTY3J1dGlucyA9IDEgPDwgNSxcbiAgUXVlc3Rpb25zID0gMSA8PCA2LFxuICBDb21wdGVzUmVuZHVzU2VhbmNlcyA9IDEgPDwgNyxcbiAgQWxsID0gQWN0ZXVyc0V0T3JnYW5lcyB8XG4gICAgQWdlbmRhcyB8XG4gICAgQW1lbmRlbWVudHMgfFxuICAgIERvc3NpZXJzTGVnaXNsYXRpZnMgfFxuICAgIFBob3RvcyB8XG4gICAgU2NydXRpbnMgfFxuICAgIFF1ZXN0aW9ucyB8XG4gICAgQ29tcHRlc1JlbmR1c1NlYW5jZXMsXG59XG5cbi8vIFRoZSB6aXAgZmlsZXMgKG5hbWVkIE5BTUUuanNvbi56aXApIHVzdWFsbHkgY29udGFpbiBhIHNpbmdsZSBzdWJmb2xkZXIgbmFtZWQgXCJqc29uXCJcbi8vIGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBjb250ZW50c1xuLy8gV2UnZCByYXRoZXIgcmVuYW1lIHRoZSBmb2xkZXIgTkFNRS5qc29uXG5mdW5jdGlvbiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5KGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgIGZzLnJlbW92ZVN5bmModGFyZ2V0RGlyKVxuICB9XG5cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRhdGFEaXIsIFwianNvblwiKSkpIHtcbiAgICBmcy5tb3ZlU3luYyhwYXRoLmpvaW4oZGF0YURpciwgXCJqc29uXCIpLCB0YXJnZXREaXIpXG4gIH0gZWxzZSB7XG4gICAgZnMubWtkaXJTeW5jKHRhcmdldERpcilcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGF0YXNldHM6IERhdGFzZXRzID0ge1xuICBhY3RldXJzRXRPcmdhbmVzOiBbXG4gICAge1xuICAgICAgLy8gQU1PMTAgKFhWSUkpXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgbGVzIGTDqXB1dMOpcyBhY3RpZnNcbiAgICAgIC8vICogYXZlYyB0b3VzIGxlcyBtYW5kYXRzIGVuIGNvdXJzXG4gICAgICAvLyAqIHkgY29tcHJpcyBhdmVjIGxldXIgcGFydGkgcG9saXRpcXVlICh0eXBlT3JnYW5lOiBcIlBBUlBPTFwiKVxuICAgICAgLy8gKiBtYWlzIHNhbnMgbGVzIG1hbmRhdHMgYWNoZXbDqXMgKHkgY29tcHJpcyBkYW5zIGNldHRlIGzDqWdpc2xhdHVyZSlcbiAgICAgIC8vXG4gICAgICAvLyBPcmdhbmVzIDpcbiAgICAgIC8vICogQ29udGllbnQgc2V1bGVtZW50IGxlcyBvcmdhbmVzIGNvcnJlc3BvbmRhbnRzIGF1eCBtYW5kYXRzIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgbGUgeHNpVHlwZSBkZSBsJ29yZ2FuZVxuICAgICAgLy8gKiBhdmVjIGRlcyBjb21taXNzaW9ucyBzw6luYXRvcmlhbGVzIChwZXJtYW5lbnRlcyBldCBzcMOpY2lhbGVzKSBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBkw6lsw6lnYXRpb25zIHPDqW5hdG9yaWFsZXMgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBkZXMgZ3JvdXBlcyBzw6luYXRvcmlhdXggZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBkZXMgbWluaXN0w6hyZXMgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBsZXMgUHLDqXNpZGVuY2VzIGRlIGxhIFLDqXB1YmxpcXVlICh5IGNvbXByaXMgU2Fya296eSlcbiAgICAgIC8vICogYXZlYyBsZSBDb25zZWlsIGNvbnN0aXR1dGlvbm5lbFxuICAgICAgLy9cbiAgICAgIC8vIENlIGZpY2hpZXIgZXN0IHVuIHNvdXMtZW5zZW1ibGUgw6AgdG91cyBsZXMgbml2ZWF1eCBkdSBmaWNoaWVyIEFNTzIwXG4gICAgICAvLyAocXVpIGVzdCBsdWkgbcOqbWUgdW4gc291cy1lbnNlbWJsZSBkZSBsJ0FNTzMwKS5cbiAgICAgIC8vIElsIG4nYXBwb3J0ZSBkb25jIGFic29sdW1lbnQgcmllbiBwYXIgcmFwcG9ydCDDoCBBTU8yMCBvdSBsJ0FNTzMwLlxuICAgICAgZmlsZW5hbWU6IFwiQU1PMTBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19YVklJLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5EaXhTZXB0LFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiRMOpcHV0w6lzIGFjdGlmcyBldCBvcmdhbmVzIGRlIGxhIFhWSUnDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTcvYW1vL2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXMvQU1PMTBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lcy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PMTAgKFhWSSlcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBsZXMgZMOpcHV0w6lzIGFjdGlmc1xuICAgICAgLy8gKiBhdmVjIHRvdXMgbGVzIG1hbmRhdHMgZW4gY291cnNcbiAgICAgIC8vICogeSBjb21wcmlzIGF2ZWMgbGV1ciBwYXJ0aSBwb2xpdGlxdWUgKHR5cGVPcmdhbmU6IFwiUEFSUE9MXCIpXG4gICAgICAvLyAqIG1haXMgc2FucyBsZXMgbWFuZGF0cyBhY2hldsOpcyAoeSBjb21wcmlzIGRhbnMgY2V0dGUgbMOpZ2lzbGF0dXJlKVxuICAgICAgLy9cbiAgICAgIC8vIE9yZ2FuZXMgOlxuICAgICAgLy8gKiBDb250aWVudCBzZXVsZW1lbnQgbGVzIG9yZ2FuZXMgY29ycmVzcG9uZGFudHMgYXV4IG1hbmRhdHMgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBsZSB4c2lUeXBlIGRlIGwnb3JnYW5lXG4gICAgICAvLyAqIGF2ZWMgZGVzIGNvbW1pc3Npb25zIHPDqW5hdG9yaWFsZXMgKHBlcm1hbmVudGVzIGV0IHNww6ljaWFsZXMpIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIGTDqWzDqWdhdGlvbnMgc8OpbmF0b3JpYWxlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBncm91cGVzIHPDqW5hdG9yaWF1eCBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBtaW5pc3TDqHJlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGxlcyBQcsOpc2lkZW5jZXMgZGUgbGEgUsOpcHVibGlxdWUgKHkgY29tcHJpcyBTYXJrb3p5KVxuICAgICAgLy8gKiBhdmVjIGxlIENvbnNlaWwgY29uc3RpdHV0aW9ubmVsXG4gICAgICAvL1xuICAgICAgLy8gQ2UgZmljaGllciBlc3QgdW4gc291cy1lbnNlbWJsZSDDoCB0b3VzIGxlcyBuaXZlYXV4IGR1IGZpY2hpZXIgQU1PMjBcbiAgICAgIC8vIChxdWkgZXN0IGx1aSBtw6ptZSB1biBzb3VzLWVuc2VtYmxlIGRlIGwnQU1PMzApLlxuICAgICAgLy8gSWwgbidhcHBvcnRlIGRvbmMgYWJzb2x1bWVudCByaWVuIHBhciByYXBwb3J0IMOgIEFNTzIwIG91IGwnQU1PMzAuXG4gICAgICBmaWxlbmFtZTogXCJBTU8xMF9kZXB1dGVzX2FjdGlmc19tYW5kYXRzX2FjdGlmc19vcmdhbmVzX1hWSS5qc29uXCIsXG4gICAgICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuU2VpemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJEw6lwdXTDqXMgYWN0aWZzIGV0IG9yZ2FuZXMgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE2L2Ftby9kZXB1dGVzX2FjdGlmc19tYW5kYXRzX2FjdGlmc19vcmdhbmVzL0FNTzEwX2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEFNTzEwIChYVilcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBsZXMgZMOpcHV0w6lzIGFjdGlmc1xuICAgICAgLy8gKiBhdmVjIHRvdXMgbGVzIG1hbmRhdHMgZW4gY291cnNcbiAgICAgIC8vICogeSBjb21wcmlzIGF2ZWMgbGV1ciBwYXJ0aSBwb2xpdGlxdWUgKHR5cGVPcmdhbmU6IFwiUEFSUE9MXCIpXG4gICAgICAvLyAqIG1haXMgc2FucyBsZXMgbWFuZGF0cyBhY2hldsOpcyAoeSBjb21wcmlzIGRhbnMgY2V0dGUgbMOpZ2lzbGF0dXJlKVxuICAgICAgLy9cbiAgICAgIC8vIE9yZ2FuZXMgOlxuICAgICAgLy8gKiBDb250aWVudCBzZXVsZW1lbnQgbGVzIG9yZ2FuZXMgY29ycmVzcG9uZGFudHMgYXV4IG1hbmRhdHMgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBsZSB4c2lUeXBlIGRlIGwnb3JnYW5lXG4gICAgICAvLyAqIGF2ZWMgZGVzIGNvbW1pc3Npb25zIHPDqW5hdG9yaWFsZXMgKHBlcm1hbmVudGVzIGV0IHNww6ljaWFsZXMpIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIGTDqWzDqWdhdGlvbnMgc8OpbmF0b3JpYWxlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBncm91cGVzIHPDqW5hdG9yaWF1eCBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBtaW5pc3TDqHJlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGxlcyBQcsOpc2lkZW5jZXMgZGUgbGEgUsOpcHVibGlxdWUgKHkgY29tcHJpcyBTYXJrb3p5KVxuICAgICAgLy8gKiBhdmVjIGxlIENvbnNlaWwgY29uc3RpdHV0aW9ubmVsXG4gICAgICAvL1xuICAgICAgLy8gQ2UgZmljaGllciBlc3QgdW4gc291cy1lbnNlbWJsZSDDoCB0b3VzIGxlcyBuaXZlYXV4IGR1IGZpY2hpZXIgQU1PMjBcbiAgICAgIC8vIChxdWkgZXN0IGx1aSBtw6ptZSB1biBzb3VzLWVuc2VtYmxlIGRlIGwnQU1PMzApLlxuICAgICAgLy8gSWwgbidhcHBvcnRlIGRvbmMgYWJzb2x1bWVudCByaWVuIHBhciByYXBwb3J0IMOgIEFNTzIwIG91IGwnQU1PMzAuXG4gICAgICBmaWxlbmFtZTogXCJBTU8xMF9kZXB1dGVzX2FjdGlmc19tYW5kYXRzX2FjdGlmc19vcmdhbmVzX1hWLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJEw6lwdXTDqXMgYWN0aWZzIGV0IG9yZ2FuZXMgZGUgbGEgWFbDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTUvYW1vL2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXMvQU1PMTBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19YVi5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PMjAgKFhWSUkpXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgbGVzIGTDqXB1dMOpcyBkZSBsYSBsw6lnaXNsYXR1cmUsIGFjdGlmcyBvdSBub24gKGludmFsaWTDqXMsIGV0YyksIGxlcyBzw6luYXRldXJzIGFjdHVlbHNcbiAgICAgIC8vIFBvdXIgbGVzIGTDqXB1dMOpcyA6XG4gICAgICAvLyAqIGF2ZWMgdG91cyBsZXVycyBtYW5kYXRzIGRlIGxhIGzDqWdpc2xhdHVyZVxuICAgICAgLy8gKiB5IGNvbXByaXMgbGVzIG1hbmRhdHMgYWNoZXbDqXNcbiAgICAgIC8vICogeSBjb21wcmlzIGxldXJzIHBhcnRpcyBwb2xpdGlxdWVzICAodHlwZU9yZ2FuZTogXCJQQVJQT0xcIilcbiAgICAgIC8vICogbWFpcyBzYW5zIGxlcyBtYW5kYXRzIGRlcyBsw6lnaXNsYXR1cmVzIHByw6ljw6lkZW50ZXMgKHF1aSBzb250IGRhbnMgQU1PNDApXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgdG91cyBsZXMgb3JnYW5lcyByw6lmw6lyZW5jw6lzIHBhciBsZXMgbWFuZGF0c1xuICAgICAgLy8gKiBhdmVjIGxlIHhzaVR5cGUgZGUgbCdvcmdhbmVcbiAgICAgIC8vICogYXZlYyBkZXMgY29tbWlzc2lvbnMgc8OpbmF0b3JpYWxlcyAocGVybWFuZW50ZXMgZXQgc3DDqWNpYWxlcykgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBkZXMgZMOpbMOpZ2F0aW9ucyBzw6luYXRvcmlhbGVzIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIGdyb3VwZXMgc8OpbmF0b3JpYXV4IGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIG1pbmlzdMOocmVzIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgbGVzIFByw6lzaWRlbmNlcyBkZSBsYSBSw6lwdWJsaXF1ZSAoeSBjb21wcmlzIFNhcmtvenkpXG4gICAgICAvLyAqIGF2ZWMgbGUgQ29uc2VpbCBjb25zdGl0dXRpb25uZWxcbiAgICAgIC8vXG4gICAgICAvLyBDZSBmaWNoaWVyIGVzdCB1biBzb3VzLWVuc2VtYmxlIMOgIHRvdXMgbGVzIG5pdmVhdXggZHUgZmljaGllciBBTU8zMC5cbiAgICAgIC8vIElsIG4nYXBwb3J0ZSBkb25jIGFic29sdW1lbnQgcmllbiBwYXIgcmFwcG9ydCDDoCBsJ0FNTzMwLlxuICAgICAgZmlsZW5hbWU6IFwiQU1PMjBfZGVwX3Nlbl9taW5fdG91c19tYW5kYXRzX2V0X29yZ2FuZXNfWFZJSS5qc29uXCIsXG4gICAgICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuRGl4U2VwdCxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkFjdGV1cnMgZXQgb3JnYW5lcyBkZSBsYSBYVklJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE3L2Ftby9kZXB1dGVzX3NlbmF0ZXVyc19taW5pc3RyZXNfbGVnaXNsYXR1cmUvQU1PMjBfZGVwX3Nlbl9taW5fdG91c19tYW5kYXRzX2V0X29yZ2FuZXMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEFNTzIwIChYVkkpXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgbGVzIGTDqXB1dMOpcyBkZSBsYSBsw6lnaXNsYXR1cmUsIGFjdGlmcyBvdSBub24gKGludmFsaWTDqXMsIGV0YyksIGxlcyBzw6luYXRldXJzIGFjdHVlbHNcbiAgICAgIC8vIFBvdXIgbGVzIGTDqXB1dMOpcyA6XG4gICAgICAvLyAqIGF2ZWMgdG91cyBsZXVycyBtYW5kYXRzIGRlIGxhIGzDqWdpc2xhdHVyZVxuICAgICAgLy8gKiB5IGNvbXByaXMgbGVzIG1hbmRhdHMgYWNoZXbDqXNcbiAgICAgIC8vICogeSBjb21wcmlzIGxldXJzIHBhcnRpcyBwb2xpdGlxdWVzICAodHlwZU9yZ2FuZTogXCJQQVJQT0xcIilcbiAgICAgIC8vICogbWFpcyBzYW5zIGxlcyBtYW5kYXRzIGRlcyBsw6lnaXNsYXR1cmVzIHByw6ljw6lkZW50ZXMgKHF1aSBzb250IGRhbnMgQU1PNDApXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgdG91cyBsZXMgb3JnYW5lcyByw6lmw6lyZW5jw6lzIHBhciBsZXMgbWFuZGF0c1xuICAgICAgLy8gKiBhdmVjIGxlIHhzaVR5cGUgZGUgbCdvcmdhbmVcbiAgICAgIC8vICogYXZlYyBkZXMgY29tbWlzc2lvbnMgc8OpbmF0b3JpYWxlcyAocGVybWFuZW50ZXMgZXQgc3DDqWNpYWxlcykgZW4gY291cnNcbiAgICAgIC8vICogYXZlYyBkZXMgZMOpbMOpZ2F0aW9ucyBzw6luYXRvcmlhbGVzIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIGdyb3VwZXMgc8OpbmF0b3JpYXV4IGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIG1pbmlzdMOocmVzIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgbGVzIFByw6lzaWRlbmNlcyBkZSBsYSBSw6lwdWJsaXF1ZSAoeSBjb21wcmlzIFNhcmtvenkpXG4gICAgICAvLyAqIGF2ZWMgbGUgQ29uc2VpbCBjb25zdGl0dXRpb25uZWxcbiAgICAgIC8vXG4gICAgICAvLyBDZSBmaWNoaWVyIGVzdCB1biBzb3VzLWVuc2VtYmxlIMOgIHRvdXMgbGVzIG5pdmVhdXggZHUgZmljaGllciBBTU8zMC5cbiAgICAgIC8vIElsIG4nYXBwb3J0ZSBkb25jIGFic29sdW1lbnQgcmllbiBwYXIgcmFwcG9ydCDDoCBsJ0FNTzMwLlxuICAgICAgZmlsZW5hbWU6IFwiQU1PMjBfZGVwX3Nlbl9taW5fdG91c19tYW5kYXRzX2V0X29yZ2FuZXNfWFZJLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5TZWl6ZSxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkFjdGV1cnMgZXQgb3JnYW5lcyBkZSBsYSBYVknDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTYvYW1vL2RlcHV0ZXNfc2VuYXRldXJzX21pbmlzdHJlc19sZWdpc2xhdHVyZS9BTU8yMF9kZXBfc2VuX21pbl90b3VzX21hbmRhdHNfZXRfb3JnYW5lcy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PMjAgKFhWKVxuICAgICAgLy9cbiAgICAgIC8vIENvbnRpZW50IGxlcyBkw6lwdXTDqXMgZGUgbGEgbMOpZ2lzbGF0dXJlLCBhY3RpZnMgb3Ugbm9uIChpbnZhbGlkw6lzLCBldGMpLCBsZXMgc8OpbmF0ZXVycyBhY3R1ZWxzXG4gICAgICAvLyBQb3VyIGxlcyBkw6lwdXTDqXMgOlxuICAgICAgLy8gKiBhdmVjIHRvdXMgbGV1cnMgbWFuZGF0cyBkZSBsYSBsw6lnaXNsYXR1cmVcbiAgICAgIC8vICogeSBjb21wcmlzIGxlcyBtYW5kYXRzIGFjaGV2w6lzXG4gICAgICAvLyAqIHkgY29tcHJpcyBsZXVycyBwYXJ0aXMgcG9saXRpcXVlcyAgKHR5cGVPcmdhbmU6IFwiUEFSUE9MXCIpXG4gICAgICAvLyAqIG1haXMgc2FucyBsZXMgbWFuZGF0cyBkZXMgbMOpZ2lzbGF0dXJlcyBwcsOpY8OpZGVudGVzIChxdWkgc29udCBkYW5zIEFNTzQwKVxuICAgICAgLy9cbiAgICAgIC8vIENvbnRpZW50IHRvdXMgbGVzIG9yZ2FuZXMgcsOpZsOpcmVuY8OpcyBwYXIgbGVzIG1hbmRhdHNcbiAgICAgIC8vICogYXZlYyBsZSB4c2lUeXBlIGRlIGwnb3JnYW5lXG4gICAgICAvLyAqIGF2ZWMgZGVzIGNvbW1pc3Npb25zIHPDqW5hdG9yaWFsZXMgKHBlcm1hbmVudGVzIGV0IHNww6ljaWFsZXMpIGVuIGNvdXJzXG4gICAgICAvLyAqIGF2ZWMgZGVzIGTDqWzDqWdhdGlvbnMgc8OpbmF0b3JpYWxlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBncm91cGVzIHPDqW5hdG9yaWF1eCBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGRlcyBtaW5pc3TDqHJlcyBlbiBjb3Vyc1xuICAgICAgLy8gKiBhdmVjIGxlcyBQcsOpc2lkZW5jZXMgZGUgbGEgUsOpcHVibGlxdWUgKHkgY29tcHJpcyBTYXJrb3p5KVxuICAgICAgLy8gKiBhdmVjIGxlIENvbnNlaWwgY29uc3RpdHV0aW9ubmVsXG4gICAgICAvL1xuICAgICAgLy8gQ2UgZmljaGllciBlc3QgdW4gc291cy1lbnNlbWJsZSDDoCB0b3VzIGxlcyBuaXZlYXV4IGR1IGZpY2hpZXIgQU1PMzAuXG4gICAgICAvLyBJbCBuJ2FwcG9ydGUgZG9uYyBhYnNvbHVtZW50IHJpZW4gcGFyIHJhcHBvcnQgw6AgbCdBTU8zMC5cbiAgICAgIGZpbGVuYW1lOiBcIkFNTzIwX2RlcF9zZW5fbWluX3RvdXNfbWFuZGF0c19ldF9vcmdhbmVzX1hWLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJBY3RldXJzIGV0IG9yZ2FuZXMgZGUgbGEgWFbDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTUvYW1vL2RlcHV0ZXNfc2VuYXRldXJzX21pbmlzdHJlc19sZWdpc2xhdHVyZS9BTU8yMF9kZXBfc2VuX21pbl90b3VzX21hbmRhdHNfZXRfb3JnYW5lc19YVi5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PMjAgKFhJVilcbiAgICAgIC8vXG4gICAgICAvLyBDb21tZSBBTU8yMCAoWFYpIG1haXMgcG91ciBsYSBYSVbDqG1lIGzDqWdpc2xhdHVyZVxuICAgICAgLy8gVG91cyBsZXMgYWN0ZXVycyBzYXVmIHVuIChQQTQyOTg5Mikgc29udCBwcsOpc2VudHMgZW4gcGx1cyDDoCBqb3VyIGRhbnMgQU1PMzAuXG4gICAgICAvLyBDZXQgYWN0ZXVyIFBBNDI5ODkyIChhbmNpZW5uZSBTw6luYXRyaWNlKSBuJ2VzdCBwcsOpc2VudCBkYW5zIGF1Y3VuIGRlcyBhdXRyZXNcbiAgICAgIC8vIGZpY2hpZXJzIEFNTy5cbiAgICAgIC8vIFRvdXMgbGVzIG9yZ2FuZXMgc29udCBwcsOpc2VudHMgZW4gcGx1cyBjb21wbGV0cyBkYW5zIEFNTzMwLlxuICAgICAgLy9cbiAgICAgIC8vIENlIGZpY2hpZXIgZXN0IGRvbmMgw6AgdW4gZMOpdGFpbCBwcsOqdCAoUEE0Mjk4OTIpIHVuIHNvdXMtZW5zZW1ibGUgZCdBTU8zMC5cbiAgICAgIC8vIElsIG4nYXBwb3J0ZSBkb25jIHF1YXNpbWVudCByaWVuIHBhciByYXBwb3J0IMOgIGwnQU1PMzAuXG4gICAgICBmaWxlbmFtZTogXCJBTU8yMF9kZXBfc2VuX21pbl90b3VzX21hbmRhdHNfZXRfb3JnYW5lc19YSVYuanNvblwiLFxuICAgICAgaWdub3JlRm9yV2ViOiB0cnVlLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlF1YXRvcnplLFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGUsXG4gICAgICB0aXRsZTogXCJBY3RldXJzIGV0IG9yZ2FuZXMgZGUgbGEgWElWw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE0L2Ftby9kZXB1dGVzX3NlbmF0ZXVyc19taW5pc3RyZXNfbGVnaXNsYXR1cmVzX1hJVi9BTU8yMF9kZXBfc2VuX21pbl90b3VzX21hbmRhdHNfZXRfb3JnYW5lc19YSVYuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEFNTzMwIChYVklJKVxuICAgICAgLy9cbiAgICAgIC8vIENlIGZpY2hpZXIgY29udGllbnQgdG91cyBsZXMgYWN0ZXVycyBldCBvcmdhbmVzLlxuICAgICAgLy8gQydlc3QgdW4gc3VyLWVuc2VtYmxlIGRlcyBmaWNoaWVycyBBTU8yMC5cbiAgICAgIGZpbGVuYW1lOiBcIkFNTzMwX3RvdXNfYWN0ZXVyc190b3VzX21hbmRhdHNfdG91c19vcmdhbmVzX2hpc3RvcmlxdWUuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLkFsbCxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOlxuICAgICAgICBcIkhpc3RvcmlxdWUgZGUgdG91cyBsZXMgYWN0ZXVycyBldCBvcmdhbmVzIGRlcHVpcyBsYSBYScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNy9hbW8vdG91c19hY3RldXJzX21hbmRhdHNfb3JnYW5lc194aV9sZWdpc2xhdHVyZS9BTU8zMF90b3VzX2FjdGV1cnNfdG91c19tYW5kYXRzX3RvdXNfb3JnYW5lc19oaXN0b3JpcXVlLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICAvLyB7XG4gICAgLy8gICAvLyBBTU8zMCAoWFZJKVxuICAgIC8vICAgLy9cbiAgICAvLyAgIC8vIENlIGZpY2hpZXIgY29udGllbnQgdG91cyBsZXMgYWN0ZXVycyBldCBvcmdhbmVzLlxuICAgIC8vICAgLy8gQydlc3QgdW4gc3VyLWVuc2VtYmxlIGRlcyBmaWNoaWVycyBBTU8yMC5cbiAgICAvLyAgIGZpbGVuYW1lOiBcIkFNTzMwX3RvdXNfYWN0ZXVyc190b3VzX21hbmRhdHNfdG91c19vcmdhbmVzX2hpc3RvcmlxdWUuanNvblwiLFxuICAgIC8vICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLkFsbCxcbiAgICAvLyAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAvLyAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAvLyAgIHRpdGxlOlxuICAgIC8vICAgICBcIkhpc3RvcmlxdWUgZGUgdG91cyBsZXMgYWN0ZXVycyBldCBvcmdhbmVzIGRlcHVpcyBsYSBYScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgLy8gICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNi9hbW8vdG91c19hY3RldXJzX21hbmRhdHNfb3JnYW5lc194aV9sZWdpc2xhdHVyZS9BTU8zMF90b3VzX2FjdGV1cnNfdG91c19tYW5kYXRzX3RvdXNfb3JnYW5lc19oaXN0b3JpcXVlLmpzb24uemlwXCIsXG4gICAgLy8gfSxcbiAgICAvLyB7XG4gICAgLy8gICAvLyBBTU8zMCAoWFYpXG4gICAgLy8gICAvL1xuICAgIC8vICAgLy8gQ2UgZmljaGllciBjb250aWVudCB0b3VzIGxlcyBhY3RldXJzIGV0IG9yZ2FuZXMuXG4gICAgLy8gICAvLyBDJ2VzdCB1biBzdXItZW5zZW1ibGUgZGVzIGZpY2hpZXJzIEFNTzIwLlxuICAgIC8vICAgZmlsZW5hbWU6IFwiQU1PMzBfdG91c19hY3RldXJzX3RvdXNfbWFuZGF0c190b3VzX29yZ2FuZXNfaGlzdG9yaXF1ZS5qc29uXCIsXG4gICAgLy8gICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuQWxsLFxuICAgIC8vICAgcmVwYWlyWmlwOiAoZGF0YXNldDogRGF0YXNldCwgZGF0YURpcjogc3RyaW5nKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IHRhcmdldERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgIC8vICAgICBpZiAoZnMuZXhpc3RzU3luYyh0YXJnZXREaXIpKSB7XG4gICAgLy8gICAgICAgZnMucmVtb3ZlU3luYyh0YXJnZXREaXIpXG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgZnMubW92ZVN5bmMocGF0aC5qb2luKGRhdGFEaXIsIFwianNvblwiKSwgdGFyZ2V0RGlyKVxuICAgIC8vICAgfSxcbiAgICAvLyAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAvLyAgIHRpdGxlOlxuICAgIC8vICAgICBcIkhpc3RvcmlxdWUgZGUgdG91cyBsZXMgYWN0ZXVycyBldCBvcmdhbmVzIGRlcHVpcyBsYSBYScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgLy8gICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNS9hbW8vdG91c19hY3RldXJzX21hbmRhdHNfb3JnYW5lc194aV9sZWdpc2xhdHVyZS9BTU8zMF90b3VzX2FjdGV1cnNfdG91c19tYW5kYXRzX3RvdXNfb3JnYW5lc19oaXN0b3JpcXVlLmpzb24uemlwXCIsXG4gICAgLy8gfSxcbiAgICB7XG4gICAgICAvLyBBTU80MCAoWFZJSSlcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBsZXMgZMOpcHV0w6lzIGFjdGlmcyAobGVzIG3Dqm1lcyBxdSdBTU8yMClcbiAgICAgIC8vICogYXZlYyBwcmVzcXVlIHRvdXMgbGV1cnMgbWFuZGF0c1xuICAgICAgLy8gKiB5IGNvbXByaXMgbGVzIG1hbmRhdHMgYWNoZXbDqXMgZXQgY2V1eCBkZXMgbMOpZ2lzbGF0dXJlcyBwcsOpY8OpZGVudGVzXG4gICAgICAvLyAqIHkgY29tcHJpcyBsZXVycyBwYXJ0aXMgcG9saXRpcXVlcyBwcsOpY8OpZGVudHNcbiAgICAgIC8vICogbWFpcyBzYW5zIGxldXIgcGFydGkgcG9saXRpcXVlIGFjdHVlbCAodHlwZU9yZ2FuZTogXCJQQVJQT0xcIilcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBiZWF1Y291cCBkJ29yZ2FuZXMgcsOpZsOpcmVuY8OpcywgeSBjb21wcmlzIGNldXggZGVzIGzDqWdpc2xhdHVyZXNcbiAgICAgIC8vIHByw6ljw6lkZW50ZXNcbiAgICAgIC8vICogbWFpcyBpbCBtYW5xdWUgbGUgeHNpVHlwZSBkZXMgb3JnYW5lc1xuICAgICAgLy8gKiBuZSBjb250aWVudCBwYXMgbGVzIG9yZ2FuZXMgc8OpbmF0b3JpYXV4XG4gICAgICAvLyAqIG5lIGNvbnRpZW50IHBhcyBsZXMgbWluaXN0w6hyZXNcbiAgICAgIC8vICogbmUgY29udGllbnQgcGFzIGxhIFByw6lzaWRlbmNlIGRlIGxhIFLDqXB1YmxpcXVlXG4gICAgICAvLyAqIG5lIGNvbnRpZW50IHBhcyBsZSBDb25zZWlsIGNvbnN0aXR1dGlvbm5lbFxuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIGFjdGV1cnMsIGNlIGTDqXDDtHQgZXN0IHVuIHNvdXMtZW5zZW1ibGUgc3RyaWN0IGRlIEFNTzMwIDpcbiAgICAgIC8vIElsIGEgbW9pbnMgZCdhY3RldXJzIGV0IGlsIHNvbnQgbW9pbnMgY29tcGxldHMuXG4gICAgICAvL1xuICAgICAgLy8gUG91ciBsZXMgb3JnYW5lcyA6XG4gICAgICAvLyBRdWFuZCBsJ29yZ2FuZSBlc3QgYXVzc2kgcHLDqXNlbnQgZGFucyBBTU8zMCwgaWwgdmF1dCBtaWV1eCBwcmVuZHJlIGNlbHVpXG4gICAgICAvLyBkJ0FNTzMwLCBjYXIgaWwgY29udGllbnQgbGUgeHNpVHlwZSAoYydlc3QgbGEgc2V1bGUgZGlmZsOpcmVuY2Ugc2VtYmxlLXQtaSkuXG4gICAgICAvLyBTaW5vbiwgaWwgZmF1dCBsZSBwcmVuZHJlIHNldWxlbWVudCBzaSBvbiBlc3QgaW50w6lyZXNzw6kgcGFyIGxlcyBsw6lnaXNsYXR1cmVzXG4gICAgICAvLyBwcsOpY8OpZGVudGVzLlxuICAgICAgZmlsZW5hbWU6IFwiQU1PNDBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19kaXZpc2VzX1hWSUkuanNvblwiLFxuICAgICAgaWdub3JlRm9yV2ViOiB0cnVlLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLkRpeFNlcHQsXG4gICAgICByZXBhaXJaaXA6IChkYXRhc2V0OiBEYXRhc2V0LCBkYXRhRGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgICAgICBmcy5yZW1vdmVTeW5jKHRhcmdldERpcilcbiAgICAgICAgfVxuICAgICAgICBmcy5ta2RpclN5bmModGFyZ2V0RGlyKVxuICAgICAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKGRhdGFEaXIsIFwiYWN0ZXVyXCIpKSkge1xuICAgICAgICAgIC8vIE5vdGU7IExlIHLDqXBlcnRvaXJlIGFjdGV1ciBwZXV0IGRpc3BhcmHDrnRyZSBlbiBmaW4gZGUgbMOpZ2lzbGF0dXJlXG4gICAgICAgICAgLy8gcXVhbmQgbGVzIG1hbmRhdHMgZGVzIGTDqXB1dMOpcyBzJ2ludGVycm9tcGVudC5cbiAgICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcImFjdGV1clwiKSxcbiAgICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJvcmdhbmVcIiksXG4gICAgICAgICAgcGF0aC5qb2luKHRhcmdldERpciwgXCJvcmdhbmVcIiksXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJEw6lwdXTDqXMgYWN0aWZzIGV0IG9yZ2FuZXMgZGUgbGEgWFZJScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNy9hbW8vZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19kaXZpc2VzL0FNTzQwX2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXNfZGl2aXNlcy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PNDAgKFhWSSlcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBsZXMgZMOpcHV0w6lzIGFjdGlmcyAobGVzIG3Dqm1lcyBxdSdBTU8yMClcbiAgICAgIC8vICogYXZlYyBwcmVzcXVlIHRvdXMgbGV1cnMgbWFuZGF0c1xuICAgICAgLy8gKiB5IGNvbXByaXMgbGVzIG1hbmRhdHMgYWNoZXbDqXMgZXQgY2V1eCBkZXMgbMOpZ2lzbGF0dXJlcyBwcsOpY8OpZGVudGVzXG4gICAgICAvLyAqIHkgY29tcHJpcyBsZXVycyBwYXJ0aXMgcG9saXRpcXVlcyBwcsOpY8OpZGVudHNcbiAgICAgIC8vICogbWFpcyBzYW5zIGxldXIgcGFydGkgcG9saXRpcXVlIGFjdHVlbCAodHlwZU9yZ2FuZTogXCJQQVJQT0xcIilcbiAgICAgIC8vXG4gICAgICAvLyBDb250aWVudCBiZWF1Y291cCBkJ29yZ2FuZXMgcsOpZsOpcmVuY8OpcywgeSBjb21wcmlzIGNldXggZGVzIGzDqWdpc2xhdHVyZXNcbiAgICAgIC8vIHByw6ljw6lkZW50ZXNcbiAgICAgIC8vICogbWFpcyBpbCBtYW5xdWUgbGUgeHNpVHlwZSBkZXMgb3JnYW5lc1xuICAgICAgLy8gKiBuZSBjb250aWVudCBwYXMgbGVzIG9yZ2FuZXMgc8OpbmF0b3JpYXV4XG4gICAgICAvLyAqIG5lIGNvbnRpZW50IHBhcyBsZXMgbWluaXN0w6hyZXNcbiAgICAgIC8vICogbmUgY29udGllbnQgcGFzIGxhIFByw6lzaWRlbmNlIGRlIGxhIFLDqXB1YmxpcXVlXG4gICAgICAvLyAqIG5lIGNvbnRpZW50IHBhcyBsZSBDb25zZWlsIGNvbnN0aXR1dGlvbm5lbFxuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIGFjdGV1cnMsIGNlIGTDqXDDtHQgZXN0IHVuIHNvdXMtZW5zZW1ibGUgc3RyaWN0IGRlIEFNTzMwIDpcbiAgICAgIC8vIElsIGEgbW9pbnMgZCdhY3RldXJzIGV0IGlsIHNvbnQgbW9pbnMgY29tcGxldHMuXG4gICAgICAvL1xuICAgICAgLy8gUG91ciBsZXMgb3JnYW5lcyA6XG4gICAgICAvLyBRdWFuZCBsJ29yZ2FuZSBlc3QgYXVzc2kgcHLDqXNlbnQgZGFucyBBTU8zMCwgaWwgdmF1dCBtaWV1eCBwcmVuZHJlIGNlbHVpXG4gICAgICAvLyBkJ0FNTzMwLCBjYXIgaWwgY29udGllbnQgbGUgeHNpVHlwZSAoYydlc3QgbGEgc2V1bGUgZGlmZsOpcmVuY2Ugc2VtYmxlLXQtaSkuXG4gICAgICAvLyBTaW5vbiwgaWwgZmF1dCBsZSBwcmVuZHJlIHNldWxlbWVudCBzaSBvbiBlc3QgaW50w6lyZXNzw6kgcGFyIGxlcyBsw6lnaXNsYXR1cmVzXG4gICAgICAvLyBwcsOpY8OpZGVudGVzLlxuICAgICAgZmlsZW5hbWU6IFwiQU1PNDBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19kaXZpc2VzX1hWSS5qc29uXCIsXG4gICAgICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuU2VpemUsXG4gICAgICByZXBhaXJaaXA6IChkYXRhc2V0OiBEYXRhc2V0LCBkYXRhRGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgICAgICBmcy5yZW1vdmVTeW5jKHRhcmdldERpcilcbiAgICAgICAgfVxuICAgICAgICBmcy5ta2RpclN5bmModGFyZ2V0RGlyKVxuICAgICAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocGF0aC5qb2luKGRhdGFEaXIsIFwiYWN0ZXVyXCIpKSkge1xuICAgICAgICAgIC8vIE5vdGU7IExlIHLDqXBlcnRvaXJlIGFjdGV1ciBwZXV0IGRpc3BhcmHDrnRyZSBlbiBmaW4gZGUgbMOpZ2lzbGF0dXJlXG4gICAgICAgICAgLy8gcXVhbmQgbGVzIG1hbmRhdHMgZGVzIGTDqXB1dMOpcyBzJ2ludGVycm9tcGVudC5cbiAgICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcImFjdGV1clwiKSxcbiAgICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJvcmdhbmVcIiksXG4gICAgICAgICAgcGF0aC5qb2luKHRhcmdldERpciwgXCJvcmdhbmVcIiksXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJEw6lwdXTDqXMgYWN0aWZzIGV0IG9yZ2FuZXMgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE2L2Ftby9kZXB1dGVzX2FjdGlmc19tYW5kYXRzX2FjdGlmc19vcmdhbmVzX2RpdmlzZXMvQU1PNDBfZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19kaXZpc2VzLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBBTU80MCAoWFYpXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgbGVzIGTDqXB1dMOpcyBhY3RpZnMgKGxlcyBtw6ptZXMgcXUnQU1PMjApXG4gICAgICAvLyAqIGF2ZWMgcHJlc3F1ZSB0b3VzIGxldXJzIG1hbmRhdHNcbiAgICAgIC8vICogeSBjb21wcmlzIGxlcyBtYW5kYXRzIGFjaGV2w6lzIGV0IGNldXggZGVzIGzDqWdpc2xhdHVyZXMgcHLDqWPDqWRlbnRlc1xuICAgICAgLy8gKiB5IGNvbXByaXMgbGV1cnMgcGFydGlzIHBvbGl0aXF1ZXMgcHLDqWPDqWRlbnRzXG4gICAgICAvLyAqIG1haXMgc2FucyBsZXVyIHBhcnRpIHBvbGl0aXF1ZSBhY3R1ZWwgKHR5cGVPcmdhbmU6IFwiUEFSUE9MXCIpXG4gICAgICAvL1xuICAgICAgLy8gQ29udGllbnQgYmVhdWNvdXAgZCdvcmdhbmVzIHLDqWbDqXJlbmPDqXMsIHkgY29tcHJpcyBjZXV4IGRlcyBsw6lnaXNsYXR1cmVzXG4gICAgICAvLyBwcsOpY8OpZGVudGVzXG4gICAgICAvLyAqIG1haXMgaWwgbWFucXVlIGxlIHhzaVR5cGUgZGVzIG9yZ2FuZXNcbiAgICAgIC8vICogbmUgY29udGllbnQgcGFzIGxlcyBvcmdhbmVzIHPDqW5hdG9yaWF1eFxuICAgICAgLy8gKiBuZSBjb250aWVudCBwYXMgbGVzIG1pbmlzdMOocmVzXG4gICAgICAvLyAqIG5lIGNvbnRpZW50IHBhcyBsYSBQcsOpc2lkZW5jZSBkZSBsYSBSw6lwdWJsaXF1ZVxuICAgICAgLy8gKiBuZSBjb250aWVudCBwYXMgbGUgQ29uc2VpbCBjb25zdGl0dXRpb25uZWxcbiAgICAgIC8vXG4gICAgICAvLyBQb3VyIGxlcyBhY3RldXJzLCBjZSBkw6lww7R0IGVzdCB1biBzb3VzLWVuc2VtYmxlIHN0cmljdCBkZSBBTU8zMCA6XG4gICAgICAvLyBJbCBhIG1vaW5zIGQnYWN0ZXVycyBldCBpbCBzb250IG1vaW5zIGNvbXBsZXRzLlxuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIG9yZ2FuZXMgOlxuICAgICAgLy8gUXVhbmQgbCdvcmdhbmUgZXN0IGF1c3NpIHByw6lzZW50IGRhbnMgQU1PMzAsIGlsIHZhdXQgbWlldXggcHJlbmRyZSBjZWx1aVxuICAgICAgLy8gZCdBTU8zMCwgY2FyIGlsIGNvbnRpZW50IGxlIHhzaVR5cGUgKGMnZXN0IGxhIHNldWxlIGRpZmbDqXJlbmNlIHNlbWJsZS10LWkpLlxuICAgICAgLy8gU2lub24sIGlsIGZhdXQgbGUgcHJlbmRyZSBzZXVsZW1lbnQgc2kgb24gZXN0IGludMOpcmVzc8OpIHBhciBsZXMgbMOpZ2lzbGF0dXJlc1xuICAgICAgLy8gcHLDqWPDqWRlbnRlcy5cbiAgICAgIGZpbGVuYW1lOiBcIkFNTzQwX2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXNfZGl2aXNlc19YVi5qc29uXCIsXG4gICAgICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuUXVpbnplLFxuICAgICAgcmVwYWlyWmlwOiAoZGF0YXNldDogRGF0YXNldCwgZGF0YURpcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyh0YXJnZXREaXIpKSB7XG4gICAgICAgICAgZnMucmVtb3ZlU3luYyh0YXJnZXREaXIpXG4gICAgICAgIH1cbiAgICAgICAgZnMubWtkaXJTeW5jKHRhcmdldERpcilcbiAgICAgICAgZnMubW92ZVN5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKGRhdGFEaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICApXG4gICAgICAgIGZzLm1vdmVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcIm9yZ2FuZVwiKSxcbiAgICAgICAgICBwYXRoLmpvaW4odGFyZ2V0RGlyLCBcIm9yZ2FuZVwiKSxcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkTDqXB1dMOpcyBhY3RpZnMgZXQgb3JnYW5lcyBkZSBsYSBYVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNS9hbW8vZGVwdXRlc19hY3RpZnNfbWFuZGF0c19hY3RpZnNfb3JnYW5lc19kaXZpc2VzL0FNTzQwX2RlcHV0ZXNfYWN0aWZzX21hbmRhdHNfYWN0aWZzX29yZ2FuZXNfZGl2aXNlc19YVi5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PNTAgKFhWSUkpXG4gICAgICAvL1xuICAgICAgLy8gQXR0ZW50aW9uLCBjZSBmaWNoaWVyIG4nZXN0IHBhcyBtaXMgw6Agam91ciByw6lndWxpw6hyZW1lbnQgIVxuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIGFjdGV1cnMgOlxuICAgICAgLy8gKiBjJ2VzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZSBkJ0FNTzMwXG4gICAgICAvLyAqIGlsIG1hbnF1ZSBsZXMgeHNpVHlwZSBhdXggbWFuZGF0c1xuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIG9yZ2FuZXMgOlxuICAgICAgLy8gKiBjJ2VzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZSBkJ0FNTzMwXG4gICAgICAvLyAqIGlsIG1hbnF1ZSBsZXMgeHNpVHlwZVxuICAgICAgLy9cbiAgICAgIC8vIENlIGZpY2hpZXIgbidhcHBvcnRlIGRvbmMgYWJzb2x1bWVudCByaWVuIHBhciByYXBwb3J0IMOgIGwnQU1PMzAsXG4gICAgICAvLyBkb250IGlsIGVzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZS5cbiAgICAgIGZpbGVuYW1lOiBcIkFNTzUwX2FjdGV1cnNfbWFuZGF0c19vcmdhbmVzX2RpdmlzZXNfWFZJSS5qc29uXCIsXG4gICAgICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuRGl4U2VwdCxcbiAgICAgIHJlcGFpclppcDogKGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmModGFyZ2V0RGlyKVxuICAgICAgICB9XG4gICAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXREaXIpXG4gICAgICAgIGZzLm1vdmVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICBwYXRoLmpvaW4odGFyZ2V0RGlyLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgKVxuICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJhY3RldXJcIiksXG4gICAgICAgICAgcGF0aC5qb2luKHRhcmdldERpciwgXCJhY3RldXJcIiksXG4gICAgICAgIClcbiAgICAgICAgZnMubW92ZVN5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKGRhdGFEaXIsIFwib3JnYW5lXCIpLFxuICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwib3JnYW5lXCIpLFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6XG4gICAgICAgIFwiQWN0ZXVycywgbWFuZGF0cyBldCBvcmdhbmVzIGRlIGxhIFhWSUnDqG1lIGzDqWdpc2xhdHVyZSAoZmljaGllcnMgc8OpcGFyw6lzLCB5IGNvbXByaXMgbWFuZGF0cylcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE3L2Ftby9hY3RldXJzX21hbmRhdHNfb3JnYW5lc19kaXZpc2VzL0FNTzUwX2FjdGV1cnNfbWFuZGF0c19vcmdhbmVzX2RpdmlzZXMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEFNTzUwIChYVkkpXG4gICAgICAvL1xuICAgICAgLy8gQXR0ZW50aW9uLCBjZSBmaWNoaWVyIG4nZXN0IHBhcyBtaXMgw6Agam91ciByw6lndWxpw6hyZW1lbnQgIVxuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIGFjdGV1cnMgOlxuICAgICAgLy8gKiBjJ2VzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZSBkJ0FNTzMwXG4gICAgICAvLyAqIGlsIG1hbnF1ZSBsZXMgeHNpVHlwZSBhdXggbWFuZGF0c1xuICAgICAgLy9cbiAgICAgIC8vIFBvdXIgbGVzIG9yZ2FuZXMgOlxuICAgICAgLy8gKiBjJ2VzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZSBkJ0FNTzMwXG4gICAgICAvLyAqIGlsIG1hbnF1ZSBsZXMgeHNpVHlwZVxuICAgICAgLy9cbiAgICAgIC8vIENlIGZpY2hpZXIgbidhcHBvcnRlIGRvbmMgYWJzb2x1bWVudCByaWVuIHBhciByYXBwb3J0IMOgIGwnQU1PMzAsXG4gICAgICAvLyBkb250IGlsIGVzdCB1biBzb3VzIGVuc2VtYmxlIG9ic29sw6h0ZS5cbiAgICAgIGZpbGVuYW1lOiBcIkFNTzUwX2FjdGV1cnNfbWFuZGF0c19vcmdhbmVzX2RpdmlzZXNfWFZJLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5TZWl6ZSxcbiAgICAgIHJlcGFpclppcDogKGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmModGFyZ2V0RGlyKVxuICAgICAgICB9XG4gICAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXREaXIpXG4gICAgICAgIGZzLm1vdmVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICBwYXRoLmpvaW4odGFyZ2V0RGlyLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgKVxuICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJhY3RldXJcIiksXG4gICAgICAgICAgcGF0aC5qb2luKHRhcmdldERpciwgXCJhY3RldXJcIiksXG4gICAgICAgIClcbiAgICAgICAgZnMubW92ZVN5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKGRhdGFEaXIsIFwib3JnYW5lXCIpLFxuICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwib3JnYW5lXCIpLFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6XG4gICAgICAgIFwiQWN0ZXVycywgbWFuZGF0cyBldCBvcmdhbmVzIGRlIGxhIFhWScOobWUgbMOpZ2lzbGF0dXJlIChmaWNoaWVycyBzw6lwYXLDqXMsIHkgY29tcHJpcyBtYW5kYXRzKVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTYvYW1vL2FjdGV1cnNfbWFuZGF0c19vcmdhbmVzX2RpdmlzZXMvQU1PNTBfYWN0ZXVyc19tYW5kYXRzX29yZ2FuZXNfZGl2aXNlcy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQU1PNTAgKFhWKVxuICAgICAgLy9cbiAgICAgIC8vIEF0dGVudGlvbiwgY2UgZmljaGllciBuJ2VzdCBwYXMgbWlzIMOgIGpvdXIgcsOpZ3VsacOocmVtZW50ICFcbiAgICAgIC8vXG4gICAgICAvLyBQb3VyIGxlcyBhY3RldXJzIDpcbiAgICAgIC8vICogYydlc3QgdW4gc291cyBlbnNlbWJsZSBvYnNvbMOodGUgZCdBTU8zMFxuICAgICAgLy8gKiBpbCBtYW5xdWUgbGVzIHhzaVR5cGUgYXV4IG1hbmRhdHNcbiAgICAgIC8vXG4gICAgICAvLyBQb3VyIGxlcyBvcmdhbmVzIDpcbiAgICAgIC8vICogYydlc3QgdW4gc291cyBlbnNlbWJsZSBvYnNvbMOodGUgZCdBTU8zMFxuICAgICAgLy8gKiBpbCBtYW5xdWUgbGVzIHhzaVR5cGVcbiAgICAgIC8vXG4gICAgICAvLyBDZSBmaWNoaWVyIG4nYXBwb3J0ZSBkb25jIGFic29sdW1lbnQgcmllbiBwYXIgcmFwcG9ydCDDoCBsJ0FNTzMwLFxuICAgICAgLy8gZG9udCBpbCBlc3QgdW4gc291cyBlbnNlbWJsZSBvYnNvbMOodGUuXG4gICAgICBmaWxlbmFtZTogXCJBTU81MF9hY3RldXJzX21hbmRhdHNfb3JnYW5lc19kaXZpc2VzX1hWLmpzb25cIixcbiAgICAgIGlnbm9yZUZvcldlYjogdHJ1ZSxcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IChkYXRhc2V0OiBEYXRhc2V0LCBkYXRhRGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgICAgICBmcy5yZW1vdmVTeW5jKHRhcmdldERpcilcbiAgICAgICAgfVxuICAgICAgICBmcy5ta2RpclN5bmModGFyZ2V0RGlyKVxuICAgICAgICBmcy5tb3ZlU3luYyhcbiAgICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJtYW5kYXRcIiksXG4gICAgICAgICAgcGF0aC5qb2luKHRhcmdldERpciwgXCJtYW5kYXRcIiksXG4gICAgICAgIClcbiAgICAgICAgZnMubW92ZVN5bmMoXG4gICAgICAgICAgcGF0aC5qb2luKGRhdGFEaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICAgIHBhdGguam9pbih0YXJnZXREaXIsIFwiYWN0ZXVyXCIpLFxuICAgICAgICApXG4gICAgICAgIGZzLm1vdmVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihkYXRhRGlyLCBcIm9yZ2FuZVwiKSxcbiAgICAgICAgICBwYXRoLmpvaW4odGFyZ2V0RGlyLCBcIm9yZ2FuZVwiKSxcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOlxuICAgICAgICBcIkFjdGV1cnMsIG1hbmRhdHMgZXQgb3JnYW5lcyBkZSBsYSBYVsOobWUgbMOpZ2lzbGF0dXJlIChmaWNoaWVycyBzw6lwYXLDqXMsIHkgY29tcHJpcyBtYW5kYXRzKVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTUvYW1vL2FjdGV1cnNfbWFuZGF0c19vcmdhbmVzX2RpdmlzZXMvQU1PNTBfYWN0ZXVyc19tYW5kYXRzX29yZ2FuZXNfZGl2aXNlc19YVi5qc29uLnppcFwiLFxuICAgIH0sXG4gIF0sXG4gIGFnZW5kYXM6IFtcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJBZ2VuZGFfWFZJSS5qc29uXCIsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuRGl4U2VwdCxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkFnZW5kYSBkZSBsYSBYVklJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE3L3ZwL3JldW5pb25zL0FnZW5kYS5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiQWdlbmRhX1hWSS5qc29uXCIsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuU2VpemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJBZ2VuZGEgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE2L3ZwL3JldW5pb25zL0FnZW5kYS5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiQWdlbmRhX1hWLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJBZ2VuZGEgZGUgbGEgWFbDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTUvdnAvcmV1bmlvbnMvQWdlbmRhX1hWLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJBZ2VuZGFfWElWLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWF0b3J6ZSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlLFxuICAgICAgdGl0bGU6IFwiQWdlbmRhIGRlIGxhIFhJVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNC92cC9yZXVuaW9ucy9BZ2VuZGFfWElWLmpzb24uemlwXCIsXG4gICAgfSxcbiAgXSxcbiAgYW1lbmRlbWVudHM6IFtcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJBbWVuZGVtZW50c19YVklJLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5EaXhTZXB0LFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiQW1lbmRlbWVudHMgZGUgbGEgWFZJScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNy9sb2kvYW1lbmRlbWVudHNfZGl2X2xlZ2lzL0FtZW5kZW1lbnRzLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJBbWVuZGVtZW50c19YVkkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlNlaXplLFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiQW1lbmRlbWVudHMgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE2L2xvaS9hbWVuZGVtZW50c19kaXZfbGVnaXMvQW1lbmRlbWVudHMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVuYW1lOiBcIkFtZW5kZW1lbnRzX1hWLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJBbWVuZGVtZW50cyBkZSBsYSBYVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNS9sb2kvYW1lbmRlbWVudHNfbGVnaXMvQW1lbmRlbWVudHNfWFYuanNvbi56aXBcIixcbiAgICB9LFxuICAgIC8vIHtcbiAgICAvLyAgIGZpbGVuYW1lOiBcIkFtZW5kZW1lbnRzX1hJVi5qc29uXCIsXG4gICAgLy8gICBpZ25vcmVGb3JXZWI6IHRydWUsXG4gICAgLy8gICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuUXVhdG9yemUsXG4gICAgLy8gICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZSxcbiAgICAvLyAgIHRpdGxlOiBcIkFtZW5kZW1lbnRzIGRlIGxhIFhJVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgLy8gICB1cmw6XG4gICAgLy8gICAgIFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNC9sb2kvYW1lbmRlbWVudHNfbGVnaXNfWElWL0FtZW5kZW1lbnRzX1hJVi5qc29uLnppcFwiLFxuICAgIC8vIH0sXG4gIF0sXG4gIGRvc3NpZXJzTGVnaXNsYXRpZnM6IFtcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJEb3NzaWVyc19MZWdpc2xhdGlmc19YVklJLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5EaXhTZXB0LFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiRG9zc2llcnMgbMOpZ2lzbGF0aWZzIGRlIGxhIFhWSUnDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTcvbG9pL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzL0Rvc3NpZXJzX0xlZ2lzbGF0aWZzLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJEb3NzaWVyc19MZWdpc2xhdGlmc19YVkkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlNlaXplLFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiRG9zc2llcnMgbMOpZ2lzbGF0aWZzIGRlIGxhIFhWScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNi9sb2kvZG9zc2llcnNfbGVnaXNsYXRpZnMvRG9zc2llcnNfTGVnaXNsYXRpZnMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVuYW1lOiBcIkRvc3NpZXJzX0xlZ2lzbGF0aWZzX1hWLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJEb3NzaWVycyBsw6lnaXNsYXRpZnMgZGUgbGEgWFbDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTUvbG9pL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzL0Rvc3NpZXJzX0xlZ2lzbGF0aWZzX1hWLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJEb3NzaWVyc19MZWdpc2xhdGlmc19YSVYuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlF1YXRvcnplLFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGUsXG4gICAgICB0aXRsZTogXCJEb3NzaWVycyBsw6lnaXNsYXRpZnMgZGUgbGEgWElWw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE0L2xvaS9kb3NzaWVyc19sZWdpc2xhdGlmcy9Eb3NzaWVyc19MZWdpc2xhdGlmc19YSVYuanNvbi56aXBcIixcbiAgICB9LFxuICBdLFxuICBzY3J1dGluczogW1xuICAgIHtcbiAgICAgIGZpbGVuYW1lOiBcIlNjcnV0aW5zX1hWSUkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLkRpeFNlcHQsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJTY3J1dGlucyBkZSBsYSBYVklJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE3L2xvaS9zY3J1dGlucy9TY3J1dGlucy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiU2NydXRpbnNfWFZJLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5TZWl6ZSxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIlNjcnV0aW5zIGRlIGxhIFhWScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNi9sb2kvc2NydXRpbnMvU2NydXRpbnMuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVuYW1lOiBcIlNjcnV0aW5zX1hWLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5RdWluemUsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJTY3J1dGlucyBkZSBsYSBYVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNS9sb2kvc2NydXRpbnMvU2NydXRpbnNfWFYuanNvbi56aXBcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVuYW1lOiBcIlNjcnV0aW5zX1hJVi5qc29uXCIsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuUXVhdG9yemUsXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZSxcbiAgICAgIHRpdGxlOiBcIlNjcnV0aW5zIGRlIGxhIFhJVsOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNC9sb2kvc2NydXRpbnMvU2NydXRpbnNfWElWLmpzb24uemlwXCIsXG4gICAgfSxcbiAgXSxcbiAgcXVlc3Rpb25zOiBbXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiUXVlc3Rpb25zX2Vjcml0ZXNfWFZJSS5qc29uXCIsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuRGl4U2VwdCxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIlF1ZXN0aW9ucyDDqWNyaXRlcyBkZSBsYSBYVklJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE3L3F1ZXN0aW9ucy9xdWVzdGlvbnNfZWNyaXRlcy9RdWVzdGlvbnNfZWNyaXRlcy5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiUXVlc3Rpb25zX2Vjcml0ZXNfWFZJLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5TZWl6ZSxcbiAgICAgIHJlcGFpclppcDogcmVwYWlyRm9ySnNvblN1YmRpcmVjdG9yeSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIlF1ZXN0aW9ucyDDqWNyaXRlcyBkZSBsYSBYVknDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTYvcXVlc3Rpb25zL3F1ZXN0aW9uc19lY3JpdGVzL1F1ZXN0aW9uc19lY3JpdGVzLmpzb24uemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJRdWVzdGlvbnNfZ291dmVybmVtZW50X1hWSUkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLkRpeFNlcHQsXG4gICAgICByZXBhaXJaaXA6IHJlcGFpckZvckpzb25TdWJkaXJlY3RvcnksXG4gICAgICBzdHJ1Y3R1cmU6IERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXMsXG4gICAgICB0aXRsZTogXCJRdWVzdGlvbnMgYXUgZ291dmVybmVtZW50IGRlIGxhIFhWSUnDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTcvcXVlc3Rpb25zL3F1ZXN0aW9uc19nb3V2ZXJuZW1lbnQvUXVlc3Rpb25zX2dvdXZlcm5lbWVudC5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiUXVlc3Rpb25zX2dvdXZlcm5lbWVudF9YVkkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlNlaXplLFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiUXVlc3Rpb25zIGF1IGdvdXZlcm5lbWVudCBkZSBsYSBYVknDqG1lIGzDqWdpc2xhdHVyZVwiLFxuICAgICAgdXJsOiBcImh0dHA6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTYvcXVlc3Rpb25zL3F1ZXN0aW9uc19nb3V2ZXJuZW1lbnQvUXVlc3Rpb25zX2dvdXZlcm5lbWVudC5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiUXVlc3Rpb25zX29yYWxlc19YVklJLmpzb25cIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5EaXhTZXB0LFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiUXVlc3Rpb25zIG9yYWxlcyBzYW5zIGTDqWJhdHMgZGUgbGEgWFZJScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cDovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNy9xdWVzdGlvbnMvcXVlc3Rpb25zX29yYWxlc19zYW5zX2RlYmF0L1F1ZXN0aW9uc19vcmFsZXNfc2Fuc19kZWJhdC5qc29uLnppcFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZW5hbWU6IFwiUXVlc3Rpb25zX29yYWxlc19YVkkuanNvblwiLFxuICAgICAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLlNlaXplLFxuICAgICAgcmVwYWlyWmlwOiByZXBhaXJGb3JKc29uU3ViZGlyZWN0b3J5LFxuICAgICAgc3RydWN0dXJlOiBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzLFxuICAgICAgdGl0bGU6IFwiUXVlc3Rpb25zIG9yYWxlcyBzYW5zIGTDqWJhdHMgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwOi8vZGF0YS5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL3N0YXRpYy9vcGVuRGF0YS9yZXBvc2l0b3J5LzE2L3F1ZXN0aW9ucy9xdWVzdGlvbnNfb3JhbGVzX3NhbnNfZGViYXQvUXVlc3Rpb25zX29yYWxlc19zYW5zX2RlYmF0Lmpzb24uemlwXCIsXG4gICAgfSxcbiAgXSxcbiAgY29tcHRlc1JlbmR1c1NlYW5jZXM6IFtcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJDb21wdGVzX1JlbmR1c19TZWFuY2VzX1hWSUkueG1sXCIsXG4gICAgICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUuRGl4U2VwdCxcbiAgICAgIHJlcGFpclppcDogKGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmModGFyZ2V0RGlyKVxuICAgICAgICB9XG4gICAgICAgIGZzLm1vdmVTeW5jKHBhdGguam9pbihkYXRhRGlyLCBcInhtbFwiKSwgdGFyZ2V0RGlyKVxuICAgICAgfSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkNvbXB0ZXMgcmVuZHVzIGRlcyBzw6lhbmNlcyBwdWJsaXF1ZXMgZGUgbGEgWFZJScOobWUgbMOpZ2lzbGF0dXJlXCIsXG4gICAgICB1cmw6IFwiaHR0cHM6Ly9kYXRhLmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvc3RhdGljL29wZW5EYXRhL3JlcG9zaXRvcnkvMTcvdnAvc3ljZXJvbmJydXQvc3lzZXJvbi54bWwuemlwXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlbmFtZTogXCJDb21wdGVzX1JlbmR1c19TZWFuY2VzX1hWSS54bWxcIixcbiAgICAgIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZS5TZWl6ZSxcbiAgICAgIHJlcGFpclppcDogKGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgICAgIGZzLnJlbW92ZVN5bmModGFyZ2V0RGlyKVxuICAgICAgICB9XG4gICAgICAgIGZzLm1vdmVTeW5jKHBhdGguam9pbihkYXRhRGlyLCBcInhtbFwiKSwgdGFyZ2V0RGlyKVxuICAgICAgfSxcbiAgICAgIHN0cnVjdHVyZTogRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlcyxcbiAgICAgIHRpdGxlOiBcIkNvbXB0ZXMgcmVuZHVzIGRlcyBzw6lhbmNlcyBwdWJsaXF1ZXMgZGUgbGEgWFZJw6htZSBsw6lnaXNsYXR1cmVcIixcbiAgICAgIHVybDogXCJodHRwczovL2RhdGEuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci9zdGF0aWMvb3BlbkRhdGEvcmVwb3NpdG9yeS8xNi92cC9zeWNlcm9uYnJ1dC9zeXNlcm9uLnhtbC56aXBcIixcbiAgICB9LFxuICBdLFxufVxuXG5jb25zdCBkaXJlY3Rvcnkyc2NoZW1hOiBhbnkgPSB7XG4gIFwiLipBZ2VuZGFfLipcIjogXCJhZ2VuZGFcIixcbiAgXCIuKlNjcnV0aW5zXy4qXCI6IFwic2NydXRpblwiLFxuICBcIi4qUXVlc3Rpb25zXy4qXCI6IFwicXVlc3Rpb25cIixcbiAgXCIuKkFtZW5kZW1lbnRzXy4qXCI6IFwiYW1lbmRlbWVudFwiLFxuICBcIi4qRG9zc2llcnNfTGVnaXNsYXRpZnNfLiovZG9jdW1lbnRzXCI6IFwiZG9jdW1lbnRcIixcbiAgXCIuKkRvc3NpZXJzX0xlZ2lzbGF0aWZzXy4qL2Rvc3NpZXJzXCI6IFwiZG9zc2llclwiLFxuICBcIi4qYWN0ZXVyc19tYW5kYXRzX29yZ2FuZXMvb3JnYW5lc1wiOiBcIm9yZ2FuZVwiLFxuICBcIi4qYWN0ZXVyc19tYW5kYXRzX29yZ2FuZXMvYWN0ZXVyc1wiOiBcImFjdGV1clwiLFxuICBcIi4qQU1PMzBfdG91c19hY3RldXJzX3RvdXNfbWFuZGF0c190b3VzX29yZ2FuZXNfaGlzdG9yaXF1ZS4qL29yZ2FuZXNcIjpcbiAgICBcIm9yZ2FuZVwiLFxuICBcIi4qQU1PMzBfdG91c19hY3RldXJzX3RvdXNfbWFuZGF0c190b3VzX29yZ2FuZXNfaGlzdG9yaXF1ZS4qL2FjdGV1cnNcIjpcbiAgICBcImFjdGV1clwiLFxuICBcIi4qQ29tcHRlc19SZW5kdXNfU2VhbmNlc18uKlwiOiBcImRlYmF0XCIsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhc2V0cygpOiBhbnkge1xuICByZXR1cm4gW1xuICAgIFwiQWdlbmRhX1hJVlwiLFxuICAgIFwiQWdlbmRhX1hWXCIsXG4gICAgXCJBZ2VuZGFfWFZJXCIsXG4gICAgXCJBZ2VuZGFfWFZJSVwiLFxuICAgIFwiU2NydXRpbnNfWElWXCIsXG4gICAgXCJTY3J1dGluc19YVlwiLFxuICAgIFwiU2NydXRpbnNfWFZJXCIsXG4gICAgXCJTY3J1dGluc19YVklJXCIsXG4gICAgXCJRdWVzdGlvbnNfRWNyaXRlc19YVklcIixcbiAgICBcIlF1ZXN0aW9uc19FY3JpdGVzX1hWSUlcIixcbiAgICBcIlF1ZXN0aW9uc19Hb3V2ZXJuZW1lbnRfWFZJXCIsXG4gICAgXCJRdWVzdGlvbnNfR291dmVybmVtZW50X1hWSUlcIixcbiAgICBcIkFtZW5kZW1lbnRzX1hJVlwiLFxuICAgIFwiQW1lbmRlbWVudHNfWFZcIixcbiAgICBcIkFtZW5kZW1lbnRzX1hWSVwiLFxuICAgIFwiQW1lbmRlbWVudHNfWFZJSVwiLFxuICAgIFwiRG9zc2llcnNfTGVnaXNsYXRpZnNfWElWXCIsXG4gICAgXCJEb3NzaWVyc19MZWdpc2xhdGlmc19YVlwiLFxuICAgIFwiRG9zc2llcnNfTGVnaXNsYXRpZnNfWFZJXCIsXG4gICAgXCJEb3NzaWVyc19MZWdpc2xhdGlmc19YVklJXCIsXG4gICAgXCJBTU8zMF90b3VzX2FjdGV1cnNfdG91c19tYW5kYXRzX3RvdXNfb3JnYW5lc19oaXN0b3JpcXVlXCIsXG4gICAgXCJhY3RldXJzX21hbmRhdHNfb3JnYW5lc1wiLFxuICAgIFwiQ29tcHRlc19SZW5kdXNfU2VhbmNlc19YVklcIixcbiAgICBcIkNvbXB0ZXNfUmVuZHVzX1NlYW5jZXNfWFZJSVwiLFxuICBdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZERhdGFzZXQoZGlyOiBhbnkpOiBhbnkge1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZ2V0RGF0YXNldHMoKSkge1xuICAgIGlmIChkaXIuaW5jbHVkZXMoZGF0YXNldCkpIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFzKCk6IGFueSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGRpcmVjdG9yeTJzY2hlbWEpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhc2V0RGlyZWN0b3J5U2NoZW1hKGRhdGFzZXQ6IHN0cmluZyk6IGFueSB7XG4gIGxldCBkaXJlY3RvcmllczogYW55XG4gIGlmIChkYXRhc2V0LmluY2x1ZGVzKFwiRG9zc2llcnNfTGVnaXNsYXRpZnNfXCIpKSB7XG4gICAgZGlyZWN0b3JpZXMgPSBbYCR7ZGF0YXNldH0vZG9jdW1lbnRzYCwgYCR7ZGF0YXNldH0vZG9zc2llcnNgXVxuICB9IGVsc2UgaWYgKFxuICAgIGRhdGFzZXQuaW5jbHVkZXMoXCJhY3RldXJzX21hbmRhdHNfb3JnYW5lc1wiKSB8fFxuICAgIGRhdGFzZXQuaW5jbHVkZXMoXCJBTU8zMF90b3VzX2FjdGV1cnNfdG91c19tYW5kYXRzX3RvdXNfb3JnYW5lc19oaXN0b3JpcXVlXCIpXG4gICkge1xuICAgIGRpcmVjdG9yaWVzID0gW2Ake2RhdGFzZXR9L29yZ2FuZXNgLCBgJHtkYXRhc2V0fS9hY3RldXJzYF1cbiAgfSBlbHNlIHtcbiAgICBkaXJlY3RvcmllcyA9IFtkYXRhc2V0XVxuICB9XG5cbiAgbGV0IHJlc3VsdHMgPSBbXVxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgIGZvciAoY29uc3QgcmUgb2YgT2JqZWN0LmtleXMoZGlyZWN0b3J5MnNjaGVtYSkpIHtcbiAgICAgIGlmIChuZXcgUmVnRXhwKHJlKS5leGVjKGRpcmVjdG9yeSkpXG4gICAgICAgIHJlc3VsdHMucHVzaChbYCR7ZGlyZWN0b3J5fS8qKi8qLmpzb25gLCBkaXJlY3Rvcnkyc2NoZW1hW3JlXV0pXG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlRGF0YXNldFVybChmaWxlbmFtZTogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB8IG51bGwge1xuICBjb25zdCByZSA9IFwiXi4qLyguKilfbmV0dG95ZS8oLiopXCJcbiAgY29uc3QgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlKS5leGVjKGZpbGVuYW1lKVxuICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIG51bGxcbiAgbGV0IFtkYXRhc2V0LCBmaWxlXSA9IFttYXRjaFsxXSwgbWF0Y2hbMl1dXG4gIGlmIChkYXRhc2V0ID09IFwiQU1PMzBfdG91c19hY3RldXJzX3RvdXNfbWFuZGF0c190b3VzX29yZ2FuZXNfaGlzdG9yaXF1ZVwiKVxuICAgIGRhdGFzZXQgPSBcImFjdGV1cnNfbWFuZGF0c19vcmdhbmVzXCJcbiAgcmV0dXJuIFtkYXRhc2V0LCBmaWxlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlVwc3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBkYXRhc2V0VXJsID0gZmlsZURhdGFzZXRVcmwoZmlsZW5hbWUpXG4gIGlmIChkYXRhc2V0VXJsID09IG51bGwpIHJldHVybiBmaWxlbmFtZVxuICBjb25zdCBbZGF0YXNldCwgZmlsZV0gPSBkYXRhc2V0VXJsXG4gIGNvbnN0IHN1bSA9IGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShmaWxlKS5kaWdlc3QoXCJoZXhcIikudG9TdHJpbmcoKVxuICByZXR1cm4gYFske2ZpbGV9XShodHRwczovL2dpdC5lbi1yb290Lm9yZy90cmljb3RldXNlcy9kYXRhLnRyaWNvdGV1c2VzLmZyLyR7ZGF0YXNldH0vLS9jb21wYXJlL3Vwc3RyZWFtLi4ubWFzdGVyIyR7c3VtfSlgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXN0ZXJVcmwoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGRhdGFzZXRVcmwgPSBmaWxlRGF0YXNldFVybChmaWxlbmFtZSlcbiAgaWYgKGRhdGFzZXRVcmwgPT0gbnVsbCkgcmV0dXJuIGZpbGVuYW1lXG4gIGNvbnN0IFtkYXRhc2V0LCBmaWxlXSA9IGRhdGFzZXRVcmxcbiAgcmV0dXJuIGBbJHtmaWxlfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvZGF0YS50cmljb3RldXNlcy5mci8ke2RhdGFzZXR9Ly0vdHJlZS9tYXN0ZXIvJHtmaWxlfSlgXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJCeUxlZ2lzbGF0dXJlKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBhbnksXG4pOiBEYXRhc2V0cyB7XG4gIC8vIFdoZW4gYSBnaXZlbiBsZWdpc2xhdHVyZSBpcyAwLCBpdCBpcyB0aGUgc2FtZSBhcyBnaXZpbmcgbm8gbGVnaXNsYXR1cmU6XG4gIC8vIEl0IG1lYW5zIFwiZXZlcnkgbGVnaXNsYXR1cmVzXCIuXG4gIGlmIChsZWdpc2xhdHVyZSAhPT0gMCAmJiBsZWdpc2xhdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGFzZXRzKSkge1xuICAgICAgZGF0YXNldHNba2V5IGFzIGtleW9mIHR5cGVvZiBkYXRhc2V0c10gPSB2YWx1ZS5maWx0ZXIoXG4gICAgICAgIChkYXRhc2V0OiB7IGxlZ2lzbGF0dXJlOiBhbnkgfSkgPT5cbiAgICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgfHxcbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gZGF0YXNldC5sZWdpc2xhdHVyZSxcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFzZXRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmFibGVkRGF0YXNldHMoY2F0ZWdvcmllczogYW55KTogRW5hYmxlZERhdGFzZXRzIHtcbiAgY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcblxuICByZXR1cm4gY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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