@tricoteuses/assemblee 0.25.1 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +3 -0
  2. package/lib/bugs/acteur-00010.js +9 -7
  3. package/lib/bugs/agenda-00002.js +6 -6
  4. package/lib/bugs/agenda-00002.mjs +1 -1
  5. package/lib/bugs/agenda-00008.js +6 -6
  6. package/lib/bugs/agenda-00011.js +5 -5
  7. package/lib/bugs.js +7 -5
  8. package/lib/cleaners/actes_legislatifs.js +3 -1
  9. package/lib/cleaners/acteurs.js +43 -4
  10. package/lib/cleaners/acteurs.mjs +25 -1
  11. package/lib/cleaners/amendements.js +2 -2
  12. package/lib/cleaners/amendements.mjs +3 -7
  13. package/lib/cleaners/documents.js +3 -1
  14. package/lib/cleaners/dossiers_legislatifs.js +3 -1
  15. package/lib/cleaners/organes.js +19 -2
  16. package/lib/cleaners/organes.mjs +18 -1
  17. package/lib/cleaners/reunions.js +3 -3
  18. package/lib/cleaners/scrutins.js +5 -3
  19. package/lib/cleaners/xml.js +3 -1
  20. package/lib/datasets.js +1 -1
  21. package/lib/datasets.mjs +1 -1
  22. package/lib/dates.js +1 -1
  23. package/lib/dates.mjs +1 -1
  24. package/lib/dossiers_legislatifs.js +3 -1
  25. package/lib/file_systems.js +11 -5
  26. package/lib/git.js +3 -1
  27. package/lib/index.d.ts +2 -1
  28. package/lib/index.js +4 -2
  29. package/lib/index.mjs +3 -2
  30. package/lib/inserters.js +3 -1
  31. package/lib/inserters.mjs +1 -1
  32. package/lib/loaders.js +1 -1
  33. package/lib/loaders.mjs +1 -1
  34. package/lib/parsers/documents.js +2 -2
  35. package/lib/parsers/documents.mjs +2 -2
  36. package/lib/parsers/recherche_amendements.js +4 -2
  37. package/lib/raw_types/acteurs_et_organes.d.ts +181 -13
  38. package/lib/raw_types/acteurs_et_organes.js +329 -62
  39. package/lib/raw_types/acteurs_et_organes.mjs +318 -55
  40. package/lib/raw_types/agendas.d.ts +2 -1
  41. package/lib/raw_types/agendas.js +8 -7
  42. package/lib/raw_types/agendas.mjs +4 -3
  43. package/lib/raw_types/amendements.d.ts +2 -2
  44. package/lib/raw_types/amendements.js +7 -7
  45. package/lib/raw_types/amendements.mjs +3 -3
  46. package/lib/raw_types/dossiers_legislatifs.d.ts +73 -714
  47. package/lib/raw_types/dossiers_legislatifs.js +177 -1666
  48. package/lib/raw_types/dossiers_legislatifs.mjs +169 -1640
  49. package/lib/raw_types/scrutins.js +4 -4
  50. package/lib/scripts/bugs_helper.js +2 -2
  51. package/lib/scripts/clean_data.js +4 -4
  52. package/lib/scripts/clean_data.mjs +2 -2
  53. package/lib/scripts/clean_reorganized_data.js +4 -4
  54. package/lib/scripts/clean_reorganized_data.mjs +1 -1
  55. package/lib/scripts/diff_amendements.js +2 -2
  56. package/lib/scripts/document_dossiers_legislatifs.js +10 -10
  57. package/lib/scripts/document_dossiers_legislatifs.mjs +1 -1
  58. package/lib/scripts/merge_scrutins.js +3 -1
  59. package/lib/scripts/parse_textes_lois.js +3 -1
  60. package/lib/scripts/raw_types_from_amendements.js +3 -1
  61. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  62. package/lib/scripts/reorganize_data.js +199 -140
  63. package/lib/scripts/reorganize_data.mjs +46 -2
  64. package/lib/scripts/retrieve_deputes_photos.js +4 -4
  65. package/lib/scripts/retrieve_documents.js +5 -3
  66. package/lib/scripts/retrieve_open_data.js +4 -2
  67. package/lib/scripts/retrieve_open_data.mjs +2 -2
  68. package/lib/scripts/retrieve_pending_amendments.js +168 -155
  69. package/lib/scripts/retrieve_senateurs_photos.js +2 -2
  70. package/lib/scripts/retrieve_textes_lois.js +6 -6
  71. package/lib/scripts/test_load.js +4 -2
  72. package/lib/scripts/test_load.mjs +2 -2
  73. package/lib/scripts/test_load_big_files.js +4 -2
  74. package/lib/scripts/test_load_big_files.mjs +2 -2
  75. package/lib/scripts/validate_json.js +2 -2
  76. package/lib/shared_types/codes_actes.d.ts +413 -0
  77. package/lib/shared_types/codes_actes.js +262 -0
  78. package/lib/shared_types/codes_actes.mjs +227 -0
  79. package/lib/types/acteurs_et_organes.d.ts +48 -27
  80. package/lib/types/acteurs_et_organes.js +134 -41
  81. package/lib/types/acteurs_et_organes.mjs +128 -35
  82. package/lib/types/agendas.js +4 -4
  83. package/lib/types/amendements.js +4 -4
  84. package/lib/types/dossiers_legislatifs.d.ts +1 -413
  85. package/lib/types/dossiers_legislatifs.js +14 -264
  86. package/lib/types/dossiers_legislatifs.mjs +6 -231
  87. package/lib/types/scrutins.js +4 -4
  88. package/lib/urls.js +1 -1
  89. package/lib/urls.mjs +1 -1
  90. package/package.json +6 -6
