@sapui5/sap.fe.macros 1.142.0 → 1.143.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/CollaborativeDraftHandler.js +1 -7
  4. package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +0 -6
  5. package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
  6. package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
  7. package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
  8. package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
  9. package/src/sap/fe/macros/Field.js +5 -5
  10. package/src/sap/fe/macros/Field.ts +5 -3
  11. package/src/sap/fe/macros/FooterContent.js +3 -2
  12. package/src/sap/fe/macros/FooterContent.tsx +2 -10
  13. package/src/sap/fe/macros/KPITag.js +6 -6
  14. package/src/sap/fe/macros/KPITag.tsx +5 -5
  15. package/src/sap/fe/macros/MacroAPI.js +2 -2
  16. package/src/sap/fe/macros/MacroAPI.ts +1 -1
  17. package/src/sap/fe/macros/MessageButton.js +3 -3
  18. package/src/sap/fe/macros/MessageButton.tsx +3 -2
  19. package/src/sap/fe/macros/MicroChart.js +3 -2
  20. package/src/sap/fe/macros/MicroChart.tsx +1 -1
  21. package/src/sap/fe/macros/Share.js +7 -7
  22. package/src/sap/fe/macros/Share.tsx +9 -6
  23. package/src/sap/fe/macros/Status.js +6 -5
  24. package/src/sap/fe/macros/Status.tsx +3 -4
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
  27. package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
  28. package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +22 -1
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +29 -2
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +5 -2
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -2
  33. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
  34. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
  35. package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
  36. package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
  37. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
  38. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
  39. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  40. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  41. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +4 -4
  42. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +3 -3
  43. package/src/sap/fe/macros/field/FieldFormatOptions.js +2 -2
  44. package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
  45. package/src/sap/fe/macros/field/FieldRuntime.js +7 -2
  46. package/src/sap/fe/macros/field/FieldRuntime.ts +7 -1
  47. package/src/sap/fe/macros/filter/FilterUtils.js +31 -5
  48. package/src/sap/fe/macros/filter/FilterUtils.ts +40 -6
  49. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +6 -3
  50. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +5 -1
  51. package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +19 -9
  52. package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +76 -61
  53. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
  54. package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
  55. package/src/sap/fe/macros/form/FormContainer.block.js +22 -6
  56. package/src/sap/fe/macros/form/FormContainer.block.ts +24 -6
  57. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
  58. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
  59. package/src/sap/fe/macros/library.js +5 -6
  60. package/src/sap/fe/macros/{library.ts → library.tsx} +1 -1
  61. package/src/sap/fe/macros/messagebundle.properties +6 -0
  62. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +1 -1
  63. package/src/sap/fe/macros/messages/MessageButton.js +21 -12
  64. package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
  65. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
  66. package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
  67. package/src/sap/fe/macros/quickView/QuickView.js +5 -4
  68. package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
  69. package/src/sap/fe/macros/table/Action.js +7 -4
  70. package/src/sap/fe/macros/table/Action.ts +3 -3
  71. package/src/sap/fe/macros/table/Column.js +3 -2
  72. package/src/sap/fe/macros/table/Column.ts +1 -1
  73. package/src/sap/fe/macros/table/MdcTableTemplate.js +6 -9
  74. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +5 -7
  75. package/src/sap/fe/macros/table/Table.block.js +6 -3
  76. package/src/sap/fe/macros/table/Table.block.tsx +13 -3
  77. package/src/sap/fe/macros/table/TableAPI.js +13 -8
  78. package/src/sap/fe/macros/table/TableAPI.ts +10 -3
  79. package/src/sap/fe/macros/table/TableDefinition.js +2 -2
  80. package/src/sap/fe/macros/table/TableDefinition.ts +1 -1
  81. package/src/sap/fe/macros/table/TableEventHandlerProvider.js +3 -1
  82. package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +4 -0
  83. package/src/sap/fe/macros/table/TableRuntime.js +24 -12
  84. package/src/sap/fe/macros/table/TableRuntime.ts +27 -11
  85. package/src/sap/fe/macros/table/Utils.js +9 -3
  86. package/src/sap/fe/macros/table/Utils.ts +14 -8
  87. package/src/sap/fe/macros/table/delegates/TableDelegate.js +6 -4
  88. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +6 -5
  89. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
  90. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
  91. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -5
  92. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +13 -4
  93. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
  94. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
  95. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +37 -10
  96. package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +39 -15
  97. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
  98. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
  99. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
  100. package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
  101. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
  102. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/PropertyFormatters", "sap/fe/core/type/EDM", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/fe/macros/mdc/adapter/StateHelper", "sap/ui/mdc/FilterBarDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/json/JSONModel"], function (Log, mergeObjects, jsx, CommonUtils, TemplateModel, MetaModelConverter, FilterRestrictions, FilterBar, Key, MetaModelFunction, ModelHelper, ResourceModelHelper, StableIdHelper, PropertyFormatters, EDM, CommonHelper, DelegateUtil, FieldHelper, FilterUtils, ValueHelpTemplating, StateHelper, FilterBarDelegate, TypeMap, JSONModel) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/jsx", "sap/fe/core/CommonUtils", "sap/fe/core/TemplateModel", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/MetaModelFunction", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/PropertyFormatters", "sap/fe/core/type/EDM", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/filterBar/UOMValidationDelegate", "sap/fe/macros/internal/valuehelp/ValueHelpTemplating", "sap/fe/macros/mdc/adapter/StateHelper", "sap/ui/mdc/FilterBarDelegate", "sap/ui/mdc/odata/v4/TypeMap", "sap/ui/model/json/JSONModel"], function (Log, mergeObjects, jsx, CommonUtils, TemplateModel, MetaModelConverter, FilterRestrictions, FilterBar, Key, MetaModelFunction, ModelHelper, ResourceModelHelper, StableIdHelper, PropertyFormatters, EDM, CommonHelper, DelegateUtil, FieldHelper, FilterUtils, UOMValidationDelegate, ValueHelpTemplating, StateHelper, FilterBarDelegate, TypeMap, JSONModel) {
6
6
  "use strict";
7
7
 
8
8
  var getValueHelpTemplate = ValueHelpTemplating.getValueHelpTemplate;
@@ -16,7 +16,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
16
16
  var sortPropertyInfosByGroupLabel = FilterBar.sortPropertyInfosByGroupLabel;
17
17
  var processSelectionFields = FilterBar.processSelectionFields;
18
18
  var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
19
- const ODataFilterBarDelegate = Object.assign({}, FilterBarDelegate);
19
+ const ODataFilterBarDelegate = Object.assign({}, FilterBarDelegate, UOMValidationDelegate);
20
20
  ODataFilterBarDelegate.apiVersion = 2;
21
21
  const EDIT_STATE_PROPERTY_NAME = "$editState",
22
22
  SEARCH_PROPERTY_NAME = "$search",
@@ -235,8 +235,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
235
235
  }
236
236
  const delegate = await mPropertyBag.modifier.getProperty(oParentControl, "delegate");
237
237
  const aPropertyInfo = await mPropertyBag.modifier.getProperty(oParentControl, "propertyInfo");
238
+ const propertyInfoExists = await FilterUtils._checkIfPropertyInfoExists(oParentControl, mPropertyBag.modifier, sPropertyInfoName);
238
239
  //We do not get propertyInfo in case of table filters
239
- if (aPropertyInfo) {
240
+ if (aPropertyInfo && !propertyInfoExists) {
240
241
  const hasPropertyInfo = aPropertyInfo.some(function (prop) {
241
242
  return prop.key === sPropertyInfoKey || prop.name === sPropertyInfoKey;
242
243
  });
@@ -274,12 +275,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
274
275
  propertyBag.modifier.setProperty(parentControl, "propertyInfo", _propertyInfo);
275
276
  }
276
277
  /**
277
- * Method responsible for creating filter field in standalone mode / in the personalization settings of the filter bar.
278
+ * Method responsible for creating the filter field in standalone mode and in the personalization settings of the filter bar.
278
279
  * @param oParentControl Parent control instance to which the filter field is added
279
280
  * @param sPropertyInfoName Name of the property being added as the filter field
280
281
  * @param mPropertyBag Instance of the property bag from Flex API
281
282
  * @param mPropertyBag.appComponent AppComponent
282
283
  * @param mPropertyBag.modifier Modifier from Flex API
284
+ * @param mPropertyBag.view Instance of the view
283
285
  * @returns Once resolved, a filter field definition is returned
284
286
  */
285
287
  ODataFilterBarDelegate.addItem = async function (oParentControl, sPropertyInfoName, mPropertyBag) {
@@ -294,7 +296,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
294
296
  return Promise.resolve(null);
295
297
  }
296
298
  const isXML = modifier && modifier.targets === "xmlTree";
297
- if (isXML) {
299
+ const propertyInfoExists = isXML ? await FilterUtils._checkIfPropertyInfoExists(oParentControl, modifier, sPropertyInfoName) : true;
300
+ if (isXML && !propertyInfoExists) {
298
301
  await _addPropertyInfo(oParentControl, mPropertyBag, oMetaModel, sPropertyInfoName);
299
302
  }
300
303
  return ODataFilterBarDelegate._addFlexItem(sPropertyInfoName, oParentControl, oMetaModel, modifier, mPropertyBag.appComponent, mPropertyBag.view);
@@ -566,12 +569,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
566
569
  });
567
570
  };
568
571
  ODataFilterBarDelegate._addFlexItem = async function (sFlexPropertyName, oParentControl, oMetaModel, oModifier, oAppComponent, view) {
572
+ let propertyInfosFromFilterBar = [];
573
+ const bIsXML = !!oModifier && oModifier.targets === "xmlTree";
574
+ if (bIsXML) {
575
+ const customDataValue = await DelegateUtil.getCustomDataWithModifier(oParentControl, "feFilterInfo", oModifier);
576
+ if (customDataValue) {
577
+ propertyInfosFromFilterBar = JSON.parse(customDataValue); // retrieve pre-fetched filter info from custom data, required during templating
578
+ }
579
+ }
569
580
  const sFilterBarId = oModifier ? oModifier.getId(oParentControl) : oParentControl.getId(),
570
581
  sIdPrefix = oModifier ? "" : "Adaptation",
571
- aSelectionFields = FilterUtils.getConvertedFilterFields(oParentControl, undefined, undefined, oMetaModel, oAppComponent, oModifier, oModifier ? undefined : getLineItemQualifierFromTable(oParentControl.getParent(), oMetaModel)),
582
+ aSelectionFields = FilterUtils.getConvertedFilterFields(oParentControl, undefined, undefined, oMetaModel, oAppComponent, oModifier, oModifier ? undefined : getLineItemQualifierFromTable(oParentControl.getParent(), oMetaModel), propertyInfosFromFilterBar),
572
583
  oSelectionField = ODataFilterBarDelegate._findSelectionField(aSelectionFields, sFlexPropertyName),
573
- sPropertyPath = _getPropertyPath(sFlexPropertyName),
574
- bIsXML = !!oModifier && oModifier.targets === "xmlTree";
584
+ sPropertyPath = _getPropertyPath(sFlexPropertyName);
575
585
  if (sFlexPropertyName === EDIT_STATE_PROPERTY_NAME) {
576
586
  return _templateEditState(_generateIdPrefix(sFilterBarId, `${sIdPrefix}FilterField`), oMetaModel, oModifier);
577
587
  } else if (sFlexPropertyName === SEARCH_PROPERTY_NAME) {
@@ -716,4 +726,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/jsx-runtime/j
716
726
  };
717
727
  return ODataFilterBarDelegate;
718
728
  }, false);
