@tricoteuses/assemblee 0.28.2 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/bugs/acteur-00010/plugin.test.js +45 -5
  2. package/lib/bugs/acteur-00010.js +29 -9
  3. package/lib/bugs/agenda-00002/plugin.test.js +46 -6
  4. package/lib/bugs/agenda-00002.js +29 -13
  5. package/lib/bugs/agenda-00008/plugin.test.js +44 -4
  6. package/lib/bugs/agenda-00008.js +29 -9
  7. package/lib/bugs/agenda-00011/plugin.test.js +50 -12
  8. package/lib/bugs/agenda-00011.js +39 -19
  9. package/lib/bugs.js +51 -31
  10. package/lib/cleaners/documents.js +13 -1
  11. package/lib/cleaners/documents.mjs +13 -1
  12. package/lib/datasets.js +243 -8
  13. package/lib/datasets.mjs +238 -8
  14. package/lib/file_systems.js +25 -5
  15. package/lib/loaders.js +3 -3
  16. package/lib/loaders.mjs +3 -3
  17. package/lib/parsers/documents.js +27 -5
  18. package/lib/parsers/recherche_amendements.js +27 -7
  19. package/lib/raw_types/acteurs_et_organes.d.ts +2 -1
  20. package/lib/raw_types/acteurs_et_organes.js +4 -3
  21. package/lib/raw_types/acteurs_et_organes.mjs +4 -3
  22. package/lib/raw_types/dossiers_legislatifs.d.ts +4 -0
  23. package/lib/raw_types/dossiers_legislatifs.js +10 -1
  24. package/lib/raw_types/dossiers_legislatifs.mjs +10 -1
  25. package/lib/scripts/bugs_helper.js +39 -19
  26. package/lib/scripts/document_dossiers_legislatifs.js +5 -3
  27. package/lib/scripts/get_today_reunions.js +2 -2
  28. package/lib/scripts/get_today_reunions.mjs +2 -2
  29. package/lib/scripts/parse_textes_lois.js +2 -2
  30. package/lib/scripts/parse_textes_lois.mjs +2 -2
  31. package/lib/scripts/raw_types_from_amendements.js +28 -4
  32. package/lib/scripts/retrieve_deputes_photos.js +29 -5
  33. package/lib/scripts/retrieve_deputes_photos.mjs +2 -2
  34. package/lib/scripts/retrieve_documents.js +36 -16
  35. package/lib/scripts/retrieve_documents.mjs +2 -2
  36. package/lib/scripts/retrieve_open_data.js +30 -6
  37. package/lib/scripts/retrieve_pending_amendments.js +27 -5
  38. package/lib/scripts/retrieve_pending_amendments.mjs +2 -2
  39. package/lib/scripts/retrieve_senateurs_photos.js +28 -4
  40. package/lib/scripts/retrieve_textes_lois.js +23 -5
  41. package/lib/scripts/retrieve_textes_lois.mjs +2 -2
  42. package/lib/scripts/validate_json.js +27 -7
  43. package/lib/types/dossiers_legislatifs.d.ts +1 -0
  44. package/lib/types/dossiers_legislatifs.js +5 -1
  45. package/lib/types/dossiers_legislatifs.mjs +5 -1
  46. package/lib/types/legislatures.d.ts +1 -0
  47. package/lib/types/legislatures.js +2 -1
  48. package/lib/types/legislatures.mjs +2 -1
  49. package/package.json +1 -1