@@ -517,4 +517,4 @@ function main(argv) {
517
517
 
518
518
 
519
519
  if (process.argv[1].endsWith("clean_reorganized_data.ts")) process.exit(main(process.argv));
520
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwibmFtZXMiOlsiYXNzZXJ0IiwiZXhlY1N5bmMiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJjbGVhbkFjdGV1ciIsImNsZWFuQW1lbmRlbWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImNsZWFuT3JnYW5lIiwiY2xlYW5SZXVuaW9uIiwiY2xlYW5TY3J1dGluIiwiZGF0YXNldHMiLCJFbmFibGVkRGF0YXNldHMiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsIndhbGtEaXIiLCJnaXQiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiU2NydXRpbnNDb252ZXJ0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjbGVhblJlb3JnYW5pemVkRGF0YSIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXJyb3IiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImFjdGV1cnNFdE9yZ2FuZXMiLCJiYXNlbmFtZSIsImZpbGVuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJhbmFseXplQW5kUmVtb3ZlIiwiZGF0YXNldFJhd0RpciIsImpvaW4iLCJkYXRhc2V0Q2xlYW5EaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJ2ZXJib3NlIiwiY29uc29sZSIsImxvZyIsImFjdGV1clJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJ0b0FjdGV1ciIsImFjdGV1ckNsZWFuSnNvbiIsImFjdGV1clRvSnNvbiIsImFjdGV1ckNsZWFuRmlsZVBhdGgiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwic2lsZW50IiwicmVhZGRpclN5bmMiLCJwYXRobmFtZSIsInJlbW92ZVN5bmMiLCJyZXBvc2l0b3J5RGlyIiwicmVtb3RlcyIsImNvbW1pdCIsImNoaWxkUHJvY2VzcyIsIm91dHB1dCIsInN1YmRpcmVjdG9yaWVzIiwidWlkQnJhbmNoVXBkYXRlIiwicnVuIiwibWFpbiIsImV4aXQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQVAsTUFBbUIsUUFBbkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGVBQXpCO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakI7U0FHRUMsVyxFQUNBQyxlLEVBQ0FDLHVCLEVBQ0FDLHlCLEVBQ0FDLFcsRUFDQUMsWSxFQUNBQyxZO1NBRU9DLFEsRUFBVUMsZTtTQUNWQyxrQixFQUFvQkMsaUI7U0FDcEJDLE87T0FDRixLQUFLQyxHO1NBR1ZDLE9BQU8sSUFBSUMsdUI7U0FHSkQsT0FBTyxJQUFJRSxjO1NBQ0NGLE9BQU8sSUFBSUcsa0I7U0FFOUJILE9BQU8sSUFBSUksMEI7U0FJSkosT0FBTyxJQUFJSyxlOztBQUVwQixTQUFTQyxTQUFULENBQW1CQyxJQUFuQixFQUF3QztBQUN0QyxRQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtBQUNFQyxJQUFBQSxLQUFLLEVBQUUsR0FEVDtBQUVFQyxJQUFBQSxJQUFJLEVBQUUsK0RBRlI7QUFHRUMsSUFBQUEsSUFBSSxFQUFFLE9BSFI7QUFJRUMsSUFBQUEsSUFBSSxFQUFFQztBQUpSLEdBRHlCLEVBT3pCO0FBQ0VKLElBQUFBLEtBQUssRUFBRSxHQURUO0FBRUVDLElBQUFBLElBQUksRUFBRSxvQkFGUjtBQUdFQyxJQUFBQSxJQUFJLEVBQUUsUUFIUjtBQUlFQyxJQUFBQSxJQUFJLEVBQUVFO0FBSlIsR0FQeUIsRUFhekI7QUFDRUwsSUFBQUEsS0FBSyxFQUFFLEdBRFQ7QUFFRUMsSUFBQUEsSUFBSSxFQUFFLDhCQUZSO0FBR0VDLElBQUFBLElBQUksRUFBRSxTQUhSO0FBSUVDLElBQUFBLElBQUksRUFBRUM7QUFKUixHQWJ5QixFQW1CekI7QUFDRUosSUFBQUEsS0FBSyxFQUFFLEdBRFQ7QUFFRU0s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RUFBMkM7QUFDekMsVUFBSTtBQUNGdkYsUUFBQUEsR0FBRyxDQUFDbUssR0FBSixDQUFRUCxhQUFSLEVBQXdCLGdCQUFlckUsTUFBTyxVQUE5QztBQUNELE9BRkQsQ0FFRSxPQUFPd0UsWUFBUCxFQUFxQjtBQUNyQnRJLFFBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFNBQU9BLEtBQVA7QUFDRDs7QUFFRCxTQUFTMkksSUFBVCxDQUFjNUosSUFBZCxFQUFpQztBQUMvQixRQUFNVyxPQUFPLEdBQUdaLFNBQVMsQ0FBQ0MsSUFBRCxDQUF6Qjs7QUFDQSxNQUFJWSxvQkFBb0IsQ0FBQ0QsT0FBRCxDQUF4QixFQUFtQztBQUNqQyxXQUFPLENBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPLENBQVA7QUFDRDtBQUNGO0FBRUQ7OztBQUNBLElBQUkwQixPQUFPLENBQUNyQyxJQUFSLENBQWEsQ0FBYixFQUFnQitDLFFBQWhCLENBQXlCLDJCQUF6QixDQUFKLEVBQ0VWLE9BQU8sQ0FBQ3dILElBQVIsQ0FBYUQsSUFBSSxDQUFDdkgsT0FBTyxDQUFDckMsSUFBVCxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBjbGVhbkFjdGV1cixcbiAgY2xlYW5BbWVuZGVtZW50LFxuICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbixcbiAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgY2xlYW5PcmdhbmUsXG4gIGNsZWFuUmV1bmlvbixcbiAgY2xlYW5TY3J1dGluLFxufSBmcm9tIFwiLi4vY2xlYW5lcnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImRcIixcbiAgICAgIGhlbHA6IFwic2luZ2xlIGRhdGFzZXQgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJrXCIsXG4gICAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiclwiLFxuICAgICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6XG4gICAgICAgIFwiZG8gbm90IHJlc2V0IC0taGFyZCBhZnRlciBjb21taXQgdG8gc2F2ZSBJL08gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyB0byBiZSBkaXNjYXJkZWRcIixcbiAgICAgIG5hbWU6IFwibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwidlwiLFxuICAgICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXI6IHN0cmluZyA9IG9wdGlvbnMuZGF0YURpclxuXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgICgoRW5hYmxlZERhdGFzZXRzIGFzIGFueSkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkpIGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YWN0ZXVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEpTT04ucGFyc2UoYWN0ZXVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuOiBBY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICBjb25zdCBhY3RldXJDbGVhbkpzb246IHN0cmluZyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LmFjdGV1clRvSnNvbihcbiAgICAgICAgICBhY3RldXJDbGVhbixcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYWN0ZXVyU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFjdGV1ckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGFjdGV1ckNsZWFuRmlsZVBhdGgsIGFjdGV1ckNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke29yZ2FuZVJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZVJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBKU09OLnBhcnNlKG9yZ2FuZVJhd0pzb24pXG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbjogT3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgY29uc3Qgb3JnYW5lQ2xlYW5Kc29uOiBzdHJpbmcgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5vcmdhbmVUb0pzb24oXG4gICAgICAgICAgb3JnYW5lQ2xlYW4sXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLm9yZ2FuZVNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShvcmdhbmVDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvcmdhbmVDbGVhbkZpbGVQYXRoLCBvcmdhbmVDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCJhY3RldXJzXCIsIFwib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtyZXVuaW9uUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEpTT04ucGFyc2UocmV1bmlvblJhd0pzb24pXG4gICAgICAgIGNsZWFuUmV1bmlvbihyZXVuaW9uKVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuOiBSZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW5Kc29uOiBzdHJpbmcgPSBBZ2VuZGFzQ29udmVydC5yZXVuaW9uVG9Kc29uKFxuICAgICAgICAgIHJldW5pb25DbGVhbixcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUocmV1bmlvbkNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJldW5pb25DbGVhbkZpbGVQYXRoLCByZXVuaW9uQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiLlwiXSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2FtZW5kZW1lbnRSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgYW1lbmRlbWVudFJhd0ZpbGVQYXRoLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBKU09OLnBhcnNlKGFtZW5kZW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRDbGVhbjogQW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoXG4gICAgICAgICAgYW1lbmRlbWVudEpzb24sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuSnNvbjogc3RyaW5nID0gQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRUb0pzb24oXG4gICAgICAgICAgYW1lbmRlbWVudENsZWFuLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uYW1lbmRlbWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYW1lbmRlbWVudENsZWFuRmlsZVBhdGgsIGFtZW5kZW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldFJhd0RpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb2N1bWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBKU09OLnBhcnNlKGRvY3VtZW50UmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW46IERvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChcbiAgICAgICAgICBkb2N1bWVudEpzb24sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbkpzb246IHN0cmluZyA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvY3VtZW50VG9Kc29uKFxuICAgICAgICAgIGRvY3VtZW50Q2xlYW4sXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9jdW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhkb2N1bWVudENsZWFuRmlsZVBhdGgsIGRvY3VtZW50Q2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtkb3NzaWVyUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9IEpTT04ucGFyc2UoZG9zc2llclJhd0pzb24pXG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llcilcbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRvc3NpZXIsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbjogRG9zc2llclBhcmxlbWVudGFpcmUgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKFxuICAgICAgICAgIGRvc3NpZXJKc29uLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkpzb246IHN0cmluZyA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJQYXJsZW1lbnRhaXJlVG9Kc29uKFxuICAgICAgICAgIGRvc3NpZXJDbGVhbixcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGRvc3NpZXJDbGVhbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgZGF0YXNldENsZWFuRGlyLFxuICAgICAgICAgIC4uLmRvc3NpZXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZG9zc2llckNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvc3NpZXJDbGVhbkZpbGVQYXRoLCBkb3NzaWVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoY29tbWl0QW5kUHVzaChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIG9wdGlvbnMucmVtb3RlKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImRvY3VtZW50c1wiLCBcImRvc3NpZXJzXCJdKVxuICAgICAgKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShkYXRhc2V0LmZpbGVuYW1lLCBcIi5qc29uXCIpXG4gICAgICBpZiAob3B0aW9ucy5kYXRhc2V0ICYmIGRhdGFzZXROYW1lICE9PSBvcHRpb25zLmRhdGFzZXQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfV9uZXR0b3llLmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZSwgb3B0aW9ucylcbiAgICAgIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0UmF3RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHtzY3J1dGluUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluUmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5SYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IEpTT04ucGFyc2Uoc2NydXRpblJhd0pzb24pXG4gICAgICAgIGNsZWFuU2NydXRpbihzY3J1dGluKVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuOiBTY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuSnNvbjogc3RyaW5nID0gU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5Ub0pzb24oXG4gICAgICAgICAgc2NydXRpbkNsZWFuLFxuICAgICAgICApXG5cbiAgICAgICAgY29uc3Qgc2NydXRpbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShzY3J1dGluQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoc2NydXRpbkNsZWFuRmlsZVBhdGgsIHNjcnV0aW5DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmZ1bmN0aW9uIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWU6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55IHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gIGNvbnN0IGRhdGFzZXRDbGVhbkRpcjogc3RyaW5nID0gZGF0YXNldFJhd0RpciArIFwiX25ldHRveWVcIlxuICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgY29uc29sZS5sb2coYENsZWFuaW5nIGRpcmVjdG9yeTogJHtkYXRhc2V0Q2xlYW5EaXJ94oCmYClcbiAgfVxuICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRDbGVhbkRpcilcbiAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0Q2xlYW5EaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgcGF0aG5hbWUgPSBwYXRoLmpvaW4oZGF0YXNldENsZWFuRGlyLCBmaWxlbmFtZSlcbiAgICBmcy5yZW1vdmVTeW5jKHBhdGhuYW1lKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEFuZFB1c2goXG4gIHJlcG9zaXRvcnlEaXI6IHN0cmluZyxcbiAgb3B0aW9uczogYW55LFxuICByZW1vdGVzPzogc3RyaW5nW10sXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LmNvbW1pdChyZXBvc2l0b3J5RGlyLCBcIk5vdXZlbGxlIG1vaXNzb25cIilcbiAgICBmb3IgKGNvbnN0IHJlbW90ZSBvZiByZW1vdGVzIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHB1c2ggJHtyZW1vdGV9IG1hc3RlcmAsIHtcbiAgICAgICAgICBjd2Q6IHJlcG9zaXRvcnlEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIC8vIERvbid0IHN0b3Agd2hlbiBwdXNoIGZhaWxzLlxuICAgICAgICBjb25zb2xlLmVycm9yKChjaGlsZFByb2Nlc3MgYXMgYW55KS5vdXRwdXQpXG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaFVpZChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHN1YmRpcmVjdG9yaWVzOiBhbnksXG4pOiBib29sZWFuIHtcbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgZ2l0LnVpZEJyYW5jaFVwZGF0ZShcbiAgICAgIHJlcG9zaXRvcnlEaXIsXG4gICAgICBzdWJkaXJlY3RvcmllcyxcbiAgICAgIG9wdGlvbnNbXCJuby1yZXNldC1hZnRlci1jb21taXRcIl0sXG4gICAgKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIG9wdGlvbnMucmVtb3RlIHx8IFtdKSB7XG4gICAgICB0cnkge1xuICAgICAgICBnaXQucnVuKHJlcG9zaXRvcnlEaXIsIGBwdXNoIC0tcXVpZXQgJHtyZW1vdGV9IHVpZDp1aWRgKVxuICAgICAgfSBjYXRjaCAoY2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChjbGVhblJlb3JnYW5pemVkRGF0YShvcHRpb25zKSkge1xuICAgIHJldHVybiAxXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJjbGVhbl9yZW9yZ2FuaXplZF9kYXRhLnRzXCIpKVxuICBwcm9jZXNzLmV4aXQobWFpbihwcm9jZXNzLmFyZ3YpKVxuIl19
520
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHMiXSwibmFtZXMiOlsiYXNzZXJ0IiwiZXhlY1N5bmMiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJjbGVhbkFjdGV1ciIsImNsZWFuQW1lbmRlbWVudCIsImNsZWFuRG9jdW1lbnRPckRpdmlzaW9uIiwiY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSIsImNsZWFuT3JnYW5lIiwiY2xlYW5SZXVuaW9uIiwiY2xlYW5TY3J1dGluIiwiZGF0YXNldHMiLCJFbmFibGVkRGF0YXNldHMiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsIndhbGtEaXIiLCJnaXQiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiU2NydXRpbnNDb252ZXJ0IiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjbGVhblJlb3JnYW5pemVkRGF0YSIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXJyb3IiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJBY3RldXJzRXRPcmdhbmVzIiwiZGF0YXNldCIsImFjdGV1cnNFdE9yZ2FuZXMiLCJiYXNlbmFtZSIsImZpbGVuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJhbmFseXplQW5kUmVtb3ZlIiwiZGF0YXNldFJhd0RpciIsImpvaW4iLCJkYXRhc2V0Q2xlYW5EaXIiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyUmF3RmlsZVBhdGgiLCJ2ZXJib3NlIiwiY29uc29sZSIsImxvZyIsImFjdGV1clJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJhY3RldXIiLCJKU09OIiwicGFyc2UiLCJhY3RldXJKc29uIiwic3RyaW5naWZ5IiwiYWN0ZXVyQ2xlYW4iLCJ0b0FjdGV1ciIsImFjdGV1ckNsZWFuSnNvbiIsImFjdGV1clRvSnNvbiIsImFjdGV1ckNsZWFuRmlsZVBhdGgiLCJlbnN1cmVEaXJTeW5jIiwiZGlybmFtZSIsIndyaXRlRmlsZVN5bmMiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZVJhd0ZpbGVQYXRoIiwib3JnYW5lUmF3SnNvbiIsIm9yZ2FuZSIsIm9yZ2FuZUpzb24iLCJvcmdhbmVDbGVhbiIsInRvT3JnYW5lIiwib3JnYW5lQ2xlYW5Kc29uIiwib3JnYW5lVG9Kc29uIiwib3JnYW5lQ2xlYW5GaWxlUGF0aCIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJjb21taXRBbmRQdXNoVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvblJhd0ZpbGVQYXRoIiwicmV1bmlvblJhd0pzb24iLCJyZXVuaW9uIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uQ2xlYW4iLCJ0b1JldW5pb24iLCJyZXVuaW9uQ2xlYW5Kc29uIiwicmV1bmlvblRvSnNvbiIsInJldW5pb25DbGVhbkZpbGVQYXRoIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50UmF3RmlsZVBhdGgiLCJhbWVuZGVtZW50UmF3SnNvbiIsImFtZW5kZW1lbnQiLCJhbWVuZGVtZW50SnNvbiIsImFtZW5kZW1lbnRDbGVhbiIsInRvQW1lbmRlbWVudCIsImFtZW5kZW1lbnRDbGVhbkpzb24iLCJhbWVuZGVtZW50VG9Kc29uIiwiYW1lbmRlbWVudENsZWFuRmlsZVBhdGgiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50UmF3RmlsZVBhdGgiLCJkb2N1bWVudFJhd0pzb24iLCJkb2N1bWVudCIsImRvY3VtZW50SnNvbiIsImRvY3VtZW50Q2xlYW4iLCJ0b0RvY3VtZW50IiwiZG9jdW1lbnRDbGVhbkpzb24iLCJkb2N1bWVudFRvSnNvbiIsImRvY3VtZW50Q2xlYW5GaWxlUGF0aCIsImRvc3NpZXJTcGxpdFBhdGgiLCJkb3NzaWVyRmlsZW5hbWUiLCJkb3NzaWVyUmF3RmlsZVBhdGgiLCJkb3NzaWVyUmF3SnNvbiIsImRvc3NpZXIiLCJkb3NzaWVySnNvbiIsImRvc3NpZXJDbGVhbiIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJkb3NzaWVyQ2xlYW5Kc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVUb0pzb24iLCJkb3NzaWVyQ2xlYW5GaWxlUGF0aCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpblJhd0ZpbGVQYXRoIiwic2NydXRpblJhd0pzb24iLCJzY3J1dGluIiwic2NydXRpbkpzb24iLCJzY3J1dGluQ2xlYW4iLCJ0b1NjcnV0aW4iLCJzY3J1dGluQ2xlYW5Kc29uIiwic2NydXRpblRvSnNvbiIsInNjcnV0aW5DbGVhbkZpbGVQYXRoIiwic2lsZW50IiwicmVhZGRpclN5bmMiLCJwYXRobmFtZSIsInJlbW92ZVN5bmMiLCJyZXBvc2l0b3J5RGlyIiwicmVtb3RlcyIsImNvbW1pdCIsImNoaWxkUHJvY2VzcyIsIm91dHB1dCIsInN1YmRpcmVjdG9yaWVzIiwidWlkQnJhbmNoVXBkYXRlIiwicnVuIiwibWFpbiIsImV4aXQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQVAsTUFBbUIsUUFBbkI7QUFDQSxTQUFTQyxRQUFULFFBQXlCLGVBQXpCO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsVUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakI7U0FHRUMsVyxFQUNBQyxlLEVBQ0FDLHVCLEVBQ0FDLHlCLEVBQ0FDLFcsRUFDQUMsWSxFQUNBQyxZO1NBRU9DLFEsRUFBVUMsZTtTQUNWQyxrQixFQUFvQkMsaUI7U0FDcEJDLE87T0FDRixLQUFLQyxHO1NBR1ZDLE9BQU8sSUFBSUMsdUI7U0FHSkQsT0FBTyxJQUFJRSxjO1NBQ0NGLE9BQU8sSUFBSUcsa0I7U0FFOUJILE9BQU8sSUFBSUksMEI7U0FJSkosT0FBTyxJQUFJSyxlOztBQUVwQixTQUFTQyxTQUFULENBQW1CQyxJQUFuQixFQUF3QztBQUN0QyxRQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtBQUNFQyxJQUFBQSxLQUFLLEVBQUUsR0FEVDtBQUVFQyxJQUFBQSxJQUFJLEVBQUUsK0RBRlI7QUFHRUMsSUFBQUEsSUFBSSxFQUFFLE9BSFI7QUFJRUMsSUFBQUEsSUFBSSxFQUFFQztBQUpSLEdBRHlCLEVBT3pCO0FBQ0VKLElBQUFBLEtBQUssRUFBRSxHQURUO0FBRUVDLElBQUFBLElBQUksRUFBRSxvQkFGUjtBQUdFQyxJQUFBQSxJQUFJLEVBQUUsUUFIUjtBQUlFQyxJQUFBQSxJQUFJLEVBQUVFO0FBSlIsR0FQeUIsRUFhekI7QUFDRUwsSUFBQUEsS0FBSyxFQUFFLEdBRFQ7QUFFRUMsSUFBQUEsSUFBSSxFQUFFLDhCQUZSO0FBR0VDLElBQUFBLElBQUksRUFBRSxTQUhSO0FBSUVDLElBQUFBLElBQUksRUFBRUM7QUFKUixHQWJ5QixFQW1CekI7QUFDRUosSUFBQUEsS0FBSyxFQUFFLEdBRFQ7QUFFRU0s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RUFBMkM7QUFDekMsVUFBSTtBQUNGdkYsUUFBQUEsR0FBRyxDQUFDbUssR0FBSixDQUFRUCxhQUFSLEVBQXdCLGdCQUFlckUsTUFBTyxVQUE5QztBQUNELE9BRkQsQ0FFRSxPQUFPd0UsWUFBUCxFQUFxQjtBQUNyQnRJLFFBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFNBQU9BLEtBQVA7QUFDRDs7QUFFRCxTQUFTMkksSUFBVCxDQUFjNUosSUFBZCxFQUFpQztBQUMvQixRQUFNVyxPQUFPLEdBQUdaLFNBQVMsQ0FBQ0MsSUFBRCxDQUF6Qjs7QUFDQSxNQUFJWSxvQkFBb0IsQ0FBQ0QsT0FBRCxDQUF4QixFQUFtQztBQUNqQyxXQUFPLENBQVA7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPLENBQVA7QUFDRDtBQUNGO0FBRUQ7OztBQUNBLElBQUkwQixPQUFPLENBQUNyQyxJQUFSLENBQWEsQ0FBYixFQUFnQitDLFFBQWhCLENBQXlCLDJCQUF6QixDQUFKLEVBQ0VWLE9BQU8sQ0FBQ3dILElBQVIsQ0FBYUQsSUFBSSxDQUFDdkgsT0FBTyxDQUFDckMsSUFBVCxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQge1xuICBjbGVhbkFjdGV1cixcbiAgY2xlYW5BbWVuZGVtZW50LFxuICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbixcbiAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgY2xlYW5PcmdhbmUsXG4gIGNsZWFuUmV1bmlvbixcbiAgY2xlYW5TY3J1dGluLFxufSBmcm9tIFwiLi4vY2xlYW5lcnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuLi90eXBlcy9zY3J1dGluc1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBhbGlhczogXCJDXCIsXG4gICAgICBoZWxwOiBcImNsb25lIHJlcG9zaXRvcmllcyBmcm9tIGdpdmVuIGdyb3VwIChvciBvcmdhbml6YXRpb24pIGdpdCBVUkxcIixcbiAgICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImNcIixcbiAgICAgIGhlbHA6IFwiY29tbWl0IGNsZWFuIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImRcIixcbiAgICAgIGhlbHA6IFwic2luZ2xlIGRhdGFzZXQgdG8gcmVvcmdhbml6ZVwiLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJrXCIsXG4gICAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiclwiLFxuICAgICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJyZW1vdGVcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcInNcIixcbiAgICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgICBuYW1lOiBcInNpbGVudFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwiZG8gbm90IHJlc2V0IC0taGFyZCBhZnRlciBjb21taXQgdG8gc2F2ZSBJL08gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyB0byBiZSBkaXNjYXJkZWRcIixcbiAgICAgIG5hbWU6IFwibm8tcmVzZXQtYWZ0ZXItY29tbWl0XCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwidlwiLFxuICAgICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gY2xlYW5SZW9yZ2FuaXplZERhdGEob3B0aW9uczogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IGRhdGFEaXI6IHN0cmluZyA9IG9wdGlvbnMuZGF0YURpclxuXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGVycm9yID0gZmFsc2VcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldFJhd0RpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyUmF3RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldFJhd0RpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgQ2xlYW5pbmcgZmlsZTogJHthY3RldXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1clJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJSYXdGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gSlNPTi5wYXJzZShhY3RldXJSYXdKc29uKVxuICAgICAgICBjbGVhbkFjdGV1cihhY3RldXIpXG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW46IEFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIGNvbnN0IGFjdGV1ckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJUb0pzb24oYWN0ZXVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgYWN0ZXVyQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoYWN0ZXVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYWN0ZXVyQ2xlYW5GaWxlUGF0aCwgYWN0ZXVyQ2xlYW5Kc29uLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZVJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7b3JnYW5lUmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lUmF3RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEpTT04ucGFyc2Uob3JnYW5lUmF3SnNvbilcbiAgICAgICAgY2xlYW5PcmdhbmUob3JnYW5lKVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpXG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuOiBPcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICBjb25zdCBvcmdhbmVDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQub3JnYW5lVG9Kc29uKG9yZ2FuZUNsZWFuKVxuXG4gICAgICAgIGNvbnN0IG9yZ2FuZUNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKG9yZ2FuZUNsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKG9yZ2FuZUNsZWFuRmlsZVBhdGgsIG9yZ2FuZUNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcImFjdGV1cnNcIiwgXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvblJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke3JldW5pb25SYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25SYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvblJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gSlNPTi5wYXJzZShyZXVuaW9uUmF3SnNvbilcbiAgICAgICAgY2xlYW5SZXVuaW9uKHJldW5pb24pXG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCByZXVuaW9uQ2xlYW46IFJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGNvbnN0IHJldW5pb25DbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgICAgQWdlbmRhc0NvbnZlcnQucmV1bmlvblRvSnNvbihyZXVuaW9uQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgcmV1bmlvbkNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShyZXVuaW9uQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMocmV1bmlvbkNsZWFuRmlsZVBhdGgsIHJldW5pb25DbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2hVaWQoZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBbXCIuXCJdKSkge1xuICAgICAgICBlcnJvciA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgIENsZWFuaW5nIGZpbGU6ICR7YW1lbmRlbWVudFJhd0ZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBhbWVuZGVtZW50UmF3RmlsZVBhdGgsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEpTT04ucGFyc2UoYW1lbmRlbWVudFJhd0pzb24pXG4gICAgICAgIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudENsZWFuOiBBbWVuZGVtZW50ID1cbiAgICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50VG9Kc29uKGFtZW5kZW1lbnRDbGVhbilcblxuICAgICAgICBjb25zdCBhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRDbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhhbWVuZGVtZW50Q2xlYW5GaWxlUGF0aCwgYW1lbmRlbWVudENsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoZGF0YXNldC5maWxlbmFtZSwgXCIuanNvblwiKVxuICAgICAgaWYgKG9wdGlvbnMuZGF0YXNldCAmJiBkYXRhc2V0TmFtZSAhPT0gb3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX1fbmV0dG95ZS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGFuYWx5emVBbmRSZW1vdmUoZGF0YXNldE5hbWUsIG9wdGlvbnMpXG4gICAgICBjb25zdCBkYXRhc2V0UmF3RGlyOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBjb25zdCBkYXRhc2V0Q2xlYW5EaXI6IHN0cmluZyA9IGRhdGFzZXRSYXdEaXIgKyBcIl9uZXR0b3llXCJcbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRSYXdGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0UmF3RGlyLFxuICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2RvY3VtZW50UmF3RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudFJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudFJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IEpTT04ucGFyc2UoZG9jdW1lbnRSYXdKc29uKVxuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRDbGVhbjogRG9jdW1lbnQgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBjb25zdCBkb2N1bWVudENsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb2N1bWVudFRvSnNvbihkb2N1bWVudENsZWFuKVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50Q2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5kb2N1bWVudFNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb2N1bWVudENsZWFuRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGRvY3VtZW50Q2xlYW5GaWxlUGF0aCwgZG9jdW1lbnRDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXRSYXdEaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llclJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke2Rvc3NpZXJSYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJSYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llclJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID0gSlNPTi5wYXJzZShkb3NzaWVyUmF3SnNvbilcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyKVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZG9zc2llciwgbnVsbCwgMilcblxuICAgICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuOiBEb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyUGFybGVtZW50YWlyZVRvSnNvbihkb3NzaWVyQ2xlYW4pXG5cbiAgICAgICAgY29uc3QgZG9zc2llckNsZWFuRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICBkYXRhc2V0Q2xlYW5EaXIsXG4gICAgICAgICAgLi4uZG9zc2llclNwbGl0UGF0aCxcbiAgICAgICAgKVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShkb3NzaWVyQ2xlYW5GaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZG9zc2llckNsZWFuRmlsZVBhdGgsIGRvc3NpZXJDbGVhbkpzb24sIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChjb21taXRBbmRQdXNoKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgb3B0aW9ucy5yZW1vdGUpKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb21taXRBbmRQdXNoVWlkKGRhdGFzZXRDbGVhbkRpciwgb3B0aW9ucywgW1wiZG9jdW1lbnRzXCIsIFwiZG9zc2llcnNcIl0pXG4gICAgICApIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKGRhdGFzZXQuZmlsZW5hbWUsIFwiLmpzb25cIilcbiAgICAgIGlmIChvcHRpb25zLmRhdGFzZXQgJiYgZGF0YXNldE5hbWUgIT09IG9wdGlvbnMuZGF0YXNldCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9X25ldHRveWUuZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBhbmFseXplQW5kUmVtb3ZlKGRhdGFzZXROYW1lLCBvcHRpb25zKVxuICAgICAgY29uc3QgZGF0YXNldFJhd0Rpcjogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0UmF3RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpblJhd0ZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXRSYXdEaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICBDbGVhbmluZyBmaWxlOiAke3NjcnV0aW5SYXdGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5SYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpblJhd0ZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gSlNPTi5wYXJzZShzY3J1dGluUmF3SnNvbilcbiAgICAgICAgY2xlYW5TY3J1dGluKHNjcnV0aW4pXG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW46IFNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICAgIFNjcnV0aW5zQ29udmVydC5zY3J1dGluVG9Kc29uKHNjcnV0aW5DbGVhbilcblxuICAgICAgICBjb25zdCBzY3J1dGluQ2xlYW5GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgIGRhdGFzZXRDbGVhbkRpcixcbiAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICApXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHNjcnV0aW5DbGVhbkZpbGVQYXRoKSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3J1dGluQ2xlYW5GaWxlUGF0aCwgc2NydXRpbkNsZWFuSnNvbiwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1pdEFuZFB1c2goZGF0YXNldENsZWFuRGlyLCBvcHRpb25zLCBvcHRpb25zLnJlbW90ZSkpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoY29tbWl0QW5kUHVzaFVpZChkYXRhc2V0Q2xlYW5EaXIsIG9wdGlvbnMsIFtcIi5cIl0pKSB7XG4gICAgICAgIGVycm9yID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXJyb3Jcbn1cblxuZnVuY3Rpb24gYW5hbHl6ZUFuZFJlbW92ZShkYXRhc2V0TmFtZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIGNvbnN0IGRhdGFzZXRSYXdEaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgY29uc3QgZGF0YXNldENsZWFuRGlyOiBzdHJpbmcgPSBkYXRhc2V0UmF3RGlyICsgXCJfbmV0dG95ZVwiXG4gIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgQ2xlYW5pbmcgZGlyZWN0b3J5OiAke2RhdGFzZXRDbGVhbkRpcn3igKZgKVxuICB9XG4gIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldENsZWFuRGlyKVxuICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRDbGVhbkRpcikpIHtcbiAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBwYXRobmFtZSA9IHBhdGguam9pbihkYXRhc2V0Q2xlYW5EaXIsIGZpbGVuYW1lKVxuICAgIGZzLnJlbW92ZVN5bmMocGF0aG5hbWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QW5kUHVzaChcbiAgcmVwb3NpdG9yeURpcjogc3RyaW5nLFxuICBvcHRpb25zOiBhbnksXG4gIHJlbW90ZXM/OiBzdHJpbmdbXSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBnaXQuY29tbWl0KHJlcG9zaXRvcnlEaXIsIFwiTm91dmVsbGUgbW9pc3NvblwiKVxuICAgIGZvciAoY29uc3QgcmVtb3RlIG9mIHJlbW90ZXMgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcHVzaCAke3JlbW90ZX0gbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgLy8gRG9uJ3Qgc3RvcCB3aGVuIHB1c2ggZmFpbHMuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKGNoaWxkUHJvY2VzcyBhcyBhbnkpLm91dHB1dClcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBjb21taXRBbmRQdXNoVWlkKFxuICByZXBvc2l0b3J5RGlyOiBzdHJpbmcsXG4gIG9wdGlvbnM6IGFueSxcbiAgc3ViZGlyZWN0b3JpZXM6IGFueSxcbik6IGJvb2xlYW4ge1xuICBsZXQgZXJyb3IgPSBmYWxzZVxuICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICBnaXQudWlkQnJhbmNoVXBkYXRlKFxuICAgICAgcmVwb3NpdG9yeURpcixcbiAgICAgIHN1YmRpcmVjdG9yaWVzLFxuICAgICAgb3B0aW9uc1tcIm5vLXJlc2V0LWFmdGVyLWNvbW1pdFwiXSxcbiAgICApXG4gICAgZm9yIChjb25zdCByZW1vdGUgb2Ygb3B0aW9ucy5yZW1vdGUgfHwgW10pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGdpdC5ydW4ocmVwb3NpdG9yeURpciwgYHB1c2ggLS1xdWlldCAke3JlbW90ZX0gdWlkOnVpZGApXG4gICAgICB9IGNhdGNoIChjaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgZXJyb3IgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBlcnJvclxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKGNsZWFuUmVvcmdhbml6ZWREYXRhKG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIDFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImNsZWFuX3Jlb3JnYW5pemVkX2RhdGEudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXX0=
@@ -2,8 +2,6 @@
2
2
 
3
3
  require("core-js/modules/es.array.slice.js");
4
4
 
5
- require("core-js/modules/es.object.to-string.js");
6
-
7
5
  require("core-js/modules/es.function.name.js");
8
6
 
9
7
  require("core-js/modules/es.array.from.js");
@@ -28,6 +26,8 @@ require("core-js/modules/es.object.keys.js");
28
26
 
29
27
  require("core-js/modules/es.array.for-each.js");
30
28
 
29
+ require("core-js/modules/es.object.to-string.js");
30
+
31
31
  require("core-js/modules/es.regexp.exec.js");
32
32
 
33
33
  require("core-js/modules/es.string.replace.js");
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
4
 
5
5
  require("core-js/modules/es.array.slice.js");
6
6
 
@@ -90,11 +90,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
90
90
 
91
91
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
92
92
 
93
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
94
-
95
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
96
-
97
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
93
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } Object.defineProperty(subClass, "prototype", { value: Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }), writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
98
94
 
