@sapui5/sap.fe.core 1.108.2 → 1.108.3

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 (71) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/CommonUtils.js +7 -3
  6. package/src/sap/fe/core/CommonUtils.ts +2 -2
  7. package/src/sap/fe/core/TemplateModel.js +16 -2
  8. package/src/sap/fe/core/TemplateModel.ts +15 -1
  9. package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -1
  10. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1 -0
  11. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +386 -357
  12. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +260 -224
  13. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +1 -0
  14. package/src/sap/fe/core/converters/controls/Common/Action.js +4 -2
  15. package/src/sap/fe/core/converters/controls/Common/Action.ts +1 -1
  16. package/src/sap/fe/core/converters/controls/Common/Table.js +7 -10
  17. package/src/sap/fe/core/converters/controls/Common/Table.ts +6 -6
  18. package/src/sap/fe/core/helpers/BindingToolkit.js +2 -2
  19. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  20. package/src/sap/fe/core/helpers/ModelHelper.js +2 -2
  21. package/src/sap/fe/core/helpers/ModelHelper.ts +1 -1
  22. package/src/sap/fe/core/library.js +1 -1
  23. package/src/sap/fe/core/messagebundle_ar.properties +18 -18
  24. package/src/sap/fe/core/messagebundle_bg.properties +17 -17
  25. package/src/sap/fe/core/messagebundle_ca.properties +18 -18
  26. package/src/sap/fe/core/messagebundle_cs.properties +18 -18
  27. package/src/sap/fe/core/messagebundle_cy.properties +18 -18
  28. package/src/sap/fe/core/messagebundle_da.properties +18 -18
  29. package/src/sap/fe/core/messagebundle_el.properties +17 -17
  30. package/src/sap/fe/core/messagebundle_en_GB.properties +18 -18
  31. package/src/sap/fe/core/messagebundle_es.properties +9 -9
  32. package/src/sap/fe/core/messagebundle_es_MX.properties +17 -17
  33. package/src/sap/fe/core/messagebundle_et.properties +18 -18
  34. package/src/sap/fe/core/messagebundle_fi.properties +18 -18
  35. package/src/sap/fe/core/messagebundle_fr.properties +17 -17
  36. package/src/sap/fe/core/messagebundle_fr_CA.properties +18 -18
  37. package/src/sap/fe/core/messagebundle_hi.properties +18 -18
  38. package/src/sap/fe/core/messagebundle_hr.properties +18 -18
  39. package/src/sap/fe/core/messagebundle_hu.properties +17 -17
  40. package/src/sap/fe/core/messagebundle_id.properties +18 -18
  41. package/src/sap/fe/core/messagebundle_it.properties +17 -17
  42. package/src/sap/fe/core/messagebundle_iw.properties +18 -18
  43. package/src/sap/fe/core/messagebundle_ja.properties +21 -21
  44. package/src/sap/fe/core/messagebundle_kk.properties +18 -18
  45. package/src/sap/fe/core/messagebundle_ko.properties +18 -18
  46. package/src/sap/fe/core/messagebundle_lt.properties +17 -17
  47. package/src/sap/fe/core/messagebundle_lv.properties +18 -18
  48. package/src/sap/fe/core/messagebundle_ms.properties +18 -18
  49. package/src/sap/fe/core/messagebundle_nl.properties +18 -18
  50. package/src/sap/fe/core/messagebundle_no.properties +17 -17
  51. package/src/sap/fe/core/messagebundle_pl.properties +17 -17
  52. package/src/sap/fe/core/messagebundle_pt.properties +18 -18
  53. package/src/sap/fe/core/messagebundle_pt_PT.properties +18 -18
  54. package/src/sap/fe/core/messagebundle_ro.properties +17 -17
  55. package/src/sap/fe/core/messagebundle_ru.properties +18 -18
  56. package/src/sap/fe/core/messagebundle_sh.properties +17 -17
  57. package/src/sap/fe/core/messagebundle_sk.properties +17 -17
  58. package/src/sap/fe/core/messagebundle_sl.properties +18 -18
  59. package/src/sap/fe/core/messagebundle_sv.properties +17 -17
  60. package/src/sap/fe/core/messagebundle_th.properties +17 -17
  61. package/src/sap/fe/core/messagebundle_tr.properties +18 -18
  62. package/src/sap/fe/core/messagebundle_uk.properties +18 -18
  63. package/src/sap/fe/core/messagebundle_vi.properties +18 -18
  64. package/src/sap/fe/core/messagebundle_zh_CN.properties +17 -17
  65. package/src/sap/fe/core/messagebundle_zh_TW.properties +17 -17
  66. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +28 -53
  67. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +36 -67
  68. package/src/sap/fe/core/templating/PropertyHelper.js +23 -2
  69. package/src/sap/fe/core/templating/PropertyHelper.ts +17 -0
  70. package/src/sap/fe/core/templating/SemanticObjectHelper.js +56 -0
  71. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
@@ -2369,15 +2369,12 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
2369
2369
 