package/lib/loaders.mjs CHANGED
@@ -267,7 +267,7 @@ export function loadAssembleeData(dataDir, enabledDatasets, legislature, {
267
267
  if (enabledDatasets & EnabledDatasets.Photos) {
268
268
  {
269
269
  const jsonFilePath = path.join(dataDir, `photos_deputes_${// TODO: Handle Legislature.All.
270
- legislature === Legislature.All ? Legislature.Quinze : legislature}`, "deputes.json");
270
+ legislature === Legislature.All ? Legislature.Seize : legislature}`, "deputes.json");
271
271
 
272
272
  if (fs.existsSync(jsonFilePath)) {
273
273
  if (log) {
@@ -545,7 +545,7 @@ export function loadAssembleeDataFromBigFiles(dataDir, enabledDatasets, legislat
545
545
  const photoByUid = {};
546
546
  {
547
547
  const jsonFilePath = path.join(dataDir, `photos_deputes_${// TODO: Handle Legislature.All.
548
- legislature === Legislature.All ? Legislature.Quinze : legislature}`, "deputes.json");
548
+ legislature === Legislature.All ? Legislature.Seize : legislature}`, "deputes.json");
549
549
 
550
550
  if (fs.existsSync(jsonFilePath)) {
551
551
  if (log) {
@@ -675,4 +675,4 @@ export function pathFromScrutinUid(scrutinsDir, uid) {
675
675
  fs.ensureDirSync(numeroMilliersDir);
676
676
  return path.join(numeroMilliersDir, uid);
677
677
  }
678
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJ1aWQiLCJ1bmRlZmluZWQiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZUZpbGVQYXRoIiwib3JnYW5lSnNvbiIsIm9yZ2FuZSIsInRvT3JnYW5lIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiUXVpbnplIiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJKU09OIiwicGFyc2UiLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsInNjcnV0aW5GaWxlUGF0aCIsInNjcnV0aW5Kc29uIiwic2NydXRpbiIsInRvU2NydXRpbiIsImxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiYWN0ZXVycyIsIm9yZ2FuZXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9ucyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRvRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvc3NpZXJzUGFybGVtZW50YWlyZXMiLCJ0b1NjcnV0aW5zIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsImRvY3VtZW50c0RpciIsIm1hdGNoIiwiZXhlYyIsIm5vdFN0cmljdEVxdWFsIiwiZG9jdW1lbnRUeXBlIiwiY2hhbWJyZURpciIsInJlcHVibGlxdWVEaXIiLCJsZWdpc2xhdHVyZURpciIsImV0YXREaXIiLCJudW1lcm8iLCJzdWJzdHIiLCJudW1lcm9NaWxsaWVyc0RpciIsImVuc3VyZURpclN5bmMiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwiZG9zc2llcnNEaXIiLCJwYXRoRnJvbVJldW5pb25VaWQiLCJyZXVuaW9uc0RpciIsInNlc3Npb25EaXIiLCJpZERpciIsIm51bWVyb01pbGxpb25zRGlyIiwicGF0aEZyb21TY3J1dGluVWlkIiwic2NydXRpbnNEaXIiXSwic291cmNlcyI6WyIuLi9zcmMvbG9hZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gTG9hZCBkYXRhIGZyb20gZmlsZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgeyBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBkYXRhc2V0cywgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4vZGF0YXNldHNcIlxuZXhwb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIEFjdGV1cixcbiAgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzQ29udmVydCxcbiAgT3JnYW5lLFxuICBQaG90byxcbn0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQsIFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQsIENvbnZlcnQgYXMgQW1lbmRlbWVudHNDb252ZXJ0IH0gZnJvbSBcIi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHtcbiAgQ29udmVydCBhcyBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCxcbiAgRG9jdW1lbnQsXG4gIERvc3NpZXJQYXJsZW1lbnRhaXJlLFxufSBmcm9tIFwiLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuL3R5cGVzL2xlZ2lzbGF0dXJlc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH1cbiAgcmVhZG9ubHkgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfVxuICByZWFkb25seSBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfVxuICByZWFkb25seSBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH1cbiAgcmVhZG9ubHkgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9XG59XG5cbmNvbnN0IGRvY3VtZW50VWlkUmVnZXggPVxuICAvXihBQ0lOfEFWQ0V8QVZJU3xERUNMfEVUREl8TEVUVHxNRVNTfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKShBTnxTTikoUlxcZCspW0xTXShcXGQrKShCfEJUQXxCVEN8VEFQKShcXGQrKSgtLiopPyQvXG5jb25zdCBkb3NzaWVyVWlkUmVnZXggPSAvXkRMKFJcXGQrKShMXFxkKylOKFxcZCspJC9cbmNvbnN0IHJldW5pb25VaWRSZWdleCA9XG4gIC9eUlUoQU58Q0d8U04pKFJcXGQrKShMXFxkKykoW0FTXVxcZHs0fSkoSURDfElERkw/fElEUykoXFxkKykkL1xuY29uc3Qgc2NydXRpblVpZFJlZ2V4ID0gL15WVEFOKFJcXGQrKShMXFxkKylWKFxcZCspJC9cblxuLyoqIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImFjdGV1cnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFjdGV1clNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YWN0ZXVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYWN0ZXVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFjdGV1ciA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyKGFjdGV1ckpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcIm9yZ2FuZXNcIl0pKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLm9yZ2FuZVNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7b3JnYW5lRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMob3JnYW5lRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZUpzb24pXG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcbiAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9IHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ucmV1bmlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmV1bmlvbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyZXVuaW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJldW5pb24gPSBBZ2VuZGFzQ29udmVydC50b1JldW5pb24ocmV1bmlvbkpzb24pXG4gICAgICAgIGlmIChyZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uQnlVaWRbcmV1bmlvbi51aWRdID0gcmV1bmlvblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5ID0gcmV1bmlvbi50aW1lc3RhbXBEZWJ1dC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICBsZXQgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XVxuICAgICAgICBpZiAocmV1bmlvbnNBdERheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbnNBdERheSA9IHJldW5pb25zQnlEYXlbZGF5XSA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgcmV1bmlvbnNBdERheS5wdXNoKHJldW5pb24pXG5cbiAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgaWYgKG9kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBwb2ludE9kaiBvZiBvZGoucG9pbnRzT2RqIHx8IFtdKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJMZWdpc2xhdGlmUmVmIG9mIHBvaW50T2RqLmRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIHx8XG4gICAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICAgIGxldCByZXVuaW9uc0F0RG9zc2llclVpZCA9XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNCeURvc3NpZXJVaWRbZG9zc2llckxlZ2lzbGF0aWZSZWZdXG4gICAgICAgICAgICAgIGlmIChyZXVuaW9uc0F0RG9zc2llclVpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQgPSByZXVuaW9uc0J5RG9zc2llclVpZFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJMZWdpc2xhdGlmUmVmXG4gICAgICAgICAgICAgICAgXSA9IFtdXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV1bmlvbnNBdERvc3NpZXJVaWQucHVzaChyZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFtZW5kZW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBbWVuZGVtZW50IH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgYW1lbmRlbWVudFNwbGl0UGF0aFthbWVuZGVtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYW1lbmRlbWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hbWVuZGVtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthbWVuZGVtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFtZW5kZW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnQoYW1lbmRlbWVudEpzb24pXG4gICAgICAgIGlmIChhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZG9jdW1lbnRCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb2N1bWVudCB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9jdW1lbnRzXCJdKSkge1xuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID0gZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9jdW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2RvY3VtZW50RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb2N1bWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb2N1bWVudCA9IERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRKc29uKVxuICAgICAgICBpZiAoZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPSBkb2N1bWVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvc3NpZXJzXCJdKSkge1xuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZW5hbWUgPSBkb3NzaWVyU3BsaXRQYXRoW2Rvc3NpZXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFkb3NzaWVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvc3NpZXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2Rvc3NpZXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9zc2llckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkb3NzaWVyID1cbiAgICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJQYXJsZW1lbnRhaXJlKGRvc3NpZXJKc29uKVxuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYHBob3Rvc19kZXB1dGVzXyR7XG4gICAgICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgICAgICBsZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsID8gTGVnaXNsYXR1cmUuUXVpbnplIDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID0gc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5zY3J1dGluU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtzY3J1dGluRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHNjcnV0aW5GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgc2NydXRpbiA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW4oc2NydXRpbkpzb24pXG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuLyoqIExvYWQgZGF0YSBmcm9tIGJpZyBtb25vbHl0aWMgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lcyA9IEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBhY3RldXIgb2YgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwiYWN0ZXVyXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChhY3RldXJCeVVpZFthY3RldXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPSBhY3RldXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2YgYWN0ZXVyc0V0T3JnYW5lcy5vcmdhbmVzKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IGV4aXN0aW5nIFwib3JnYW5lXCIsIGJlY2F1c2UgdGhlIGZpcnN0IHdyYXBwZXIgaXMgdGhlIG1vc3QgY29tcGxldGUuXG4gICAgICAgIGlmIChvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPSBvcmdhbmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldW5pb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBSZXVuaW9uIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RGF5OiB7IFtkYXk6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhZ2VuZGFzID0gQWdlbmRhc0NvbnZlcnQudG9BZ2VuZGFzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoanNvbilcbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhbWVuZGVtZW50QnlVaWRbYW1lbmRlbWVudC51aWRdID0gYW1lbmRlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyIG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcnNQYXJsZW1lbnRhaXJlcykge1xuICAgICAgICBjb25zdCB0aXRyZURvc3NpZXIgPSBkb3NzaWVyLnRpdHJlRG9zc2llclxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluW3RpdHJlRG9zc2llci5zZW5hdENoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci50aXRyZUNoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pblt0aXRyZURvc3NpZXIudGl0cmVDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIGNvbnN0IHBob3RvQnlVaWQgPSB7fVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLlF1aW56ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLFVBQWY7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLE1BQWpCO1NBRVNDLGU7U0FDQUMsUSxFQUFVRCxlO1NBQ1ZFLE87U0FDQUEsTztTQUdQQyxPQUFPLElBQUlDLHVCO1NBSUpELE9BQU8sSUFBSUUsYztTQUNDRixPQUFPLElBQUlHLGtCO1NBRTlCSCxPQUFPLElBQUlJLDBCO1NBSUpDLFc7U0FDQUwsT0FBTyxJQUFJTSxlO0FBcUJwQixNQUFNQyxnQkFBZ0IsR0FDcEIsc0hBREY7QUFFQSxNQUFNQyxlQUFlLEdBQUcsd0JBQXhCO0FBQ0EsTUFBTUMsZUFBZSxHQUNuQiwyREFERjtBQUVBLE1BQU1DLGVBQWUsR0FBRywwQkFBeEI7QUFFQTs7QUFDQSxPQUFPLFNBQVNDLGlCQUFU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
678
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJkb2N1bWVudFVpZFJlZ2V4IiwiZG9zc2llclVpZFJlZ2V4IiwicmV1bmlvblVpZFJlZ2V4Iiwic2NydXRpblVpZFJlZ2V4IiwibG9hZEFzc2VtYmxlZURhdGEiLCJkYXRhRGlyIiwiZW5hYmxlZERhdGFzZXRzIiwibGVnaXNsYXR1cmUiLCJsb2ciLCJhY3RldXJCeVVpZCIsIm9yZ2FuZUJ5VWlkIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwiaWdub3JlRm9yV2ViIiwiQWxsIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiYWN0ZXVyRmlsZVBhdGgiLCJjb25zb2xlIiwiYWN0ZXVySnNvbiIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiYWN0ZXVyIiwidG9BY3RldXIiLCJ1aWQiLCJ1bmRlZmluZWQiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZUZpbGVQYXRoIiwib3JnYW5lSnNvbiIsIm9yZ2FuZSIsInRvT3JnYW5lIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbkZpbGVQYXRoIiwicmV1bmlvbkpzb24iLCJyZXVuaW9uIiwidG9SZXVuaW9uIiwiZGF5IiwidGltZXN0YW1wRGVidXQiLCJ0b0lTT1N0cmluZyIsInNwbGl0IiwicmV1bmlvbnNBdERheSIsInB1c2giLCJvZGoiLCJwb2ludE9kaiIsInBvaW50c09kaiIsImRvc3NpZXJMZWdpc2xhdGlmUmVmIiwiZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMiLCJyZXVuaW9uc0F0RG9zc2llclVpZCIsImFtZW5kZW1lbnRCeVVpZCIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudEZpbGVQYXRoIiwiYW1lbmRlbWVudEpzb24iLCJhbWVuZGVtZW50IiwidG9BbWVuZGVtZW50IiwiZG9jdW1lbnRCeVVpZCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb2N1bWVudCIsInRvRG9jdW1lbnQiLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsInRpdHJlRG9zc2llciIsInNlbmF0Q2hlbWluIiwidGl0cmVDaGVtaW4iLCJwaG90b0J5VWlkIiwiUGhvdG9zIiwianNvbkZpbGVQYXRoIiwiU2VpemUiLCJleGlzdHNTeW5jIiwianNvbiIsIk9iamVjdCIsImFzc2lnbiIsIkpTT04iLCJwYXJzZSIsInNjcnV0aW5CeVVpZCIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbkZpbGVQYXRoIiwic2NydXRpbkpzb24iLCJzY3J1dGluIiwidG9TY3J1dGluIiwibG9hZEFzc2VtYmxlZURhdGFGcm9tQmlnRmlsZXMiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJzIiwib3JnYW5lcyIsInRvQWdlbmRhcyIsInJldW5pb25zIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0xlZ2lzbGF0aWZzIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNQYXJsZW1lbnRhaXJlcyIsInRvU2NydXRpbnMiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwiZG9jdW1lbnRzRGlyIiwibWF0Y2giLCJleGVjIiwibm90U3RyaWN0RXF1YWwiLCJkb2N1bWVudFR5cGUiLCJjaGFtYnJlRGlyIiwicmVwdWJsaXF1ZURpciIsImxlZ2lzbGF0dXJlRGlyIiwiZXRhdERpciIsIm51bWVybyIsInN1YnN0ciIsIm51bWVyb01pbGxpZXJzRGlyIiwiZW5zdXJlRGlyU3luYyIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tUmV1bmlvblVpZCIsInJldW5pb25zRGlyIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5leHBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHtcbiAgQWN0ZXVyLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxuICBPcmdhbmUsXG4gIFBob3RvLFxufSBmcm9tIFwiLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCwgUmV1bmlvbiB9IGZyb20gXCIuL3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxuICBEb2N1bWVudCxcbiAgRG9zc2llclBhcmxlbWVudGFpcmUsXG59IGZyb20gXCIuL3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IExlZ2lzbGF0dXJlIH0gZnJvbSBcIi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNDb252ZXJ0LCBTY3J1dGluIH0gZnJvbSBcIi4vdHlwZXMvc2NydXRpbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbn1cblxuY29uc3QgZG9jdW1lbnRVaWRSZWdleCA9XG4gIC9eKEFDSU58QVZDRXxBVklTfERFQ0x8RVRESXxMRVRUfE1FU1N8UElPTnxQTlJFfFBSSkx8UkFQUHxSSU5GfFJJT04pKEFOfFNOKShSXFxkKylbTFNdKFxcZCspKEJ8QlRBfEJUQ3xUQVApKFxcZCspKC0uKik/JC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUQU4oUlxcZCspKExcXGQrKVYoXFxkKykkL1xuXG4vKiogTG9hZCBkYXRhIGZyb20gc3BsaXQgZmlsZXMuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURhdGEoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiBEYXRhIHtcbiAgY29uc3QgYWN0ZXVyQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQWN0ZXVyIH0gPSB7fVxuICBjb25zdCBvcmdhbmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiYWN0ZXVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYWN0ZXVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHthY3RldXJGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGV1ckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhY3RldXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXIoYWN0ZXVySnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJhY3RldXJcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJCeVVpZFthY3RldXIudWlkXSA9IGFjdGV1clxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wib3JnYW5lc1wiXSkpIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZW5hbWUgPSBvcmdhbmVTcGxpdFBhdGhbb3JnYW5lU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghb3JnYW5lRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4ub3JnYW5lU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtvcmdhbmVGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yZ2FuZUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhvcmdhbmVGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qgb3JnYW5lID0gQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUob3JnYW5lSnNvbilcbiAgICAgICAgLy8gS2VlcCB0aGUgZmlyc3QgZXhpc3RpbmcgXCJvcmdhbmVcIiwgYmVjYXVzZSB0aGUgZmlyc3Qgd3JhcHBlciBpcyB0aGUgbW9zdCBjb21wbGV0ZS5cbiAgICAgICAgaWYgKG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvcmdhbmVCeVVpZFtvcmdhbmUudWlkXSA9IG9yZ2FuZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1bmlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBjb25zdCByZXVuaW9uc0J5RG9zc2llclVpZDogeyBbZG9zc2llclVpZDogc3RyaW5nXTogUmV1bmlvbltdIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID0gcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5yZXVuaW9uU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyZXVuaW9uRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXVuaW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJldW5pb25GaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmV1bmlvbiA9IEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uSnNvbilcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpcikpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FtZW5kZW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoYW1lbmRlbWVudEZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50ID0gQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChhbWVuZGVtZW50SnNvbilcbiAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPSBhbWVuZGVtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb2N1bWVudHNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50RmlsZW5hbWUgPSBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb2N1bWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9jdW1lbnRGaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY3VtZW50SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvY3VtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudChkb2N1bWVudEpzb24pXG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoZGF0YXNldERpciwgW1wiZG9zc2llcnNcIl0pKSB7XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlbmFtZSA9IGRvc3NpZXJTcGxpdFBhdGhbZG9zc2llclNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWRvc3NpZXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVyRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uZG9zc2llclNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7ZG9zc2llckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9zc2llckpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhkb3NzaWVyRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRvc3NpZXIgPVxuICAgICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llckpzb24pXG4gICAgICAgIGNvbnN0IHRpdHJlRG9zc2llciA9IGRvc3NpZXIudGl0cmVEb3NzaWVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW5bdGl0cmVEb3NzaWVyLnNlbmF0Q2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluICYmXG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPT09XG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluW3RpdHJlRG9zc2llci50aXRyZUNoZW1pbl0gPSBkb3NzaWVyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkW2Rvc3NpZXIudWlkXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBwaG90b0J5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlBob3Rvcykge1xuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9IHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3J1dGluRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uc2NydXRpblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7c2NydXRpbkZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhzY3J1dGluRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHNjcnV0aW4gPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGluKHNjcnV0aW5Kc29uKVxuICAgICAgICBpZiAoc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NydXRpbkJ5VWlkW3NjcnV0aW4udWlkXSA9IHNjcnV0aW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWN0ZXVyQnlVaWQsXG4gICAgYW1lbmRlbWVudEJ5VWlkLFxuICAgIGRvY3VtZW50QnlVaWQsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVNlbmF0Q2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkLFxuICAgIG9yZ2FuZUJ5VWlkLFxuICAgIHBob3RvQnlVaWQsXG4gICAgcmV1bmlvbkJ5VWlkLFxuICAgIHJldW5pb25zQnlEYXksXG4gICAgcmV1bmlvbnNCeURvc3NpZXJVaWQsXG4gICAgc2NydXRpbkJ5VWlkLFxuICB9XG59XG5cbi8qKiBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5TZWl6ZSA6IGxlZ2lzbGF0dXJlXG4gICAgICAgIH1gLFxuICAgICAgICBcImRlcHV0ZXMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBcInBob3Rvc19zZW5hdGV1cnNcIixcbiAgICAgICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoanNvbkZpbGVQYXRoKSkge1xuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHBob3RvQnlVaWQsIEpTT04ucGFyc2UoanNvbikpXG4gICAgICB9IGVsc2UgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgSWdub3JpbmcgbWlzc2luZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3Qgc2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhqc29uKVxuICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIHNjcnV0aW5zLnNjcnV0aW5zKSB7XG4gICAgICAgIGlmIChzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3J1dGluQnlVaWRbc2NydXRpbi51aWRdID0gc2NydXRpblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudFVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBkb2N1bWVudFR5cGUgPSBwYXRoLmpvaW4oZG9jdW1lbnRzRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBtYXRjaCFbMl0pXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oY2hhbWJyZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBsZWdpc2xhdHVyZURpciA9IHBhdGguam9pbihyZXB1YmxpcXVlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4oZXRhdERpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgdWlkOiBzdHJpbmcsXG4pOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGRvc3NpZXJVaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkb3NzaWVyIHBhcmxlbWVudGFpcmUgVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oZG9zc2llcnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cigwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSByZXVuaW9uVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgcmV1bmlvbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihyZXVuaW9uc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBjb25zdCBzZXNzaW9uRGlyID0gcGF0aC5qb2luKGxlZ2lzbGF0dXJlRGlyLCBtYXRjaCFbNF0pXG4gIGNvbnN0IGlkRGlyID0gcGF0aC5qb2luKHNlc3Npb25EaXIsIG1hdGNoIVs1XSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwMDAwXCIgKyBtYXRjaCFbNl1cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gOSlcbiAgY29uc3QgbnVtZXJvTWlsbGlvbnNEaXIgPSBwYXRoLmpvaW4oaWREaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKG51bWVyb01pbGxpb25zRGlyLCBudW1lcm8uc3Vic3RyKDMsIDMpKVxuICBmcy5lbnN1cmVEaXJTeW5jKG51bWVyb01pbGxpZXJzRGlyKVxuICByZXR1cm4gcGF0aC5qb2luKG51bWVyb01pbGxpZXJzRGlyLCB1aWQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHNjcnV0aW5VaWRSZWdleC5leGVjKHVpZClcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgIG1hdGNoLFxuICAgIG51bGwsXG4gICAgYFVuZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBzY3J1dGluIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKHNjcnV0aW5zRGlyLCBtYXRjaCFbMV0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVsyXSlcbiAgbGV0IG51bWVybyA9IFwiMDAwMDAwXCIgKyBtYXRjaCFbM11cbiAgbnVtZXJvID0gbnVtZXJvLnN1YnN0cihudW1lcm8ubGVuZ3RoIC0gNilcbiAgY29uc3QgbnVtZXJvTWlsbGllcnNEaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIG51bWVyby5zdWJzdHIoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO0FBQ0EsT0FBT0MsRUFBUCxNQUFlLFVBQWY7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLE1BQWpCO1NBRVNDLGU7U0FDQUMsUSxFQUFVRCxlO1NBQ1ZFLE87U0FDQUEsTztTQUdQQyxPQUFPLElBQUlDLHVCO1NBSUpELE9BQU8sSUFBSUUsYztTQUNDRixPQUFPLElBQUlHLGtCO1NBRTlCSCxPQUFPLElBQUlJLDBCO1NBSUpDLFc7U0FDQUwsT0FBTyxJQUFJTSxlO0FBcUJwQixNQUFNQyxnQkFBZ0IsR0FDcEIsc0hBREY7QUFFQSxNQUFNQyxlQUFlLEdBQUcsd0JBQXhCO0FBQ0EsTUFBTUMsZUFBZSxHQUNuQiwyREFERjtBQUVBLE1BQU1DLGVBQWUsR0FBRywwQkFBeEI7QUFFQTs7QUFDQSxPQUFPLFNBQVNDLGlCQUFULENB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
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
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
+
3
5
  require("core-js/modules/es.array.is-array.js");
4
6
 
5
7
  require("core-js/modules/es.symbol.js");
@@ -24,16 +26,34 @@ require("core-js/modules/es.function.name.js");
24
26
 
25
27
  require("core-js/modules/es.promise.js");
26
28
 
29
+ require("core-js/modules/es.symbol.async-iterator.js");
30
+
31
+ require("core-js/modules/es.symbol.to-string-tag.js");
32
+
33
+ require("core-js/modules/es.json.to-string-tag.js");
34
+
35
+ require("core-js/modules/es.math.to-string-tag.js");
36
+
27
37
  require("core-js/modules/es.object.define-property.js");
28
38
 
39
+ require("core-js/modules/es.object.create.js");
40
+
41
+ require("core-js/modules/es.object.get-prototype-of.js");
42
+
43
+ require("core-js/modules/es.array.for-each.js");
44
+
45
+ require("core-js/modules/web.dom-collections.for-each.js");
46
+
47
+ require("core-js/modules/es.object.set-prototype-of.js");
48
+
49
+ require("core-js/modules/es.array.reverse.js");
50
+
29
51
  Object.defineProperty(exports, "__esModule", {
30
52
  value: true
31
53
  });
32
54
  exports.parseTexteLoi = parseTexteLoi;
33
55
  exports.retrieveTexteLoiParsed = retrieveTexteLoiParsed;
34
56
 
35
- require("regenerator-runtime/runtime.js");
36
-
37
57
  require("core-js/modules/es.regexp.exec.js");
38
58
 
39
59
  require("core-js/modules/es.string.split.js");
@@ -62,6 +82,8 @@ var _jsdom = require("jsdom");
62
82
 
63
83
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
64
84
 
85
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
86
+
65
87
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
66
88
 
67
89
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -518,9 +540,9 @@ function retrieveTexteLoiParsed(_x, _x2) {
518
540
  }
519
541
 
520
542
  function _retrieveTexteLoiParsed() {
521
- _retrieveTexteLoiParsed = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(fetch, assembleeUrl) {
543
+ _retrieveTexteLoiParsed = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fetch, assembleeUrl) {
522
544
  var response, page;
523
- return regeneratorRuntime.wrap(function _callee$(_context) {
545
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
524
546
  while (1) {
525
547
  switch (_context.prev = _context.next) {
526
548
  case 0:
@@ -560,4 +582,4 @@ function _retrieveTexteLoiParsed() {
560
582
  }));
561
583
  return _retrieveTexteLoiParsed.apply(this, arguments);
562
584
  }
563
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVRleHRlTG9pIiwiYXNzZW1ibGVlVXJsIiwicGFnZSIsInBhZ2VTZWdtZW50cyIsInNwbGl0IiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJsZW5ndGgiLCJodG1sIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsIkpTRE9NIiwid2luZG93IiwiZG9jdW1lbnQiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJkaXZFbGVtZW50IiwidGFnTmFtZSIsIm5ld0RpdkVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVFbGVtZW50IiwiZGl2Q2hpbGQiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImJvZHlDaGlsZCIsImFsaW5lYUVsZW1lbnQiLCJpc011bHRpTGluZXNIZWFkZXIiLCJsZXZlbCIsImxldmVscyIsImxpbmVFbGVtZW50cyIsIm5leHRQYXJlbnRTdGF0ZSIsInBhcmFncmFwaENoaWxkIiwicGFyYWdyYXBoRWxlbWVudCIsInN0YXRlIiwic3ViQWxpbmVhRWxlbWVudCIsInN1YmRpdmlzaW9ucyIsInN1YmRpdmlzaW9uQWxpbmVhc0h0bWwiLCJzdWJkaXZpc2lvbkFsaW5lYXNUZXh0Iiwic3ViZGl2aXNpb25IZWFkZXJzSHRtbCIsInN1YmRpdmlzaW9uSGVhZGVyc1RleHQiLCJ1bmRlZmluZWQiLCJoZWFkZXJUZXh0IiwidGV4dENvbnRlbnQiLCJuYW1lQ29tcHV0ZWQiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJtYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJwb3AiLCJwdXNoIiwiYWxpbmVhcyIsImhlYWRlcnMiLCJpZCIsInJlbGF0aXZlTGV2ZWwiLCJ0ZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5jbHVkZXMiLCJsaW5lVGV4dCIsIm1hcCIsImVsZW1lbnQiLCJqb2luIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJjbGFzc05hbWUiLCJ1cmwiLCJyZXRyaWV2ZVRleHRlTG9pUGFyc2VkIiwiZmV0Y2giLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZUxvaShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBjb25zdCBwYWdlU2VnbWVudHMgPSBwYWdlLnNwbGl0KFwiPC9zdHlsZT5cIilcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZ2VTZWdtZW50cy5sZW5ndGgsIDIsIHBhZ2UpXG4gIGxldCBodG1sID0gcGFnZVNlZ21lbnRzWzFdLnRyaW0oKVxuICBhc3NlcnQoaHRtbC5zdGFydHNXaXRoKFwiPGRpdlwiKSlcbiAgYXNzZXJ0KGh0bWwuZW5kc1dpdGgoXCI8L2Rpdj5cIikpXG4gIGh0bWwgPSBgPGh0bWwke2h0bWwuc3Vic3RyaW5nKDQsIGh0bWwubGVuZ3RoIC0gNil9PC9odG1sPmBcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuICBpZiAoYXNzZW1ibGVlVXJsID09PSBcImh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3NS5hc3BcIikge1xuICAgIC8vIFJlcGFpciBkb2N1bWVudC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICAgIGNvbnN0IGRpdkVsZW1lbnQgPSBib2R5RWxlbWVudC5jaGlsZHJlblswXVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaXZFbGVtZW50LnRhZ05hbWUsIFwiRElWXCIpXG4gICAgY29uc3QgbmV3RGl2RWxlbWVudCA9IGJvZHlFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICBkaXZFbGVtZW50LFxuICAgIClcbiAgICBib2R5RWxlbWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpLCBkaXZFbGVtZW50KVxuICAgIGZvciAoY29uc3QgZGl2Q2hpbGQgb2YgWy4uLmRpdkVsZW1lbnQuY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoZGl2Q2hpbGQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT09IFwiYTlBcnRpY2xlTnVtXCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG5ld0RpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2Q2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IGxpbmVFbGVtZW50czogRWxlbWVudFtdIHwgbnVsbCA9IG51bGxcbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHBhcmFncmFwaENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IHBhcmFncmFwaEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBsZXQgc3ViQWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHN1YmRpdmlzaW9ucyA9IFtdXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC0yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImZpcnN0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBhbGluZWEgaW4gY3VycmVudCBib2R5Q2hpbGQ6IGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIHBhcmFncmFwaENoaWxkID0gcGFyYWdyYXBoRWxlbWVudCEuY2hpbGRyZW5bMF1cbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBjaGlsZCBpbiBjdXJyZW50IHBhcmFncmFwaDogZ28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBwYXJhZ3JhcGhFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICAgIGNvbnN0IG5hbWVDb21wdXRlZCA9IChoZWFkZXJUZXh0IHx8IFwiXCIpXG4gICAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChub3V2ZWF1XFwpLywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8KgL2csIFwiIFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8gezEsfS9nLCBcIl9cIilcbiAgICAgICAgICBjb25zdCBuYW1lVXBwZXIgPSBuYW1lQ29tcHV0ZWQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIGlmIChuYW1lVXBwZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNDQ1LmFzcFxuICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0TGV2ZWwgPVxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFJBUFBPUlRfKT9BTk5FWEUoX3wkKS8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FVEFUXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlRPTUVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eUEFSVElFXy8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgL14oUFJFTUlFUkV8U0VDT05ERXxERVVYSUVNRXxUUk9JU0lFTUV8UVVBVFJJRU1FKV9QQVJUSUUoX3wkKS8sXG4gICAgICAgICAgICAgICAgKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15MSVZSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15USVRSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTVElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA1XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eQ0hBUElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDdcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIG11c3QgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgYXJ0aWNsZS5cbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGhvdXQgY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDcwMi5hc3BcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGggY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTMyNi5hc3BcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTYxMC5hc3BcbiAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgaWYgKG5leHRMZXZlbCA9PT0gbnVsbCAmJiBzdWJkaXZpc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAobmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wMjMyLmFzcFxuICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDYyNi5hc3BcbiAgICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBuYW1lVXBwZXIgPT09IFwiSkVVWF9PTFlNUElRVUVTX0VUX1BBUkFMWU1QSVFVRVNfREVfMjAyNFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3Ni5hc3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVVwcGVyID09PSBcIlRFWFRFX0RFX0xBX0NPTU1JU1NJT05fTUlYVEVfUEFSSVRBSVJFXCIpIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTI5NC5hc3BcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBVbmV4cGVjdGVkIG5hbWVVcHBlciA9IFwiJHtuYW1lVXBwZXJ9XCIgYXQgYmVnaW5uaW5nIG9mIFwidGV4dGUgZGUgbG9pXCIgYXQgJHthc3NlbWJsZWVVcmx9YCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICAgIHdoaWxlIChsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbCA8IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnBvcCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCB8fCBsZXZlbCA+IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcnRpY2xlcyAmIFwiRXhwb3PDqSBkZXMgbW90aWZzXCIgYXJlIHRoZSBvbmx5IGRpdmlzaW9ucyB3aXRob3V0IHNlY29uZCB0aXRsZS5cbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkFSVElDTEVTP18vKSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSA9PT0gbnVsbFxuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzSHRtbCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0ID0gW11cbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGh0bWw6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkOiBcIkRfXCIgKyBuYW1lQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICAgIHJlbGF0aXZlTGV2ZWw6IGxldmVscy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc1RleHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lRWxlbWVudHMgPSBbXVxuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgc3ViQWxpbmVhRWxlbWVudCA9IGFsaW5lYUVsZW1lbnQhLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBzdWItYWxpbmVhIGluIGN1cnJlbnQgYWxpbmVhOiBnbyB0byBuZXh0IGFsaW5lYS5cbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJzdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dEJvZHlDaGlsZFwiOlxuICAgICAgICBpZiAoYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuXG4gICAgICAgICAgc3RhdGUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keUNoaWxkID0gYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICAgIGlmIChib2R5Q2hpbGQudGFnTmFtZSA9PT0gXCJESVZcIikge1xuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDxQLz4gaXMgZm9yIGZvb3Rub3Rlc1xuICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICBbXCJCUlwiLCBcIkhSXCIsIFwiUFwiXS5pbmNsdWRlcyhib2R5Q2hpbGQudGFnTmFtZSksXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkIHRhZyBuYW1lIFwiJHtib2R5Q2hpbGQudGFnTmFtZX1cIiBmb3IgYm9keSBjaGlsZGAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBTdGF5IGluIHRoZSBzYW1lIHN0YXRlIHRvIGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBwYXJhZ3JhcGhDaGlsZCA9IHBhcmFncmFwaENoaWxkIS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIHBhcmFncmFwaCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudGV4dENvbnRlbnQpXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIGlmIChsaW5lVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgbGluZUh0bWwgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVFbGVtZW50cyA9IG51bGxcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzdWJBbGluZWFFbGVtZW50ID0gc3ViQWxpbmVhRWxlbWVudCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGFsaW5lYUVsZW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLiBHbyB0byBuZXh0IGFsaW5lYUVsZW1lbnQuXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwic3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJwYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBzd2l0Y2ggKHBhcmFncmFwaENoaWxkIS50YWdOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkFcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJCUlwiOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50ZXh0Q29udGVudClcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGxpbmVUZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVIdG1sID0gbGluZUVsZW1lbnRzIVxuICAgICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoaXNNdWx0aUxpbmVzSGVhZGVyICYmIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5wdXNoKGxpbmVUZXh0KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZUVsZW1lbnRzID0gW11cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJERUxcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJJTUdcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJTUEFOXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBhcmFncmFwaENoaWxkIS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICAgICAgICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImFFbG9pUGFzdGlsbGVcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwiYUVsb2lQYXN0aWxsZTBcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiAtMyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCB0YWcgbmFtZSBmb3IgcGFyYWdyYXBoIGNoaWxkOiAke1xuICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hpbGQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IFwibmV4dFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJzdWJBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoc3ViQWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHBhcmFncmFwaEVsZW1lbnQgPSBzdWJBbGluZWFFbGVtZW50XG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJUQUJMRVwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIHN1YiBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIHN1YkFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgICBzdGF0ZSA9IFwibmV4dFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgc3RhdGU6ICR7c3RhdGV9YFxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IG51bGwsXG4gICAgaHRtbCxcbiAgICBwYWdlLFxuICAgIHN1YmRpdmlzaW9ucyxcbiAgICB1cmw6IGFzc2VtYmxlZVVybCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVUZXh0ZUxvaVBhcnNlZChcbiAgZmV0Y2g6IChcbiAgICB1cmw6IHN0cmluZyB8IFJlcXVlc3QsXG4gICAgaW5pdD86IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICApID0+IFByb21pc2U8UmVzcG9uc2U+LFxuICBhc3NlbWJsZWVVcmw6IHN0cmluZyxcbikge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFzc2VtYmxlZVVybClcbiAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgcGFnZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlVGV4dGVMb2koYXNzZW1ibGVlVXJsLCBwYWdlKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRU8sU0FBU0EsYUFBVCxDQUF1QkMsWUFBdkIsRUFBNkNDLElBQTdDLEVBQTJEO0VBQ2hFO0VBQ0EsSUFBTUMsWUFBWSxHQUFHRCxJQUFJLENBQUNFLEtBQUwsQ0FBVyxVQUFYLENBQXJCOztFQUNBQyxrQkFBQSxDQUFPQyxXQUFQLENBQW1CSCxZQUFZLENBQUNJLE1BQWhDLEVBQXdDLENBQXhDLEVBQTJDTCxJQUEzQzs7RUFDQSxJQUFJTSxJQUFJLEdBQUdMLFlBQVksQ0FBQyxDQUFELENBQVosQ0FBZ0JNLElBQWhCLEVBQVg7RUFDQSxJQUFBSixrQkFBQSxFQUFPRyxJQUFJLENBQUNFLFVBQUwsQ0FBZ0IsTUFBaEIsQ0FBUDtFQUNBLElBQUFMLGtCQUFBLEVBQU9HLElBQUksQ0FBQ0csUUFBTCxDQUFjLFFBQWQsQ0FBUDtFQUNBSCxJQUFJLGtCQUFXQSxJQUFJLENBQUNJLFNBQUwsQ0FBZSxDQUFmLEVBQWtCSixJQUFJLENBQUNELE1BQUwsR0FBYyxDQUFoQyxDQUFYLFlBQUosQ0FQZ0UsQ0FTaEU7O0VBQ0EsYUFBbUIsSUFBSU0sWUFBSixDQUFVTCxJ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
585
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVRleHRlTG9pIiwiYXNzZW1ibGVlVXJsIiwicGFnZSIsInBhZ2VTZWdtZW50cyIsInNwbGl0IiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJsZW5ndGgiLCJodG1sIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInN1YnN0cmluZyIsIkpTRE9NIiwid2luZG93IiwiZG9jdW1lbnQiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJkaXZFbGVtZW50IiwidGFnTmFtZSIsIm5ld0RpdkVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVFbGVtZW50IiwiZGl2Q2hpbGQiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImJvZHlDaGlsZCIsImFsaW5lYUVsZW1lbnQiLCJpc011bHRpTGluZXNIZWFkZXIiLCJsZXZlbCIsImxldmVscyIsImxpbmVFbGVtZW50cyIsIm5leHRQYXJlbnRTdGF0ZSIsInBhcmFncmFwaENoaWxkIiwicGFyYWdyYXBoRWxlbWVudCIsInN0YXRlIiwic3ViQWxpbmVhRWxlbWVudCIsInN1YmRpdmlzaW9ucyIsInN1YmRpdmlzaW9uQWxpbmVhc0h0bWwiLCJzdWJkaXZpc2lvbkFsaW5lYXNUZXh0Iiwic3ViZGl2aXNpb25IZWFkZXJzSHRtbCIsInN1YmRpdmlzaW9uSGVhZGVyc1RleHQiLCJ1bmRlZmluZWQiLCJoZWFkZXJUZXh0IiwidGV4dENvbnRlbnQiLCJuYW1lQ29tcHV0ZWQiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJtYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJwb3AiLCJwdXNoIiwiYWxpbmVhcyIsImhlYWRlcnMiLCJpZCIsInJlbGF0aXZlTGV2ZWwiLCJ0ZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5jbHVkZXMiLCJsaW5lVGV4dCIsIm1hcCIsImVsZW1lbnQiLCJqb2luIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJjbGFzc05hbWUiLCJ1cmwiLCJyZXRyaWV2ZVRleHRlTG9pUGFyc2VkIiwiZmV0Y2giLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZUxvaShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBjb25zdCBwYWdlU2VnbWVudHMgPSBwYWdlLnNwbGl0KFwiPC9zdHlsZT5cIilcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZ2VTZWdtZW50cy5sZW5ndGgsIDIsIHBhZ2UpXG4gIGxldCBodG1sID0gcGFnZVNlZ21lbnRzWzFdLnRyaW0oKVxuICBhc3NlcnQoaHRtbC5zdGFydHNXaXRoKFwiPGRpdlwiKSlcbiAgYXNzZXJ0KGh0bWwuZW5kc1dpdGgoXCI8L2Rpdj5cIikpXG4gIGh0bWwgPSBgPGh0bWwke2h0bWwuc3Vic3RyaW5nKDQsIGh0bWwubGVuZ3RoIC0gNil9PC9odG1sPmBcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuICBpZiAoYXNzZW1ibGVlVXJsID09PSBcImh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3NS5hc3BcIikge1xuICAgIC8vIFJlcGFpciBkb2N1bWVudC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICAgIGNvbnN0IGRpdkVsZW1lbnQgPSBib2R5RWxlbWVudC5jaGlsZHJlblswXVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaXZFbGVtZW50LnRhZ05hbWUsIFwiRElWXCIpXG4gICAgY29uc3QgbmV3RGl2RWxlbWVudCA9IGJvZHlFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICBkaXZFbGVtZW50LFxuICAgIClcbiAgICBib2R5RWxlbWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpLCBkaXZFbGVtZW50KVxuICAgIGZvciAoY29uc3QgZGl2Q2hpbGQgb2YgWy4uLmRpdkVsZW1lbnQuY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoZGl2Q2hpbGQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT09IFwiYTlBcnRpY2xlTnVtXCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG5ld0RpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2Q2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IGxpbmVFbGVtZW50czogRWxlbWVudFtdIHwgbnVsbCA9IG51bGxcbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHBhcmFncmFwaENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IHBhcmFncmFwaEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBsZXQgc3ViQWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHN1YmRpdmlzaW9ucyA9IFtdXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC0yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImZpcnN0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBhbGluZWEgaW4gY3VycmVudCBib2R5Q2hpbGQ6IGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIHBhcmFncmFwaENoaWxkID0gcGFyYWdyYXBoRWxlbWVudCEuY2hpbGRyZW5bMF1cbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBjaGlsZCBpbiBjdXJyZW50IHBhcmFncmFwaDogZ28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBwYXJhZ3JhcGhFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICAgIGNvbnN0IG5hbWVDb21wdXRlZCA9IChoZWFkZXJUZXh0IHx8IFwiXCIpXG4gICAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChub3V2ZWF1XFwpLywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8KgL2csIFwiIFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8gezEsfS9nLCBcIl9cIilcbiAgICAgICAgICBjb25zdCBuYW1lVXBwZXIgPSBuYW1lQ29tcHV0ZWQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIGlmIChuYW1lVXBwZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNDQ1LmFzcFxuICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0TGV2ZWwgPVxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFJBUFBPUlRfKT9BTk5FWEUoX3wkKS8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FVEFUXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlRPTUVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eUEFSVElFXy8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKFxuICAgICAgICAgICAgICAgICAgL14oUFJFTUlFUkV8U0VDT05ERXxERVVYSUVNRXxUUk9JU0lFTUV8UVVBVFJJRU1FKV9QQVJUSUUoX3wkKS8sXG4gICAgICAgICAgICAgICAgKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15MSVZSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15USVRSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTVElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA1XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eQ0hBUElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDdcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15TT1VTU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDhcbiAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIG11c3QgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgYXJ0aWNsZS5cbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGhvdXQgY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDcwMi5hc3BcbiAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGggY29udGVudDpcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTMyNi5hc3BcbiAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTYxMC5hc3BcbiAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IDlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgaWYgKG5leHRMZXZlbCA9PT0gbnVsbCAmJiBzdWJkaXZpc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAobmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wMjMyLmFzcFxuICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDYyNi5hc3BcbiAgICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBuYW1lVXBwZXIgPT09IFwiSkVVWF9PTFlNUElRVUVTX0VUX1BBUkFMWU1QSVFVRVNfREVfMjAyNFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3Ni5hc3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZVVwcGVyID09PSBcIlRFWFRFX0RFX0xBX0NPTU1JU1NJT05fTUlYVEVfUEFSSVRBSVJFXCIpIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTI5NC5hc3BcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgIGBVbmV4cGVjdGVkIG5hbWVVcHBlciA9IFwiJHtuYW1lVXBwZXJ9XCIgYXQgYmVnaW5uaW5nIG9mIFwidGV4dGUgZGUgbG9pXCIgYXQgJHthc3NlbWJsZWVVcmx9YCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICAgIHdoaWxlIChsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbCA8IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnBvcCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCB8fCBsZXZlbCA+IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgICAgbGV2ZWxzLnB1c2gobGV2ZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBcnRpY2xlcyAmIFwiRXhwb3PDqSBkZXMgbW90aWZzXCIgYXJlIHRoZSBvbmx5IGRpdmlzaW9ucyB3aXRob3V0IHNlY29uZCB0aXRsZS5cbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkFSVElDTEVTP18vKSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSA9PT0gbnVsbFxuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzSHRtbCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0ID0gW11cbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGh0bWw6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGlkOiBcIkRfXCIgKyBuYW1lQ29tcHV0ZWQsXG4gICAgICAgICAgICAgIGxldmVsOiBsZXZlbCArIDEsXG4gICAgICAgICAgICAgIHJlbGF0aXZlTGV2ZWw6IGxldmVscy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRleHQ6IHtcbiAgICAgICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHN1YmRpdmlzaW9uSGVhZGVyc1RleHQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lRWxlbWVudHMgPSBbXVxuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgc3ViQWxpbmVhRWxlbWVudCA9IGFsaW5lYUVsZW1lbnQhLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBzdWItYWxpbmVhIGluIGN1cnJlbnQgYWxpbmVhOiBnbyB0byBuZXh0IGFsaW5lYS5cbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJzdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dEJvZHlDaGlsZFwiOlxuICAgICAgICBpZiAoYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuXG4gICAgICAgICAgc3RhdGUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keUNoaWxkID0gYm9keUNoaWxkLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICAgIGlmIChib2R5Q2hpbGQudGFnTmFtZSA9PT0gXCJESVZcIikge1xuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDxQLz4gaXMgZm9yIGZvb3Rub3Rlc1xuICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICBbXCJCUlwiLCBcIkhSXCIsIFwiUFwiXS5pbmNsdWRlcyhib2R5Q2hpbGQudGFnTmFtZSksXG4gICAgICAgICAgICAgIGBVbmV4cGVjdGVkIHRhZyBuYW1lIFwiJHtib2R5Q2hpbGQudGFnTmFtZX1cIiBmb3IgYm9keSBjaGlsZGAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBTdGF5IGluIHRoZSBzYW1lIHN0YXRlIHRvIGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBwYXJhZ3JhcGhDaGlsZCA9IHBhcmFncmFwaENoaWxkIS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIHBhcmFncmFwaCBlbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudGV4dENvbnRlbnQpXG4gICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgIGlmIChsaW5lVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgbGluZUh0bWwgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGxpbmVFbGVtZW50cyA9IG51bGxcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJwYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzdWJBbGluZWFFbGVtZW50ID0gc3ViQWxpbmVhRWxlbWVudCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChzdWJBbGluZWFFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGFsaW5lYUVsZW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLiBHbyB0byBuZXh0IGFsaW5lYUVsZW1lbnQuXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwic3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJwYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBzd2l0Y2ggKHBhcmFncmFwaENoaWxkIS50YWdOYW1lKSB7XG4gICAgICAgICAgY2FzZSBcIkFcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJCUlwiOiB7XG4gICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC50ZXh0Q29udGVudClcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgaWYgKGxpbmVUZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVIdG1sID0gbGluZUVsZW1lbnRzIVxuICAgICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQub3V0ZXJIVE1MKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAoaXNNdWx0aUxpbmVzSGVhZGVyICYmIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzSHRtbCEucHVzaChsaW5lSHRtbClcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0IS5wdXNoKGxpbmVUZXh0KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZUVsZW1lbnRzID0gW11cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJERUxcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJJTUdcIjoge1xuICAgICAgICAgICAgbGluZUVsZW1lbnRzIS5wdXNoKHBhcmFncmFwaENoaWxkISlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJTUEFOXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBhcmFncmFwaENoaWxkIS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICAgICAgICAgICAgc3dpdGNoIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImFFbG9pUGFzdGlsbGVcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwiYUVsb2lQYXN0aWxsZTBcIjoge1xuICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdGlsbMOpIFNQQU4uXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiAtMyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCB0YWcgbmFtZSBmb3IgcGFyYWdyYXBoIGNoaWxkOiAke1xuICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2hpbGQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IFwibmV4dFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJzdWJBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoc3ViQWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHBhcmFncmFwaEVsZW1lbnQgPSBzdWJBbGluZWFFbGVtZW50XG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJUQUJMRVwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTQsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIHN1YiBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIHN1YkFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgICBzdGF0ZSA9IFwibmV4dFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgc3RhdGU6ICR7c3RhdGV9YFxuICAgIH1cbiAgfVxuXG4gIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuXG4gIHJldHVybiB7XG4gICAgZXJyb3I6IG51bGwsXG4gICAgaHRtbCxcbiAgICBwYWdlLFxuICAgIHN1YmRpdmlzaW9ucyxcbiAgICB1cmw6IGFzc2VtYmxlZVVybCxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVUZXh0ZUxvaVBhcnNlZChcbiAgZmV0Y2g6IChcbiAgICB1cmw6IHN0cmluZyB8IFJlcXVlc3QsXG4gICAgaW5pdD86IFJlcXVlc3RJbml0IHwgdW5kZWZpbmVkLFxuICApID0+IFByb21pc2U8UmVzcG9uc2U+LFxuICBhc3NlbWJsZWVVcmw6IHN0cmluZyxcbikge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFzc2VtYmxlZVVybClcbiAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IHJlc3BvbnNlLnN0YXR1cywgbWVzc2FnZTogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9LFxuICAgICAgcGFnZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlVGV4dGVMb2koYXNzZW1ibGVlVXJsLCBwYWdlKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7OzsrQ0FBQSxvSjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRU8sU0FBU0EsYUFBVCxDQUF1QkMsWUFBdkIsRUFBNkNDLElBQTdDLEVBQTJEO0VBQ2hFO0VBQ0EsSUFBTUMsWUFBWSxHQUFHRCxJQUFJLENBQUNFLEtBQUwsQ0FBVyxVQUFYLENBQXJCOztFQUNBQyxrQkFBQSxDQUFPQyxXQUFQLENBQW1CSCxZQUFZLENBQUNJLE1BQWhDLEVBQXdDLENBQXhDLEVBQTJDTCxJQUEzQzs7RUFDQSxJQUFJTSxJQUFJLEdBQUdMLFlBQVksQ0FBQyxDQUFELENBQVosQ0FBZ0JNLElBQWhCLEVBQVg7RUFDQSxJQUFBSixrQkFBQSxFQUFPRyxJQUFJLENBQUNFLFVBQUwsQ0FBZ0IsTUFBaEIsQ0FBUDtFQUNBLElBQUFMLGtCQUFBLEVBQU9HLElBQUksQ0FBQ0csUUFBTCxDQUFjLFFBQWQsQ0FBUDtFQUNBSCxJQUFJLGtCQUFXQSxJQUFJLENBQUNJLFNBQUwsQ0FBZSxDQUFmLEVBQWtCSixJQUFJLENBQUNELE1BQUwsR0FBYyxDQUFoQyxDQUFYLFlBQUosQ0FQZ0UsQ0FTaEU7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