719
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJsYWJlbCIsIm9WaXN1YWxGaWx0ZXIiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2FkZFByb3BlcnR5SW5mbyIsIm9QYXJlbnRDb250cm9sIiwibVByb3BlcnR5QmFnIiwic1Byb3BlcnR5SW5mb05hbWUiLCJzUHJvcGVydHlJbmZvS2V5IiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsInJlcGxhY2UiLCJtb2RpZmllciIsImRlbGVnYXRlIiwiZ2V0UHJvcGVydHkiLCJhUHJvcGVydHlJbmZvIiwiaGFzUHJvcGVydHlJbmZvIiwic29tZSIsInByb3AiLCJrZXkiLCJuYW1lIiwiZW50aXR5VHlwZVBhdGgiLCJwYXlsb2FkIiwiY3JlYXRlQ29udmVydGVyQ29udGV4dCIsImFwcENvbXBvbmVudCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiZmlsdGVyRmllbGQiLCJnZXRGaWx0ZXJGaWVsZCIsInByb3BlcnR5SW5mbyIsImJ1aWxkUHJvcGVyeUluZm8iLCJfdXBkYXRlUHJvcGVydHlJbmZvIiwiZXJyb3JNc2ciLCJ3YXJuaW5nIiwicHJvcGVydHlCYWciLCJwYXJlbnRDb250cm9sIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyIiwicHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqIiwiSlNPTiIsInBhcnNlIiwicHVzaCIsInN0cmluZ2lmeSIsImN1c3RvbURhdGFOb2RlIiwicmV0cmlldmVDdXN0b21EYXRhTm9kZSIsInNldEF0dHJpYnV0ZSIsIl9wcm9wZXJ0eUluZm8iLCJmb3JtYXRQcm9wZXJ0eUluZm8iLCJzZXRQcm9wZXJ0eSIsImFkZEl0ZW0iLCJfYWRkUDEzbkl0ZW0iLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldHMiLCJfYWRkRmxleEl0ZW0iLCJyZW1vdmVJdGVtIiwib0ZpbHRlckZpZWxkUHJvcGVydHkiLCJkb1JlbW92ZUl0ZW0iLCJmaWx0ZXJGaWVsZFByb3BlcnR5IiwiZGF0YSIsImFkZENvbmRpdGlvbiIsInJlbW92ZUNvbmRpdGlvbiIsInByb3BlcnR5SW5mb0Zyb21DRCIsImNsZWFyRmlsdGVycyIsIm9GaWx0ZXJDb250cm9sIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwiU3RhdGVIZWxwZXIiLCJjbGVhckZpbHRlclZhbHVlcyIsImZldGNoTW9kZWwiLCJvTW9kZWwiLCJmZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJvRW50aXR5VHlwZSIsImdldE9iamVjdCIsImluY2x1ZGVIaWRkZW4iLCJvQ29udmVydGVyQ29udGV4dCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0RW50aXR5U2V0UGF0aCIsIm1GaWx0ZXJGaWVsZHMiLCJnZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMiLCJnZXRBcHBDb21wb25lbnQiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJvRmlsdGVyRmllbGRJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGVtcGxhdGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsImdldENvbnZlcnRlZFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJzVGFyZ2V0UHJvcGVydHlQcmVmaXgiLCJDb21tb25IZWxwZXIiLCJnZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aCIsInNQcm9wZXJ0eSIsInNlbGVjdGlvbkZpZWxkcyIsIlVJIiwiU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiX2lzRmlsdGVyQWRhcHRhYmxlIiwiaXNQcm9wZXJ0eUZpbHRlcmFibGUiLCJhUGFyYW1ldGVyRmllbGRzIiwicHJvY2Vzc2VkRmllbGRzIiwicHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyIsInByb2Nlc3NlZEZpZWxkc0tleXMiLCJvUHJvcHMiLCJmaWx0ZXIiLCJvUHJvcCIsImluY2x1ZGVzIiwiZGF0YU1vZGVsIiwib0ZSIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiaUZpbHRlckZpZWxkSW5kZXgiLCJvU2VsRmllbGQiLCJncm91cCIsImdyb3VwTGFiZWwiLCJwYXRoIiwidG9vbHRpcCIsInJlbW92ZUZyb21BcHBTdGF0ZSIsImhhc1ZhbHVlSGVscCIsIm9Qcm9wZXJ0eSIsIm9Qcm9wZXJ0eUNvbnRleHQiLCJiUmVtb3ZlRnJvbUFwcFN0YXRlIiwib0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb24iLCJvRmlsdGVyRGVmYXVsdFZhbHVlIiwiZ2V0TW9kZWxUeXBlIiwiJFR5cGUiLCJkZWZhdWx0RmlsdGVyQ29uZGl0aW9ucyIsImZpZWxkUGF0aCIsIm9wZXJhdG9yIiwidmFsdWVzIiwiZmlsdGVyRXhwcmVzc2lvbiIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJ2aXNpYmxlIiwicHJvcEluZm8iLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsInR5cGVDb25maWciLCJUeXBlTWFwIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwiZm9ybWF0T3B0aW9ucyIsImNvbnN0cmFpbnRzIiwiZ2V0TG9jYWxpemVkVGV4dCIsImlzUGFyYW1ldGVyIiwic2V0Q3VzdG9tRGF0YSIsImdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlIiwiYW5ub3RhdGlvblBhdGhzIiwiZ2V0TWV0YVBhdGgiLCJzcGxpdCIsIlZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbiIsIiRBbm5vdGF0aW9uUGF0aCIsIm1ldGFQYXRocyIsImZpbHRlckZpZWxkSW5mbyIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCJpc0luRmlsdGVyRmFjZXRzIiwiaXNTZWxlY3Rpb25GaWVsZCIsIl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXQiLCJmaWVsZEdyb3VwIiwiVGFyZ2V0IiwiJHRhcmdldCIsIkRhdGEiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIkFkYXB0YXRpb25IaWRkZW4iLCJmaWx0ZXJGaWVsZEtleSIsInNlbGVjdGlvbkZpZWxkIiwidmFsdWUiLCJzRmxleFByb3BlcnR5TmFtZSIsIm9BcHBDb21wb25lbnQiLCJiSXNYTUwiLCJ0eXBlIiwic05hdmlnYXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvblBhdGgiLCJzVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzQmluZGluZ1BhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInNSZXRyaWV2ZWRFbnRpdHlUeXBlUGF0aCIsInNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZSIsImVuZHNXaXRoIiwicHJvcGVydHkiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImpvaW4iLCJnZXRQYXRoIiwic1ZhbHVlSGVscFR5cGUiLCJkb2VzVmFsdWVIZWxwRXhpc3QiLCJiVmFsdWVIZWxwRXhpc3RzIiwibG9jYWxJZCIsIl9nZXRQYWdlTW9kZWwiLCJfZ2V0Q2FjaGVkUHJvcGVydGllcyIsIndpbmRvdyIsIkVsZW1lbnQiLCJnZXRDdXN0b21EYXRhIiwiX3NldENhY2hlZFByb3BlcnRpZXMiLCJfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkiLCJsb2NhbEdyb3VwTGFiZWwiLCJvR3JvdXAiLCJzb3J0UHJvcGVydHlJbmZvc0J5R3JvdXBMYWJlbCIsImZldGNoUHJvcGVydGllcyIsImZpbHRlckJhciIsInByb3BlcnR5SW5mb3MiLCJmZXRjaEZpbHRlclByb3BlcnRpZXMiLCJnZXRUeXBlTWFwIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGaWx0ZXJCYXJEZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25fRWRtXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZFR5cGVzLFxuXHRGaWVsZEdyb3VwVHlwZSxcblx0RmlsdGVyRmFjZXRzLFxuXHRSZWZlcmVuY2VGYWNldCxcblx0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlVHJlZU1vZGlmaWVyLCBQcmVwcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRQcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm8sXG5cdEZpbHRlckZpZWxkLFxuXHRQcm9wZXJ0eUluZm9FeHRlcm5hbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcywgc29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IGlzUHJvcGVydHlGaWx0ZXJhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxpemVkVGV4dCwgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0TW9kZWxUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3R5cGUvRURNXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJRmlsdGVyQ29udHJvbCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB7IGdldFZhbHVlSGVscFRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlSGVscFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgU3RhdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSBNRENGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5cbnR5cGUgTW9kaWZpZXJFbGVtZW50ID0gVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnQgfCBFbGVtZW50W107XG50eXBlIE51bGxhYmxlTW9kaWZpZXJFbGVtZW50ID0gdm9pZCB8IE1vZGlmaWVyRWxlbWVudCB8IG51bGw7XG5jb25zdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgRmlsdGVyQmFyRGVsZWdhdGUpIGFzIHR5cGVvZiBGaWx0ZXJCYXJEZWxlZ2F0ZSAmIHtcblx0YXBpVmVyc2lvbjogbnVtYmVyO1xuXHRfaXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyhzZWxlY3Rpb25GaWVsZHM6IFNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCk6IGJvb2xlYW47XG5cdF9maW5kU2VsZWN0aW9uRmllbGQoYVNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc0ZsZXhOYW1lOiBzdHJpbmcpOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZDtcblx0Y2xlYXJGaWx0ZXJzKG9GaWx0ZXJDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPHZvaWQ+O1xuXHRnZXRUeXBlTWFwKCk6IHR5cGVvZiBUeXBlTWFwO1xuXHRmZXRjaEZpbHRlclByb3BlcnRpZXMoZmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCk6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXT47XG5cdGZldGNoUHJvcGVydGllcyhmaWx0ZXJCYXI6IEZpbHRlckJhcik6IFByb21pc2U8UHJvcGVydHlJbmZvRXh0ZXJuYWxbXT47XG5cdF9pc0ZpbHRlckFkYXB0YWJsZShcblx0XHRmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5LFxuXHRcdHNlbGVjdGlvbkZpZWxkcz86IFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGYWNldHM/OiBGaWx0ZXJGYWNldHNcblx0KTogYm9vbGVhbjtcblx0ZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5KHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgb0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sKTogUHJvcGVydHlJbmZvW107XG5cdF90ZW1wbGF0ZUN1c3RvbUZpbHRlcihcblx0XHRvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCxcblx0XHRzSWRQcmVmaXg6IHN0cmluZyxcblx0XHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXJcblx0KTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+O1xuXHRfYWRkUDEzbkl0ZW0oc1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZywgb1BhcmVudENvbnRyb2w6IEZpbHRlckJhcik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRfYWRkRmxleEl0ZW0oXG5cdFx0c0ZsZXhQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZCxcblx0XHRvQXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50LFxuXHRcdHZpZXc/OiBWaWV3XG5cdCk6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRhZGRJdGVtKFxuXHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRtUHJvcGVydHlCYWc/OiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG5cdCk6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRhZGRDb25kaXRpb24oXG5cdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRcdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuXHQpOiBQcm9taXNlPHZvaWQgfCBudWxsPjtcblx0cmVtb3ZlSXRlbShcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdG9GaWx0ZXJGaWVsZFByb3BlcnR5OiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cblx0KTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD47XG5cdHJlbW92ZUNvbmRpdGlvbihcblx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0bVByb3BlcnR5QmFnOiB7XG5cdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDtcblx0XHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdH1cblx0KTogUHJvbWlzZTx2b2lkIHwgbnVsbD47XG59O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hcGlWZXJzaW9uID0gMjtcbmNvbnN0IEVESVRfU1RBVEVfUFJPUEVSVFlfTkFNRSA9IFwiJGVkaXRTdGF0ZVwiLFxuXHRTRUFSQ0hfUFJPUEVSVFlfTkFNRSA9IFwiJHNlYXJjaFwiLFxuXHRWQUxVRV9IRUxQX1RZUEUgPSBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCIsXG5cdEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSA9IFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiO1xuXG4vLyBGb3Igb25lIHNpbmdsZSBlbnRyeSBpbiBVSS5TZWxlY3Rpb25GaWVsZHNcbnR5cGUgQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkID0ge1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRWRpdFN0YXRlKFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPE1vZGlmaWVyRWxlbWVudD4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IHNJZFByZWZpeCxcblx0XHRcdGlzRHJhZnRDb2xsYWJvcmF0aXZlOiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHQvL1widGhpcy5pMThuXCI6IFJlc291cmNlTW9kZWwuZ2V0TW9kZWwoKSwgVE9ETzogVG8gYmUgY2hlY2tlZCB3aHkgdGhpcyBpcyBuZWVkZWQsIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IGFsbFxuXHRcdFx0XHR0aGlzOiBvVGhpc1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkRyYWZ0RWRpdFN0YXRlXCIsXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRvTW9kaWZpZXJcblx0KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH0pO1xufVxuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl90ZW1wbGF0ZUN1c3RvbUZpbHRlciA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdHNJZFByZWZpeDogc3RyaW5nLFxuXHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllclxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvRmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblxuXHRpZiAob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gaWYgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0dHlwZSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZCA9IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uICYgeyBEb2N1bWVudGF0aW9uUmVmPzogc3RyaW5nIH07XG5cdFx0Y29uc3QgY29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChvU2VsZWN0aW9uRmllbGRJbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdGRhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KGNvbnRleHQpLFxuXHRcdFx0ZG9jdW1lbnRSZWZUZXh0ID0gKFxuXHRcdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnMuQ29tbW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uX2V4dGVuZGVkXG5cdFx0XHQpPy5Eb2N1bWVudGF0aW9uUmVmPy50b1N0cmluZygpO1xuXHRcdG9TZWxlY3Rpb25GaWVsZEluZm8uZG9jdW1lbnRSZWZUZXh0ID0gZG9jdW1lbnRSZWZUZXh0O1xuXHR9XG5cblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXhcblx0XHR9KSxcblx0XHRvSXRlbU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwob1NlbGVjdGlvbkZpZWxkSW5mbywgb01ldGFNb2RlbCksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCEpLFxuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0aXRlbTogb0l0ZW1Nb2RlbFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJCYXIpLFxuXHRcdG9Db250cm9sbGVyID0gb1ZpZXcgPyBvVmlldy5nZXRDb250cm9sbGVyKCkgOiB1bmRlZmluZWQsXG5cdFx0b09wdGlvbnMgPSB7XG5cdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlciA/IG9Db250cm9sbGVyIDogdW5kZWZpbmVkLFxuXHRcdFx0dmlldzogb1ZpZXdcblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmZpbHRlci5DdXN0b21GaWx0ZXJcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucywgb01vZGlmaWVyKS5maW5hbGx5KFxuXHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdG9JdGVtTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0KTtcbn07XG5mdW5jdGlvbiBfZ2V0UHJvcGVydHlQYXRoKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoc0NvbmRpdGlvblBhdGgpO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gYVNlbGVjdGlvbkZpZWxkcy5maW5kKGZ1bmN0aW9uIChvU2VsZWN0aW9uRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aCA9PT0gc0ZsZXhOYW1lIHx8IG9TZWxlY3Rpb25GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2VBbGwoL1xcKi9nLCBcIlwiKSA9PT0gc0ZsZXhOYW1lKSAmJlxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIlxuXHRcdCk7XG5cdH0pO1xufTtcbmZ1bmN0aW9uIF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZDogc3RyaW5nLCBzQ29udHJvbFR5cGU6IHN0cmluZywgc05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc05hdmlnYXRpb25QcmVmaXggPyBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGUsIHNOYXZpZ2F0aW9uUHJlZml4XSkgOiBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGVdKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZVZhbHVlSGVscChcblx0b1NldHRpbmdzOiB7XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRtZXRhUGF0aDogQ29udGV4dDtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdH07XG5cdFx0bW9kZWxzOiB7XG5cdFx0XHRtZXRhUGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRjb250ZXh0UGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0fTtcblx0fSxcblx0b1BhcmFtZXRlcnM6IHtcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nO1xuXHRcdHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nO1xuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbjtcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50O1xuXHRcdHZpZXc/OiBWaWV3O1xuXHR9XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1RoaXMgPSB7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNWaElkUHJlZml4LFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBcIiRmaWx0ZXJzXCIsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0ZmlsdGVyRmllbGRWYWx1ZUhlbHA6IHRydWUsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCxcblx0XHRjb250ZXh0UGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5jb250ZXh0UGF0aCxcblx0XHR1c2VNdWx0aVZhbHVlRmllbGQ6IGZhbHNlLFxuXHRcdHJlcXVpcmVzVmFsaWRhdGlvbjogZmFsc2UsXG5cdFx0Y29sbGFib3JhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlcXVlc3RHcm91cElkOiB1bmRlZmluZWRcblx0fTtcblx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbChvVGhpcyk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IG1lcmdlT2JqZWN0cyh7fSwgb1NldHRpbmdzLCB7XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHR0aGlzOiBqc29uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0fSxcblx0XHRtb2RlbHM6IHtcblx0XHRcdHRoaXM6IG9UaGlzXG5cdFx0fVxuXHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblx0Y29uc3QgdGFyZ2V0UGF0aCA9IEZpZWxkSGVscGVyLnZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQob1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCk7XG5cblx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdGxldCB2YWx1ZUhlbHBYTUxTdHJpbmcgPSBqc3gucmVuZGVyQXNYTUw8c3RyaW5nIHwgdW5kZWZpbmVkPihcblx0XHRcdCgpID0+XG5cdFx0XHRcdGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHRcdFx0fCBzdHJpbmdcblx0XHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdCk7XG5cdFx0aWYgKHZhbHVlSGVscFhNTFN0cmluZykge1xuXHRcdFx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdFx0XHR2YWx1ZUhlbHBYTUxTdHJpbmcgPSBgPHJvb3Q+JHt2YWx1ZUhlbHBYTUxTdHJpbmd9PC9yb290PmA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlSGVscFhNTFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCh2YWx1ZUhlbHBYTUwuZmlyc3RFbGVtZW50Q2hpbGQsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0XHRcdGlzWE1MOiBvU2V0dGluZ3MuaXNYTUxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGFWSEVsZW1lbnRzOiBNb2RpZmllckVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRpZiAoYVZIRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdFx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFWSEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdFx0XHRhVkhFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbHQ6IEVsZW1lbnQgfCBVSTVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCBlbHQsIDApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbC5pbnNlcnRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lLCBlbHQgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy52aWV3IGFzIHVua25vd24gYXMgRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgYVZIRWxlbWVudHMgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBldmFsdWF0aW5nIERlbGVnYXRlVXRpbC5pc1ZhbHVlSGVscFJlcXVpcmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0anNvbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHZhbHVlSGVscCA9IGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHR8IFZhbHVlSGVscFxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0aWYgKHZhbHVlSGVscCkge1xuXHRcdFx0Y29uc3Qgc0FnZ3JlZ2F0aW9uTmFtZSA9IFwiZGVwZW5kZW50c1wiO1xuXHRcdFx0Ly9Tb21lIGZpbHRlciBmaWVsZHMgaGF2ZSB0aGUgUGVyc2lzdGVuY2VQcm92aWRlciBhZ2dyZWdhdGlvbiBiZXNpZGVzIHRoZSBGVkggOlxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWVIZWxwKSkge1xuXHRcdFx0XHR2YWx1ZUhlbHAuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCB2YWx1ZUhlbHAsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5hc3luYyBmdW5jdGlvbiBfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBhRGVwZW5kZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShvTW9kaWZpZXIuZ2V0QWdncmVnYXRpb24ob0ZpbHRlckJhciwgXCJkZXBlbmRlbnRzXCIpKTtcblx0XHRsZXQgaTtcblx0XHRpZiAoYURlcGVuZGVudHMgJiYgYURlcGVuZGVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8PSBhRGVwZW5kZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBhRGVwZW5kZW50c1tpXTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJGaWVsZCAmJiAob0ZpbHRlckZpZWxkIGFzIFVJNUVsZW1lbnQpLmlzQTxNRENGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldFByb3BlcnR5S2V5KCksXG5cdFx0XHRcdFx0XHRzRmlsdGVyRmllbGRJZCA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldElkKCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggPT09IHNEYXRhUHJvcGVydHkgJiYgc0ZpbHRlckZpZWxkSWQuaW5kZXhPZihcIkN1c3RvbUZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckZpZWxkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0TG9nLmVycm9yKFwiRmlsdGVyIENhbm5vdCBiZSBhZGRlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVGaWx0ZXJGaWVsZChcblx0b1NldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0b1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzSW5GaWx0ZXJCYXJJZD86IHN0cmluZyxcblx0cGFnZU1vZGVsPzogSlNPTk1vZGVsXG4pOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdPiB7XG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNJZFByZWZpeCxcblx0XHR2aElkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRwcm9wZXJ0eVBhdGg6IG9QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRzZXR0aW5nczogb1BhcmFtZXRlcnMub1NldHRpbmdzLFxuXHRcdHZpc3VhbEZpbHRlcjogb1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyLFxuXHRcdGVkaXRNb2RlOiBge2ludGVybmFsPi8ke3NJbkZpbHRlckJhcklkfS9maWx0ZXJGaWVsZHMvJHtvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lfS9lZGl0TW9kZX1gLFxuXHRcdGxhYmVsOiBvUGFyYW1ldGVycy5sYWJlbFxuXHR9KTtcblx0dHJ5IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhcmFtZXRlcnMub01ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvVmlzdWFsRmlsdGVyID0gbmV3IFRlbXBsYXRlTW9kZWwob1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyIGFzIG9iamVjdCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gbWVyZ2VPYmplY3RzKHt9LCBvU2V0dGluZ3MsIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlci5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlcixcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBwYWdlTW9kZWxcblx0XHRcdH1cblx0XHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblxuXHRcdHJldHVybiBhd2FpdCBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLmZpbHRlckZpZWxkLkZpbHRlckZpZWxkVGVtcGxhdGVcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRpc1hNTDogISFvU2V0dGluZ3MuaXNYTUxcblx0XHR9KTtcblx0fSBmaW5hbGx5IHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX2FkZFByb3BlcnR5SW5mbyhcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9LFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRjb25zdCBzUHJvcGVydHlJbmZvS2V5ID0gS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIipcIiwgXCJcIik7XG5cdFx0aWYgKG1Qcm9wZXJ0eUJhZyAmJiAhbVByb3BlcnR5QmFnLm1vZGlmaWVyKSB7XG5cdFx0XHR0aHJvdyBcIkZpbHRlckJhciBEZWxlZ2F0ZSBtZXRob2QgY2FsbGVkIHdpdGhvdXQgbW9kaWZpZXIuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RmlsdGVyQmFyRGVsZWdhdGU+KG9QYXJlbnRDb250cm9sLCBcImRlbGVnYXRlXCIpO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eUluZm8gPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RkVQcm9wZXJ0eUluZm9bXT4ob1BhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIpO1xuXHRcdC8vV2UgZG8gbm90IGdldCBwcm9wZXJ0eUluZm8gaW4gY2FzZSBvZiB0YWJsZSBmaWx0ZXJzXG5cdFx0aWYgKGFQcm9wZXJ0eUluZm8pIHtcblx0XHRcdGNvbnN0IGhhc1Byb3BlcnR5SW5mbyA9IGFQcm9wZXJ0eUluZm8uc29tZShmdW5jdGlvbiAocHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHByb3Aua2V5ID09PSBzUHJvcGVydHlJbmZvS2V5IHx8IHByb3AubmFtZSA9PT0gc1Byb3BlcnR5SW5mb0tleTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBkZWxlZ2F0ZS5wYXlsb2FkLmVudGl0eVR5cGVQYXRoO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5SW5mb05hbWUsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5idWlsZFByb3BlcnlJbmZvKGZpbHRlckZpZWxkISwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGF3YWl0IF91cGRhdGVQcm9wZXJ0eUluZm8oXG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRtUHJvcGVydHlCYWcsXG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvIGFzIHVua25vd24gYXMgUHJvcGVydHlJbmZvLFxuXHRcdFx0XHRcdG9QYXJlbnRDb250cm9sXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvck1zZykge1xuXHRcdExvZy53YXJuaW5nKGAke29QYXJlbnRDb250cm9sLmdldElkKCl9IDogJHtlcnJvck1zZ31gKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mb1tdLFxuXHRwcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0ZmlsdGVyRmllbGQ6IFByb3BlcnR5SW5mbyxcblx0cGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0cGFyZW50Q29udHJvbCxcblx0XHRcImZlRmlsdGVySW5mb1wiLFxuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyXG5cdCk7XG5cdGlmIChwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgJiYgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmogPSBKU09OLnBhcnNlKHByb3BlcnR5SW5mb0ZvckZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW107XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iaik7XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyID0gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0XHRjb25zdCBjdXN0b21EYXRhTm9kZSA9IGF3YWl0IERlbGVnYXRlVXRpbC5yZXRyaWV2ZUN1c3RvbURhdGFOb2RlKHBhcmVudENvbnRyb2wsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5QmFnLm1vZGlmaWVyKTtcblx0XHRjdXN0b21EYXRhTm9kZVswXS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpO1xuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKHBhcmVudENvbnRyb2wsIFwiY3VzdG9tRGF0YVwiLCBjdXN0b21EYXRhTm9kZVswXSwgMCk7XG5cdH1cblxuXHQvLyBDdXN0b20gZGF0YSBpcyBzZXQgdG8gdGhlIHBhcmVudCBjb250cm9sIHRvIHN0b3JlIHRoZSBwcm9wZXJ0eUluZm9cblx0cHJvcGVydHlJbmZvLnB1c2goZmlsdGVyRmllbGQpO1xuXHQvL3JlbW92ZSB1bndhbnRlZCBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eUluZm9cblx0Y29uc3QgX3Byb3BlcnR5SW5mbyA9IEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm9bXSk7XG5cdC8vVXBkYXRlIHRoZSBwcm9wZXJ0eUluZm8gaW4gdGhlIHBhcmVudCBjb250cm9sXG5cdHByb3BlcnR5QmFnLm1vZGlmaWVyLnNldFByb3BlcnR5KHBhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIsIF9wcm9wZXJ0eUluZm8pO1xufVxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBpbiBzdGFuZGFsb25lIG1vZGUgLyBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzIG9mIHRoZSBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyB0aGUgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHRoZSBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hZGRJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc/OiB7IHZpZXc6IFZpZXc7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9XG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdGlmICghbVByb3BlcnR5QmFnKSB7XG5cdFx0Ly8gSW52b2tlZCBkdXJpbmcgcnVudGltZS5cblx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0oc1Byb3BlcnR5SW5mb05hbWUsIG9QYXJlbnRDb250cm9sKTtcblx0fVxuXHRjb25zdCBtb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0c1Byb3BlcnR5SW5mb05hbWUsXG5cdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0b01ldGFNb2RlbCxcblx0XHRtb2RpZmllcixcblx0XHRtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LFxuXHRcdG1Qcm9wZXJ0eUJhZy52aWV3XG5cdCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIG9GaWx0ZXJGaWVsZFByb3BlcnR5IE9iamVjdCBvZiB0aGUgZmlsdGVyIGZpZWxkIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVJdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRvRmlsdGVyRmllbGRQcm9wZXJ0eTogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuKTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD4ge1xuXHRsZXQgZG9SZW1vdmVJdGVtID0gdHJ1ZTtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGNvbnN0IGZpbHRlckZpZWxkUHJvcGVydHkgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHkob0ZpbHRlckZpZWxkUHJvcGVydHksIFwicHJvcGVydHlLZXlcIik7XG5cdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBmaWx0ZXJGaWVsZFByb3BlcnR5IGFzIHN0cmluZyk7XG5cdH1cblx0aWYgKFxuXHRcdHR5cGVvZiBvRmlsdGVyRmllbGRQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIiAmJlxuXHRcdChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5pc0EgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJGaWVsZFwiKVxuXHQpIHtcblx0XHRpZiAoKG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmRhdGEoXCJpc1Nsb3RcIikgPT09IFwidHJ1ZVwiICYmIG1Qcm9wZXJ0eUJhZykge1xuXHRcdFx0Ly8gSW5zZXJ0aW5nIGludG8gdGhlIG1vZGlmaWVyIGNyZWF0ZXMgYSBjaGFuZ2UgZnJvbSBmbGV4IGFsc28gZmlsdGVyIGlzIGJlZW4gcmVtb3ZlZCBoZW5jZSBwcm9taXNlIGlzIHJlc29sdmVkIHRvIGZhbHNlXG5cdFx0XHRtb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyZW50Q29udHJvbCwgXCJkZXBlbmRlbnRzXCIsIG9GaWx0ZXJGaWVsZFByb3BlcnR5KTtcblx0XHRcdGRvUmVtb3ZlSXRlbSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvUmVtb3ZlSXRlbSk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgZmlsdGVyIGZpZWxkIGNvbmRpdGlvbiBpbiBzdGFuZGFsb25lIC8gcGVyc29uYWxpemF0aW9uIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgUGFyZW50IGNvbnRyb2wgaW5zdGFuY2UgdG8gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyBhZGRlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIGFkZGVkIGFzIGZpbHRlciBmaWVsZFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZyBJbnN0YW5jZSBvZiBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuYWRkQ29uZGl0aW9uID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRtUHJvcGVydHlCYWc6IHsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IG1vZGVsID0gbVByb3BlcnR5QmFnICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdFx0fVxuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIGZyb20gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyByZW1vdmVkXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgYmVpbmcgcmVtb3ZlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLnJlbW92ZUNvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7XG5cdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0bW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7XG5cdH1cbik6IFByb21pc2U8dm9pZCB8IG51bGw+IHtcblx0Y29uc3QgbW9kaWZpZXIgPSBtUHJvcGVydHlCYWcubW9kaWZpZXI7XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChpc1hNTCkge1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb0Zyb21DRCA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiLFxuXHRcdFx0bW9kaWZpZXJcblx0XHQpO1xuXHRcdGlmICghcHJvcGVydHlJbmZvRnJvbUNEKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBtb2RlbCAmJiBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdFx0fVxuXHRcdFx0YXdhaXQgX2FkZFByb3BlcnR5SW5mbyhvUGFyZW50Q29udHJvbCwgbVByb3BlcnR5QmFnLCBvTWV0YU1vZGVsLCBzUHJvcGVydHlJbmZvTmFtZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG4vKipcbiAqIENsZWFycyBhbGwgaW5wdXQgdmFsdWVzIG9mIHZpc2libGUgZmlsdGVyIGZpZWxkcyBpbiB0aGUgZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvRmlsdGVyQ29udHJvbCBJbnN0YW5jZSBvZiB0aGUgRmlsdGVyQmFyIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBwcm9taXNlXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuY2xlYXJGaWx0ZXJzID0gYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJDb250cm9sOiBGaWx0ZXJCYXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgZmlsdGVyQmFyQVBJID0gb0ZpbHRlckNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdHJldHVybiBTdGF0ZUhlbHBlci5jbGVhckZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkgYXMgTWFjcm9BUEkpO1xufTtcbi8qKlxuICogQ3JlYXRlcyB0aGUgZmlsdGVyIGZpZWxkIGluIHRoZSB0YWJsZSBhZGFwdGF0aW9uIG9mIHRoZSBGaWx0ZXJCYXIuXG4gKiBAcGFyYW0gc1Byb3BlcnR5SW5mb05hbWUgVGhlIHByb3BlcnR5IG5hbWUgb2YgdGhlIGVudGl0eSB0eXBlIGZvciB3aGljaCB0aGUgZmlsdGVyIGZpZWxkIG5lZWRzIHRvIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBJbnN0YW5jZSBvZiB0aGUgcGFyZW50IGNvbnRyb2xcbiAqIEByZXR1cm5zIE9uY2UgcmVzb2x2ZWQsIGEgZmlsdGVyIGZpZWxkIGRlZmluaXRpb24gaXMgcmV0dXJuZWRcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkUDEzbkl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXJcbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKG9QYXJlbnRDb250cm9sKVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChvTW9kZWw6IE1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0oXG5cdFx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lLFxuXHRcdFx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiTW9kZWwgY291bGQgbm90IGJlIHJlc29sdmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk7XG59O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkgPSBmdW5jdGlvbiAoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckNvbnRyb2w6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9wZXJ0eUluZm9bXSB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3QgaW5jbHVkZUhpZGRlbiA9IG9GaWx0ZXJDb250cm9sLmlzQShcInNhcC51aS5tZGMudmFsdWVoZWxwLkZpbHRlckJhclwiKSA/IHRydWUgOiB1bmRlZmluZWQ7XG5cdGlmICghb0ZpbHRlckNvbnRyb2wgfHwgIW9FbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKTtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCk7XG5cblx0Y29uc3QgbUZpbHRlckZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRzRW50aXR5VHlwZVBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRvTWV0YU1vZGVsLFxuXHRcdENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvRmlsdGVyQ29udHJvbClcblx0KTtcblx0bGV0IGFGZXRjaGVkUHJvcGVydGllczogRkVQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRtRmlsdGVyRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKSB7XG5cdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblx0XHRpZiAoc0Fubm90YXRpb25QYXRoICYmICFvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCkucmVzb2x2ZVBhdGg8UHJvcGVydHk+KHNBbm5vdGF0aW9uUGF0aCkudGFyZ2V0O1xuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UHJlZml4ID0gQ29tbW9uSGVscGVyLmdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoKG9NZXRhTW9kZWwsIHNBbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBzUHJvcGVydHkgPSBzQW5ub3RhdGlvblBhdGgucmVwbGFjZShgJHtzVGFyZ2V0UHJvcGVydHlQcmVmaXh9L2AsIFwiXCIpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHM7XG5cdFx0XHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckFkYXB0YWJsZShvRmlsdGVyRmllbGRJbmZvLCBvUHJvcGVydHlBbm5vdGF0aW9ucywgc2VsZWN0aW9uRmllbGRzLCBmaWx0ZXJGYWNldHMpICYmXG5cdFx0XHRcdGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNUYXJnZXRQcm9wZXJ0eVByZWZpeCwgX2dldFByb3BlcnR5UGF0aChzUHJvcGVydHkpLCB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9DdXN0b20gRmlsdGVyc1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob0ZpbHRlckZpZWxkSW5mbyBhcyBQcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgYVBhcmFtZXRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhhRmV0Y2hlZFByb3BlcnRpZXMgYXMgRmlsdGVyRmllbGRbXSwgb0NvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBwcm9jZXNzZWRGaWVsZHNLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRwcm9jZXNzZWRGaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BzOiBGRVByb3BlcnR5SW5mbykge1xuXHRcdGlmIChvUHJvcHMua2V5KSB7XG5cdFx0XHRwcm9jZXNzZWRGaWVsZHNLZXlzLnB1c2gob1Byb3BzLmtleSk7XG5cdFx0fVxuXHR9KTtcblxuXHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBhRmV0Y2hlZFByb3BlcnRpZXMuZmlsdGVyKGZ1bmN0aW9uIChvUHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRyZXR1cm4gcHJvY2Vzc2VkRmllbGRzS2V5cy5pbmNsdWRlcyhvUHJvcC5rZXkhKTtcblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTWV0YU1vZGVsLmdldENvbnRleHQoc0VudGl0eVNldFBhdGgpKTtcblx0Y29uc3Qgb0ZSID0gRmlsdGVyUmVzdHJpY3Rpb25zLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5RGF0YU1vZGVsKGRhdGFNb2RlbCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pLFxuXHRcdG1BbGxvd2VkRXhwcmVzc2lvbnMgPSBvRlIuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xuXHQvL09iamVjdC5rZXlzKHByb2Nlc3NlZEZpZWxkcykuZm9yRWFjaChmdW5jdGlvbiAoc0ZpbHRlckZpZWxkS2V5OiBzdHJpbmcpIHtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wLCBpRmlsdGVyRmllbGRJbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb1NlbEZpZWxkID0gYUZldGNoZWRQcm9wZXJ0aWVzW2lGaWx0ZXJGaWVsZEluZGV4XTtcblx0XHRpZiAoIW9TZWxGaWVsZCB8fCAhb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IF9nZXRQcm9wZXJ0eVBhdGgob1NlbEZpZWxkLmNvbmRpdGlvblBhdGgpO1xuXHRcdC8vZmV0Y2hCYXNpY1xuXHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0Z3JvdXA6IG9TZWxGaWVsZC5ncm91cCxcblx0XHRcdGdyb3VwTGFiZWw6IG9TZWxGaWVsZC5ncm91cExhYmVsLFxuXHRcdFx0cGF0aDogb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgsXG5cdFx0XHR0b29sdGlwOiBudWxsLFxuXHRcdFx0cmVtb3ZlRnJvbUFwcFN0YXRlOiBmYWxzZSxcblx0XHRcdGhhc1ZhbHVlSGVscDogZmFsc2Vcblx0XHR9KTtcblxuXHRcdC8vZmV0Y2hQcm9wSW5mb1xuXHRcdGlmIChvU2VsRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9TZWxGaWVsZC5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNBbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0Fubm90YXRpb25QYXRofUBgKSxcblx0XHRcdFx0b1Byb3BlcnR5Q29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Fubm90YXRpb25QYXRoKTtcblxuXHRcdFx0Y29uc3QgYlJlbW92ZUZyb21BcHBTdGF0ZSA9XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gfHxcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl07XG5cblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVByZWZpeCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTWV0YU1vZGVsLCBvU2VsRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gc0Fubm90YXRpb25QYXRoLnJlcGxhY2UoYCR7c1RhcmdldFByb3BlcnR5UHJlZml4fS9gLCBcIlwiKTtcblx0XHRcdGxldCBvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbjtcblx0XHRcdGxldCBvRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eUNvbnRleHQgJiYgaXNQcm9wZXJ0eUZpbHRlcmFibGUob01ldGFNb2RlbCwgc1RhcmdldFByb3BlcnR5UHJlZml4LCBfZ2V0UHJvcGVydHlQYXRoKHNQcm9wZXJ0eSksIHRydWUpKSB7XG5cdFx0XHRcdG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckRlZmF1bHRWYWx1ZSA9IG9GaWx0ZXJEZWZhdWx0VmFsdWVBbm5vdGF0aW9uW2AkJHtnZXRNb2RlbFR5cGUob1Byb3BlcnR5LiRUeXBlKX1gXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0XHRcdHRvb2x0aXA6IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5RdWlja0luZm9cIl0gfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHJlbW92ZUZyb21BcHBTdGF0ZTogYlJlbW92ZUZyb21BcHBTdGF0ZSxcblx0XHRcdFx0XHRoYXNWYWx1ZUhlbHA6IGhhc1ZhbHVlSGVscChvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpLCB7IGNvbnRleHQ6IG9Qcm9wZXJ0eUNvbnRleHQgfSksXG5cdFx0XHRcdFx0ZGVmYXVsdEZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJEZWZhdWx0VmFsdWVcblx0XHRcdFx0XHRcdD8gW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkUGF0aDogb1NlbEZpZWxkLmNvbmRpdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVzOiBbb0ZpbHRlckRlZmF1bHRWYWx1ZV1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQgIF1cblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vYmFzZVxuXG5cdFx0aWYgKG9Qcm9wKSB7XG5cdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXSAmJiBtQWxsb3dlZEV4cHJlc3Npb25zW3NQcm9wZXJ0eVBhdGhdLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b1Byb3AuZmlsdGVyRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24obUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvUHJvcC5maWx0ZXJFeHByZXNzaW9uID0gXCJhdXRvXCI7XG5cdFx0XHR9XG5cblx0XHRcdG9Qcm9wID0gT2JqZWN0LmFzc2lnbihvUHJvcCwge1xuXHRcdFx0XHR2aXNpYmxlOiBvU2VsRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cHJvY2Vzc2VkRmllbGRzW2lGaWx0ZXJGaWVsZEluZGV4XSA9IG9Qcm9wO1xuXHR9KTtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHByb3BJbmZvOiBGRVByb3BlcnR5SW5mbykge1xuXHRcdC8vIGtleSBzaG91bGQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBuYW1lXG5cdFx0cHJvcEluZm8ua2V5ID0gcHJvcEluZm8ubmFtZTtcblx0XHRpZiAocHJvcEluZm8ucGF0aCA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdHByb3BJbmZvLmxhYmVsID0gZ2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQ29udHJvbCkuZ2V0VGV4dChcIkZJTFRFUkJBUl9FRElUSU5HX1NUQVRVU1wiKTtcblx0XHR9XG5cdFx0cHJvcEluZm8udHlwZUNvbmZpZyA9IFR5cGVNYXAuZ2V0VHlwZUNvbmZpZyhwcm9wSW5mby5kYXRhVHlwZSwgcHJvcEluZm8uZm9ybWF0T3B0aW9ucywgcHJvcEluZm8uY29uc3RyYWludHMpO1xuXHRcdHByb3BJbmZvLmxhYmVsID0gZ2V0TG9jYWxpemVkVGV4dChwcm9wSW5mby5sYWJlbCEsIG9GaWx0ZXJDb250cm9sKSB8fCBcIlwiO1xuXHRcdGlmIChwcm9wSW5mby5pc1BhcmFtZXRlcikge1xuXHRcdFx0YVBhcmFtZXRlckZpZWxkcy5wdXNoKHByb3BJbmZvLm5hbWUpO1xuXHRcdH1cblx0fSk7XG5cblx0YUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc2VkRmllbGRzO1xuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQ29udHJvbCwgXCJwYXJhbWV0ZXJzXCIsIGFQYXJhbWV0ZXJGaWVsZHMgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXMgYXMgUHJvcGVydHlJbmZvW107XG59O1xuXG5mdW5jdGlvbiBnZXRMaW5lSXRlbVF1YWxpZmllckZyb21UYWJsZShvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAob0NvbnRyb2wuaXNBPEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvblBhdGhzID0gb0NvbnRyb2wuZ2V0TWV0YVBhdGgoKS5zcGxpdChcIiNcIilbMF0uc3BsaXQoXCIvXCIpO1xuXHRcdHN3aXRjaCAoYW5ub3RhdGlvblBhdGhzW2Fubm90YXRpb25QYXRocy5sZW5ndGggLSAxXSkge1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudH1gOlxuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudH1gOlxuXHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbFxuXHRcdFx0XHRcdC5nZXRPYmplY3Qob0NvbnRyb2wuZ2V0TWV0YVBhdGgoKSlcblx0XHRcdFx0XHQuVmlzdWFsaXphdGlvbnM/LmZpbmQoKHZpc3VhbGl6YXRpb246IHsgJEFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT5cblx0XHRcdFx0XHRcdHZpc3VhbGl6YXRpb24uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gKVxuXHRcdFx0XHRcdCkuJEFubm90YXRpb25QYXRoO1xuXHRcdFx0Y2FzZSBgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YDpcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGhzID0gb0NvbnRyb2wuZ2V0TWV0YVBhdGgoKS5zcGxpdChcIi9cIik7XG5cdFx0XHRcdHJldHVybiBtZXRhUGF0aHNbbWV0YVBhdGhzLmxlbmd0aCAtIDFdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckFkYXB0YWJsZSA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0cHJvcGVydHlBbm5vdGF0aW9uczogUHJvcGVydHksXG5cdHNlbGVjdGlvbkZpZWxkcz86IFNlbGVjdGlvbkZpZWxkcyxcblx0ZmlsdGVyRmFjZXRzPzogRmlsdGVyRmFjZXRzXG4pOiBib29sZWFuIHtcblx0bGV0IGlzSW5GaWx0ZXJGYWNldHM6IGJvb2xlYW47XG5cdGNvbnN0IGlzU2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHMgPyBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9pc0ZpbHRlckluU2VsZWN0aW9uRmllbGRzKHNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvKSA6IGZhbHNlO1xuXHRpZiAoZmlsdGVyRmFjZXRzKSB7XG5cdFx0aXNJbkZpbHRlckZhY2V0cyA9IGZpbHRlckZhY2V0cy5zb21lKGZ1bmN0aW9uIChmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBmaWx0ZXJGYWNldC5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cD8uRGF0YS5zb21lKGZ1bmN0aW9uIChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0XHRcdFx0Ly8gd2UgZXhwZWN0IGRhdGFGaWVsZCB0byBiZSBEYXRhRmllbGRUeXBlcyAoaGF2aW5nIGEgVmFsdWUpIGluc2lkZSBGaWVsZEdyb3VwcyBpbnNpZGUgRmlsdGVyRmFjZXRzXG5cdFx0XHRcdGlmICgoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5WYWx1ZS5wYXRoID09PSBmaWx0ZXJGaWVsZEluZm8ua2V5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZGF0YUZpZWxkIHR5cGVzIGhhdmluZyBubyBWYWx1ZSAoRGF0YUZpZWxkRm9yQW5ub3RhdGlvblR5cGVzLCBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLCBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzKSwgdGhlcmUgaXMgbm90aGluZyB0byBjaGVjaywgYnV0IHRoaXMgc2hvdWxkIG5vdCBvY2N1ciBhbnl3YXlcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0aXNJbkZpbHRlckZhY2V0cyA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBpc1NlbGVjdGlvbkZpZWxkIHx8IGlzSW5GaWx0ZXJGYWNldHMgfHwgIXByb3BlcnR5QW5ub3RhdGlvbnMuYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZHM6IFNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWx0ZXJGaWVsZEtleSA9IGZpbHRlckZpZWxkSW5mby5rZXk/LmluZGV4T2YoXCI6OlwiKSA+IDAgPyBmaWx0ZXJGaWVsZEluZm8ua2V5Py5yZXBsYWNlKFwiOjpcIiwgXCIvXCIpIDogZmlsdGVyRmllbGRJbmZvLmtleTtcblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcy5zb21lKGZ1bmN0aW9uIChzZWxlY3Rpb25GaWVsZDogQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0aWYgKHNlbGVjdGlvbkZpZWxkLnZhbHVlID09PSBmaWx0ZXJGaWVsZEtleSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl9hZGRGbGV4SXRlbSA9IGFzeW5jIGZ1bmN0aW9uIChcblx0c0ZsZXhQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZCxcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IHwgdW5kZWZpbmVkLFxuXHR2aWV3PzogVmlldyB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxOdWxsYWJsZU1vZGlmaWVyRWxlbWVudD4ge1xuXHRjb25zdCBzRmlsdGVyQmFySWQgPSBvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQob1BhcmVudENvbnRyb2wpIDogb1BhcmVudENvbnRyb2wuZ2V0SWQoKSxcblx0XHRzSWRQcmVmaXggPSBvTW9kaWZpZXIgPyBcIlwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0YVNlbGVjdGlvbkZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRcdG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdG9Nb2RpZmllciA/IHVuZGVmaW5lZCA6IGdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlKG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpISwgb01ldGFNb2RlbClcblx0XHQpLFxuXHRcdG9TZWxlY3Rpb25GaWVsZCA9IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2ZpbmRTZWxlY3Rpb25GaWVsZChhU2VsZWN0aW9uRmllbGRzLCBzRmxleFByb3BlcnR5TmFtZSksXG5cdFx0c1Byb3BlcnR5UGF0aCA9IF9nZXRQcm9wZXJ0eVBhdGgoc0ZsZXhQcm9wZXJ0eU5hbWUpLFxuXHRcdGJJc1hNTCA9ICEhb01vZGlmaWVyICYmIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIjtcblx0aWYgKHNGbGV4UHJvcGVydHlOYW1lID09PSBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUpIHtcblx0XHRyZXR1cm4gX3RlbXBsYXRlRWRpdFN0YXRlKF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fUZpbHRlckZpZWxkYCksIG9NZXRhTW9kZWwsIG9Nb2RpZmllcik7XG5cdH0gZWxzZSBpZiAoc0ZsZXhQcm9wZXJ0eU5hbWUgPT09IFNFQVJDSF9QUk9QRVJUWV9OQU1FKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fSBlbHNlIGlmIChvU2VsZWN0aW9uRmllbGQ/LnRlbXBsYXRlKSB7XG5cdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX3RlbXBsYXRlQ3VzdG9tRmlsdGVyKFxuXHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fWApLFxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Nb2RpZmllciFcblx0XHQpO1xuXHR9XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZD8udHlwZSA9PT0gXCJTbG90XCIgJiYgb01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIF9hZGRYTUxDdXN0b21GaWx0ZXJGaWVsZChvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLCBvTW9kaWZpZXIsIHNQcm9wZXJ0eVBhdGgpO1xuXHR9XG5cblx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRsZXQgc0VudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGxldCBzVXNlU2VtYW50aWNEYXRlUmFuZ2U7XG5cdGxldCBvU2V0dGluZ3M6IHtcblx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdFx0cHJvcGVydHk6IENvbnRleHQ7XG5cdFx0fTtcblx0XHRtb2RlbHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdHByb3BlcnR5PzogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRtZXRhUGF0aD86IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdH07XG5cdGxldCBzQmluZGluZ1BhdGg7XG5cdGxldCBvUGFyYW1ldGVyczoge1xuXHRcdG1ldGFQYXRoOiBzdHJpbmc7XG5cdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdHNCaW5kaW5nUGF0aDogc3RyaW5nO1xuXHRcdHNWYWx1ZUhlbHBUeXBlOiBzdHJpbmc7XG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0c0lkUHJlZml4OiBzdHJpbmc7XG5cdFx0b1NldHRpbmdzOiB1bmtub3duO1xuXHRcdHNWaElkUHJlZml4OiBzdHJpbmc7XG5cdFx0c05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmc7XG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuO1xuXHRcdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXI7XG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQ7XG5cdFx0dmlzdWFsRmlsdGVyPzogdW5rbm93bjtcblx0XHR2aWV3PzogVmlldztcblx0XHRsYWJlbD86IHN0cmluZztcblx0fTtcblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob1NlbGVjdGlvbkZpZWxkPy5pc1BhcmFtZXRlcikge1xuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvU2VsZWN0aW9uRmllbGQuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGguc3Vic3RyaW5nKDAsIHNBbm5vdGF0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChzUmV0cmlldmVkRW50aXR5VHlwZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0c0VudGl0eVR5cGVQYXRoID0gc1JldHJpZXZlZEVudGl0eVR5cGVQYXRoITtcblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcInVzZVNlbWFudGljRGF0ZVJhbmdlXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoc1JldHJpZXZlZFVzZVNlbWFudGljRGF0ZVJhbmdlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdHNVc2VTZW1hbnRpY0RhdGVSYW5nZSA9IHNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZTtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCArIHNQcm9wZXJ0eVBhdGgpITtcblx0XHRcdGxldCBzSW5GaWx0ZXJCYXJJZCA9IG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvUGFyZW50Q29udHJvbCkgOiBvUGFyZW50Q29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWYgKHNJbkZpbHRlckJhcklkLmVuZHNXaXRoKFwiLWNvbnRlbnRcIikpIHtcblx0XHRcdFx0Ly8gLWNvbnRlbnQgaXMgb25seSBhZGRlZCB3aGVuIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGRpcmVjdGx5IGluIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdHNJbkZpbHRlckJhcklkID0gc0luRmlsdGVyQmFySWQuc3Vic3RyaW5nKDAsIHNJbkZpbHRlckJhcklkLmxhc3RJbmRleE9mKFwiLWNvbnRlbnRcIikpO1xuXHRcdFx0XHQvLyBCeSB1c2luZyB0aGUgaWQgb2YgdGhlIHBhcmVudCBjb250cm9sLCB3ZSBjYW4gZ2V0IHRoZSBjb3JyZWN0IGlkUHJlZml4IGZvciB0aGUgdmFsdWUgaGVscFxuXHRcdFx0fVxuXHRcdFx0b1NldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGgpISxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb1Byb3BlcnR5Q29udGV4dFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb01ldGFNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHR9O1xuXHRcdFx0c0JpbmRpbmdQYXRoID0gYC8ke01vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKVxuXHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdC5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpXG5cdFx0XHRcdC5qb2luKFwiL1wiKX1gO1xuXHRcdFx0b1BhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG1ldGFQYXRoOiBvUHJvcGVydHlDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0c1Byb3BlcnR5TmFtZTogc1Byb3BlcnR5UGF0aCxcblx0XHRcdFx0c0JpbmRpbmdQYXRoOiBzQmluZGluZ1BhdGgsXG5cdFx0XHRcdHNWYWx1ZUhlbHBUeXBlOiBzSWRQcmVmaXggKyBWQUxVRV9IRUxQX1RZUEUsXG5cdFx0XHRcdG9Db250cm9sOiBvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0b01vZGlmaWVyOiBvTW9kaWZpZXIsXG5cdFx0XHRcdHNJZFByZWZpeDogX2dlbmVyYXRlSWRQcmVmaXgoc0luRmlsdGVyQmFySWQsIGAke3NJZFByZWZpeH1GaWx0ZXJGaWVsZGAsIHNOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRcdHNWaElkUHJlZml4OiBfZ2VuZXJhdGVJZFByZWZpeChzSW5GaWx0ZXJCYXJJZCwgc0lkUHJlZml4ICsgVkFMVUVfSEVMUF9UWVBFKSxcblx0XHRcdFx0c05hdmlnYXRpb25QcmVmaXg6IHNOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBzVXNlU2VtYW50aWNEYXRlUmFuZ2UgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRvU2V0dGluZ3M6IG9TZWxlY3Rpb25GaWVsZD8uc2V0dGluZ3MgPz8ge30sXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1NlbGVjdGlvbkZpZWxkPy52aXN1YWxGaWx0ZXIsXG5cdFx0XHRcdHZpZXcsXG5cdFx0XHRcdGxhYmVsOiBvU2VsZWN0aW9uRmllbGQ/LmxhYmVsXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmRvZXNWYWx1ZUhlbHBFeGlzdChvUGFyYW1ldGVycyk7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoYlZhbHVlSGVscEV4aXN0czogYm9vbGVhbikge1xuXHRcdFx0aWYgKCFiVmFsdWVIZWxwRXhpc3RzKSB7XG5cdFx0XHRcdHJldHVybiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5wcm9wZXJ0eVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg6IG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwibG9jYWxJZFwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGxvY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHBhZ2VNb2RlbDtcblx0XHRcdGlmIChvUGFyYW1ldGVycy52aXN1YWxGaWx0ZXIpIHtcblx0XHRcdFx0Ly9OZWVkIHRvIHNldCB0aGUgY29udmVydGVyY29udGV4dCBhcyBwYWdlTW9kZWwgaW4gc2V0dGluZ3MgZm9yIEJ1aWxkaW5nQmxvY2sgMi4wXG5cdFx0XHRcdHBhZ2VNb2RlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1BhcmVudENvbnRyb2wpLmdldENvbnRyb2xsZXIoKS5fZ2V0UGFnZU1vZGVsKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX3RlbXBsYXRlRmlsdGVyRmllbGQob1NldHRpbmdzLCBvUGFyYW1ldGVycywgbG9jYWxJZCwgcGFnZU1vZGVsKTtcblx0XHR9KTtcbn07XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQpOiBudWxsIHwgUHJvcGVydHlJbmZvW10gfCB1bmRlZmluZWQge1xuXHQvLyBwcm9wZXJ0aWVzIGFyZSBub3QgY2FjaGVkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdGlmIChvRmlsdGVyQmFyIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8UHJvcGVydHlJbmZvW10+KG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSk7XG59XG5mdW5jdGlvbiBfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQsIGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiB2b2lkIHtcblx0Ly8gZG8gbm90IGNhY2hlIGR1cmluZyB0ZW1wbGF0aW5nLCBlbHNlIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgY2FjaGVkIHZpZXdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybjtcblx0fVxuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQmFyLCBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVksIGFGZXRjaGVkUHJvcGVydGllcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG59XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10ge1xuXHRsZXQgYUZldGNoZWRQcm9wZXJ0aWVzID0gX2dldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhcik7XG5cdGxldCBsb2NhbEdyb3VwTGFiZWw7XG5cblx0aWYgKCFhRmV0Y2hlZFByb3BlcnRpZXMpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBPRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGgsIG9NZXRhTW9kZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvR3JvdXA6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRsb2NhbEdyb3VwTGFiZWwgPSBudWxsO1xuXHRcdFx0aWYgKG9Hcm91cC5ncm91cExhYmVsKSB7XG5cdFx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IGdldExvY2FsaXplZFRleHQob0dyb3VwLmdyb3VwTGFiZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0XHRvR3JvdXAuZ3JvdXBMYWJlbCA9IGxvY2FsR3JvdXBMYWJlbCA9PT0gbnVsbCA/IG9Hcm91cC5ncm91cExhYmVsIDogbG9jYWxHcm91cExhYmVsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0X3NldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhciwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0fVxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IGF3YWl0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKTtcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEoZmlsdGVyQmFyLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUluZm9zKTtcblx0aWYgKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvcyBhcyBQcm9wZXJ0eUluZm9bXSkgYXMgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRmaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpITtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKGZpbHRlckJhciBhcyBGaWx0ZXJCYXIpLnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdGlmICghbW9kZWwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShlbnRpdHlUeXBlUGF0aCwgbW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIGZpbHRlckJhcik7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IHR5cGVvZiBUeXBlTWFwIHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4REEsTUFBTUEsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsQ0FzRGpFO0VBQ0RILHNCQUFzQixDQUFDSSxVQUFVLEdBQUcsQ0FBQztFQUNyQyxNQUFNQyx3QkFBd0IsR0FBRyxZQUFZO0lBQzVDQyxvQkFBb0IsR0FBRyxTQUFTO0lBQ2hDQyxlQUFlLEdBQUcsc0JBQXNCO0lBQ3hDQywyQkFBMkIsR0FBRywwQ0FBMEM7O0VBRXpFOztFQUtBLGVBQWVDLGtCQUFrQkEsQ0FDaENDLFNBQWlCLEVBQ2pCQyxTQUF5QixFQUN6QkMsU0FBdUMsRUFDWjtJQUMzQixNQUFNQyxLQUFLLEdBQUcsSUFBSUMsU0FBUyxDQUFDO1FBQzFCQyxFQUFFLEVBQUVMLFNBQVM7UUFDYk0sb0JBQW9CLEVBQUVDLFdBQVcsQ0FBQ0MsNkJBQTZCLENBQUNQLFNBQVM7TUFDMUUsQ0FBQyxDQUFDO01BQ0ZRLHFCQUFxQixHQUFHO1FBQ3ZCQyxlQUFlLEVBQUU7VUFDaEJDLElBQUksRUFBRVIsS0FBSyxDQUFDUyxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3JDLENB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
729
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPRGF0YUZpbHRlckJhckRlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiRmlsdGVyQmFyRGVsZWdhdGUiLCJVT01WYWxpZGF0aW9uRGVsZWdhdGUiLCJhcGlWZXJzaW9uIiwiRURJVF9TVEFURV9QUk9QRVJUWV9OQU1FIiwiU0VBUkNIX1BST1BFUlRZX05BTUUiLCJWQUxVRV9IRUxQX1RZUEUiLCJGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVkiLCJfdGVtcGxhdGVFZGl0U3RhdGUiLCJzSWRQcmVmaXgiLCJtZXRhTW9kZWwiLCJvTW9kaWZpZXIiLCJvVGhpcyIsIkpTT05Nb2RlbCIsImlkIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwiYmluZGluZ0NvbnRleHRzIiwidGhpcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibW9kZWxzIiwiRGVsZWdhdGVVdGlsIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJ1bmRlZmluZWQiLCJmaW5hbGx5IiwiZGVzdHJveSIsIl90ZW1wbGF0ZUN1c3RvbUZpbHRlciIsIm9GaWx0ZXJCYXIiLCJvU2VsZWN0aW9uRmllbGRJbmZvIiwib01ldGFNb2RlbCIsInNFbnRpdHlUeXBlUGF0aCIsImdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXIiLCJhbm5vdGF0aW9uUGF0aCIsImNvbnRleHQiLCJnZXRDb250ZXh0IiwiZGF0YU1vZGVsUGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImRvY3VtZW50UmVmVGV4dCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiRG9jdW1lbnRhdGlvblJlZiIsInRvU3RyaW5nIiwib0l0ZW1Nb2RlbCIsIlRlbXBsYXRlTW9kZWwiLCJjb250ZXh0UGF0aCIsIml0ZW0iLCJvVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsIm9PcHRpb25zIiwiY29udHJvbGxlciIsInZpZXciLCJfZ2V0UHJvcGVydHlQYXRoIiwic0NvbmRpdGlvblBhdGgiLCJGaWx0ZXJVdGlscyIsImdldFByb3BlcnR5UGF0aEZyb21Db25kaXRpb25QYXRoIiwiX2ZpbmRTZWxlY3Rpb25GaWVsZCIsImFTZWxlY3Rpb25GaWVsZHMiLCJzRmxleE5hbWUiLCJmaW5kIiwib1NlbGVjdGlvbkZpZWxkIiwiY29uZGl0aW9uUGF0aCIsInJlcGxhY2VBbGwiLCJhdmFpbGFiaWxpdHkiLCJfZ2VuZXJhdGVJZFByZWZpeCIsInNGaWx0ZXJCYXJJZCIsInNDb250cm9sVHlwZSIsInNOYXZpZ2F0aW9uUHJlZml4IiwiZ2VuZXJhdGUiLCJfdGVtcGxhdGVWYWx1ZUhlbHAiLCJvU2V0dGluZ3MiLCJvUGFyYW1ldGVycyIsImlkUHJlZml4Iiwic1ZoSWRQcmVmaXgiLCJjb25kaXRpb25Nb2RlbCIsIm5hdmlnYXRpb25QcmVmaXgiLCJmaWx0ZXJGaWVsZFZhbHVlSGVscCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwibWV0YVBhdGgiLCJ1c2VNdWx0aVZhbHVlRmllbGQiLCJyZXF1aXJlc1ZhbGlkYXRpb24iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJlcXVlc3RHcm91cElkIiwianNvbk1vZGVsIiwibWVyZ2VPYmplY3RzIiwidGFyZ2V0UGF0aCIsIkZpZWxkSGVscGVyIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImlzWE1MIiwidmFsdWVIZWxwWE1MU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRWYWx1ZUhlbHBUZW1wbGF0ZSIsImdldE1vZGVsIiwidmFsdWVIZWxwWE1MIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInRoZW4iLCJhVkhFbGVtZW50cyIsInNBZ2dyZWdhdGlvbk5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiZWx0IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJvQ29udHJvbCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ2YWx1ZUhlbHAiLCJfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQiLCJzUHJvcGVydHlQYXRoIiwiYURlcGVuZGVudHMiLCJnZXRBZ2dyZWdhdGlvbiIsImkiLCJsZW5ndGgiLCJvRmlsdGVyRmllbGQiLCJpc0EiLCJzRGF0YVByb3BlcnR5IiwiZ2V0UHJvcGVydHlLZXkiLCJzRmlsdGVyRmllbGRJZCIsImdldElkIiwiaW5kZXhPZiIsIl90ZW1wbGF0ZUZpbHRlckZpZWxkIiwic0luRmlsdGVyQmFySWQiLCJwYWdlTW9kZWwiLCJ2aElkUHJlZml4IiwicHJvcGVydHlQYXRoIiwic1Byb3BlcnR5TmFtZSIsInNldHRpbmdzIiwidmlzdWFsRmlsdGVyIiwiZWRpdE1vZGUiLCJsYWJlbCIsIm9WaXN1YWxGaWx0ZXIiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2FkZFByb3BlcnR5SW5mbyIsIm9QYXJlbnRDb250cm9sIiwibVByb3BlcnR5QmFnIiwic1Byb3BlcnR5SW5mb05hbWUiLCJzUHJvcGVydHlJbmZvS2V5IiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsInJlcGxhY2UiLCJtb2RpZmllciIsImRlbGVnYXRlIiwiZ2V0UHJvcGVydHkiLCJhUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRXhpc3RzIiwiX2NoZWNrSWZQcm9wZXJ0eUluZm9FeGlzdHMiLCJoYXNQcm9wZXJ0eUluZm8iLCJzb21lIiwicHJvcCIsImtleSIsIm5hbWUiLCJlbnRpdHlUeXBlUGF0aCIsInBheWxvYWQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0IiwiYXBwQ29tcG9uZW50IiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJmaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwicHJvcGVydHlJbmZvIiwiYnVpbGRQcm9wZXJ5SW5mbyIsIl91cGRhdGVQcm9wZXJ0eUluZm8iLCJlcnJvck1zZyIsIndhcm5pbmciLCJwcm9wZXJ0eUJhZyIsInBhcmVudENvbnRyb2wiLCJwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmoiLCJKU09OIiwicGFyc2UiLCJwdXNoIiwic3RyaW5naWZ5IiwiY3VzdG9tRGF0YU5vZGUiLCJyZXRyaWV2ZUN1c3RvbURhdGFOb2RlIiwic2V0QXR0cmlidXRlIiwiX3Byb3BlcnR5SW5mbyIsImZvcm1hdFByb3BlcnR5SW5mbyIsInNldFByb3BlcnR5IiwiYWRkSXRlbSIsIl9hZGRQMTNuSXRlbSIsIm1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0cyIsIl9hZGRGbGV4SXRlbSIsInJlbW92ZUl0ZW0iLCJvRmlsdGVyRmllbGRQcm9wZXJ0eSIsImRvUmVtb3ZlSXRlbSIsImZpbHRlckZpZWxkUHJvcGVydHkiLCJkYXRhIiwiYWRkQ29uZGl0aW9uIiwicmVtb3ZlQ29uZGl0aW9uIiwicHJvcGVydHlJbmZvRnJvbUNEIiwiY2xlYXJGaWx0ZXJzIiwib0ZpbHRlckNvbnRyb2wiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJTdGF0ZUhlbHBlciIsImNsZWFyRmlsdGVyVmFsdWVzIiwiZmV0Y2hNb2RlbCIsIm9Nb2RlbCIsImZldGNoUHJvcGVydGllc0ZvckVudGl0eSIsIm9FbnRpdHlUeXBlIiwiZ2V0T2JqZWN0IiwiaW5jbHVkZUhpZGRlbiIsIm9Db252ZXJ0ZXJDb250ZXh0Iiwic0VudGl0eVNldFBhdGgiLCJnZXRFbnRpdHlTZXRQYXRoIiwibUZpbHRlckZpZWxkcyIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImdldEFwcENvbXBvbmVudCIsImFGZXRjaGVkUHJvcGVydGllcyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJzQW5ub3RhdGlvblBhdGgiLCJ0ZW1wbGF0ZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInNUYXJnZXRQcm9wZXJ0eVByZWZpeCIsIkNvbW1vbkhlbHBlciIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwic1Byb3BlcnR5Iiwic2VsZWN0aW9uRmllbGRzIiwiVUkiLCJTZWxlY3Rpb25GaWVsZHMiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJfaXNGaWx0ZXJBZGFwdGFibGUiLCJpc1Byb3BlcnR5RmlsdGVyYWJsZSIsImFQYXJhbWV0ZXJGaWVsZHMiLCJwcm9jZXNzZWRGaWVsZHMiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwicHJvY2Vzc2VkRmllbGRzS2V5cyIsIm9Qcm9wcyIsImZpbHRlciIsIm9Qcm9wIiwiaW5jbHVkZXMiLCJkYXRhTW9kZWwiLCJvRlIiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJpRmlsdGVyRmllbGRJbmRleCIsIm9TZWxGaWVsZCIsImdyb3VwIiwiZ3JvdXBMYWJlbCIsInBhdGgiLCJ0b29sdGlwIiwicmVtb3ZlRnJvbUFwcFN0YXRlIiwiaGFzVmFsdWVIZWxwIiwib1Byb3BlcnR5Iiwib1Byb3BlcnR5Q29udGV4dCIsImJSZW1vdmVGcm9tQXBwU3RhdGUiLCJvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbiIsIm9GaWx0ZXJEZWZhdWx0VmFsdWUiLCJnZXRNb2RlbFR5cGUiLCIkVHlwZSIsImRlZmF1bHRGaWx0ZXJDb25kaXRpb25zIiwiZmllbGRQYXRoIiwib3BlcmF0b3IiLCJ2YWx1ZXMiLCJmaWx0ZXJFeHByZXNzaW9uIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsInZpc2libGUiLCJwcm9wSW5mbyIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwidHlwZUNvbmZpZyIsIlR5cGVNYXAiLCJnZXRUeXBlQ29uZmlnIiwiZGF0YVR5cGUiLCJmb3JtYXRPcHRpb25zIiwiY29uc3RyYWludHMiLCJnZXRMb2NhbGl6ZWRUZXh0IiwiaXNQYXJhbWV0ZXIiLCJzZXRDdXN0b21EYXRhIiwiZ2V0TGluZUl0ZW1RdWFsaWZpZXJGcm9tVGFibGUiLCJhbm5vdGF0aW9uUGF0aHMiLCJnZXRNZXRhUGF0aCIsInNwbGl0IiwiVmlzdWFsaXphdGlvbnMiLCJ2aXN1YWxpemF0aW9uIiwiJEFubm90YXRpb25QYXRoIiwibWV0YVBhdGhzIiwiZmlsdGVyRmllbGRJbmZvIiwicHJvcGVydHlBbm5vdGF0aW9ucyIsImlzSW5GaWx0ZXJGYWNldHMiLCJpc1NlbGVjdGlvbkZpZWxkIiwiX2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMiLCJmaWx0ZXJGYWNldCIsImZpZWxkR3JvdXAiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiRGF0YSIsImRhdGFGaWVsZCIsIlZhbHVlIiwiQWRhcHRhdGlvbkhpZGRlbiIsImZpbHRlckZpZWxkS2V5Iiwic2VsZWN0aW9uRmllbGQiLCJ2YWx1ZSIsInNGbGV4UHJvcGVydHlOYW1lIiwib0FwcENvbXBvbmVudCIsInByb3BlcnR5SW5mb3NGcm9tRmlsdGVyQmFyIiwiYklzWE1MIiwiY3VzdG9tRGF0YVZhbHVlIiwidHlwZSIsInNOYXZpZ2F0aW9uUGF0aCIsImdldE5hdmlnYXRpb25QYXRoIiwic1VzZVNlbWFudGljRGF0ZVJhbmdlIiwic0JpbmRpbmdQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJzUmV0cmlldmVkRW50aXR5VHlwZVBhdGgiLCJzUmV0cmlldmVkVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJlbmRzV2l0aCIsInByb3BlcnR5IiwiZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmciLCJqb2luIiwiZ2V0UGF0aCIsInNWYWx1ZUhlbHBUeXBlIiwiZG9lc1ZhbHVlSGVscEV4aXN0IiwiYlZhbHVlSGVscEV4aXN0cyIsImxvY2FsSWQiLCJfZ2V0UGFnZU1vZGVsIiwiX2dldENhY2hlZFByb3BlcnRpZXMiLCJ3aW5kb3ciLCJFbGVtZW50IiwiZ2V0Q3VzdG9tRGF0YSIsIl9zZXRDYWNoZWRQcm9wZXJ0aWVzIiwiX2dldENhY2hlZE9yRmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5IiwibG9jYWxHcm91cExhYmVsIiwib0dyb3VwIiwic29ydFByb3BlcnR5SW5mb3NCeUdyb3VwTGFiZWwiLCJmZXRjaFByb3BlcnRpZXMiLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm9zIiwiZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzIiwiZ2V0VHlwZU1hcCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyRGVsZWdhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdEZpbHRlckZhY2V0cyxcblx0UmVmZXJlbmNlRmFjZXQsXG5cdFNlbGVjdGlvbkZpZWxkc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgQmFzZVRyZWVNb2RpZmllciwgUHJlcHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBGaWx0ZXJSZXN0cmljdGlvbnMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL2ZpbHRlci9GaWx0ZXJSZXN0cmljdGlvbnNcIjtcbmltcG9ydCB0eXBlIHtcblx0UHJvcGVydHlJbmZvIGFzIEZFUHJvcGVydHlJbmZvLFxuXHRGaWx0ZXJGaWVsZCxcblx0UHJvcGVydHlJbmZvRXh0ZXJuYWxcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMsIHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldExvY2FsaXplZFRleHQsIGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldE1vZGVsVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS90eXBlL0VETVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSUZpbHRlckNvbnRyb2wgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBGaWx0ZXJVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXIvRmlsdGVyVXRpbHNcIjtcbmltcG9ydCBVT01WYWxpZGF0aW9uRGVsZWdhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL1VPTVZhbGlkYXRpb25EZWxlZ2F0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9Qcm9wZXJ0eUluZm9cIjtcbmltcG9ydCB7IGdldFZhbHVlSGVscFRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlSGVscFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFByb3BlcnR5SW5mbyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL21kYy9hZGFwdGVyL1N0YXRlSGVscGVyXCI7XG5pbXBvcnQgU3RhdGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvbWRjL2FkYXB0ZXIvU3RhdGVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IEZpbHRlckJhckRlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhckRlbGVnYXRlXCI7XG5pbXBvcnQgdHlwZSBNRENGaWx0ZXJGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWx0ZXJGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVmFsdWVIZWxwIGZyb20gXCJzYXAvdWkvbWRjL1ZhbHVlSGVscFwiO1xuaW1wb3J0IFR5cGVNYXAgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5cbnR5cGUgTW9kaWZpZXJFbGVtZW50ID0gVUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnQgfCBFbGVtZW50W107XG50eXBlIE51bGxhYmxlTW9kaWZpZXJFbGVtZW50ID0gdm9pZCB8IE1vZGlmaWVyRWxlbWVudCB8IG51bGw7XG5jb25zdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlID0gT2JqZWN0LmFzc2lnbih7fSwgRmlsdGVyQmFyRGVsZWdhdGUsIFVPTVZhbGlkYXRpb25EZWxlZ2F0ZSkgYXMgdHlwZW9mIEZpbHRlckJhckRlbGVnYXRlICZcblx0dHlwZW9mIFVPTVZhbGlkYXRpb25EZWxlZ2F0ZSAmIHtcblx0XHRhcGlWZXJzaW9uOiBudW1iZXI7XG5cdFx0X2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuO1xuXHRcdF9maW5kU2VsZWN0aW9uRmllbGQoYVNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXSwgc0ZsZXhOYW1lOiBzdHJpbmcpOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZDtcblx0XHRjbGVhckZpbHRlcnMob0ZpbHRlckNvbnRyb2w6IEZpbHRlckJhcik6IFByb21pc2U8dm9pZD47XG5cdFx0Z2V0VHlwZU1hcCgpOiB0eXBlb2YgVHlwZU1hcDtcblx0XHRmZXRjaEZpbHRlclByb3BlcnRpZXMoZmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCk6IFByb21pc2U8Q29udHJvbFByb3BlcnR5SW5mb1tdIHwgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXT47XG5cdFx0ZmV0Y2hQcm9wZXJ0aWVzKGZpbHRlckJhcjogRmlsdGVyQmFyKTogUHJvbWlzZTxQcm9wZXJ0eUluZm9FeHRlcm5hbFtdPjtcblx0XHRfaXNGaWx0ZXJBZGFwdGFibGUoXG5cdFx0XHRmaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkLFxuXHRcdFx0cHJvcGVydHlBbm5vdGF0aW9uczogUHJvcGVydHksXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRmaWx0ZXJGYWNldHM/OiBGaWx0ZXJGYWNldHNcblx0XHQpOiBib29sZWFuO1xuXHRcdGZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGg6IHN0cmluZywgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbCk6IFByb3BlcnR5SW5mb1tdO1xuXHRcdF90ZW1wbGF0ZUN1c3RvbUZpbHRlcihcblx0XHRcdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRcdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0XHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0XHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyXG5cdFx0KTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+O1xuXHRcdF9hZGRQMTNuSXRlbShzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLCBvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTxOdWxsYWJsZU1vZGlmaWVyRWxlbWVudD47XG5cdFx0X2FkZEZsZXhJdGVtKFxuXHRcdFx0c0ZsZXhQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0XHRcdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdFx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB8IHVuZGVmaW5lZCxcblx0XHRcdG9BcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQsXG5cdFx0XHR2aWV3PzogVmlld1xuXHRcdCk6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+O1xuXHRcdGFkZEl0ZW0oXG5cdFx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRcdG1Qcm9wZXJ0eUJhZz86IHsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH1cblx0XHQpOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50Pjtcblx0XHRhZGRDb25kaXRpb24oXG5cdFx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdFx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0XHRcdG1Qcm9wZXJ0eUJhZzogeyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfVxuXHRcdCk6IFByb21pc2U8dm9pZCB8IG51bGw+O1xuXHRcdHJlbW92ZUl0ZW0oXG5cdFx0XHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyLFxuXHRcdFx0b0ZpbHRlckZpZWxkUHJvcGVydHk6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdFx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG5cdFx0KTogUHJvbWlzZTxib29sZWFuIHwgbnVsbD47XG5cdFx0cmVtb3ZlQ29uZGl0aW9uKFxuXHRcdFx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0XHRcdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUHJvcGVydHlCYWc6IHtcblx0XHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8dm9pZCB8IG51bGw+O1xuXHR9O1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5hcGlWZXJzaW9uID0gMjtcbmNvbnN0IEVESVRfU1RBVEVfUFJPUEVSVFlfTkFNRSA9IFwiJGVkaXRTdGF0ZVwiLFxuXHRTRUFSQ0hfUFJPUEVSVFlfTkFNRSA9IFwiJHNlYXJjaFwiLFxuXHRWQUxVRV9IRUxQX1RZUEUgPSBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCIsXG5cdEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSA9IFwic2FwX2ZlX0ZpbHRlckJhckRlbGVnYXRlX3Byb3BlcnR5SW5mb01hcFwiO1xuXG4vLyBGb3Igb25lIHNpbmdsZSBlbnRyeSBpbiBVSS5TZWxlY3Rpb25GaWVsZHNcbnR5cGUgQW5ub3RhdGlvblNlbGVjdGlvbkZpZWxkID0ge1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gX3RlbXBsYXRlRWRpdFN0YXRlKFxuXHRzSWRQcmVmaXg6IHN0cmluZyxcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyIHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPE1vZGlmaWVyRWxlbWVudD4ge1xuXHRjb25zdCBvVGhpcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0aWQ6IHNJZFByZWZpeCxcblx0XHRcdGlzRHJhZnRDb2xsYWJvcmF0aXZlOiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdHRoaXM6IG9UaGlzLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKVxuXHRcdFx0fSxcblx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHQvL1widGhpcy5pMThuXCI6IFJlc291cmNlTW9kZWwuZ2V0TW9kZWwoKSwgVE9ETzogVG8gYmUgY2hlY2tlZCB3aHkgdGhpcyBpcyBuZWVkZWQsIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IGFsbFxuXHRcdFx0XHR0aGlzOiBvVGhpc1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkRyYWZ0RWRpdFN0YXRlXCIsXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRvTW9kaWZpZXJcblx0KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH0pO1xufVxuXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLl90ZW1wbGF0ZUN1c3RvbUZpbHRlciA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2wsXG5cdHNJZFByZWZpeDogc3RyaW5nLFxuXHRvU2VsZWN0aW9uRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9Nb2RpZmllcjogQmFzZVRyZWVNb2RpZmllclxuKTogUHJvbWlzZTxNb2RpZmllckVsZW1lbnQ+IHtcblx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYXdhaXQgRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGFXaXRoTW9kaWZpZXI8c3RyaW5nPihvRmlsdGVyQmFyLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblxuXHRpZiAob1NlbGVjdGlvbkZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gaWYgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0dHlwZSBQcm9wZXJ0eUFubm90YXRpb25zX0NvbW1vbl9leHRlbmRlZCA9IFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uICYgeyBEb2N1bWVudGF0aW9uUmVmPzogc3RyaW5nIH07XG5cdFx0Y29uc3QgY29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChvU2VsZWN0aW9uRmllbGRJbmZvLmFubm90YXRpb25QYXRoKSxcblx0XHRcdGRhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KGNvbnRleHQpLFxuXHRcdFx0ZG9jdW1lbnRSZWZUZXh0ID0gKFxuXHRcdFx0XHRkYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnMuQ29tbW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbnNfQ29tbW9uX2V4dGVuZGVkXG5cdFx0XHQpPy5Eb2N1bWVudGF0aW9uUmVmPy50b1N0cmluZygpO1xuXHRcdG9TZWxlY3Rpb25GaWVsZEluZm8uZG9jdW1lbnRSZWZUZXh0ID0gZG9jdW1lbnRSZWZUZXh0O1xuXHR9XG5cblx0Y29uc3Qgb1RoaXMgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGlkOiBzSWRQcmVmaXhcblx0XHR9KSxcblx0XHRvSXRlbU1vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwob1NlbGVjdGlvbkZpZWxkSW5mbywgb01ldGFNb2RlbCksXG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCEpLFxuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdGl0ZW06IG9JdGVtTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHR9LFxuXHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHR0aGlzOiBvVGhpcyxcblx0XHRcdFx0aXRlbTogb0l0ZW1Nb2RlbFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b1ZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KG9GaWx0ZXJCYXIpLFxuXHRcdG9Db250cm9sbGVyID0gb1ZpZXcgPyBvVmlldy5nZXRDb250cm9sbGVyKCkgOiB1bmRlZmluZWQsXG5cdFx0b09wdGlvbnMgPSB7XG5cdFx0XHRjb250cm9sbGVyOiBvQ29udHJvbGxlciA/IG9Db250cm9sbGVyIDogdW5kZWZpbmVkLFxuXHRcdFx0dmlldzogb1ZpZXdcblx0XHR9O1xuXG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmZpbHRlci5DdXN0b21GaWx0ZXJcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucywgb01vZGlmaWVyKS5maW5hbGx5KFxuXHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdG9UaGlzLmRlc3Ryb3koKTtcblx0XHRcdG9JdGVtTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0KTtcbn07XG5mdW5jdGlvbiBfZ2V0UHJvcGVydHlQYXRoKHNDb25kaXRpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0UHJvcGVydHlQYXRoRnJvbUNvbmRpdGlvblBhdGgoc0NvbmRpdGlvblBhdGgpO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKGFTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNGbGV4TmFtZTogc3RyaW5nKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gYVNlbGVjdGlvbkZpZWxkcy5maW5kKGZ1bmN0aW9uIChvU2VsZWN0aW9uRmllbGQ6IEZpbHRlckZpZWxkKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdChvU2VsZWN0aW9uRmllbGQuY29uZGl0aW9uUGF0aCA9PT0gc0ZsZXhOYW1lIHx8IG9TZWxlY3Rpb25GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2VBbGwoL1xcKi9nLCBcIlwiKSA9PT0gc0ZsZXhOYW1lKSAmJlxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLmF2YWlsYWJpbGl0eSAhPT0gXCJIaWRkZW5cIlxuXHRcdCk7XG5cdH0pO1xufTtcbmZ1bmN0aW9uIF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZDogc3RyaW5nLCBzQ29udHJvbFR5cGU6IHN0cmluZywgc05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc05hdmlnYXRpb25QcmVmaXggPyBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGUsIHNOYXZpZ2F0aW9uUHJlZml4XSkgOiBnZW5lcmF0ZShbc0ZpbHRlckJhcklkLCBzQ29udHJvbFR5cGVdKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIF90ZW1wbGF0ZVZhbHVlSGVscChcblx0b1NldHRpbmdzOiB7XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRtZXRhUGF0aDogQ29udGV4dDtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdH07XG5cdFx0bW9kZWxzOiB7XG5cdFx0XHRtZXRhUGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRjb250ZXh0UGF0aDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0fTtcblx0fSxcblx0b1BhcmFtZXRlcnM6IHtcblx0XHRzVmhJZFByZWZpeDogc3RyaW5nO1xuXHRcdHNOYXZpZ2F0aW9uUHJlZml4Pzogc3RyaW5nO1xuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbjtcblx0XHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyO1xuXHRcdG9Db250cm9sOiBVSTVFbGVtZW50O1xuXHRcdHZpZXc/OiBWaWV3O1xuXHR9XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1RoaXMgPSB7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNWaElkUHJlZml4LFxuXHRcdGNvbmRpdGlvbk1vZGVsOiBcIiRmaWx0ZXJzXCIsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0ZmlsdGVyRmllbGRWYWx1ZUhlbHA6IHRydWUsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCxcblx0XHRjb250ZXh0UGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5jb250ZXh0UGF0aCxcblx0XHR1c2VNdWx0aVZhbHVlRmllbGQ6IGZhbHNlLFxuXHRcdHJlcXVpcmVzVmFsaWRhdGlvbjogZmFsc2UsXG5cdFx0Y29sbGFib3JhdGlvbkVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlcXVlc3RHcm91cElkOiB1bmRlZmluZWRcblx0fTtcblx0Y29uc3QganNvbk1vZGVsID0gbmV3IEpTT05Nb2RlbChvVGhpcyk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IG1lcmdlT2JqZWN0cyh7fSwgb1NldHRpbmdzLCB7XG5cdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHR0aGlzOiBqc29uTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0fSxcblx0XHRtb2RlbHM6IHtcblx0XHRcdHRoaXM6IG9UaGlzXG5cdFx0fVxuXHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblx0Y29uc3QgdGFyZ2V0UGF0aCA9IEZpZWxkSGVscGVyLnZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQob1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5tZXRhUGF0aCk7XG5cblx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdGxldCB2YWx1ZUhlbHBYTUxTdHJpbmcgPSBqc3gucmVuZGVyQXNYTUw8c3RyaW5nIHwgdW5kZWZpbmVkPihcblx0XHRcdCgpID0+XG5cdFx0XHRcdGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHRcdFx0fCBzdHJpbmdcblx0XHRcdFx0XHR8IHVuZGVmaW5lZFxuXHRcdCk7XG5cdFx0aWYgKHZhbHVlSGVscFhNTFN0cmluZykge1xuXHRcdFx0aWYgKG9TZXR0aW5ncy5pc1hNTCkge1xuXHRcdFx0XHR2YWx1ZUhlbHBYTUxTdHJpbmcgPSBgPHJvb3Q+JHt2YWx1ZUhlbHBYTUxTdHJpbmd9PC9yb290PmA7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCB2YWx1ZUhlbHBYTUwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlSGVscFhNTFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdERlbGVnYXRlVXRpbC50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCh2YWx1ZUhlbHBYTUwuZmlyc3RFbGVtZW50Q2hpbGQsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0XHRcdGlzWE1MOiBvU2V0dGluZ3MuaXNYTUxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGFWSEVsZW1lbnRzOiBNb2RpZmllckVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0XHRpZiAoYVZIRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNBZ2dyZWdhdGlvbk5hbWUgPSBcImRlcGVuZGVudHNcIjtcblx0XHRcdFx0XHRcdC8vU29tZSBmaWx0ZXIgZmllbGRzIGhhdmUgdGhlIFBlcnNpc3RlbmNlUHJvdmlkZXIgYWdncmVnYXRpb24gYmVzaWRlcyB0aGUgRlZIIDpcblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFWSEVsZW1lbnRzKSkge1xuXHRcdFx0XHRcdFx0XHRhVkhFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbHQ6IEVsZW1lbnQgfCBVSTVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCBlbHQsIDApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy5vQ29udHJvbC5pbnNlcnRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lLCBlbHQgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9QYXJhbWV0ZXJzLm9Nb2RpZmllcikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Db250cm9sLFxuXHRcdFx0XHRcdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0YVZIRWxlbWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVycy52aWV3IGFzIHVua25vd24gYXMgRWxlbWVudFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgYVZIRWxlbWVudHMgYXMgVUk1RWxlbWVudCwgMCwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBldmFsdWF0aW5nIERlbGVnYXRlVXRpbC5pc1ZhbHVlSGVscFJlcXVpcmVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0anNvbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHZhbHVlSGVscCA9IGdldFZhbHVlSGVscFRlbXBsYXRlKG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YXJnZXRQYXRoKSwgb1RoaXMpIGFzXG5cdFx0XHR8IFZhbHVlSGVscFxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0aWYgKHZhbHVlSGVscCkge1xuXHRcdFx0Y29uc3Qgc0FnZ3JlZ2F0aW9uTmFtZSA9IFwiZGVwZW5kZW50c1wiO1xuXHRcdFx0Ly9Tb21lIGZpbHRlciBmaWVsZHMgaGF2ZSB0aGUgUGVyc2lzdGVuY2VQcm92aWRlciBhZ2dyZWdhdGlvbiBiZXNpZGVzIHRoZSBGVkggOlxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWVIZWxwKSkge1xuXHRcdFx0XHR2YWx1ZUhlbHAuZm9yRWFjaChmdW5jdGlvbiAoZWx0OiBFbGVtZW50IHwgVUk1RWxlbWVudCkge1xuXHRcdFx0XHRcdGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0XHRcdG9QYXJhbWV0ZXJzLm9Nb2RpZmllci5pbnNlcnRBZ2dyZWdhdGlvbihvUGFyYW1ldGVycy5vQ29udHJvbCwgc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0LCAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgZWx0IGFzIFVJNUVsZW1lbnQsIDAsIGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChvUGFyYW1ldGVycy5vTW9kaWZpZXIpIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub01vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKG9QYXJhbWV0ZXJzLm9Db250cm9sLCBzQWdncmVnYXRpb25OYW1lLCB2YWx1ZUhlbHAsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1BhcmFtZXRlcnMub0NvbnRyb2wuaW5zZXJ0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSwgdmFsdWVIZWxwLCAwLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5hc3luYyBmdW5jdGlvbiBfYWRkWE1MQ3VzdG9tRmlsdGVyRmllbGQoXG5cdG9GaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxVSTVFbGVtZW50IHwgRWxlbWVudCB8IHZvaWQ+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBhRGVwZW5kZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShvTW9kaWZpZXIuZ2V0QWdncmVnYXRpb24ob0ZpbHRlckJhciwgXCJkZXBlbmRlbnRzXCIpKTtcblx0XHRsZXQgaTtcblx0XHRpZiAoYURlcGVuZGVudHMgJiYgYURlcGVuZGVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8PSBhRGVwZW5kZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvRmlsdGVyRmllbGQgPSBhRGVwZW5kZW50c1tpXTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJGaWVsZCAmJiAob0ZpbHRlckZpZWxkIGFzIFVJNUVsZW1lbnQpLmlzQTxNRENGaWx0ZXJGaWVsZD4oXCJzYXAudWkubWRjLkZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldFByb3BlcnR5S2V5KCksXG5cdFx0XHRcdFx0XHRzRmlsdGVyRmllbGRJZCA9IChvRmlsdGVyRmllbGQgYXMgTURDRmlsdGVyRmllbGQpLmdldElkKCk7XG5cdFx0XHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggPT09IHNEYXRhUHJvcGVydHkgJiYgc0ZpbHRlckZpZWxkSWQuaW5kZXhPZihcIkN1c3RvbUZpbHRlckZpZWxkXCIpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0ZpbHRlckZpZWxkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0TG9nLmVycm9yKFwiRmlsdGVyIENhbm5vdCBiZSBhZGRlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdGVtcGxhdGVGaWx0ZXJGaWVsZChcblx0b1NldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0b1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzSW5GaWx0ZXJCYXJJZD86IHN0cmluZyxcblx0cGFnZU1vZGVsPzogSlNPTk1vZGVsXG4pOiBQcm9taXNlPFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50IHwgRWxlbWVudFtdPiB7XG5cdGNvbnN0IG9UaGlzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0aWRQcmVmaXg6IG9QYXJhbWV0ZXJzLnNJZFByZWZpeCxcblx0XHR2aElkUHJlZml4OiBvUGFyYW1ldGVycy5zVmhJZFByZWZpeCxcblx0XHRwcm9wZXJ0eVBhdGg6IG9QYXJhbWV0ZXJzLnNQcm9wZXJ0eU5hbWUsXG5cdFx0bmF2aWdhdGlvblByZWZpeDogb1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXggPyBgLyR7b1BhcmFtZXRlcnMuc05hdmlnYXRpb25QcmVmaXh9YCA6IFwiXCIsXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2U6IG9QYXJhbWV0ZXJzLmJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRzZXR0aW5nczogb1BhcmFtZXRlcnMub1NldHRpbmdzLFxuXHRcdHZpc3VhbEZpbHRlcjogb1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyLFxuXHRcdGVkaXRNb2RlOiBge2ludGVybmFsPi8ke3NJbkZpbHRlckJhcklkfS9maWx0ZXJGaWVsZHMvJHtvUGFyYW1ldGVycy5zUHJvcGVydHlOYW1lfS9lZGl0TW9kZX1gLFxuXHRcdGxhYmVsOiBvUGFyYW1ldGVycy5sYWJlbFxuXHR9KTtcblx0dHJ5IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhcmFtZXRlcnMub01ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCBvVmlzdWFsRmlsdGVyID0gbmV3IFRlbXBsYXRlTW9kZWwob1BhcmFtZXRlcnMudmlzdWFsRmlsdGVyIGFzIG9iamVjdCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gbWVyZ2VPYmplY3RzKHt9LCBvU2V0dGluZ3MsIHtcblx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHR0aGlzOiBvVGhpcy5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlci5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdH0sXG5cdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0dGhpczogb1RoaXMsXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1Zpc3VhbEZpbHRlcixcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBwYWdlTW9kZWxcblx0XHRcdH1cblx0XHR9KSBhcyBQcmVwcm9jZXNzb3JTZXR0aW5ncztcblxuXHRcdHJldHVybiBhd2FpdCBEZWxlZ2F0ZVV0aWwudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXCJzYXAuZmUubWFjcm9zLmludGVybmFsLmZpbHRlckZpZWxkLkZpbHRlckZpZWxkVGVtcGxhdGVcIiwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRpc1hNTDogISFvU2V0dGluZ3MuaXNYTUxcblx0XHR9KTtcblx0fSBmaW5hbGx5IHtcblx0XHRvVGhpcy5kZXN0cm95KCk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX2FkZFByb3BlcnR5SW5mbyhcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0bVByb3BlcnR5QmFnOiB7IG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyOyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB9LFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG5cdHRyeSB7XG5cdFx0Ly8ga2V5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIG5hbWVcblx0XHRjb25zdCBzUHJvcGVydHlJbmZvS2V5ID0gS2V5SGVscGVyLmdldFNlbGVjdGlvbkZpZWxkS2V5RnJvbVBhdGgoc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdHNQcm9wZXJ0eUluZm9OYW1lID0gc1Byb3BlcnR5SW5mb05hbWUucmVwbGFjZShcIipcIiwgXCJcIik7XG5cdFx0aWYgKG1Qcm9wZXJ0eUJhZyAmJiAhbVByb3BlcnR5QmFnLm1vZGlmaWVyKSB7XG5cdFx0XHR0aHJvdyBcIkZpbHRlckJhciBEZWxlZ2F0ZSBtZXRob2QgY2FsbGVkIHdpdGhvdXQgbW9kaWZpZXIuXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RmlsdGVyQmFyRGVsZWdhdGU+KG9QYXJlbnRDb250cm9sLCBcImRlbGVnYXRlXCIpO1xuXHRcdGNvbnN0IGFQcm9wZXJ0eUluZm8gPSBhd2FpdCBtUHJvcGVydHlCYWcubW9kaWZpZXIuZ2V0UHJvcGVydHk8RkVQcm9wZXJ0eUluZm9bXT4ob1BhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb0V4aXN0cyA9IGF3YWl0IEZpbHRlclV0aWxzLl9jaGVja0lmUHJvcGVydHlJbmZvRXhpc3RzKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcubW9kaWZpZXIsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0XHQvL1dlIGRvIG5vdCBnZXQgcHJvcGVydHlJbmZvIGluIGNhc2Ugb2YgdGFibGUgZmlsdGVyc1xuXHRcdGlmIChhUHJvcGVydHlJbmZvICYmICFwcm9wZXJ0eUluZm9FeGlzdHMpIHtcblx0XHRcdGNvbnN0IGhhc1Byb3BlcnR5SW5mbyA9IGFQcm9wZXJ0eUluZm8uc29tZShmdW5jdGlvbiAocHJvcDogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0cmV0dXJuIHByb3Aua2V5ID09PSBzUHJvcGVydHlJbmZvS2V5IHx8IHByb3AubmFtZSA9PT0gc1Byb3BlcnR5SW5mb0tleTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBkZWxlZ2F0ZS5wYXlsb2FkLmVudGl0eVR5cGVQYXRoO1xuXHRcdFx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gRmlsdGVyVXRpbHMuY3JlYXRlQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLFxuXHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0bVByb3BlcnR5QmFnLmFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlckZpZWxkID0gRmlsdGVyVXRpbHMuZ2V0RmlsdGVyRmllbGQoc1Byb3BlcnR5SW5mb05hbWUsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBGaWx0ZXJVdGlscy5idWlsZFByb3BlcnlJbmZvKGZpbHRlckZpZWxkISwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGF3YWl0IF91cGRhdGVQcm9wZXJ0eUluZm8oXG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mbyBhcyBQcm9wZXJ0eUluZm9bXSxcblx0XHRcdFx0XHRtUHJvcGVydHlCYWcsXG5cdFx0XHRcdFx0cHJvcGVydHlJbmZvIGFzIHVua25vd24gYXMgUHJvcGVydHlJbmZvLFxuXHRcdFx0XHRcdG9QYXJlbnRDb250cm9sXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvck1zZykge1xuXHRcdExvZy53YXJuaW5nKGAke29QYXJlbnRDb250cm9sLmdldElkKCl9IDogJHtlcnJvck1zZ31gKTtcblx0fVxufVxuXG5hc3luYyBmdW5jdGlvbiBfdXBkYXRlUHJvcGVydHlJbmZvKFxuXHRwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mb1tdLFxuXHRwcm9wZXJ0eUJhZzogeyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllcjsgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgfSxcblx0ZmlsdGVyRmllbGQ6IFByb3BlcnR5SW5mbyxcblx0cGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0bGV0IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IGF3YWl0IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4oXG5cdFx0cGFyZW50Q29udHJvbCxcblx0XHRcImZlRmlsdGVySW5mb1wiLFxuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyXG5cdCk7XG5cdGlmIChwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIgJiYgcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXJPYmogPSBKU09OLnBhcnNlKHByb3BlcnR5SW5mb0ZvckZpbHRlckJhcikgYXMgUHJvcGVydHlJbmZvW107XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyT2JqLnB1c2goZmlsdGVyRmllbGQpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IEpTT04uc3RyaW5naWZ5KHByb3BlcnR5SW5mb0ZvckZpbHRlckJhck9iaik7XG5cdFx0cHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyID0gcHJvcGVydHlJbmZvRm9yRmlsdGVyQmFyLnJlcGxhY2UoL1xcey9nLCBcIlxcXFx7XCIpO1xuXHRcdHByb3BlcnR5SW5mb0ZvckZpbHRlckJhciA9IHByb3BlcnR5SW5mb0ZvckZpbHRlckJhci5yZXBsYWNlKC9cXH0vZywgXCJcXFxcfVwiKTtcblx0XHRjb25zdCBjdXN0b21EYXRhTm9kZSA9IGF3YWl0IERlbGVnYXRlVXRpbC5yZXRyaWV2ZUN1c3RvbURhdGFOb2RlKHBhcmVudENvbnRyb2wsIFwiZmVGaWx0ZXJJbmZvXCIsIHByb3BlcnR5QmFnLm1vZGlmaWVyKTtcblx0XHRjdXN0b21EYXRhTm9kZVswXS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBwcm9wZXJ0eUluZm9Gb3JGaWx0ZXJCYXIpO1xuXHRcdHByb3BlcnR5QmFnLm1vZGlmaWVyLmluc2VydEFnZ3JlZ2F0aW9uKHBhcmVudENvbnRyb2wsIFwiY3VzdG9tRGF0YVwiLCBjdXN0b21EYXRhTm9kZVswXSwgMCk7XG5cdH1cblxuXHQvLyBDdXN0b20gZGF0YSBpcyBzZXQgdG8gdGhlIHBhcmVudCBjb250cm9sIHRvIHN0b3JlIHRoZSBwcm9wZXJ0eUluZm9cblx0cHJvcGVydHlJbmZvLnB1c2goZmlsdGVyRmllbGQpO1xuXHQvL3JlbW92ZSB1bndhbnRlZCBwcm9wZXJ0eSBmcm9tIHRoZSBwcm9wZXJ0eUluZm9cblx0Y29uc3QgX3Byb3BlcnR5SW5mbyA9IEZpbHRlclV0aWxzLmZvcm1hdFByb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm8gYXMgRkVQcm9wZXJ0eUluZm9bXSk7XG5cdC8vVXBkYXRlIHRoZSBwcm9wZXJ0eUluZm8gaW4gdGhlIHBhcmVudCBjb250cm9sXG5cdHByb3BlcnR5QmFnLm1vZGlmaWVyLnNldFByb3BlcnR5KHBhcmVudENvbnRyb2wsIFwicHJvcGVydHlJbmZvXCIsIF9wcm9wZXJ0eUluZm8pO1xufVxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSBtb2RlIGFuZCBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNldHRpbmdzIG9mIHRoZSBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyB0aGUgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHRoZSBwcm9wZXJ0eSBiYWcgZnJvbSBGbGV4IEFQSVxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLm1vZGlmaWVyIE1vZGlmaWVyIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcudmlldyBJbnN0YW5jZSBvZiB0aGUgdmlld1xuICogQHJldHVybnMgT25jZSByZXNvbHZlZCwgYSBmaWx0ZXIgZmllbGQgZGVmaW5pdGlvbiBpcyByZXR1cm5lZFxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmFkZEl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG1Qcm9wZXJ0eUJhZz86IHsgdmlldzogVmlldzsgbW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXI7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50IH1cbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0aWYgKCFtUHJvcGVydHlCYWcpIHtcblx0XHQvLyBJbnZva2VkIGR1cmluZyBydW50aW1lLlxuXHRcdHJldHVybiBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9hZGRQMTNuSXRlbShzUHJvcGVydHlJbmZvTmFtZSwgb1BhcmVudENvbnRyb2wpO1xuXHR9XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG1vZGVsICYmIG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IGlzWE1MID0gbW9kaWZpZXIgJiYgbW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGNvbnN0IHByb3BlcnR5SW5mb0V4aXN0cyA9IGlzWE1MID8gYXdhaXQgRmlsdGVyVXRpbHMuX2NoZWNrSWZQcm9wZXJ0eUluZm9FeGlzdHMob1BhcmVudENvbnRyb2wsIG1vZGlmaWVyLCBzUHJvcGVydHlJbmZvTmFtZSkgOiB0cnVlO1xuXHRpZiAoaXNYTUwgJiYgIXByb3BlcnR5SW5mb0V4aXN0cykge1xuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHR9XG5cdHJldHVybiBPRGF0YUZpbHRlckJhckRlbGVnYXRlLl9hZGRGbGV4SXRlbShcblx0XHRzUHJvcGVydHlJbmZvTmFtZSxcblx0XHRvUGFyZW50Q29udHJvbCxcblx0XHRvTWV0YU1vZGVsLFxuXHRcdG1vZGlmaWVyLFxuXHRcdG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQsXG5cdFx0bVByb3BlcnR5QmFnLnZpZXdcblx0KTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJlc3BvbnNpYmxlIGZvciByZW1vdmluZyBmaWx0ZXIgZmllbGQgaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIGZyb20gd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBpcyByZW1vdmVkXG4gKiBAcGFyYW0gb0ZpbHRlckZpZWxkUHJvcGVydHkgT2JqZWN0IG9mIHRoZSBmaWx0ZXIgZmllbGQgcHJvcGVydHkgYmVpbmcgcmVtb3ZlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLnJlbW92ZUl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdG9GaWx0ZXJGaWVsZFByb3BlcnR5OiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG4pOiBQcm9taXNlPGJvb2xlYW4gfCBudWxsPiB7XG5cdGxldCBkb1JlbW92ZUl0ZW0gPSB0cnVlO1xuXHRjb25zdCBtb2RpZmllciA9IG1Qcm9wZXJ0eUJhZy5tb2RpZmllcjtcblx0Y29uc3QgaXNYTUwgPSBtb2RpZmllciAmJiBtb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIjtcblx0aWYgKGlzWE1MKSB7XG5cdFx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG1vZGVsICYmIG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHR9XG5cdFx0Y29uc3QgZmlsdGVyRmllbGRQcm9wZXJ0eSA9IGF3YWl0IG1Qcm9wZXJ0eUJhZy5tb2RpZmllci5nZXRQcm9wZXJ0eShvRmlsdGVyRmllbGRQcm9wZXJ0eSwgXCJwcm9wZXJ0eUtleVwiKTtcblxuXHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgZmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuXHR9XG5cdGlmIChcblx0XHR0eXBlb2Ygb0ZpbHRlckZpZWxkUHJvcGVydHkgIT09IFwic3RyaW5nXCIgJiZcblx0XHQob0ZpbHRlckZpZWxkUHJvcGVydHkgYXMgVUk1RWxlbWVudCkuaXNBICYmXG5cdFx0KG9GaWx0ZXJGaWVsZFByb3BlcnR5IGFzIFVJNUVsZW1lbnQpLmlzQShcInNhcC51aS5tZGMuRmlsdGVyRmllbGRcIilcblx0KSB7XG5cdFx0aWYgKChvRmlsdGVyRmllbGRQcm9wZXJ0eSBhcyBVSTVFbGVtZW50KS5kYXRhKFwiaXNTbG90XCIpID09PSBcInRydWVcIiAmJiBtUHJvcGVydHlCYWcpIHtcblx0XHRcdC8vIEluc2VydGluZyBpbnRvIHRoZSBtb2RpZmllciBjcmVhdGVzIGEgY2hhbmdlIGZyb20gZmxleCBhbHNvIGZpbHRlciBpcyBiZWVuIHJlbW92ZWQgaGVuY2UgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBmYWxzZVxuXHRcdFx0bW9kaWZpZXIuaW5zZXJ0QWdncmVnYXRpb24ob1BhcmVudENvbnRyb2wsIFwiZGVwZW5kZW50c1wiLCBvRmlsdGVyRmllbGRQcm9wZXJ0eSk7XG5cdFx0XHRkb1JlbW92ZUl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb1JlbW92ZUl0ZW0pO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGZpbHRlciBmaWVsZCBjb25kaXRpb24gaW4gc3RhbmRhbG9uZSAvIHBlcnNvbmFsaXphdGlvbiBmaWx0ZXIgYmFyLlxuICogQHBhcmFtIG9QYXJlbnRDb250cm9sIFBhcmVudCBjb250cm9sIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgYWRkZWRcbiAqIEBwYXJhbSBzUHJvcGVydHlJbmZvTmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eSBiZWluZyBhZGRlZCBhcyBmaWx0ZXIgZmllbGRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcgSW5zdGFuY2Ugb2YgcHJvcGVydHkgYmFnIGZyb20gRmxleCBBUElcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50IEFwcENvbXBvbmVudFxuICogQHBhcmFtIG1Qcm9wZXJ0eUJhZy5tb2RpZmllciBNb2RpZmllciBmcm9tIEZsZXggQVBJXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmFkZENvbmRpdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIChcblx0b1BhcmVudENvbnRyb2w6IEZpbHRlckJhcixcblx0c1Byb3BlcnR5SW5mb05hbWU6IHN0cmluZyxcblx0bVByb3BlcnR5QmFnOiB7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyBtb2RpZmllcjogQmFzZVRyZWVNb2RpZmllciB9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBtb2RlbCA9IG1Qcm9wZXJ0eUJhZyAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50ICYmIG1Qcm9wZXJ0eUJhZy5hcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0aWYgKCFvTWV0YU1vZGVsKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHRcdH1cblx0XHRhd2FpdCBfYWRkUHJvcGVydHlJbmZvKG9QYXJlbnRDb250cm9sLCBtUHJvcGVydHlCYWcsIG9NZXRhTW9kZWwsIHNQcm9wZXJ0eUluZm9OYW1lKTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgcmVtb3ZpbmcgZmlsdGVyIGZpZWxkIGluIHN0YW5kYWxvbmUgLyBwZXJzb25hbGl6YXRpb24gZmlsdGVyIGJhci5cbiAqIEBwYXJhbSBvUGFyZW50Q29udHJvbCBQYXJlbnQgY29udHJvbCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRoZSBmaWx0ZXIgZmllbGQgaXMgcmVtb3ZlZFxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIE5hbWUgb2YgdGhlIHByb3BlcnR5IGJlaW5nIHJlbW92ZWQgYXMgZmlsdGVyIGZpZWxkXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnIEluc3RhbmNlIG9mIHByb3BlcnR5IGJhZyBmcm9tIEZsZXggQVBJXG4gKiBAcGFyYW0gbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUHJvcGVydHlCYWcubW9kaWZpZXIgTW9kaWZpZXIgZnJvbSBGbGV4IEFQSVxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHByb21pc2VcbiAqL1xuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5yZW1vdmVDb25kaXRpb24gPSBhc3luYyBmdW5jdGlvbiAoXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdHNQcm9wZXJ0eUluZm9OYW1lOiBzdHJpbmcsXG5cdG1Qcm9wZXJ0eUJhZzoge1xuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRcdG1vZGlmaWVyOiBCYXNlVHJlZU1vZGlmaWVyO1xuXHR9XG4pOiBQcm9taXNlPHZvaWQgfCBudWxsPiB7XG5cdGNvbnN0IG1vZGlmaWVyID0gbVByb3BlcnR5QmFnLm1vZGlmaWVyO1xuXHRjb25zdCBpc1hNTCA9IG1vZGlmaWVyICYmIG1vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiO1xuXHRpZiAoaXNYTUwpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUluZm9Gcm9tQ0QgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KFxuXHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcInNhcF9mZV9GaWx0ZXJCYXJEZWxlZ2F0ZV9wcm9wZXJ0eUluZm9NYXBcIixcblx0XHRcdG1vZGlmaWVyXG5cdFx0KTtcblx0XHRpZiAoIXByb3BlcnR5SW5mb0Zyb21DRCkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBtUHJvcGVydHlCYWcgJiYgbVByb3BlcnR5QmFnLmFwcENvbXBvbmVudCAmJiBtUHJvcGVydHlCYWcuYXBwQ29tcG9uZW50LmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gbW9kZWwgJiYgbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRpZiAoIW9NZXRhTW9kZWwpIHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0XHRcdH1cblx0XHRcdGF3YWl0IF9hZGRQcm9wZXJ0eUluZm8ob1BhcmVudENvbnRyb2wsIG1Qcm9wZXJ0eUJhZywgb01ldGFNb2RlbCwgc1Byb3BlcnR5SW5mb05hbWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuLyoqXG4gKiBDbGVhcnMgYWxsIGlucHV0IHZhbHVlcyBvZiB2aXNpYmxlIGZpbHRlciBmaWVsZHMgaW4gdGhlIGZpbHRlciBiYXIuXG4gKiBAcGFyYW0gb0ZpbHRlckNvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIEZpbHRlckJhciBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgcHJvbWlzZVxuICovXG5PRGF0YUZpbHRlckJhckRlbGVnYXRlLmNsZWFyRmlsdGVycyA9IGFzeW5jIGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogRmlsdGVyQmFyKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IGZpbHRlckJhckFQSSA9IG9GaWx0ZXJDb250cm9sLmdldFBhcmVudCgpO1xuXHRyZXR1cm4gU3RhdGVIZWxwZXIuY2xlYXJGaWx0ZXJWYWx1ZXMoZmlsdGVyQmFyQVBJIGFzIE1hY3JvQVBJKTtcbn07XG4vKipcbiAqIENyZWF0ZXMgdGhlIGZpbHRlciBmaWVsZCBpbiB0aGUgdGFibGUgYWRhcHRhdGlvbiBvZiB0aGUgRmlsdGVyQmFyLlxuICogQHBhcmFtIHNQcm9wZXJ0eUluZm9OYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSBmb3Igd2hpY2ggdGhlIGZpbHRlciBmaWVsZCBuZWVkcyB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0gb1BhcmVudENvbnRyb2wgSW5zdGFuY2Ugb2YgdGhlIHBhcmVudCBjb250cm9sXG4gKiBAcmV0dXJucyBPbmNlIHJlc29sdmVkLCBhIGZpbHRlciBmaWVsZCBkZWZpbml0aW9uIGlzIHJldHVybmVkXG4gKi9cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZFAxM25JdGVtID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRzUHJvcGVydHlJbmZvTmFtZTogc3RyaW5nLFxuXHRvUGFyZW50Q29udHJvbDogRmlsdGVyQmFyXG4pOiBQcm9taXNlPE51bGxhYmxlTW9kaWZpZXJFbGVtZW50PiB7XG5cdHJldHVybiBEZWxlZ2F0ZVV0aWwuZmV0Y2hNb2RlbChvUGFyZW50Q29udHJvbClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAob01vZGVsOiBNb2RlbCkge1xuXHRcdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2FkZEZsZXhJdGVtKFxuXHRcdFx0XHRzUHJvcGVydHlJbmZvTmFtZSxcblx0XHRcdFx0b1BhcmVudENvbnRyb2wsXG5cdFx0XHRcdG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHQpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIk1vZGVsIGNvdWxkIG5vdCBiZSByZXNvbHZlZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0pO1xufTtcbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzRm9yRW50aXR5ID0gZnVuY3Rpb24gKFxuXHRzRW50aXR5VHlwZVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9GaWx0ZXJDb250cm9sOiBJRmlsdGVyQ29udHJvbFxuKTogUHJvcGVydHlJbmZvW10ge1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IGluY2x1ZGVIaWRkZW4gPSBvRmlsdGVyQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLnZhbHVlaGVscC5GaWx0ZXJCYXJcIikgPyB0cnVlIDogdW5kZWZpbmVkO1xuXHRpZiAoIW9GaWx0ZXJDb250cm9sIHx8ICFvRW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IEZpbHRlclV0aWxzLmNyZWF0ZUNvbnZlcnRlckNvbnRleHQob0ZpbHRlckNvbnRyb2wsIHNFbnRpdHlUeXBlUGF0aCk7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzRW50aXR5VHlwZVBhdGgpO1xuXG5cdGNvbnN0IG1GaWx0ZXJGaWVsZHMgPSBGaWx0ZXJVdGlscy5nZXRDb252ZXJ0ZWRGaWx0ZXJGaWVsZHMoXG5cdFx0b0ZpbHRlckNvbnRyb2wsXG5cdFx0c0VudGl0eVR5cGVQYXRoLFxuXHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0b01ldGFNb2RlbCxcblx0XHRDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob0ZpbHRlckNvbnRyb2wpXG5cdCk7XG5cdGxldCBhRmV0Y2hlZFByb3BlcnRpZXM6IEZFUHJvcGVydHlJbmZvW10gPSBbXTtcblx0bUZpbHRlckZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9GaWx0ZXJGaWVsZEluZm8uYW5ub3RhdGlvblBhdGg7XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aCAmJiAhb0ZpbHRlckZpZWxkSW5mby50ZW1wbGF0ZSkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvQ29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLnJlc29sdmVQYXRoPFByb3BlcnR5PihzQW5ub3RhdGlvblBhdGgpLnRhcmdldDtcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVByZWZpeCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTWV0YU1vZGVsLCBzQW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gc0Fubm90YXRpb25QYXRoLnJlcGxhY2UoYCR7c1RhcmdldFByb3BlcnR5UHJlZml4fS9gLCBcIlwiKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBvQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uU2VsZWN0aW9uRmllbGRzO1xuXHRcdFx0Y29uc3QgZmlsdGVyRmFjZXRzID0gZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0XHRcdGlmIChcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0T0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJBZGFwdGFibGUob0ZpbHRlckZpZWxkSW5mbywgb1Byb3BlcnR5QW5ub3RhdGlvbnMsIHNlbGVjdGlvbkZpZWxkcywgZmlsdGVyRmFjZXRzKSAmJlxuXHRcdFx0XHRpc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzVGFyZ2V0UHJvcGVydHlQcmVmaXgsIF9nZXRQcm9wZXJ0eVBhdGgoc1Byb3BlcnR5KSwgdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChvRmlsdGVyRmllbGRJbmZvIGFzIFByb3BlcnR5SW5mbyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vQ3VzdG9tIEZpbHRlcnNcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9GaWx0ZXJGaWVsZEluZm8gYXMgUHJvcGVydHlJbmZvKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGFQYXJhbWV0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IHByb2Nlc3NlZEZpZWxkcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoYUZldGNoZWRQcm9wZXJ0aWVzIGFzIEZpbHRlckZpZWxkW10sIG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgcHJvY2Vzc2VkRmllbGRzS2V5czogc3RyaW5nW10gPSBbXTtcblx0cHJvY2Vzc2VkRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wczogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHRpZiAob1Byb3BzLmtleSkge1xuXHRcdFx0cHJvY2Vzc2VkRmllbGRzS2V5cy5wdXNoKG9Qcm9wcy5rZXkpO1xuXHRcdH1cblx0fSk7XG5cblx0YUZldGNoZWRQcm9wZXJ0aWVzID0gYUZldGNoZWRQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAob1Byb3A6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0cmV0dXJuIHByb2Nlc3NlZEZpZWxkc0tleXMuaW5jbHVkZXMob1Byb3Aua2V5ISk7XG5cdH0pO1xuXHRjb25zdCBkYXRhTW9kZWwgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlTZXRQYXRoKSk7XG5cdGNvbnN0IG9GUiA9IEZpbHRlclJlc3RyaWN0aW9ucy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbChkYXRhTW9kZWwgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KSxcblx0XHRtQWxsb3dlZEV4cHJlc3Npb25zID0gb0ZSLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcblx0Ly9PYmplY3Qua2V5cyhwcm9jZXNzZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKHNGaWx0ZXJGaWVsZEtleTogc3RyaW5nKSB7XG5cdHByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcCwgaUZpbHRlckZpZWxkSW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IG9TZWxGaWVsZCA9IGFGZXRjaGVkUHJvcGVydGllc1tpRmlsdGVyRmllbGRJbmRleF07XG5cdFx0aWYgKCFvU2VsRmllbGQgfHwgIW9TZWxGaWVsZC5jb25kaXRpb25QYXRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBfZ2V0UHJvcGVydHlQYXRoKG9TZWxGaWVsZC5jb25kaXRpb25QYXRoKTtcblx0XHQvL2ZldGNoQmFzaWNcblx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdGdyb3VwOiBvU2VsRmllbGQuZ3JvdXAsXG5cdFx0XHRncm91cExhYmVsOiBvU2VsRmllbGQuZ3JvdXBMYWJlbCxcblx0XHRcdHBhdGg6IG9TZWxGaWVsZC5jb25kaXRpb25QYXRoLFxuXHRcdFx0dG9vbHRpcDogbnVsbCxcblx0XHRcdHJlbW92ZUZyb21BcHBTdGF0ZTogZmFsc2UsXG5cdFx0XHRoYXNWYWx1ZUhlbHA6IGZhbHNlXG5cdFx0fSk7XG5cblx0XHQvL2ZldGNoUHJvcEluZm9cblx0XHRpZiAob1NlbEZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvU2VsRmllbGQuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRjb25zdCBvUHJvcGVydHkgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzQW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NBbm5vdGF0aW9uUGF0aH1AYCksXG5cdFx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBbm5vdGF0aW9uUGF0aCk7XG5cblx0XHRcdGNvbnN0IGJSZW1vdmVGcm9tQXBwU3RhdGUgPVxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdIHx8XG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdO1xuXG5cdFx0XHRjb25zdCBzVGFyZ2V0UHJvcGVydHlQcmVmaXggPSBDb21tb25IZWxwZXIuZ2V0TG9jYXRpb25Gb3JQcm9wZXJ0eVBhdGgob01ldGFNb2RlbCwgb1NlbEZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IHNBbm5vdGF0aW9uUGF0aC5yZXBsYWNlKGAke3NUYXJnZXRQcm9wZXJ0eVByZWZpeH0vYCwgXCJcIik7XG5cdFx0XHRsZXQgb0ZpbHRlckRlZmF1bHRWYWx1ZUFubm90YXRpb247XG5cdFx0XHRsZXQgb0ZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGlmIChvUHJvcGVydHlDb250ZXh0ICYmIGlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNUYXJnZXRQcm9wZXJ0eVByZWZpeCwgX2dldFByb3BlcnR5UGF0aChzUHJvcGVydHkpLCB0cnVlKSkge1xuXHRcdFx0XHRvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIl07XG5cdFx0XHRcdGlmIChvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdG9GaWx0ZXJEZWZhdWx0VmFsdWUgPSBvRmlsdGVyRGVmYXVsdFZhbHVlQW5ub3RhdGlvbltgJCR7Z2V0TW9kZWxUeXBlKG9Qcm9wZXJ0eS4kVHlwZSl9YF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdFx0XHR0b29sdGlwOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVpY2tJbmZvXCJdIHx8IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRyZW1vdmVGcm9tQXBwU3RhdGU6IGJSZW1vdmVGcm9tQXBwU3RhdGUsXG5cdFx0XHRcdFx0aGFzVmFsdWVIZWxwOiBoYXNWYWx1ZUhlbHAob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSwgeyBjb250ZXh0OiBvUHJvcGVydHlDb250ZXh0IH0pLFxuXHRcdFx0XHRcdGRlZmF1bHRGaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyRGVmYXVsdFZhbHVlXG5cdFx0XHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFBhdGg6IG9TZWxGaWVsZC5jb25kaXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlczogW29GaWx0ZXJEZWZhdWx0VmFsdWVdXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ICBdXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvL2Jhc2VcblxuXHRcdGlmIChvUHJvcCkge1xuXHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0gJiYgbUFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHlQYXRoXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9Qcm9wLmZpbHRlckV4cHJlc3Npb24gPSBDb21tb25VdGlscy5nZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKG1BbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b1Byb3AuZmlsdGVyRXhwcmVzc2lvbiA9IFwiYXV0b1wiO1xuXHRcdFx0fVxuXG5cdFx0XHRvUHJvcCA9IE9iamVjdC5hc3NpZ24ob1Byb3AsIHtcblx0XHRcdFx0dmlzaWJsZTogb1NlbEZpZWxkLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCJcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHByb2Nlc3NlZEZpZWxkc1tpRmlsdGVyRmllbGRJbmRleF0gPSBvUHJvcDtcblx0fSk7XG5cdHByb2Nlc3NlZEZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wSW5mbzogRkVQcm9wZXJ0eUluZm8pIHtcblx0XHQvLyBrZXkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgbmFtZVxuXHRcdHByb3BJbmZvLmtleSA9IHByb3BJbmZvLm5hbWU7XG5cdFx0aWYgKHByb3BJbmZvLnBhdGggPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRwcm9wSW5mby5sYWJlbCA9IGdldFJlc291cmNlTW9kZWwob0ZpbHRlckNvbnRyb2wpLmdldFRleHQoXCJGSUxURVJCQVJfRURJVElOR19TVEFUVVNcIik7XG5cdFx0fVxuXHRcdHByb3BJbmZvLnR5cGVDb25maWcgPSBUeXBlTWFwLmdldFR5cGVDb25maWcocHJvcEluZm8uZGF0YVR5cGUsIHByb3BJbmZvLmZvcm1hdE9wdGlvbnMsIHByb3BJbmZvLmNvbnN0cmFpbnRzKTtcblx0XHRwcm9wSW5mby5sYWJlbCA9IGdldExvY2FsaXplZFRleHQocHJvcEluZm8ubGFiZWwhLCBvRmlsdGVyQ29udHJvbCkgfHwgXCJcIjtcblx0XHRpZiAocHJvcEluZm8uaXNQYXJhbWV0ZXIpIHtcblx0XHRcdGFQYXJhbWV0ZXJGaWVsZHMucHVzaChwcm9wSW5mby5uYW1lKTtcblx0XHR9XG5cdH0pO1xuXG5cdGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NlZEZpZWxkcztcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEob0ZpbHRlckNvbnRyb2wsIFwicGFyYW1ldGVyc1wiLCBhUGFyYW1ldGVyRmllbGRzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcblxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzIGFzIFByb3BlcnR5SW5mb1tdO1xufTtcblxuZnVuY3Rpb24gZ2V0TGluZUl0ZW1RdWFsaWZpZXJGcm9tVGFibGUob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKG9Db250cm9sLmlzQTxFbmhhbmNlV2l0aFVJNTxUYWJsZUFQST4+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdGNvbnN0IGFubm90YXRpb25QYXRocyA9IG9Db250cm9sLmdldE1ldGFQYXRoKCkuc3BsaXQoXCIjXCIpWzBdLnNwbGl0KFwiL1wiKTtcblx0XHRzd2l0Y2ggKGFubm90YXRpb25QYXRoc1thbm5vdGF0aW9uUGF0aHMubGVuZ3RoIC0gMV0pIHtcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnR9YDpcblx0XHRcdFx0cmV0dXJuIG9NZXRhTW9kZWxcblx0XHRcdFx0XHQuZ2V0T2JqZWN0KG9Db250cm9sLmdldE1ldGFQYXRoKCkpXG5cdFx0XHRcdFx0LlZpc3VhbGl6YXRpb25zPy5maW5kKCh2aXN1YWxpemF0aW9uOiB7ICRBbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0pID0+XG5cdFx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YClcblx0XHRcdFx0XHQpLiRBbm5vdGF0aW9uUGF0aDtcblx0XHRcdGNhc2UgYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA6XG5cdFx0XHRcdGNvbnN0IG1ldGFQYXRocyA9IG9Db250cm9sLmdldE1ldGFQYXRoKCkuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRyZXR1cm4gbWV0YVBhdGhzW21ldGFQYXRocy5sZW5ndGggLSAxXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJBZGFwdGFibGUgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQsXG5cdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5LFxuXHRzZWxlY3Rpb25GaWVsZHM/OiBTZWxlY3Rpb25GaWVsZHMsXG5cdGZpbHRlckZhY2V0cz86IEZpbHRlckZhY2V0c1xuKTogYm9vbGVhbiB7XG5cdGxldCBpc0luRmlsdGVyRmFjZXRzOiBib29sZWFuO1xuXHRjb25zdCBpc1NlbGVjdGlvbkZpZWxkID0gc2VsZWN0aW9uRmllbGRzID8gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5faXNGaWx0ZXJJblNlbGVjdGlvbkZpZWxkcyhzZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbykgOiBmYWxzZTtcblx0aWYgKGZpbHRlckZhY2V0cykge1xuXHRcdGlzSW5GaWx0ZXJGYWNldHMgPSBmaWx0ZXJGYWNldHMuc29tZShmdW5jdGlvbiAoZmlsdGVyRmFjZXQ6IFJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwID0gZmlsdGVyRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0cmV0dXJuIGZpZWxkR3JvdXA/LkRhdGEuc29tZShmdW5jdGlvbiAoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdFx0XHRcdC8vIHdlIGV4cGVjdCBkYXRhRmllbGQgdG8gYmUgRGF0YUZpZWxkVHlwZXMgKGhhdmluZyBhIFZhbHVlKSBpbnNpZGUgRmllbGRHcm91cHMgaW5zaWRlIEZpbHRlckZhY2V0c1xuXHRcdFx0XHRpZiAoKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuVmFsdWUucGF0aCA9PT0gZmlsdGVyRmllbGRJbmZvLmtleSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGRhdGFGaWVsZCB0eXBlcyBoYXZpbmcgbm8gVmFsdWUgKERhdGFGaWVsZEZvckFubm90YXRpb25UeXBlcywgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcywgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcyksIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2ssIGJ1dCB0aGlzIHNob3VsZCBub3Qgb2NjdXIgYW55d2F5XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlzSW5GaWx0ZXJGYWNldHMgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gaXNTZWxlY3Rpb25GaWVsZCB8fCBpc0luRmlsdGVyRmFjZXRzIHx8ICFwcm9wZXJ0eUFubm90YXRpb25zLmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlbjtcbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX2lzRmlsdGVySW5TZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoc2VsZWN0aW9uRmllbGRzOiBTZWxlY3Rpb25GaWVsZHMsIGZpbHRlckZpZWxkSW5mbzogRmlsdGVyRmllbGQpOiBib29sZWFuIHtcblx0Y29uc3QgZmlsdGVyRmllbGRLZXkgPSBmaWx0ZXJGaWVsZEluZm8ua2V5Py5pbmRleE9mKFwiOjpcIikgPiAwID8gZmlsdGVyRmllbGRJbmZvLmtleT8ucmVwbGFjZShcIjo6XCIsIFwiL1wiKSA6IGZpbHRlckZpZWxkSW5mby5rZXk7XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHMuc29tZShmdW5jdGlvbiAoc2VsZWN0aW9uRmllbGQ6IEFubm90YXRpb25TZWxlY3Rpb25GaWVsZCkge1xuXHRcdGlmIChzZWxlY3Rpb25GaWVsZC52YWx1ZSA9PT0gZmlsdGVyRmllbGRLZXkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fYWRkRmxleEl0ZW0gPSBhc3luYyBmdW5jdGlvbiAoXG5cdHNGbGV4UHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdG9QYXJlbnRDb250cm9sOiBGaWx0ZXJCYXIsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTW9kaWZpZXI6IEJhc2VUcmVlTW9kaWZpZXIgfCB1bmRlZmluZWQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCB8IHVuZGVmaW5lZCxcblx0dmlldz86IFZpZXcgfCB1bmRlZmluZWRcbik6IFByb21pc2U8TnVsbGFibGVNb2RpZmllckVsZW1lbnQ+IHtcblx0bGV0IHByb3BlcnR5SW5mb3NGcm9tRmlsdGVyQmFyOiBQcm9wZXJ0eUluZm9bXSA9IFtdO1xuXHRjb25zdCBiSXNYTUwgPSAhIW9Nb2RpZmllciAmJiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCI7XG5cdGlmIChiSXNYTUwpIHtcblx0XHRjb25zdCBjdXN0b21EYXRhVmFsdWUgPSBhd2FpdCBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcImZlRmlsdGVySW5mb1wiLCBvTW9kaWZpZXIpO1xuXHRcdGlmIChjdXN0b21EYXRhVmFsdWUpIHtcblx0XHRcdHByb3BlcnR5SW5mb3NGcm9tRmlsdGVyQmFyID0gSlNPTi5wYXJzZShjdXN0b21EYXRhVmFsdWUpIGFzIFByb3BlcnR5SW5mb1tdOyAvLyByZXRyaWV2ZSBwcmUtZmV0Y2hlZCBmaWx0ZXIgaW5mbyBmcm9tIGN1c3RvbSBkYXRhLCByZXF1aXJlZCBkdXJpbmcgdGVtcGxhdGluZ1xuXHRcdH1cblx0fVxuXHRjb25zdCBzRmlsdGVyQmFySWQgPSBvTW9kaWZpZXIgPyBvTW9kaWZpZXIuZ2V0SWQob1BhcmVudENvbnRyb2wpIDogb1BhcmVudENvbnRyb2wuZ2V0SWQoKSxcblx0XHRzSWRQcmVmaXggPSBvTW9kaWZpZXIgPyBcIlwiIDogXCJBZGFwdGF0aW9uXCIsXG5cdFx0YVNlbGVjdGlvbkZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhcblx0XHRcdG9QYXJlbnRDb250cm9sIGFzIHVua25vd24gYXMgSUZpbHRlckNvbnRyb2wsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCxcblx0XHRcdG9Nb2RpZmllcixcblx0XHRcdG9Nb2RpZmllciA/IHVuZGVmaW5lZCA6IGdldExpbmVJdGVtUXVhbGlmaWVyRnJvbVRhYmxlKG9QYXJlbnRDb250cm9sLmdldFBhcmVudCgpISwgb01ldGFNb2RlbCksXG5cdFx0XHRwcm9wZXJ0eUluZm9zRnJvbUZpbHRlckJhclxuXHRcdCksXG5cdFx0b1NlbGVjdGlvbkZpZWxkID0gT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5fZmluZFNlbGVjdGlvbkZpZWxkKGFTZWxlY3Rpb25GaWVsZHMsIHNGbGV4UHJvcGVydHlOYW1lKSxcblx0XHRzUHJvcGVydHlQYXRoID0gX2dldFByb3BlcnR5UGF0aChzRmxleFByb3BlcnR5TmFtZSk7XG5cblx0aWYgKHNGbGV4UHJvcGVydHlOYW1lID09PSBFRElUX1NUQVRFX1BST1BFUlRZX05BTUUpIHtcblx0XHRyZXR1cm4gX3RlbXBsYXRlRWRpdFN0YXRlKF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fUZpbHRlckZpZWxkYCksIG9NZXRhTW9kZWwsIG9Nb2RpZmllcik7XG5cdH0gZWxzZSBpZiAoc0ZsZXhQcm9wZXJ0eU5hbWUgPT09IFNFQVJDSF9QUk9QRVJUWV9OQU1FKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fSBlbHNlIGlmIChvU2VsZWN0aW9uRmllbGQ/LnRlbXBsYXRlKSB7XG5cdFx0cmV0dXJuIE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuX3RlbXBsYXRlQ3VzdG9tRmlsdGVyKFxuXHRcdFx0b1BhcmVudENvbnRyb2wgYXMgdW5rbm93biBhcyBJRmlsdGVyQ29udHJvbCxcblx0XHRcdF9nZW5lcmF0ZUlkUHJlZml4KHNGaWx0ZXJCYXJJZCwgYCR7c0lkUHJlZml4fWApLFxuXHRcdFx0b1NlbGVjdGlvbkZpZWxkLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9Nb2RpZmllciFcblx0XHQpO1xuXHR9XG5cblx0aWYgKG9TZWxlY3Rpb25GaWVsZD8udHlwZSA9PT0gXCJTbG90XCIgJiYgb01vZGlmaWVyKSB7XG5cdFx0cmV0dXJuIF9hZGRYTUxDdXN0b21GaWx0ZXJGaWVsZChvUGFyZW50Q29udHJvbCBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sLCBvTW9kaWZpZXIsIHNQcm9wZXJ0eVBhdGgpO1xuXHR9XG5cblx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRsZXQgc0VudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGxldCBzVXNlU2VtYW50aWNEYXRlUmFuZ2U7XG5cdGxldCBvU2V0dGluZ3M6IHtcblx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRcdFx0cHJvcGVydHk6IENvbnRleHQ7XG5cdFx0fTtcblx0XHRtb2RlbHM6IHtcblx0XHRcdGNvbnRleHRQYXRoOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdHByb3BlcnR5PzogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XHRtZXRhUGF0aD86IE9EYXRhTWV0YU1vZGVsO1xuXHRcdH07XG5cdFx0aXNYTUw6IGJvb2xlYW47XG5cdH07XG5cdGxldCBzQmluZGluZ1BhdGg7XG5cdGxldCBvUGFyYW1ldGVyczoge1xuXHRcdG1ldGFQYXRoOiBzdHJpbmc7XG5cdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXHRcdHNCaW5kaW5nUGF0aDogc3RyaW5nO1xuXHRcdHNWYWx1ZUhlbHBUeXBlOiBzdHJpbmc7XG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0c0lkUHJlZml4OiBzdHJpbmc7XG5cdFx0b1NldHRpbmdzOiB1bmtub3duO1xuXHRcdHNWaElkUHJlZml4OiBzdHJpbmc7XG5cdFx0c05hdmlnYXRpb25QcmVmaXg/OiBzdHJpbmc7XG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuO1xuXHRcdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXI7XG5cdFx0b0NvbnRyb2w6IFVJNUVsZW1lbnQ7XG5cdFx0dmlzdWFsRmlsdGVyPzogdW5rbm93bjtcblx0XHR2aWV3PzogVmlldztcblx0XHRsYWJlbD86IHN0cmluZztcblx0fTtcblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAob1NlbGVjdGlvbkZpZWxkPy5pc1BhcmFtZXRlcikge1xuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvU2VsZWN0aW9uRmllbGQuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGguc3Vic3RyaW5nKDAsIHNBbm5vdGF0aW9uUGF0aC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcImVudGl0eVR5cGVcIiwgb01vZGlmaWVyKTtcblx0XHR9KVxuXHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChzUmV0cmlldmVkRW50aXR5VHlwZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0c0VudGl0eVR5cGVQYXRoID0gc1JldHJpZXZlZEVudGl0eVR5cGVQYXRoITtcblx0XHRcdHJldHVybiBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YVdpdGhNb2RpZmllcjxzdHJpbmc+KG9QYXJlbnRDb250cm9sLCBcInVzZVNlbWFudGljRGF0ZVJhbmdlXCIsIG9Nb2RpZmllcik7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoc1JldHJpZXZlZFVzZVNlbWFudGljRGF0ZVJhbmdlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdHNVc2VTZW1hbnRpY0RhdGVSYW5nZSA9IHNSZXRyaWV2ZWRVc2VTZW1hbnRpY0RhdGVSYW5nZTtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCArIHNQcm9wZXJ0eVBhdGgpITtcblx0XHRcdGxldCBzSW5GaWx0ZXJCYXJJZCA9IG9Nb2RpZmllciA/IG9Nb2RpZmllci5nZXRJZChvUGFyZW50Q29udHJvbCkgOiBvUGFyZW50Q29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWYgKHNJbkZpbHRlckJhcklkLmVuZHNXaXRoKFwiLWNvbnRlbnRcIikpIHtcblx0XHRcdFx0Ly8gLWNvbnRlbnQgaXMgb25seSBhZGRlZCB3aGVuIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGRpcmVjdGx5IGluIHRoZSBmaWx0ZXIgYmFyXG5cdFx0XHRcdHNJbkZpbHRlckJhcklkID0gc0luRmlsdGVyQmFySWQuc3Vic3RyaW5nKDAsIHNJbkZpbHRlckJhcklkLmxhc3RJbmRleE9mKFwiLWNvbnRlbnRcIikpO1xuXHRcdFx0XHQvLyBCeSB1c2luZyB0aGUgaWQgb2YgdGhlIHBhcmVudCBjb250cm9sLCB3ZSBjYW4gZ2V0IHRoZSBjb3JyZWN0IGlkUHJlZml4IGZvciB0aGUgdmFsdWUgaGVscFxuXHRcdFx0fVxuXHRcdFx0b1NldHRpbmdzID0ge1xuXHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5VHlwZVBhdGgpISxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb1Byb3BlcnR5Q29udGV4dFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eTogb01ldGFNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHR9O1xuXHRcdFx0c0JpbmRpbmdQYXRoID0gYC8ke01vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoc0VudGl0eVR5cGVQYXRoKVxuXHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdC5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpXG5cdFx0XHRcdC5qb2luKFwiL1wiKX1gO1xuXHRcdFx0b1BhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG1ldGFQYXRoOiBvUHJvcGVydHlDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0c1Byb3BlcnR5TmFtZTogc1Byb3BlcnR5UGF0aCxcblx0XHRcdFx0c0JpbmRpbmdQYXRoOiBzQmluZGluZ1BhdGgsXG5cdFx0XHRcdHNWYWx1ZUhlbHBUeXBlOiBzSWRQcmVmaXggKyBWQUxVRV9IRUxQX1RZUEUsXG5cdFx0XHRcdG9Db250cm9sOiBvUGFyZW50Q29udHJvbCxcblx0XHRcdFx0b01ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0b01vZGlmaWVyOiBvTW9kaWZpZXIsXG5cdFx0XHRcdHNJZFByZWZpeDogX2dlbmVyYXRlSWRQcmVmaXgoc0luRmlsdGVyQmFySWQsIGAke3NJZFByZWZpeH1GaWx0ZXJGaWVsZGAsIHNOYXZpZ2F0aW9uUGF0aCksXG5cdFx0XHRcdHNWaElkUHJlZml4OiBfZ2VuZXJhdGVJZFByZWZpeChzSW5GaWx0ZXJCYXJJZCwgc0lkUHJlZml4ICsgVkFMVUVfSEVMUF9UWVBFKSxcblx0XHRcdFx0c05hdmlnYXRpb25QcmVmaXg6IHNOYXZpZ2F0aW9uUGF0aCxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBzVXNlU2VtYW50aWNEYXRlUmFuZ2UgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRvU2V0dGluZ3M6IG9TZWxlY3Rpb25GaWVsZD8uc2V0dGluZ3MgPz8ge30sXG5cdFx0XHRcdHZpc3VhbEZpbHRlcjogb1NlbGVjdGlvbkZpZWxkPy52aXN1YWxGaWx0ZXIsXG5cdFx0XHRcdHZpZXcsXG5cdFx0XHRcdGxhYmVsOiBvU2VsZWN0aW9uRmllbGQ/LmxhYmVsXG5cdFx0XHR9O1xuXG5cdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmRvZXNWYWx1ZUhlbHBFeGlzdChvUGFyYW1ldGVycyk7XG5cdFx0fSlcblx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoYlZhbHVlSGVscEV4aXN0czogYm9vbGVhbikge1xuXHRcdFx0aWYgKCFiVmFsdWVIZWxwRXhpc3RzKSB7XG5cdFx0XHRcdHJldHVybiBfdGVtcGxhdGVWYWx1ZUhlbHAoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlUeXBlUGF0aCkhLFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5wcm9wZXJ0eVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg6IG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRpc1hNTDogYklzWE1MXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhV2l0aE1vZGlmaWVyPHN0cmluZz4ob1BhcmVudENvbnRyb2wsIFwibG9jYWxJZFwiLCBvTW9kaWZpZXIpO1xuXHRcdH0pXG5cdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKGxvY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IHBhZ2VNb2RlbDtcblx0XHRcdGlmIChvUGFyYW1ldGVycy52aXN1YWxGaWx0ZXIpIHtcblx0XHRcdFx0Ly9OZWVkIHRvIHNldCB0aGUgY29udmVydGVyY29udGV4dCBhcyBwYWdlTW9kZWwgaW4gc2V0dGluZ3MgZm9yIEJ1aWxkaW5nQmxvY2sgMi4wXG5cdFx0XHRcdHBhZ2VNb2RlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcob1BhcmVudENvbnRyb2wpLmdldENvbnRyb2xsZXIoKS5fZ2V0UGFnZU1vZGVsKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX3RlbXBsYXRlRmlsdGVyRmllbGQob1NldHRpbmdzLCBvUGFyYW1ldGVycywgbG9jYWxJZCwgcGFnZU1vZGVsKTtcblx0XHR9KTtcbn07XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQpOiBudWxsIHwgUHJvcGVydHlJbmZvW10gfCB1bmRlZmluZWQge1xuXHQvLyBwcm9wZXJ0aWVzIGFyZSBub3QgY2FjaGVkIGR1cmluZyB0ZW1wbGF0aW5nXG5cdGlmIChvRmlsdGVyQmFyIGluc3RhbmNlb2Ygd2luZG93LkVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGE8UHJvcGVydHlJbmZvW10+KG9GaWx0ZXJCYXIsIEZFVENIRURfUFJPUEVSVElFU19EQVRBX0tFWSk7XG59XG5mdW5jdGlvbiBfc2V0Q2FjaGVkUHJvcGVydGllcyhvRmlsdGVyQmFyOiBJRmlsdGVyQ29udHJvbCB8IEVsZW1lbnQsIGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10pOiB2b2lkIHtcblx0Ly8gZG8gbm90IGNhY2hlIGR1cmluZyB0ZW1wbGF0aW5nLCBlbHNlIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgY2FjaGVkIHZpZXdcblx0aWYgKG9GaWx0ZXJCYXIgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkge1xuXHRcdHJldHVybjtcblx0fVxuXHREZWxlZ2F0ZVV0aWwuc2V0Q3VzdG9tRGF0YShvRmlsdGVyQmFyLCBGRVRDSEVEX1BST1BFUlRJRVNfREFUQV9LRVksIGFGZXRjaGVkUHJvcGVydGllcyBhcyB1bmtub3duIGFzIHN0cmluZyk7XG59XG5mdW5jdGlvbiBfZ2V0Q2FjaGVkT3JGZXRjaFByb3BlcnRpZXNGb3JFbnRpdHkoXG5cdHNFbnRpdHlUeXBlUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b0ZpbHRlckJhcjogSUZpbHRlckNvbnRyb2xcbik6IENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10ge1xuXHRsZXQgYUZldGNoZWRQcm9wZXJ0aWVzID0gX2dldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhcik7XG5cdGxldCBsb2NhbEdyb3VwTGFiZWw7XG5cblx0aWYgKCFhRmV0Y2hlZFByb3BlcnRpZXMpIHtcblx0XHRhRmV0Y2hlZFByb3BlcnRpZXMgPSBPRGF0YUZpbHRlckJhckRlbGVnYXRlLmZldGNoUHJvcGVydGllc0ZvckVudGl0eShzRW50aXR5VHlwZVBhdGgsIG9NZXRhTW9kZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvR3JvdXA6IEZFUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRsb2NhbEdyb3VwTGFiZWwgPSBudWxsO1xuXHRcdFx0aWYgKG9Hcm91cC5ncm91cExhYmVsKSB7XG5cdFx0XHRcdGxvY2FsR3JvdXBMYWJlbCA9IGdldExvY2FsaXplZFRleHQob0dyb3VwLmdyb3VwTGFiZWwsIG9GaWx0ZXJCYXIpO1xuXHRcdFx0XHRvR3JvdXAuZ3JvdXBMYWJlbCA9IGxvY2FsR3JvdXBMYWJlbCA9PT0gbnVsbCA/IG9Hcm91cC5ncm91cExhYmVsIDogbG9jYWxHcm91cExhYmVsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRQcm9wZXJ0eUluZm9zQnlHcm91cExhYmVsKGFGZXRjaGVkUHJvcGVydGllcyk7XG5cdFx0X3NldENhY2hlZFByb3BlcnRpZXMob0ZpbHRlckJhciwgYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0fVxuXHRyZXR1cm4gYUZldGNoZWRQcm9wZXJ0aWVzO1xufVxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5mZXRjaFByb3BlcnRpZXMgPSBhc3luYyBmdW5jdGlvbiAoZmlsdGVyQmFyOiBGaWx0ZXJCYXIpOiBQcm9taXNlPFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgcHJvcGVydHlJbmZvcyA9IGF3YWl0IE9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzKGZpbHRlckJhciBhcyB1bmtub3duIGFzIElGaWx0ZXJDb250cm9sKTtcblx0RGVsZWdhdGVVdGlsLnNldEN1c3RvbURhdGEoZmlsdGVyQmFyLCBcImZlRmlsdGVySW5mb1wiLCBwcm9wZXJ0eUluZm9zKTtcblx0aWYgKHByb3BlcnR5SW5mb3MubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBGaWx0ZXJVdGlscy5mb3JtYXRQcm9wZXJ0eUluZm8ocHJvcGVydHlJbmZvcyBhcyBQcm9wZXJ0eUluZm9bXSkgYXMgUHJvcGVydHlJbmZvRXh0ZXJuYWxbXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbk9EYXRhRmlsdGVyQmFyRGVsZWdhdGUuZmV0Y2hGaWx0ZXJQcm9wZXJ0aWVzID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRmaWx0ZXJCYXI6IElGaWx0ZXJDb250cm9sXG4pOiBQcm9taXNlPENvbnRyb2xQcm9wZXJ0eUluZm9bXSB8IFByb3BlcnR5SW5mb0V4dGVybmFsW10+IHtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YTxzdHJpbmc+KGZpbHRlckJhciwgXCJlbnRpdHlUeXBlXCIpITtcblx0cmV0dXJuIERlbGVnYXRlVXRpbC5mZXRjaE1vZGVsKGZpbHRlckJhciBhcyBGaWx0ZXJCYXIpLnRoZW4oZnVuY3Rpb24gKG1vZGVsOiBNb2RlbCkge1xuXHRcdGlmICghbW9kZWwpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cdFx0cmV0dXJuIF9nZXRDYWNoZWRPckZldGNoUHJvcGVydGllc0ZvckVudGl0eShlbnRpdHlUeXBlUGF0aCwgbW9kZWwuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsIGZpbHRlckJhcik7XG5cdH0pO1xufTtcblxuT0RhdGFGaWx0ZXJCYXJEZWxlZ2F0ZS5nZXRUeXBlTWFwID0gZnVuY3Rpb24gKCk6IHR5cGVvZiBUeXBlTWFwIHtcblx0cmV0dXJuIFR5cGVNYXA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPRGF0YUZpbHRlckJhckRlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUErREEsTUFBTUEsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxpQkFBaUIsRUFBRUMscUJBQXFCLENBdUR2RjtFQUNGSixzQkFBc0IsQ0FBQ0ssVUFBVSxHQUFHLENBQUM7RUFDckMsTUFBTUMsd0JBQXdCLEdBQUcsWUFBWTtJQUM1Q0Msb0JBQW9CLEdBQUcsU0FBUztJQUNoQ0MsZUFBZSxHQUFHLHNCQUFzQjtJQUN4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