2370
2370
  function convertPropertyPathsToInfoNames(paths, columns) {
2371
2371
  var infoNames = [];
2372
+ var propertyInfo, annotationColumn;
2372
2373
  paths.forEach(function (currentPath) {
2373
- var _currentPath$$target;
2374
-
2375
- if (currentPath !== null && currentPath !== void 0 && (_currentPath$$target = currentPath.$target) !== null && _currentPath$$target !== void 0 && _currentPath$$target.name) {
2376
- var propertyInfo = columns.find(function (column) {
2377
- var _currentPath$$target2;
2378
-
2379
- var annotationColumn = column;
2380
- return !annotationColumn.propertyInfos && annotationColumn.relativePath === (currentPath === null || currentPath === void 0 ? void 0 : (_currentPath$$target2 = currentPath.$target) === null || _currentPath$$target2 === void 0 ? void 0 : _currentPath$$target2.name);
2374
+ if (currentPath !== null && currentPath !== void 0 && currentPath.value) {
2375
+ propertyInfo = columns.find(function (column) {
2376
+ annotationColumn = column;
2377
+ return !annotationColumn.propertyInfos && annotationColumn.relativePath === (currentPath === null || currentPath === void 0 ? void 0 : currentPath.value);
2381
2378
  });
2382
2379
 
2383
2380
  if (propertyInfo) {
@@ -2705,7 +2702,7 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
2705
2702
 
2706
2703
  return {
2707
2704
  quickFilters: {
2708
- enabled: converterContext.getTemplateType() === TemplateType.ListReport ? "{= ${pageInternal>hasPendingFilters} !== true}" : true,
2705
+ enabled: converterContext.getTemplateType() !== TemplateType.ListReport,
2709
2706
  showCounts: tableSettings === null || tableSettings === void 0 ? void 0 : (_tableSettings$quickV = tableSettings.quickVariantSelection) === null || _tableSettings$quickV === void 0 ? void 0 : _tableSettings$quickV.showCounts,
2710
2707
  paths: quickFilterPaths
2711
2708
  }
@@ -2866,4 +2863,4 @@ sap.ui.define(["sap/fe/core/converters/annotations/DataField", "sap/fe/core/conv
2866
2863
  getTypeConfig: getTypeConfig
2867
2864
  };
2868
2865
  }, false);
2869
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVPblNlbGVjdCIsImVuYWJsZUF1dG9TY3JvbGwiLCJlbmFibGVkIiwidmlzaWJsZSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImFubm90YXRpb25Db2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyIsIm1hbmlmZXN0Q29sdW1ucyIsImdldENvbHVtbnNGcm9tTWFuaWZlc3QiLCJjb2x1bW5zIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ3aWR0aCIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmF3RGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwib0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wZXJ0eSIsIm5hbWUiLCJxdWFsaWZpZXIiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwib0N0eERlZlByb3BlcnR5IiwidmFsdWUiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJmb3VuZENvbHVtbiIsInB1c2giLCJsZW5ndGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzIiwidGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb250cm9sIiwidHlwZSIsImFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImVuYWJsZUFuYWx5dGljcyIsImFnZ3JlZ2F0ZXMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImluZGV4T2YiLCJncm91cENvbmRpdGlvbnMiLCJnZXRHcm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzIiwiZmluZENvbHVtbkJ5UGF0aCIsIm9Qcm9wIiwib1VuaXQiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvVGltZXpvbmUiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSIsInNUaW1lem9uZSIsIkNvbW1vbiIsIlRpbWV6b25lIiwib1VuaXRDb2x1bW4iLCJzVW5pdCIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFRleHQiLCJvVGltZXpvbmVDb2x1bW4iLCJ0aW1lem9uZSIsInRpbWV6b25lVGV4dCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiVUkiLCJIZWFkZXJJbmZvIiwiVGl0bGUiLCJWYWx1ZSIsInNlbWFudGljS2V5QW5ub3RhdGlvbnMiLCJTZW1hbnRpY0tleSIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInZpZXdDb25maWd1cmF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlckluZm9UaXRsZSIsInNlbWFudGljS2V5cyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0QmluZGluZ0V4cEZyb21Db250ZXh0Iiwic291cmNlIiwic0V4cHJlc3Npb24iLCJzUGF0aCIsInN1YnN0cmluZyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNOYXZpZ2F0aW9uUGF0aCIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwiY29uc3RhbnQiLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwic29tZSIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiYWN0aW9uS2V5IiwiYWN0aW9uIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiYk1hc3NFZGl0RW5hYmxlZCIsImlmRWxzZSIsImFuZCIsIklzRWRpdGFibGUiLCJNdWx0aSIsIkF1dG8iLCJTaW5nbGUiLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsInRhYmxlQWN0aW9uIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsIkRldGVybWluaW5nIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm5vdCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJEZWZhdWx0IiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiTW9kZWxIZWxwZXIiLCJpc1NpbmdsZXRvbiIsIkNyaXRpY2FsaXR5IiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsInByZXNzIiwicm93TmF2aWdhdGVkIiwiSXNJbmFjdGl2ZSIsImNvbHVtbnNUb0JlQ3JlYXRlZCIsIm5vblNvcnRhYmxlQ29sdW1ucyIsInRhYmxlVHlwZSIsInRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiIsInByb3BlcnR5IiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbiIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJyZWxhdGVkQ29sdW1ucyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJ1c2VEYXRhRmllbGRQcmVmaXgiLCJhdmFpbGFibGVGb3JBZGFwdGF0aW9uIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc0hpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwiaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkiLCJleHBvcnRUeXBlIiwic0RhdGVJbnB1dEZvcm1hdCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJvVHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiX2lzRXhwb3J0YWJsZUNvbHVtbiIsIm9Vbml0UHJvcGVydHkiLCJvVGltZXpvbmVQcm9wZXJ0eSIsInNVbml0VGV4dCIsInNUaW1lem9uZVRleHQiLCJpbnB1dEZvcm1hdCIsInNjYWxlIiwiZGVsaW1pdGVyIiwiY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyIsIkFubm90YXRpb24iLCJsYWJlbCIsImdldExhYmVsIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwic2VtYW50aWNPYmplY3RQYXRoIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJEYXRhRmllbGREZWZhdWx0IiwiVGFyZ2V0IiwiJHRhcmdldCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInR5cGVDb25maWciLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJnZXRJbXBvcnRhbmNlIiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5VHlwZSIsImlzUHJvcGVydHkiLCJDb3JlIiwiTWVkaWFUeXBlIiwidGVybSIsImlzVVJMIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJOb2RlTGV2ZWwiLCJfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZGF0YUZpZWxkR3JvdXAiLCJmaWVsZEZvcm1hdE9wdGlvbnMiLCJhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiRGF0YSIsImlubmVyRGF0YUZpZWxkIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkYXRhRmllbGREZWZhdWx0IiwiTGFiZWwiLCJpc0RhdGFGaWVsZFR5cGVzIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSIsImNvbE5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsIm5ld05hbWUiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCIsImZpZWxkR3JvdXBOYW1lIiwib0NvbHVtbnMiLCJhQ29sdW1uS2V5cyIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJfZ2V0UmVsYXRpdmVQYXRoIiwiaXNMYXN0U2xhc2giLCJpc0xhc3RQYXJ0IiwiaVNsYXNoSW5kZXgiLCJsYXN0SW5kZXhPZiIsIl9pc0NvbHVtblNvcnRhYmxlIiwicHJvcGVydHlQYXRoIiwiZmlsdGVyRnVuY3Rpb25zIiwiX2dldEZpbHRlckZ1bmN0aW9ucyIsImlzQXJyYXkiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNFZGl0IiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyIsImFTZW1hbnRpY0tleVZhbHVlcyIsImJTZW1hbnRpY0tleUZvdW5kIiwiaSIsInZhbHVlcyIsInNlbWFudGljS2V5Rm91bmQiLCJfZmluZFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleVZhbHVlcyIsImZpZWxkR3JvdXBQcm9wZXJ0aWVzIiwic2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCIsInNQcm9wZXJ0eVBhdGgiLCJ0bXAiLCJmaWVsZEdyb3VwUHJvcGVydHlQYXRoIiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cCIsImFQcm9wZXJ0aWVzIiwiX3Byb3BlcnRpZXNGb3VuZCIsImlzRmllbGRHcm91cENvbHVtbiIsInNlbWFudGljS2V5Iiwic2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJmb3JtYXRPcHRpb25zT2JqIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzZW1hbnRpY2tleXMiLCJvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eSIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiX2dldERhdGFGaWVsZEltcG9ydGFuY2UiLCJfZ2V0TWF4SW1wb3J0YW5jZSIsImZpZWxkcyIsIm1heEltcE51bWJlciIsImltcE51bWJlciIsIkRhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIiwiZmllbGQiLCJmaWVsZHNXaXRoSW1wb3J0YW5jZSIsIm1hcFNlbWFudGljS2V5cyIsImZpZWxkR3JvdXBEYXRhIiwiZmllbGRHcm91cEhhc1NlbWFudGljS2V5IiwiZmllbGRHcm91cERhdGFGaWVsZCIsIkhpZ2giLCJmaWx0ZXIiLCJpdGVtIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwibGluZUl0ZW0iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsInJlbGF0ZWRQcm9wZXJ0aWVzIiwiaXNTdGF0aWNhbGx5SGlkZGVuIiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJzTGFiZWwiLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbiIsIkhUTUw1IiwiQ3NzRGVmYXVsdHMiLCJyZWxhdGVkUHJvcGVydHlOYW1lIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZSIsIl9nZXRQcm9wZXJ0eU5hbWVzIiwibWF0Y2hlZFByb3BlcnRpZXMiLCJyZXNvbHZlUGF0aCIsIl9hcHBlbmRDdXN0b21UZW1wbGF0ZSIsImludGVybmFsQ29sdW1ucyIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImlzU2xvdENvbHVtbiIsIm1hbmlmZXN0Q29sdW1uIiwiU2xvdCIsImlzQ3VzdG9tQ29sdW1uIiwiX3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMiLCJhbm5vdGF0aW9uVGFibGVDb2x1bW5zIiwicHJvcCIsInJlcGxhY2UiLCJ2YWxpZGF0ZUtleSIsImJhc2VUYWJsZUNvbHVtbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJiYXNlTWFuaWZlc3RDb2x1bW4iLCJoZWFkZXIiLCJIb3Jpem9udGFsQWxpZ24iLCJCZWdpbiIsImlkIiwiY3VzdG9tVGFibGVDb2x1bW4iLCJtZXNzYWdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIkFubm90YXRpb25Db2x1bW5zIiwiSW52YWxpZEtleSIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImFnZ3JlZ2F0ZSIsIkxpc3RSZXBvcnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJub25Tb3J0YWJsZVByb3BlcnRpZXMiLCJzb3J0Q29uZGl0aW9ucyIsIlNvcnRPcmRlciIsInNvcnRlcnMiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiVG90YWwiLCJhVG90YWxzIiwidGl0bGUiLCJUeXBlTmFtZVBsdXJhbCIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJnZXRUYWJsZUlEIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsIm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRNYXNzRWRpdFZpc2liaWxpdHkiLCJpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwic3RhbmRhcmRBY3Rpb25zIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSIsInBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsIm1hc3NFZGl0IiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImNyZWF0aW9uUm93IiwiZ2V0Q3JlYXRpb25Sb3ciLCJlbnRpdHlOYW1lIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsInJvdyIsImlzSW5EaXNwbGF5TW9kZSIsImF1dG9CaW5kT25Jbml0Iiwic2VhcmNoYWJsZSIsImlzQ29tcGxleFByb3BlcnR5IiwiZXhwb3J0RGF0YVR5cGUiLCJzdWJzdHIiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwidGV4dCIsIl9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSIsImlzSXBob25lIiwiZW5hYmxlRnVsbFNjcmVlbiIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVUeXBlIiwiaXNEZXNrdG9wIiwiX2dldEdyaWRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJzIiwiaGlkZVRhYmxlVGl0bGUiLCJoZWFkZXJWaXNpYmxlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdlByb3BlcnR5IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJncmlkVGFibGVSb3dNb2RlIiwib0NvbmZpZ3VyYXRpb24iLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlTWFzc0VkaXQiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInVuZGVybHlpbmdUeXBlIiwiJFNjYWxlIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsIm1heExlbmd0aCIsIiRNYXhMZW5ndGgiLCJudWxsYWJsZSIsIiROdWxsYWJsZSIsIm1pbmltdW0iLCJpc05hTiIsIlZhbGlkYXRpb24iLCJNaW5pbXVtIiwibWF4aW11bSIsIk1heGltdW0iLCJpc0RpZ2l0U2VxdWVuY2UiLCJJc0RpZ2l0U2VxdWVuY2UiLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0RW50aXR5VHlwZSxcblx0RW51bVZhbHVlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGgsXG5cdFR5cGVEZWZpbml0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB7IEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxleFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0aXNEYXRhRmllbGRBbHdheXNIaWRkZW4sXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkVHlwZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIENvbWJpbmVkQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LCBpc0FjdGlvbk5hdmlnYWJsZSwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhTZWFyY2hhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBFRE1fVFlQRV9NQVBQSU5HLCBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0Rm9ybWF0T3B0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEhvcml6b250YWxBbGlnbixcblx0SW1wb3J0YW5jZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIH0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGdldENyZWF0ZVZpc2liaWxpdHksXG5cdGdldENyZWF0aW9uUm93LFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0TWFzc0VkaXRWaXNpYmlsaXR5LFxuXHRnZXRSZXN0cmljdGlvbnMsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG50eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRyb3dDb3VudE1vZGU6IEdyaWRUYWJsZVJvd0NvdW50TW9kZTtcblx0cm93Q291bnQ6IG51bWJlcjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGlubGluZUNyZWF0aW9uUm93Q291bnQ/OiBudW1iZXI7XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0NvbXBhY3RUeXBlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVHlwZSA9IFwiR3JpZFRhYmxlXCIgfCBcIlJlc3BvbnNpdmVUYWJsZVwiIHwgXCJBbmFseXRpY2FsVGFibGVcIjtcbmV4cG9ydCB0eXBlIEdyaWRUYWJsZVJvd0NvdW50TW9kZSA9IFwiQXV0b1wiIHwgXCJGaXhlZFwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZSAoQ3VzdG9tIENvbHVtbilcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuLy8gQ3VzdG9tIENvbHVtbiBmcm9tIE1hbmlmZXN0XG5leHBvcnQgdHlwZSBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU/OiBDb2x1bW5UeXBlLkRlZmF1bHQ7XG59O1xuXG4vLyBTbG90IENvbHVtbiBmcm9tIEJ1aWxkaW5nIEJsb2NrXG5leHBvcnQgdHlwZSBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uID0gQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlLlNsb3Q7XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGFsbCBDb2x1bW5UeXBlcyBoYXZlOlxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbVxuXHR3aWR0aD86IHN0cmluZztcblx0aW1wb3J0YW5jZT86IEltcG9ydGFuY2U7XG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xufTtcblxuLy8gUHJvcGVydGllcyBvbiBDdXN0b20gQ29sdW1ucyBhbmQgU2xvdCBDb2x1bW5zXG5leHBvcnQgdHlwZSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdHdyYXA6IGJvb2xlYW47XG5cdH0gfCBudWxsO1xuXHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IG51bWJlciB9O1xuXHRpc0dyb3VwYWJsZTogYm9vbGVhbjtcblx0aXNOYXZpZ2FibGU6IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH07XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGZvciBBbm5vdGF0aW9uIENvbHVtbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdGlzR3JvdXBhYmxlOiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3M/OiBleHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5PzogYm9vbGVhbjtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogb2JqZWN0O1xuXHRpc1BhcnRPZkxpbmVJdGVtPzogYm9vbGVhbjsgLy8gdGVtcG9yYXJ5IGluZGljYXRvciB0byBvbmx5IGFsbG93IGZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hlbiB0aGV5J3JlIHBhcnQgb2YgYSBsaW5lIGl0ZW1cblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgZXhwb3J0U2V0dGluZ3MgPSBQYXJ0aWFsPHtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0d3JhcDogYm9vbGVhbjtcblx0dHlwZTogc3RyaW5nO1xuXHRpbnB1dEZvcm1hdDogc3RyaW5nO1xuXHRmb3JtYXQ6IHN0cmluZztcblx0c2NhbGU6IG51bWJlcjtcblx0ZGVsaW1pdGVyOiBib29sZWFuO1xuXHR1bml0OiBzdHJpbmc7XG5cdHVuaXRQcm9wZXJ0eTogc3RyaW5nO1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHR0aW1lem9uZVByb3BlcnR5OiBzdHJpbmc7XG5cdHV0YzogYm9vbGVhbjtcbn0+O1xuXG5leHBvcnQgdHlwZSBWaXN1YWxTZXR0aW5ncyA9IHtcblx0d2lkdGhDYWxjdWxhdGlvbj86IFdpZHRoQ2FsY3VsYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdGluY2x1ZGVMYWJlbD86IGJvb2xlYW47XG5cdGdhcD86IG51bWJlcjtcblx0Ly8gb25seSByZWxldmFudCBmb3IgY29tcGxleCB0eXBlc1xuXHRleGNsdWRlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR2ZXJ0aWNhbEFycmFuZ2VtZW50PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29sdW1uID0gQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcbmV4cG9ydCB0eXBlIE1hbmlmZXN0Q29sdW1uID0gQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRhZ2dyZWdhdGVzPzogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT47XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUFuYWx5dGljc1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbi1iYXNlZCBhbmQgbWFuaWZlc3QtYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFUYWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucztcblx0Y29uc3QgYUhpZGRlbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHRydWUsXG5cdFx0YUhpZGRlbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIHtcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRlbmFibGVPblNlbGVjdDogXCJvdmVyd3JpdGVcIixcblx0XHRlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsXG5cdFx0dmlzaWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCIsXG5cdFx0Y29tbWFuZDogXCJvdmVyd3JpdGVcIlxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdFwiYWN0aW9uc1wiOiBhY3Rpb25zLFxuXHRcdFwiY29tbWFuZEFjdGlvbnNcIjogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdENvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSwgbWFuaWZlc3RDb2x1bW5zIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VGFibGVDb2x1bW4+Piwge1xuXHRcdHdpZHRoOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGltcG9ydGFuY2U6IFwib3ZlcndyaXRlXCIsXG5cdFx0aG9yaXpvbnRhbEFsaWduOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGF2YWlsYWJpbGl0eTogXCJvdmVyd3JpdGVcIixcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHRmb3JtYXRPcHRpb25zOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5Gcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuYWRkKG9UYWJsZUNvbHVtbi51bml0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IG1SYXdEZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0YUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBvQWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChvUHJvcGVydHkpID0+IHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cblx0XHRpZiAob0FnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdG1SYXdEZWZpbml0aW9uc1tvQWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcblx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAoKG9DdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IG1SZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+ID0ge307XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IG1SYXdEZWZpbml0aW9uc1tvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblxuXHRcdFx0Ly8gSWdub3JlIGFnZ3JlZ2F0ZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgYW5kIGR1bW15IGNyZWF0ZWQgcHJvcGVydHkgZm9yIGRhdGFwb2ludCB0YXJnZXQgVmFsdWVcblx0XHRcdGlmIChcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiZcblx0XHRcdFx0IW1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuaGFzKG9UYWJsZUNvbHVtbi5uYW1lKSAmJlxuXHRcdFx0XHQhb1RhYmxlQ29sdW1uLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5XG5cdFx0XHQpIHtcblx0XHRcdFx0bVJlc3VsdFtvVGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5Gcm9tUGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0YUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1SZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljc1NlYXJjaCA9IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPyBhbGxvd2VkVHJhbnNmb3JtYXRpb25zLmluZGV4T2YoXCJzZWFyY2hcIikgPj0gMCA6IHRydWU7XG5cblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3A6IFByb3BlcnR5KSA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgb1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgc1RpbWV6b25lID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKG9Vbml0Lm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHRleHRBbm5vdGF0aW9uKSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0Py5wYXRoO1xuXHRjb25zdCBzZW1hbnRpY0tleUFubm90YXRpb25zOiBhbnlbXSB8IHVuZGVmaW5lZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLnB1c2gob0NvbHVtbi52YWx1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0gZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWVcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSh7fSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIFtdLCBbXSwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCBbXSk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3Mob1Zpc3VhbGl6YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRyZXR1cm4gQWN0aW9uSGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIFwidGFibGVcIiwgY29udmVydGVyQ29udGV4dCk7XG59XG5cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHVwZGF0YWJsZSBwcm9wZXJ0eSBmb3IgdGhlIHJvd3NcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgdXBkYXRhYmxlID0gcmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSAoZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIGFueSk/LnBhdGg7XG5cblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiBvcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBvcGVyYXRpb25BdmFpbGFibGVNYXBbYWN0aW9uTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gQW5ub3RhdGlvbiBjb25maWd1cmVkIHdpdGggZXhwbGljaXQgJ251bGwnIChhY3Rpb24gYWR2ZXJ0aXNlbWVudCByZWxldmFudClcblx0XHRcdHByb3BlcnRpZXMuYWRkKGFjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnR5IHBhdGhzIGFuZCBub3QgQ29uc3RhbnQgdmFsdWVzLlxuXHRcdFx0cHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRpZiAocHJvcGVydGllcy5zaXplKSB7XG5cdFx0Ly8gU29tZSBhY3Rpb25zIGhhdmUgYW4gb3BlcmF0aW9uIGF2YWlsYWJsZSBiYXNlZCBvbiBwcm9wZXJ0eSAtLT4gd2UgbmVlZCB0byBsb2FkIHRoZSBIZWFkZXJJbmZvLlRpdGxlIHByb3BlcnR5XG5cdFx0Ly8gc28gdGhhdCB0aGUgZGlhbG9nIG9uIHBhcnRpYWwgYWN0aW9ucyBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgKEJDUCAyMTgwMjcxNDI1KVxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCB0aXRsZVByb3BlcnR5ID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoO1xuXHRcdGlmICh0aXRsZVByb3BlcnR5KSB7XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZCh0aXRsZVByb3BlcnR5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIHJldHVybnMgYWxsIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIEFsbCB0aGUgYFVJLkhpZGRlbmAgcGF0aCBleHByZXNzaW9ucyBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChlcXVhbChnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoZGF0YUZpZWxkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCwgaXNFbnRpdHlTZXQpLCBmYWxzZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGNvbnRleHQgY3VycmVudGx5IHJlZmVyZW5jZWQgYnkgdGhpcyBiaW5kaW5nIGJ5IHJlbW92aW5nIHRoZSBsYXN0IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKlxuICogSXQgaXMgdXNlZCAoc3BlY2lmaWNhbGx5IGluIHRoaXMgY2FzZSksIHRvIHRyYW5zZm9ybSBhIGJpbmRpbmcgbWFkZSBmb3IgYSBOYXZQcm9wIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEvTmF2UHJvcDIsXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqXG4gKiBAcGFyYW0gc291cmNlIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvblxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdHNvdXJjZTogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+IHtcblx0bGV0IHNFeHByZXNzaW9uOiBhbnkgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0KSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9IGVsc2Uge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlO1xuXHR9XG5cdGxldCBzUGF0aDogc3RyaW5nO1xuXHRpZiAoc0V4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kIGNoZWNrXG4gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciAoYW5kIHJlcXVpcmVzIGEgY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0aXNFbnRpdHlTZXRcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXG5cdC8vIE5vIGFjdGlvbiByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHRpZiAoXG5cdFx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHQoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgYk1hc3NFZGl0RW5hYmxlZClcblx0KSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRcdC8vIEJ1aWxkaW5nIGV4cHJlc3Npb24gZm9yIGRlbGV0ZSBhbmQgbWFzcyBlZGl0XG5cdFx0XHRcdGNvbnN0IGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gb3IoXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHRcdH1cblx0XHRcdC8vIEVudGl0eVNldCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBleGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgJiYgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHRhYmxlIGFubm90YXRpb24gYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgdGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGxldCB0YWJsZUFjdGlvbjogQW5ub3RhdGlvbkFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdCEoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuSW5saW5lICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuRGV0ZXJtaW5pbmdcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uczogaGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBhbnlbXSA9IFtdO1xuXHR0YXJnZXRFbnRpdHlUeXBlPy5rZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCB1bmRlZmluZWQpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRpc0RyYWZ0Um9vdCAmJiBFbnRpdHkuSGFzQWN0aXZlLFxuXHRcdFx0aXNEcmFmdFJvb3QgJiYgRW50aXR5LklzQWN0aXZlLFxuXHRcdFx0YCR7aXNEcmFmdFJvb3R9YCxcblx0XHRcdC4uLmFNaXNzaW5nS2V5c1xuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zQ29tbW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24sXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjtcblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0ICYmICFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbih0YXJnZXRFbnRpdHlTZXQpKSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFwiQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdFx0KE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8IE1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpXG5cdFx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSwgZmFsc2UsIHRhcmdldEVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W3BhdGhJbk1vZGVsKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoVUkuSXNJbmFjdGl2ZSkpXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJbmNsdWRlIHRleHQgcHJvcGVydGllcyBmb3VuZCBkdXJpbmcgYW5hbHlzaXMgb24gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9uc1xuXHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24ucHVzaCguLi5yZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdF0pWzBdO1xuXHRcdFx0Y29uc3Qgb0NvbHVtbkRyYWZ0SW5kaWNhdG9yID0gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKGNvbHVtbkluZm8ubmFtZSwgc2VtYW50aWNLZXlzLCBmYWxzZSwgbnVsbCk7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0NvbHVtbkRyYWZ0SW5kaWNhdG9yKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0XHQuLi5vQ29sdW1uRHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyA9IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdC4uLmNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdCA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBhIHByb3BlcnR5IGhhcyBkZWZpbmVkIGEgI1RleHRPbmx5IHRleHQgYXJyYW5nZW1lbnQgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZGUgYWxzbyBmcm9tIHRoZSBjb2x1bW5zIGFkZGVkIHZpYSBMaW5lSXRlbXMgb3IgZnJvbSBhIGNvbHVtbiBhdmFpbGFibGUgb24gdGhlIHAxM24uXG5cdFx0aWYgKGdldERpc3BsYXlNb2RlKHByb3BlcnR5KSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMgPSBub25Tb3J0YWJsZUNvbHVtbnMuY29uY2F0KHByb3BlcnR5Lm5hbWUpO1xuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRbXVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHR0YWJsZUNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IGBQcm9wZXJ0eTo6JHtyZWxhdGl2ZVBhdGh9YDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk6IGJvb2xlYW4gPSBuYW1lLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTE7XG5cdGNvbnN0IGV4cG9ydFR5cGU6IHN0cmluZyA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlKTtcblx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShwcm9wZXJ0eSk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9ICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IGdldFR5cGVDb25maWcocHJvcGVydHksIGRhdGFUeXBlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XSlbMF07XG5cdGNvbnN0IGlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiA9XG5cdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uICYmIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5pbmRleE9mKHJlbGF0aXZlUGF0aCkgPj0gMDtcblx0Y29uc3Qgc29ydGFibGUgPVxuXHRcdCghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRcdFx0b0Zvcm1hdE9wdGlvbnM6IHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRvQ29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KVxuXHRcdCAgfVxuXHRcdDogbnVsbDtcblxuXHRpZiAoIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmIF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0Y29uc3Qgb1VuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBvVGltZXpvbmVQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBzVW5pdFRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdGNvbnN0IHNUaW1lem9uZVRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdFx0ZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHR0eXBlOiBleHBvcnRUeXBlLFxuXHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRzY2FsZTogcHJvcGVydHkuc2NhbGUsXG5cdFx0XHRkZWxpbWl0ZXI6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkludDY0XCJcblx0XHR9O1xuXHRcdGlmIChvVW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSBvVW5pdFByb3BlcnR5Lm5hbWU7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHR9IGVsc2UgaWYgKHNVbml0VGV4dCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IGAke3NVbml0VGV4dH1gO1xuXHRcdH1cblx0XHRpZiAob1RpbWV6b25lUHJvcGVydHkpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkgPSBvVGltZXpvbmVQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudXRjID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChzVGltZXpvbmVUZXh0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHNUaW1lem9uZVRleHQudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMocmVsYXRpdmVQYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCksXG5cdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKHByb3BlcnR5KSA6IG51bGwsXG5cdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHQvLyBBIGZha2UgcHJvcGVydHkgd2FzIGNyZWF0ZWQgZm9yIHRoZSBUYXJnZXRWYWx1ZSB1c2VkIG9uIERhdGFQb2ludHMsIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhpZGRlbiBhbmQgbm9uIHNvcnRhYmxlXG5cdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0IWF2YWlsYWJsZUZvckFkYXB0YXRpb24gfHwgaXNIaWRkZW4gfHwgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuQWRhcHRhdGlvbixcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHJlbGF0aXZlUGF0aDogaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHRcdD8gKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LlZhbHVlPy5wYXRoIHx8IChwcm9wZXJ0eSBhcyBhbnkpLlZhbHVlLnBhdGhcblx0XHRcdDogcmVsYXRpdmVQYXRoLFxuXHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogc29ydGFibGUsXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KTtcblx0aWYgKHNUb29sdGlwKSB7XG5cdFx0b0NvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdH1cblxuXHRyZXR1cm4gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbnMsIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIGRhdGFGaWVsZCBvciBwcm9wZXJ0eSB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1uLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIF9pc0V4cG9ydGFibGVDb2x1bW4oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5VHlwZSwgcHJvcGVydHk7XG5cdGNvbnN0IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eVR5cGUgPSAoc291cmNlIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LiRUeXBlO1xuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UgJiYgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5VHlwZSkpIHtcblx0XHRwcm9wZXJ0eVR5cGUgPSBkYXRhRmllbGREZWZhdWx0UHJvcGVydHlUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5ID0gc291cmNlIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdFx0cHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHQvL0ZvciBDaGFydFxuXHRcdFx0cHJvcGVydHlUeXBlID0gKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldC4kdGFyZ2V0LiRUeXBlO1xuXHRcdFx0cmV0dXJuIFVJQW5ub3RhdGlvblR5cGVzLkNoYXJ0RGVmaW5pdGlvblR5cGUuaW5kZXhPZihwcm9wZXJ0eVR5cGUpID09PSAtMTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5NZWRpYVR5cGU/LnRlcm0gPT09IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVkaWFUeXBlXCIgJiZcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uaXNVUkwgIT09IHRydWVcblx0XHQpIHtcblx0XHRcdC8vRm9yIFN0cmVhbVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlUeXBlXG5cdFx0PyBbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHRcdCAgXS5pbmRleE9mKHByb3BlcnR5VHlwZSkgPT09IC0xXG5cdFx0OiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKlxuICogU0FQIEZpb3JpIGVsZW1lbnRzIHdpbGwgZXZhbHVhdGUgZWl0aGVyIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBkZWZpbmVkIG9uIHRoZSBhbm5vdGF0aW9uIGl0c2VsZiBvciBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKiBAcGFyYW0gW2Zvcm1hdE9wdGlvbnNdIEZvcm1hdE9wdGlvbnMgb3B0aW9uYWwuXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyBUaGlzIGZsYWcgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgYW5hbHl0aWMgdGFibGUgaGFzIEdyb3VwSGVhZGVyIGV4cGFuZGVkLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Zm9ybWF0T3B0aW9ucz86IGFueVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRsZXQgcHJvcGVydHlWYWx1ZTtcblx0aWYgKHRhcmdldE9iamVjdCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0T2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHQvLyBpZiBpdCBpcyBhIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQ/LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6IGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gZXF1YWwoVUkuTm9kZUxldmVsLCAwKSA6IGNvbnN0YW50KGZhbHNlKTtcblxuXHQvLyBBIGRhdGEgZmllbGQgaXMgdmlzaWJsZSBpZjpcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIG9yaWdpbmFsIGFubm90YXRpb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSB0YXJnZXQgcHJvcGVydHkgZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gaW4gY2FzZSBvZiBBbmFseXRpY3MgaXQncyBub3QgdmlzaWJsZSBmb3IgYW4gZXhwYW5kZWQgR3JvdXBIZWFkZXJcblx0cmV0dXJuIGFuZChcblx0XHQuLi5bXG5cdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdCEhcHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSAmJiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRvcihub3QoaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCksIGlzQW5hbHl0aWNhbExlYWYpXG5cdFx0XVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMgRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgVGhpcyBmbGFnIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGFuYWx5dGljIHRhYmxlIGhhcyBHcm91cEhlYWRlciBleHBhbmRlZC5cbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IGFueVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2Uob3IoLi4uYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gW3Byb3BlcnR5XSBQcm9wZXJ0eSwgRGF0YUZpZWxkIG9yIE5hdmlnYXRpb24gUHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBpc0dyb3VwXG4gKiBAcmV0dXJucyBMYWJlbCBvZiB0aGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5LCBpc0dyb3VwID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0VG9vbHRpcCA9IGZ1bmN0aW9uIChzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhcG9pbnRUYXJnZXQuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShjb2xOYW1lOiBzdHJpbmcsIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBCb29sZWFuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRwYXRoSW5Nb2RlbChgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRjb2xOYW1lLFxuXHRcdFx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHwgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGBQcm9wZXJ0eTo6JHtuYW1lfWA7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbSA9IHJlbGF0ZWRDb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbTtcblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSAmJlxuXHRcdFx0XHRleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvKTtcblx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lm1hcChcblx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHQpO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cE5hbWUgVGhlIGBEYXRhRmllbGRgIG5hbWUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiBvQ29sdW1uc1trZXldLnNob3dEYXRhRmllbGRzTGFiZWw7XG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IGRhdGFGaWVsZD8uVGFyZ2V0Py52YWx1ZTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlbGF0aXZlUGF0aDtcbn07XG5cbmNvbnN0IF9zbGljZUF0U2xhc2ggPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBpc0xhc3RTbGFzaDogYm9vbGVhbiwgaXNMYXN0UGFydDogYm9vbGVhbikge1xuXHRjb25zdCBpU2xhc2hJbmRleCA9IGlzTGFzdFNsYXNoID8gcGF0aC5sYXN0SW5kZXhPZihcIi9cIikgOiBwYXRoLmluZGV4T2YoXCIvXCIpO1xuXG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEgJiYgLy8gQ29sdW1uIGlzIG5vdCBtYXJrZWQgYXMgbm9uLXNvcnRhYmxlIHZpYSBhbm5vdGF0aW9uXG5cdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgZmlsdGVyRnVuY3Rpb25zOiBGaWx0ZXJGdW5jdGlvbnMgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRnVuY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShmaWx0ZXJGdW5jdGlvbnMpID8gKGZpbHRlckZ1bmN0aW9ucyBhcyBTdHJpbmdbXSkuaW5kZXhPZihcInRvbG93ZXJcIikgPT09IC0xIDogdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJGdW5jdGlvbnMoQ29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGlmIChNb2RlbEhlbHBlci5pc1NpbmdsZXRvbihDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgY2FwYWJpbGl0aWVzID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXM7XG5cdHJldHVybiBjYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9ucyB8fCBDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogYW55W10sIG5hbWU6IHN0cmluZyk6IGFueSB7XG5cdGNvbnN0IGFTZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IGJTZW1hbnRpY0tleUZvdW5kID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0dmFsdWVzOiBhU2VtYW50aWNLZXlWYWx1ZXMsXG5cdFx0c2VtYW50aWNLZXlGb3VuZDogYlNlbWFudGljS2V5Rm91bmRcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBhbnlbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IGFueVtdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluZGV4T2YodG1wKSA+PSAwKSkge1xuXHRcdFx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5VmFsdWVzW2ldO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eVBhdGhcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBbXSk6IGFueSB7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBhbnkgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gaXNGaWVsZEdyb3VwQ29sdW1uXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBhbnlbXSxcblx0aXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuLFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbikge1xuXHRpZiAoIXNlbWFudGljS2V5cykge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBzZW1hbnRpY0tleSA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzLCBuYW1lKTtcblx0Y29uc3Qgc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgPSBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwLCBzZW1hbnRpY0tleS52YWx1ZXMpO1xuXHRpZiAoc2VtYW50aWNLZXkuc2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnNPYmo6IGFueSA9IHtcblx0XHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNrZXlzOiBzZW1hbnRpY0tleS52YWx1ZXMsXG5cdFx0XHRvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCBmYWxzZSkpXG5cdFx0fTtcblx0XHRpZiAoaXNGaWVsZEdyb3VwQ29sdW1uICYmIHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRcdGZvcm1hdE9wdGlvbnNPYmpbXCJvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eVwiXSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpO1xuXHRcdFx0Zm9ybWF0T3B0aW9uc09ialtcImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFwiXSA9IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdE9wdGlvbnNPYmo7XG5cdH0gZWxzZSBpZiAoIXNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRyZXR1cm4ge307XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpZWxkR3JvdXBOYW1lOiBuYW1lLFxuXHRcdFx0b2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHk6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHQvL0V2YWx1YXRlIGRlZmF1bHQgSW1wb3J0YW5jZSBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcblx0bGV0IGZpZWxkc1dpdGhJbXBvcnRhbmNlLCBtYXBTZW1hbnRpY0tleXM6IGFueTtcblx0Ly9DaGVjayBpZiBzZW1hbnRpY0tleXMgYXJlIGRlZmluZWQgYXQgdGhlIEVudGl0eVNldCBsZXZlbFxuXHRpZiAoc2VtYW50aWNLZXlzICYmIHNlbWFudGljS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bWFwU2VtYW50aWNLZXlzID0gc2VtYW50aWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSAoZGF0YUZpZWxkIGFzIGFueSkuVGFyZ2V0W1wiJHRhcmdldFwiXVtcIkRhdGFcIl0gYXMgRmllbGRHcm91cFR5cGUsXG5cdFx0XHRmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkgPVxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YSAmJlxuXHRcdFx0XHQoZmllbGRHcm91cERhdGEgYXMgYW55KS5zb21lKGZ1bmN0aW9uIChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChmaWVsZEdyb3VwRGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aCAmJlxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdFx0bWFwU2VtYW50aWNLZXlzICYmXG5cdFx0XHRcdFx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGZpZWxkR3JvdXBEYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdC8vSWYgYSBGaWVsZEdyb3VwIGNvbnRhaW5zIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHRpZiAoZmllbGRHcm91cEhhc1NlbWFudGljS2V5KSB7XG5cdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5IaWdoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL0lmIHRoZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBJbXBvcnRhbmNlIHdlIHRha2UgaXRcblx0XHRcdGlmIChkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSkge1xuXHRcdFx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZWxzZSB0aGUgaGlnaGVzdCBpbXBvcnRhbmNlIChpZiBhbnkpIGlzIHJldHVybmVkXG5cdFx0XHRmaWVsZHNXaXRoSW1wb3J0YW5jZSA9XG5cdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdChmaWVsZEdyb3VwRGF0YSBhcyBhbnkpLmZpbHRlcihmdW5jdGlvbiAoaXRlbTogRGF0YUZpZWxkVHlwZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gaXRlbT8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBfZ2V0TWF4SW1wb3J0YW5jZShmaWVsZHNXaXRoSW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlc1tdKTtcblx0XHR9XG5cdFx0Ly9JZiB0aGUgY3VycmVudCBmaWVsZCBpcyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdH1cblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlICYmXG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoICYmXG5cdFx0bWFwU2VtYW50aWNLZXlzICYmXG5cdFx0bWFwU2VtYW50aWNLZXlzLmluY2x1ZGVzKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGgpXG5cdFx0PyBJbXBvcnRhbmNlLkhpZ2hcblx0XHQ6IF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge30sXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSxcblx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHR0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRjb25zdCB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGxpbmVJdGVtKSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHRsZXQgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHRcdFx0Ly8gRGV0ZXJtaW5lIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoaXMgTGluZUl0ZW0uXG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShsaW5lSXRlbSwgY29udmVydGVyQ29udGV4dCwgdGFibGVUeXBlKTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzOiBhbnkgPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcztcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKS5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0XHRcdGxldCBpc1N0YXRpY2FsbHlIaWRkZW47XG5cdFx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzW2tleV0uYW5ub3RhdGlvbnM/LlVJKSB7XG5cdFx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW4gPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihyZWxhdGVkUHJvcGVydGllc1trZXldLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHJlbGF0ZWRQcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gIWlzU3RhdGljYWxseUhpZGRlbjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBncm91cFBhdGg6IHN0cmluZyA9IF9zbGljZUF0U2xhc2gocmVsYXRpdmVQYXRoLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4gPSBncm91cFBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID4gLTE7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKFxuXHRcdFx0XHRnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzLCBpc0ZpZWxkR3JvdXBDb2x1bW4sIGxpbmVJdGVtKVxuXHRcdFx0KTtcblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0sIGZvcm1hdE9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdC8vZXhjbHVkZSB0aGUgdHlwZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUgRXhwb3J0IChnZW5lcmF0ZXMgZXJyb3Igb24gRXhwb3J0IGFzIFBERilcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nLFxuXHRcdFx0XHRcdHR5cGU6IGRhdGFUeXBlID8gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdFx0XHRkZWxpbWl0ZXI6IGRhdGFUeXBlID09PSBcIkVkbS5JbnQ2NFwiXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZSkge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZykge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZSkge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZykge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGRhdGFUeXBlICYmIGdldFR5cGVDb25maWcobGluZUl0ZW0sIGRhdGFUeXBlKTtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gcHJvcGVydHlUeXBlQ29uZmlnXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiBkYXRhVHlwZSxcblx0XHRcdFx0XHRcdG9Gb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b0NvbnN0cmFpbnRzOiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmlzdWFsU2V0dGluZ3M6IFZpc3VhbFNldHRpbmdzID0ge307XG5cdFx0XHRpZiAoIWRhdGFUeXBlIHx8ICFvVHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IG51bGwsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogbnVsbCxcblx0XHRcdFx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgobGluZUl0ZW0uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGxpbmVJdGVtKSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsOiBzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0c29ydGFibGU6IF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIG5vblNvcnRhYmxlQ29sdW1ucyksXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UobGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMsIHNlbWFudGljS2V5cyksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3MsXG5cdFx0XHRcdHRpbWV6b25lVGV4dDogZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lLFxuXHRcdFx0XHRpc1BhcnRPZkxpbmVJdGVtOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc1Rvb2x0aXAgPSBfZ2V0VG9vbHRpcChsaW5lSXRlbSk7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0b0NvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKG9Db2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgocmVsYXRlZFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbcmVsYXRlZFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbYWRkaXRpb25hbFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5TmFtZV07XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIEdldCBjb2x1bW5zIGZyb20gdGhlIFByb3BlcnRpZXMgb2YgRW50aXR5VHlwZVxuXHRyZXR1cm4gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlVHlwZSxcblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1hdGNoZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRtYXRjaGVkUHJvcGVydGllcyA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdHJldHVybiBwcm9wZXJ0aWVzXG5cdFx0Lm1hcCgocHJvcGVydHkpID0+IHtcblx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHR9KVxuXHRcdC5qb2luKGAke1wiXFxuXCJ9YCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGFibGUgY29sdW1uIGRlZmluaXRpb25zIGZyb20gbWFuaWZlc3QuXG4gKlxuICogVGhlc2UgbWF5IGJlIGN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBzbG90IGNvbHVtbnMgY29taW5nIHRocm91Z2hcbiAqIGEgYnVpbGRpbmcgYmxvY2ssIG9yIGFubm90YXRpb24gY29sdW1ucyB0byBvdmVyd3JpdGUgYW5ub3RhdGlvbi1iYXNlZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uIChcblx0Y29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+LFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0Q29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+ID0ge307XG5cblx0ZnVuY3Rpb24gaXNBbm5vdGF0aW9uQ29sdW1uKFxuXHRcdGNvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdFx0a2V5OiBzdHJpbmdcblx0KTogY29sdW1uIGlzIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5rZXkgPT09IGtleSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1Nsb3RDb2x1bW4obWFuaWZlc3RDb2x1bW46IGFueSk6IG1hbmlmZXN0Q29sdW1uIGlzIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBDb2x1bW5UeXBlLlNsb3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbjogYW55KTogbWFuaWZlc3RDb2x1bW4gaXMgTWFuaWZlc3REZWZpbmVkQ3VzdG9tQ29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkICYmICEhbWFuaWZlc3RDb2x1bW4udGVtcGxhdGU7XG5cdH1cblxuXHRmdW5jdGlvbiBfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSwgYW5ub3RhdGlvblRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pIHtcblx0XHRjb25zdCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGFubm90YXRpb25UYWJsZUNvbHVtbnMuZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAocHJvcC5uYW1lID09PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHByb3Auc29ydGFibGUgPSBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSkgPT09IC0xO1xuXHRcdFx0XHRcdHByb3AuaXNHcm91cGFibGUgPSBwcm9wLnNvcnRhYmxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHRLZXlIZWxwZXIudmFsaWRhdGVLZXkoa2V5KTtcblxuXHRcdC8vIEJhc2VUYWJsZUNvbHVtblxuXHRcdGNvbnN0IGJhc2VUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblxuXHRcdGlmIChpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSkpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW46IEN1c3RvbUVsZW1lbnQ8QW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+ID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGltcG9ydGFuY2U6IG1hbmlmZXN0Q29sdW1uPy5pbXBvcnRhbmNlLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0Q29sdW1uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIHRydWUpLFxuXHRcdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKG1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnMpXG5cdFx0XHR9O1xuXHRcdFx0aW50ZXJuYWxDb2x1bW5zW2tleV0gPSBwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRQcm9wZXJ0eU5hbWVzKFxuXHRcdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGJhc2VNYW5pZmVzdENvbHVtbiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRoZWFkZXI6IG1hbmlmZXN0Q29sdW1uLmhlYWRlcixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UgfHwgSW1wb3J0YW5jZS5Ob25lLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24gfHwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHkgfHwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RDb2x1bW4udGVtcGxhdGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBwcm9wZXJ0eUluZm9zXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcyksXG5cdFx0XHRcdFx0XHRcdHdyYXA6ICEhKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSlcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHRuYW1lOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHQvL05lZWRlZCBmb3IgTURDOlxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IDQgfSxcblx0XHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogZmFsc2UsXG5cdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0X3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvcywgYW5ub3RhdGlvbkNvbHVtbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBpc0FuYWx5dGljYWxUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdGNvbnN0IGlzUmVzcG9uc2l2ZVRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwLEFnZ3JlZ2F0ZVwiO1xuXHRcdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZVRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNSZXNwb25zaXZlVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBCb29sZWFuIHZhbHVlIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKlxuICogQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cbiAqIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RXcmFwcGVyIE1hbmlmZXN0IHNldHRpbmdzIGdldHRlciBmb3IgdGhlIHBhZ2VcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvb2xlYW4gc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqL1xuZnVuY3Rpb24gX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiZcblx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdC8vIEN1cnJlbnRseSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQgYXMgc29ydGVyXG5cdGNvbnN0IG5vblNvcnRhYmxlUHJvcGVydGllcyA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0bGV0IHNvcnRDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyVHlwZVtdID0gW107XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHtcblx0XHRcdHNvcnRlcnM6IHNvcnRlcnNcblx0XHR9O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlNvcnRPcmRlci5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5ICYmIG5vblNvcnRhYmxlUHJvcGVydGllcy5pbmRleE9mKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQ/Lm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IGluZm9OYW1lLFxuXHRcdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRwYXRocy5mb3JFYWNoKChjdXJyZW50UGF0aCkgPT4ge1xuXHRcdGlmIChjdXJyZW50UGF0aD8uJHRhcmdldD8ubmFtZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gY29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRcdHJldHVybiAhYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBjdXJyZW50UGF0aD8uJHRhcmdldD8ubmFtZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHR0YWJsZVR5cGU6IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGdyb3VwQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lkdyb3VwQnkpIHtcblx0XHRsZXQgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5O1xuXHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRcdGFHcm91cEJ5ID0gYUdyb3VwQnkuc2xpY2UoMCwgMSk7XG5cdFx0fVxuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcCgoaW5mb05hbWUpID0+IHtcblx0XHRcdHJldHVybiB7IG5hbWU6IGluZm9OYW1lIH07XG5cdFx0fSk7XG5cblx0XHRncm91cENvbmRpdGlvbnMgPSBhR3JvdXBMZXZlbHMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoeyBncm91cExldmVsczogYUdyb3VwTGV2ZWxzIH0pIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBncm91cENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgYWdncmVnYXRlIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgYWdncmVnYXRlQ29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlRvdGFsKSB7XG5cdFx0Y29uc3QgYVRvdGFscyA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlRvdGFsO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblx0XHRjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFUb3RhbHMsIGNvbHVtbnMpLmZvckVhY2goKGluZm9OYW1lKSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVzW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXG5cdFx0YWdncmVnYXRlQ29uZGl0aW9ucyA9IEpTT04uc3RyaW5naWZ5KGFnZ3JlZ2F0ZXMpO1xuXHR9XG5cblx0cmV0dXJuIGFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24ge1xuXHQvLyBOZWVkIHRvIGdldCB0aGUgdGFyZ2V0XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGl0bGU6IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UeXBlTmFtZVBsdXJhbDtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgaGFzQWJzb2x1dGVQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDAsXG5cdFx0cDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiksXG5cdFx0aWQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gZ2V0VGFibGVJRCh2aXN1YWxpemF0aW9uUGF0aCkgOiBnZXRUYWJsZUlEKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSwgXCJMaW5lSXRlbVwiKTtcblx0Y29uc3QgdGFyZ2V0Q2FwYWJpbGl0aWVzID0gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHR2aXN1YWxpemF0aW9uUGF0aFxuXHQpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0gZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y3JlYXRpb25CZWhhdmlvdXIubW9kZSBhcyBDcmVhdGlvbk1vZGUsXG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0KTtcblxuXHRjb25zdCBkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldERlbGV0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgbWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQgPSBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRjb21waWxlRXhwcmVzc2lvbihjcmVhdGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIlxuXHQpO1xuXG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGhhc0Fic29sdXRlUGF0aCxcblx0XHR0YXJnZXRDYXBhYmlsaXRpZXMsXG5cdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sXG5cdFx0bWFzc0VkaXRCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvblxuXHQpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCkgYXMgbnVtYmVyO1xuXHR9XG5cblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGlzU2VhcmNoYWJsZSA9IGlzUGF0aFNlYXJjaGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBzdGFuZGFyZEFjdGlvbnMgPSB7XG5cdFx0Y3JlYXRlOiBnZXRTdGFuZGFyZEFjdGlvbkNyZWF0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRcImRlbGV0ZVwiOiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRwYXN0ZTogZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCksXG5cdFx0bWFzc0VkaXQ6IGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCksXG5cdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpXG5cdH07XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25UYXJnZXRQYXRoXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0c3RhbmRhcmRBY3Rpb25zOiB7XG5cdFx0XHRhY3Rpb25zOiBzdGFuZGFyZEFjdGlvbnMsXG5cdFx0XHRpc0luc2VydFVwZGF0ZVRlbXBsYXRlZDogaXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQsXG5cdFx0XHR1cGRhdGFibGVQcm9wZXJ0eVBhdGg6IGdldEN1cnJlbnRFbnRpdHlTZXRVcGRhdGFibGVQYXRoKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fSxcblx0XHRkaXNwbGF5TW9kZTogaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uKSxcblx0XHRjcmVhdGU6IGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdHNlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbk1vZGUsXG5cdFx0YXV0b0JpbmRPbkluaXQ6XG5cdFx0XHRfaXNGaWx0ZXJCYXJIaWRkZW4ocGFnZU1hbmlmZXN0U2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQpIHx8XG5cdFx0XHQoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSAmJlxuXHRcdFx0XHQhKHZpZXdDb25maWd1cmF0aW9uICYmIHBhZ2VNYW5pZmVzdFNldHRpbmdzLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pKSksXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHNlYXJjaGFibGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgIT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIShpc0NvbnN0YW50KGlzU2VhcmNoYWJsZSkgJiYgaXNTZWFyY2hhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlOiBzdHJpbmcsIGlzQ29tcGxleFByb3BlcnR5OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRsZXQgZXhwb3J0RGF0YVR5cGU6IHN0cmluZyA9IFwiU3RyaW5nXCI7XG5cdGlmIChpc0NvbXBsZXhQcm9wZXJ0eSkge1xuXHRcdGlmIChkYXRhVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVUaW1lXCI7XG5cdFx0fVxuXHRcdHJldHVybiBleHBvcnREYXRhVHlwZTtcblx0fSBlbHNlIHtcblx0XHRzd2l0Y2ggKGRhdGFUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRWRtLkRlY2ltYWxcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRcdGNhc2UgXCJFZG0uSW50NjRcIjpcblx0XHRcdGNhc2UgXCJFZG0uRG91YmxlXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkJ5dGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIk51bWJlclwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZU9mVGltZVwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiQm9vbGVhblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJTdHJpbmdcIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaW50byB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIHNwbGl0IHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVzLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNJcGhvbmU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHQvLyBJZiBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQsIHVzZSBhcyBkZWZhdWx0IHRydWUgb24gcGhvbmUgYW5kIGZhbHNlIG90aGVyd2lzZVxuXHRsZXQgZW5hYmxlRnVsbFNjcmVlbiA9IHRhYmxlU2V0dGluZ3MuZW5hYmxlRnVsbFNjcmVlbiA/PyBpc0lwaG9uZTtcblx0Ly8gTWFrZSBzdXJlIHRoYXQgZW5hYmxlRnVsbFNjcmVlbiBpcyBub3Qgc2V0IG9uIExpc3RSZXBvcnQgZm9yIGRlc2t0b3Agb3IgdGFibGV0XG5cdGlmICghaXNJcGhvbmUgJiYgZW5hYmxlRnVsbFNjcmVlbiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdGVuYWJsZUZ1bGxTY3JlZW4gPSBmYWxzZTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5GVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCk7XG5cdH1cblx0cmV0dXJuIGVuYWJsZUZ1bGxTY3JlZW47XG59XG5cbmZ1bmN0aW9uIF9nZXRNdWx0aVNlbGVjdE1vZGUoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgbXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSkge1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ6XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IGZhbHNlID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS51c2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdFx0bXVsdGlTZWxlY3RNb2RlID0gIXRhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID8gXCJDbGVhckFsbFwiIDogXCJEZWZhdWx0XCI7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0cmV0dXJuIG11bHRpU2VsZWN0TW9kZTtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlVHlwZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBUYWJsZVR5cGUge1xuXHRsZXQgdGFibGVUeXBlID0gdGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHQvKiAgTm93LCB3ZSBrZWVwIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBtYW5pZmVzdCwgZXZlbiBpZiBpdCBsZWFkcyB0byBlcnJvcnMuXG5cdFx0V2Ugb25seSBjaGFuZ2UgaWYgd2UncmUgbm90IG9uIGRlc2t0b3AgZnJvbSBBbmFseXRpY2FsIHRvIFJlc3BvbnNpdmUuXG5cdCAqL1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICFjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpKSB7XG5cdFx0dGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0fVxuXHRyZXR1cm4gdGFibGVUeXBlO1xufVxuXG5mdW5jdGlvbiBfZ2V0R3JpZFRhYmxlTW9kZSh0YWJsZVR5cGU6IFRhYmxlVHlwZSwgdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbiwgaXNUZW1wbGF0ZUxpc3RSZXBvcnQ6IGJvb2xlYW4pOiBhbnkge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkdyaWRUYWJsZVwiKSB7XG5cdFx0aWYgKGlzVGVtcGxhdGVMaXN0UmVwb3J0KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRyb3dDb3VudE1vZGU6IFwiQXV0b1wiLFxuXHRcdFx0XHRyb3dDb3VudDogXCIzXCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogdGFibGVTZXR0aW5ncy5yb3dDb3VudE1vZGUgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA6IFwiRml4ZWRcIixcblx0XHRcdFx0cm93Q291bnQ6IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgPyB0YWJsZVNldHRpbmdzLnJvd0NvdW50IDogNVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9nZXRDb25kZW5zZWRUYWJsZUxheW91dChfdGFibGVUeXBlOiBUYWJsZVR5cGUsIF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jb25kZW5zZWRUYWJsZUxheW91dCAhPT0gdW5kZWZpbmVkICYmIF90YWJsZVR5cGUgIT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJcblx0XHQ/IF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0XG5cdFx0OiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlU2VsZWN0aW9uTGltaXQoX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBudW1iZXIge1xuXHRyZXR1cm4gX3RhYmxlU2V0dGluZ3Muc2VsZWN0QWxsID09PSB0cnVlIHx8IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0ID09PSAwID8gMCA6IF90YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcbn1cblxuZnVuY3Rpb24gX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgPyBfdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmlubGluZUNyZWF0aW9uUm93Q291bnQgOiAyO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVycyhcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0cXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSxcblx0cXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnksXG5cdHBhdGg6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBhbnkge1xuXHRpZiAocXVpY2tTZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ID8gXCJ7PSAke3BhZ2VJbnRlcm5hbD5oYXNQZW5kaW5nRmlsdGVyc30gIT09IHRydWV9XCIgOiB0cnVlLFxuXHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdFx0cGF0aHM6IHF1aWNrRmlsdGVyUGF0aHNcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIF9nZXRFbmFibGVFeHBvcnQoXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVuYWJsZVBhc3RlOiBib29sZWFuXG4pOiBib29sZWFuIHtcblx0cmV0dXJuIHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0ICE9PSB1bmRlZmluZWRcblx0XHQ/IHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0XG5cdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIiB8fCBlbmFibGVQYXN0ZTtcbn1cblxuZnVuY3Rpb24gX2dldEZpbHRlckNvbmZpZ3VyYXRpb24oXG5cdHRhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGFueSB7XG5cdGlmICghbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cdGNvbnN0IHF1aWNrRmlsdGVyUGF0aHM6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9W10gPSBbXTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0bGV0IHF1aWNrU2VsZWN0aW9uVmFyaWFudDogYW55O1xuXHRsZXQgZmlsdGVycztcblx0dGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5wYXRocz8uZm9yRWFjaCgocGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+IHtcblx0XHRxdWlja1NlbGVjdGlvblZhcmlhbnQgPSB0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdGZpbHRlcnMgPSBfZ2V0RmlsdGVycyh0YWJsZVNldHRpbmdzLCBxdWlja0ZpbHRlclBhdGhzLCBxdWlja1NlbGVjdGlvblZhcmlhbnQsIHBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9KTtcblxuXHRsZXQgaGlkZVRhYmxlVGl0bGUgPSBmYWxzZTtcblx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0cmV0dXJuIHtcblx0XHRmaWx0ZXJzOiBmaWx0ZXJzLFxuXHRcdGhlYWRlclZpc2libGU6ICEocXVpY2tTZWxlY3Rpb25WYXJpYW50ICYmIGhpZGVUYWJsZVRpdGxlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0Q29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZW5oYW5jZURhdGFNb2RlbFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHJlbGF0aXZlUGF0aCkubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wZXJ0eTogYW55KSA9PiB7XG5cdFx0XHRjb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMucHVzaChnZXRMYWJlbChuYXZQcm9wZXJ0eSkgfHwgbmF2UHJvcGVydHkubmFtZSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscztcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoZWNrQ29uZGVuc2VkTGF5b3V0ID0gZmFsc2Vcbik6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuXHRjb25zdCBfbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSAodGFibGVNYW5pZmVzdFNldHRpbmdzICYmIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzKSB8fCB7fTtcblx0Y29uc3QgY3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGNvbnN0IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCA9ICFfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKTtcblx0Y29uc3QgZW5hYmxlUGFzdGUgPVxuXHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIjsgLy8gUGFzdGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBleGNlcHRlZCBmb3IgT1Bcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0Y29uc3QgZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyID0gdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCA/IFwiQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlclwiIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgX21hbmlmZXN0V3JhcHBlci5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBvRmlsdGVyQ29uZmlndXJhdGlvbiA9IF9nZXRGaWx0ZXJDb25maWd1cmF0aW9uKHRhYmxlU2V0dGluZ3MsIGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHRhYmxlVHlwZTogVGFibGVUeXBlID0gX2dldFRhYmxlVHlwZSh0YWJsZVNldHRpbmdzLCBhZ2dyZWdhdGlvbkhlbHBlciwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGdyaWRUYWJsZVJvd01vZGUgPSBfZ2V0R3JpZFRhYmxlTW9kZSh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MsIHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpO1xuXHRjb25zdCBjb25kZW5zZWRUYWJsZUxheW91dCA9IF9nZXRDb25kZW5zZWRUYWJsZUxheW91dCh0YWJsZVR5cGUsIHRhYmxlU2V0dGluZ3MpO1xuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IHtcblx0XHQvLyBJZiBubyBjcmVhdGVBdEVuZCBpcyBzcGVjaWZpZWQgaXQgd2lsbCBiZSBmYWxzZSBmb3IgSW5saW5lIGNyZWF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2Vcblx0XHRjcmVhdGVBdEVuZDpcblx0XHRcdHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kXG5cdFx0XHRcdDogY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuSW5saW5lLFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyLFxuXHRcdC8vIGlmIGEgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkLCBpLmUuIHNldCB0byBmYWxzZVxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2UsXG5cdFx0ZW5hYmxlQXV0b0NvbHVtbldpZHRoOiBlbmFibGVBdXRvQ29sdW1uV2lkdGgsXG5cdFx0ZW5hYmxlRXhwb3J0OiBfZ2V0RW5hYmxlRXhwb3J0KHRhYmxlU2V0dGluZ3MsIGNvbnZlcnRlckNvbnRleHQsIGVuYWJsZVBhc3RlKSxcblx0XHRlbmFibGVGdWxsU2NyZWVuOiBfZ2V0RnVsbFNjcmVlbkJhc2VkT25EZXZpY2UodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgX21hbmlmZXN0V3JhcHBlci5pc1Bob25lKCkpLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdCxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0aGVhZGVyVmlzaWJsZTogdHJ1ZSxcblx0XHRtdWx0aVNlbGVjdE1vZGU6IF9nZXRNdWx0aVNlbGVjdE1vZGUodGFibGVTZXR0aW5ncywgdGFibGVUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRzZWxlY3Rpb25MaW1pdDogX2dldFRhYmxlU2VsZWN0aW9uTGltaXQodGFibGVTZXR0aW5ncyksXG5cdFx0aW5saW5lQ3JlYXRpb25Sb3dDb3VudDogX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCh0YWJsZVNldHRpbmdzKSxcblx0XHRzaG93Um93Q291bnQ6ICF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMgJiYgIV9tYW5pZmVzdFdyYXBwZXIuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKT8uc2hvd0NvdW50cyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0aXNDb21wYWN0VHlwZTogX21hbmlmZXN0V3JhcHBlci5pc0NvbXBhY3RUeXBlKClcblx0fTtcblx0cmV0dXJuIHsgLi4ub0NvbmZpZ3VyYXRpb24sIC4uLmdyaWRUYWJsZVJvd01vZGUsIC4uLm9GaWx0ZXJDb25maWd1cmF0aW9uIH07XG59XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXI7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29uZmlnKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcblx0bGV0IG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1sob1Byb3BlcnR5IGFzIFByb3BlcnR5KT8udHlwZV0gfHwgKGRhdGFUeXBlID8gRURNX1RZUEVfTUFQUElOR1tkYXRhVHlwZV0gOiB1bmRlZmluZWQpO1xuXHRpZiAoIW9UYXJnZXRNYXBwaW5nICYmIChvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50YXJnZXRUeXBlICYmIChvUHJvcGVydHkgYXMgUHJvcGVydHkpLnRhcmdldFR5cGU/Ll90eXBlID09PSBcIlR5cGVEZWZpbml0aW9uXCIpIHtcblx0XHRvVGFyZ2V0TWFwcGluZyA9IEVETV9UWVBFX01BUFBJTkdbKChvUHJvcGVydHkgYXMgUHJvcGVydHkpLnRhcmdldFR5cGUgYXMgVHlwZURlZmluaXRpb24pLnVuZGVybHlpbmdUeXBlXTtcblx0fVxuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IGNvbmZpZ1R5cGUgPSB7XG5cdFx0dHlwZTogb1RhcmdldE1hcHBpbmc/LnR5cGUsXG5cdFx0Y29uc3RyYWludHM6IHt9LFxuXHRcdGZvcm1hdE9wdGlvbnM6IHt9XG5cdH07XG5cdGlmIChpc1Byb3BlcnR5KG9Qcm9wZXJ0eSkpIHtcblx0XHRwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHMgPSB7XG5cdFx0XHRzY2FsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRTY2FsZSA/IG9Qcm9wZXJ0eS5zY2FsZSA6IHVuZGVmaW5lZCxcblx0XHRcdHByZWNpc2lvbjogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRQcmVjaXNpb24gPyBvUHJvcGVydHkucHJlY2lzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4TGVuZ3RoOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE1heExlbmd0aCA/IG9Qcm9wZXJ0eS5tYXhMZW5ndGggOiB1bmRlZmluZWQsXG5cdFx0XHRudWxsYWJsZTogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiROdWxsYWJsZSA/IG9Qcm9wZXJ0eS5udWxsYWJsZSA6IHVuZGVmaW5lZCxcblx0XHRcdG1pbmltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdG1heGltdW06XG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiXSAmJlxuXHRcdFx0XHQhaXNOYU4ob1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKVxuXHRcdFx0XHRcdD8gYCR7b1Byb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtfWBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdGlzRGlnaXRTZXF1ZW5jZTpcblx0XHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdICYmXG5cdFx0XHRcdG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2Vcblx0XHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdH07XG5cdH1cblx0cHJvcGVydHlUeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0cGFyc2VBc1N0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0ZW1wdHlTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IFwiXCJcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiA/IHRydWUgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIHByb3BlcnR5VHlwZUNvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRnZXRUYWJsZUFjdGlvbnMsXG5cdGdldFRhYmxlQ29sdW1ucyxcblx0Z2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlLFxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzLFxuXHRjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGdldENhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0Z2V0U2VsZWN0aW9uTW9kZSxcblx0Z2V0Um93U3RhdHVzVmlzaWJpbGl0eSxcblx0Z2V0SW1wb3J0YW5jZSxcblx0Z2V0UDEzbk1vZGUsXG5cdGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcblx0c3BsaXRQYXRoLFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbixcblx0Z2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdGdldFR5cGVDb25maWdcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTZPS0EsVSxFQU1MOzthQU5LQSxVO0lBQUFBLFU7SUFBQUEsVTtJQUFBQSxVO0tBQUFBLFUsS0FBQUEsVTs7RUFtSkw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsZUFBVCxDQUNOQyxrQkFETSxFQUVOQyxpQkFGTSxFQUdOQyxnQkFITSxFQUlOQyxrQkFKTSxFQUtXO0lBQ2pCLElBQU1DLGFBQWEsR0FBR0MseUJBQXlCLENBQUNMLGtCQUFELEVBQXFCQyxpQkFBckIsRUFBd0NDLGdCQUF4QyxDQUEvQztJQUNBLElBQU1JLGtCQUFrQixHQUFHRixhQUFhLENBQUNHLFlBQXpDO0lBQ0EsSUFBTUMsY0FBYyxHQUFH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
2866
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2x1bW5UeXBlIiwiZ2V0VGFibGVBY3Rpb25zIiwibGluZUl0ZW1Bbm5vdGF0aW9uIiwidmlzdWFsaXphdGlvblBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwibmF2aWdhdGlvblNldHRpbmdzIiwiYVRhYmxlQWN0aW9ucyIsImdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMiLCJhQW5ub3RhdGlvbkFjdGlvbnMiLCJ0YWJsZUFjdGlvbnMiLCJhSGlkZGVuQWN0aW9ucyIsImhpZGRlblRhYmxlQWN0aW9ucyIsIm1hbmlmZXN0QWN0aW9ucyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiYWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiaXNOYXZpZ2FibGUiLCJlbmFibGVPblNlbGVjdCIsImVuYWJsZUF1dG9TY3JvbGwiLCJlbmFibGVkIiwidmlzaWJsZSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJjb21tYW5kQWN0aW9ucyIsImdldFRhYmxlQ29sdW1ucyIsImFubm90YXRpb25Db2x1bW5zIiwiZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyIsIm1hbmlmZXN0Q29sdW1ucyIsImdldENvbHVtbnNGcm9tTWFuaWZlc3QiLCJjb2x1bW5zIiwiZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUiLCJ3aWR0aCIsImltcG9ydGFuY2UiLCJob3Jpem9udGFsQWxpZ24iLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwiYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmF3RGVmaW5pdGlvbnMiLCJhbm5vdGF0aW9uIiwib0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wZXJ0eSIsIm5hbWUiLCJxdWFsaWZpZXIiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwibWFwIiwib0N0eERlZlByb3BlcnR5IiwidmFsdWUiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eSIsImRlZmF1bHRBZ2dyZWdhdGUiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJmb3VuZENvbHVtbiIsInB1c2giLCJsZW5ndGgiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwidXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzIiwidGFibGVWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24iLCJjb250cm9sIiwidHlwZSIsImFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyIsImVuYWJsZUFuYWx5dGljcyIsImFnZ3JlZ2F0ZXMiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImluZGV4T2YiLCJncm91cENvbmRpdGlvbnMiLCJnZXRHcm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyIsImdldE5hdmlnYXRpb25UYXJnZXRQYXRoIiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uIiwibmF2Q29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsImRhdGFNb2RlbFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsIm5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoIiwidGFyZ2V0RW50aXR5U2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzIiwiZmluZENvbHVtbkJ5UGF0aCIsIm9Qcm9wIiwib1VuaXQiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvVGltZXpvbmUiLCJnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSIsInNUaW1lem9uZSIsIkNvbW1vbiIsIlRpbWV6b25lIiwib1VuaXRDb2x1bW4iLCJzVW5pdCIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFRleHQiLCJvVGltZXpvbmVDb2x1bW4iLCJ0aW1lem9uZSIsInRpbWV6b25lVGV4dCIsInRvU3RyaW5nIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsInRleHRBbm5vdGF0aW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiVUkiLCJIZWFkZXJJbmZvIiwiVGl0bGUiLCJWYWx1ZSIsInNlbWFudGljS2V5QW5ub3RhdGlvbnMiLCJTZW1hbnRpY0tleSIsImhlYWRlckluZm9UeXBlTmFtZSIsIlR5cGVOYW1lIiwic2VtYW50aWNLZXlDb2x1bW5zIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInZpZXdDb25maWd1cmF0aW9uIiwidGFibGVNYW5pZmVzdENvbmZpZyIsImdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwic3BsaXRQYXRoIiwibmF2aWdhdGlvblRhcmdldFBhdGgiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAiLCJzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUiLCJvVmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyIsImhlYWRlckluZm9UaXRsZSIsInNlbWFudGljS2V5cyIsImNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24iLCJnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiQWN0aW9uSGVscGVyIiwiZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgiLCJyZXN0cmljdGlvbnMiLCJnZXRSZXN0cmljdGlvbnMiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJ1cGRhdGFibGUiLCJpc1VwZGF0YWJsZSIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJpc0NvbnN0YW50IiwiZXhwcmVzc2lvbiIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiX3R5cGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJDYXBhYmlsaXRpZXMiLCJVcGRhdGVSZXN0cmljdGlvbnMiLCJVcGRhdGFibGUiLCJwcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInByb3BlcnR5TmFtZSIsInNpemUiLCJ0aXRsZVByb3BlcnR5IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsImdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJjdXJyZW50RW50aXR5VHlwZSIsImNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbnRpdHlTZXQiLCJhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCIkVHlwZSIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJzb3VyY2VFbnRpdHlUeXBlIiwiUmVxdWlyZXNDb250ZXh0IiwiSW5saW5lIiwidmFsdWVPZiIsIkhpZGRlbiIsImVxdWFsIiwiZ2V0QmluZGluZ0V4cEZyb21Db250ZXh0Iiwic291cmNlIiwic0V4cHJlc3Npb24iLCJzUGF0aCIsInN1YnN0cmluZyIsImFTcGxpdFBhdGgiLCJzcGxpdCIsInNOYXZpZ2F0aW9uUGF0aCIsInRhcmdldE9iamVjdCIsInBhcnRuZXIiLCJwYXRoSW5Nb2RlbCIsInNsaWNlIiwiY29uc3RhbnQiLCJoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwic29tZSIsImhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyIiwiYWN0aW9uS2V5IiwiYWN0aW9uIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQiLCJhVmlzaWJsZVBhdGhFeHByZXNzaW9ucyIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uIiwiaXNEZWxldGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiZ2V0VGVtcGxhdGVUeXBlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiYk1hc3NFZGl0RW5hYmxlZCIsImlmRWxzZSIsImFuZCIsIklzRWRpdGFibGUiLCJNdWx0aSIsIkF1dG8iLCJTaW5nbGUiLCJidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsIm9yIiwiZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiIsImNvbmNhdCIsInRhYmxlQWN0aW9uIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCIsIkRldGVybWluaW5nIiwia2V5IiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm5vdCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJEZWZhdWx0IiwiZ2V0SGlnaGxpZ2h0Um93QmluZGluZyIsImNyaXRpY2FsaXR5QW5ub3RhdGlvbiIsImlzRHJhZnRSb290IiwidGFyZ2V0RW50aXR5VHlwZSIsImRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uIiwiTWVzc2FnZVR5cGUiLCJnZXRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVR5cGUiLCJhTWlzc2luZ0tleXMiLCJmb3JtYXRSZXN1bHQiLCJFbnRpdHkiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm9yaWdpbmFsVGFibGVTZXR0aW5ncyIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsInRhcmdldEFubm90YXRpb25zQ29tbW9uIiwidGFyZ2V0QW5ub3RhdGlvbnNTZXNzaW9uIiwiU2Vzc2lvbiIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsIkVycm9yIiwicm91dGUiLCJhcHBlbmQiLCJjcmVhdGVBdEVuZCIsIm5hdmlnYXRlVG9UYXJnZXQiLCJOZXdQYWdlIiwiX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJwcmVzc1Byb3BlcnR5IiwibmF2aWdhdGlvblRhcmdldCIsImNyaXRpY2FsaXR5UHJvcGVydHkiLCJkaXNwbGF5IiwidGFyZ2V0IiwiTW9kZWxIZWxwZXIiLCJpc1NpbmdsZXRvbiIsIkNyaXRpY2FsaXR5IiwiZ2V0RHJhZnRSb290IiwiZ2V0RHJhZnROb2RlIiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsInByZXNzIiwicm93TmF2aWdhdGVkIiwiSXNJbmFjdGl2ZSIsImNvbHVtbnNUb0JlQ3JlYXRlZCIsIm5vblNvcnRhYmxlQ29sdW1ucyIsInRhYmxlVHlwZSIsInRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiIsInByb3BlcnR5IiwiZXhpc3RzIiwidGFyZ2V0VHlwZSIsInJlbGF0ZWRQcm9wZXJ0aWVzSW5mbyIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsInRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbiIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJvQ29sdW1uRHJhZnRJbmRpY2F0b3IiLCJnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4iLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsIndyYXAiLCJleHBvcnRTZXR0aW5nc1dyYXBwaW5nIiwiX2dldEV4cG9ydERhdGFUeXBlIiwiZXhwb3J0VW5pdE5hbWUiLCJ1bml0UHJvcGVydHkiLCJleHBvcnRVbml0U3RyaW5nIiwiZXhwb3J0VGltZXpvbmVOYW1lIiwidGltZXpvbmVQcm9wZXJ0eSIsInV0YyIsImV4cG9ydFRpbWV6b25lU3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJyZWxhdGVkQ29sdW1ucyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImZ1bGxQcm9wZXJ0eVBhdGgiLCJ1c2VEYXRhRmllbGRQcmVmaXgiLCJhdmFpbGFibGVGb3JBZGFwdGF0aW9uIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc0hpZGRlbiIsImdyb3VwUGF0aCIsIl9zbGljZUF0U2xhc2giLCJpc0dyb3VwIiwiaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkiLCJleHBvcnRUeXBlIiwic0RhdGVJbnB1dEZvcm1hdCIsImRhdGFUeXBlIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwiaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uIiwic29ydGFibGUiLCJvVHlwZUNvbmZpZyIsImNsYXNzTmFtZSIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50IiwiX2lzRXhwb3J0YWJsZUNvbHVtbiIsIm9Vbml0UHJvcGVydHkiLCJvVGltZXpvbmVQcm9wZXJ0eSIsInNVbml0VGV4dCIsInNUaW1lem9uZVRleHQiLCJpbnB1dEZvcm1hdCIsInNjYWxlIiwiZGVsaW1pdGVyIiwiY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzIiwiX2dldENvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscyIsIkFubm90YXRpb24iLCJsYWJlbCIsImdldExhYmVsIiwiZ3JvdXBMYWJlbCIsImdyb3VwIiwic2VtYW50aWNPYmplY3RQYXRoIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJEYXRhRmllbGREZWZhdWx0IiwiVGFyZ2V0IiwiJHRhcmdldCIsImlzR3JvdXBhYmxlIiwiaXNQcm9wZXJ0eUdyb3VwYWJsZSIsImlzS2V5IiwiY2FzZVNlbnNpdGl2ZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInR5cGVDb25maWciLCJ2aXN1YWxTZXR0aW5ncyIsIndpZHRoQ2FsY3VsYXRpb24iLCJnZXRJbXBvcnRhbmNlIiwiYWRkaXRpb25hbExhYmVscyIsInNUb29sdGlwIiwiX2dldFRvb2x0aXAiLCJ0b29sdGlwIiwicHJvcGVydHlUeXBlIiwiZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5VHlwZSIsImlzUHJvcGVydHkiLCJDb3JlIiwiTWVkaWFUeXBlIiwidGVybSIsImlzVVJMIiwiX2lzVmFsaWRDb2x1bW4iLCJfZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRNb2RlbFBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCIsImlzQW5hbHl0aWNzIiwiSXNFeHBhbmRlZCIsImlzQW5hbHl0aWNhbExlYWYiLCJOb2RlTGV2ZWwiLCJfZ2V0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZGF0YUZpZWxkR3JvdXAiLCJmaWVsZEZvcm1hdE9wdGlvbnMiLCJhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiRGF0YSIsImlubmVyRGF0YUZpZWxkIiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJkYXRhRmllbGREZWZhdWx0IiwiTGFiZWwiLCJpc0RhdGFGaWVsZFR5cGVzIiwiUXVpY2tJbmZvIiwiZGF0YXBvaW50VGFyZ2V0IiwiZ2V0Um93U3RhdHVzVmlzaWJpbGl0eSIsImNvbE5hbWUiLCJpc1NlbWFudGljS2V5SW5GaWVsZEdyb3VwIiwiZ2V0RXJyb3JTdGF0dXNUZXh0VmlzaWJpbGl0eUZvcm1hdHRlciIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXAiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwicmVsYXRlZENvbHVtbiIsIm5ld05hbWUiLCJpc1BhcnRPZkxpbmVJdGVtIiwiaW5jbHVkZXMiLCJwcm9wZXJ0eUluZm8iLCJfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUiLCJfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCIsImZpZWxkR3JvdXBOYW1lIiwib0NvbHVtbnMiLCJhQ29sdW1uS2V5cyIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJfZ2V0UmVsYXRpdmVQYXRoIiwiaXNMYXN0U2xhc2giLCJpc0xhc3RQYXJ0IiwiaVNsYXNoSW5kZXgiLCJsYXN0SW5kZXhPZiIsIl9pc0NvbHVtblNvcnRhYmxlIiwicHJvcGVydHlQYXRoIiwiZmlsdGVyRnVuY3Rpb25zIiwiX2dldEZpbHRlckZ1bmN0aW9ucyIsImlzQXJyYXkiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY2FwYWJpbGl0aWVzIiwiRmlsdGVyRnVuY3Rpb25zIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNFZGl0IiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlcyIsImFTZW1hbnRpY0tleVZhbHVlcyIsImJTZW1hbnRpY0tleUZvdW5kIiwiaSIsInZhbHVlcyIsInNlbWFudGljS2V5Rm91bmQiLCJfZmluZFByb3BlcnRpZXMiLCJzZW1hbnRpY0tleVZhbHVlcyIsImZpZWxkR3JvdXBQcm9wZXJ0aWVzIiwic2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cCIsInNQcm9wZXJ0eVBhdGgiLCJ0bXAiLCJmaWVsZEdyb3VwUHJvcGVydHlQYXRoIiwiX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cCIsImFQcm9wZXJ0aWVzIiwiX3Byb3BlcnRpZXNGb3VuZCIsImlzRmllbGRHcm91cENvbHVtbiIsInNlbWFudGljS2V5Iiwic2VtYW50aWNLZXlJbkZpZWxkR3JvdXAiLCJmb3JtYXRPcHRpb25zT2JqIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzZW1hbnRpY2tleXMiLCJvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eSIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsIl9nZXRJbXBOdW1iZXIiLCJJbXBvcnRhbmNlIiwiX2dldERhdGFGaWVsZEltcG9ydGFuY2UiLCJfZ2V0TWF4SW1wb3J0YW5jZSIsImZpZWxkcyIsIm1heEltcE51bWJlciIsImltcE51bWJlciIsIkRhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIiwiZmllbGQiLCJmaWVsZHNXaXRoSW1wb3J0YW5jZSIsIm1hcFNlbWFudGljS2V5cyIsImZpZWxkR3JvdXBEYXRhIiwiZmllbGRHcm91cEhhc1NlbWFudGljS2V5IiwiZmllbGRHcm91cERhdGFGaWVsZCIsIkhpZ2giLCJmaWx0ZXIiLCJpdGVtIiwiZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zIiwibGluZUl0ZW0iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsInJlbGF0ZWRQcm9wZXJ0aWVzIiwiaXNTdGF0aWNhbGx5SGlkZGVuIiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJzTGFiZWwiLCJmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMiLCJpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbiIsIkhUTUw1IiwiQ3NzRGVmYXVsdHMiLCJyZWxhdGVkUHJvcGVydHlOYW1lIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZSIsIl9nZXRQcm9wZXJ0eU5hbWVzIiwibWF0Y2hlZFByb3BlcnRpZXMiLCJyZXNvbHZlUGF0aCIsIl9hcHBlbmRDdXN0b21UZW1wbGF0ZSIsImludGVybmFsQ29sdW1ucyIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImlzU2xvdENvbHVtbiIsIm1hbmlmZXN0Q29sdW1uIiwiU2xvdCIsImlzQ3VzdG9tQ29sdW1uIiwiX3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMiLCJhbm5vdGF0aW9uVGFibGVDb2x1bW5zIiwicHJvcCIsInJlcGxhY2UiLCJ2YWxpZGF0ZUtleSIsImJhc2VUYWJsZUNvbHVtbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJiYXNlTWFuaWZlc3RDb2x1bW4iLCJoZWFkZXIiLCJIb3Jpem9udGFsQWxpZ24iLCJCZWdpbiIsImlkIiwiY3VzdG9tVGFibGVDb2x1bW4iLCJtZXNzYWdlIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIkFubm90YXRpb25Db2x1bW5zIiwiSW52YWxpZEtleSIsImdldFAxM25Nb2RlIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJpc0FuYWx5dGljYWxUYWJsZSIsImlzUmVzcG9uc2l2ZVRhYmxlIiwicGVyc29uYWxpemF0aW9uIiwic29ydCIsImFnZ3JlZ2F0ZSIsIkxpc3RSZXBvcnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiX2lzRmlsdGVyQmFySGlkZGVuIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiZ2V0U29ydENvbmRpdGlvbnMiLCJub25Tb3J0YWJsZVByb3BlcnRpZXMiLCJzb3J0Q29uZGl0aW9ucyIsIlNvcnRPcmRlciIsInNvcnRlcnMiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uUHJvcGVydHkiLCJQcm9wZXJ0eSIsImluZm9OYW1lIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwicGF0aHMiLCJpbmZvTmFtZXMiLCJjdXJyZW50UGF0aCIsIkdyb3VwQnkiLCJhR3JvdXBCeSIsImFHcm91cExldmVscyIsImdyb3VwTGV2ZWxzIiwiVG90YWwiLCJhVG90YWxzIiwidGl0bGUiLCJUeXBlTmFtZVBsdXJhbCIsInBhZ2VNYW5pZmVzdFNldHRpbmdzIiwiaGFzQWJzb2x1dGVQYXRoIiwicDEzbk1vZGUiLCJnZXRUYWJsZUlEIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJzdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiZ2V0RGVsZXRlVmlzaWJpbGl0eSIsImNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsIm1hc3NFZGl0QnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJnZXRNYXNzRWRpdFZpc2liaWxpdHkiLCJpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwiaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkIiwidGhyZXNob2xkIiwiTWF4SXRlbXMiLCJpc1NlYXJjaGFibGUiLCJpc1BhdGhTZWFyY2hhYmxlIiwic3RhbmRhcmRBY3Rpb25zIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSIsInBhc3RlIiwiZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSIsIm1hc3NFZGl0IiwiZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCIsImNyZWF0aW9uUm93IiwiZ2V0Q3JlYXRpb25Sb3ciLCJlbnRpdHlOYW1lIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsInJvdyIsImlzSW5EaXNwbGF5TW9kZSIsImF1dG9CaW5kT25Jbml0Iiwic2VhcmNoYWJsZSIsImlzQ29tcGxleFByb3BlcnR5IiwiZXhwb3J0RGF0YVR5cGUiLCJzdWJzdHIiLCJnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInNlbGVjdGlvbiIsInByb3BlcnR5TmFtZXMiLCJTZWxlY3RPcHRpb25zIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwidGV4dCIsIl9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSIsImlzSXBob25lIiwiZW5hYmxlRnVsbFNjcmVlbiIsIklzc3VlVHlwZSIsIkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUIiwiX2dldE11bHRpU2VsZWN0TW9kZSIsIm11bHRpU2VsZWN0TW9kZSIsInNlbGVjdEFsbCIsInVzZUljb25UYWJCYXIiLCJfZ2V0VGFibGVUeXBlIiwiaXNEZXNrdG9wIiwiX2dldEdyaWRUYWJsZU1vZGUiLCJpc1RlbXBsYXRlTGlzdFJlcG9ydCIsInJvd0NvdW50TW9kZSIsInJvd0NvdW50IiwiX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0IiwiX3RhYmxlVHlwZSIsIl90YWJsZVNldHRpbmdzIiwiY29uZGVuc2VkVGFibGVMYXlvdXQiLCJfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCIsInNlbGVjdGlvbkxpbWl0IiwiX2dldFRhYmxlSW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJfZ2V0RmlsdGVycyIsInF1aWNrRmlsdGVyUGF0aHMiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwicXVpY2tWYXJpYW50U2VsZWN0aW9uIiwiX2dldEVuYWJsZUV4cG9ydCIsImVuYWJsZVBhc3RlIiwiZW5hYmxlRXhwb3J0IiwiX2dldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJmaWx0ZXJzIiwiaGlkZVRhYmxlVGl0bGUiLCJoZWFkZXJWaXNpYmxlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsIm5hdlByb3BlcnR5IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJfbWFuaWZlc3RXcmFwcGVyIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwiaXNQaG9uZSIsInRlbXBsYXRlVHlwZSIsImRhdGFTdGF0ZUluZGljYXRvckZpbHRlciIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50Iiwib0ZpbHRlckNvbmZpZ3VyYXRpb24iLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJncmlkVGFibGVSb3dNb2RlIiwib0NvbmZpZ3VyYXRpb24iLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiZW5hYmxlTWFzc0VkaXQiLCJzaG93Um93Q291bnQiLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsInVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaXNDb21wYWN0VHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInVuZGVybHlpbmdUeXBlIiwiJFNjYWxlIiwicHJlY2lzaW9uIiwiJFByZWNpc2lvbiIsIm1heExlbmd0aCIsIiRNYXhMZW5ndGgiLCJudWxsYWJsZSIsIiROdWxsYWJsZSIsIm1pbmltdW0iLCJpc05hTiIsIlZhbGlkYXRpb24iLCJNaW5pbXVtIiwibWF4aW11bSIsIk1heGltdW0iLCJpc0RpZ2l0U2VxdWVuY2UiLCJJc0RpZ2l0U2VxdWVuY2UiLCJwYXJzZUFzU3RyaW5nIiwiZW1wdHlTdHJpbmciLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0RW50aXR5VHlwZSxcblx0RW51bVZhbHVlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRQcm9wZXJ0eVBhdGgsXG5cdFR5cGVEZWZpbml0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJGdW5jdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHsgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljS2V5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbl9FZG1cIjtcbmltcG9ydCB7IEVudGl0eVNldEFubm90YXRpb25zX1Nlc3Npb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENyaXRpY2FsaXR5VHlwZSxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdERhdGFQb2ludCxcblx0RGF0YVBvaW50VHlwZVR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGxleFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Z2V0RGF0YUZpZWxkRGF0YVR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0aXNEYXRhRmllbGRBbHdheXNIaWRkZW4sXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkVHlwZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIENvbWJpbmVkQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LCBpc0FjdGlvbk5hdmlnYWJsZSwgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEVudGl0eSwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRlbmhhbmNlRGF0YU1vZGVsUGF0aCxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhTZWFyY2hhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBFRE1fVFlQRV9NQVBQSU5HLCBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBnZXROb25Tb3J0YWJsZVByb3BlcnRpZXNSZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9FbnRpdHlTZXRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludCxcblx0aXNOYXZpZ2F0aW9uUHJvcGVydHksXG5cdGlzUGF0aEV4cHJlc3Npb24sXG5cdGlzUHJvcGVydHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvRGF0YUZpZWxkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uLFxuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0Rm9ybWF0T3B0aW9uc1R5cGUsXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEhvcml6b250YWxBbGlnbixcblx0SW1wb3J0YW5jZSxcblx0U2VsZWN0aW9uTW9kZSxcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlIH0gZnJvbSBcIi4vQ3JpdGljYWxpdHlcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb25Db25maWdUeXBlIH0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGdldENyZWF0ZVZpc2liaWxpdHksXG5cdGdldENyZWF0aW9uUm93LFxuXHRnZXREZWxldGVWaXNpYmlsaXR5LFxuXHRnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyxcblx0Z2V0TWFzc0VkaXRWaXNpYmlsaXR5LFxuXHRnZXRSZXN0cmljdGlvbnMsXG5cdGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlLFxuXHRnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZSxcblx0Z2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdCxcblx0Z2V0U3RhbmRhcmRBY3Rpb25QYXN0ZSxcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkLFxuXHRpc0luRGlzcGxheU1vZGVcbn0gZnJvbSBcIi4vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdHJvd05hdmlnYXRlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdFx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN0YW5kYXJkQWN0aW9uczoge1xuXHRcdGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFN0YW5kYXJkQWN0aW9uQ29uZmlnVHlwZT47XG5cdFx0aXNJbnNlcnRVcGRhdGVUZW1wbGF0ZWQ6IGJvb2xlYW47XG5cdFx0dXBkYXRhYmxlUHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3IgfCBDcmVhdGVCZWhhdmlvckV4dGVybmFsO1xuXHR0aXRsZTogc3RyaW5nO1xuXHRzZWFyY2hhYmxlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG50eXBlIENyZWF0ZUJlaGF2aW9yID0ge1xuXHRtb2RlOiBDcmVhdGlvbk1vZGU7XG5cdGFwcGVuZDogYm9vbGVhbjtcblx0bmV3QWN0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0Pzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCBieSBuYXZpZ2F0aW5nIHRvIHNvbWUgdGFyZ2V0XG4gKi9cbnR5cGUgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRyb3dDb3VudE1vZGU6IEdyaWRUYWJsZVJvd0NvdW50TW9kZTtcblx0cm93Q291bnQ6IG51bWJlcjtcblx0c2VsZWN0QWxsPzogYm9vbGVhbjtcblx0c2VsZWN0aW9uTGltaXQ6IG51bWJlcjtcblx0bXVsdGlTZWxlY3RNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGlubGluZUNyZWF0aW9uUm93Q291bnQ/OiBudW1iZXI7XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGJvb2xlYW47XG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0NvbXBhY3RUeXBlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVHlwZSA9IFwiR3JpZFRhYmxlXCIgfCBcIlJlc3BvbnNpdmVUYWJsZVwiIHwgXCJBbmFseXRpY2FsVGFibGVcIjtcbmV4cG9ydCB0eXBlIEdyaWRUYWJsZVJvd0NvdW50TW9kZSA9IFwiQXV0b1wiIHwgXCJGaXhlZFwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZSAoQ3VzdG9tIENvbHVtbilcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuLy8gQ3VzdG9tIENvbHVtbiBmcm9tIE1hbmlmZXN0XG5leHBvcnQgdHlwZSBNYW5pZmVzdERlZmluZWRDdXN0b21Db2x1bW4gPSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gJiB7XG5cdHR5cGU/OiBDb2x1bW5UeXBlLkRlZmF1bHQ7XG59O1xuXG4vLyBTbG90IENvbHVtbiBmcm9tIEJ1aWxkaW5nIEJsb2NrXG5leHBvcnQgdHlwZSBGcmFnbWVudERlZmluZWRTbG90Q29sdW1uID0gQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlLlNsb3Q7XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGFsbCBDb2x1bW5UeXBlcyBoYXZlOlxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbVxuXHR3aWR0aD86IHN0cmluZztcblx0aW1wb3J0YW5jZT86IEltcG9ydGFuY2U7XG5cdGhvcml6b250YWxBbGlnbj86IEhvcml6b250YWxBbGlnbjtcblx0YXZhaWxhYmlsaXR5PzogQXZhaWxhYmlsaXR5VHlwZTtcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xufTtcblxuLy8gUHJvcGVydGllcyBvbiBDdXN0b20gQ29sdW1ucyBhbmQgU2xvdCBDb2x1bW5zXG5leHBvcnQgdHlwZSBDdXN0b21CYXNlZFRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRpZDogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdHdyYXA6IGJvb2xlYW47XG5cdH0gfCBudWxsO1xuXHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IG51bWJlciB9O1xuXHRpc0dyb3VwYWJsZTogYm9vbGVhbjtcblx0aXNOYXZpZ2FibGU6IGJvb2xlYW47XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHR2aXN1YWxTZXR0aW5nczogeyB3aWR0aENhbGN1bGF0aW9uOiBudWxsIH07XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGRlcml2ZWQgZnJvbSBNYW5pZmVzdCB0byBvdmVycmlkZSBBbm5vdGF0aW9uIGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW5Gb3JPdmVycmlkZSA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0c2V0dGluZ3M/OiBUYWJsZUNvbHVtblNldHRpbmdzO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9uc1R5cGU7XG59O1xuXG4vLyBQcm9wZXJ0aWVzIGZvciBBbm5vdGF0aW9uIENvbHVtbnNcbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEFubm90YXRpb25UYWJsZUNvbHVtbkZvck92ZXJyaWRlICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5SW5mb3M/OiBzdHJpbmdbXTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0b29sdGlwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHNob3dEYXRhRmllbGRzTGFiZWw/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdGlzR3JvdXBhYmxlOiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHR1bml0VGV4dD86IHN0cmluZztcblx0dGltZXpvbmVUZXh0Pzogc3RyaW5nO1xuXHR0aW1lem9uZT86IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3M/OiBleHBvcnRTZXR0aW5ncyB8IG51bGw7XG5cdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5PzogYm9vbGVhbjtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHR2aXN1YWxTZXR0aW5ncz86IFZpc3VhbFNldHRpbmdzO1xuXHR0eXBlQ29uZmlnPzogb2JqZWN0O1xuXHRpc1BhcnRPZkxpbmVJdGVtPzogYm9vbGVhbjsgLy8gdGVtcG9yYXJ5IGluZGljYXRvciB0byBvbmx5IGFsbG93IGZpbHRlcmluZyBvbiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hlbiB0aGV5J3JlIHBhcnQgb2YgYSBsaW5lIGl0ZW1cblx0YWRkaXRpb25hbExhYmVscz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgZXhwb3J0U2V0dGluZ3MgPSBQYXJ0aWFsPHtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0d3JhcDogYm9vbGVhbjtcblx0dHlwZTogc3RyaW5nO1xuXHRpbnB1dEZvcm1hdDogc3RyaW5nO1xuXHRmb3JtYXQ6IHN0cmluZztcblx0c2NhbGU6IG51bWJlcjtcblx0ZGVsaW1pdGVyOiBib29sZWFuO1xuXHR1bml0OiBzdHJpbmc7XG5cdHVuaXRQcm9wZXJ0eTogc3RyaW5nO1xuXHR0aW1lem9uZTogc3RyaW5nO1xuXHR0aW1lem9uZVByb3BlcnR5OiBzdHJpbmc7XG5cdHV0YzogYm9vbGVhbjtcbn0+O1xuXG5leHBvcnQgdHlwZSBWaXN1YWxTZXR0aW5ncyA9IHtcblx0d2lkdGhDYWxjdWxhdGlvbj86IFdpZHRoQ2FsY3VsYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBXaWR0aENhbGN1bGF0aW9uID0gbnVsbCB8IHtcblx0bWluV2lkdGg/OiBudW1iZXI7XG5cdG1heFdpZHRoPzogbnVtYmVyO1xuXHRkZWZhdWx0V2lkdGg/OiBudW1iZXI7XG5cdGluY2x1ZGVMYWJlbD86IGJvb2xlYW47XG5cdGdhcD86IG51bWJlcjtcblx0Ly8gb25seSByZWxldmFudCBmb3IgY29tcGxleCB0eXBlc1xuXHRleGNsdWRlUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR2ZXJ0aWNhbEFycmFuZ2VtZW50PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29sdW1uID0gQ3VzdG9tQmFzZWRUYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcbmV4cG9ydCB0eXBlIE1hbmlmZXN0Q29sdW1uID0gQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGVEYXRhID0ge1xuXHRkZWZhdWx0QWdncmVnYXRlOiB7XG5cdFx0Y29udGV4dERlZmluaW5nUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHR9O1xuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGU7XG5cdGFubm90YXRpb246IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdGNvbnRyb2w6IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb247XG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRhZ2dyZWdhdGVzPzogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT47XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZUFuYWx5dGljc1NlYXJjaD86IGJvb2xlYW47XG5cdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nO1xuXHRvcGVyYXRpb25BdmFpbGFibGVQcm9wZXJ0aWVzOiBzdHJpbmc7XG5cdGhlYWRlckluZm9UaXRsZTogc3RyaW5nO1xuXHRzZW1hbnRpY0tleXM6IHN0cmluZ1tdO1xuXHRoZWFkZXJJbmZvVHlwZU5hbWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz4gfCB1bmRlZmluZWQ7XG59O1xuXG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbi1iYXNlZCBhbmQgbWFuaWZlc3QtYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyBUaGUgY29tcGxldGUgdGFibGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBDb21iaW5lZEFjdGlvbiB7XG5cdGNvbnN0IGFUYWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucztcblx0Y29uc3QgYUhpZGRlbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHRydWUsXG5cdFx0YUhpZGRlbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIHtcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRlbmFibGVPblNlbGVjdDogXCJvdmVyd3JpdGVcIixcblx0XHRlbmFibGVBdXRvU2Nyb2xsOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsXG5cdFx0dmlzaWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCIsXG5cdFx0Y29tbWFuZDogXCJvdmVyd3JpdGVcIlxuXHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdFwiYWN0aW9uc1wiOiBhY3Rpb25zLFxuXHRcdFwiY29tbWFuZEFjdGlvbnNcIjogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3NcbiAqIEByZXR1cm5zIFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdENvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkNvbHVtbnMgYXMgVGFibGVDb2x1bW5bXSwgbWFuaWZlc3RDb2x1bW5zIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VGFibGVDb2x1bW4+Piwge1xuXHRcdHdpZHRoOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGltcG9ydGFuY2U6IFwib3ZlcndyaXRlXCIsXG5cdFx0aG9yaXpvbnRhbEFsaWduOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGF2YWlsYWJpbGl0eTogXCJvdmVyd3JpdGVcIixcblx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHRmb3JtYXRPcHRpb25zOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5Gcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnVuaXQpIHtcblx0XHRcdG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuYWRkKG9UYWJsZUNvbHVtbi51bml0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IG1SYXdEZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0YUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLmZvckVhY2goKGFubm90YXRpb24pID0+IHtcblx0XHRjb25zdCBvQWdncmVnYXRlZFByb3BlcnR5ID0gYWdncmVnYXRpb25IZWxwZXIuX2VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKChvUHJvcGVydHkpID0+IHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0fSk7XG5cblx0XHRpZiAob0FnZ3JlZ2F0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdG1SYXdEZWZpbml0aW9uc1tvQWdncmVnYXRlZFByb3BlcnR5Lm5hbWVdID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcblx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAoKG9DdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9DdHhEZWZQcm9wZXJ0eS52YWx1ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IG1SZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+ID0ge307XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IG1SYXdEZWZpbml0aW9uc1tvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblxuXHRcdFx0Ly8gSWdub3JlIGFnZ3JlZ2F0ZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgYW5kIGR1bW15IGNyZWF0ZWQgcHJvcGVydHkgZm9yIGRhdGFwb2ludCB0YXJnZXQgVmFsdWVcblx0XHRcdGlmIChcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiZcblx0XHRcdFx0IW1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuaGFzKG9UYWJsZUNvbHVtbi5uYW1lKSAmJlxuXHRcdFx0XHQhb1RhYmxlQ29sdW1uLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5XG5cdFx0XHQpIHtcblx0XHRcdFx0bVJlc3VsdFtvVGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBmb3VuZENvbHVtbiA9IGZpbmRDb2x1bW5Gcm9tUGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChmb3VuZENvbHVtbikge1xuXHRcdFx0XHRcdFx0YUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMucHVzaChmb3VuZENvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1SZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0YWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXG5cdFx0XHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljc1NlYXJjaCA9IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPyBhbGxvd2VkVHJhbnNmb3JtYXRpb25zLmluZGV4T2YoXCJzZWFyY2hcIikgPj0gMCA6IHRydWU7XG5cblx0XHRcdC8vIEFkZCBncm91cCBhbmQgc29ydCBjb25kaXRpb25zIGZyb20gdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5ncm91cENvbmRpdGlvbnMgPSBnZXRHcm91cENvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZVxuXHRcdFx0KTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmFnZ3JlZ2F0ZUNvbmRpdGlvbnMgPSBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRcdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9IFwiR3JpZFRhYmxlXCI7IC8vIEFuYWx5dGljYWxUYWJsZSBpc24ndCBhIHJlYWwgdHlwZSBmb3IgdGhlIE1EQzpUYWJsZSwgc28gd2UgYWx3YXlzIHN3aXRjaCBiYWNrIHRvIEdyaWRcblx0fSBlbHNlIGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyxcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGVcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2x1bW4pID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgob1Byb3A6IFByb3BlcnR5KSA9PiBvUHJvcC5uYW1lID09PSBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGlmIChvUHJvcGVydHkpIHtcblx0XHRcdFx0Y29uc3Qgb1VuaXQgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lID0gZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkob1Byb3BlcnR5KTtcblx0XHRcdFx0Y29uc3Qgc1RpbWV6b25lID0gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0XHRcdFx0aWYgKG9Vbml0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1VuaXRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKG9Vbml0Lm5hbWUpO1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi51bml0ID0gb1VuaXRDb2x1bW4/Lm5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1VuaXQgPSBvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgfHwgb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRcdFx0aWYgKHNVbml0KSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdFRleHQgPSBgJHtzVW5pdH1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1RpbWV6b25lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RpbWV6b25lQ29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChvVGltZXpvbmUubmFtZSk7XG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRpbWV6b25lID0gb1RpbWV6b25lQ29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNUaW1lem9uZSkge1xuXHRcdFx0XHRcdG9UYWJsZUNvbHVtbi50aW1lem9uZVRleHQgPSBzVGltZXpvbmUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHRleHRBbm5vdGF0aW9uKSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlXG5cdFx0Py5wYXRoO1xuXHRjb25zdCBzZW1hbnRpY0tleUFubm90YXRpb25zOiBhbnlbXSB8IHVuZGVmaW5lZCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUoKT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdGNvbnN0IGhlYWRlckluZm9UeXBlTmFtZSA9IGNvbnZlcnRlckNvbnRleHQ/LmdldEFubm90YXRpb25FbnRpdHlUeXBlKCk/LmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWU7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1uczogc3RyaW5nW10gPSBbXTtcblx0aWYgKHNlbWFudGljS2V5QW5ub3RhdGlvbnMpIHtcblx0XHRzZW1hbnRpY0tleUFubm90YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0c2VtYW50aWNLZXlDb2x1bW5zLnB1c2gob0NvbHVtbi52YWx1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4geyBoZWFkZXJJbmZvVGl0bGVQYXRoLCBzZW1hbnRpY0tleUNvbHVtbnMsIGhlYWRlckluZm9UeXBlTmFtZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50PzogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50XG5cdCk7XG5cdGNvbnN0IHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCB9ID0gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblRhcmdldFBhdGggPSBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0Y29uc3QgbmF2aWdhdGlvblNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRUYWJsZUNvbHVtbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZSA9IGdldFNlbWFudGljS2V5c0FuZFRpdGxlSW5mbyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgdGFibGVBY3Rpb25zID0gZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKHRhYmxlQWN0aW9ucy5hY3Rpb25zKSxcblx0XHRjb21tYW5kQWN0aW9uczogdGFibGVBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBKU09OLnN0cmluZ2lmeShvcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXM6IGdldE9wZXJhdGlvbkF2YWlsYWJsZVByb3BlcnRpZXMob3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoZWFkZXJJbmZvVGl0bGU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVGl0bGVQYXRoLFxuXHRcdHNlbWFudGljS2V5czogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLnNlbWFudGljS2V5Q29sdW1ucyxcblx0XHRoZWFkZXJJbmZvVHlwZU5hbWU6IHNlbWFudGljS2V5c0FuZEhlYWRlckluZm9UaXRsZS5oZWFkZXJJbmZvVHlwZU5hbWVcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0XHRvVmlzdWFsaXphdGlvbixcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvblxuXHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRUYWJsZVZpc3VhbGl6YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RDb25maWcgPSBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZSh7fSwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIFtdLCBbXSwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZy50eXBlLCBbXSk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUgPSBnZXRTZW1hbnRpY0tleXNBbmRUaXRsZUluZm8oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCksXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllczogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXAsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhlYWRlckluZm9UaXRsZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UaXRsZVBhdGgsXG5cdFx0c2VtYW50aWNLZXlzOiBzZW1hbnRpY0tleXNBbmRIZWFkZXJJbmZvVGl0bGUuc2VtYW50aWNLZXlDb2x1bW5zLFxuXHRcdGhlYWRlckluZm9UeXBlTmFtZTogc2VtYW50aWNLZXlzQW5kSGVhZGVySW5mb1RpdGxlLmhlYWRlckluZm9UeXBlTmFtZVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3Mob1Zpc3VhbGl6YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIG9mIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIHByb3BlcnR5IHBhdGhzIGZvciBhbGwgRGF0YUZpZWxkRm9yQWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgbGluZSBpdGVtXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkIGNvbnRhaW5pbmcgYWxsIGFjdGlvbiBuYW1lcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBDb3JlLk9wZXJhdGlvbkF2YWlsYWJsZSBwcm9wZXJ0eSBwYXRoc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuXHRyZXR1cm4gQWN0aW9uSGVscGVyLmdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24sIFwidGFibGVcIiwgY29udmVydGVyQ29udGV4dCk7XG59XG5cbi8qKlxuICogR2V0cyB1cGRhdGFibGUgcHJvcGVydHlQYXRoIGZvciB0aGUgY3VycmVudCBlbnRpdHlzZXQgaWYgdmFsaWQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHVwZGF0YWJsZSBwcm9wZXJ0eSBmb3IgdGhlIHJvd3NcbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3RyaWN0aW9ucyA9IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgdXBkYXRhYmxlID0gcmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5OiBhbnkgPSAhaXNDb25zdGFudCh1cGRhdGFibGUuZXhwcmVzc2lvbikgJiYgdXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiO1xuXHRjb25zdCB1cGRhdGFibGVQcm9wZXJ0eVBhdGggPSAoZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5DYXBhYmlsaXRpZXM/LlVwZGF0ZVJlc3RyaWN0aW9ucz8uVXBkYXRhYmxlIGFzIGFueSk/LnBhdGg7XG5cblx0cmV0dXJuIGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkgPyAodXBkYXRhYmxlUHJvcGVydHlQYXRoIGFzIHN0cmluZykgOiBcIlwiO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgcHJvcGVydHkgcGF0aHMgYXNzaWduZWQgdG8gdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbkF2YWlsYWJsZU1hcCBUaGUgcmVjb3JkIGNvbnNpc3Rpbmcgb2YgYWN0aW9ucyBhbmQgdGhlaXIgQ29yZS5PcGVyYXRpb25BdmFpbGFibGUgcHJvcGVydHkgcGF0aHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBDU1Ygc3RyaW5nIG9mIGFsbCBwcm9wZXJ0eSBwYXRocyBhc3NvY2lhdGVkIHdpdGggdGhlIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlUHJvcGVydGllcyhvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gbmV3IFNldCgpO1xuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiBvcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBvcGVyYXRpb25BdmFpbGFibGVNYXBbYWN0aW9uTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5TmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gQW5ub3RhdGlvbiBjb25maWd1cmVkIHdpdGggZXhwbGljaXQgJ251bGwnIChhY3Rpb24gYWR2ZXJ0aXNlbWVudCByZWxldmFudClcblx0XHRcdHByb3BlcnRpZXMuYWRkKGFjdGlvbk5hbWUpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHByb3BlcnR5TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gQWRkIHByb3BlcnR5IHBhdGhzIGFuZCBub3QgQ29uc3RhbnQgdmFsdWVzLlxuXHRcdFx0cHJvcGVydGllcy5hZGQocHJvcGVydHlOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRpZiAocHJvcGVydGllcy5zaXplKSB7XG5cdFx0Ly8gU29tZSBhY3Rpb25zIGhhdmUgYW4gb3BlcmF0aW9uIGF2YWlsYWJsZSBiYXNlZCBvbiBwcm9wZXJ0eSAtLT4gd2UgbmVlZCB0byBsb2FkIHRoZSBIZWFkZXJJbmZvLlRpdGxlIHByb3BlcnR5XG5cdFx0Ly8gc28gdGhhdCB0aGUgZGlhbG9nIG9uIHBhcnRpYWwgYWN0aW9ucyBpcyBkaXNwbGF5ZWQgcHJvcGVybHkgKEJDUCAyMTgwMjcxNDI1KVxuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCB0aXRsZVByb3BlcnR5ID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoO1xuXHRcdGlmICh0aXRsZVByb3BlcnR5KSB7XG5cdFx0XHRwcm9wZXJ0aWVzLmFkZCh0aXRsZVByb3BlcnR5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gQXJyYXkuZnJvbShwcm9wZXJ0aWVzKS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIHJldHVybnMgYWxsIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIE9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIEFsbCB0aGUgYFVJLkhpZGRlbmAgcGF0aCBleHByZXNzaW9ucyBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChlcXVhbChnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoZGF0YUZpZWxkLCBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCwgaXNFbnRpdHlTZXQpLCBmYWxzZSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGNvbnRleHQgY3VycmVudGx5IHJlZmVyZW5jZWQgYnkgdGhpcyBiaW5kaW5nIGJ5IHJlbW92aW5nIHRoZSBsYXN0IG5hdmlnYXRpb24gcHJvcGVydHkuXG4gKlxuICogSXQgaXMgdXNlZCAoc3BlY2lmaWNhbGx5IGluIHRoaXMgY2FzZSksIHRvIHRyYW5zZm9ybSBhIGJpbmRpbmcgbWFkZSBmb3IgYSBOYXZQcm9wIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEvTmF2UHJvcDIsXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqXG4gKiBAcGFyYW0gc291cmNlIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvblxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nRXhwRnJvbUNvbnRleHQoXG5cdHNvdXJjZTogRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+IHtcblx0bGV0IHNFeHByZXNzaW9uOiBhbnkgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0KSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9IGVsc2Uge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlO1xuXHR9XG5cdGxldCBzUGF0aDogc3RyaW5nO1xuXHRpZiAoc0V4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kIGNoZWNrXG4gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciAoYW5kIHJlcXVpcmVzIGEgY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUgJiZcblx0XHRcdChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gZmFsc2UgfHwgZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHVuZGVmaW5lZClcblx0XHQpIHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgbGluZUl0ZW0gY29udGV4dCBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBhY3Rpb246XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJiBjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5zb21lKChhY3Rpb25LZXkpID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RBY3Rpb25zKS5mb3JFYWNoKChhY3Rpb25LZXkpID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVudGlhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSB0YWJsZSBjYXBhYmlsaXRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24ge1xuXHRjb25zdCBpc0RlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IGlzVXBkYXRhYmxlID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc0RlbGV0YWJsZTogIShpc0NvbnN0YW50KGlzRGVsZXRhYmxlKSAmJiBpc0RlbGV0YWJsZS52YWx1ZSA9PT0gZmFsc2UpLFxuXHRcdGlzVXBkYXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNVcGRhdGFibGUpICYmIGlzVXBkYXRhYmxlLnZhbHVlID09PSBmYWxzZSlcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvbk1vZGUoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuLFxuXHR0YXJnZXRDYXBhYmlsaXRpZXM6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIWxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdH1cblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0bGV0IHNlbGVjdGlvbk1vZGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncz8uc2VsZWN0aW9uTW9kZTtcblx0bGV0IGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlRXhwcmVzc2lvbihpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXG5cdGNvbnN0IGJNYXNzRWRpdEVuYWJsZWQ6IGJvb2xlYW4gPSAhaXNDb25zdGFudChtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSB8fCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLnZhbHVlICE9PSBmYWxzZTtcblx0aWYgKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5Ob25lICYmIGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIE1hc3MgRWRpdCBpbiBPUCBpcyBlbmFibGVkIG9ubHkgaW4gZWRpdCBtb2RlLlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0YW5kKFVJLklzRWRpdGFibGUsIG1hc3NFZGl0VmlzaWJpbGl0eUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGNvbnN0YW50KFwiTXVsdGlcIiksXG5cdFx0XHRcdFx0aWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uLCBjb25zdGFudChcIk11bHRpXCIpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0fVxuXHRpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblx0aWYgKGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHQvLyBPdmVycmlkZSBkZWZhdWx0IHNlbGVjdGlvbiBtb2RlIHdoZW4gbWFzcyBlZGl0IGlzIHZpc2libGVcblx0XHRzZWxlY3Rpb25Nb2RlID0gc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TaW5nbGUgPyBTZWxlY3Rpb25Nb2RlLlNpbmdsZSA6IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucy5hY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0aXNFbnRpdHlTZXRcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMpO1xuXG5cdC8vIE5vIGFjdGlvbiByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHRpZiAoXG5cdFx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDAgJiZcblx0XHQoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgYk1hc3NFZGl0RW5hYmxlZClcblx0KSB7XG5cdFx0aWYgKCFpc0VudGl0eVNldCkge1xuXHRcdFx0Ly8gRXhhbXBsZTogT1AgY2FzZVxuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIiB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHRcdC8vIEJ1aWxkaW5nIGV4cHJlc3Npb24gZm9yIGRlbGV0ZSBhbmQgbWFzcyBlZGl0XG5cdFx0XHRcdGNvbnN0IGJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gb3IoXG5cdFx0XHRcdFx0ZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gfHwgdHJ1ZSwgLy8gZGVmYXVsdCBkZWxldGUgdmlzaWJpbGl0eSBhcyB0cnVlXG5cdFx0XHRcdFx0bWFzc0VkaXRWaXNpYmlsaXR5RXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0aWZFbHNlKGFuZChVSS5Jc0VkaXRhYmxlLCBidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHRcdH1cblx0XHRcdC8vIEVudGl0eVNldCBkZWxldGFibGU6XG5cdFx0fSBlbHNlIGlmIChiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0XHQvLyBleGFtcGxlOiBMUiBzY2VuYXJpb1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgJiYgZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZGVsZXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24sIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChcIk5vbmVcIikpKTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdC8vIEV4YW1wbGU6IE9QIGNhc2Vcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiIHx8IGJNYXNzRWRpdEVuYWJsZWQpIHtcblx0XHRcdC8vIFVzZSBzZWxlY3Rpb25Nb2RlIGluIGVkaXQgbW9kZSBpZiBkZWxldGUgaXMgZW5hYmxlZCBvciBtYXNzIGVkaXQgaXMgdmlzaWJsZVxuXHRcdFx0Y29uc3QgZWRpdE1vZGVidXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRcdFx0Yk1hc3NFZGl0RW5hYmxlZCAmJiAhdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLFxuXHRcdFx0XHRtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uLFxuXHRcdFx0XHRjb25zdGFudCh0cnVlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCBlZGl0TW9kZWJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRvciguLi5hSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmNvbmNhdChhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucykpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Ly9FbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSB8fCBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0Ly8gRXhhbXBsZTogTFIgc2NlbmFyaW9cblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpLCBtYXNzRWRpdFZpc2liaWxpdHlFeHByZXNzaW9uKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHRhYmxlIGFubm90YXRpb24gYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgdGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGxldCB0YWJsZUFjdGlvbjogQW5ub3RhdGlvbkFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdCEoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuSW5saW5lICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuRGV0ZXJtaW5pbmdcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5UYWJsZUFjdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQWN0aW9uKSB7XG5cdFx0XHRcdHRhYmxlQWN0aW9ucy5wdXNoKHRhYmxlQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHRhYmxlQWN0aW9uczogdGFibGVBY3Rpb25zLFxuXHRcdGhpZGRlblRhYmxlQWN0aW9uczogaGlkZGVuVGFibGVBY3Rpb25zXG5cdH07XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdGNyaXRpY2FsaXR5QW5ub3RhdGlvbjogUGF0aEFubm90YXRpb25FeHByZXNzaW9uPENyaXRpY2FsaXR5VHlwZT4gfCBFbnVtVmFsdWU8Q3JpdGljYWxpdHlUeXBlPiB8IHVuZGVmaW5lZCxcblx0aXNEcmFmdFJvb3Q6IGJvb2xlYW4sXG5cdHRhcmdldEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYU1pc3NpbmdLZXlzOiBhbnlbXSA9IFtdO1xuXHR0YXJnZXRFbnRpdHlUeXBlPy5rZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG5cdFx0aWYgKGtleS5uYW1lICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFNaXNzaW5nS2V5cy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCB1bmRlZmluZWQpKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBmb3JtYXRSZXN1bHQoXG5cdFx0W1xuXHRcdFx0ZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24sXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRpc0RyYWZ0Um9vdCAmJiBFbnRpdHkuSGFzQWN0aXZlLFxuXHRcdFx0aXNEcmFmdFJvb3QgJiYgRW50aXR5LklzQWN0aXZlLFxuXHRcdFx0YCR7aXNEcmFmdFJvb3R9YCxcblx0XHRcdC4uLmFNaXNzaW5nS2V5c1xuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG9yaWdpbmFsVGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IHRhcmdldEFubm90YXRpb25zQ29tbW9uID0gdGFyZ2V0QW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24sXG5cdFx0XHR0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19TZXNzaW9uO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9uc1Nlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/Lk5ld0FjdGlvbjtcblxuXHRcdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyAmJiBuZXdBY3Rpb24pIHtcblx0XHRcdC8vIEEgY29tYmluYXRpb24gb2YgJ0NyZWF0aW9uUm93JyBhbmQgJ05ld0FjdGlvbicgZG9lcyBub3QgbWFrZSBzZW5zZVxuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIHdhcyBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3JlYXRlQXRFbmQgd2UgZm9yY2UgaXQgdG8gZmFsc2Vcblx0XHRpZiAob3JpZ2luYWxUYWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRhcHBlbmQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0ZUF0RW5kLFxuXHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpXG5cdH07XG59XG5cbmNvbnN0IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gY29uc3RhbnQoTWVzc2FnZVR5cGUuTm9uZSk7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0ICYmICFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbih0YXJnZXRFbnRpdHlTZXQpKSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0XHRcdCEhTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290KHRhcmdldEVudGl0eVNldCkgfHwgISFNb2RlbEhlbHBlci5nZXREcmFmdE5vZGUodGFyZ2V0RW50aXR5U2V0KSxcblx0XHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFwiQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdFx0KE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdCh0YXJnZXRFbnRpdHlTZXQpIHx8IE1vZGVsSGVscGVyLmdldERyYWZ0Tm9kZSh0YXJnZXRFbnRpdHlTZXQpXG5cdFx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSwgZmFsc2UsIHRhcmdldEVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W3BhdGhJbk1vZGVsKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUV4cHJlc3Npb24oY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlRXhwcmVzc2lvbihyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoVUkuSXNJbmFjdGl2ZSkpXG5cdH07XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjb2x1bW5zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbHVtbnNUb0JlQ3JlYXRlZCBUaGUgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkIGJhc2VkIG9uIExpbmVJdGVtIGFubm90YXRpb25zLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbiAoXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IGFubm90YXRpb25Db2x1bW5zO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBJbmNsdWRlIHRleHQgcHJvcGVydGllcyBmb3VuZCBkdXJpbmcgYW5hbHlzaXMgb24gZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9uc1xuXHRcdFx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24ucHVzaCguLi5yZWxhdGVkUHJvcGVydGllc0luZm8udGV4dE9ubHlQcm9wZXJ0aWVzRnJvbVRleHRBbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0KTtcblxuXHRcdFx0Y29uc3Qgc2VtYW50aWNLZXlzID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkNvbW1vblwiLCBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNLZXksIFtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdF0pWzBdO1xuXHRcdFx0Y29uc3Qgb0NvbHVtbkRyYWZ0SW5kaWNhdG9yID0gZ2V0RGVmYXVsdERyYWZ0SW5kaWNhdG9yRm9yQ29sdW1uKGNvbHVtbkluZm8ubmFtZSwgc2VtYW50aWNLZXlzLCBmYWxzZSwgbnVsbCk7XG5cdFx0XHRpZiAoT2JqZWN0LmtleXMob0NvbHVtbkRyYWZ0SW5kaWNhdG9yKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdFx0XHQuLi5vQ29sdW1uRHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyA9IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdC4uLmNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudHlwZSA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKTtcblxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFVuaXROYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdE5hbWU7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudW5pdCA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0U3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lKSB7XG5cdFx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncy50aW1lem9uZVByb3BlcnR5ID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZTtcblx0XHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLnV0YyA9IGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZykge1xuXHRcdFx0XHRcdGNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MudGltZXpvbmUgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVTdHJpbmc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBhIHByb3BlcnR5IGhhcyBkZWZpbmVkIGEgI1RleHRPbmx5IHRleHQgYXJyYW5nZW1lbnQgZG9uJ3Qgb25seSBjcmVhdGUgdGhlIGNvbXBsZXggcHJvcGVydHkgd2l0aCB0aGUgdGV4dCBwcm9wZXJ0eSBhcyBhIGNoaWxkIHByb3BlcnR5LFxuXHRcdC8vIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0eSBpdHNlbGYgYXMgaXQgY2FuIGJlIHVzZWQgYXMgd2l0aGluIHRoZSBzb3J0Q29uZGl0aW9ucyBvciBvbiBjdXN0b20gY29sdW1ucy5cblx0XHQvLyBUaGlzIHN0ZXAgbXVzdCBiZSB2YWxpZGUgYWxzbyBmcm9tIHRoZSBjb2x1bW5zIGFkZGVkIHZpYSBMaW5lSXRlbXMgb3IgZnJvbSBhIGNvbHVtbiBhdmFpbGFibGUgb24gdGhlIHAxM24uXG5cdFx0aWYgKGdldERpc3BsYXlNb2RlKHByb3BlcnR5KSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMgPSBub25Tb3J0YWJsZUNvbHVtbnMuY29uY2F0KHByb3BlcnR5Lm5hbWUpO1xuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRbXVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHR0YWJsZUNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gYSBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIGF2YWlsYWJsZUZvckFkYXB0YXRpb24gRGVjaWRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkhlbHBlciBUaGUgYWdncmVnYXRpb25IZWxwZXIgZm9yIHRoZSBlbnRpdHlcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbiBUaGUgYXJyYXkgb2YgY29sdW1ucyBmcm9tIGEgcHJvcGVydHkgdXNpbmcgYSB0ZXh0IGFubm90YXRpb24gd2l0aCB0ZXh0T25seSBhcyB0ZXh0IGFycmFuZ2VtZW50LlxuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHk6IFByb3BlcnR5LFxuXHRmdWxsUHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuXHR1c2VEYXRhRmllbGRQcmVmaXg6IGJvb2xlYW4sXG5cdGF2YWlsYWJsZUZvckFkYXB0YXRpb246IGJvb2xlYW4sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGFnZ3JlZ2F0aW9uSGVscGVyOiBBZ2dyZWdhdGlvbkhlbHBlcixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uOiBzdHJpbmdbXVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uIHtcblx0Y29uc3QgbmFtZSA9IHVzZURhdGFGaWVsZFByZWZpeCA/IHJlbGF0aXZlUGF0aCA6IGBQcm9wZXJ0eTo6JHtyZWxhdGl2ZVBhdGh9YDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk6IGJvb2xlYW4gPSBuYW1lLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTE7XG5cdGNvbnN0IGV4cG9ydFR5cGU6IHN0cmluZyA9IF9nZXRFeHBvcnREYXRhVHlwZShwcm9wZXJ0eS50eXBlKTtcblx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uRGF0ZVwiID8gXCJZWVlZLU1NLUREXCIgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXREYXRhRmllbGREYXRhVHlwZShwcm9wZXJ0eSk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9ICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IGdldFR5cGVDb25maWcocHJvcGVydHksIGRhdGFUeXBlKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJDb21tb25cIiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljS2V5LCBbXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XSlbMF07XG5cdGNvbnN0IGlzQVByb3BlcnR5RnJvbVRleHRPbmx5QW5ub3RhdGlvbiA9XG5cdFx0dGV4dE9ubHlDb2x1bW5zRnJvbVRleHRBbm5vdGF0aW9uICYmIHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5pbmRleE9mKHJlbGF0aXZlUGF0aCkgPj0gMDtcblx0Y29uc3Qgc29ydGFibGUgPVxuXHRcdCghaXNIaWRkZW4gfHwgaXNBUHJvcGVydHlGcm9tVGV4dE9ubHlBbm5vdGF0aW9uKSAmJiBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihyZWxhdGl2ZVBhdGgpID09PSAtMSAmJiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdGNsYXNzTmFtZTogcHJvcGVydHkudHlwZSB8fCBkYXRhVHlwZSxcblx0XHRcdFx0b0Zvcm1hdE9wdGlvbnM6IHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRvQ29uc3RyYWludHM6IHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50c1xuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRsZXQgZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KVxuXHRcdCAgfVxuXHRcdDogbnVsbDtcblxuXHRpZiAoIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5ICYmIF9pc0V4cG9ydGFibGVDb2x1bW4ocHJvcGVydHkpKSB7XG5cdFx0Y29uc3Qgb1VuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBvVGltZXpvbmVQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRjb25zdCBzVW5pdFRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdGNvbnN0IHNUaW1lem9uZVRleHQgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdFx0ZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHR0eXBlOiBleHBvcnRUeXBlLFxuXHRcdFx0aW5wdXRGb3JtYXQ6IHNEYXRlSW5wdXRGb3JtYXQsXG5cdFx0XHRzY2FsZTogcHJvcGVydHkuc2NhbGUsXG5cdFx0XHRkZWxpbWl0ZXI6IHByb3BlcnR5LnR5cGUgPT09IFwiRWRtLkludDY0XCJcblx0XHR9O1xuXHRcdGlmIChvVW5pdFByb3BlcnR5KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy51bml0UHJvcGVydHkgPSBvVW5pdFByb3BlcnR5Lm5hbWU7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHR9IGVsc2UgaWYgKHNVbml0VGV4dCkge1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudW5pdCA9IGAke3NVbml0VGV4dH1gO1xuXHRcdH1cblx0XHRpZiAob1RpbWV6b25lUHJvcGVydHkpIHtcblx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkgPSBvVGltZXpvbmVQcm9wZXJ0eS5uYW1lO1xuXHRcdFx0ZXhwb3J0U2V0dGluZ3MudXRjID0gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChzVGltZXpvbmVUZXh0KSB7XG5cdFx0XHRleHBvcnRTZXR0aW5ncy50aW1lem9uZSA9IHNUaW1lem9uZVRleHQudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMocmVsYXRpdmVQYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0a2V5OiBrZXksXG5cdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdGxhYmVsOiBnZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCksXG5cdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKHByb3BlcnR5KSA6IG51bGwsXG5cdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHQvLyBBIGZha2UgcHJvcGVydHkgd2FzIGNyZWF0ZWQgZm9yIHRoZSBUYXJnZXRWYWx1ZSB1c2VkIG9uIERhdGFQb2ludHMsIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhpZGRlbiBhbmQgbm9uIHNvcnRhYmxlXG5cdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0IWF2YWlsYWJsZUZvckFkYXB0YXRpb24gfHwgaXNIaWRkZW4gfHwgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuQWRhcHRhdGlvbixcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHJlbGF0aXZlUGF0aDogaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHRcdD8gKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LlZhbHVlPy5wYXRoIHx8IChwcm9wZXJ0eSBhcyBhbnkpLlZhbHVlLnBhdGhcblx0XHRcdDogcmVsYXRpdmVQYXRoLFxuXHRcdHNvcnRhYmxlOiBzb3J0YWJsZSxcblx0XHRpc0dyb3VwYWJsZTogYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSA/IGFnZ3JlZ2F0aW9uSGVscGVyLmlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHkpIDogc29ydGFibGUsXG5cdFx0aXNLZXk6IHByb3BlcnR5LmlzS2V5LFxuXHRcdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5OiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdHZpc3VhbFNldHRpbmdzOiBpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSA/IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9IDogdW5kZWZpbmVkLFxuXHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UoKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0LCBzZW1hbnRpY0tleXMpLFxuXHRcdGFkZGl0aW9uYWxMYWJlbHM6IGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVsc1xuXHR9O1xuXHRjb25zdCBzVG9vbHRpcCA9IF9nZXRUb29sdGlwKHByb3BlcnR5KTtcblx0aWYgKHNUb29sdGlwKSB7XG5cdFx0b0NvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdH1cblxuXHRyZXR1cm4gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG59O1xuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciBleHBvcnRhYmxlIGNvbHVtbnMsIGZhbHNlIGZvciBub24gZXhwb3J0YWJsZSBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIGRhdGFGaWVsZCBvciBwcm9wZXJ0eSB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIFRydWUgZm9yIGV4cG9ydGFibGUgY29sdW1uLCBmYWxzZSBmb3Igbm9uIGV4cG9ydGFibGUgY29sdW1uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIF9pc0V4cG9ydGFibGVDb2x1bW4oc291cmNlOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgUHJvcGVydHkpOiBib29sZWFuIHtcblx0bGV0IHByb3BlcnR5VHlwZSwgcHJvcGVydHk7XG5cdGNvbnN0IGRhdGFGaWVsZERlZmF1bHRQcm9wZXJ0eVR5cGUgPSAoc291cmNlIGFzIFByb3BlcnR5KS5hbm5vdGF0aW9ucz8uVUk/LkRhdGFGaWVsZERlZmF1bHQ/LiRUeXBlO1xuXHRpZiAoaXNQcm9wZXJ0eShzb3VyY2UgJiYgZGF0YUZpZWxkRGVmYXVsdFByb3BlcnR5VHlwZSkpIHtcblx0XHRwcm9wZXJ0eVR5cGUgPSBkYXRhRmllbGREZWZhdWx0UHJvcGVydHlUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5ID0gc291cmNlIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdFx0cHJvcGVydHlUeXBlID0gcHJvcGVydHkuJFR5cGU7XG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAocHJvcGVydHkgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHQvL0ZvciBDaGFydFxuXHRcdFx0cHJvcGVydHlUeXBlID0gKHByb3BlcnR5IGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldC4kdGFyZ2V0LiRUeXBlO1xuXHRcdFx0cmV0dXJuIFVJQW5ub3RhdGlvblR5cGVzLkNoYXJ0RGVmaW5pdGlvblR5cGUuaW5kZXhPZihwcm9wZXJ0eVR5cGUpID09PSAtMTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0KHByb3BlcnR5IGFzIERhdGFGaWVsZCkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5NZWRpYVR5cGU/LnRlcm0gPT09IFwiT3JnLk9EYXRhLkNvcmUuVjEuTWVkaWFUeXBlXCIgJiZcblx0XHRcdChwcm9wZXJ0eSBhcyBEYXRhRmllbGQpLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uaXNVUkwgIT09IHRydWVcblx0XHQpIHtcblx0XHRcdC8vRm9yIFN0cmVhbVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlUeXBlXG5cdFx0PyBbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHRcdCAgXS5pbmRleE9mKHByb3BlcnR5VHlwZSkgPT09IC0xXG5cdFx0OiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgQm9vbGVhbiB0cnVlIGZvciB2YWxpZCBjb2x1bW5zLCBmYWxzZSBmb3IgaW52YWxpZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdGhlIHZpc2liaWxpdHkgb2YgYSBEYXRhRmllbGQgb3IgRGF0YVBvaW50IGFubm90YXRpb24uXG4gKlxuICogU0FQIEZpb3JpIGVsZW1lbnRzIHdpbGwgZXZhbHVhdGUgZWl0aGVyIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBkZWZpbmVkIG9uIHRoZSBhbm5vdGF0aW9uIGl0c2VsZiBvciBvbiB0aGUgdGFyZ2V0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRNb2RlbFBhdGggVGhlIG1ldGFwYXRoIHJlZmVycmluZyB0byB0aGUgYW5ub3RhdGlvbiB0aGF0IGlzIGV2YWx1YXRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKiBAcGFyYW0gW2Zvcm1hdE9wdGlvbnNdIEZvcm1hdE9wdGlvbnMgb3B0aW9uYWwuXG4gKiBAcGFyYW0gZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyBUaGlzIGZsYWcgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgYW5hbHl0aWMgdGFibGUgaGFzIEdyb3VwSGVhZGVyIGV4cGFuZGVkLlxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gYmluZCB0byB0aGUgVUkuXG4gKi9cbmV4cG9ydCBjb25zdCBfZ2V0VmlzaWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZE1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Zm9ybWF0T3B0aW9ucz86IGFueVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGFueT4ge1xuXHRjb25zdCB0YXJnZXRPYmplY3Q6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMgPSBkYXRhRmllbGRNb2RlbFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRsZXQgcHJvcGVydHlWYWx1ZTtcblx0aWYgKHRhcmdldE9iamVjdCkge1xuXHRcdHN3aXRjaCAodGFyZ2V0T2JqZWN0LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlOlxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gdGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0XHQvLyBpZiBpdCBpcyBhIERhdGFGaWVsZEZvckFubm90YXRpb24gcG9pbnRpbmcgdG8gYSBEYXRhUG9pbnQgd2UgbG9vayBhdCB0aGUgZGF0YVBvaW50J3MgdmFsdWVcblx0XHRcdFx0aWYgKHRhcmdldE9iamVjdD8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSB0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQ/LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gVUkuSXNFeHBhbmRlZCA6IGNvbnN0YW50KGZhbHNlKTtcblx0Y29uc3QgaXNBbmFseXRpY2FsTGVhZiA9IGZvcm1hdE9wdGlvbnM/LmlzQW5hbHl0aWNzID8gZXF1YWwoVUkuTm9kZUxldmVsLCAwKSA6IGNvbnN0YW50KGZhbHNlKTtcblxuXHQvLyBBIGRhdGEgZmllbGQgaXMgdmlzaWJsZSBpZjpcblx0Ly8gLSB0aGUgVUkuSGlkZGVuIGV4cHJlc3Npb24gaW4gdGhlIG9yaWdpbmFsIGFubm90YXRpb24gZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gdGhlIFVJLkhpZGRlbiBleHByZXNzaW9uIGluIHRoZSB0YXJnZXQgcHJvcGVydHkgZG9lcyBub3QgZXZhbHVhdGUgdG8gJ3RydWUnXG5cdC8vIC0gaW4gY2FzZSBvZiBBbmFseXRpY3MgaXQncyBub3QgdmlzaWJsZSBmb3IgYW4gZXhwYW5kZWQgR3JvdXBIZWFkZXJcblx0cmV0dXJuIGFuZChcblx0XHQuLi5bXG5cdFx0XHRub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdCEhcHJvcGVydHlWYWx1ZSxcblx0XHRcdFx0cHJvcGVydHlWYWx1ZSAmJiBub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5VmFsdWUuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSksXG5cdFx0XHRcdHRydWVcblx0XHRcdCksXG5cdFx0XHRvcihub3QoaXNBbmFseXRpY2FsR3JvdXBIZWFkZXJFeHBhbmRlZCksIGlzQW5hbHl0aWNhbExlYWYpXG5cdFx0XVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGhpZGRlbiBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciBhIGZpZWxkIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRHcm91cCBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMgRm9ybWF0T3B0aW9ucyBvcHRpb25hbC5cbiAqIEBwYXJhbSBmaWVsZEZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgVGhpcyBmbGFnIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGFuYWx5dGljIHRhYmxlIGhhcyBHcm91cEhlYWRlciBleHBhbmRlZC5cbiAqIEByZXR1cm5zIENvbXBpbGUgYmluZGluZyBvZiBmaWVsZCBncm91cCBleHByZXNzaW9ucy5cbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgPSBmdW5jdGlvbiAoXG5cdGRhdGFGaWVsZEdyb3VwOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRmaWVsZEZvcm1hdE9wdGlvbnM6IGFueVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdID0gW107XG5cdGlmIChcblx0XHRkYXRhRmllbGRHcm91cC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlXG5cdCkge1xuXHRcdGRhdGFGaWVsZEdyb3VwLlRhcmdldC4kdGFyZ2V0LkRhdGE/LmZvckVhY2goKGlubmVyRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZVR5cGVzKSA9PiB7XG5cdFx0XHRhRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLnB1c2goXG5cdFx0XHRcdF9nZXRWaXNpYmxlRXhwcmVzc2lvbih7IHRhcmdldE9iamVjdDogaW5uZXJEYXRhRmllbGQgfSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoLCBmaWVsZEZvcm1hdE9wdGlvbnMpXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2Uob3IoLi4uYUZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyksIGNvbnN0YW50KHRydWUpLCBjb25zdGFudChmYWxzZSkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqXG4gKiBAcGFyYW0gW3Byb3BlcnR5XSBQcm9wZXJ0eSwgRGF0YUZpZWxkIG9yIE5hdmlnYXRpb24gUHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBpc0dyb3VwXG4gKiBAcmV0dXJucyBMYWJlbCBvZiB0aGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBnZXRMYWJlbCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5LCBpc0dyb3VwID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IChwcm9wZXJ0eSBhcyBQcm9wZXJ0eSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKTtcblx0fSBlbHNlIGlmIChpc0RhdGFGaWVsZFR5cGVzKHByb3BlcnR5KSkge1xuXHRcdGlmICghIWlzR3JvdXAgJiYgcHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRwcm9wZXJ0eS5MYWJlbD8udmFsdWVPZigpIHx8IChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKClcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHR9XG59O1xuXG5jb25zdCBfZ2V0VG9vbHRpcCA9IGZ1bmN0aW9uIChzb3VyY2U6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc291cmNlKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChpc1Byb3BlcnR5KHNvdXJjZSkgfHwgc291cmNlLmFubm90YXRpb25zPy5Db21tb24/LlF1aWNrSW5mbykge1xuXHRcdHJldHVybiBzb3VyY2UuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuYW5ub3RhdGlvbnMuQ29tbW9uLlF1aWNrSW5mby52YWx1ZU9mKCkpKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhzb3VyY2UpKSB7XG5cdFx0cmV0dXJuIHNvdXJjZS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihzb3VyY2UuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChzb3VyY2UuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRjb25zdCBkYXRhcG9pbnRUYXJnZXQgPSBzb3VyY2UuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblx0XHRyZXR1cm4gZGF0YXBvaW50VGFyZ2V0Py5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uUXVpY2tJbmZvXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhcG9pbnRUYXJnZXQuVmFsdWUuJHRhcmdldC5hbm5vdGF0aW9ucy5Db21tb24uUXVpY2tJbmZvLnZhbHVlT2YoKSkpXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShjb2xOYW1lOiBzdHJpbmcsIGlzU2VtYW50aWNLZXlJbkZpZWxkR3JvdXA/OiBCb29sZWFuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGZvcm1hdFJlc3VsdChcblx0XHRbXG5cdFx0XHRwYXRoSW5Nb2RlbChgc2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvcmAsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRwYXRoSW5Nb2RlbChgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIiksXG5cdFx0XHRjb2xOYW1lLFxuXHRcdFx0aXNTZW1hbnRpY0tleUluRmllbGRHcm91cFxuXHRcdF0sXG5cdFx0dGFibGVGb3JtYXR0ZXJzLmdldEVycm9yU3RhdHVzVGV4dFZpc2liaWxpdHlGb3JtYXR0ZXJcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEBwYXJhbSB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb24gVGhlIGFycmF5IG9mIGNvbHVtbnMgZnJvbSBhIHByb3BlcnR5IHVzaW5nIGEgdGV4dCBhbm5vdGF0aW9uIHdpdGggdGV4dE9ubHkgYXMgdGV4dCBhcnJhbmdlbWVudC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQuXG4gKi9cbmNvbnN0IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyA9IGZ1bmN0aW9uIChcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbjogc3RyaW5nW11cbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0sXG5cdFx0XHRhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChuYW1lKSxcblx0XHRcdC8vIENoZWNrIHdoZXRoZXIgdGhlIHJlbGF0ZWQgY29sdW1uIGFscmVhZHkgZXhpc3RzLlxuXHRcdFx0cmVsYXRlZENvbHVtbiA9IGV4aXN0aW5nQ29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHwgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zKSB7XG5cdFx0XHQvLyBDYXNlIDI6IFRoZSBleGlzdGluZyBjb2x1bW4gcG9pbnRzIHRvIGEgTGluZUl0ZW0gKG9yKVxuXHRcdFx0Ly8gQ2FzZSAzOiBUaGlzIGlzIGEgc2VsZiByZWZlcmVuY2UgZnJvbSBhbiBleGlzdGluZyBjb2x1bW5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IGBQcm9wZXJ0eTo6JHtuYW1lfWA7XG5cblx0XHRcdC8vIENoZWNraW5nIHdoZXRoZXIgdGhlIHJlbGF0ZWQgcHJvcGVydHkgY29sdW1uIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBhIHByZXZpb3VzIGl0ZXJhdGlvbi5cblx0XHRcdGlmICghZXhpc3RpbmdDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0Y29uc3QgY29sdW1uID0gZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbSA9IHJlbGF0ZWRDb2x1bW4uaXNQYXJ0T2ZMaW5lSXRlbTtcblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGV4aXN0aW5nQ29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuZXdOYW1lKSAmJlxuXHRcdFx0XHRleGlzdGluZ0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHlJbmZvcz8uaW5jbHVkZXMobmFtZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZU1hcFtuYW1lXSA9IG5ld05hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgcHJvcGVydHkgJ25hbWUnIGhhcyBiZWVuIHByZWZpeGVkIHdpdGggJ1Byb3BlcnR5OjonIGZvciB1bmlxdWVuZXNzLlxuXHQvLyBVcGRhdGUgdGhlIHNhbWUgaW4gb3RoZXIgcHJvcGVydHlJbmZvc1tdIHJlZmVyZW5jZXMgd2hpY2ggcG9pbnQgdG8gdGhpcyBwcm9wZXJ0eS5cblx0ZXhpc3RpbmdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcCgocHJvcGVydHlJbmZvKSA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvKTtcblx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lm1hcChcblx0XHRcdChwcm9wZXJ0eUluZm8pID0+IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbcHJvcGVydHlJbmZvXSA/PyBwcm9wZXJ0eUluZm9cblx0XHQpO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVsYXRlZENvbHVtbnM7XG59O1xuXG4vKipcbiAqIEdldHRpbmcgdGhlIENvbHVtbiBOYW1lXG4gKiBJZiBpdCBwb2ludHMgdG8gYSBEYXRhRmllbGQgd2l0aCBvbmUgcHJvcGVydHkgb3IgRGF0YVBvaW50IHdpdGggb25lIHByb3BlcnR5LCBpdCB3aWxsIHVzZSB0aGUgcHJvcGVydHkgbmFtZVxuICogaGVyZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGV4aXN0aW5nIGZsZXggY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykge1xuXHQvLyBUaGlzIGlzIG5lZWRlZCBhcyB3ZSBoYXZlIGZsZXhpYmlsaXR5IGNoYW5nZXMgYWxyZWFkeSB0aGF0IHdlIGhhdmUgdG8gY2hlY2sgYWdhaW5zdFxuXHRpZiAoaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQpKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5WYWx1ZT8ucGF0aDtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiYgKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LnBhdGgpIHtcblx0XHQvLyBUaGlzIGlzIGZvciByZW1vdmluZyBkdXBsaWNhdGUgcHJvcGVydGllcy4gRm9yIGV4YW1wbGUsICdQcm9ncmVzcycgUHJvcGVydHkgaXMgcmVtb3ZlZCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBEYXRhUG9pbnRcblx0XHRyZXR1cm4gKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUucGF0aDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHR9XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZmllbGQgbGFiZWxzIGhhdmUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cE5hbWUgVGhlIGBEYXRhRmllbGRgIG5hbWUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgYHNob3dEYXRhRmllbGRzTGFiZWxgIHZhbHVlIGZyb20gdGhlIG1hbmlmZXN0XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0U2hvd0RhdGFGaWVsZHNMYWJlbCA9IGZ1bmN0aW9uIChmaWVsZEdyb3VwTmFtZTogc3RyaW5nLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Db2x1bW5zID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKT8uY29sdW1ucztcblx0Y29uc3QgYUNvbHVtbktleXMgPSBvQ29sdW1ucyAmJiBPYmplY3Qua2V5cyhvQ29sdW1ucyk7XG5cdHJldHVybiAoXG5cdFx0YUNvbHVtbktleXMgJiZcblx0XHQhIWFDb2x1bW5LZXlzLmZpbmQoZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4ga2V5ID09PSBmaWVsZEdyb3VwTmFtZSAmJiBvQ29sdW1uc1trZXldLnNob3dEYXRhRmllbGRzTGFiZWw7XG5cdFx0fSlcblx0KTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBgRGF0YUZpZWxkYCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgcGF0aFxuICovXG5jb25zdCBfZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGg7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IGRhdGFGaWVsZD8uVGFyZ2V0Py52YWx1ZTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb25Hcm91cDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb25Hcm91cDpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlbGF0aXZlUGF0aDtcbn07XG5cbmNvbnN0IF9zbGljZUF0U2xhc2ggPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBpc0xhc3RTbGFzaDogYm9vbGVhbiwgaXNMYXN0UGFydDogYm9vbGVhbikge1xuXHRjb25zdCBpU2xhc2hJbmRleCA9IGlzTGFzdFNsYXNoID8gcGF0aC5sYXN0SW5kZXhPZihcIi9cIikgOiBwYXRoLmluZGV4T2YoXCIvXCIpO1xuXG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocHJvcGVydHlQYXRoKSA9PT0gLTEgJiYgLy8gQ29sdW1uIGlzIG5vdCBtYXJrZWQgYXMgbm9uLXNvcnRhYmxlIHZpYSBhbm5vdGF0aW9uXG5cdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBSZXR1cm5zICdmYWxzZScgaWYgRmlsdGVyRnVuY3Rpb25zIGFubm90YXRpb24gc3VwcG9ydHMgJ3RvbG93ZXInLCBlbHNlICd0cnVlJ1xuICovXG5leHBvcnQgY29uc3QgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBib29sZWFuIHtcblx0Y29uc3QgZmlsdGVyRnVuY3Rpb25zOiBGaWx0ZXJGdW5jdGlvbnMgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRnVuY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShmaWx0ZXJGdW5jdGlvbnMpID8gKGZpbHRlckZ1bmN0aW9ucyBhcyBTdHJpbmdbXSkuaW5kZXhPZihcInRvbG93ZXJcIikgPT09IC0xIDogdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJGdW5jdGlvbnMoQ29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEZpbHRlckZ1bmN0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdGlmIChNb2RlbEhlbHBlci5pc1NpbmdsZXRvbihDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgY2FwYWJpbGl0aWVzID0gQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXM7XG5cdHJldHVybiBjYXBhYmlsaXRpZXM/LkZpbHRlckZ1bmN0aW9ucyB8fCBDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJGdW5jdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIGZvciB0ZXh0IGZpZWxkcyBpbiBhIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gX2dldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoZm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9uc1R5cGUgfCB1bmRlZmluZWQpOiBGb3JtYXRPcHRpb25zVHlwZSB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBmb3JtYXRPcHRpb25zID09PSB1bmRlZmluZWRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDoge1xuXHRcdFx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdFx0XHQuLi5mb3JtYXRPcHRpb25zXG5cdFx0ICB9O1xufVxuXG5mdW5jdGlvbiBfZmluZFNlbWFudGljS2V5VmFsdWVzKHNlbWFudGljS2V5czogYW55W10sIG5hbWU6IHN0cmluZyk6IGFueSB7XG5cdGNvbnN0IGFTZW1hbnRpY0tleVZhbHVlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IGJTZW1hbnRpY0tleUZvdW5kID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc2VtYW50aWNLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YVNlbWFudGljS2V5VmFsdWVzLnB1c2goc2VtYW50aWNLZXlzW2ldLnZhbHVlKTtcblx0XHRpZiAoc2VtYW50aWNLZXlzW2ldLnZhbHVlID09PSBuYW1lKSB7XG5cdFx0XHRiU2VtYW50aWNLZXlGb3VuZCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7XG5cdFx0dmFsdWVzOiBhU2VtYW50aWNLZXlWYWx1ZXMsXG5cdFx0c2VtYW50aWNLZXlGb3VuZDogYlNlbWFudGljS2V5Rm91bmRcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRQcm9wZXJ0aWVzKHNlbWFudGljS2V5VmFsdWVzOiBhbnlbXSwgZmllbGRHcm91cFByb3BlcnRpZXM6IGFueVtdKSB7XG5cdGxldCBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gZmFsc2U7XG5cdGxldCBzUHJvcGVydHlQYXRoO1xuXHRpZiAoc2VtYW50aWNLZXlWYWx1ZXMgJiYgc2VtYW50aWNLZXlWYWx1ZXMubGVuZ3RoID49IDEgJiYgZmllbGRHcm91cFByb3BlcnRpZXMgJiYgZmllbGRHcm91cFByb3BlcnRpZXMubGVuZ3RoID49IDEpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbWFudGljS2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoW3NlbWFudGljS2V5VmFsdWVzW2ldXS5zb21lKCh0bXApID0+IGZpZWxkR3JvdXBQcm9wZXJ0aWVzLmluZGV4T2YodG1wKSA+PSAwKSkge1xuXHRcdFx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwID0gdHJ1ZTtcblx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9IHNlbWFudGljS2V5VmFsdWVzW2ldO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdGZpZWxkR3JvdXBQcm9wZXJ0eVBhdGg6IHNQcm9wZXJ0eVBhdGhcblx0fTtcbn1cblxuZnVuY3Rpb24gX2ZpbmRTZW1hbnRpY0tleVZhbHVlc0luRmllbGRHcm91cChkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGwsIHNlbWFudGljS2V5VmFsdWVzOiBbXSk6IGFueSB7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRsZXQgX3Byb3BlcnRpZXNGb3VuZDogeyBzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBib29sZWFuOyBmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiBhbnkgfSA9IHtcblx0XHRzZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwOiBmYWxzZSxcblx0XHRmaWVsZEdyb3VwUHJvcGVydHlQYXRoOiB1bmRlZmluZWRcblx0fTtcblx0aWYgKFxuXHRcdGRhdGFGaWVsZEdyb3VwICYmXG5cdFx0ZGF0YUZpZWxkR3JvdXAuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHQpIHtcblx0XHRkYXRhRmllbGRHcm91cC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaW5uZXJEYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBpbm5lckRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCkgJiZcblx0XHRcdFx0aW5uZXJEYXRhRmllbGQuVmFsdWVcblx0XHRcdCkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKGlubmVyRGF0YUZpZWxkLlZhbHVlLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0X3Byb3BlcnRpZXNGb3VuZCA9IF9maW5kUHJvcGVydGllcyhzZW1hbnRpY0tleVZhbHVlcywgYVByb3BlcnRpZXMpO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0c2VtYW50aWNLZXlIYXNQcm9wZXJ0eUluRmllbGRHcm91cDogX3Byb3BlcnRpZXNGb3VuZC5zZW1hbnRpY0tleUhhc1Byb3BlcnR5SW5GaWVsZEdyb3VwLFxuXHRcdHByb3BlcnR5UGF0aDogX3Byb3BlcnRpZXNGb3VuZC5maWVsZEdyb3VwUHJvcGVydHlQYXRoXG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IGZvcm1hdCBvcHRpb25zIHdpdGggZHJhZnRJbmRpY2F0b3IgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0gc2VtYW50aWNLZXlzXG4gKiBAcGFyYW0gaXNGaWVsZEdyb3VwQ29sdW1uXG4gKiBAcGFyYW0gZGF0YUZpZWxkR3JvdXBcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4oXG5cdG5hbWU6IHN0cmluZyxcblx0c2VtYW50aWNLZXlzOiBhbnlbXSxcblx0aXNGaWVsZEdyb3VwQ29sdW1uOiBib29sZWFuLFxuXHRkYXRhRmllbGRHcm91cDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IG51bGxcbikge1xuXHRpZiAoIXNlbWFudGljS2V5cykge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXHRjb25zdCBzZW1hbnRpY0tleSA9IF9maW5kU2VtYW50aWNLZXlWYWx1ZXMoc2VtYW50aWNLZXlzLCBuYW1lKTtcblx0Y29uc3Qgc2VtYW50aWNLZXlJbkZpZWxkR3JvdXAgPSBfZmluZFNlbWFudGljS2V5VmFsdWVzSW5GaWVsZEdyb3VwKGRhdGFGaWVsZEdyb3VwLCBzZW1hbnRpY0tleS52YWx1ZXMpO1xuXHRpZiAoc2VtYW50aWNLZXkuc2VtYW50aWNLZXlGb3VuZCkge1xuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnNPYmo6IGFueSA9IHtcblx0XHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiB0cnVlLFxuXHRcdFx0c2VtYW50aWNrZXlzOiBzZW1hbnRpY0tleS52YWx1ZXMsXG5cdFx0XHRvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Um93U3RhdHVzVmlzaWJpbGl0eShuYW1lLCBmYWxzZSkpXG5cdFx0fTtcblx0XHRpZiAoaXNGaWVsZEdyb3VwQ29sdW1uICYmIHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRcdGZvcm1hdE9wdGlvbnNPYmpbXCJvYmplY3RTdGF0dXNUZXh0VmlzaWJpbGl0eVwiXSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpO1xuXHRcdFx0Zm9ybWF0T3B0aW9uc09ialtcImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFwiXSA9IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdE9wdGlvbnNPYmo7XG5cdH0gZWxzZSBpZiAoIXNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnNlbWFudGljS2V5SGFzUHJvcGVydHlJbkZpZWxkR3JvdXApIHtcblx0XHRyZXR1cm4ge307XG5cdH0gZWxzZSB7XG5cdFx0Ly8gU2VtYW50aWMgS2V5IGhhcyBhIHByb3BlcnR5IGluIGEgRmllbGRHcm91cFxuXHRcdHJldHVybiB7XG5cdFx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IHNlbWFudGljS2V5SW5GaWVsZEdyb3VwLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpZWxkR3JvdXBOYW1lOiBuYW1lLFxuXHRcdFx0b2JqZWN0U3RhdHVzVGV4dFZpc2liaWxpdHk6IGNvbXBpbGVFeHByZXNzaW9uKGdldFJvd1N0YXR1c1Zpc2liaWxpdHkobmFtZSwgdHJ1ZSkpXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBfZ2V0SW1wTnVtYmVyKGRhdGFGaWVsZDogRGF0YUZpZWxkVHlwZXMpOiBudW1iZXIge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9IaWdoXCIpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblx0aWYgKGltcG9ydGFuY2UgJiYgaW1wb3J0YW5jZS5pbmNsdWRlcyhcIlVJLkltcG9ydGFuY2VUeXBlL01lZGl1bVwiKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cdGlmIChpbXBvcnRhbmNlICYmIGltcG9ydGFuY2UuaW5jbHVkZXMoXCJVSS5JbXBvcnRhbmNlVHlwZS9Mb3dcIikpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXHRyZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkOiBEYXRhRmllbGRUeXBlcyk6IEltcG9ydGFuY2Uge1xuXHRjb25zdCBpbXBvcnRhbmNlID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkltcG9ydGFuY2UgYXMgc3RyaW5nO1xuXHRyZXR1cm4gaW1wb3J0YW5jZSA/IChpbXBvcnRhbmNlLnNwbGl0KFwiL1wiKVsxXSBhcyBJbXBvcnRhbmNlKSA6IEltcG9ydGFuY2UuTm9uZTtcbn1cblxuZnVuY3Rpb24gX2dldE1heEltcG9ydGFuY2UoZmllbGRzOiBEYXRhRmllbGRUeXBlc1tdKTogSW1wb3J0YW5jZSB7XG5cdGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcblx0XHRsZXQgbWF4SW1wTnVtYmVyID0gLTE7XG5cdFx0bGV0IGltcE51bWJlciA9IC0xO1xuXHRcdGxldCBEYXRhRmllbGRXaXRoTWF4SW1wb3J0YW5jZTtcblx0XHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuXHRcdFx0aW1wTnVtYmVyID0gX2dldEltcE51bWJlcihmaWVsZCk7XG5cdFx0XHRpZiAoaW1wTnVtYmVyID4gbWF4SW1wTnVtYmVyKSB7XG5cdFx0XHRcdG1heEltcE51bWJlciA9IGltcE51bWJlcjtcblx0XHRcdFx0RGF0YUZpZWxkV2l0aE1heEltcG9ydGFuY2UgPSBmaWVsZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKERhdGFGaWVsZFdpdGhNYXhJbXBvcnRhbmNlIGFzIERhdGFGaWVsZFR5cGVzKTtcblx0fVxuXHRyZXR1cm4gSW1wb3J0YW5jZS5Ob25lO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGltcG9ydGFuY2UgdmFsdWUgZm9yIGEgY29sdW1uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBzZW1hbnRpY0tleXNcbiAqIEByZXR1cm5zIFRoZSBpbXBvcnRhbmNlIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRhbmNlKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgc2VtYW50aWNLZXlzOiBTZW1hbnRpY0tleSk6IEltcG9ydGFuY2UgfCB1bmRlZmluZWQge1xuXHQvL0V2YWx1YXRlIGRlZmF1bHQgSW1wb3J0YW5jZSBpcyBub3Qgc2V0IGV4cGxpY2l0bHlcblx0bGV0IGZpZWxkc1dpdGhJbXBvcnRhbmNlLCBtYXBTZW1hbnRpY0tleXM6IGFueTtcblx0Ly9DaGVjayBpZiBzZW1hbnRpY0tleXMgYXJlIGRlZmluZWQgYXQgdGhlIEVudGl0eVNldCBsZXZlbFxuXHRpZiAoc2VtYW50aWNLZXlzICYmIHNlbWFudGljS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0bWFwU2VtYW50aWNLZXlzID0gc2VtYW50aWNLZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRyZXR1cm4ga2V5LnZhbHVlO1xuXHRcdH0pO1xuXHR9XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cERhdGEgPSAoZGF0YUZpZWxkIGFzIGFueSkuVGFyZ2V0W1wiJHRhcmdldFwiXVtcIkRhdGFcIl0gYXMgRmllbGRHcm91cFR5cGUsXG5cdFx0XHRmaWVsZEdyb3VwSGFzU2VtYW50aWNLZXkgPVxuXHRcdFx0XHRmaWVsZEdyb3VwRGF0YSAmJlxuXHRcdFx0XHQoZmllbGRHcm91cERhdGEgYXMgYW55KS5zb21lKGZ1bmN0aW9uIChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdChmaWVsZEdyb3VwRGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aCAmJlxuXHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZC4kVHlwZSAhPT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdFx0bWFwU2VtYW50aWNLZXlzICYmXG5cdFx0XHRcdFx0XHRtYXBTZW1hbnRpY0tleXMuaW5jbHVkZXMoKGZpZWxkR3JvdXBEYXRhRmllbGQgYXMgdW5rbm93biBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdC8vSWYgYSBGaWVsZEdyb3VwIGNvbnRhaW5zIGEgc2VtYW50aWNLZXksIGltcG9ydGFuY2Ugc2V0IHRvIEhpZ2hcblx0XHRpZiAoZmllbGRHcm91cEhhc1NlbWFudGljS2V5KSB7XG5cdFx0XHRyZXR1cm4gSW1wb3J0YW5jZS5IaWdoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL0lmIHRoZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uIGhhcyBhbiBJbXBvcnRhbmNlIHdlIHRha2UgaXRcblx0XHRcdGlmIChkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSW1wb3J0YW5jZSkge1xuXHRcdFx0XHRyZXR1cm4gX2dldERhdGFGaWVsZEltcG9ydGFuY2UoZGF0YUZpZWxkIGFzIHVua25vd24gYXMgRGF0YUZpZWxkVHlwZXMpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gZWxzZSB0aGUgaGlnaGVzdCBpbXBvcnRhbmNlIChpZiBhbnkpIGlzIHJldHVybmVkXG5cdFx0XHRmaWVsZHNXaXRoSW1wb3J0YW5jZSA9XG5cdFx0XHRcdGZpZWxkR3JvdXBEYXRhICYmXG5cdFx0XHRcdChmaWVsZEdyb3VwRGF0YSBhcyBhbnkpLmZpbHRlcihmdW5jdGlvbiAoaXRlbTogRGF0YUZpZWxkVHlwZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gaXRlbT8uYW5ub3RhdGlvbnM/LlVJPy5JbXBvcnRhbmNlO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBfZ2V0TWF4SW1wb3J0YW5jZShmaWVsZHNXaXRoSW1wb3J0YW5jZSBhcyBEYXRhRmllbGRUeXBlc1tdKTtcblx0XHR9XG5cdFx0Ly9JZiB0aGUgY3VycmVudCBmaWVsZCBpcyBhIHNlbWFudGljS2V5LCBpbXBvcnRhbmNlIHNldCB0byBIaWdoXG5cdH1cblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlICYmXG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoICYmXG5cdFx0bWFwU2VtYW50aWNLZXlzICYmXG5cdFx0bWFwU2VtYW50aWNLZXlzLmluY2x1ZGVzKChkYXRhRmllbGQgYXMgRGF0YUZpZWxkVHlwZXMpLlZhbHVlLnBhdGgpXG5cdFx0PyBJbXBvcnRhbmNlLkhpZ2hcblx0XHQ6IF9nZXREYXRhRmllbGRJbXBvcnRhbmNlKGRhdGFGaWVsZCBhcyB1bmtub3duIGFzIERhdGFGaWVsZFR5cGVzKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBhbm5vdGF0aW9uc1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSB2aXN1YWxpemF0aW9uIHBhdGhcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+ID0ge30sXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSxcblx0XHR0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHR0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8udHlwZSB8fCBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRjb25zdCB0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHNlbWFudGljS2V5czogU2VtYW50aWNLZXkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQ29tbW9uXCIsIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY0tleSwgW1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdF0pWzBdO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goKGxpbmVJdGVtKSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRsZXQgZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHRsZXQgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHRcdFx0Ly8gRGV0ZXJtaW5lIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbnN1bWVkIGJ5IHRoaXMgTGluZUl0ZW0uXG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShsaW5lSXRlbSwgY29udmVydGVyQ29udGV4dCwgdGFibGVUeXBlKTtcblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzOiBhbnkgPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcztcblx0XHRcdGlmIChcblx0XHRcdFx0bGluZUl0ZW0uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0bGluZUl0ZW0uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGVcblx0XHRcdCkge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKS5maWx0ZXIoKGtleSkgPT4ge1xuXHRcdFx0XHRcdGxldCBpc1N0YXRpY2FsbHlIaWRkZW47XG5cdFx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzW2tleV0uYW5ub3RhdGlvbnM/LlVJKSB7XG5cdFx0XHRcdFx0XHRpc1N0YXRpY2FsbHlIaWRkZW4gPSBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihyZWxhdGVkUHJvcGVydGllc1trZXldLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzU3RhdGljYWxseUhpZGRlbiA9IGlzUmVmZXJlbmNlUHJvcGVydHlTdGF0aWNhbGx5SGlkZGVuKHJlbGF0ZWRQcm9wZXJ0aWVzW2tleV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gIWlzU3RhdGljYWxseUhpZGRlbjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5wcm9wZXJ0aWVzKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBncm91cFBhdGg6IHN0cmluZyA9IF9zbGljZUF0U2xhc2gocmVsYXRpdmVQYXRoLCB0cnVlLCBmYWxzZSk7XG5cdFx0XHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHJlbGF0aXZlUGF0aDtcblx0XHRcdGNvbnN0IHNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRjb25zdCBpc0ZpZWxkR3JvdXBDb2x1bW46IGJvb2xlYW4gPSBncm91cFBhdGguaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpID4gLTE7XG5cdFx0XHRjb25zdCBzaG93RGF0YUZpZWxkc0xhYmVsOiBib29sZWFuID0gaXNGaWVsZEdyb3VwQ29sdW1uXG5cdFx0XHRcdD8gX2dldFNob3dEYXRhRmllbGRzTGFiZWwobmFtZSwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdDogZmFsc2U7XG5cdFx0XHRjb25zdCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0RGF0YUZpZWxkRGF0YVR5cGUobGluZUl0ZW0pO1xuXHRcdFx0Y29uc3Qgc0RhdGVJbnB1dEZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZGF0YVR5cGUgPT09IFwiRWRtLkRhdGVcIiA/IFwiWVlZWS1NTS1ERFwiIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKFxuXHRcdFx0XHRnZXREZWZhdWx0RHJhZnRJbmRpY2F0b3JGb3JDb2x1bW4obmFtZSwgc2VtYW50aWNLZXlzLCBpc0ZpZWxkR3JvdXBDb2x1bW4sIGxpbmVJdGVtKVxuXHRcdFx0KTtcblx0XHRcdGxldCBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRsaW5lSXRlbS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRsaW5lSXRlbS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5GaWVsZEdyb3VwVHlwZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyA9IF9nZXRGaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMobGluZUl0ZW0sIGZvcm1hdE9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKF9pc0V4cG9ydGFibGVDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdC8vZXhjbHVkZSB0aGUgdHlwZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUgRXhwb3J0IChnZW5lcmF0ZXMgZXJyb3Igb24gRXhwb3J0IGFzIFBERilcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3MgPSB7XG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nLFxuXHRcdFx0XHRcdHR5cGU6IGRhdGFUeXBlID8gX2dldEV4cG9ydERhdGFUeXBlKGRhdGFUeXBlLCByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAxKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRpbnB1dEZvcm1hdDogc0RhdGVJbnB1dEZvcm1hdCxcblx0XHRcdFx0XHRkZWxpbWl0ZXI6IGRhdGFUeXBlID09PSBcIkVkbS5JbnQ2NFwiXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZSkge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXRQcm9wZXJ0eSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRVbml0TmFtZTtcblx0XHRcdFx0XHRleHBvcnRTZXR0aW5ncy50eXBlID0gXCJDdXJyZW5jeVwiOyAvLyBGb3JjZSB0byBhIGN1cnJlbmN5IGJlY2F1c2UgdGhlcmUncyBhIHVuaXRQcm9wZXJ0eSAob3RoZXJ3aXNlIHRoZSB2YWx1ZSBpc24ndCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hlbiBleHBvcnRlZClcblx0XHRcdFx0fSBlbHNlIGlmIChyZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZykge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnVuaXQgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VW5pdFN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lTmFtZSkge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lUHJvcGVydHkgPSByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0VGltZXpvbmVOYW1lO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRUaW1lem9uZVN0cmluZykge1xuXHRcdFx0XHRcdGV4cG9ydFNldHRpbmdzLnRpbWV6b25lID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFRpbWV6b25lU3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZyA9IGRhdGFUeXBlICYmIGdldFR5cGVDb25maWcobGluZUl0ZW0sIGRhdGFUeXBlKTtcblx0XHRcdGNvbnN0IG9UeXBlQ29uZmlnID0gcHJvcGVydHlUeXBlQ29uZmlnXG5cdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lOiBkYXRhVHlwZSxcblx0XHRcdFx0XHRcdG9Gb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdC4uLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRcdC4uLnByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b0NvbnN0cmFpbnRzOiBwcm9wZXJ0eVR5cGVDb25maWcuY29uc3RyYWludHNcblx0XHRcdFx0ICB9XG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgdmlzdWFsU2V0dGluZ3M6IFZpc3VhbFNldHRpbmdzID0ge307XG5cdFx0XHRpZiAoIWRhdGFUeXBlIHx8ICFvVHlwZUNvbmZpZykge1xuXHRcdFx0XHQvLyBmb3IgY2hhcnRzXG5cdFx0XHRcdHZpc3VhbFNldHRpbmdzLndpZHRoQ2FsY3VsYXRpb24gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvQ29sdW1uOiBhbnkgPSB7XG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChsaW5lSXRlbSksXG5cdFx0XHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRcdFx0bGFiZWw6IHNMYWJlbCxcblx0XHRcdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IGdldExhYmVsKGxpbmVJdGVtKSA6IG51bGwsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogbnVsbCxcblx0XHRcdFx0RmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zOiBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMsXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgobGluZUl0ZW0uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGxpbmVJdGVtKSA/IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuIDogQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRzaG93RGF0YUZpZWxkc0xhYmVsOiBzaG93RGF0YUZpZWxkc0xhYmVsLFxuXHRcdFx0XHRyZWxhdGl2ZVBhdGg6IHJlbGF0aXZlUGF0aCxcblx0XHRcdFx0c29ydGFibGU6IF9pc0NvbHVtblNvcnRhYmxlKGxpbmVJdGVtLCByZWxhdGl2ZVBhdGgsIG5vblNvcnRhYmxlQ29sdW1ucyksXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmxlbmd0aCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGdldEltcG9ydGFuY2UobGluZUl0ZW0gYXMgRGF0YUZpZWxkVHlwZXMsIHNlbWFudGljS2V5cyksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHR5cGVDb25maWc6IG9UeXBlQ29uZmlnLFxuXHRcdFx0XHR2aXN1YWxTZXR0aW5nczogdmlzdWFsU2V0dGluZ3MsXG5cdFx0XHRcdHRpbWV6b25lVGV4dDogZXhwb3J0U2V0dGluZ3M/LnRpbWV6b25lLFxuXHRcdFx0XHRpc1BhcnRPZkxpbmVJdGVtOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc1Rvb2x0aXAgPSBfZ2V0VG9vbHRpcChsaW5lSXRlbSk7XG5cdFx0XHRpZiAoc1Rvb2x0aXApIHtcblx0XHRcdFx0b0NvbHVtbi50b29sdGlwID0gc1Rvb2x0aXA7XG5cdFx0XHR9XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnRpZXNJbmZvLnRleHRPbmx5UHJvcGVydGllc0Zyb21UZXh0QW5ub3RhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHRleHRPbmx5Q29sdW1uc0Zyb21UZXh0QW5ub3RhdGlvbi5wdXNoKC4uLnJlbGF0ZWRQcm9wZXJ0aWVzSW5mby50ZXh0T25seVByb3BlcnRpZXNGcm9tVGV4dEFubm90YXRpb24pO1xuXHRcdFx0fVxuXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKG9Db2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaCgocmVsYXRlZFByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbcmVsYXRlZFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tyZWxhdGVkUHJvcGVydHlOYW1lXTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2goKGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbYWRkaXRpb25hbFByb3BlcnR5TmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXNbYWRkaXRpb25hbFByb3BlcnR5TmFtZV07XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIEdldCBjb2x1bW5zIGZyb20gdGhlIFByb3BlcnRpZXMgb2YgRW50aXR5VHlwZVxuXHRyZXR1cm4gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKFxuXHRcdGNvbHVtbnNUb0JlQ3JlYXRlZCxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRpb25Db2x1bW5zLFxuXHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHRhYmxlVHlwZSxcblx0XHR0ZXh0T25seUNvbHVtbnNGcm9tVGV4dEFubm90YXRpb25cblx0KTtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiAoXG5cdHByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0bGV0IG1hdGNoZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRtYXRjaGVkUHJvcGVydGllcyA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdFtdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uIChwcm9wZXJ0aWVzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdHJldHVybiBwcm9wZXJ0aWVzXG5cdFx0Lm1hcCgocHJvcGVydHkpID0+IHtcblx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHR9KVxuXHRcdC5qb2luKGAke1wiXFxuXCJ9YCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGFibGUgY29sdW1uIGRlZmluaXRpb25zIGZyb20gbWFuaWZlc3QuXG4gKlxuICogVGhlc2UgbWF5IGJlIGN1c3RvbSBjb2x1bW5zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBzbG90IGNvbHVtbnMgY29taW5nIHRocm91Z2hcbiAqIGEgYnVpbGRpbmcgYmxvY2ssIG9yIGFubm90YXRpb24gY29sdW1ucyB0byBvdmVyd3JpdGUgYW5ub3RhdGlvbi1iYXNlZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMgVGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uIChcblx0Y29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+LFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0Q29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RDb2x1bW4+ID0ge307XG5cblx0ZnVuY3Rpb24gaXNBbm5vdGF0aW9uQ29sdW1uKFxuXHRcdGNvbHVtbjogQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdFx0a2V5OiBzdHJpbmdcblx0KTogY29sdW1uIGlzIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlIHtcblx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbnMuc29tZSgoYW5ub3RhdGlvbkNvbHVtbikgPT4gYW5ub3RhdGlvbkNvbHVtbi5rZXkgPT09IGtleSk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1Nsb3RDb2x1bW4obWFuaWZlc3RDb2x1bW46IGFueSk6IG1hbmlmZXN0Q29sdW1uIGlzIEZyYWdtZW50RGVmaW5lZFNsb3RDb2x1bW4ge1xuXHRcdHJldHVybiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBDb2x1bW5UeXBlLlNsb3Q7XG5cdH1cblxuXHRmdW5jdGlvbiBpc0N1c3RvbUNvbHVtbihtYW5pZmVzdENvbHVtbjogYW55KTogbWFuaWZlc3RDb2x1bW4gaXMgTWFuaWZlc3REZWZpbmVkQ3VzdG9tQ29sdW1uIHtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkICYmICEhbWFuaWZlc3RDb2x1bW4udGVtcGxhdGU7XG5cdH1cblxuXHRmdW5jdGlvbiBfdXBkYXRlTGlua2VkUHJvcGVydGllc09uQ3VzdG9tQ29sdW1ucyhwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSwgYW5ub3RhdGlvblRhYmxlQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10pIHtcblx0XHRjb25zdCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gZ2V0Tm9uU29ydGFibGVQcm9wZXJ0aWVzUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpO1xuXHRcdHByb3BlcnR5SW5mb3MuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcblx0XHRcdGFubm90YXRpb25UYWJsZUNvbHVtbnMuZm9yRWFjaCgocHJvcCkgPT4ge1xuXHRcdFx0XHRpZiAocHJvcC5uYW1lID09PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHByb3Auc29ydGFibGUgPSBub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eS5yZXBsYWNlKFwiUHJvcGVydHk6OlwiLCBcIlwiKSkgPT09IC0xO1xuXHRcdFx0XHRcdHByb3AuaXNHcm91cGFibGUgPSBwcm9wLnNvcnRhYmxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHRLZXlIZWxwZXIudmFsaWRhdGVLZXkoa2V5KTtcblxuXHRcdC8vIEJhc2VUYWJsZUNvbHVtblxuXHRcdGNvbnN0IGJhc2VUYWJsZUNvbHVtbiA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0Y2FzZVNlbnNpdGl2ZTogaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlKGNvbnZlcnRlckNvbnRleHQpXG5cdFx0fTtcblxuXHRcdGlmIChpc0Fubm90YXRpb25Db2x1bW4obWFuaWZlc3RDb2x1bW4sIGtleSkpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb092ZXJ3cml0ZUFubm90YXRpb25Db2x1bW46IEN1c3RvbUVsZW1lbnQ8QW5ub3RhdGlvblRhYmxlQ29sdW1uRm9yT3ZlcnJpZGU+ID0ge1xuXHRcdFx0XHQuLi5iYXNlVGFibGVDb2x1bW4sXG5cdFx0XHRcdGltcG9ydGFuY2U6IG1hbmlmZXN0Q29sdW1uPy5pbXBvcnRhbmNlLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24sXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogbWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uKG1hbmlmZXN0Q29sdW1uLCBrZXkpXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0Q29sdW1uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIHRydWUpLFxuXHRcdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM6IF9nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKG1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnMpXG5cdFx0XHR9O1xuXHRcdFx0aW50ZXJuYWxDb2x1bW5zW2tleV0gPSBwcm9wZXJ0aWVzVG9PdmVyd3JpdGVBbm5vdGF0aW9uQ29sdW1uO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm9zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IF9nZXRQcm9wZXJ0eU5hbWVzKFxuXHRcdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0ZW50aXR5VHlwZVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGJhc2VNYW5pZmVzdENvbHVtbiA9IHtcblx0XHRcdFx0Li4uYmFzZVRhYmxlQ29sdW1uLFxuXHRcdFx0XHRoZWFkZXI6IG1hbmlmZXN0Q29sdW1uLmhlYWRlcixcblx0XHRcdFx0aW1wb3J0YW5jZTogbWFuaWZlc3RDb2x1bW4/LmltcG9ydGFuY2UgfHwgSW1wb3J0YW5jZS5Ob25lLFxuXHRcdFx0XHRob3Jpem9udGFsQWxpZ246IG1hbmlmZXN0Q29sdW1uPy5ob3Jpem9udGFsQWxpZ24gfHwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHkgfHwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LFxuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RDb2x1bW4udGVtcGxhdGUsXG5cdFx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiBwcm9wZXJ0eUluZm9zXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBfYXBwZW5kQ3VzdG9tVGVtcGxhdGUocHJvcGVydHlJbmZvcyksXG5cdFx0XHRcdFx0XHRcdHdyYXA6ICEhKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMSlcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IG51bGwsXG5cdFx0XHRcdGlkOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHRuYW1lOiBgQ3VzdG9tQ29sdW1uOjoke2tleX1gLFxuXHRcdFx0XHQvL05lZWRlZCBmb3IgTURDOlxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiB7IHRleHRMaW5lc0VkaXQ6IDQgfSxcblx0XHRcdFx0aXNHcm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogZmFsc2UsXG5cdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0dmlzdWFsU2V0dGluZ3M6IHsgd2lkdGhDYWxjdWxhdGlvbjogbnVsbCB9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mb3MpIHtcblx0XHRcdFx0X3VwZGF0ZUxpbmtlZFByb3BlcnRpZXNPbkN1c3RvbUNvbHVtbnMocHJvcGVydHlJbmZvcywgYW5ub3RhdGlvbkNvbHVtbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNTbG90Q29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5TbG90XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2UgaWYgKGlzQ3VzdG9tQ29sdW1uKG1hbmlmZXN0Q29sdW1uKSkge1xuXHRcdFx0XHRjb25zdCBjdXN0b21UYWJsZUNvbHVtbjogQ3VzdG9tRWxlbWVudDxDdXN0b21CYXNlZFRhYmxlQ29sdW1uPiA9IHtcblx0XHRcdFx0XHQuLi5iYXNlTWFuaWZlc3RDb2x1bW4sXG5cdFx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5EZWZhdWx0XG5cdFx0XHRcdH07XG5cdFx0XHRcdGludGVybmFsQ29sdW1uc1trZXldID0gY3VzdG9tVGFibGVDb2x1bW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlID0gYFRoZSBhbm5vdGF0aW9uIGNvbHVtbiAnJHtrZXl9JyByZWZlcmVuY2VkIGluIHRoZSBtYW5pZmVzdCBpcyBub3QgZm91bmRgO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LFxuXHRcdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5Mb3csXG5cdFx0XHRcdFx0XHRtZXNzYWdlLFxuXHRcdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbkNvbHVtbnM/LkludmFsaWRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBpc0FuYWx5dGljYWxUYWJsZSA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdGNvbnN0IGlzUmVzcG9uc2l2ZVRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHN3aXRjaCAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiQW5hbHl0aWNhbFRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwLEFnZ3JlZ2F0ZVwiO1xuXHRcdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZVRhYmxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyLEdyb3VwXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiAoaXNBbmFseXRpY2FsVGFibGUgfHwgaXNSZXNwb25zaXZlVGFibGUpKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCB8fCBfaXNGaWx0ZXJCYXJIaWRkZW4obWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdFx0XHQvLyBGZWF0dXJlIHBhcml0eSB3aXRoIFYyLlxuXHRcdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0XHQvLyBPciB3aGVuIHRoZSBMUiBmaWx0ZXIgYmFyIGlzIGhpZGRlbiB2aWEgbWFuaWZlc3Qgc2V0dGluZ1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdH1cblx0XHRpZiAoaXNSZXNwb25zaXZlVGFibGUpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBCb29sZWFuIHZhbHVlIHN1Z2dlc3RpbmcgaWYgYSBmaWx0ZXIgYmFyIGlzIGJlaW5nIHVzZWQgb24gdGhlIHBhZ2UuXG4gKlxuICogQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cbiAqIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RXcmFwcGVyIE1hbmlmZXN0IHNldHRpbmdzIGdldHRlciBmb3IgdGhlIHBhZ2VcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIEJvb2xlYW4gc3VnZ2VzdGluZyBpZiBhIGZpbHRlciBiYXIgaXMgYmVpbmcgdXNlZCBvbiB0aGUgcGFnZS5cbiAqL1xuZnVuY3Rpb24gX2lzRmlsdGVyQmFySGlkZGVuKG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0bWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiZcblx0XHQhY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgJiZcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNvcnQgY29uZGl0aW9ucyBmb3IgdGhlIHByZXNlbnRhdGlvbiB2YXJpYW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBUYWJsZSBjb2x1bW5zIHByb2Nlc3NlZCBieSB0aGUgY29udmVydGVyXG4gKiBAcmV0dXJucyBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgcHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdC8vIEN1cnJlbnRseSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIG5vdCBzdXBwb3J0ZWQgYXMgc29ydGVyXG5cdGNvbnN0IG5vblNvcnRhYmxlUHJvcGVydGllcyA9IGdldE5vblNvcnRhYmxlUHJvcGVydGllc1Jlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0bGV0IHNvcnRDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyVHlwZVtdID0gW107XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHtcblx0XHRcdHNvcnRlcnM6IHNvcnRlcnNcblx0XHR9O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlNvcnRPcmRlci5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvblByb3BlcnR5ID0gY29uZGl0aW9uLlByb3BlcnR5O1xuXHRcdFx0aWYgKGNvbmRpdGlvblByb3BlcnR5ICYmIG5vblNvcnRhYmxlUHJvcGVydGllcy5pbmRleE9mKGNvbmRpdGlvblByb3BlcnR5LiR0YXJnZXQ/Lm5hbWUpID09PSAtMSkge1xuXHRcdFx0XHRjb25zdCBpbmZvTmFtZSA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoW2NvbmRpdGlvblByb3BlcnR5XSwgY29sdW1ucylbMF07XG5cdFx0XHRcdGlmIChpbmZvTmFtZSkge1xuXHRcdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IGluZm9OYW1lLFxuXHRcdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0c29ydENvbmRpdGlvbnMgPSBjb25kaXRpb25zLnNvcnRlcnMubGVuZ3RoID8gSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9ucykgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIHNvcnRDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHByb3BlcnR5UGF0aCB0byBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXMuXG4gKlxuICogQHBhcmFtIHBhdGhzIHRoZSBhcnJheSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSBjb2x1bW5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eUluZm9zXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBwcm9wZXJ0eUluZm8gbmFtZXNcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKHBhdGhzOiBQcm9wZXJ0eVBhdGhbXSwgY29sdW1uczogVGFibGVDb2x1bW5bXSk6IHN0cmluZ1tdIHtcblx0Y29uc3QgaW5mb05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRsZXQgcHJvcGVydHlJbmZvOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCwgYW5ub3RhdGlvbkNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRwYXRocy5mb3JFYWNoKChjdXJyZW50UGF0aCkgPT4ge1xuXHRcdGlmIChjdXJyZW50UGF0aD8udmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mbyA9IGNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRyZXR1cm4gIWFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY3VycmVudFBhdGg/LnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdGluZm9OYW1lcy5wdXNoKHByb3BlcnR5SW5mby5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBpbmZvTmFtZXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgZ3JvdXAgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHJldHVybnMgR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0R3JvdXBDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdHRhYmxlVHlwZTogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGxldCBhR3JvdXBCeSA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLkdyb3VwQnk7XG5cdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0YUdyb3VwQnkgPSBhR3JvdXBCeS5zbGljZSgwLCAxKTtcblx0XHR9XG5cdFx0Y29uc3QgYUdyb3VwTGV2ZWxzID0gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhR3JvdXBCeSwgY29sdW1ucykubWFwKChpbmZvTmFtZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblxuXHRcdGdyb3VwQ29uZGl0aW9ucyA9IGFHcm91cExldmVscy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh7IGdyb3VwTGV2ZWxzOiBhR3JvdXBMZXZlbHMgfSkgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGdyb3VwQ29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBhZ2dyZWdhdGUgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBhZ2dyZWdhdGVDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVG90YWwpIHtcblx0XHRjb25zdCBhVG90YWxzID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uVG90YWw7XG5cdFx0Y29uc3QgYWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYVRvdGFscywgY29sdW1ucykuZm9yRWFjaCgoaW5mb05hbWUpID0+IHtcblx0XHRcdGFnZ3JlZ2F0ZXNbaW5mb05hbWVdID0ge307XG5cdFx0fSk7XG5cblx0XHRhZ2dyZWdhdGVDb25kaXRpb25zID0gSlNPTi5zdHJpbmdpZnkoYWdncmVnYXRlcyk7XG5cdH1cblxuXHRyZXR1cm4gYWdncmVnYXRlQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiB7XG5cdC8vIE5lZWQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0aXRsZTogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBnZXRUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IGdldFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoXG5cdCk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQgPSBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRjcmVhdGlvbkJlaGF2aW91ci5tb2RlIGFzIENyZWF0aW9uTW9kZSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHQpO1xuXG5cdGNvbnN0IGRlbGV0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVmlzaWJpbGl0eUV4cHJlc3Npb24gPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uID0gZ2V0TWFzc0VkaXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCA9IGdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdFx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0ZUJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uKSA9PT0gXCJmYWxzZVwiXG5cdCk7XG5cblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aGFzQWJzb2x1dGVQYXRoLFxuXHRcdHRhcmdldENhcGFiaWxpdGllcyxcblx0XHRkZWxldGVCdXR0b25WaXNpYmlsaXR5RXhwcmVzc2lvbixcblx0XHRtYXNzRWRpdEJ1dHRvblZpc2liaWxpdHlFeHByZXNzaW9uXG5cdCk7XG5cdGxldCB0aHJlc2hvbGQgPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gMTAgOiAzMDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5NYXhJdGVtcykge1xuXHRcdHRocmVzaG9sZCA9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLk1heEl0ZW1zLnZhbHVlT2YoKSBhcyBudW1iZXI7XG5cdH1cblxuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgaXNTZWFyY2hhYmxlID0gaXNQYXRoU2VhcmNoYWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdGNvbnN0IHN0YW5kYXJkQWN0aW9ucyA9IHtcblx0XHRjcmVhdGU6IGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdFwiZGVsZXRlXCI6IGdldFN0YW5kYXJkQWN0aW9uRGVsZXRlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdHBhc3RlOiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkKSxcblx0XHRtYXNzRWRpdDogZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSxcblx0XHRjcmVhdGlvblJvdzogZ2V0Q3JlYXRpb25Sb3coY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dClcblx0fTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBpZCxcblx0XHRlbnRpdHlOYW1lOiBlbnRpdHlTZXQgPyBlbnRpdHlTZXQubmFtZSA6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0bmF2aWdhdGlvblBhdGg6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG5cdFx0cm93OiBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5KFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0bmF2aWdhdGlvblRhcmdldFBhdGhcblx0XHQpLFxuXHRcdHAxM25Nb2RlOiBwMTNuTW9kZSxcblx0XHRzdGFuZGFyZEFjdGlvbnM6IHtcblx0XHRcdGFjdGlvbnM6IHN0YW5kYXJkQWN0aW9ucyxcblx0XHRcdGlzSW5zZXJ0VXBkYXRlVGVtcGxhdGVkOiBpc0luc2VydFVwZGF0ZVRlbXBsYXRlZCxcblx0XHRcdHVwZGF0YWJsZVByb3BlcnR5UGF0aDogZ2V0Q3VycmVudEVudGl0eVNldFVwZGF0YWJsZVBhdGgoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdF9pc0ZpbHRlckJhckhpZGRlbihwYWdlTWFuaWZlc3RTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCkgfHxcblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgcGFnZU1hbmlmZXN0U2V0dGluZ3MuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpKSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogdmFyaWFudE1hbmFnZW1lbnQgPT09IFwiQ29udHJvbFwiICYmICFwMTNuTW9kZSA/IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Ob25lIDogdmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0dGhyZXNob2xkOiB0aHJlc2hvbGQsXG5cdFx0c29ydENvbmRpdGlvbnM6IGdldFNvcnRDb25kaXRpb25zKGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCBjb2x1bW5zKSxcblx0XHR0aXRsZTogdGl0bGUsXG5cdFx0c2VhcmNoYWJsZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSAhPT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhKGlzQ29uc3RhbnQoaXNTZWFyY2hhYmxlKSAmJiBpc1NlYXJjaGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5mdW5jdGlvbiBfZ2V0RXhwb3J0RGF0YVR5cGUoZGF0YVR5cGU6IHN0cmluZywgaXNDb21wbGV4UHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBleHBvcnREYXRhVHlwZTogc3RyaW5nID0gXCJTdHJpbmdcIjtcblx0aWYgKGlzQ29tcGxleFByb3BlcnR5KSB7XG5cdFx0aWYgKGRhdGFUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiRGF0ZVRpbWVcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGV4cG9ydERhdGFUeXBlO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaCAoZGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGVjaW1hbFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0Y2FzZSBcIkVkbS5Eb3VibGVcIjpcblx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRleHBvcnREYXRhVHlwZSA9IFwiTnVtYmVyXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5EYXRlT2ZUaW1lXCI6XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIkRhdGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJEYXRlVGltZVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJUaW1lXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVkbS5Cb29sZWFuXCI6XG5cdFx0XHRcdGV4cG9ydERhdGFUeXBlID0gXCJCb29sZWFuXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwb3J0RGF0YVR5cGUgPSBcIlN0cmluZ1wiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZXhwb3J0RGF0YVR5cGU7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBpbnRvIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGggYW5kIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgc3BsaXQgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2gocHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gX2dldEZ1bGxTY3JlZW5CYXNlZE9uRGV2aWNlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0lwaG9uZTogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdC8vIElmIGVuYWJsZUZ1bGxTY3JlZW4gaXMgbm90IHNldCwgdXNlIGFzIGRlZmF1bHQgdHJ1ZSBvbiBwaG9uZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuID8/IGlzSXBob25lO1xuXHQvLyBNYWtlIHN1cmUgdGhhdCBlbmFibGVGdWxsU2NyZWVuIGlzIG5vdCBzZXQgb24gTGlzdFJlcG9ydCBmb3IgZGVza3RvcCBvciB0YWJsZXRcblx0aWYgKCFpc0lwaG9uZSAmJiBlbmFibGVGdWxsU2NyZWVuICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0fVxuXHRyZXR1cm4gZW5hYmxlRnVsbFNjcmVlbjtcbn1cblxuZnVuY3Rpb24gX2dldE11bHRpU2VsZWN0TW9kZShcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBtdWx0aVNlbGVjdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0c3dpdGNoIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpKSB7XG5cdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydDpcblx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2U6XG5cdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gZmFsc2UgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLnVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0XHRtdWx0aVNlbGVjdE1vZGUgPSAhdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPyBcIkNsZWFyQWxsXCIgOiBcIkRlZmF1bHRcIjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRyZXR1cm4gbXVsdGlTZWxlY3RNb2RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVUeXBlKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFRhYmxlVHlwZSB7XG5cdGxldCB0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdC8qICBOb3csIHdlIGtlZXAgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIG1hbmlmZXN0LCBldmVuIGlmIGl0IGxlYWRzIHRvIGVycm9ycy5cblx0XHRXZSBvbmx5IGNoYW5nZSBpZiB3ZSdyZSBub3Qgb24gZGVza3RvcCBmcm9tIEFuYWx5dGljYWwgdG8gUmVzcG9uc2l2ZS5cblx0ICovXG5cdGlmICh0YWJsZVR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCIgJiYgIWNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNEZXNrdG9wKCkpIHtcblx0XHR0YWJsZVR5cGUgPSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHR9XG5cdHJldHVybiB0YWJsZVR5cGU7XG59XG5cbmZ1bmN0aW9uIF9nZXRHcmlkVGFibGVNb2RlKHRhYmxlVHlwZTogVGFibGVUeXBlLCB0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLCBpc1RlbXBsYXRlTGlzdFJlcG9ydDogYm9vbGVhbik6IGFueSB7XG5cdGlmICh0YWJsZVR5cGUgPT09IFwiR3JpZFRhYmxlXCIpIHtcblx0XHRpZiAoaXNUZW1wbGF0ZUxpc3RSZXBvcnQpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHJvd0NvdW50TW9kZTogXCJBdXRvXCIsXG5cdFx0XHRcdHJvd0NvdW50OiBcIjNcIlxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cm93Q291bnRNb2RlOiB0YWJsZVNldHRpbmdzLnJvd0NvdW50TW9kZSA/IHRhYmxlU2V0dGluZ3Mucm93Q291bnRNb2RlIDogXCJGaXhlZFwiLFxuXHRcdFx0XHRyb3dDb3VudDogdGFibGVTZXR0aW5ncy5yb3dDb3VudCA/IHRhYmxlU2V0dGluZ3Mucm93Q291bnQgOiA1XG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge307XG5cdH1cbn1cblxuZnVuY3Rpb24gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KF90YWJsZVR5cGU6IFRhYmxlVHlwZSwgX3RhYmxlU2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RTZXR0aW5nc0NvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgJiYgX3RhYmxlVHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdD8gX3RhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXRcblx0XHQ6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdChfdGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbik6IG51bWJlciB7XG5cdHJldHVybiBfdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgPT09IDAgPyAwIDogX3RhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xufVxuXG5mdW5jdGlvbiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KF90YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uKTogbnVtYmVyIHtcblx0cmV0dXJuIF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA/IF90YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uaW5saW5lQ3JlYXRpb25Sb3dDb3VudCA6IDI7XG59XG5cbmZ1bmN0aW9uIF9nZXRGaWx0ZXJzKFxuXHR0YWJsZVNldHRpbmdzOiBUYWJsZU1hbmlmZXN0U2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdLFxuXHRxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0cGF0aDogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGFueSB7XG5cdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRxdWlja0ZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHF1aWNrRmlsdGVyczoge1xuXHRcdFx0ZW5hYmxlZDogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRwYXRoczogcXVpY2tGaWx0ZXJQYXRoc1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gX2dldEVuYWJsZUV4cG9ydChcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW5hYmxlUGFzdGU6IGJvb2xlYW5cbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnQgIT09IHVuZGVmaW5lZFxuXHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xufVxuXG5mdW5jdGlvbiBfZ2V0RmlsdGVyQ29uZmlndXJhdGlvbihcblx0dGFibGVTZXR0aW5nczogVGFibGVNYW5pZmVzdFNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYW55IHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRsZXQgcXVpY2tTZWxlY3Rpb25WYXJpYW50OiBhbnk7XG5cdGxldCBmaWx0ZXJzO1xuXHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdHF1aWNrU2VsZWN0aW9uVmFyaWFudCA9IHRhcmdldEVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0ZmlsdGVycyA9IF9nZXRGaWx0ZXJzKHRhYmxlU2V0dGluZ3MsIHF1aWNrRmlsdGVyUGF0aHMsIHF1aWNrU2VsZWN0aW9uVmFyaWFudCwgcGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0aGVhZGVyVmlzaWJsZTogIShxdWlja1NlbGVjdGlvblZhcmlhbnQgJiYgaGlkZVRhYmxlVGl0bGUpXG5cdH07XG59XG5cbmZ1bmN0aW9uIF9nZXRDb2xsZWN0ZWROYXZpZ2F0aW9uUHJvcGVydHlMYWJlbHMocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXMgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgcmVsYXRpdmVQYXRoKS5uYXZpZ2F0aW9uUHJvcGVydGllcztcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZvckVhY2goKG5hdlByb3BlcnR5OiBhbnkpID0+IHtcblx0XHRcdGNvbGxlY3RlZE5hdmlnYXRpb25Qcm9wZXJ0eUxhYmVscy5wdXNoKGdldExhYmVsKG5hdlByb3BlcnR5KSB8fCBuYXZQcm9wZXJ0eS5uYW1lKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gY29sbGVjdGVkTmF2aWdhdGlvblByb3BlcnR5TGFiZWxzO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hlY2tDb25kZW5zZWRMYXlvdXQgPSBmYWxzZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IF9tYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9ICh0YWJsZU1hbmlmZXN0U2V0dGluZ3MgJiYgdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MpIHx8IHt9O1xuXHRjb25zdCBjcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBDcmVhdGlvbk1vZGUuTmV3UGFnZTtcblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gIV9tYW5pZmVzdFdyYXBwZXIuaXNQaG9uZSgpO1xuXHRjb25zdCBlbmFibGVQYXN0ZSA9XG5cdFx0dGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSAhPT0gdW5kZWZpbmVkID8gdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSA6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiOyAvLyBQYXN0ZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IGV4Y2VwdGVkIGZvciBPUFxuXHRjb25zdCB0ZW1wbGF0ZVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpO1xuXHRjb25zdCBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIgPSB0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ID8gXCJBUEkuZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyXCIgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgPSBjaGVja0NvbmRlbnNlZExheW91dCAmJiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk7XG5cdGNvbnN0IG9GaWx0ZXJDb25maWd1cmF0aW9uID0gX2dldEZpbHRlckNvbmZpZ3VyYXRpb24odGFibGVTZXR0aW5ncywgbGluZUl0ZW1Bbm5vdGF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgdGFibGVUeXBlOiBUYWJsZVR5cGUgPSBfZ2V0VGFibGVUeXBlKHRhYmxlU2V0dGluZ3MsIGFnZ3JlZ2F0aW9uSGVscGVyLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZ3JpZFRhYmxlUm93TW9kZSA9IF9nZXRHcmlkVGFibGVNb2RlKHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncywgdGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCk7XG5cdGNvbnN0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gX2dldENvbmRlbnNlZFRhYmxlTGF5b3V0KHRhYmxlVHlwZSwgdGFibGVTZXR0aW5ncyk7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0ge1xuXHRcdC8vIElmIG5vIGNyZWF0ZUF0RW5kIGlzIHNwZWNpZmllZCBpdCB3aWxsIGJlIGZhbHNlIGZvciBJbmxpbmUgY3JlYXRlIGFuZCB0cnVlIG90aGVyd2lzZVxuXHRcdGNyZWF0ZUF0RW5kOlxuXHRcdFx0dGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmRcblx0XHRcdFx0OiBjcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5JbmxpbmUsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0ZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyOiBkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIsXG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZSxcblx0XHRlbmFibGVBdXRvQ29sdW1uV2lkdGg6IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCxcblx0XHRlbmFibGVFeHBvcnQ6IF9nZXRFbmFibGVFeHBvcnQodGFibGVTZXR0aW5ncywgY29udmVydGVyQ29udGV4dCwgZW5hYmxlUGFzdGUpLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IF9nZXRGdWxsU2NyZWVuQmFzZWRPbkRldmljZSh0YWJsZVNldHRpbmdzLCBjb252ZXJ0ZXJDb250ZXh0LCBfbWFuaWZlc3RXcmFwcGVyLmlzUGhvbmUoKSksXG5cdFx0ZW5hYmxlTWFzc0VkaXQ6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZU1hc3NFZGl0LFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRoZWFkZXJWaXNpYmxlOiB0cnVlLFxuXHRcdG11bHRpU2VsZWN0TW9kZTogX2dldE11bHRpU2VsZWN0TW9kZSh0YWJsZVNldHRpbmdzLCB0YWJsZVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBfZ2V0VGFibGVTZWxlY3Rpb25MaW1pdCh0YWJsZVNldHRpbmdzKSxcblx0XHRpbmxpbmVDcmVhdGlvblJvd0NvdW50OiBfZ2V0VGFibGVJbmxpbmVDcmVhdGlvblJvd0NvdW50KHRhYmxlU2V0dGluZ3MpLFxuXHRcdHNob3dSb3dDb3VudDogIXRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8uc2hvd0NvdW50cyAmJiAhX21hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpPy5zaG93Q291bnRzLFxuXHRcdHR5cGU6IHRhYmxlVHlwZSxcblx0XHR1c2VDb25kZW5zZWRUYWJsZUxheW91dDogY29uZGVuc2VkVGFibGVMYXlvdXQgJiYgaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCxcblx0XHRpc0NvbXBhY3RUeXBlOiBfbWFuaWZlc3RXcmFwcGVyLmlzQ29tcGFjdFR5cGUoKVxuXHR9O1xuXHRyZXR1cm4geyAuLi5vQ29uZmlndXJhdGlvbiwgLi4uZ3JpZFRhYmxlUm93TW9kZSwgLi4ub0ZpbHRlckNvbmZpZ3VyYXRpb24gfTtcbn1cblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZUNvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zID0ge1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmc7XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzOiBjb25maWdUeXBlQ29uc3RyYWludHM7XG5cdGZvcm1hdE9wdGlvbnM6IGNvbmZpZ1R5cGVmb3JtYXRPcHRpb25zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb25maWcob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGRhdGFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhbnkge1xuXHRsZXQgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGlmICghb1RhcmdldE1hcHBpbmcgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSk/LnRhcmdldFR5cGUgJiYgKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZT8uX3R5cGUgPT09IFwiVHlwZURlZmluaXRpb25cIikge1xuXHRcdG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1soKG9Qcm9wZXJ0eSBhcyBQcm9wZXJ0eSkudGFyZ2V0VHlwZSBhcyBUeXBlRGVmaW5pdGlvbikudW5kZXJseWluZ1R5cGVdO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZz8udHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSkge1xuXHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cyA9IHtcblx0XHRcdHNjYWxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFNjYWxlID8gb1Byb3BlcnR5LnNjYWxlIDogdW5kZWZpbmVkLFxuXHRcdFx0cHJlY2lzaW9uOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiA/IG9Qcm9wZXJ0eS5wcmVjaXNpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRtYXhMZW5ndGg6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoID8gb1Byb3BlcnR5Lm1heExlbmd0aCA6IHVuZGVmaW5lZCxcblx0XHRcdG51bGxhYmxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE51bGxhYmxlID8gb1Byb3BlcnR5Lm51bGxhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0bWluaW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4aW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0aXNEaWdpdFNlcXVlbmNlOlxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG5cdGdldFRhYmxlQWN0aW9ucyxcblx0Z2V0VGFibGVDb2x1bW5zLFxuXHRnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUsXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMsXG5cdGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbixcblx0Y3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbixcblx0Z2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uLFxuXHRnZXRTZWxlY3Rpb25Nb2RlLFxuXHRnZXRSb3dTdGF0dXNWaXNpYmlsaXR5LFxuXHRnZXRJbXBvcnRhbmNlLFxuXHRnZXRQMTNuTW9kZSxcblx0Z2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbixcblx0aXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlLFxuXHRzcGxpdFBhdGgsXG5cdGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLFxuXHRnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0Z2V0VHlwZUNvbmZpZ1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNk9LQSxVLEVBTUw7O2FBTktBLFU7SUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOztFQW1KTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQyxlQUFULENBQ05DLGtCQURNLEVBRU5DLGlCQUZNLEVBR05DLGdCQUhNLEVBSU5DLGtCQUpNLEVBS1c7SUFDakIsSUFBTUMsYUFBYSxHQUFHQyx5QkFBeUIsQ0FBQ0wsa0JBQUQsRUFBcUJDLGlCQUFyQixFQUF3Q0MsZ0JBQXhDLENBQS9DO0lBQ0EsSUFBTUksa0JBQWtCLEdBQUdGLGFBQWEsQ0FBQ0csWUFBekM7SUFDQSxJQUFNQyxjQUFjLEdBQUdKLGFBQWEsQ0FB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