99
95
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
100
96
 
@@ -108,6 +104,10 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
108
104
 
109
105
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
110
106
 
107
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
108
+
109
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
110
+
111
111
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
112
112
 
113
113
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -182,7 +182,7 @@ function eqSet(as, bs) {
182
182
  return true;
183
183
  }
184
184
 
185
- var Code2Pattern = function Code2Pattern(pattern, children) {
185
+ var Code2Pattern = /*#__PURE__*/_createClass(function Code2Pattern(pattern, children) {
186
186
  _classCallCheck(this, Code2Pattern);
187
187
 
188
188
  _defineProperty(this, "_pattern_", void 0);
@@ -192,7 +192,7 @@ var Code2Pattern = function Code2Pattern(pattern, children) {
192
192
  this._pattern_ = pattern;
193
193
  this._match_count_ = 0;
194
194
  Object.assign(this, children);
195
- };
195
+ });
196
196
 
197
197
  var Code2PatternComFond = /*#__PURE__*/function (_Code2Pattern) {
198
198
  _inherits(Code2PatternComFond, _Code2Pattern);
@@ -205,7 +205,7 @@ var Code2PatternComFond = /*#__PURE__*/function (_Code2Pattern) {
205
205
  return _super.call(this, "^/SAISIE/(/NOMIN/)*(/REUNION/)*(/RAPPORT/)*$", {});
206
206
  }
207
207
 
208
- return Code2PatternComFond;
208
+ return _createClass(Code2PatternComFond);
209
209
  }(Code2Pattern);
210
210
 
211
211
  var LectureMapping = /*#__PURE__*/function () {
@@ -789,4 +789,4 @@ function main(argv) {
789
789
 
790
790
 
791
791
  if (process.argv[1].endsWith("document_dossiers_legislatifs.ts")) process.exit(main(process.argv));
792
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2RvY3VtZW50X2Rvc3NpZXJzX2xlZ2lzbGF0aWZzLnRzIl0sIm5hbWVzIjpbInBhcnNlQXJncyIsImFyZ3YiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHRPcHRpb24iLCJtdWx0aXBsZSIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsInNlY3Rpb25zIiwiaGVhZGVyIiwiY29udGVudCIsIm9wdGlvbkxpc3QiLCJvcHRpb25zIiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInVzYWdlIiwid2FybiIsImVxU2V0IiwiYXMiLCJicyIsInNpemUiLCJhIiwiaGFzIiwiQ29kZTJQYXR0ZXJuIiwicGF0dGVybiIsImNoaWxkcmVuIiwiX3BhdHRlcm5fIiwiX21hdGNoX2NvdW50XyIsIk9iamVjdCIsImFzc2lnbiIsIkNvZGUyUGF0dGVybkNvbUZvbmQiLCJMZWN0dXJlTWFwcGluZyIsIlNldCIsImFjdGUiLCJjb2RlcyIsImFkZCIsImNvZGVBY3RlIiwiZ2V0VHlwZSIsImxpYmVsbGVBY3RlIiwibm9tQ2Fub25pcXVlIiwibGliZWxsZSIsInR5cGVzIiwiQXJyYXkiLCJmcm9tIiwiYyIsImNvZGUiLCJsb2ciLCJqb2luIiwibWF0Y2giLCJjb2Rlc19sZWN0dXJlX3JlZ2V4cCIsIkVycm9yIiwicmVwbGFjZSIsImlzTGVjdHVyZSIsIm1hcCIsIlJlZ0V4cCIsImNvZGVzX2xlY3R1cmUiLCJMZWN0dXJlTWFwcGVyIiwibWFwcGluZyIsImdldENvZGVBY3RlIiwidW5kZWZpbmVkIiwibGVjdHVyZXMiLCJyZW1hcCIsIm1lcmdlQ29kZXMiLCJwcmludEFuY2hvcnMiLCJnZXRDb2RlcyIsIkFjdGVzRG9jdW1lbnRhdGlvbiIsInNhbml0eUNoZWNrcyIsInZlcmJvc2UiLCJsZWN0dXJlIiwiQ01QIiwiQ0MiLCJQUk9NIiwiQU4yMSIsIkFOTFVOSSIsIlLDqXNvbHV0aW9uIiwiQU4yMCIsIkVVIiwiSW1tdW5pdMOpIiwicHJvY2VkdXJlcyIsImNvZGUycGF0dGVybiIsImRhdGEiLCJhY3Rpb24iLCJmaWxlIiwiZG9zc2llciIsInByb2NlZHVyZSIsInJlbWFwUHJvY2VkdXJlIiwicHJvY2VkdXJlUGFybGVtZW50YWlyZSIsImFjdGVzTGVnaXNsYXRpZnMiLCJ3YWxrRmlsZXMiLCJfYWN0ZXMiLCJfYzJwIiwiX3BhcmVudCIsImNvbGxlY3QiLCJhY3RlcyIsImMycCIsInBhcmVudCIsIm1lcmdlIiwidmFsaWRhdGUiLCJyZXN1bHRzIiwibGVjdHVyZU1hcHBlciIsInB1c2giLCJtZXJnZV9wcm9jZWR1cmVzIiwiTWFwIiwicmVtYXBwZWRQcm9jZWR1cmVzIiwiZ2V0Iiwib3JkZXJlZCIsIngiLCJzZXF1ZW5jZSIsInNob3J0Q29kZSIsInhzaVR5cGUiLCJsIiwicmVtYXBBY3RlcyIsInZhbGlkYXRlQ2hyb25vbG9neSIsIm1lcmdlQWN0ZSIsImNvbGxlY3RBY3RlcyIsInBhdGgiLCJlbnRyaWVzIiwia2V5IiwidmFsdWUiLCJjb25zdHJ1Y3RvciIsInZhbGlkYXRlTGV2ZWwiLCJjb25jYXQiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYW5jaG9yc1ByaW50ZWQiLCJhbmNob3JzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwia2V5cyIsIm9yZGVyZWRDb2RlcyIsInJlbmFtZUNNUCIsImFkZEFuY2hvcnMiLCJwcmludEVudHJ5IiwicHJpbnRMZXZlbCIsInN1YnN0cmluZyIsInJlbWFwcGVkIiwiYWdncmVnYXRlZCIsImdldEFnZ3JlZ2F0ZWQiLCJwcmludENvZGVzIiwicHJpbnRBbmNob3JzSW5kZXgiLCJtYWluIiwiZG9jIiwiY29sbGVjdEZpbGVzIiwicHJvY2Vzc0ZpbGVzIiwicHJpbnQiLCJwcm9jZXNzIiwiZXhpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QjlFLElBQTVCLENBQWlDLEdBQWpDLENBQWxCO0FBQ0FuQyxVQUFBQSxPQUFPLENBQUNrQyxHQUFSLENBQVk4RSxTQUFaO0FBQ0EsZUFBS1csVUFBTCxDQUFnQjFDLEtBQWhCLEVBQXVCLE1BQXZCLEVBQStCLEtBQUtkLFlBQUwsQ0FBa0JzQyxHQUFsQixDQUEvQixFQUF1RCxJQUF2RDtBQUNEO0FBZFc7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFlWixXQUFLdUIsVUFBTDtBQUNBLFdBQUtDLGlCQUFMO0FBQ0Q7Ozs7OztBQUdILFNBQVNDLElBQVQsQ0FBY2hKLElBQWQsRUFBaUM7QUFDL0IsTUFBTWEsT0FBTyxHQUFHZCxTQUFTLENBQUNDLElBQUQsQ0FBekI7QUFDQSxNQUFJYSxPQUFPLEtBQUssSUFBaEIsRUFBc0IsT0FBTyxDQUFQO0FBQ3RCLE1BQUlvSSxHQUFHLEdBQUcsSUFBSTlFLGtCQUFKLENBQ1IsQ0FBQ3RELE9BQU8sQ0FBQyxrQkFBRCxDQURBLEVBRVJBLE9BQU8sQ0FBQ3dELE9BRkEsQ0FBVjtBQUlBNEUsRUFBQUEsR0FBRyxDQUFDQyxZQUFKLENBQWlCckksT0FBTyxDQUFDcUUsSUFBekI7QUFDQStELEVBQUFBLEdBQUcsQ0FBQ0UsWUFBSixDQUFpQnRJLE9BQU8sQ0FBQ3FFLElBQXpCO0FBQ0ErRCxFQUFBQSxHQUFHLENBQUNHLEtBQUo7QUFDQSxTQUFPLENBQVA7QUFDRDtBQUVEOzs7QUFDQSxJQUFJQyxPQUFPLENBQUNySixJQUFSLENBQWEsQ0FBYixFQUFnQm1JLFFBQWhCLENBQXlCLGtDQUF6QixDQUFKLEVBQ0VrQixPQUFPLENBQUNDLElBQVIsQ0FBYU4sSUFBSSxDQUFDSyxPQUFPLENBQUNySixJQUFULENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lVXNhZ2UgZnJvbSBcImNvbW1hbmQtbGluZS11c2FnZVwiXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3Y6IHN0cmluZ1tdKTogYW55IHtcbiAgY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIGEgSlNPTiBmaWxlIG9yIGEgZ2xvYiBwYXR0ZXJuIHRvIEpTT04gZmlsZXNcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuby1zYW5pdHktY2hlY2tzXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRG8gbm90IHBlcmZvcm0gc2FuaXR5IGNoZWNrcy5cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJoZWxwXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQcmludCB0aGlzIHVzYWdlIGd1aWRlLlwiLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIkFpZGUgw6AgbGEgZG9jdW1lbnRhdGlvbiBkdSBkb3NzaWVyIGzDqWdpc2xhdGlmXCIsXG4gICAgICBjb250ZW50OiBcIkfDqW7DqHJlIHVuZSBoacOpcmFyY2hpZSBkZXMgYWN0ZXMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiT3B0aW9uc1wiLFxuICAgICAgb3B0aW9uTGlzdDogb3B0aW9uc0RlZmluaXRpb25zLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMsIHtcbiAgICBhcmd2OiBhcmd2LFxuICB9KVxuICBpZiAoIShcImhlbHBcIiBpbiBvcHRpb25zKSAmJiAhKFwiZGF0YVwiIGluIG9wdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcIi0tZGF0YSBpcyBtYW5kYXRvcnlcIilcbiAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gIH1cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gZXFTZXQoYXM6IFNldDxzdHJpbmc+LCBiczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKGFzLnNpemUgIT09IGJzLnNpemUpIHJldHVybiBmYWxzZVxuICBmb3IgKHZhciBhIG9mIGFzKSBpZiAoIWJzLmhhcyhhKSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmNsYXNzIENvZGUyUGF0dGVybiB7XG4gIF9wYXR0ZXJuXzogYW55XG4gIF9tYXRjaF9jb3VudF86IG51bWJlclxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBhbnksIGNoaWxkcmVuOiBhbnkpIHtcbiAgICB0aGlzLl9wYXR0ZXJuXyA9IHBhdHRlcm5cbiAgICB0aGlzLl9tYXRjaF9jb3VudF8gPSAwXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjaGlsZHJlbilcbiAgfVxufVxuXG5jbGFzcyBDb2RlMlBhdHRlcm5Db21Gb25kIGV4dGVuZHMgQ29kZTJQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJeL1NBSVNJRS8oL05PTUlOLykqKC9SRVVOSU9OLykqKC9SQVBQT1JULykqJFwiLCB7fSlcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGluZyB7XG4gIGxpYmVsbGU6IGFueSA9IHt9XG4gIGNvZGVzOiBhbnkgPSBuZXcgU2V0KClcblxuICBzdGF0aWMgY29kZXNfbGVjdHVyZTogc3RyaW5nW10gPSBbXG4gICAgXCJBTjFcIixcbiAgICBcIlNOMVwiLFxuICAgIFwiQU5OTEVDXCIsXG4gICAgXCJTTk5MRUNcIixcbiAgICBcIkFOTERFRlwiLFxuICAgIFwiQU4yXCIsXG4gICAgXCJTTjJcIixcbiAgICBcIlNOM1wiLFxuICBdXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlX3JlZ2V4cDogYW55ID0gbmV3IFJlZ0V4cChcbiAgICBcIl4oPzpcIiArIExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmUuam9pbihcInxcIikgKyBcIikoLS4qKT8kXCIsXG4gIClcblxuICBzdGF0aWMgaXNMZWN0dXJlKGFjdGU6IGFueSkge1xuICAgIHJldHVybiBhY3RlLmNvZGVBY3RlLm1hdGNoKExlY3R1cmVNYXBwaW5nLmNvZGVzX2xlY3R1cmVfcmVnZXhwKVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKGFjdGUuY29kZUFjdGUubWF0Y2goL15BTi8pKSByZXR1cm4gXCJBTlwiXG4gICAgZWxzZSBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXlNOLykpIHJldHVybiBcIlNOXCJcbiAgICBlbHNlIHRocm93IEVycm9yKGAke2FjdGUuY29kZUFjdGV9IGRvZXMgbm90IHN0YXJ0IHdpdGggQU4gb3IgU05gKVxuICB9XG5cbiAgc3RhdGljIG1hcChjb2RlQWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGNvZGVBY3RlLnJlcGxhY2UoTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHAsIGBsZWN0dXJlJDFgKVxuICB9XG5cbiAgc3RhdGljIGdldENvZGVBY3RlKGFjdGU6IGFueSkge1xuICAgIGlmICghTGVjdHVyZU1hcHBpbmcuaXNMZWN0dXJlKGFjdGUpKSByZXR1cm5cblxuICAgIHJldHVybiBMZWN0dXJlTWFwcGluZy5tYXAoYWN0ZS5jb2RlQWN0ZSlcbiAgfVxuXG4gIGFkZChhY3RlOiBhbnkpIHtcbiAgICB0aGlzLmNvZGVzLmFkZChhY3RlLmNvZGVBY3RlKVxuXG4gICAgY29uc3QgdHlwZSA9IExlY3R1cmVNYXBwaW5nLmdldFR5cGUoYWN0ZSlcblxuICAgIGlmICghKGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlIGluIHRoaXMubGliZWxsZSkpXG4gICAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdID0gbmV3IFNldCgpXG4gICAgdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXS5hZGQodHlwZSlcbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIGFjdGUuY29kZUFjdGUgPSBjb2RlQWN0ZVxuXG4gICAgbGV0IHR5cGVzID0gdGhpcy5saWJlbGxlW2FjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXVxuICAgIGlmICghKHR5cGVzLmhhcyhcIlNOXCIpICYmIHR5cGVzLmhhcyhcIkFOXCIpKSkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhcIlNOXCIpKSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoU8OpbmF0KVwiXG4gICAgICBlbHNlIGlmICh0eXBlcy5oYXMoXCJBTlwiKSlcbiAgICAgICAgYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgKz0gXCIgKEFzc2VtYmzDqWUgTmF0aW9uYWxlKVwiXG4gICAgfVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55KSB7XG4gICAgZm9yIChjb25zdCBjIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvZGVzLmFkZChjKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuY29kZXMpKSBjb25zb2xlLmxvZyhgLi4gXyR7Y29kZX06YClcbiAgfVxuXG4gIGdldENvZGVzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY29kZXMpLmpvaW4oXCIsXCIpXG4gIH1cbn1cblxuY2xhc3MgTGVjdHVyZU1hcHBlciB7XG4gIG1hcHBpbmc6IGFueSA9IHt9XG5cbiAgaGFzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29kZUFjdGUgaW4gdGhpcy5tYXBwaW5nXG4gIH1cblxuICBjb2xsZWN0KGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgbGVjdHVyZXMgPSB0aGlzLm1hcHBpbmdcbiAgICAgIGlmICghKGNvZGVBY3RlIGluIGxlY3R1cmVzKSkgbGVjdHVyZXNbY29kZUFjdGVdID0gbmV3IExlY3R1cmVNYXBwaW5nKClcbiAgICAgIGxlY3R1cmVzW2NvZGVBY3RlXS5hZGQoYWN0ZSlcbiAgICB9XG4gIH1cblxuICByZW1hcChhY3RlOiBhbnkpIHtcbiAgICBjb25zdCBjb2RlQWN0ZSA9IExlY3R1cmVNYXBwaW5nLmdldENvZGVBY3RlKGFjdGUpXG4gICAgaWYgKGNvZGVBY3RlICE9IHVuZGVmaW5lZCkgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5yZW1hcChhY3RlLCBjb2RlQWN0ZSlcbiAgfVxuXG4gIG1lcmdlQ29kZXMoY29kZXM6IGFueSwgY29kZUFjdGU6IHN0cmluZykge1xuICAgIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0ubWVyZ2VDb2Rlcyhjb2RlcylcbiAgfVxuXG4gIHByaW50QW5jaG9ycyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5wcmludEFuY2hvcnMoKVxuICB9XG5cbiAgZ2V0Q29kZXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLmdldENvZGVzKClcbiAgfVxufVxuXG5jbGFzcyBBY3Rlc0RvY3VtZW50YXRpb24ge1xuICB2ZXJib3NlOiBib29sZWFuXG4gIHNhbml0eUNoZWNrczogYm9vbGVhblxuICBsZWN0dXJlTWFwcGVyOiBhbnkgPSBuZXcgTGVjdHVyZU1hcHBlcigpXG4gIHJlbWFwcGVkUHJvY2VkdXJlczogYW55ID0ge31cbiAgYW5jaG9yc1ByaW50ZWQ6IGFueSA9IHt9XG4gIGFuY2hvcnM6IGFueSA9IG5ldyBTZXQoKVxuICBjb2RlczogYW55ID0ge31cbiAgcHJvY2VkdXJlczogYW55ID0gbnVsbFxuICBjb2RlMnBhdHRlcm46IGFueSA9IG5ldyBDb2RlMlBhdHRlcm4obnVsbCwge1xuICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigoKC9sZWN0dXJlLykrKXwoKC9sZWN0dXJlLykrL0NNUC8oL2xlY3R1cmUvKSopKSgvQ0MvKT8oL1BST00vKT8oL0FOLUFQUExJLyk/JFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvKT8oL0RQVExFVFRSRUNULyk/KC9FVEkvKT8oL0FWQ0UvKT8oL0RHVlQvKT8oL0FDSU4vKT8oL01PVElPTi8pKigvUFJPQ0FDQy8pPygvQ09NLyk/KCgvREVCQVRTLykrKT8oL1JUUklOSS8pPyRcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImxlY3R1cmUtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05EL3wvQVZJUy8pKyRcIiwge1xuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgICAgXCJsZWN0dXJlLUNPTS1BVklTXCI6IG5ldyBDb2RlMlBhdHRlcm5Db21Gb25kKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9TRUFOQ0UvKSooKC9NT1RJT04vKT8oL01PVElPTi1WT1RFLykrKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENNUDogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0RFUE9UL3wvU0FJU0lFLyl7MSwyfSgvQ09NLyk/KC9ERUMvKT8oL0RFQkFUUy1BTi8vREVCQVRTLVNOLyk/XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJDTVAtQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICAgIFwiXigvTk9NSU4vKT8oL1JBUFBPUlQtQU4vfC9SQVBQT1JULVNOLyl7Mn0kXCIsXG4gICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1BTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICAgIFwiQ01QLURFQkFUUy1TTlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICBDQzogbmV3IENvZGUyUGF0dGVybihcIl4oL1NBSVNJRS8pKygvQ09OQ0xVU0lPTi8pPyRcIiwge30pLFxuICAgICAgICBQUk9NOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUFVCLyk/JFwiLCB7fSksXG4gICAgICAgIFwiQU4tQVBQTElcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1JBUFBPUlQvKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIkFsbG9jdXRpb24gZHUgUHLDqXNpZGVudCBkZSBsJ0Fzc2VtYmzDqWUgbmF0aW9uYWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BUEFOLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJSw6lzb2x1dGlvbiBBcnRpY2xlIDM0LTFcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0RFQkFUUy8pPygvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykrKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFLDqXNvbHV0aW9uOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/KC9DQy8pPyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTL3wvUlRSSU5JLyk/JFwiLCB7XG4gICAgICAgIFwiQU5MVU5JLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQ0FFLyk/KC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICBcIkFOTFVOSS1DT00tQ0FFXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgICBcIl4oL1NBSVNJRS8pPygvTk9NSU4vKT8oL1JFVU5JT04vKT8oL1JBUFBPUlQvKT8oL0RFQy8pPyRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvREVDLyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLyk/KC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgfSksXG4gICAgXCJSYXBwb3J0IGQnaW5mb3JtYXRpb24gc2FucyBtaXNzaW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4oL0FOMjAvKT8oL0VVLyk/JFwiLFxuICAgICAge1xuICAgICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgICBFVTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pKyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTWlzc2lvbiBkJ2luZm9ybWF0aW9uXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTjIwLyk/JFwiLCB7XG4gICAgICBBTjIwOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvTUlTSU5GLyk/JFwiLCB7XG4gICAgICAgIFwiQU4yMC1NSVNJTkZcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICBcIl4oL0NSRUEvKT8oL05PTUlOLyk/KC9SQVBQT1JULyk/JFwiLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJDb21taXNzaW9uIGQnZW5xdcOqdGVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DT01FTlEvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLUNPTUVOUVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkVuZ2FnZW1lbnQgZGUgbGEgcmVzcG9uc2FiaWxpdMOpIGdvdXZlcm5lbWVudGFsZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL0FOMjEvJFwiLFxuICAgICAge1xuICAgICAgICBBTjIxOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigoKC9NT1RJT04vKSovREVCQVRTLyl8KC9ER1ZULykpezEsMn0kXCIsIHtcbiAgICAgICAgICBcIkFOMjEtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL01PVElPTi1WT1RFLykqJFwiLCB7fSksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiTW90aW9uIHLDqWbDqXJlbmRhaXJlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9sZWN0dXJlLykrJFwiLCB7XG4gICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/JFwiLCB7XG4gICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcImxlY3R1cmUtQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcImxlY3R1cmUtREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIEltbXVuaXTDqTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOTFVOSS8pKyRcIiwge1xuICAgICAgQU5MVU5JOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL0NPTS8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9GT05ELyk/JFwiLCB7XG4gICAgICAgICAgXCJBTkxVTkktQ09NLUZPTkRcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pKigvUkFQUE9SVC8pKiRcIixcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgICBcIkFOTFVOSS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pPygvREVDLykkXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiUmVzcG9uc2FiaWxpdMOpIHDDqW5hbGUgZHUgcHLDqXNpZGVudCBkZSBsYSByw6lwdWJsaXF1ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeL2xlY3R1cmUvJFwiLFxuICAgICAge1xuICAgICAgICBsZWN0dXJlOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVQT1QvKT8oL1JFQ0JVUkVBVS8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiUHJvcG9zaXRpb24gZGUgbG9pIHByw6lzZW50w6llIGVuIGFwcGxpY2F0aW9uIGRlIGwnYXJ0aWNsZSAxMSBkZSBsYSBDb25zdGl0dXRpb25cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXi9sZWN0dXJlLyRcIixcbiAgICAgIHtcbiAgICAgICAgbGVjdHVyZTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFUE9ULyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gIH0pXG5cbiAgY29uc3RydWN0b3Ioc2FuaXR5Q2hlY2tzOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlXG4gICAgdGhpcy5zYW5pdHlDaGVja3MgPSBzYW5pdHlDaGVja3NcbiAgICB0aGlzLnByb2NlZHVyZXMgPSB7fVxuICAgIHRoaXMuY29kZTJwYXR0ZXJuLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgd2Fsa0ZpbGVzKGRhdGE6IHN0cmluZ1tdLCBhY3Rpb246IGFueSkge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBnZXRGaWxlcyhkYXRhKSkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGxvYWQoZmlsZSlcbiAgICAgIGxldCBwcm9jZWR1cmU6IHN0cmluZyA9IHRoaXMucmVtYXBQcm9jZWR1cmUoXG4gICAgICAgIGRvc3NpZXIucHJvY2VkdXJlUGFybGVtZW50YWlyZS5saWJlbGxlLFxuICAgICAgKVxuICAgICAgaWYgKCEocHJvY2VkdXJlIGluIHRoaXMucHJvY2VkdXJlcykpIHRoaXMucHJvY2VkdXJlc1twcm9jZWR1cmVdID0ge31cbiAgICAgIGFjdGlvbihcbiAgICAgICAgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0sXG4gICAgICAgIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyxcbiAgICAgICAgdGhpcy5jb2RlMnBhdHRlcm5bcHJvY2VkdXJlXSxcbiAgICAgICAgbnVsbCxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0RmlsZXMoZGF0YTogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhbGtGaWxlcyhcbiAgICAgIGRhdGEsXG4gICAgICAoX2FjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgX2MycDogYW55LCBfcGFyZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIHByb2Nlc3NGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm1lcmdlKGFjdGVzLCBhY3Rlc0xlZ2lzbGF0aWZzLCBjMnAsIHBhcmVudClcbiAgICAgIH0sXG4gICAgKVxuICAgIGlmICh0aGlzLnNhbml0eUNoZWNrcykgdGhpcy52YWxpZGF0ZSgpXG4gIH1cblxuICByZW1hcEFjdGVzKGFjdGVzOiBhbnkpOiBhbnkge1xuICAgIGxldCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgYWN0ZXMpIHtcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5yZW1hcChhY3RlKVxuXG4gICAgICAvLyBDQy1TQUlTSUUtIHN1ZmZpeCBkb2VzIG5vdCBpbXBseSBhIGhpZXJhcmNoeVxuICAgICAgYWN0ZS5jb2RlQWN0ZSA9IGFjdGUuY29kZUFjdGUucmVwbGFjZSgvXkNDLVNBSVNJRS4qLywgXCJDQy1TQUlTSUVcIilcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBjb2xsZWN0QWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLmNvbGxlY3QoYWN0ZSlcblxuICAgICAgcmVzdWx0cy5wdXNoKGFjdGUpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICByZW1hcFByb2NlZHVyZShwcm9jZWR1cmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWVyZ2VfcHJvY2VkdXJlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoW1xuICAgICAgW1wiUHJvcG9zaXRpb24gZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1wiUHJvamV0IGRlIGxvaSBvcmRpbmFpcmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgcmF0aWZpY2F0aW9uIGRlcyB0cmFpdMOpcyBldCBjb252ZW50aW9uc1wiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgICAgW1wiUHJvamV0IG91IHByb3Bvc2l0aW9uIGRlIGxvaSBvcmdhbmlxdWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIGNvbnN0aXR1dGlvbm5lbGxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIGRlIGwnYW5uw6llXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VzIHJlY3RpZmljYXRpdmVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcbiAgICAgICAgXCJQcm9qZXQgZGUgbG9pIGRlIGZpbmFuY2VtZW50IGRlIGxhIHPDqWN1cml0w6kgc29jaWFsZVwiLFxuICAgICAgICBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIsXG4gICAgICBdLFxuICAgIF0pXG4gICAgaWYgKG1lcmdlX3Byb2NlZHVyZXMuaGFzKHByb2NlZHVyZSkpIHtcbiAgICAgIHRoaXMucmVtYXBwZWRQcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSBudWxsXG4gICAgICByZXR1cm4gbWVyZ2VfcHJvY2VkdXJlcy5nZXQocHJvY2VkdXJlKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlXG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBjb2RlQWN0ZXMgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHJlZ2V4cFxuICBvcmRlcmVkQ29kZXMoY29kZXM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGNvZGVzID0gbmV3IFNldChjb2RlcylcbiAgICBpZiAoIXRoaXMuc2FuaXR5Q2hlY2tzKSByZXR1cm4gY29kZXNcbiAgICBsZXQgb3JkZXJlZCA9IGMycFtcIl9wYXR0ZXJuX1wiXS5tYXRjaChuZXcgUmVnRXhwKFwiLy4qPy9cIiwgXCJnXCIpKVxuICAgIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiB4LnJlcGxhY2UobmV3IFJlZ0V4cChcIi8oLiopL1wiKSwgXCIkMVwiKSlcbiAgICBpZiAocGFyZW50ICE9IG51bGwpIG9yZGVyZWQgPSBvcmRlcmVkLm1hcCgoeDogc3RyaW5nKSA9PiBgJHtwYXJlbnR9LSR7eH1gKVxuICAgIG9yZGVyZWQgPSBuZXcgU2V0KG9yZGVyZWQpXG4gICAgYXNzZXJ0KGVxU2V0KG9yZGVyZWQsIGNvZGVzKSwgYCR7Wy4uLm9yZGVyZWRdfSAhPSAke1suLi5jb2Rlc119YClcbiAgICByZXR1cm4gb3JkZXJlZFxuICB9XG5cbiAgdmFsaWRhdGVDaHJvbm9sb2d5KGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcGF0dGVybiA9IGMycFtcIl9wYXR0ZXJuX1wiXVxuICAgIGNvbnN0IHNlcXVlbmNlID0gYWN0ZXNMZWdpc2xhdGlmc1xuICAgICAgLm1hcCgoeDogYW55KSA9PiBgLyR7eC5jb2RlQWN0ZX0vYC5yZXBsYWNlKGAvJHtwYXJlbnR9LWAsIFwiL1wiKSlcbiAgICAgIC5qb2luKFwiXCIpXG4gICAgYXNzZXJ0KFxuICAgICAgc2VxdWVuY2UubWF0Y2gobmV3IFJlZ0V4cChwYXR0ZXJuKSksXG4gICAgICBgJHtwYXR0ZXJufSBkb2VzIG5vdCBtYXRjaCAke3NlcXVlbmNlfWAsXG4gICAgKVxuICAgIGMycC5fbWF0Y2hfY291bnRfKytcbiAgfVxuXG4gIG1lcmdlQWN0ZShhY3RlczogYW55LCBhY3RlOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBjb2RlOiBzdHJpbmcgPSBhY3RlLmNvZGVBY3RlXG4gICAgbGV0IHNob3J0Q29kZTogc3RyaW5nID0gY29kZS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke3BhcmVudH0tYCksIFwiXCIpXG4gICAgc2hvcnRDb2RlID0gc2hvcnRDb2RlLnJlcGxhY2UoLy0oQU58U04pJC8sIFwiXCIpXG4gICAgdGhpcy5jb2Rlc1tzaG9ydENvZGVdID0gbnVsbFxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZVxuICAgIGlmICghKGNvZGUgaW4gYWN0ZXMpKSB7XG4gICAgICBhY3Rlc1tjb2RlXSA9IHtcbiAgICAgICAgdHlwZTogYWN0ZS54c2lUeXBlLFxuICAgICAgICBuYW1lOiBuZXcgU2V0KFtuYW1lXSksXG4gICAgICAgIHNob3J0Q29kZTogc2hvcnRDb2RlLFxuICAgICAgICBhY3Rlczoge30sXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGVzW2NvZGVdLm5hbWUuYWRkKG5hbWUpXG4gICAgfVxuICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKVxuICAgICAgdGhpcy5tZXJnZShhY3Rlc1tjb2RlXS5hY3RlcywgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzLCBjMnBbY29kZV0sIGNvZGUpXG4gIH1cblxuICBtZXJnZShhY3RlczogYW55LCBhY3Rlc0xlZ2lzbGF0aWZzOiBhbnksIGMycDogYW55LCBwYXJlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGwgPSB0aGlzLnJlbWFwQWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICB0aGlzLnZhbGlkYXRlQ2hyb25vbG9neShsLCBjMnAsIHBhcmVudClcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgbCkgdGhpcy5tZXJnZUFjdGUoYWN0ZXMsIGFjdGUsIGMycCwgcGFyZW50KVxuICB9XG5cbiAgY29sbGVjdChhY3Rlc0xlZ2lzbGF0aWZzOiBhbnkpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGFjdGUgb2YgdGhpcy5jb2xsZWN0QWN0ZXMoYWN0ZXNMZWdpc2xhdGlmcykpXG4gICAgICBpZiAoXCJhY3Rlc0xlZ2lzbGF0aWZzXCIgaW4gYWN0ZSkgdGhpcy5jb2xsZWN0KGFjdGUuYWN0ZXNMZWdpc2xhdGlmcylcbiAgfVxuXG4gIHZhbGlkYXRlTGV2ZWwoYzJwOiBhbnksIHBhdGg6IGFueSkge1xuICAgIGFzc2VydChjMnAuX21hdGNoX2NvdW50XyA+IDAsIGAke3BhdGh9IGlzIG5ldmVyIHVzZWRgKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGMycCkgYXMgW3N0cmluZywgYW55XVtdKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwiQ29kZTJQYXR0ZXJuXCIpXG4gICAgICAgIHRoaXMudmFsaWRhdGVMZXZlbCh2YWx1ZSwgcGF0aC5jb25jYXQoW2tleV0pKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIHRoaXMudmFsaWRhdGVMZXZlbCh0aGlzLmNvZGUycGF0dGVybiwgW10pXG4gIH1cblxuICBwcmludEVudHJ5KHNlY3Rpb25zOiBzdHJpbmcsIGVudHJ5OiBzdHJpbmcsIGNvZGVzOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0aXRsZSA9IGBcXGAke2VudHJ5fVxcYF9fYFxuICAgIGNvbnNvbGUubG9nKHRpdGxlKVxuICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKHNlY3Rpb25zWzBdKVxuICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICBjb25zb2xlLmxvZyhjb2RlcylcbiAgfVxuXG4gIGFkZEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIGlmICh0aGlzLmxlY3R1cmVNYXBwZXIuaGFzKGtleSkpXG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIubWVyZ2VDb2Rlcyh0aGlzLmFuY2hvcnMsIGtleSlcbiAgICBlbHNlIHRoaXMuYW5jaG9ycy5hZGQoa2V5KVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm5cbiAgICB0aGlzLmFuY2hvcnNQcmludGVkW2tleV0gPSBudWxsXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgdGhpcy5sZWN0dXJlTWFwcGVyLnByaW50QW5jaG9ycyhrZXkpXG4gICAgZWxzZSBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoa2V5OiBzdHJpbmcsIHNob3J0Q29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmFuY2hvcnNQcmludGVkKSByZXR1cm4gYGNmIFxcXFwqJHtzaG9ydENvZGV9XFxcXCpgXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSkgcmV0dXJuIHRoaXMubGVjdHVyZU1hcHBlci5nZXRDb2RlcyhrZXkpXG4gICAgZWxzZSByZXR1cm4ga2V5XG4gIH1cblxuICByZW5hbWVDTVAoa2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcIkNNUFwiKSkge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aChcIi1TTlwiKSkgcmV0dXJuIGAke25hbWV9IChTw6luYXQpYFxuICAgICAgZWxzZSBpZiAoa2V5LmVuZHNXaXRoKFwiLUFOXCIpKSByZXR1cm4gYCR7bmFtZX0gKEFzc2VtYmzDqWUgTmF0aW9uYWxlKWBcbiAgICAgIGVsc2UgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2UgcmV0dXJuIG5hbWVcbiAgfVxuXG4gIHByaW50TGV2ZWwoYWN0ZXM6IGFueSwgc2VjdGlvbnM6IHN0cmluZywgYzJwOiBhbnksIHBhcmVudDogYW55KSB7XG4gICAgY29uc3Qga2V5czogU2V0PHN0cmluZz4gPSB0aGlzLm9yZGVyZWRDb2RlcyhPYmplY3Qua2V5cyhhY3RlcyksIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYWN0ZXNba2V5XVxuICAgICAgbGV0IG5hbWUgPSBBcnJheS5mcm9tKHZhbHVlLm5hbWUpLmpvaW4oXCIsIFwiKVxuICAgICAgbmFtZSA9IHRoaXMucmVuYW1lQ01QKGtleSwgbmFtZSlcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5nZXRDb2RlcyhrZXksIHZhbHVlLnNob3J0Q29kZSlcbiAgICAgIHRoaXMuYWRkQW5jaG9ycyhrZXkpXG4gICAgICB0aGlzLnByaW50QW5jaG9ycyhrZXkpXG4gICAgICBjb25zb2xlLmxvZyhcIlwiKVxuICAgICAgdGhpcy5wcmludEVudHJ5KHNlY3Rpb25zLCBgJHtuYW1lfSA8JHt2YWx1ZS5zaG9ydENvZGV9VE9DXz5gLCBjb2RlcylcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUuYWN0ZXMpLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMucHJpbnRMZXZlbCh2YWx1ZS5hY3Rlcywgc2VjdGlvbnMuc3Vic3RyaW5nKDEpLCBjMnBba2V5XSwga2V5KVxuICAgIH1cbiAgfVxuXG4gIHByaW50Q29kZXMoKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jb2RlcykpXG4gICAgICBjb25zb2xlLmxvZyhgLi4gXyR7a2V5fVRPQzogaHR0cDovL2ApXG4gIH1cblxuICBwcmludEFuY2hvcnNJbmRleCgpIHtcbiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgQXJyYXkuZnJvbSh0aGlzLmFuY2hvcnMpKVxuICAgICAgY29uc29sZS5sb2coYCogOnJlZjpcXGAke2NvZGV9IDwke2NvZGV9PlxcYGApXG4gIH1cblxuICBnZXRBZ2dyZWdhdGVkKHByb2NlZHVyZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2NlZHVyZSA9PSBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCIpIHtcbiAgICAgIGNvbnN0IHJlbWFwcGVkID0gT2JqZWN0LmtleXModGhpcy5yZW1hcHBlZFByb2NlZHVyZXMpLmpvaW4oXCIsIFwiKVxuICAgICAgcmV0dXJuIGAgKGFncsOpZ2F0aW9uIGRlICR7cmVtYXBwZWR9KWBcbiAgICB9IGVsc2UgcmV0dXJuIFwiXCJcbiAgfVxuXG4gIHByaW50KCk6IHZvaWQge1xuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWQgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgYWN0ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2VkdXJlcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgYW55LFxuICAgIF1bXSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5yZXBsYWNlKC8gKy9nLCBcIl9cIilcbiAgICAgIHRoaXMuY29kZXNbY29kZV0gPSBudWxsXG4gICAgICBjb25zdCBhZ2dyZWdhdGVkID0gdGhpcy5nZXRBZ2dyZWdhdGVkKGtleSlcbiAgICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7a2V5fSA8JHtjb2RlfVRPQ18+XFxgX18ke2FnZ3JlZ2F0ZWR9YFxuICAgICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgICBjb25zdCB1bmRlcmxpbmUgPSBuZXcgQXJyYXkodGl0bGUubGVuZ3RoICsgMSkuam9pbihcIj1cIilcbiAgICAgIGNvbnNvbGUubG9nKHVuZGVybGluZSlcbiAgICAgIHRoaXMucHJpbnRMZXZlbChhY3RlcywgXCItfi4nXCIsIHRoaXMuY29kZTJwYXR0ZXJuW2tleV0sIG51bGwpXG4gICAgfVxuICAgIHRoaXMucHJpbnRDb2RlcygpXG4gICAgdGhpcy5wcmludEFuY2hvcnNJbmRleCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBsZXQgZG9jID0gbmV3IEFjdGVzRG9jdW1lbnRhdGlvbihcbiAgICAhb3B0aW9uc1tcIm5vLXNhbml0eS1jaGVja3NcIl0sXG4gICAgb3B0aW9ucy52ZXJib3NlLFxuICApXG4gIGRvYy5jb2xsZWN0RmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJvY2Vzc0ZpbGVzKG9wdGlvbnMuZGF0YSlcbiAgZG9jLnByaW50KClcbiAgcmV0dXJuIDBcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwiZG9jdW1lbnRfZG9zc2llcnNfbGVnaXNsYXRpZnMudHNcIikpXG4gIHByb2Nlc3MuZXhpdChtYWluKHByb2Nlc3MuYXJndikpXG4iXX0=
792
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2RvY3VtZW50X2Rvc3NpZXJzX2xlZ2lzbGF0aWZzLnRzIl0sIm5hbWVzIjpbInBhcnNlQXJncyIsImFyZ3YiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJkZXNjcmlwdGlvbiIsImRlZmF1bHRPcHRpb24iLCJtdWx0aXBsZSIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsInNlY3Rpb25zIiwiaGVhZGVyIiwiY29udGVudCIsIm9wdGlvbkxpc3QiLCJvcHRpb25zIiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInVzYWdlIiwid2FybiIsImVxU2V0IiwiYXMiLCJicyIsInNpemUiLCJhIiwiaGFzIiwiQ29kZTJQYXR0ZXJuIiwicGF0dGVybiIsImNoaWxkcmVuIiwiX3BhdHRlcm5fIiwiX21hdGNoX2NvdW50XyIsIk9iamVjdCIsImFzc2lnbiIsIkNvZGUyUGF0dGVybkNvbUZvbmQiLCJMZWN0dXJlTWFwcGluZyIsIlNldCIsImFjdGUiLCJjb2RlcyIsImFkZCIsImNvZGVBY3RlIiwiZ2V0VHlwZSIsImxpYmVsbGVBY3RlIiwibm9tQ2Fub25pcXVlIiwibGliZWxsZSIsInR5cGVzIiwiQXJyYXkiLCJmcm9tIiwiYyIsImNvZGUiLCJsb2ciLCJqb2luIiwibWF0Y2giLCJjb2Rlc19sZWN0dXJlX3JlZ2V4cCIsIkVycm9yIiwicmVwbGFjZSIsImlzTGVjdHVyZSIsIm1hcCIsIlJlZ0V4cCIsImNvZGVzX2xlY3R1cmUiLCJMZWN0dXJlTWFwcGVyIiwibWFwcGluZyIsImdldENvZGVBY3RlIiwidW5kZWZpbmVkIiwibGVjdHVyZXMiLCJyZW1hcCIsIm1lcmdlQ29kZXMiLCJwcmludEFuY2hvcnMiLCJnZXRDb2RlcyIsIkFjdGVzRG9jdW1lbnRhdGlvbiIsInNhbml0eUNoZWNrcyIsInZlcmJvc2UiLCJsZWN0dXJlIiwiQ01QIiwiQ0MiLCJQUk9NIiwiQU4yMSIsIkFOTFVOSSIsIlLDqXNvbHV0aW9uIiwiQU4yMCIsIkVVIiwiSW1tdW5pdMOpIiwicHJvY2VkdXJlcyIsImNvZGUycGF0dGVybiIsImRhdGEiLCJhY3Rpb24iLCJmaWxlIiwiZG9zc2llciIsInByb2NlZHVyZSIsInJlbWFwUHJvY2VkdXJlIiwicHJvY2VkdXJlUGFybGVtZW50YWlyZSIsImFjdGVzTGVnaXNsYXRpZnMiLCJ3YWxrRmlsZXMiLCJfYWN0ZXMiLCJfYzJwIiwiX3BhcmVudCIsImNvbGxlY3QiLCJhY3RlcyIsImMycCIsInBhcmVudCIsIm1lcmdlIiwidmFsaWRhdGUiLCJyZXN1bHRzIiwibGVjdHVyZU1hcHBlciIsInB1c2giLCJtZXJnZV9wcm9jZWR1cmVzIiwiTWFwIiwicmVtYXBwZWRQcm9jZWR1cmVzIiwiZ2V0Iiwib3JkZXJlZCIsIngiLCJzZXF1ZW5jZSIsInNob3J0Q29kZSIsInhzaVR5cGUiLCJsIiwicmVtYXBBY3RlcyIsInZhbGlkYXRlQ2hyb25vbG9neSIsIm1lcmdlQWN0ZSIsImNvbGxlY3RBY3RlcyIsInBhdGgiLCJlbnRyaWVzIiwia2V5IiwidmFsdWUiLCJjb25zdHJ1Y3RvciIsInZhbGlkYXRlTGV2ZWwiLCJjb25jYXQiLCJlbnRyeSIsInRpdGxlIiwidW5kZXJsaW5lIiwibGVuZ3RoIiwiYW5jaG9yc1ByaW50ZWQiLCJhbmNob3JzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwia2V5cyIsIm9yZGVyZWRDb2RlcyIsInJlbmFtZUNNUCIsImFkZEFuY2hvcnMiLCJwcmludEVudHJ5IiwicHJpbnRMZXZlbCIsInN1YnN0cmluZyIsInJlbWFwcGVkIiwiYWdncmVnYXRlZCIsImdldEFnZ3JlZ2F0ZWQiLCJwcmludENvZGVzIiwicHJpbnRBbmNob3JzSW5kZXgiLCJtYWluIiwiZG9jIiwiY29sbGVjdEZpbGVzIiwicHJvY2Vzc0ZpbGVzIiwicHJpbnQiLCJwcm9jZXNzIiwiZXhpdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QTRCOUUsSUFBNUIsQ0FBaUMsR0FBakMsQ0FBbEI7QUFDQW5DLFVBQUFBLE9BQU8sQ0FBQ2tDLEdBQVIsQ0FBWThFLFNBQVo7QUFDQSxlQUFLVyxVQUFMLENBQWdCMUMsS0FBaEIsRUFBdUIsTUFBdkIsRUFBK0IsS0FBS2QsWUFBTCxDQUFrQnNDLEdBQWxCLENBQS9CLEVBQXVELElBQXZEO0FBQ0Q7QUFkVztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQWVaLFdBQUt1QixVQUFMO0FBQ0EsV0FBS0MsaUJBQUw7QUFDRDs7Ozs7O0FBR0gsU0FBU0MsSUFBVCxDQUFjaEosSUFBZCxFQUFpQztBQUMvQixNQUFNYSxPQUFPLEdBQUdkLFNBQVMsQ0FBQ0MsSUFBRCxDQUF6QjtBQUNBLE1BQUlhLE9BQU8sS0FBSyxJQUFoQixFQUFzQixPQUFPLENBQVA7QUFDdEIsTUFBSW9JLEdBQUcsR0FBRyxJQUFJOUUsa0JBQUosQ0FDUixDQUFDdEQsT0FBTyxDQUFDLGtCQUFELENBREEsRUFFUkEsT0FBTyxDQUFDd0QsT0FGQSxDQUFWO0FBSUE0RSxFQUFBQSxHQUFHLENBQUNDLFlBQUosQ0FBaUJySSxPQUFPLENBQUNxRSxJQUF6QjtBQUNBK0QsRUFBQUEsR0FBRyxDQUFDRSxZQUFKLENBQWlCdEksT0FBTyxDQUFDcUUsSUFBekI7QUFDQStELEVBQUFBLEdBQUcsQ0FBQ0csS0FBSjtBQUNBLFNBQU8sQ0FBUDtBQUNEO0FBRUQ7OztBQUNBLElBQUlDLE9BQU8sQ0FBQ3JKLElBQVIsQ0FBYSxDQUFiLEVBQWdCbUksUUFBaEIsQ0FBeUIsa0NBQXpCLENBQUosRUFDRWtCLE9BQU8sQ0FBQ0MsSUFBUixDQUFhTixJQUFJLENBQUNLLE9BQU8sQ0FBQ3JKLElBQVQsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgY29tbWFuZExpbmVVc2FnZSBmcm9tIFwiY29tbWFuZC1saW5lLXVzYWdlXCJcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBsb2FkLCBnZXRGaWxlcyB9IGZyb20gXCIuLi9maWxlX3N5c3RlbXNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwicGF0aG5hbWUgdG8gYSBKU09OIGZpbGUgb3IgYSBnbG9iIHBhdHRlcm4gdG8gSlNPTiBmaWxlc1wiLFxuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgbmFtZTogXCJkYXRhXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm5vLXNhbml0eS1jaGVja3NcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJEbyBub3QgcGVyZm9ybSBzYW5pdHkgY2hlY2tzLlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVzY3JpcHRpb246IFwiaW5jcmVhc2UgdmVyYm9zaXR5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQWlkZSDDoCBsYSBkb2N1bWVudGF0aW9uIGR1IGRvc3NpZXIgbMOpZ2lzbGF0aWZcIixcbiAgICAgIGNvbnRlbnQ6IFwiR8OpbsOocmUgdW5lIGhpw6lyYXJjaGllIGRlcyBhY3RlcyBsw6lnaXNsYXRpZnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlYWRlcjogXCJPcHRpb25zXCIsXG4gICAgICBvcHRpb25MaXN0OiBvcHRpb25zRGVmaW5pdGlvbnMsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG4gIGlmICghKFwiaGVscFwiIGluIG9wdGlvbnMpICYmICEoXCJkYXRhXCIgaW4gb3B0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiLS1kYXRhIGlzIG1hbmRhdG9yeVwiKVxuICAgIG9wdGlvbnMuaGVscCA9IHRydWVcbiAgfVxuICBpZiAoXCJoZWxwXCIgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IHVzYWdlID0gY29tbWFuZExpbmVVc2FnZShzZWN0aW9ucylcbiAgICBjb25zb2xlLndhcm4odXNhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBlcVNldChhczogU2V0PHN0cmluZz4sIGJzOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICBpZiAoYXMuc2l6ZSAhPT0gYnMuc2l6ZSkgcmV0dXJuIGZhbHNlXG4gIGZvciAodmFyIGEgb2YgYXMpIGlmICghYnMuaGFzKGEpKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIHRydWVcbn1cblxuY2xhc3MgQ29kZTJQYXR0ZXJuIHtcbiAgX3BhdHRlcm5fOiBhbnlcbiAgX21hdGNoX2NvdW50XzogbnVtYmVyXG4gIGNvbnN0cnVjdG9yKHBhdHRlcm46IGFueSwgY2hpbGRyZW46IGFueSkge1xuICAgIHRoaXMuX3BhdHRlcm5fID0gcGF0dGVyblxuICAgIHRoaXMuX21hdGNoX2NvdW50XyA9IDBcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNoaWxkcmVuKVxuICB9XG59XG5cbmNsYXNzIENvZGUyUGF0dGVybkNvbUZvbmQgZXh0ZW5kcyBDb2RlMlBhdHRlcm4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIl4vU0FJU0lFLygvTk9NSU4vKSooL1JFVU5JT04vKSooL1JBUFBPUlQvKSokXCIsIHt9KVxuICB9XG59XG5cbmNsYXNzIExlY3R1cmVNYXBwaW5nIHtcbiAgbGliZWxsZTogYW55ID0ge31cbiAgY29kZXM6IGFueSA9IG5ldyBTZXQoKVxuXG4gIHN0YXRpYyBjb2Rlc19sZWN0dXJlOiBzdHJpbmdbXSA9IFtcbiAgICBcIkFOMVwiLFxuICAgIFwiU04xXCIsXG4gICAgXCJBTk5MRUNcIixcbiAgICBcIlNOTkxFQ1wiLFxuICAgIFwiQU5MREVGXCIsXG4gICAgXCJBTjJcIixcbiAgICBcIlNOMlwiLFxuICAgIFwiU04zXCIsXG4gIF1cbiAgc3RhdGljIGNvZGVzX2xlY3R1cmVfcmVnZXhwOiBhbnkgPSBuZXcgUmVnRXhwKFxuICAgIFwiXig/OlwiICsgTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZS5qb2luKFwifFwiKSArIFwiKSgtLiopPyRcIixcbiAgKVxuXG4gIHN0YXRpYyBpc0xlY3R1cmUoYWN0ZTogYW55KSB7XG4gICAgcmV0dXJuIGFjdGUuY29kZUFjdGUubWF0Y2goTGVjdHVyZU1hcHBpbmcuY29kZXNfbGVjdHVyZV9yZWdleHApXG4gIH1cblxuICBzdGF0aWMgZ2V0VHlwZShhY3RlOiBhbnkpIHtcbiAgICBpZiAoYWN0ZS5jb2RlQWN0ZS5tYXRjaCgvXkFOLykpIHJldHVybiBcIkFOXCJcbiAgICBlbHNlIGlmIChhY3RlLmNvZGVBY3RlLm1hdGNoKC9eU04vKSkgcmV0dXJuIFwiU05cIlxuICAgIGVsc2UgdGhyb3cgRXJyb3IoYCR7YWN0ZS5jb2RlQWN0ZX0gZG9lcyBub3Qgc3RhcnQgd2l0aCBBTiBvciBTTmApXG4gIH1cblxuICBzdGF0aWMgbWFwKGNvZGVBY3RlOiBhbnkpIHtcbiAgICByZXR1cm4gY29kZUFjdGUucmVwbGFjZShMZWN0dXJlTWFwcGluZy5jb2Rlc19sZWN0dXJlX3JlZ2V4cCwgYGxlY3R1cmUkMWApXG4gIH1cblxuICBzdGF0aWMgZ2V0Q29kZUFjdGUoYWN0ZTogYW55KSB7XG4gICAgaWYgKCFMZWN0dXJlTWFwcGluZy5pc0xlY3R1cmUoYWN0ZSkpIHJldHVyblxuXG4gICAgcmV0dXJuIExlY3R1cmVNYXBwaW5nLm1hcChhY3RlLmNvZGVBY3RlKVxuICB9XG5cbiAgYWRkKGFjdGU6IGFueSkge1xuICAgIHRoaXMuY29kZXMuYWRkKGFjdGUuY29kZUFjdGUpXG5cbiAgICBjb25zdCB0eXBlID0gTGVjdHVyZU1hcHBpbmcuZ2V0VHlwZShhY3RlKVxuXG4gICAgaWYgKCEoYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWUgaW4gdGhpcy5saWJlbGxlKSlcbiAgICAgIHRoaXMubGliZWxsZVthY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZV0gPSBuZXcgU2V0KClcbiAgICB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdLmFkZCh0eXBlKVxuICB9XG5cbiAgcmVtYXAoYWN0ZTogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgYWN0ZS5jb2RlQWN0ZSA9IGNvZGVBY3RlXG5cbiAgICBsZXQgdHlwZXMgPSB0aGlzLmxpYmVsbGVbYWN0ZS5saWJlbGxlQWN0ZS5ub21DYW5vbmlxdWVdXG4gICAgaWYgKCEodHlwZXMuaGFzKFwiU05cIikgJiYgdHlwZXMuaGFzKFwiQU5cIikpKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKFwiU05cIikpIGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlICs9IFwiIChTw6luYXQpXCJcbiAgICAgIGVsc2UgaWYgKHR5cGVzLmhhcyhcIkFOXCIpKVxuICAgICAgICBhY3RlLmxpYmVsbGVBY3RlLm5vbUNhbm9uaXF1ZSArPSBcIiAoQXNzZW1ibMOpZSBOYXRpb25hbGUpXCJcbiAgICB9XG4gIH1cblxuICBtZXJnZUNvZGVzKGNvZGVzOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgQXJyYXkuZnJvbSh0aGlzLmNvZGVzKSkgY29kZXMuYWRkKGMpXG4gIH1cblxuICBwcmludEFuY2hvcnMoKSB7XG4gICAgZm9yIChjb25zdCBjb2RlIG9mIEFycmF5LmZyb20odGhpcy5jb2RlcykpIGNvbnNvbGUubG9nKGAuLiBfJHtjb2RlfTpgKVxuICB9XG5cbiAgZ2V0Q29kZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb2Rlcykuam9pbihcIixcIilcbiAgfVxufVxuXG5jbGFzcyBMZWN0dXJlTWFwcGVyIHtcbiAgbWFwcGluZzogYW55ID0ge31cblxuICBoYXMoY29kZUFjdGU6IHN0cmluZykge1xuICAgIHJldHVybiBjb2RlQWN0ZSBpbiB0aGlzLm1hcHBpbmdcbiAgfVxuXG4gIGNvbGxlY3QoYWN0ZTogYW55KSB7XG4gICAgY29uc3QgY29kZUFjdGUgPSBMZWN0dXJlTWFwcGluZy5nZXRDb2RlQWN0ZShhY3RlKVxuICAgIGlmIChjb2RlQWN0ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBsZWN0dXJlcyA9IHRoaXMubWFwcGluZ1xuICAgICAgaWYgKCEoY29kZUFjdGUgaW4gbGVjdHVyZXMpKSBsZWN0dXJlc1tjb2RlQWN0ZV0gPSBuZXcgTGVjdHVyZU1hcHBpbmcoKVxuICAgICAgbGVjdHVyZXNbY29kZUFjdGVdLmFkZChhY3RlKVxuICAgIH1cbiAgfVxuXG4gIHJlbWFwKGFjdGU6IGFueSkge1xuICAgIGNvbnN0IGNvZGVBY3RlID0gTGVjdHVyZU1hcHBpbmcuZ2V0Q29kZUFjdGUoYWN0ZSlcbiAgICBpZiAoY29kZUFjdGUgIT0gdW5kZWZpbmVkKSB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnJlbWFwKGFjdGUsIGNvZGVBY3RlKVxuICB9XG5cbiAgbWVyZ2VDb2Rlcyhjb2RlczogYW55LCBjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXBwaW5nW2NvZGVBY3RlXS5tZXJnZUNvZGVzKGNvZGVzKVxuICB9XG5cbiAgcHJpbnRBbmNob3JzKGNvZGVBY3RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1hcHBpbmdbY29kZUFjdGVdLnByaW50QW5jaG9ycygpXG4gIH1cblxuICBnZXRDb2Rlcyhjb2RlQWN0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGluZ1tjb2RlQWN0ZV0uZ2V0Q29kZXMoKVxuICB9XG59XG5cbmNsYXNzIEFjdGVzRG9jdW1lbnRhdGlvbiB7XG4gIHZlcmJvc2U6IGJvb2xlYW5cbiAgc2FuaXR5Q2hlY2tzOiBib29sZWFuXG4gIGxlY3R1cmVNYXBwZXI6IGFueSA9IG5ldyBMZWN0dXJlTWFwcGVyKClcbiAgcmVtYXBwZWRQcm9jZWR1cmVzOiBhbnkgPSB7fVxuICBhbmNob3JzUHJpbnRlZDogYW55ID0ge31cbiAgYW5jaG9yczogYW55ID0gbmV3IFNldCgpXG4gIGNvZGVzOiBhbnkgPSB7fVxuICBwcm9jZWR1cmVzOiBhbnkgPSBudWxsXG4gIGNvZGUycGF0dGVybjogYW55ID0gbmV3IENvZGUyUGF0dGVybihudWxsLCB7XG4gICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgXCJeKCgoL2xlY3R1cmUvKSspfCgoL2xlY3R1cmUvKSsvQ01QLygvbGVjdHVyZS8pKikpKC9DQy8pPygvUFJPTS8pPygvQU4tQVBQTEkvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9ERVBPVC8pPygvRFBUTEVUVFJFQ1QvKT8oL0VUSS8pPygvQVZDRS8pPygvREdWVC8pPygvQUNJTi8pPygvTU9USU9OLykqKC9QUk9DQUNDLyk/KC9DT00vKT8oKC9ERUJBVFMvKSspPygvUlRSSU5JLyk/JFwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwibGVjdHVyZS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvfC9BVklTLykrJFwiLCB7XG4gICAgICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgICAgICBcImxlY3R1cmUtQ09NLUFWSVNcIjogbmV3IENvZGUyUGF0dGVybkNvbUZvbmQoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJsZWN0dXJlLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgICBcIl4oL1NFQU5DRS8pKigoL01PVElPTi8pPygvTU9USU9OLVZPVEUvKSspPygvREVDLyk/JFwiLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgQ01QOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvREVQT1QvfC9TQUlTSUUvKXsxLDJ9KC9DT00vKT8oL0RFQy8pPygvREVCQVRTLUFOLy9ERUJBVFMtU04vKT9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkNNUC1DT01cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgICAgXCJeKC9OT01JTi8pPygvUkFQUE9SVC1BTi98L1JBUFBPUlQtU04vKXsyfSRcIixcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLUFOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgICAgXCJDTVAtREVCQVRTLVNOXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSooL0RFQy8pPyRcIiwge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICAgIENDOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0FJU0lFLykrKC9DT05DTFVTSU9OLyk/JFwiLCB7fSksXG4gICAgICAgIFBST006IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9QVUIvKT8kXCIsIHt9KSxcbiAgICAgICAgXCJBTi1BUFBMSVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvUkFQUE9SVC8pPyRcIiwge30pLFxuICAgICAgfSxcbiAgICApLFxuICAgIFwiQWxsb2N1dGlvbiBkdSBQcsOpc2lkZW50IGRlIGwnQXNzZW1ibMOpZSBuYXRpb25hbGVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXi9BTjIxLyRcIixcbiAgICAgIHtcbiAgICAgICAgQU4yMTogbmV3IENvZGUyUGF0dGVybihcIl4oL0FQQU4vKT8kXCIsIHt9KSxcbiAgICAgIH0sXG4gICAgKSxcbiAgICBcIlLDqXNvbHV0aW9uIEFydGljbGUgMzQtMVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvREVCQVRTLyk/KC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktREVCQVRTXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TRUFOQ0UvKSsoL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgUsOpc29sdXRpb246IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9BTkxVTkkvKT8oL0NDLyk/JFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvfC9SVFJJTkkvKT8kXCIsIHtcbiAgICAgICAgXCJBTkxVTkktQ09NXCI6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9DQUUvKT8oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuQ29tRm9uZCgpLFxuICAgICAgICAgIFwiQU5MVU5JLUNPTS1DQUVcIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgICAgICAgIFwiXigvU0FJU0lFLyk/KC9OT01JTi8pPygvUkVVTklPTi8pPygvUkFQUE9SVC8pPygvREVDLyk/JFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLykqKC9ERUMvKT8kXCIsIHt9KSxcbiAgICAgIH0pLFxuICAgICAgQ0M6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9TQUlTSUUvKT8oL0NPTkNMVVNJT04vKT8kXCIsIHt9KSxcbiAgICB9KSxcbiAgICBcIlJhcHBvcnQgZCdpbmZvcm1hdGlvbiBzYW5zIG1pc3Npb25cIjogbmV3IENvZGUyUGF0dGVybihcbiAgICAgIFwiXigvQU4yMC8pPygvRVUvKT8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9SQVBQT1JULyk/JFwiLCB7fSksXG4gICAgICAgIEVVOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvREVDLykrJFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNaXNzaW9uIGQnaW5mb3JtYXRpb25cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0FOMjAvKT8kXCIsIHtcbiAgICAgIEFOMjA6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9NSVNJTkYvKT8kXCIsIHtcbiAgICAgICAgXCJBTjIwLU1JU0lORlwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgIFwiXigvQ1JFQS8pPygvTk9NSU4vKT8oL1JBUFBPUlQvKT8kXCIsXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgICB9KSxcbiAgICB9KSxcbiAgICBcIkNvbW1pc3Npb24gZCdlbnF1w6p0ZVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU4yMC8pPyRcIiwge1xuICAgICAgQU4yMDogbmV3IENvZGUyUGF0dGVybihcIl4oL0NPTUVOUS8pPyRcIiwge1xuICAgICAgICBcIkFOMjAtQ09NRU5RXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICAgICAgXCJeKC9DUkVBLyk/KC9OT01JTi8pPygvUkFQUE9SVC8pPyRcIixcbiAgICAgICAgICB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICAgIFwiRW5nYWdlbWVudCBkZSBsYSByZXNwb25zYWJpbGl0w6kgZ291dmVybmVtZW50YWxlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vQU4yMS8kXCIsXG4gICAgICB7XG4gICAgICAgIEFOMjE6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKCgoL01PVElPTi8pKi9ERUJBVFMvKXwoL0RHVlQvKSl7MSwyfSRcIiwge1xuICAgICAgICAgIFwiQU4yMS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL1NFQU5DRS8pKigvTU9USU9OLVZPVEUvKSokXCIsIHt9KSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJNb3Rpb24gcsOpZsOpcmVuZGFpcmVcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL2xlY3R1cmUvKSskXCIsIHtcbiAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8kXCIsIHtcbiAgICAgICAgXCJsZWN0dXJlLUNPTVwiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvRk9ORC8pPyRcIiwge1xuICAgICAgICAgIFwibGVjdHVyZS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwibGVjdHVyZS1ERUJBVFNcIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFQy8pPyRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgSW1tdW5pdMOpOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvQU5MVU5JLykrJFwiLCB7XG4gICAgICBBTkxVTkk6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvQ09NLyk/KC9ERUJBVFMvKT8oL1JUUklOSS8pPyRcIiwge1xuICAgICAgICBcIkFOTFVOSS1DT01cIjogbmV3IENvZGUyUGF0dGVybihcIl4oL0ZPTkQvKT8kXCIsIHtcbiAgICAgICAgICBcIkFOTFVOSS1DT00tRk9ORFwiOiBuZXcgQ29kZTJQYXR0ZXJuKFxuICAgICAgICAgICAgXCJeKC9TQUlTSUUvKT8oL05PTUlOLykqKC9SQVBQT1JULykqJFwiLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSksXG4gICAgICAgIFwiQU5MVU5JLURFQkFUU1wiOiBuZXcgQ29kZTJQYXR0ZXJuKFwiXigvU0VBTkNFLyk/KC9ERUMvKSRcIiwge30pLFxuICAgICAgfSksXG4gICAgfSksXG4gICAgXCJSZXNwb25zYWJpbGl0w6kgcMOpbmFsZSBkdSBwcsOpc2lkZW50IGRlIGxhIHLDqXB1YmxpcXVlXCI6IG5ldyBDb2RlMlBhdHRlcm4oXG4gICAgICBcIl4vbGVjdHVyZS8kXCIsXG4gICAgICB7XG4gICAgICAgIGxlY3R1cmU6IG5ldyBDb2RlMlBhdHRlcm4oXCJeKC9ERVBPVC8pPygvUkVDQlVSRUFVLyk/JFwiLCB7fSksXG4gICAgICB9LFxuICAgICksXG4gICAgXCJQcm9wb3NpdGlvbiBkZSBsb2kgcHLDqXNlbnTDqWUgZW4gYXBwbGljYXRpb24gZGUgbCdhcnRpY2xlIDExIGRlIGxhIENvbnN0aXR1dGlvblwiOlxuICAgICAgbmV3IENvZGUyUGF0dGVybihcIl4vbGVjdHVyZS8kXCIsIHtcbiAgICAgICAgbGVjdHVyZTogbmV3IENvZGUyUGF0dGVybihcIl4oL0RFUE9ULyk/JFwiLCB7fSksXG4gICAgICB9KSxcbiAgfSlcblxuICBjb25zdHJ1Y3RvcihzYW5pdHlDaGVja3M6IGJvb2xlYW4sIHZlcmJvc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMudmVyYm9zZSA9IHZlcmJvc2VcbiAgICB0aGlzLnNhbml0eUNoZWNrcyA9IHNhbml0eUNoZWNrc1xuICAgIHRoaXMucHJvY2VkdXJlcyA9IHt9XG4gICAgdGhpcy5jb2RlMnBhdHRlcm4uX21hdGNoX2NvdW50XysrXG4gIH1cblxuICB3YWxrRmlsZXMoZGF0YTogc3RyaW5nW10sIGFjdGlvbjogYW55KSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKGRhdGEpKSB7XG4gICAgICBjb25zdCBkb3NzaWVyID0gbG9hZChmaWxlKVxuICAgICAgbGV0IHByb2NlZHVyZTogc3RyaW5nID0gdGhpcy5yZW1hcFByb2NlZHVyZShcbiAgICAgICAgZG9zc2llci5wcm9jZWR1cmVQYXJsZW1lbnRhaXJlLmxpYmVsbGUsXG4gICAgICApXG4gICAgICBpZiAoIShwcm9jZWR1cmUgaW4gdGhpcy5wcm9jZWR1cmVzKSkgdGhpcy5wcm9jZWR1cmVzW3Byb2NlZHVyZV0gPSB7fVxuICAgICAgYWN0aW9uKFxuICAgICAgICB0aGlzLnByb2NlZHVyZXNbcHJvY2VkdXJlXSxcbiAgICAgICAgZG9zc2llci5hY3Rlc0xlZ2lzbGF0aWZzLFxuICAgICAgICB0aGlzLmNvZGUycGF0dGVybltwcm9jZWR1cmVdLFxuICAgICAgICBudWxsLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGNvbGxlY3RGaWxlcyhkYXRhOiBzdHJpbmdbXSkge1xuICAgIHRoaXMud2Fsa0ZpbGVzKFxuICAgICAgZGF0YSxcbiAgICAgIChfYWN0ZXM6IGFueSwgYWN0ZXNMZWdpc2xhdGlmczogYW55LCBfYzJwOiBhbnksIF9wYXJlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmNvbGxlY3QoYWN0ZXNMZWdpc2xhdGlmcylcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgcHJvY2Vzc0ZpbGVzKGRhdGE6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy53YWxrRmlsZXMoXG4gICAgICBkYXRhLFxuICAgICAgKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubWVyZ2UoYWN0ZXMsIGFjdGVzTGVnaXNsYXRpZnMsIGMycCwgcGFyZW50KVxuICAgICAgfSxcbiAgICApXG4gICAgaWYgKHRoaXMuc2FuaXR5Q2hlY2tzKSB0aGlzLnZhbGlkYXRlKClcbiAgfVxuXG4gIHJlbWFwQWN0ZXMoYWN0ZXM6IGFueSk6IGFueSB7XG4gICAgbGV0IHJlc3VsdHMgPSBbXVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBhY3Rlcykge1xuICAgICAgdGhpcy5sZWN0dXJlTWFwcGVyLnJlbWFwKGFjdGUpXG5cbiAgICAgIC8vIENDLVNBSVNJRS0gc3VmZml4IGRvZXMgbm90IGltcGx5IGEgaGllcmFyY2h5XG4gICAgICBhY3RlLmNvZGVBY3RlID0gYWN0ZS5jb2RlQWN0ZS5yZXBsYWNlKC9eQ0MtU0FJU0lFLiovLCBcIkNDLVNBSVNJRVwiKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIGNvbGxlY3RBY3RlcyhhY3RlczogYW55KTogYW55IHtcbiAgICBsZXQgcmVzdWx0cyA9IFtdXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGFjdGVzKSB7XG4gICAgICB0aGlzLmxlY3R1cmVNYXBwZXIuY29sbGVjdChhY3RlKVxuXG4gICAgICByZXN1bHRzLnB1c2goYWN0ZSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIHJlbWFwUHJvY2VkdXJlKHByb2NlZHVyZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXJnZV9wcm9jZWR1cmVzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcChbXG4gICAgICBbXCJQcm9wb3NpdGlvbiBkZSBsb2kgb3JkaW5haXJlXCIsIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIl0sXG4gICAgICBbXCJQcm9qZXQgZGUgbG9pIG9yZGluYWlyZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSByYXRpZmljYXRpb24gZGVzIHRyYWl0w6lzIGV0IGNvbnZlbnRpb25zXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgICBbXCJQcm9qZXQgb3UgcHJvcG9zaXRpb24gZGUgbG9pIG9yZ2FuaXF1ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBvdSBwcm9wb3NpdGlvbiBkZSBsb2kgY29uc3RpdHV0aW9ubmVsbGVcIixcbiAgICAgICAgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiLFxuICAgICAgXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgZGUgbCdhbm7DqWVcIiwgXCJQcm9jw6lkdXJlIGzDqWdpc2xhdGl2ZVwiXSxcbiAgICAgIFtcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZXMgcmVjdGlmaWNhdGl2ZVwiLCBcIlByb2PDqWR1cmUgbMOpZ2lzbGF0aXZlXCJdLFxuICAgICAgW1xuICAgICAgICBcIlByb2pldCBkZSBsb2kgZGUgZmluYW5jZW1lbnQgZGUgbGEgc8OpY3VyaXTDqSBzb2NpYWxlXCIsXG4gICAgICAgIFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIixcbiAgICAgIF0sXG4gICAgXSlcbiAgICBpZiAobWVyZ2VfcHJvY2VkdXJlcy5oYXMocHJvY2VkdXJlKSkge1xuICAgICAgdGhpcy5yZW1hcHBlZFByb2NlZHVyZXNbcHJvY2VkdXJlXSA9IG51bGxcbiAgICAgIHJldHVybiBtZXJnZV9wcm9jZWR1cmVzLmdldChwcm9jZWR1cmUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9jZWR1cmVcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm4gdGhlIGNvZGVBY3RlcyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgcmVnZXhwXG4gIG9yZGVyZWRDb2Rlcyhjb2RlczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29kZXMgPSBuZXcgU2V0KGNvZGVzKVxuICAgIGlmICghdGhpcy5zYW5pdHlDaGVja3MpIHJldHVybiBjb2Rlc1xuICAgIGxldCBvcmRlcmVkID0gYzJwW1wiX3BhdHRlcm5fXCJdLm1hdGNoKG5ldyBSZWdFeHAoXCIvLio/L1wiLCBcImdcIikpXG4gICAgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IHgucmVwbGFjZShuZXcgUmVnRXhwKFwiLyguKikvXCIpLCBcIiQxXCIpKVxuICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgb3JkZXJlZCA9IG9yZGVyZWQubWFwKCh4OiBzdHJpbmcpID0+IGAke3BhcmVudH0tJHt4fWApXG4gICAgb3JkZXJlZCA9IG5ldyBTZXQob3JkZXJlZClcbiAgICBhc3NlcnQoZXFTZXQob3JkZXJlZCwgY29kZXMpLCBgJHtbLi4ub3JkZXJlZF19ICE9ICR7Wy4uLmNvZGVzXX1gKVxuICAgIHJldHVybiBvcmRlcmVkXG4gIH1cblxuICB2YWxpZGF0ZUNocm9ub2xvZ3koYWN0ZXNMZWdpc2xhdGlmczogYW55LCBjMnA6IGFueSwgcGFyZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gYzJwW1wiX3BhdHRlcm5fXCJdXG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhY3Rlc0xlZ2lzbGF0aWZzXG4gICAgICAubWFwKCh4OiBhbnkpID0+IGAvJHt4LmNvZGVBY3RlfS9gLnJlcGxhY2UoYC8ke3BhcmVudH0tYCwgXCIvXCIpKVxuICAgICAgLmpvaW4oXCJcIilcbiAgICBhc3NlcnQoXG4gICAgICBzZXF1ZW5jZS5tYXRjaChuZXcgUmVnRXhwKHBhdHRlcm4pKSxcbiAgICAgIGAke3BhdHRlcm59IGRvZXMgbm90IG1hdGNoICR7c2VxdWVuY2V9YCxcbiAgICApXG4gICAgYzJwLl9tYXRjaF9jb3VudF8rK1xuICB9XG5cbiAgbWVyZ2VBY3RlKGFjdGVzOiBhbnksIGFjdGU6IGFueSwgYzJwOiBhbnksIHBhcmVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGNvZGU6IHN0cmluZyA9IGFjdGUuY29kZUFjdGVcbiAgICBsZXQgc2hvcnRDb2RlOiBzdHJpbmcgPSBjb2RlLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7cGFyZW50fS1gKSwgXCJcIilcbiAgICBzaG9ydENvZGUgPSBzaG9ydENvZGUucmVwbGFjZSgvLShBTnxTTikkLywgXCJcIilcbiAgICB0aGlzLmNvZGVzW3Nob3J0Q29kZV0gPSBudWxsXG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IGFjdGUubGliZWxsZUFjdGUubm9tQ2Fub25pcXVlXG4gICAgaWYgKCEoY29kZSBpbiBhY3RlcykpIHtcbiAgICAgIGFjdGVzW2NvZGVdID0ge1xuICAgICAgICB0eXBlOiBhY3RlLnhzaVR5cGUsXG4gICAgICAgIG5hbWU6IG5ldyBTZXQoW25hbWVdKSxcbiAgICAgICAgc2hvcnRDb2RlOiBzaG9ydENvZGUsXG4gICAgICAgIGFjdGVzOiB7fSxcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYWN0ZXNbY29kZV0ubmFtZS5hZGQobmFtZSlcbiAgICB9XG4gICAgaWYgKFwiYWN0ZXNMZWdpc2xhdGlmc1wiIGluIGFjdGUpXG4gICAgICB0aGlzLm1lcmdlKGFjdGVzW2NvZGVdLmFjdGVzLCBhY3RlLmFjdGVzTGVnaXNsYXRpZnMsIGMycFtjb2RlXSwgY29kZSlcbiAgfVxuXG4gIG1lcmdlKGFjdGVzOiBhbnksIGFjdGVzTGVnaXNsYXRpZnM6IGFueSwgYzJwOiBhbnksIHBhcmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgbCA9IHRoaXMucmVtYXBBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKVxuICAgIHRoaXMudmFsaWRhdGVDaHJvbm9sb2d5KGwsIGMycCwgcGFyZW50KVxuICAgIGZvciAoY29uc3QgYWN0ZSBvZiBsKSB0aGlzLm1lcmdlQWN0ZShhY3RlcywgYWN0ZSwgYzJwLCBwYXJlbnQpXG4gIH1cblxuICBjb2xsZWN0KGFjdGVzTGVnaXNsYXRpZnM6IGFueSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWN0ZSBvZiB0aGlzLmNvbGxlY3RBY3RlcyhhY3Rlc0xlZ2lzbGF0aWZzKSlcbiAgICAgIGlmIChcImFjdGVzTGVnaXNsYXRpZnNcIiBpbiBhY3RlKSB0aGlzLmNvbGxlY3QoYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzKVxuICB9XG5cbiAgdmFsaWRhdGVMZXZlbChjMnA6IGFueSwgcGF0aDogYW55KSB7XG4gICAgYXNzZXJ0KGMycC5fbWF0Y2hfY291bnRfID4gMCwgYCR7cGF0aH0gaXMgbmV2ZXIgdXNlZGApXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYzJwKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJDb2RlMlBhdHRlcm5cIilcbiAgICAgICAgdGhpcy52YWxpZGF0ZUxldmVsKHZhbHVlLCBwYXRoLmNvbmNhdChba2V5XSkpXG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy52YWxpZGF0ZUxldmVsKHRoaXMuY29kZTJwYXR0ZXJuLCBbXSlcbiAgfVxuXG4gIHByaW50RW50cnkoc2VjdGlvbnM6IHN0cmluZywgZW50cnk6IHN0cmluZywgY29kZXM6IHN0cmluZykge1xuICAgIGNvbnN0IHRpdGxlID0gYFxcYCR7ZW50cnl9XFxgX19gXG4gICAgY29uc29sZS5sb2codGl0bGUpXG4gICAgY29uc3QgdW5kZXJsaW5lID0gbmV3IEFycmF5KHRpdGxlLmxlbmd0aCArIDEpLmpvaW4oc2VjdGlvbnNbMF0pXG4gICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgIGNvbnNvbGUubG9nKGNvZGVzKVxuICB9XG5cbiAgYWRkQW5jaG9ycyhrZXk6IHN0cmluZykge1xuICAgIGlmIChrZXkgaW4gdGhpcy5hbmNob3JzUHJpbnRlZCkgcmV0dXJuXG4gICAgaWYgKHRoaXMubGVjdHVyZU1hcHBlci5oYXMoa2V5KSlcbiAgICAgIHRoaXMubGVjdHVyZU1hcHBlci5tZXJnZUNvZGVzKHRoaXMuYW5jaG9ycywga2V5KVxuICAgIGVsc2UgdGhpcy5hbmNob3JzLmFkZChrZXkpXG4gIH1cblxuICBwcmludEFuY2hvcnMoa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVyblxuICAgIHRoaXMuYW5jaG9yc1ByaW50ZWRba2V5XSA9IG51bGxcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSB0aGlzLmxlY3R1cmVNYXBwZXIucHJpbnRBbmNob3JzKGtleSlcbiAgICBlbHNlIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9OmApXG4gIH1cblxuICBnZXRDb2RlcyhrZXk6IHN0cmluZywgc2hvcnRDb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoa2V5IGluIHRoaXMuYW5jaG9yc1ByaW50ZWQpIHJldHVybiBgY2YgXFxcXCoke3Nob3J0Q29kZX1cXFxcKmBcbiAgICBpZiAodGhpcy5sZWN0dXJlTWFwcGVyLmhhcyhrZXkpKSByZXR1cm4gdGhpcy5sZWN0dXJlTWFwcGVyLmdldENvZGVzKGtleSlcbiAgICBlbHNlIHJldHVybiBrZXlcbiAgfVxuXG4gIHJlbmFtZUNNUChrZXk6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGtleS5zdGFydHNXaXRoKFwiQ01QXCIpKSB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKFwiLVNOXCIpKSByZXR1cm4gYCR7bmFtZX0gKFPDqW5hdClgXG4gICAgICBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCItQU5cIikpIHJldHVybiBgJHtuYW1lfSAoQXNzZW1ibMOpZSBOYXRpb25hbGUpYFxuICAgICAgZWxzZSByZXR1cm4gbmFtZVxuICAgIH0gZWxzZSByZXR1cm4gbmFtZVxuICB9XG5cbiAgcHJpbnRMZXZlbChhY3RlczogYW55LCBzZWN0aW9uczogc3RyaW5nLCBjMnA6IGFueSwgcGFyZW50OiBhbnkpIHtcbiAgICBjb25zdCBrZXlzOiBTZXQ8c3RyaW5nPiA9IHRoaXMub3JkZXJlZENvZGVzKE9iamVjdC5rZXlzKGFjdGVzKSwgYzJwLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgdmFsdWUgPSBhY3Rlc1trZXldXG4gICAgICBsZXQgbmFtZSA9IEFycmF5LmZyb20odmFsdWUubmFtZSkuam9pbihcIiwgXCIpXG4gICAgICBuYW1lID0gdGhpcy5yZW5hbWVDTVAoa2V5LCBuYW1lKVxuICAgICAgY29uc3QgY29kZXMgPSB0aGlzLmdldENvZGVzKGtleSwgdmFsdWUuc2hvcnRDb2RlKVxuICAgICAgdGhpcy5hZGRBbmNob3JzKGtleSlcbiAgICAgIHRoaXMucHJpbnRBbmNob3JzKGtleSlcbiAgICAgIGNvbnNvbGUubG9nKFwiXCIpXG4gICAgICB0aGlzLnByaW50RW50cnkoc2VjdGlvbnMsIGAke25hbWV9IDwke3ZhbHVlLnNob3J0Q29kZX1UT0NfPmAsIGNvZGVzKVxuICAgICAgY29uc29sZS5sb2coXCJcIilcbiAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZS5hY3RlcykubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5wcmludExldmVsKHZhbHVlLmFjdGVzLCBzZWN0aW9ucy5zdWJzdHJpbmcoMSksIGMycFtrZXldLCBrZXkpXG4gICAgfVxuICB9XG5cbiAgcHJpbnRDb2RlcygpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmNvZGVzKSlcbiAgICAgIGNvbnNvbGUubG9nKGAuLiBfJHtrZXl9VE9DOiBodHRwOi8vYClcbiAgfVxuXG4gIHByaW50QW5jaG9yc0luZGV4KCkge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBBcnJheS5mcm9tKHRoaXMuYW5jaG9ycykpXG4gICAgICBjb25zb2xlLmxvZyhgKiA6cmVmOlxcYCR7Y29kZX0gPCR7Y29kZX0+XFxgYClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZWQocHJvY2VkdXJlOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvY2VkdXJlID09IFwiUHJvY8OpZHVyZSBsw6lnaXNsYXRpdmVcIikge1xuICAgICAgY29uc3QgcmVtYXBwZWQgPSBPYmplY3Qua2V5cyh0aGlzLnJlbWFwcGVkUHJvY2VkdXJlcykuam9pbihcIiwgXCIpXG4gICAgICByZXR1cm4gYCAoYWdyw6lnYXRpb24gZGUgJHtyZW1hcHBlZH0pYFxuICAgIH0gZWxzZSByZXR1cm4gXCJcIlxuICB9XG5cbiAgcHJpbnQoKTogdm9pZCB7XG4gICAgdGhpcy5hbmNob3JzUHJpbnRlZCA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCBhY3Rlc10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5wcm9jZWR1cmVzKSBhcyBbXG4gICAgICBzdHJpbmcsXG4gICAgICBhbnksXG4gICAgXVtdKSB7XG4gICAgICBjb25zdCBjb2RlID0ga2V5LnJlcGxhY2UoLyArL2csIFwiX1wiKVxuICAgICAgdGhpcy5jb2Rlc1tjb2RlXSA9IG51bGxcbiAgICAgIGNvbnN0IGFnZ3JlZ2F0ZWQgPSB0aGlzLmdldEFnZ3JlZ2F0ZWQoa2V5KVxuICAgICAgY29uc3QgdGl0bGUgPSBgXFxgJHtrZXl9IDwke2NvZGV9VE9DXz5cXGBfXyR7YWdncmVnYXRlZH1gXG4gICAgICBjb25zb2xlLmxvZyh0aXRsZSlcbiAgICAgIGNvbnN0IHVuZGVybGluZSA9IG5ldyBBcnJheSh0aXRsZS5sZW5ndGggKyAxKS5qb2luKFwiPVwiKVxuICAgICAgY29uc29sZS5sb2codW5kZXJsaW5lKVxuICAgICAgdGhpcy5wcmludExldmVsKGFjdGVzLCBcIi1+LidcIiwgdGhpcy5jb2RlMnBhdHRlcm5ba2V5XSwgbnVsbClcbiAgICB9XG4gICAgdGhpcy5wcmludENvZGVzKClcbiAgICB0aGlzLnByaW50QW5jaG9yc0luZGV4KClcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IG51bWJlciB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkb2MgPSBuZXcgQWN0ZXNEb2N1bWVudGF0aW9uKFxuICAgICFvcHRpb25zW1wibm8tc2FuaXR5LWNoZWNrc1wiXSxcbiAgICBvcHRpb25zLnZlcmJvc2UsXG4gIClcbiAgZG9jLmNvbGxlY3RGaWxlcyhvcHRpb25zLmRhdGEpXG4gIGRvYy5wcm9jZXNzRmlsZXMob3B0aW9ucy5kYXRhKVxuICBkb2MucHJpbnQoKVxuICByZXR1cm4gMFxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJkb2N1bWVudF9kb3NzaWVyc19sZWdpc2xhdGlmcy50c1wiKSlcbiAgcHJvY2Vzcy5leGl0KG1haW4ocHJvY2Vzcy5hcmd2KSlcbiJdfQ==