@sapui5/sap.fe.core 1.92.0 → 1.93.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/package.json +2 -3
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +2 -2
  4. package/src/sap/fe/core/AppComponent.js +21 -1
  5. package/src/sap/fe/core/CommonUtils.js +130 -48
  6. package/src/sap/fe/core/ExtensionAPI.js +238 -226
  7. package/src/sap/fe/core/PageController.js +5 -2
  8. package/src/sap/fe/core/TemplateComponent.js +1 -0
  9. package/src/sap/fe/core/TransactionHelper.js +35 -8
  10. package/src/sap/fe/core/actions/draft.js +1 -1
  11. package/src/sap/fe/core/actions/messageHandling.js +18 -6
  12. package/src/sap/fe/core/actions/operations.js +17 -41
  13. package/src/sap/fe/core/controllerextensions/EditFlow.js +127 -43
  14. package/src/sap/fe/core/controllerextensions/InternalRouting.js +11 -11
  15. package/src/sap/fe/core/controllerextensions/KPIManagement.js +417 -0
  16. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +399 -0
  17. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -3
  18. package/src/sap/fe/core/controllerextensions/PageReady.ts +1 -1
  19. package/src/sap/fe/core/controllerextensions/Share.js +102 -66
  20. package/src/sap/fe/core/controllerextensions/SideEffects.js +60 -14
  21. package/src/sap/fe/core/controllerextensions/SideEffects.ts +53 -12
  22. package/src/sap/fe/core/controllerextensions/ViewState.js +18 -18
  23. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +13 -0
  24. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +68 -2
  25. package/src/sap/fe/core/converters/ConverterContext.js +15 -1
  26. package/src/sap/fe/core/converters/ConverterContext.ts +11 -0
  27. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  28. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -2
  29. package/src/sap/fe/core/converters/ManifestWrapper.js +14 -14
  30. package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -12
  31. package/src/sap/fe/core/converters/MetaModelConverter.js +32 -2
  32. package/src/sap/fe/core/converters/MetaModelConverter.ts +39 -2
  33. package/src/sap/fe/core/converters/annotations/DataField.js +10 -6
  34. package/src/sap/fe/core/converters/annotations/DataField.ts +9 -5
  35. package/src/sap/fe/core/converters/common/AnnotationConverter.js +14 -4
  36. package/src/sap/fe/core/converters/controls/Common/Action.js +25 -15
  37. package/src/sap/fe/core/converters/controls/Common/Action.ts +33 -19
  38. package/src/sap/fe/core/converters/controls/Common/Criticality.js +50 -0
  39. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +33 -0
  40. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -3
  41. package/src/sap/fe/core/converters/controls/Common/Form.ts +1 -2
  42. package/src/sap/fe/core/converters/controls/Common/KPI.js +181 -0
  43. package/src/sap/fe/core/converters/controls/Common/KPI.ts +220 -0
  44. package/src/sap/fe/core/converters/controls/Common/Table.js +121 -59
  45. package/src/sap/fe/core/converters/controls/Common/Table.ts +130 -62
  46. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -4
  47. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +9 -3
  48. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +62 -7
  49. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +58 -6
  50. package/src/sap/fe/core/converters/helpers/Aggregation.js +86 -11
  51. package/src/sap/fe/core/converters/helpers/Aggregation.ts +79 -8
  52. package/src/sap/fe/core/converters/helpers/BindingHelper.js +44 -2
  53. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +43 -2
  54. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  55. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  56. package/src/sap/fe/core/converters/helpers/IssueManager.js +8 -2
  57. package/src/sap/fe/core/converters/helpers/IssueManager.ts +7 -1
  58. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +93 -0
  59. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +92 -0
  60. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +102 -23
  61. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -17
  62. package/src/sap/fe/core/converters/templates/ListReportConverter.js +44 -5
  63. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +39 -2
  64. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +41 -30
  65. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +47 -30
  66. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -1
  67. package/src/sap/fe/core/formatters/CriticalityFormatter.js +77 -0
  68. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +58 -0
  69. package/src/sap/fe/core/formatters/KPIFormatter.js +103 -0
  70. package/src/sap/fe/core/formatters/KPIFormatter.ts +88 -0
  71. package/src/sap/fe/core/fpm/manifest.json +1 -3
  72. package/src/sap/fe/core/helpers/BindingExpression.js +161 -97
  73. package/src/sap/fe/core/helpers/BindingExpression.ts +188 -117
  74. package/src/sap/fe/core/library.js +1 -1
  75. package/src/sap/fe/core/messagebundle.properties +45 -1
  76. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -1
  77. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -0
  78. package/src/sap/fe/core/services/RoutingServiceFactory.js +30 -8
  79. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +16 -4
  80. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -3
  81. package/src/sap/fe/core/templating/DataModelPathHelper.js +7 -3
  82. package/src/sap/fe/core/templating/DataModelPathHelper.ts +7 -2
  83. package/src/sap/fe/core/templating/UIFormatters.js +1 -5
  84. package/src/sap/fe/core/templating/UIFormatters.ts +0 -3
@@ -2,10 +2,11 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "sap/fe/core/templating/UIFormatters"], function (ManifestSettings, ID, Action, ConfigurableObject, DataField, BindingExpression, BindingHelper, Key, tableFormatters, TableFormatterTypes, DataModelPathHelper, StableIdHelper, IssueManager, PropertyHelper, Aggregation, UIFormatters) {
5
+ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/helpers/Key", "sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/templating/PropertyHelper", "../../helpers/Aggregation", "sap/fe/core/templating/UIFormatters", "./Criticality"], function (ManifestSettings, ID, Action, ConfigurableObject, DataField, BindingExpression, BindingHelper, Key, tableFormatters, TableFormatterTypes, DataModelPathHelper, StableIdHelper, IssueManager, PropertyHelper, Aggregation, UIFormatters, Criticality) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
+ var getMessageTypeFromCriticalityType = Criticality.getMessageTypeFromCriticalityType;
9
10
  var getDisplayMode = UIFormatters.getDisplayMode;
10
11
  var AggregationHelper = Aggregation.AggregationHelper;
11
12
  var getTargetValueOnDataPoint = PropertyHelper.getTargetValueOnDataPoint;
@@ -24,11 +25,13 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
24
25
  var MessageType = TableFormatterTypes.MessageType;
25
26
  var KeyHelper = Key.KeyHelper;
26
27
  var UI = BindingHelper.UI;
28
+ var singletonPathVisitor = BindingHelper.singletonPathVisitor;
27
29
  var Draft = BindingHelper.Draft;
28
30
  var resolveBindingString = BindingExpression.resolveBindingString;
29
31
  var or = BindingExpression.or;
30
32
  var not = BindingExpression.not;
31
33
  var isConstant = BindingExpression.isConstant;
34
+ var isBinding = BindingExpression.isBinding;
32
35
  var ifElse = BindingExpression.ifElse;
33
36
  var formatResult = BindingExpression.formatResult;
34
37
  var equal = BindingExpression.equal;
@@ -374,7 +377,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
374
377
  var actionTarget = dataField.ActionTarget;
375
378
 
376
379
  if (actionTarget === null || actionTarget === void 0 ? void 0 : (_actionTarget$paramet = actionTarget.parameters) === null || _actionTarget$paramet === void 0 ? void 0 : _actionTarget$paramet.length) {
377
- var _actionTarget$annotat, _actionTarget$annotat2;
380
+ var _actionTarget$annotat, _actionTarget$annotat2, _actionTarget$annotat3, _actionTarget$annotat4;
378
381
 
379
382
  var bindingParameterFullName = actionTarget.parameters[0].fullyQualifiedName,
380
383
  bindingParameter = bindingParameterFullName.substring(bindingParameterFullName.lastIndexOf("/") + 1),
@@ -386,6 +389,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
386
389
 
387
390
  if (targetExpression === null || targetExpression === void 0 ? void 0 : targetExpression.path) {
388
391
  operationAvailableMap[actionName] = targetExpression.path;
392
+ } else if ((actionTarget === null || actionTarget === void 0 ? void 0 : (_actionTarget$annotat3 = actionTarget.annotations) === null || _actionTarget$annotat3 === void 0 ? void 0 : (_actionTarget$annotat4 = _actionTarget$annotat3.Core) === null || _actionTarget$annotat4 === void 0 ? void 0 : _actionTarget$annotat4.OperationAvailable) !== undefined) {
393
+ operationAvailableMap[actionName] = targetExpression;
389
394
  }
390
395
  }
391
396
  }
@@ -553,7 +558,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
553
558
  /*The final aim would be to check if the path expression depends on the parent context
554
559
  and considers only those expressions for the expression evaluation,
555
560
  but currently not possible from the manifest as the visible key is bound on the parent entity.
556
- Tricky to differenciate the path as it's done for the Hidden annotation.
561
+ Tricky to differentiate the path as it's done for the Hidden annotation.
557
562
  For the time being we consider all the paths of the manifest*/
558
563
  aVisiblePathExpressions.push(resolveBindingString(action === null || action === void 0 ? void 0 : (_action$visible2 = action.visible) === null || _action$visible2 === void 0 ? void 0 : _action$visible2.valueOf()));
559
564
  }
@@ -722,34 +727,6 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
722
727
  };
723
728
  }
724
729
 
725
- function getCriticalityBindingByEnum(CriticalityEnum) {
726
- var criticalityProperty;
727
-
728
- switch (CriticalityEnum) {
729
- case "UI.CriticalityType/Negative":
730
- criticalityProperty = MessageType.Error;
731
- break;
732
-
733
- case "UI.CriticalityType/Critical":
734
- criticalityProperty = MessageType.Warning;
735
- break;
736
-
737
- case "UI.CriticalityType/Positive":
738
- criticalityProperty = MessageType.Success;
739
- break;
740
-
741
- case "UI.CriticalityType/Information":
742
- criticalityProperty = MessageType.Information;
743
- break;
744
-
745
- case "UI.CriticalityType/Neutral":
746
- default:
747
- criticalityProperty = MessageType.None;
748
- }
749
-
750
- return criticalityProperty;
751
- }
752
-
753
730
  function getHighlightRowBinding(criticalityAnnotation, isDraftRoot, targetEntityType) {
754
731
  var defaultHighlightRowDefinition = MessageType.None;
755
732
 
@@ -758,7 +735,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
758
735
  defaultHighlightRowDefinition = annotationExpression(criticalityAnnotation);
759
736
  } else {
760
737
  // Enum Value so we get the corresponding static part
761
- defaultHighlightRowDefinition = getCriticalityBindingByEnum(criticalityAnnotation);
738
+ defaultHighlightRowDefinition = getMessageTypeFromCriticalityType(criticalityAnnotation);
762
739
  }
763
740
  }
764
741
 
@@ -895,7 +872,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
895
872
  if (relatedPropertyNames.length > 0) {
896
873
  columnInfo.propertyInfos = relatedPropertyNames;
897
874
  columnInfo.exportSettings = _objectSpread({}, columnInfo.exportSettings, {
898
- template: relatedPropertiesInfo.exportSettingsTemplate
875
+ template: relatedPropertiesInfo.exportSettingsTemplate,
876
+ wrap: relatedPropertiesInfo.exportSettingsWrapping
899
877
  }); // Collect information of related columns to be created.
900
878
 
901
879
  relatedPropertyNames.forEach(function (name) {
@@ -1215,8 +1193,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1215
1193
  function getDefaultFormatOptionsForTable() {
1216
1194
  return {
1217
1195
  textLinesDisplay: 4,
1218
- textLinesEdit: 4,
1219
- textMaxLines: 0
1196
+ textLinesEdit: 4
1220
1197
  };
1221
1198
  }
1222
1199
  /**
@@ -1282,7 +1259,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1282
1259
  propertyInfos: relatedPropertyNames.length > 0 ? relatedPropertyNames : undefined,
1283
1260
  additionalPropertyInfos: additionalPropertyNames.length > 0 ? additionalPropertyNames : undefined,
1284
1261
  exportSettings: {
1285
- template: relatedPropertiesInfo.exportSettingsTemplate
1262
+ template: relatedPropertiesInfo.exportSettingsTemplate,
1263
+ wrap: relatedPropertiesInfo.exportSettingsWrapping
1286
1264
  },
1287
1265
  width: ((_lineItem$annotations = lineItem.annotations) === null || _lineItem$annotations === void 0 ? void 0 : (_lineItem$annotations2 = _lineItem$annotations.HTML5) === null || _lineItem$annotations2 === void 0 ? void 0 : (_lineItem$annotations3 = _lineItem$annotations2.CssDefaults) === null || _lineItem$annotations3 === void 0 ? void 0 : _lineItem$annotations3.width) || undefined,
1288
1266
  isNavigable: true,
@@ -1419,7 +1397,8 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1419
1397
  formatOptions: _objectSpread({}, getDefaultFormatOptionsForTable(), {}, manifestColumn.formatOptions),
1420
1398
  exportSettings: {
1421
1399
  template: propertyInfos ? _appendCustomTemplate(propertyInfos) : undefined,
1422
- fieldLabel: propertyInfos ? manifestColumn.header : undefined
1400
+ fieldLabel: propertyInfos ? manifestColumn.header : undefined,
1401
+ wrap: propertyInfos && propertyInfos.length > 1 ? true : false
1423
1402
  }
1424
1403
  };
1425
1404
  };
@@ -1493,10 +1472,13 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1493
1472
  return undefined;
1494
1473
  }
1495
1474
  /**
1496
- * Returns visibility for Delete button
1497
- * @param converterContext
1498
- * @param navigationPath
1499
- * @param isTargetDeletable
1475
+ * Function to determine the visibility of the Delete button.
1476
+ *
1477
+ * @param converterContext The instance of the converter context
1478
+ * @param navigationPath Path to the navigation entity
1479
+ * @param isTargetDeletable Flag which determines whether a target is deletable
1480
+ * @param viewConfiguration The instance of the configuration for the view path
1481
+ * @returns {BindingExpression<boolean>} The binding expression for the Delete button
1500
1482
  */
1501
1483
 
1502
1484
 
@@ -1507,9 +1489,13 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1507
1489
 
1508
1490
  var currentEntitySet = converterContext.getEntitySet();
1509
1491
  var dataModelObjectPath = converterContext.getDataModelObjectPath();
1510
- var isDeleteHidden = compileBinding(currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann === void 0 ? void 0 : _currentEntitySet$ann.DeleteHidden) || false, dataModelObjectPath.navigationProperties.map(function (navProp) {
1492
+ var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
1511
1493
  return navProp.name;
1512
- })) : constant(false));
1494
+ });
1495
+ var isDeleteHiddenExpression = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann === void 0 ? void 0 : _currentEntitySet$ann.DeleteHidden) || false, visitedNavigationPaths, undefined, function (path) {
1496
+ return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
1497
+ }) : constant(false);
1498
+ var isDeleteHidden = compileBinding(isDeleteHiddenExpression);
1513
1499
  var isParentDeletable, parentEntitySetDeletable;
1514
1500
 
1515
1501
  if (converterContext.getTemplateType() === TemplateType.ObjectPage) {
@@ -1535,35 +1521,102 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1535
1521
  } else {
1536
1522
  return "{= ${ui>/editMode} === 'Editable'}";
1537
1523
  }
1524
+ } else if (isBinding(isDeleteHiddenExpression)) {
1525
+ // UI.DeleteHidden annotation points to a path
1526
+ return compileBinding(not(isDeleteHiddenExpression));
1538
1527
  } else {
1539
1528
  return true;
1540
1529
  }
1541
1530
  }
1531
+ /**
1532
+ * Returns the enablement for the 'Mass Edit' button
1533
+ *
1534
+ * @param converterContext The converterContext
1535
+ * @param bMassEditVisible The visibility of the 'Mass Edit' button
1536
+ * @returns {*} Expression or Boolean value for the enablement of the 'Mass Edit' button
1537
+ */
1538
+
1542
1539
 
1543
1540
  _exports.getDeleteVisible = getDeleteVisible;
1544
1541
 
1545
- function getVisiblityMassEdit(converterContext, enableMassEditFromManifest) {
1546
- return enableMassEditFromManifest && converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
1542
+ function getEnablementMassEdit(converterContext, bMassEditVisible) {
1543
+ if (bMassEditVisible) {
1544
+ var isParentUpdatable = isPathUpdatable(converterContext.getDataModelObjectPath(), undefined, true); //when updatable is path based and pointing to current entity set property, that case is handled in table helper and runtime
1545
+
1546
+ if (isParentUpdatable === null || isParentUpdatable === void 0 ? void 0 : isParentUpdatable.currentEntityRestriction) {
1547
+ return false;
1548
+ }
1549
+
1550
+ var oExpression = compileBinding(isParentUpdatable);
1551
+ return isParentUpdatable ? "{= %{internal>numberOfSelectedContexts} >= 2 && " + compileBinding(isParentUpdatable, oExpression) + "}" : false;
1552
+ }
1553
+
1554
+ return false;
1547
1555
  }
1548
1556
  /**
1549
- * Returns visibility for Create button
1557
+ * Returns the visibility for the 'Mass Edit' button
1550
1558
  *
1551
1559
  * @param converterContext The converterContext
1552
- * @param creationBehaviour The behavior for the creation
1553
- * @returns {*} Expression or Boolean value of 'create hidden'
1560
+ * @param tableManifestConfiguration The manifest configuration for the table
1561
+ * @param targetCapabilities The target capability restrictions for the table
1562
+ * @param selectionMode The selection mode for the table
1563
+ * @returns {*} Expression or Boolean value for the visibility of the 'Mass Edit' button
1554
1564
  */
1555
1565
 
1556
1566
 
1557
- _exports.getVisiblityMassEdit = getVisiblityMassEdit;
1567
+ _exports.getEnablementMassEdit = getEnablementMassEdit;
1568
+
1569
+ function getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode) {
1570
+ var _entitySet$annotation, _entitySet$annotation2;
1571
+
1572
+ var entitySet = converterContext.getEntitySet(),
1573
+ bUpdateHidden = entitySet && (entitySet === null || entitySet === void 0 ? void 0 : (_entitySet$annotation = entitySet.annotations.UI) === null || _entitySet$annotation === void 0 ? void 0 : (_entitySet$annotation2 = _entitySet$annotation.UpdateHidden) === null || _entitySet$annotation2 === void 0 ? void 0 : _entitySet$annotation2.valueOf()),
1574
+ bMassEditEnabled = (tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.enableMassEdit) || false,
1575
+ iSelectionLimit = tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.selectionLimit;
1576
+ var bMassEditVisible = true;
1577
+
1578
+ if (selectionMode && selectionMode === "Single" || iSelectionLimit && iSelectionLimit < 2) {
1579
+ bMassEditVisible = false;
1580
+ } else if (selectionMode && (selectionMode === "Auto" || selectionMode === "None")) {
1581
+ bMassEditVisible = true;
1582
+ }
1583
+
1584
+ if ((targetCapabilities === null || targetCapabilities === void 0 ? void 0 : targetCapabilities.isUpdatable) !== false && bMassEditVisible && bMassEditEnabled) {
1585
+ if (bUpdateHidden && typeof bUpdateHidden === "boolean") {
1586
+ return !bUpdateHidden && converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
1587
+ } else if (bUpdateHidden && (bUpdateHidden === null || bUpdateHidden === void 0 ? void 0 : bUpdateHidden.path)) {
1588
+ return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(and(equal(UI.IsEditable, true), equal(annotationExpression(bUpdateHidden), false))) : false;
1589
+ }
1590
+
1591
+ return converterContext.getTemplateType() === TemplateType.ObjectPage ? compileBinding(UI.IsEditable) : false;
1592
+ }
1593
+
1594
+ return false;
1595
+ }
1596
+ /**
1597
+ * Function to determine the visibility of the Create button.
1598
+ *
1599
+ * @param converterContext The instance of the converter context
1600
+ * @param creationMode The mode used for creation
1601
+ * @param isInsertable Annotation expression of InsertRestrictions.Insertable
1602
+ * @param viewConfiguration The instance of the configuration for the view path
1603
+ * @returns {Expression<boolean>} Expression or Boolean value of the 'UI.CreateHidden' annotation
1604
+ */
1605
+
1606
+
1607
+ _exports.getVisibilityMassEdit = getVisibilityMassEdit;
1558
1608
 
1559
1609
  function getCreateVisible(converterContext, creationMode, isInsertable, viewConfiguration) {
1560
1610
  var _currentEntitySet$ann2, _currentEntitySet$ann3, _currentEntitySet$ann4, _currentEntitySet$ann5, _converterContext$get6, _converterContext$get7, _converterContext$get8;
1561
1611
 
1562
1612
  var currentEntitySet = converterContext.getEntitySet();
1563
1613
  var dataModelObjectPath = converterContext.getDataModelObjectPath();
1564
- var isCreateHidden = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann2 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann2 === void 0 ? void 0 : _currentEntitySet$ann2.CreateHidden) || false, dataModelObjectPath.navigationProperties.map(function (navProp) {
1614
+ var visitedNavigationPaths = dataModelObjectPath.navigationProperties.map(function (navProp) {
1565
1615
  return navProp.name;
1566
- })) : constant(false); // if there is a custom new action the create button will be bound against this new action (instead of a POST action).
1616
+ });
1617
+ var isCreateHidden = currentEntitySet ? annotationExpression((currentEntitySet === null || currentEntitySet === void 0 ? void 0 : (_currentEntitySet$ann2 = currentEntitySet.annotations.UI) === null || _currentEntitySet$ann2 === void 0 ? void 0 : _currentEntitySet$ann2.CreateHidden) || false, visitedNavigationPaths, undefined, function (path) {
1618
+ return singletonPathVisitor(path, converterContext, visitedNavigationPaths);
1619
+ }) : constant(false); // if there is a custom new action the create button will be bound against this new action (instead of a POST action).
1567
1620
  // The visibility of the create button then depends on the new action's OperationAvailable annotation (instead of the insertRestrictions):
1568
1621
  // OperationAvailable = true or undefined -> create is visible
1569
1622
  // OperationAvailable = false -> create is not visible
@@ -1575,18 +1628,23 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1575
1628
  // -
1576
1629
  // - Otherwise
1577
1630
  // - If the create mode is external -> create is visible
1578
- // - If we're on the list report -> create is visible
1631
+ // - If we're on the list report ->
1632
+ // - If UI.CreateHidden points to a property path -> provide a negated binding to this path
1633
+ // - Otherwise, create is visible
1579
1634
  // - Otherwise
1580
1635
  // - This depends on the value of the the UI.IsEditable
1581
1636
 
1582
- return ifElse(or(or(equal(showCreateForNewAction, false), and(isConstant(isInsertable), equal(isInsertable, false), equal(showCreateForNewAction, undefined))), isConstant(isCreateHidden) && equal(isCreateHidden, true), or(viewConfiguration ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) : false, converterContext.getTemplateType() === TemplateType.AnalyticalListPage)), false, ifElse(or(creationMode === "External", converterContext.getTemplateType() === TemplateType.ListReport), true, and(not(isCreateHidden), UI.IsEditable)));
1637
+ return ifElse(or(or(equal(showCreateForNewAction, false), and(isConstant(isInsertable), equal(isInsertable, false), equal(showCreateForNewAction, undefined))), isConstant(isCreateHidden) && equal(isCreateHidden, true), or(viewConfiguration ? converterContext.getManifestWrapper().hasMultipleVisualizations(viewConfiguration) : false, converterContext.getTemplateType() === TemplateType.AnalyticalListPage)), false, ifElse(creationMode === "External", true, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, ifElse(isBinding(isCreateHidden), not(isCreateHidden), true), and(not(isCreateHidden), UI.IsEditable))));
1583
1638
  }
1584
1639
  /**
1585
- * Returns visibility for Create button
1640
+ * Returns the visibility for the Paste button.
1586
1641
  *
1587
- * @param converterContext
1588
- * @param creationBehaviour
1589
- * @returns {*} Expression or Boolean value of createhidden
1642
+ * @param converterContext The instance of the converter context
1643
+ * @param creationBehaviour The chosen behavior of creation
1644
+ * @param isInsertable The expression which denotes insert restrictions
1645
+ * @param pasteEnabledInManifest The flag which denotes the paste enablement status via manifest
1646
+ * @param viewConfiguration The instance of the configuration for the view path
1647
+ * @returns {Expression<boolean>} Expression or Boolean value of the UI.CreateHidden annotation
1590
1648
  */
1591
1649
 
1592
1650
 
@@ -1768,6 +1826,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1768
1826
  var dataModelObjectPath = converterContext.getDataModelObjectPath();
1769
1827
  var isInsertable = isPathInsertable(dataModelObjectPath);
1770
1828
  var variantManagement = pageManifestSettings.getVariantManagement();
1829
+ var bMassEditVisible = getVisibilityMassEdit(converterContext, tableManifestConfiguration, targetCapabilities, selectionMode);
1771
1830
  return {
1772
1831
  id: id,
1773
1832
  entityName: entitySet ? entitySet.name : "",
@@ -1779,7 +1838,10 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1779
1838
  "delete": getDeleteVisible(converterContext, navigationPropertyPath, targetCapabilities.isDeletable, viewConfiguration),
1780
1839
  create: compileBinding(getCreateVisible(converterContext, creationBehaviour === null || creationBehaviour === void 0 ? void 0 : creationBehaviour.mode, isInsertable)),
1781
1840
  paste: compileBinding(getPasteEnabled(converterContext, creationBehaviour, isInsertable, tableManifestConfiguration.enablePaste, viewConfiguration)),
1782
- massEdit: getVisiblityMassEdit(converterContext, tableManifestConfiguration === null || tableManifestConfiguration === void 0 ? void 0 : tableManifestConfiguration.enableMassEdit)
1841
+ massEdit: {
1842
+ visible: bMassEditVisible,
1843
+ enabled: getEnablementMassEdit(converterContext, bMassEditVisible)
1844
+ }
1783
1845
  },
1784
1846
  displayMode: isInDisplayMode(converterContext, viewConfiguration),
1785
1847
  create: creationBehaviour,
@@ -1960,4 +2022,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "sap/fe/core/conver
1960
2022
  _exports.getTableManifestConfiguration = getTableManifestConfiguration;
1961
2023
  return _exports;
1962
2024
  }, false);
1963
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImhvcml6b250YWxBbGlnbiIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwibVJhd0RlZmluaXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJuYW1lIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJkZWZhdWx0QWdncmVnYXRlIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJwdXNoIiwibGVuZ3RoIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJhZ2dyZWdhdGVzIiwiYW5ub3RhdGlvbiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwibmF2Q29uZmlnRm9yQ29udGV4dFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJmaW5kQ29sdW1uQnlQYXRoIiwib1Byb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wIiwic1VuaXQiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvVW5pdENvbHVtbiIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZW5hYmxlRGF0YVN0YXRlRmlsdGVyIiwiZ2V0VGVtcGxhdGVUeXBlIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJkYXRhRmllbGQiLCIkVHlwZSIsImFjdGlvbk5hbWUiLCJBY3Rpb24iLCJpbmRleE9mIiwiRGV0ZXJtaW5pbmciLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiYmluZGluZ1BhcmFtZXRlciIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwidGFyZ2V0RXhwcmVzc2lvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiaXNCb3VuZCIsInNvdXJjZUVudGl0eVR5cGUiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJ2YWx1ZU9mIiwiVUkiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwidmlzaWJsZSIsInNQYXRoIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic05hdmlnYXRpb25QYXRoIiwidGFyZ2V0T2JqZWN0IiwiX3R5cGUiLCJwYXJ0bmVyIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzbGljZSIsImpvaW4iLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc0NvbnN0YW50IiwidmFsdWUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVCaW5kaW5nIiwiTXVsdGkiLCJpZkVsc2UiLCJBdXRvIiwib3IiLCJjb25jYXQiLCJ0YWJsZUFjdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJrZXkiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwibm90IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkRlZmF1bHQiLCJnZXRDcml0aWNhbGl0eUJpbmRpbmdCeUVudW0iLCJDcml0aWNhbGl0eUVudW0iLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJEcmFmdCIsIklzTmV3T2JqZWN0IiwiZm9ybWF0UmVzdWx0IiwidGFibGVGb3JtYXR0ZXJzIiwicm93SGlnaGxpZ2h0aW5nIiwiX2dldENyZWF0aW9uQmVoYXZpb3VyIiwidGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uIiwiY3JlYXRlIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsIm5ld0FjdGlvbiIsInRhcmdldEFubm90YXRpb25zIiwiZ2V0RW50aXR5U2V0IiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJjcmVhdGlvbk1vZGUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsInJvdXRlIiwiYXBwZW5kIiwiY3JlYXRlQXRFbmQiLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiTmV3UGFnZSIsIl9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwicHJlc3NQcm9wZXJ0eSIsIm5hdmlnYXRpb25UYXJnZXQiLCJkaXNwbGF5IiwidGFyZ2V0IiwiQ3JpdGljYWxpdHkiLCJEcmFmdE5vZGUiLCJyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uIiwibmF2aWdhdGVkUm93IiwicHJlc3MiLCJyb3dOYXZpZ2F0ZWQiLCJjb2x1bW5zVG9CZUNyZWF0ZWQiLCJub25Tb3J0YWJsZUNvbHVtbnMiLCJ0YWJsZVR5cGUiLCJwcm9wZXJ0eSIsImV4aXN0cyIsInRhcmdldFR5cGUiLCJyZWxhdGVkUHJvcGVydGllc0luZm8iLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJyZWxhdGVkUHJvcGVydHlOYW1lcyIsInByb3BlcnRpZXMiLCJhZGRpdGlvbmFsUHJvcGVydHlOYW1lcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY29sdW1uSW5mbyIsImdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkiLCJleHBvcnRTZXR0aW5ncyIsInRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpc0dyb3VwYWJsZSIsImlzUHJvcGVydHlHcm91cGFibGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJfZ2V0TGFiZWwiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiVmFsdWUiLCJzb3J0YWJsZSIsImlzS2V5IiwiX2lzVmFsaWRDb2x1bW4iLCJpc1Byb3BlcnR5IiwiZGF0YUZpZWxkRGVmYXVsdCIsInF1YWxpZmllciIsIkxhYmVsIiwiaXNEYXRhRmllbGRUeXBlcyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwibmV3TmFtZSIsIm1hcCIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsIl9pc0NvbHVtblNvcnRhYmxlIiwicHJvcGVydHlQYXRoIiwiaXNTb3J0YWJsZSIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNEaXNwbGF5IiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsIkNhcGFiaWxpdGllcyIsIlNvcnRSZXN0cmljdGlvbnMiLCJOb25Tb3J0YWJsZVByb3BlcnRpZXMiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5Iiwic0xhYmVsIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiZXhwb3J0Q29udGFjdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImludGVybmFsQ29sdW1ucyIsIm1hbmlmZXN0Q29sdW1uIiwidmFsaWRhdGVLZXkiLCJpZCIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiU2xvdCIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc0FjdGlvbk5hdmlnYWJsZSIsImZpZWxkTGFiZWwiLCJnZXRQMTNuTW9kZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwiYkFuYWx5dGljYWxUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJmaWx0ZXIiLCJhZ2dyZWdhdGUiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0RGVsZXRlVmlzaWJsZSIsIm5hdmlnYXRpb25QYXRoIiwiaXNUYXJnZXREZWxldGFibGUiLCJjdXJyZW50RW50aXR5U2V0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRGVsZXRlSGlkZGVuIiwiRGVsZXRlSGlkZGVuIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJuYXZQcm9wIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsIkxpc3RSZXBvcnQiLCJnZXRWaXNpYmxpdHlNYXNzRWRpdCIsImVuYWJsZU1hc3NFZGl0RnJvbU1hbmlmZXN0IiwiSXNFZGl0YWJsZSIsImdldENyZWF0ZVZpc2libGUiLCJpc0luc2VydGFibGUiLCJpc0NyZWF0ZUhpZGRlbiIsIkNyZWF0ZUhpZGRlbiIsIm5ld0FjdGlvbk5hbWUiLCJzaG93Q3JlYXRlRm9yTmV3QWN0aW9uIiwiYW5kIiwiZ2V0UGFzdGVFbmFibGVkIiwiY3JlYXRpb25CZWhhdmlvdXIiLCJwYXN0ZUVuYWJsZWRJbk1hbmlmZXN0IiwiZ2V0U29ydENvbmRpdGlvbnMiLCJzb3J0Q29uZGl0aW9ucyIsIlNvcnRPcmRlciIsInNvcnRlcnMiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwicHJvcGVydHlOYW1lIiwiUHJvcGVydHkiLCJzb3J0Q29sdW1uIiwicmVsYXRlZFByb3BlcnR5TmFtZSIsImRlc2NlbmRpbmciLCJEZXNjZW5kaW5nIiwiY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyIsInBhdGhzIiwiaW5mb05hbWVzIiwiY3VycmVudFBhdGgiLCJHcm91cEJ5IiwiYUdyb3VwQnkiLCJhR3JvdXBMZXZlbHMiLCJpbmZvTmFtZSIsImdyb3VwTGV2ZWxzIiwiVG90YWwiLCJhVG90YWxzIiwidGl0bGUiLCJIZWFkZXJJbmZvIiwiVHlwZU5hbWVQbHVyYWwiLCJlbnRpdHlTZXQiLCJwYWdlTWFuaWZlc3RTZXR0aW5ncyIsImhhc0Fic29sdXRlUGF0aCIsInAxM25Nb2RlIiwiVGFibGVJRCIsInRocmVzaG9sZCIsIk1heEl0ZW1zIiwiY3VycmVudEVudGl0eVJlc3RyaWN0aW9uIiwiaXNQYXRoSW5zZXJ0YWJsZSIsImVudGl0eU5hbWUiLCJjb2xsZWN0aW9uIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsInJvdyIsInNob3ciLCJwYXN0ZSIsImVuYWJsZVBhc3RlIiwibWFzc0VkaXQiLCJlbmFibGVNYXNzRWRpdCIsImlzSW5EaXNwbGF5TW9kZSIsImF1dG9CaW5kT25Jbml0IiwicGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZCIsInRlbXBsYXRlVHlwZSIsInN1YnN0ciIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwic2VsZWN0aW9uIiwicHJvcGVydHlOYW1lcyIsIlNlbGVjdE9wdGlvbnMiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eVBhdGgiLCJ0ZXh0IiwiY2hlY2tDb25kZW5zZWRMYXlvdXQiLCJxdWlja1NlbGVjdGlvblZhcmlhbnQiLCJxdWlja0ZpbHRlclBhdGhzIiwiZW5hYmxlRXhwb3J0IiwiZmlsdGVycyIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24iLCJjb25kZW5zZWRUYWJsZUxheW91dCIsImhpZGVUYWJsZVRpdGxlIiwiZW5hYmxlRnVsbFNjcmVlbiIsInNlbGVjdGlvbkxpbWl0IiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaXNEZXNrdG9wIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsInNlbGVjdEFsbCIsImhlYWRlclZpc2libGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsInNob3dSb3dDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFtTUtBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtB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QXZDLElBQXVEOEUsYUFBYSxDQUFDcVEsV0FBZCxLQUE4QixLQUFuRztBQUNBc0IsTUFBQUEsWUFBWSxHQUNYM1IsYUFBYSxDQUFDMlIsWUFBZCxLQUErQjdiLFNBQS9CLEdBQ0drSyxhQUFhLENBQUMyUixZQURqQixHQUVHcmUsZ0JBQWdCLENBQUM0SCxlQUFqQixPQUF1QyxZQUF2QyxJQUF1RG1WLFdBSDNEO0FBSUE7O0FBQ0QsV0FBTztBQUNOdUIsTUFBQUEsT0FBTyxFQUFFQSxPQURIO0FBRU5uYSxNQUFBQSxJQUFJLEVBQUV1TixTQUZBO0FBR05pTixNQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBSFo7QUFJTmdCLE1BQUFBLGFBQWEsRUFBRSxFQUFFeEIscUJBQXFCLElBQUlPLGNBQTNCLENBSlQ7QUFLTkwsTUFBQUEsWUFBWSxFQUFFQSxZQUxSO0FBTU5qTyxNQUFBQSxZQUFZLEVBQUVBLFlBTlI7QUFPTkssTUFBQUEsV0FBVyxFQUFFQSxXQVBQO0FBUU44TixNQUFBQSwrQkFBK0IsRUFBRUEsK0JBUjNCO0FBU05DLE1BQUFBLHdCQUF3QixFQUFFQSx3QkFUcEI7QUFVTm9CLE1BQUFBLHVCQUF1QixFQUFFbkIsb0JBQW9CLElBQUl6WCwrQkFWM0M7QUFXTjRYLE1BQUFBLGNBQWMsRUFBRUEsY0FYVjtBQVlON0IsTUFBQUEsV0FBVyxFQUFFQSxXQVpQO0FBYU44QyxNQUFBQSxZQUFZLEVBQUUsRUFBQ25ULGFBQUQsYUFBQ0EsYUFBRCxpREFBQ0EsYUFBYSxDQUFFb1MscUJBQWhCLDJEQUFDLHVCQUFzQ0UsVUFBdkMsQ0FiUjtBQWNOL0IsTUFBQUEsY0FBYyxFQUFFdlEsYUFBRixhQUFFQSxhQUFGLHVCQUFFQSxhQUFhLENBQUV1UTtBQWR6QixLQUFQO0FBZ0JBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDcml0aWNhbGl0eVR5cGUsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdERhdGFQb2ludCxcblx0RW51bVZhbHVlLFxuXHRMaW5lSXRlbSxcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0UHJvcGVydHlQYXRoLFxuXHRTZWxlY3Rpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0T3B0aW9uVHlwZSxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBY3Rpb25UeXBlLFxuXHRBdmFpbGFiaWxpdHlUeXBlLFxuXHRDcmVhdGlvbk1vZGUsXG5cdEZvcm1hdE9wdGlvbnNUeXBlLFxuXHRIb3Jpem9udGFsQWxpZ24sXG5cdE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25UYXJnZXRDb25maWd1cmF0aW9uLFxuXHRTZWxlY3Rpb25Nb2RlLFxuXHRUYWJsZUNvbHVtblNldHRpbmdzLFxuXHRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VmlzdWFsaXphdGlvblR5cGVcbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFRhYmxlSUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzLFxuXHRjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSxcblx0Q29tcGxleFByb3BlcnR5SW5mbyxcblx0Z2V0U2VtYW50aWNPYmplY3RQYXRoLFxuXHRpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbixcblx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCxcblx0aXNEYXRhRmllbGRUeXBlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb25FeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRFeHByZXNzaW9uLFxuXHRFeHByZXNzaW9uT3JQcmltaXRpdmUsXG5cdGZvcm1hdFJlc3VsdCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQge1xuXHREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aEluc2VydGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvRWRtXCI7XG5cbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7XG5cdGlzUHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRpc1BhdGhFeHByZXNzaW9uLFxuXHRnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IERpc3BsYXlNb2RlLCBnZXREaXNwbGF5TW9kZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuXG5leHBvcnQgdHlwZSBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uID0ge1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbjtcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0aWQ6IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0cDEzbk1vZGU/OiBzdHJpbmc7XG5cdHJvdz86IHtcblx0XHRhY3Rpb24/OiBzdHJpbmc7XG5cdFx0cHJlc3M/OiBzdHJpbmc7XG5cdFx0cm93SGlnaGxpZ2h0aW5nOiBCaW5kaW5nRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0cm93TmF2aWdhdGVkOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0fTtcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRzaG93Pzoge1xuXHRcdGNyZWF0ZT86IHN0cmluZyB8IGJvb2xlYW47XG5cdFx0ZGVsZXRlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0XHRwYXN0ZT86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdG1hc3NFZGl0PzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGRpc3BsYXlNb2RlPzogYm9vbGVhbjtcblx0dGhyZXNob2xkOiBudW1iZXI7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0c29ydENvbmRpdGlvbnM/OiBzdHJpbmc7XG5cdGdyb3VwQ29uZGl0aW9ucz86IHN0cmluZztcblx0YWdncmVnYXRlQ29uZGl0aW9ucz86IHN0cmluZztcblxuXHQvKiogQ3JlYXRlIG5ldyBlbnRyaWVzICovXG5cdGNyZWF0ZTogQ3JlYXRlQmVoYXZpb3VyIHwgQ3JlYXRlQmVoYXZpb3VyRXh0ZXJuYWw7XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPjtcblx0dGl0bGU6IHN0cmluZztcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgd2l0aGluIHRoZSBhcHAgKGRlZmF1bHQgY2FzZSlcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXIgPSB7XG5cdG1vZGU6IENyZWF0aW9uTW9kZTtcblx0YXBwZW5kOiBCb29sZWFuO1xuXHRuZXdBY3Rpb24/OiBzdHJpbmc7XG5cdG5hdmlnYXRlVG9UYXJnZXQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIE5ldyBlbnRyaWVzIGFyZSBjcmVhdGVkIGJ5IG5hdmlnYXRpbmcgdG8gc29tZSB0YXJnZXRcbiAqL1xudHlwZSBDcmVhdGVCZWhhdmlvdXJFeHRlcm5hbCA9IHtcblx0bW9kZTogXCJFeHRlcm5hbFwiO1xuXHRvdXRib3VuZDogc3RyaW5nO1xuXHRvdXRib3VuZERldGFpbDogTmF2aWdhdGlvblRhcmdldENvbmZpZ3VyYXRpb25bXCJvdXRib3VuZERldGFpbFwiXTtcblx0bmF2aWdhdGlvblNldHRpbmdzOiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb24gPSB7XG5cdGlzRGVsZXRhYmxlOiBib29sZWFuO1xuXHRpc1VwZGF0YWJsZTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24gPSB7XG5cdGVuYWJsZWQ/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRwYXRoczogW1xuXHRcdHtcblx0XHRcdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdFx0fVxuXHRdO1xuXHRzaG93Q291bnRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uID0ge1xuXHRwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXTtcblx0dGV4dD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGNyZWF0ZUF0RW5kOiBib29sZWFuO1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YTogYm9vbGVhbjtcblx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBib29sZWFuO1xuXHRlbmFibGVFeHBvcnQ6IGJvb2xlYW47XG5cdGhlYWRlclZpc2libGU6IGJvb2xlYW47XG5cdGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBUYWJsZUZpbHRlcnNDb25maWd1cmF0aW9uPjtcblx0dHlwZTogVGFibGVUeXBlO1xuXHRzZWxlY3RBbGw/OiBib29sZWFuO1xuXHRzZWxlY3Rpb25MaW1pdDogbnVtYmVyO1xuXHRlbmFibGVQYXN0ZTogYm9vbGVhbjtcblx0ZW5hYmxlRnVsbFNjcmVlbjogYm9vbGVhbjtcblx0c2hvd1Jvd0NvdW50OiBib29sZWFuO1xuXHRlbmFibGVNYXNzRWRpdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFRhYmxlVHlwZSA9IFwiR3JpZFRhYmxlXCIgfCBcIlJlc3BvbnNpdmVUYWJsZVwiIHwgXCJBbmFseXRpY2FsVGFibGVcIjtcblxuZW51bSBDb2x1bW5UeXBlIHtcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLCAvLyBEZWZhdWx0IFR5cGVcblx0QW5ub3RhdGlvbiA9IFwiQW5ub3RhdGlvblwiLFxuXHRTbG90ID0gXCJTbG90XCJcbn1cblxuZXhwb3J0IHR5cGUgQmFzZVRhYmxlQ29sdW1uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR3aWR0aD86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHR0eXBlOiBDb2x1bW5UeXBlOyAvL09yaWdpbiBvZiB0aGUgc291cmNlIHdoZXJlIHdlIGFyZSBnZXR0aW5nIHRoZSB0ZW1wbGF0ZWQgaW5mb3JtYXRpb24gZnJvbSxcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRzZXR0aW5ncz86IFRhYmxlQ29sdW1uU2V0dGluZ3M7XG5cdHNlbWFudGljT2JqZWN0UGF0aD86IHN0cmluZztcblx0cHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xuXHRzb3J0YWJsZTogYm9vbGVhbjtcblx0aG9yaXpvbnRhbEFsaWduPzogSG9yaXpvbnRhbEFsaWduO1xuXHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbVRhYmxlQ29sdW1uID0gQmFzZVRhYmxlQ29sdW1uICYge1xuXHRoZWFkZXI/OiBzdHJpbmc7XG5cdHRlbXBsYXRlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGlzR3JvdXBhYmxlPzogYm9vbGVhbjtcblx0aXNLZXk/OiBib29sZWFuO1xuXHR1bml0Pzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5ncz86IHtcblx0XHR0ZW1wbGF0ZT86IHN0cmluZztcblx0XHRsYWJlbD86IHN0cmluZztcblx0XHRmaWVsZExhYmVsPzogc3RyaW5nO1xuXHR9O1xuXHRpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eT86IGJvb2xlYW47XG5cdHRleHRBcnJhbmdlbWVudD86IHtcblx0XHR0ZXh0UHJvcGVydHk6IHN0cmluZztcblx0XHRtb2RlOiBEaXNwbGF5TW9kZTtcblx0fTtcblx0ZXhwb3J0Q29udGFjdFByb3BlcnR5Pzogc3RyaW5nO1xuXHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb2x1bW4gPSBDdXN0b21UYWJsZUNvbHVtbiB8IEFubm90YXRpb25UYWJsZUNvbHVtbjtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tQ29sdW1uID0gQ3VzdG9tRWxlbWVudDxUYWJsZUNvbHVtbj47XG5cbmV4cG9ydCB0eXBlIEFnZ3JlZ2F0ZURhdGEgPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGU6IHtcblx0XHRjb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH07XG5cdHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTtcblx0YW5ub3RhdGlvbjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0Y29udHJvbDogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXTtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRhZ2dyZWdhdGVzPzogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT47XG5cdGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG5cdGVuYWJsZURhdGFTdGF0ZUZpbHRlcjogYm9vbGVhbjtcblx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmc7XG59O1xuXG50eXBlIFNvcnRlclR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0ZGVzY2VuZGluZzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgYW5ub3RhdGlvbiBiYXNlZCBhbmQgbWFuaWZlc3QgYmFzZWQgdGFibGUgYWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge0Jhc2VBY3Rpb259IFRoZSBjb21wbGV0ZSB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFjdGlvbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGFUYWJsZUFjdGlvbnMgPSBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLnRhYmxlQWN0aW9ucztcblx0Y29uc3QgYUhpZGRlbkFjdGlvbnMgPSBhVGFibGVBY3Rpb25zLmhpZGRlblRhYmxlQWN0aW9ucztcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdGFBbm5vdGF0aW9uQWN0aW9ucyxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGFBbm5vdGF0aW9uQWN0aW9ucyxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdHRydWUsXG5cdFx0XHRhSGlkZGVuQWN0aW9uc1xuXHRcdCksXG5cdFx0e1xuXHRcdFx0aXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVPblNlbGVjdDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRlbmFibGVkOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBcIm92ZXJ3cml0ZVwiXG5cdFx0fVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGNvbHVtbnMsIGFubm90YXRpb24tYmFzZWQgYXMgd2VsbCBhcyBtYW5pZmVzdCBiYXNlZC5cbiAqIFRoZXkgYXJlIHNvcnRlZCBhbmQgc29tZSBwcm9wZXJ0aWVzIGNhbiBiZSBvdmVyd3JpdHRlbiB2aWEgdGhlIG1hbmlmZXN0IChjaGVjayBvdXQgdGhlIGtleXMgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4pLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0ge05hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb259IG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFJldHVybnMgYWxsIHRhYmxlIGNvbHVtbnMgdGhhdCBzaG91bGQgYmUgYXZhaWxhYmxlLCByZWdhcmRsZXNzIG9mIHRlbXBsYXRpbmcgb3IgcGVyc29uYWxpemF0aW9uIG9yIHRoZWlyIG9yaWdpblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVDb2x1bW5zKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUFubm90YXRpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdENvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuY29sdW1ucyxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRuYXZpZ2F0aW9uU2V0dGluZ3Ncblx0KTtcblxuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYW5ub3RhdGlvbkNvbHVtbnMsIG1hbmlmZXN0Q29sdW1ucywge1xuXHRcdHdpZHRoOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGlzTmF2aWdhYmxlOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGF2YWlsYWJpbGl0eTogXCJvdmVyd3JpdGVcIixcblx0XHRzZXR0aW5nczogXCJvdmVyd3JpdGVcIixcblx0XHRob3Jpem9udGFsQWxpZ246IFwib3ZlcndyaXRlXCIsXG5cdFx0Zm9ybWF0T3B0aW9uczogXCJvdmVyd3JpdGVcIlxuXHR9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY3VzdG9tIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25zIGZyb20gdGhlIGVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHRhcmdldCBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0dGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGZ1bmN0aW9uIGZpbmRDb2x1bW5Gcm9tUGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKGNvbHVtbiA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBLZWVwIGEgc2V0IG9mIGFsbCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMsIGFzIHdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIgdGhlbSBhcyBhZ2dyZWdhdGVzXG5cdC8vIFRoZXkgYXJlIGFnZ3JlZ2F0ZXMgZm9yIHRlY2huaWNhbCByZWFzb25zICh0byBtYW5hZ2UgbXVsdGktdW5pdHMgc2l0dWF0aW9ucykgYnV0IGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmcm9tIGEgdXNlciBzdGFuZHBvaW50XG5cdGNvbnN0IG1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4udW5pdCkge1xuXHRcdFx0bUN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5hZGQob1RhYmxlQ29sdW1uLnVuaXQpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgbVJhd0RlZmluaXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgbVJlc3VsdDogUmVjb3JkPHN0cmluZywgQWdncmVnYXRlRGF0YT4gPSB7fTtcblxuXHR0YWJsZUNvbHVtbnMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRjb25zdCBvVGFibGVDb2x1bW4gPSBvQ29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRpZiAob1RhYmxlQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRjb25zdCBhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyA9IG1SYXdEZWZpbml0aW9uc1tvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXTtcblxuXHRcdFx0Ly8gSWdub3JlIGFnZ3JlZ2F0ZXMgY29ycmVzcG9uZGluZyB0byBjdXJyZW5jaWVzIG9yIHVuaXRzIG9mIG1lYXN1cmUgYW5kIGR1bW15IGNyZWF0ZWQgcHJvcGVydHkgZm9yIGRhdGFwb2ludCB0YXJnZXQgVmFsdWVcblx0XHRcdGlmIChcblx0XHRcdFx0YVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgJiZcblx0XHRcdFx0IW1DdXJyZW5jeU9yVW5pdFByb3BlcnRpZXMuaGFzKG9UYWJsZUNvbHVtbi5uYW1lKSAmJlxuXHRcdFx0XHQhb1RhYmxlQ29sdW1uLmlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5XG5cdFx0XHQpIHtcblx0XHRcdFx0bVJlc3VsdFtvVGFibGVDb2x1bW4ubmFtZV0gPSB7XG5cdFx0XHRcdFx0ZGVmYXVsdEFnZ3JlZ2F0ZToge30sXG5cdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBvVGFibGVDb2x1bW4ucmVsYXRpdmVQYXRoXG5cdFx0XHRcdH07XG5cdFx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcy5mb3JFYWNoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbHVtbiA9IGZpbmRDb2x1bW5Gcm9tUGF0aChjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUpO1xuXHRcdFx0XHRcdGlmIChvQ29sdW1uKSB7XG5cdFx0XHRcdFx0XHRhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5wdXNoKG9Db2x1bW4ubmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0bVJlc3VsdFtvVGFibGVDb2x1bW4ubmFtZV0uZGVmYXVsdEFnZ3JlZ2F0ZS5jb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBtUmVzdWx0O1xufTtcblxuLyoqXG4gKiBVcGRhdGVzIGEgdGFibGUgdmlzdWFsaXphdGlvbiBmb3IgYW5hbHl0aWNhbCB1c2UgY2FzZXMuXG4gKlxuICogQHBhcmFtIHRhYmxlVmlzdWFsaXphdGlvbiBUaGUgdmlzdWFsaXphdGlvbiB0byBiZSB1cGRhdGVkXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gVGhlIHByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiAoaWYgYW55KVxuICovXG5mdW5jdGlvbiB1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MoXG5cdHRhYmxlVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXNcbikge1xuXHRpZiAodGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIikge1xuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucyA9IGdldEFnZ3JlZ2F0ZURlZmluaXRpb25zRnJvbUVudGl0eVR5cGUoZW50aXR5VHlwZSwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0aWYgKGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucykge1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyA9IHRydWU7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYWdncmVnYXRlcyA9IGFnZ3JlZ2F0ZXNEZWZpbml0aW9ucztcblxuXHRcdFx0Ly8gQWRkIGdyb3VwIGFuZCBzb3J0IGNvbmRpdGlvbnMgZnJvbSB0aGUgcHJlc2VudGF0aW9uIHZhcmlhbnRcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucyA9IGdldEdyb3VwQ29uZGl0aW9ucyhwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgdGFibGVWaXN1YWxpemF0aW9uLmNvbHVtbnMpO1xuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uYWdncmVnYXRlQ29uZGl0aW9ucyA9IGdldEFnZ3JlZ2F0ZUNvbmRpdGlvbnMoXG5cdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1uc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID0gXCJHcmlkVGFibGVcIjsgLy8gQW5hbHl0aWNhbFRhYmxlIGlzbid0IGEgcmVhbCB0eXBlIGZvciB0aGUgTURDOlRhYmxlLCBzbyB3ZSBhbHdheXMgc3dpdGNoIGJhY2sgdG8gR3JpZFxuXHR9XG59XG5cbi8qKlxuICogR2V0IHRoZSBuYXZpZ2F0aW9uIHRhcmdldCBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCBUaGUgbmF2aWdhdGlvbiBwYXRoIHRvIGNoZWNrIGluIHRoZSBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHJldHVybnMgTmF2aWdhdGlvbiBwYXRoIGZyb20gbWFuaWZlc3Qgc2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoICYmIG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKSkge1xuXHRcdGNvbnN0IG5hdkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uUHJvcGVydHlQYXRoKTtcblx0XHRpZiAoT2JqZWN0LmtleXMobmF2Q29uZmlnKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5UGF0aDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGNvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRjb25zdCBuYXZDb25maWdGb3JDb250ZXh0UGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihjb250ZXh0UGF0aCk7XG5cdGlmIChuYXZDb25maWdGb3JDb250ZXh0UGF0aCAmJiBPYmplY3Qua2V5cyhuYXZDb25maWdGb3JDb250ZXh0UGF0aCkubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjb250ZXh0UGF0aDtcblx0fVxuXG5cdHJldHVybiBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCA/IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0Lm5hbWUgOiBkYXRhTW9kZWxQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWU7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgJ3VuaXQnIGFuZCAndGV4dEFycmFuZ2VtZW50JyBwcm9wZXJ0aWVzIGluIGNvbHVtbnMgd2hlbiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGRpc3BsYXllZCBpbiB0aGUgdGFibGVcbiAqIEBwYXJhbSB0YWJsZUNvbHVtbnMgVGhlIGNvbHVtbnMgdG8gYmUgdXBkYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTGlua2VkUHJvcGVydGllcyhlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCB0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10pIHtcblx0ZnVuY3Rpb24gZmluZENvbHVtbkJ5UGF0aChwYXRoOiBzdHJpbmcpOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRhYmxlQ29sdW1ucy5maW5kKGNvbHVtbiA9PiB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnByb3BlcnR5SW5mb3MgPT09IHVuZGVmaW5lZCAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eSA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5maW5kKG9Qcm9wID0+IG9Qcm9wLm5hbWUgPT09IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eSkge1xuXHRcdFx0XHRjb25zdCBzVW5pdCA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSk/Lm5hbWUgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpPy5uYW1lO1xuXHRcdFx0XHRpZiAoc1VuaXQpIHtcblx0XHRcdFx0XHRjb25zdCBvVW5pdENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgoc1VuaXQpO1xuXG5cdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnVuaXQgPSBvVW5pdENvbHVtbj8ubmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gZ2V0RGlzcGxheU1vZGUob1Byb3BlcnR5KSxcblx0XHRcdFx0XHR0ZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdGlmIChpc1BhdGhFeHByZXNzaW9uKHRleHRBbm5vdGF0aW9uKSAmJiBkaXNwbGF5TW9kZSAhPT0gXCJWYWx1ZVwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RleHRDb2x1bW4gPSBmaW5kQ29sdW1uQnlQYXRoKHRleHRBbm5vdGF0aW9uLnBhdGgpO1xuXHRcdFx0XHRcdGlmIChvVGV4dENvbHVtbiAmJiBvVGV4dENvbHVtbi5uYW1lICE9PSBvVGFibGVDb2x1bW4ubmFtZSkge1xuXHRcdFx0XHRcdFx0b1RhYmxlQ29sdW1uLnRleHRBcnJhbmdlbWVudCA9IHtcblx0XHRcdFx0XHRcdFx0dGV4dFByb3BlcnR5OiBvVGV4dENvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0XHRtb2RlOiBkaXNwbGF5TW9kZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ/OiBib29sZWFuLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnRcblx0KTtcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY29sdW1ucyA9IGdldFRhYmxlQ29sdW1ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpO1xuXG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0XHRjb2x1bW5zLFxuXHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdCksXG5cdFx0Y29udHJvbDogdGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGdldFRhYmxlQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb24sIHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uU2V0dGluZ3MpKSxcblx0XHRjb2x1bW5zOiBjb2x1bW5zLFxuXHRcdGVuYWJsZURhdGFTdGF0ZUZpbHRlcjogY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uKVxuXHR9O1xuXG5cdHVwZGF0ZUxpbmtlZFByb3BlcnRpZXMoY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKFxuXHRcdG9WaXN1YWxpemF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdENvbmZpZyA9IGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKHVuZGVmaW5lZCwgXCJcIiwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlKHt9LCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgW10sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLnR5cGUpO1xuXHRjb25zdCBvVmlzdWFsaXphdGlvbjogVGFibGVWaXN1YWxpemF0aW9uID0ge1xuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlLFxuXHRcdGFubm90YXRpb246IGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZU1hbmlmZXN0Q29uZmlnLCBjb2x1bW5zKSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IFtdLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcCh1bmRlZmluZWQpXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sdW1ucyk7XG5cdHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhvVmlzdWFsaXphdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdHJldHVybiBvVmlzdWFsaXphdGlvbjtcbn1cblxuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRjb25zdCBvcGVyYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGRhdGFGaWVsZCA9PiB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRpZiAoYWN0aW9uTmFtZT8uaW5kZXhPZihcIi9cIikgPCAwICYmICFkYXRhRmllbGQuRGV0ZXJtaW5pbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXG5cdFx0XHRcdFx0aWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXIgPSBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUuc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSxcblx0XHRcdFx0XHRcdFx0Ly8gU3RyaXAgdGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUgZnJvbSBPcGVyYXRpb25BdmFpbGFibGUgcGF0aFxuXHRcdFx0XHRcdFx0XHQvLyBGb3IgZS5nLiBfaXQvcHJvcGVydHkxIC0tPiBwcm9wZXJ0eTFcblx0XHRcdFx0XHRcdFx0dGFyZ2V0RXhwcmVzc2lvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4gKHBhdGggPyBwYXRoLnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyLmxlbmd0aCArIDEpIDogXCJcIilcblx0XHRcdFx0XHRcdFx0KSBhcyBCaW5kaW5nRXhwcmVzc2lvbkV4cHJlc3Npb248c3RyaW5nPjtcblxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldEV4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwW2FjdGlvbk5hbWVdID0gdGFyZ2V0RXhwcmVzc2lvbi5wYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wZXJhdGlvbkF2YWlsYWJsZU1hcCk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kXG4gKiByZXR1cm5zIGFsbCB0aGUgVUkuSGlkZGVuIGFubm90YXRpb24gZXhwcmVzc2lvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHVzZWQgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIEFsbCB0aGUgYFVJLkhpZGRlbmAgcGF0aCBleHByZXNzaW9ucyBmb3VuZCBpbiB0aGUgcmVsZXZhbnQgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHRjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChkYXRhRmllbGQgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiZcblx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGUpIHx8XG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlKVxuXHRcdCkge1xuXHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhVWlIaWRkZW5QYXRoRXhwcmVzc2lvbnMucHVzaChcblx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRcdGlzRW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29udGV4dCBjdXJyZW50bHkgcmVmZXJlbmNlZCBieSB0aGlzIGJpbmRpbmcgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqXG4gKiBJdCBpcyB1c2VkIChzcGVjaWZpY2FsbHkgaW4gdGhpcyBjYXNlKSwgdG8gdHJhbnNmb3JtIGEgYmluZGluZyBtYWRlIGZvciBhIE5hdlByb3AgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS9OYXZQcm9wMixcbiAqIGludG8gYSBiaW5kaW5nIG9uIHRoZSBwcmV2aW91cyBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQ3VzdG9tQWN0aW9uXG4gKiBAcGFyYW0gY29udGV4dERhdGFNb2RlbE9iamVjdFBhdGggRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHBhcmFtIGlzRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldEJpbmRpbmdFeHBGcm9tQ29udGV4dChcblx0c291cmNlOiBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb24sXG5cdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRpc0VudGl0eVNldDogYm9vbGVhblxuKTogRXhwcmVzc2lvbjxhbnk+IHtcblx0bGV0IHNFeHByZXNzaW9uOiBhbnkgfCB1bmRlZmluZWQ7XG5cdGlmIChcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHQoc291cmNlIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0KSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbik/LmFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHR9IGVsc2Uge1xuXHRcdHNFeHByZXNzaW9uID0gKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlO1xuXHR9XG5cdGxldCBzUGF0aDogc3RyaW5nO1xuXHRpZiAoc0V4cHJlc3Npb24/LnBhdGgpIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0c1BhdGggPSBzRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoc1BhdGgpIHtcblx0XHRpZiAoKHNvdXJjZSBhcyBDdXN0b21BY3Rpb24pPy52aXNpYmxlKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxLCBzUGF0aC5sZW5ndGggLSAxKTtcblx0XHR9XG5cdFx0aWYgKHNQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Ly9jaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBpcyBjb3JyZWN0OlxuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFTcGxpdFBhdGhbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiICYmXG5cdFx0XHRcdGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5wYXJ0bmVyID09PSBzTmF2aWdhdGlvblBhdGhcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oYVNwbGl0UGF0aC5zbGljZSgxKS5qb2luKFwiL1wiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gcHJvcGVydHksIGlmIGl0J3MgYW4gZW50aXR5U2V0LCB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIGhhcyB0byBiZSByZXR1cm5lZDpcblx0XHR9IGVsc2UgaWYgKGlzRW50aXR5U2V0KSB7XG5cdFx0XHRyZXR1cm4gYmluZGluZ0V4cHJlc3Npb24oc1BhdGgpO1xuXHRcdFx0Ly8gb3RoZXJ3aXNlIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgY2Fubm90IGJlIHRha2VuIGludG8gYWNjb3VudCBmb3IgdGhlIHNlbGVjdGlvbiBtb2RlIGV2YWx1YXRpb246XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xufVxuXG4vKipcbiAqIExvb3AgdGhyb3VnaCB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gb2YgYSBsaW5lIGl0ZW0gYW5kIGNoZWNrXG4gKiBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBpcyBhbHdheXMgdmlzaWJsZSBpbiB0aGUgdGFibGUgdG9vbGJhciAoYW5kIHJlcXVpcmVzIGEgY29udGV4dCkuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIGZvciByZXByZXNlbnRhdGlvbiBpbiBhIHRhYmxlIG9yIGxpc3RcbiAqIEBwYXJhbSBjdXJyZW50RW50aXR5VHlwZSBDdXJyZW50IEVudGl0eSBUeXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IDEgYWN0aW9uIHRoYXQgbWVldHMgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSwgY3VycmVudEVudGl0eVR5cGU6IEVudGl0eVR5cGUpOiBib29sZWFuIHtcblx0cmV0dXJuIGxpbmVJdGVtQW5ub3RhdGlvbi5zb21lKGRhdGFGaWVsZCA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0KGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSAmJlxuXHRcdFx0ZGF0YUZpZWxkPy5JbmxpbmU/LnZhbHVlT2YoKSAhPT0gdHJ1ZSAmJlxuXHRcdFx0KGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBmYWxzZSB8fCBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdW5kZWZpbmVkKVxuXHRcdCkge1xuXHRcdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBsaW5lSXRlbSBjb250ZXh0IGlzIHRoZSBzYW1lIGFzIHRoYXQgb2YgdGhlIGFjdGlvbjpcblx0XHRcdFx0cmV0dXJuIGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kICYmIGN1cnJlbnRFbnRpdHlUeXBlID09PSBkYXRhRmllbGQ/LkFjdGlvblRhcmdldC5zb3VyY2VFbnRpdHlUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+KTogYm9vbGVhbiB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLnNvbWUoYWN0aW9uS2V5ID0+IHtcblx0XHRjb25zdCBhY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIGFjdGlvbi52aXNpYmxlPy50b1N0cmluZygpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciB0aGUgY3VzdG9tIGFjdGlvbnMgKHdpdGgga2V5IHJlcXVpcmVzU2VsZWN0aW9uKSBkZWNsYXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjdXJyZW50IGxpbmUgaXRlbSBhbmQgcmV0dXJucyBhbGwgdGhlXG4gKiB2aXNpYmxlIGtleSB2YWx1ZXMgYXMgYW4gZXhwcmVzc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBBcnJheTxFeHByZXNzaW9uPGJvb2xlYW4+PiBBbGwgdGhlIHZpc2libGUgcGF0aCBleHByZXNzaW9ucyBvZiB0aGUgYWN0aW9ucyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhXG4gKi9cbmZ1bmN0aW9uIGdldFZpc2libGVFeHBGb3JDdXN0b21BY3Rpb25zUmVxdWlyaW5nQ29udGV4dChtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBFeHByZXNzaW9uPGJvb2xlYW4+W10ge1xuXHRjb25zdCBhVmlzaWJsZVBhdGhFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRPYmplY3Qua2V5cyhtYW5pZmVzdEFjdGlvbnMpLmZvckVhY2goYWN0aW9uS2V5ID0+IHtcblx0XHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdFx0aWYgKGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSAmJiBhY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgYWN0aW9uLnZpc2libGUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvKlRoZSBmaW5hbCBhaW0gd291bGQgYmUgdG8gY2hlY2sgaWYgdGhlIHBhdGggZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgY29udGV4dFxuXHRcdFx0XHRcdGFuZCBjb25zaWRlcnMgb25seSB0aG9zZSBleHByZXNzaW9ucyBmb3IgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbixcblx0XHRcdFx0XHRidXQgY3VycmVudGx5IG5vdCBwb3NzaWJsZSBmcm9tIHRoZSBtYW5pZmVzdCBhcyB0aGUgdmlzaWJsZSBrZXkgaXMgYm91bmQgb24gdGhlIHBhcmVudCBlbnRpdHkuXG5cdFx0XHRcdFx0VHJpY2t5IHRvIGRpZmZlcmVuY2lhdGUgdGhlIHBhdGggYXMgaXQncyBkb25lIGZvciB0aGUgSGlkZGVuIGFubm90YXRpb24uXG5cdFx0XHRcdFx0Rm9yIHRoZSB0aW1lIGJlaW5nIHdlIGNvbnNpZGVyIGFsbCB0aGUgcGF0aHMgb2YgdGhlIG1hbmlmZXN0Ki9cblxuXHRcdFx0XHRcdGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zLnB1c2gocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uPy52aXNpYmxlPy52YWx1ZU9mKCkpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhVmlzaWJsZVBhdGhFeHByZXNzaW9ucztcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBpZiB0aGUgcGF0aCBpcyBzdGF0aWNhbGx5IGRlbGV0YWJsZSBvciB1cGRhdGFibGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbn0gVGhlIHRhYmxlIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0eVJlc3RyaWN0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiB7XG5cdGNvbnN0IGlzRGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgaXNVcGRhdGFibGUgPSBpc1BhdGhVcGRhdGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRyZXR1cm4ge1xuXHRcdGlzRGVsZXRhYmxlOiAhKGlzQ29uc3RhbnQoaXNEZWxldGFibGUpICYmIGlzRGVsZXRhYmxlLnZhbHVlID09PSBmYWxzZSksXG5cdFx0aXNVcGRhdGFibGU6ICEoaXNDb25zdGFudChpc1VwZGF0YWJsZSkgJiYgaXNVcGRhdGFibGUudmFsdWUgPT09IGZhbHNlKVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uTW9kZShcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW4sXG5cdHRhcmdldENhcGFiaWxpdGllczogVGFibGVDYXBhYmlsaXR5UmVzdHJpY3Rpb25cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghbGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0fVxuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3MgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRsZXQgc2VsZWN0aW9uTW9kZSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzPy5zZWxlY3Rpb25Nb2RlO1xuXHRsZXQgYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW10sXG5cdFx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnM6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFtdLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRmYWxzZVxuXHQpO1xuXHRsZXQgaXNQYXJlbnREZWxldGFibGUsIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHVuZGVmaW5lZCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHRpZiAoc2VsZWN0aW9uTW9kZSAmJiBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk5vbmUpIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk11bHRpO1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0aWZFbHNlKGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksIGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLCBjb25zdGFudChcIk5vbmVcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUpIHtcblx0XHRcdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdFx0XHRcdHJldHVybiBzZWxlY3Rpb25Nb2RlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIXNlbGVjdGlvbk1vZGUgfHwgc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5BdXRvKSB7XG5cdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdH1cblxuXHRpZiAoXG5cdFx0aGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb24sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSB8fFxuXHRcdGhhc0N1c3RvbUFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKG1hbmlmZXN0QWN0aW9ucylcblx0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdH1cblx0YUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucyA9IGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdGlzRW50aXR5U2V0XG5cdCk7XG5cdGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9ucyk7XG5cblx0Ly8gTm8gYWN0aW9uIHJlcXVpcmluZyBhIGNvbnRleHQ6XG5cdGlmIChhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCAmJiBhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRpZiAoIWlzRW50aXR5U2V0KSB7XG5cdFx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRpZkVsc2UoZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdFx0Ly8gRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0XHR9IGVsc2UgaWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0XHQvLyBFbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTm9uZTtcblx0XHR9XG5cdFx0Ly8gVGhlcmUgYXJlIGFjdGlvbnMgcmVxdWlyaW5nIGEgY29udGV4dDpcblx0fSBlbHNlIGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlIHx8IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLFxuXHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL0VudGl0eVNldCBkZWxldGFibGU6XG5cdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlKSB7XG5cdFx0cmV0dXJuIFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdFx0Ly9FbnRpdHlTZXQgbm90IGRlbGV0YWJsZTpcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKC4uLmFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMuY29uY2F0KGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zKSksXG5cdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXRyaWV2ZSBhbGwgdGFibGUgYWN0aW9ucyBmcm9tIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSBsaW5lSXRlbUFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8QmFzZUFjdGlvbiwgQmFzZUFjdGlvbj59IFRoZSB0YWJsZSBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyhsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCB2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdGNvbnN0IHRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGNvbnN0IGhpZGRlblRhYmxlQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0XHRsZXQgdGFibGVBY3Rpb246IEFubm90YXRpb25BY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQhKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSAmJlxuXHRcdFx0XHQhZGF0YUZpZWxkLklubGluZSAmJlxuXHRcdFx0XHQhZGF0YUZpZWxkLkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qga2V5ID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdFx0XHR0YWJsZUFjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdFx0XHRub3QoXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVhbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24oKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdGhpZGRlblRhYmxlQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZClcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBY3Rpb24pIHtcblx0XHRcdFx0dGFibGVBY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0dGFibGVBY3Rpb25zOiB0YWJsZUFjdGlvbnMsXG5cdFx0aGlkZGVuVGFibGVBY3Rpb25zOiBoaWRkZW5UYWJsZUFjdGlvbnNcblx0fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3JpdGljYWxpdHlCaW5kaW5nQnlFbnVtKENyaXRpY2FsaXR5RW51bTogRW51bVZhbHVlPENyaXRpY2FsaXR5VHlwZT4pIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk7XG5cdHN3aXRjaCAoQ3JpdGljYWxpdHlFbnVtKSB7XG5cdFx0Y2FzZSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiOlxuXHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlVJLkNyaXRpY2FsaXR5VHlwZS9Dcml0aWNhbFwiOlxuXHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVUkuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlXCI6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJVSS5Dcml0aWNhbGl0eVR5cGUvSW5mb3JtYXRpb25cIjpcblx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJVSS5Dcml0aWNhbGl0eVR5cGUvTmV1dHJhbFwiOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fVxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhcblx0Y3JpdGljYWxpdHlBbm5vdGF0aW9uOiBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Q3JpdGljYWxpdHlUeXBlPiB8IEVudW1WYWx1ZTxDcml0aWNhbGl0eVR5cGU+IHwgdW5kZWZpbmVkLFxuXHRpc0RyYWZ0Um9vdDogYm9vbGVhbixcblx0dGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGVcbik6IEV4cHJlc3Npb248TWVzc2FnZVR5cGU+IHtcblx0bGV0IGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uOiBNZXNzYWdlVHlwZSB8IEV4cHJlc3Npb248TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0aWYgKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikge1xuXHRcdGlmICh0eXBlb2YgY3JpdGljYWxpdHlBbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGFubm90YXRpb25FeHByZXNzaW9uKGNyaXRpY2FsaXR5QW5ub3RhdGlvbikgYXMgRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT47XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVudW0gVmFsdWUgc28gd2UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0YXRpYyBwYXJ0XG5cdFx0XHRkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiA9IGdldENyaXRpY2FsaXR5QmluZGluZ0J5RW51bShjcml0aWNhbGl0eUFubm90YXRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGlzRHJhZnRSb290ICYmIERyYWZ0LklzTmV3T2JqZWN0LFxuXHRcdE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uIGFzIE1lc3NhZ2VUeXBlLFxuXHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFtkZWZhdWx0SGlnaGxpZ2h0Um93RGVmaW5pdGlvbiwgYmluZGluZ0V4cHJlc3Npb24oYGZpbHRlcmVkTWVzc2FnZXNgLCBcImludGVybmFsXCIpXSxcblx0XHRcdHRhYmxlRm9ybWF0dGVycy5yb3dIaWdobGlnaHRpbmcsXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0KVxuXHQpO1xufVxuXG5mdW5jdGlvbiBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb25bXCJjcmVhdGVcIl0ge1xuXHRjb25zdCBuYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUgfHwgbmF2aWdhdGlvblNldHRpbmdzPy5kZXRhaWw7XG5cblx0Ly8gY3Jvc3MtYXBwXG5cdGlmIChuYXZpZ2F0aW9uPy5vdXRib3VuZCAmJiBuYXZpZ2F0aW9uLm91dGJvdW5kRGV0YWlsICYmIG5hdmlnYXRpb25TZXR0aW5ncz8uY3JlYXRlKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1vZGU6IFwiRXh0ZXJuYWxcIixcblx0XHRcdG91dGJvdW5kOiBuYXZpZ2F0aW9uLm91dGJvdW5kLFxuXHRcdFx0b3V0Ym91bmREZXRhaWw6IG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3M6IG5hdmlnYXRpb25TZXR0aW5nc1xuXHRcdH07XG5cdH1cblxuXHRsZXQgbmV3QWN0aW9uO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gaW4tYXBwXG5cdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucztcblx0XHRuZXdBY3Rpb24gPSB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiB8fCB0YXJnZXRBbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uOyAvLyBUT0RPOiBJcyB0aGVyZSByZWFsbHkgbm8gJ05ld0FjdGlvbicgb24gRHJhZnROb2RlPyB0YXJnZXRBbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGU/Lk5ld0FjdGlvblxuXG5cdFx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93ICYmIG5ld0FjdGlvbikge1xuXHRcdFx0Ly8gQSBjb21iaW5hdGlvbiBvZiAnQ3JlYXRpb25Sb3cnIGFuZCAnTmV3QWN0aW9uJyBkb2VzIG5vdCBtYWtlIHNlbnNlXG5cdFx0XHQvLyBUT0RPOiBPciBkb2VzIGl0P1xuXHRcdFx0dGhyb3cgRXJyb3IoYENyZWF0aW9uIG1vZGUgJyR7Q3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93fScgY2FuIG5vdCBiZSB1c2VkIHdpdGggYSBjdXN0b20gJ25ldycgYWN0aW9uICgke25ld0FjdGlvbn0pYCk7XG5cdFx0fVxuXHRcdGlmIChuYXZpZ2F0aW9uPy5yb3V0ZSkge1xuXHRcdFx0Ly8gcm91dGUgc3BlY2lmaWVkXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0XHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0XHRcdG5ld0FjdGlvbjogbmV3QWN0aW9uPy50b1N0cmluZygpLFxuXHRcdFx0XHRuYXZpZ2F0ZVRvVGFyZ2V0OiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlID8gbmF2aWdhdGlvbi5yb3V0ZSA6IHVuZGVmaW5lZCAvLyBuYXZpZ2F0ZSBvbmx5IGluIE5ld1BhZ2UgbW9kZVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvLyBubyBuYXZpZ2F0aW9uIG9yIG5vIHJvdXRlIHNwZWNpZmllZCAtIGZhbGxiYWNrIHRvIGlubGluZSBjcmVhdGUgaWYgb3JpZ2luYWwgY3JlYXRpb24gbW9kZSB3YXMgJ05ld1BhZ2UnXG5cdGlmICh0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5OZXdQYWdlKSB7XG5cdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLklubGluZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bW9kZTogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlLFxuXHRcdGFwcGVuZDogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRlQXRFbmQsXG5cdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKClcblx0fTtcbn1cblxuY29uc3QgX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdHRhcmdldFBhdGg6IHN0cmluZ1xuKSB7XG5cdGxldCBwcmVzc1Byb3BlcnR5LCBuYXZpZ2F0aW9uVGFyZ2V0O1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPE1lc3NhZ2VUeXBlPiA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0aWYgKG5hdmlnYXRpb25TZXR0aW5ncyAmJiBsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRuYXZpZ2F0aW9uVGFyZ2V0ID0gbmF2aWdhdGlvblNldHRpbmdzLmRpc3BsYXk/LnRhcmdldCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5vdXRib3VuZDtcblx0XHRpZiAobmF2aWdhdGlvblRhcmdldCkge1xuXHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCggJGNvbnRyb2xsZXIgLCdcIiArIG5hdmlnYXRpb25UYXJnZXQgKyBcIicsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9KVwiO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGV0YWlsPy5yb3V0ZTtcblx0XHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRcdFx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LFxuXHRcdFx0XHRcdCEhdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZSxcblx0XHRcdFx0XHR0YXJnZXRFbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHByZXNzUHJvcGVydHkgPVxuXHRcdFx0XHRcdFwiQVBJLm9uVGFibGVSb3dQcmVzcygkZXZlbnQsICRjb250cm9sbGVyLCAkeyRwYXJhbWV0ZXJzPmJpbmRpbmdDb250ZXh0fSwgeyBjYWxsRXh0ZW5zaW9uOiB0cnVlLCB0YXJnZXRQYXRoOiAnXCIgK1xuXHRcdFx0XHRcdHRhcmdldFBhdGggK1xuXHRcdFx0XHRcdFwiJywgZWRpdGFibGUgOiBcIiArXG5cdFx0XHRcdFx0KHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnRSb290IHx8IHRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlXG5cdFx0XHRcdFx0XHQ/IFwiISR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LmdldFByb3BlcnR5KCdJc0FjdGl2ZUVudGl0eScpXCJcblx0XHRcdFx0XHRcdDogXCJ1bmRlZmluZWRcIikgK1xuXHRcdFx0XHRcdFwifSlcIjsgLy9OZWVkIHRvIGFjY2VzcyB0byBEcmFmdFJvb3QgYW5kIERyYWZ0Tm9kZSAhISEhISEhXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gZ2V0SGlnaGxpZ2h0Um93QmluZGluZyhsaW5lSXRlbUFubm90YXRpb24uYW5ub3RhdGlvbnM/LlVJPy5Dcml0aWNhbGl0eSwgZmFsc2UsIHRhcmdldEVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCByb3dOYXZpZ2F0ZWRFeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFtiaW5kaW5nRXhwcmVzc2lvbihcIi9kZWVwZXN0UGF0aFwiLCBcImludGVybmFsXCIpXSxcblx0XHR0YWJsZUZvcm1hdHRlcnMubmF2aWdhdGVkUm93LFxuXHRcdHRhcmdldEVudGl0eVR5cGVcblx0KTtcblx0cmV0dXJuIHtcblx0XHRwcmVzczogcHJlc3NQcm9wZXJ0eSxcblx0XHRhY3Rpb246IHByZXNzUHJvcGVydHkgPyBcIk5hdmlnYXRpb25cIiA6IHVuZGVmaW5lZCxcblx0XHRyb3dIaWdobGlnaHRpbmc6IGNvbXBpbGVCaW5kaW5nKGNyaXRpY2FsaXR5UHJvcGVydHkpLFxuXHRcdHJvd05hdmlnYXRlZDogY29tcGlsZUJpbmRpbmcocm93TmF2aWdhdGVkRXhwcmVzc2lvbilcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbHVtbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gY29sdW1uc1RvQmVDcmVhdGVkIFRoZSBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGFubm90YXRpb25Db2x1bW5zIFRoZSBhcnJheSBvZiBjb2x1bW5zIGNyZWF0ZWQgYmFzZWQgb24gTGluZUl0ZW0gYW5ub3RhdGlvbnMuXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lcy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHRhYmxlIHR5cGUuXG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1uW119IFRoZSBjb2x1bW4gZnJvbSB0aGUgZW50aXR5VHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Q29sdW1uc0Zyb21FbnRpdHlUeXBlID0gZnVuY3Rpb24oXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGVcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgdGFibGVDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0Ly8gQ2F0Y2ggYWxyZWFkeSBleGlzdGluZyBjb2x1bW5zIC0gd2hpY2ggd2VyZSBhZGRlZCBiZWZvcmUgYnkgTGluZUl0ZW0gQW5ub3RhdGlvbnNcblx0XHRjb25zdCBleGlzdHMgPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiB7XG5cdFx0XHRyZXR1cm4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5Lm5hbWU7XG5cdFx0fSk7XG5cblx0XHQvLyBpZiB0YXJnZXQgdHlwZSBleGlzdHMsIGl0IGlzIGEgY29tcGxleCBwcm9wZXJ0eSBhbmQgc2hvdWxkIGJlIGlnbm9yZWRcblx0XHRpZiAoIXByb3BlcnR5LnRhcmdldFR5cGUgJiYgIWV4aXN0cykge1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dGFibGVUeXBlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLnByb3BlcnR5SW5mb3MgPSByZWxhdGVkUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Y29sdW1uSW5mby5leHBvcnRTZXR0aW5ncyA9IHtcblx0XHRcdFx0XHQuLi5jb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb2x1bW5JbmZvLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gYWRkaXRpb25hbFByb3BlcnR5TmFtZXM7XG5cdFx0XHRcdC8vIENyZWF0ZSBjb2x1bW5zIGZvciBhZGRpdGlvbmFsIHByb3BlcnRpZXMgaWRlbnRpZmllZCBmb3IgQUxQIHVzZSBjYXNlLlxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGFibGVDb2x1bW5zLnB1c2goY29sdW1uSW5mbyk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgY29sdW1uIGRlZmluaXRpb24gZnJvbSBhIHByb3BlcnR5LlxuICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgZm9yIHdoaWNoIHRoZSBjb2x1bW4gaXMgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bGxQcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVQYXRoIFRoZSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdXNlRGF0YUZpZWxkUHJlZml4IFNob3VsZCBiZSBwcmVmaXhlZCB3aXRoIFwiRGF0YUZpZWxkOjpcIiwgZWxzZSBpdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggXCJQcm9wZXJ0eTo6XCJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXZhaWxhYmxlRm9yQWRhcHRhdGlvbiBEZWNpZGVzIHdoZXRoZXIgY29sdW1uIHNob3VsZCBiZSBhdmFpbGFibGUgZm9yIGFkYXB0YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nW119IG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgYWxsIG5vbiBzb3J0YWJsZSBjb2x1bW4gbmFtZXNcbiAqIEBwYXJhbSB7QWdncmVnYXRpb25IZWxwZXJ9IGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbkhlbHBlciBmb3IgdGhlIGVudGl0eVxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbn0gVGhlIGFubm90YXRpb24gY29sdW1uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eSA9IGZ1bmN0aW9uKFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmcsXG5cdHVzZURhdGFGaWVsZFByZWZpeDogYm9vbGVhbixcblx0YXZhaWxhYmxlRm9yQWRhcHRhdGlvbjogYm9vbGVhbixcblx0bm9uU29ydGFibGVDb2x1bW5zOiBzdHJpbmdbXSxcblx0YWdncmVnYXRpb25IZWxwZXI6IEFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4ge1xuXHRjb25zdCBuYW1lID0gdXNlRGF0YUZpZWxkUHJlZml4ID8gcmVsYXRpdmVQYXRoIDogXCJQcm9wZXJ0eTo6XCIgKyByZWxhdGl2ZVBhdGg7XG5cdGNvbnN0IGtleSA9ICh1c2VEYXRhRmllbGRQcmVmaXggPyBcIkRhdGFGaWVsZDo6XCIgOiBcIlByb3BlcnR5OjpcIikgKyByZXBsYWNlU3BlY2lhbENoYXJzKHJlbGF0aXZlUGF0aCk7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPSBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgcHJvcGVydHkpO1xuXHRjb25zdCBpc0hpZGRlbiA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcHJvcGVydHkubmFtZSA/IF9zbGljZUF0U2xhc2gocHJvcGVydHkubmFtZSwgdHJ1ZSwgZmFsc2UpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0dyb3VwOiBib29sZWFuID0gZ3JvdXBQYXRoICE9IHByb3BlcnR5Lm5hbWU7XG5cdGNvbnN0IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5OiBib29sZWFuID0gbmFtZS5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xO1xuXHRjb25zdCBleHBvcnRTZXR0aW5ncyA9IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0PyB7XG5cdFx0XHRcdHRlbXBsYXRlOiBnZXRUYXJnZXRWYWx1ZU9uRGF0YVBvaW50KHByb3BlcnR5KVxuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRyZXR1cm4ge1xuXHRcdGtleToga2V5LFxuXHRcdGlzR3JvdXBhYmxlOiAhaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkgJiYgIWlzSGlkZGVuID8gYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkgOiBmYWxzZSxcblx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0bGFiZWw6IF9nZXRMYWJlbChwcm9wZXJ0eSwgaXNHcm91cCksXG5cdFx0Z3JvdXBMYWJlbDogaXNHcm91cCA/IF9nZXRMYWJlbChwcm9wZXJ0eSkgOiBudWxsLFxuXHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogbnVsbCxcblx0XHRhbm5vdGF0aW9uUGF0aDogZnVsbFByb3BlcnR5UGF0aCxcblx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0Ly8gQSBmYWtlIHByb3BlcnR5IHdhcyBjcmVhdGVkIGZvciB0aGUgVGFyZ2V0VmFsdWUgdXNlZCBvbiBEYXRhUG9pbnRzLCB0aGlzIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW4gYW5kIG5vbiBzb3J0YWJsZVxuXHRcdGF2YWlsYWJpbGl0eTpcblx0XHRcdCFhdmFpbGFibGVGb3JBZGFwdGF0aW9uIHx8IGlzSGlkZGVuIHx8IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5ID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkFkYXB0YXRpb24sXG5cdFx0bmFtZTogbmFtZSxcblx0XHRyZWxhdGl2ZVBhdGg6IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5XG5cdFx0XHQ/IChwcm9wZXJ0eSBhcyBhbnkpLmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdD8uVGFyZ2V0Py4kdGFyZ2V0Py5WYWx1ZT8ucGF0aCB8fCAocHJvcGVydHkgYXMgYW55KS5WYWx1ZS5wYXRoXG5cdFx0XHQ6IHJlbGF0aXZlUGF0aCxcblx0XHRzb3J0YWJsZTogIWlzSGlkZGVuICYmIG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHJlbGF0aXZlUGF0aCkgPT09IC0xICYmICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSxcblx0XHRpc0tleTogcHJvcGVydHkuaXNLZXksXG5cdFx0aXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHk6IGlzRGF0YVBvaW50RmFrZVByb3BlcnR5LFxuXHRcdGV4cG9ydFNldHRpbmdzOiBleHBvcnRTZXR0aW5nc1xuXHR9IGFzIEFubm90YXRpb25UYWJsZUNvbHVtbjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBib29sZWFuIHRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgZm9yIHZhbGlkIGNvbHVtbnMsIGZhbHNlIGZvciBpbnZhbGlkIGNvbHVtbnNcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IF9pc1ZhbGlkQ29sdW1uID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gISFkYXRhRmllbGQuSW5saW5lO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0Ly8gVG9kbzogUmVwbGFjZSB3aXRoIHByb3BlciBMb2cgc3RhdGVtZW50IG9uY2UgYXZhaWxhYmxlXG5cdFx0Ly8gIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBEYXRhRmllbGQgQWJzdHJhY3QgdHlwZTogXCIgKyBkYXRhRmllbGQuJFR5cGUpO1xuXHR9XG59O1xuXG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnR5IGFuZCBkYXRhRmllbGQuXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eX0gcHJvcGVydHkgRW50aXR5IHR5cGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcGFyYW0gaXNHcm91cFxuICogQHJldHVybnMge3N0cmluZ30gTGFiZWwgb2YgdGhlIHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldExhYmVsID0gZnVuY3Rpb24ocHJvcGVydHk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSwgaXNHcm91cDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFwcm9wZXJ0eSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0aWYgKGlzUHJvcGVydHkocHJvcGVydHkpKSB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRGVmYXVsdCA9IHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRpZiAoZGF0YUZpZWxkRGVmYXVsdCAmJiAhZGF0YUZpZWxkRGVmYXVsdC5xdWFsaWZpZXIgJiYgZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkRGVmYXVsdC5MYWJlbD8udmFsdWVPZigpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihwcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkubmFtZSkpO1xuXHR9IGVsc2UgaWYgKGlzRGF0YUZpZWxkVHlwZXMocHJvcGVydHkpKSB7XG5cdFx0aWYgKCEhaXNHcm91cCAmJiBwcm9wZXJ0eS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgcHJvcGVydHkuVmFsdWU/LiR0YXJnZXQ/Lm5hbWVcblx0XHRcdClcblx0XHQpO1xuXHR9IGVsc2UgaWYgKHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkgfHwgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0fVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUHJvcGVydHlJbmZvIGZvciBlYWNoIGlkZW50aWZpZWQgcHJvcGVydHkgY29uc3VtZWQgYnkgYSBMaW5lSXRlbS5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFByb3BlcnR5Pn0gY29sdW1uc1RvQmVDcmVhdGVkIElkZW50aWZpZWQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBleGlzdGluZ0NvbHVtbnMgVGhlIGxpc3Qgb2YgY29sdW1ucyBjcmVhdGVkIGZvciBMaW5lSXRlbXMgYW5kIFByb3BlcnRpZXMgb2YgZW50aXR5VHlwZS5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbiBuYW1lcyB3aGljaCBjYW5ub3QgYmUgc29ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIGZvciB0aGUgTGluZUl0ZW1cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZC5cbiAqL1xuY29uc3QgX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zID0gZnVuY3Rpb24oXG5cdGNvbHVtbnNUb0JlQ3JlYXRlZDogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+LFxuXHRleGlzdGluZ0NvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdO1xuXHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdE9iamVjdC5rZXlzKGNvbHVtbnNUb0JlQ3JlYXRlZCkuZm9yRWFjaChuYW1lID0+IHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSxcblx0XHRcdGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG5hbWUpLFxuXHRcdFx0Ly8gQ2hlY2sgd2hldGhlciB0aGUgcmVsYXRlZCBjb2x1bW4gYWxyZWFkeSBleGlzdHMuXG5cdFx0XHRyZWxhdGVkQ29sdW1uID0gZXhpc3RpbmdDb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAocmVsYXRlZENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDYXNlIDE6IEtleSBjb250YWlucyBEYXRhRmllbGQgcHJlZml4IHRvIGVuc3VyZSBhbGwgcHJvcGVydHkgY29sdW1ucyBoYXZlIHRoZSBzYW1lIGtleSBmb3JtYXQuXG5cdFx0XHQvLyBOZXcgY3JlYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaXMgc2V0IHRvIGhpZGRlbi5cblx0XHRcdHJlbGF0ZWRDb2x1bW5zLnB1c2goXG5cdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdG5vblNvcnRhYmxlQ29sdW1ucyxcblx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHJlbGF0ZWRDb2x1bW4uYW5ub3RhdGlvblBhdGggIT09IGFubm90YXRpb25QYXRoIHx8XG5cdFx0XHQocmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zICYmIHJlbGF0ZWRDb2x1bW4ucHJvcGVydHlJbmZvcy5pbmRleE9mKG5hbWUpICE9PSAtMSlcblx0XHQpIHtcblx0XHRcdC8vIENhc2UgMjogVGhlIGV4aXN0aW5nIGNvbHVtbiBwb2ludHMgdG8gYSBMaW5lSXRlbSAob3IpXG5cdFx0XHQvLyBDYXNlIDM6IFRoaXMgaXMgYSBzZWxmIHJlZmVyZW5jZSBmcm9tIGFuIGV4aXN0aW5nIGNvbHVtbiBhbmRcblx0XHRcdC8vIGJvdGggY2FzZXMgcmVxdWlyZSBhIGR1bW15IFByb3BlcnR5SW5mbyBmb3Igc2V0dGluZyBjb3JyZWN0IGV4cG9ydCBzZXR0aW5ncy5cblxuXHRcdFx0Y29uc3QgbmV3TmFtZSA9IFwiUHJvcGVydHk6OlwiICsgbmFtZTtcblxuXHRcdFx0Ly8gQ2hlY2tpbmcgd2hldGhlciB0aGUgcmVsYXRlZCBwcm9wZXJ0eSBjb2x1bW4gaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIGEgcHJldmlvdXMgaXRlcmF0aW9uLlxuXHRcdFx0aWYgKCFleGlzdGluZ0NvbHVtbnMuc29tZShjb2x1bW4gPT4gY29sdW1uLm5hbWUgPT09IG5ld05hbWUpKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSBhIG5ldyBwcm9wZXJ0eSBjb2x1bW4gd2l0aCAnUHJvcGVydHk6OicgcHJlZml4LFxuXHRcdFx0XHQvLyBTZXQgaXQgdG8gaGlkZGVuIGFzIGl0IGlzIG9ubHkgY29uc3VtZWQgYnkgQ29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChcblx0XHRcdFx0XHRnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5KFxuXHRcdFx0XHRcdFx0cHJvcGVydHksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdG5hbWUsXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdFx0YWdncmVnYXRpb25IZWxwZXIsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lTWFwW25hbWVdID0gbmV3TmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBwcm9wZXJ0eSAnbmFtZScgaGFzIGJlZW4gcHJlZml4ZWQgd2l0aCAnUHJvcGVydHk6OicgZm9yIHVuaXF1ZW5lc3MuXG5cdC8vIFVwZGF0ZSB0aGUgc2FtZSBpbiBvdGhlciBwcm9wZXJ0eUluZm9zW10gcmVmZXJlbmNlcyB3aGljaCBwb2ludCB0byB0aGlzIHByb3BlcnR5LlxuXHRleGlzdGluZ0NvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuXHRcdGNvbHVtbi5wcm9wZXJ0eUluZm9zID0gY29sdW1uLnByb3BlcnR5SW5mb3M/Lm1hcChwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mbyk7XG5cdFx0Y29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zID0gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPy5tYXAoXG5cdFx0XHRwcm9wZXJ0eUluZm8gPT4gcmVsYXRlZFByb3BlcnR5TmFtZU1hcFtwcm9wZXJ0eUluZm9dID8/IHByb3BlcnR5SW5mb1xuXHRcdCk7XG5cdH0pO1xuXG5cdHJldHVybiByZWxhdGVkQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0dGluZyB0aGUgQ29sdW1uIE5hbWVcbiAqIElmIGl0IHBvaW50cyB0byBhIERhdGFGaWVsZCB3aXRoIG9uZSBwcm9wZXJ0eSBvciBEYXRhUG9pbnQgd2l0aCBvbmUgcHJvcGVydHksIGl0IHdpbGwgdXNlIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBoZXJlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhpc3RpbmcgZmxleCBjaGFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERpZmZlcmVudCBEYXRhRmllbGQgdHlwZXMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBuYW1lIG9mIGFubm90YXRpb24gY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2dldEFubm90YXRpb25Db2x1bW5OYW1lID0gZnVuY3Rpb24oZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSB7XG5cdC8vIFRoaXMgaXMgbmVlZGVkIGFzIHdlIGhhdmUgZmxleGliaWxpdHkgY2hhbmdlcyBhbHJlYWR5IHRoYXQgd2UgaGF2ZSB0byBjaGVjayBhZ2FpbnN0XG5cdGlmIChpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZCkpIHtcblx0XHRyZXR1cm4gZGF0YUZpZWxkLlZhbHVlPy5wYXRoO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8ucGF0aCkge1xuXHRcdC8vIFRoaXMgaXMgZm9yIHJlbW92aW5nIGR1cGxpY2F0ZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSwgJ1Byb2dyZXNzJyBQcm9wZXJ0eSBpcyByZW1vdmVkIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIERhdGFQb2ludFxuXHRcdHJldHVybiAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZS5wYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdH1cbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgd2l0aCByZXNwZWN0IHRvIHRoZSByb290IGVudGl0eS5cbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGBEYXRhRmllbGRgIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWxhdGl2ZSBwYXRoXG4gKi9cbmNvbnN0IF9nZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBzdHJpbmcge1xuXHRsZXQgcmVsYXRpdmVQYXRoOiBzdHJpbmcgPSBcIlwiO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8ucGF0aDtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdFx0cmVsYXRpdmVQYXRoID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py52YWx1ZTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiByZWxhdGl2ZVBhdGg7XG59O1xuXG5jb25zdCBfc2xpY2VBdFNsYXNoID0gZnVuY3Rpb24ocGF0aDogc3RyaW5nLCBpc0xhc3RTbGFzaDogYm9vbGVhbiwgaXNMYXN0UGFydDogYm9vbGVhbikge1xuXHRjb25zdCBpU2xhc2hJbmRleCA9IGlzTGFzdFNsYXNoID8gcGF0aC5sYXN0SW5kZXhPZihcIi9cIikgOiBwYXRoLmluZGV4T2YoXCIvXCIpO1xuXG5cdGlmIChpU2xhc2hJbmRleCA9PT0gLTEpIHtcblx0XHRyZXR1cm4gcGF0aDtcblx0fVxuXHRyZXR1cm4gaXNMYXN0UGFydCA/IHBhdGguc3Vic3RyaW5nKGlTbGFzaEluZGV4ICsgMSwgcGF0aC5sZW5ndGgpIDogcGF0aC5zdWJzdHJpbmcoMCwgaVNsYXNoSW5kZXgpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBDb2xsZWN0aW9uIG9mIG5vbi1zb3J0YWJsZSBjb2x1bW4gbmFtZXMgYXMgcGVyIGFubm90YXRpb25cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb2x1bW4gaXMgc29ydGFibGVcbiAqL1xuY29uc3QgX2lzQ29sdW1uU29ydGFibGUgPSBmdW5jdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG5cdGxldCBpc1NvcnRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cdGlmIChub25Tb3J0YWJsZUNvbHVtbnMuaW5kZXhPZihwcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdC8vIENvbHVtbiBpcyBub3QgbWFya2VkIGFzIG5vbi1zb3J0YWJsZSB2aWEgYW5ub3RhdGlvblxuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0aXNTb3J0YWJsZSA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdFx0XHQvLyBBY3Rpb24gY29sdW1ucyBhcmUgbm90IHNvcnRhYmxlXG5cdFx0XHRcdGlzU29ydGFibGUgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpc1NvcnRhYmxlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGRlZmF1bHQgZm9ybWF0IG9wdGlvbnMgZm9yIHRleHQgZmllbGRzIGluIGEgdGFibGUuXG4gKlxuICogQHJldHVybnMge0Zvcm1hdE9wdGlvbnNUeXBlfSBDb2xsZWN0aW9uIG9mIGZvcm1hdCBvcHRpb25zIHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpOiBGb3JtYXRPcHRpb25zVHlwZSB7XG5cdHJldHVybiB7XG5cdFx0dGV4dExpbmVzRGlzcGxheTogNCxcblx0XHR0ZXh0TGluZXNFZGl0OiA0LFxuXHRcdHRleHRNYXhMaW5lczogMFxuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgbGluZSBpdGVtcyBmcm9tIG1ldGFkYXRhIGFubm90YXRpb25zLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvbiBDb2xsZWN0aW9uIG9mIGRhdGEgZmllbGRzIHdpdGggdGhlaXIgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxpemF0aW9uUGF0aCBUaGUgdmlzdWFsaXphdGlvbiBwYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21Bbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBUYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKSxcblx0XHRhbm5vdGF0aW9uQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10gPSBbXSxcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PiA9IHt9LFxuXHRcdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10gPVxuXHRcdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LlNvcnRSZXN0cmljdGlvbnNcblx0XHRcdFx0Py5Ob25Tb3J0YWJsZVByb3BlcnRpZXMgYXMgRWRtLlByb3BlcnR5UGF0aFtdKT8ubWFwKChwcm9wZXJ0eTogUHJvcGVydHlQYXRoKSA9PiBwcm9wZXJ0eS52YWx1ZSkgPz8gW10sXG5cdFx0dGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0dGFibGVUeXBlOiBUYWJsZVR5cGUgPSB0YWJsZU1hbmlmZXN0U2V0dGluZ3M/LnRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblxuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgTGluZUl0ZW0gQW5ub3RhdGlvblxuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGxpbmVJdGVtID0+IHtcblx0XHRcdGlmICghX2lzVmFsaWRDb2x1bW4obGluZUl0ZW0pKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0XHRpc0RhdGFGaWVsZFR5cGVzKGxpbmVJdGVtKSAmJiBsaW5lSXRlbS5WYWx1ZT8uJHRhcmdldD8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0PyBnZXRTZW1hbnRpY09iamVjdFBhdGgoY29udmVydGVyQ29udGV4dCwgbGluZUl0ZW0pXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCByZWxhdGl2ZVBhdGggPSBfZ2V0UmVsYXRpdmVQYXRoKGxpbmVJdGVtKTtcblx0XHRcdC8vIERldGVybWluZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25zdW1lZCBieSB0aGlzIExpbmVJdGVtLlxuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnRpZXNJbmZvOiBDb21wbGV4UHJvcGVydHlJbmZvID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkobGluZUl0ZW0sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgPSBfc2xpY2VBdFNsYXNoKHJlbGF0aXZlUGF0aCwgdHJ1ZSwgZmFsc2UpO1xuXHRcdFx0Y29uc3QgaXNHcm91cDogYm9vbGVhbiA9IGdyb3VwUGF0aCAhPSByZWxhdGl2ZVBhdGg7XG5cdFx0XHRjb25zdCBzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IF9nZXRMYWJlbChsaW5lSXRlbSwgaXNHcm91cCk7XG5cdFx0XHRjb25zdCBuYW1lID0gX2dldEFubm90YXRpb25Db2x1bW5OYW1lKGxpbmVJdGVtKTtcblx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2goe1xuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQobGluZUl0ZW0pLFxuXHRcdFx0XHR0eXBlOiBDb2x1bW5UeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGxhYmVsOiBzTGFiZWwsXG5cdFx0XHRcdGdyb3VwTGFiZWw6IGlzR3JvdXAgPyBfZ2V0TGFiZWwobGluZUl0ZW0pIDogbnVsbCxcblx0XHRcdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGxpbmVJdGVtLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBpc0RhdGFGaWVsZEFsd2F5c0hpZGRlbihsaW5lSXRlbSkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCxcblx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0cmVsYXRpdmVQYXRoOiByZWxhdGl2ZVBhdGgsXG5cdFx0XHRcdHNvcnRhYmxlOiBfaXNDb2x1bW5Tb3J0YWJsZShsaW5lSXRlbSwgcmVsYXRpdmVQYXRoLCBub25Tb3J0YWJsZUNvbHVtbnMpLFxuXHRcdFx0XHRwcm9wZXJ0eUluZm9zOiByZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gcmVsYXRlZFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zOiBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwID8gYWRkaXRpb25hbFByb3BlcnR5TmFtZXMgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGV4cG9ydFNldHRpbmdzOiB7XG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHdpZHRoOiBsaW5lSXRlbS5hbm5vdGF0aW9ucz8uSFRNTDU/LkNzc0RlZmF1bHRzPy53aWR0aCB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiBnZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKCksXG5cdFx0XHRcdGV4cG9ydENvbnRhY3RQcm9wZXJ0eTogcmVsYXRlZFByb3BlcnRpZXNJbmZvLmV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5XG5cdFx0XHR9IGFzIEFubm90YXRpb25UYWJsZUNvbHVtbik7XG5cblx0XHRcdC8vIENvbGxlY3QgaW5mb3JtYXRpb24gb2YgcmVsYXRlZCBjb2x1bW5zIHRvIGJlIGNyZWF0ZWQuXG5cdFx0XHRyZWxhdGVkUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDcmVhdGUgY29sdW1ucyBmb3IgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGlkZW50aWZpZWQgZm9yIEFMUCB1c2UgY2FzZS5cblx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdC8vIEludGVudGlvbmFsIG92ZXJ3cml0ZSBhcyB3ZSByZXF1aXJlIG9ubHkgb25lIG5ldyBQcm9wZXJ0eUluZm8gZm9yIGEgcmVsYXRlZCBQcm9wZXJ0eS5cblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW25hbWVdO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBHZXQgY29sdW1ucyBmcm9tIHRoZSBQcm9wZXJ0aWVzIG9mIEVudGl0eVR5cGVcblx0bGV0IHRhYmxlQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tRW50aXR5VHlwZShcblx0XHRjb2x1bW5zVG9CZUNyZWF0ZWQsXG5cdFx0ZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR0YWJsZVR5cGVcblx0KTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChhbm5vdGF0aW9uQ29sdW1ucyk7XG5cblx0Ly8gQ3JlYXRlIGEgcHJvcGVydHlJbmZvIGZvciBlYWNoIHJlbGF0ZWQgcHJvcGVydHkuXG5cdGNvbnN0IHJlbGF0ZWRDb2x1bW5zID0gX2NyZWF0ZVJlbGF0ZWRDb2x1bW5zKGNvbHVtbnNUb0JlQ3JlYXRlZCwgdGFibGVDb2x1bW5zLCBub25Tb3J0YWJsZUNvbHVtbnMsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHR0YWJsZUNvbHVtbnMgPSB0YWJsZUNvbHVtbnMuY29uY2F0KHJlbGF0ZWRDb2x1bW5zKTtcblxuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgY2hlY2tzIGFnYWluc3QgZXhpc3RpbmcgcHJvcGVydGllcyBhbHJlYWR5IGFkZGVkIGJ5IGFubm90YXRpb25zLlxuICogSWYgYSBub3QgeWV0IHN0b3JlZCBwcm9wZXJ0eSBpcyBmb3VuZCBpdCBhZGRzIGl0IGZvciBzb3J0aW5nIGFuZCBmaWx0ZXJpbmcgb25seSB0byB0aGUgYW5ub3RhdGlvbkNvbHVtbnMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgdW5kZWZpbmVkfSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHJldHVybnMge3N0cmluZ1tdfSBUaGUgY29sdW1ucyBmcm9tIHRoZSBhbm5vdGF0aW9uc1xuICovXG5jb25zdCBfZ2V0UHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uKFxuXHRwcm9wZXJ0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlXG4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdGxldCBtYXRjaGVkUHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0bWF0Y2hlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5maW5kKGZ1bmN0aW9uKGFubm90YXRpb25Db2x1bW4pIHtcblx0XHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwcm9wZXJ0eVBhdGggJiYgYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLm5hbWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhcblx0XHRcdFx0XHR7IFtwcm9wZXJ0eVBhdGhdOiBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCkgfSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMucHVzaChyZWxhdGVkQ29sdW1uc1swXSk7XG5cdFx0XHRcdHJldHVybiByZWxhdGVkQ29sdW1uc1swXS5uYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWRQcm9wZXJ0aWVzO1xufTtcblxuY29uc3QgX2FwcGVuZEN1c3RvbVRlbXBsYXRlID0gZnVuY3Rpb24ocHJvcGVydGllczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRyZXR1cm4gcHJvcGVydGllc1xuXHRcdC5tYXAocHJvcGVydHkgPT4ge1xuXHRcdFx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmluZGV4T2YocHJvcGVydHkpfX1gO1xuXHRcdH0pXG5cdFx0LmpvaW4oYCR7XCJcXG5cIn1gKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0YWJsZSBjb2x1bW4gcHJvcGVydHkgdmFsdWUgYmFzZWQgb24gY2VydGFpbiBjb25kaXRpb25zLlxuICpcbiAqIE1hbmlmZXN0IGRlZmluZWQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSAvIGFubm90YXRpb24gY29sdW1uc1xuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgY3VzdG9tIGNvbHVtbiBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIHthbnl9IHByb3BlcnR5IFRoZSBjb2x1bW4gcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSB7YW55fSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQW5ub3RhdGlvbkNvbHVtbiBXaGV0aGVyIHRoZSBjb2x1bW4sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gY29sdW1uLlxuICogQHJldHVybnMge2FueX0gRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKHByb3BlcnR5OiBhbnksIGRlZmF1bHRWYWx1ZTogYW55LCBpc0Fubm90YXRpb25Db2x1bW46IGJvb2xlYW4pOiBhbnkge1xuXHRpZiAocHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gY29sdW1uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBjb2x1bW4ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiBpc0Fubm90YXRpb25Db2x1bW4gPyB1bmRlZmluZWQgOiBkZWZhdWx0VmFsdWU7XG5cdH1cblx0Ly8gUmV0dXJuIHdoYXQgaXMgZGVmaW5lZCBpbiBtYW5pZmVzdC5cblx0cmV0dXJuIHByb3BlcnR5O1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRhYmxlIGNvbHVtbiBkZWZpbml0aW9ucyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGNvbHVtbnNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQ29sdW1uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPn0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgbWFuaWZlc3RcbiAqL1xuY29uc3QgZ2V0Q29sdW1uc0Zyb21NYW5pZmVzdCA9IGZ1bmN0aW9uKFxuXHRjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFRhYmxlQ29sdW1uPixcblx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+IHtcblx0Y29uc3QgaW50ZXJuYWxDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21Db2x1bW4+ID0ge307XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gY29sdW1ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29sdW1uID0gY29sdW1uc1trZXldO1xuXHRcdC8vIFRvIGlkZW50aWZ5IHRoZSBhbm5vdGF0aW9uIGNvbHVtbiBwcm9wZXJ0eSBvdmVyd3JpdGUgdmlhIG1hbmlmZXN0IHVzZS1jYXNlLlxuXHRcdGNvbnN0IGlzQW5ub3RhdGlvbkNvbHVtbiA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IGNvbHVtbi5rZXkgPT09IGtleSk7XG5cdFx0S2V5SGVscGVyLnZhbGlkYXRlS2V5KGtleSk7XG5cdFx0Y29uc3QgcHJvcGVydHlJbmZvczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSBfZ2V0UHJvcGVydHlOYW1lcyhcblx0XHRcdG1hbmlmZXN0Q29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucyxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRlbnRpdHlUeXBlXG5cdFx0KTtcblxuXHRcdGludGVybmFsQ29sdW1uc1trZXldID0ge1xuXHRcdFx0a2V5OiBrZXksXG5cdFx0XHRpZDogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0bmFtZTogXCJDdXN0b21Db2x1bW46OlwiICsga2V5LFxuXHRcdFx0aGVhZGVyOiBtYW5pZmVzdENvbHVtbi5oZWFkZXIsXG5cdFx0XHR3aWR0aDogbWFuaWZlc3RDb2x1bW4ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0aG9yaXpvbnRhbEFsaWduOiBfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZShtYW5pZmVzdENvbHVtbj8uaG9yaXpvbnRhbEFsaWduLCBIb3Jpem9udGFsQWxpZ24uQmVnaW4sIGlzQW5ub3RhdGlvbkNvbHVtbiksXG5cdFx0XHR0eXBlOiBtYW5pZmVzdENvbHVtbi50eXBlID09PSBcIlNsb3RcIiA/IENvbHVtblR5cGUuU2xvdCA6IENvbHVtblR5cGUuRGVmYXVsdCxcblx0XHRcdGF2YWlsYWJpbGl0eTogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/LmF2YWlsYWJpbGl0eSwgQXZhaWxhYmlsaXR5VHlwZS5EZWZhdWx0LCBpc0Fubm90YXRpb25Db2x1bW4pLFxuXHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0Q29sdW1uLnRlbXBsYXRlIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RDb2x1bW4ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0Fubm90YXRpb25Db2x1bW4gPyB1bmRlZmluZWQgOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdENvbHVtbiwgbmF2aWdhdGlvblNldHRpbmdzLCB0cnVlKSxcblx0XHRcdHNldHRpbmdzOiBtYW5pZmVzdENvbHVtbi5zZXR0aW5ncyxcblx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdHByb3BlcnR5SW5mb3M6IHByb3BlcnR5SW5mb3MsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiB7XG5cdFx0XHRcdC4uLmdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUoKSxcblx0XHRcdFx0Li4ubWFuaWZlc3RDb2x1bW4uZm9ybWF0T3B0aW9uc1xuXHRcdFx0fSxcblx0XHRcdGV4cG9ydFNldHRpbmdzOiB7XG5cdFx0XHRcdHRlbXBsYXRlOiBwcm9wZXJ0eUluZm9zID8gX2FwcGVuZEN1c3RvbVRlbXBsYXRlKHByb3BlcnR5SW5mb3MpIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRmaWVsZExhYmVsOiBwcm9wZXJ0eUluZm9zID8gbWFuaWZlc3RDb2x1bW4uaGVhZGVyIDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gaW50ZXJuYWxDb2x1bW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFAxM25Nb2RlKFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBiQW5hbHl0aWNhbFRhYmxlID0gdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIjtcblx0aWYgKHRhYmxlTWFuaWZlc3RTZXR0aW5ncz8udGFibGVTZXR0aW5ncz8ucGVyc29uYWxpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0XHRjb25zdCBwZXJzb25hbGl6YXRpb246IGFueSA9IHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzLnBlcnNvbmFsaXphdGlvbjtcblx0XHRpZiAocGVyc29uYWxpemF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUYWJsZSBwZXJzb25hbGl6YXRpb24gZnVsbHkgZW5hYmxlZC5cblx0XHRcdHJldHVybiBiQW5hbHl0aWNhbFRhYmxlID8gXCJTb3J0LENvbHVtbixGaWx0ZXIsR3JvdXAsQWdncmVnYXRlXCIgOiBcIlNvcnQsQ29sdW1uLEZpbHRlclwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHBlcnNvbmFsaXphdGlvbiA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0XHRpZiAocGVyc29uYWxpemF0aW9uLnNvcnQpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uY29sdW1uKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkNvbHVtblwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZmlsdGVyKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uZ3JvdXAgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdH1cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uYWdncmVnYXRlICYmIGJBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQWdncmVnYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24ubGVuZ3RoID4gMCA/IGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIikgOiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE5vIHBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIlNvcnRcIik7XG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wpIHtcblx0XHRcdC8vIEZlYXR1cmUgcGFyaXR5IHdpdGggVjIuXG5cdFx0XHQvLyBFbmFibGUgdGFibGUgZmlsdGVyaW5nIGJ5IGRlZmF1bHQgb25seSBpbiBjYXNlIG9mIENvbnRyb2wgbGV2ZWwgdmFyaWFudCBtYW5hZ2VtZW50LlxuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiR3JvdXBcIik7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0fVxuXHRcdHJldHVybiBhUGVyc29uYWxpemF0aW9uLmpvaW4oXCIsXCIpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB2aXNpYmlsaXR5IGZvciBEZWxldGUgYnV0dG9uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25QYXRoXG4gKiBAcGFyYW0gaXNUYXJnZXREZWxldGFibGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZyxcblx0aXNUYXJnZXREZWxldGFibGU6IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRGVsZXRlSGlkZGVuOiBhbnkgPSBjb21waWxlQmluZGluZyhcblx0XHRjdXJyZW50RW50aXR5U2V0XG5cdFx0XHQ/IGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdChjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZSxcblx0XHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IG5hdlByb3AubmFtZSlcblx0XHRcdCAgKVxuXHRcdFx0OiBjb25zdGFudChmYWxzZSlcblx0KTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHQvL2RvIG5vdCBzaG93IGNhc2UgdGhlIGRlbGV0ZSBidXR0b24gaWYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIGlzIGZhbHNlXG5cdGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgaXNEZWxldGVIaWRkZW4gIT09IFwidHJ1ZVwiKSB7XG5cdFx0Ly9EZWxldGUgSGlkZGVuIGluIGNhc2Ugb2YgdHJ1ZSBhbmQgcGF0aCBiYXNlZFxuXHRcdGlmIChpc0RlbGV0ZUhpZGRlbiAmJiBpc0RlbGV0ZUhpZGRlbiAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAhJFwiICsgaXNEZWxldGVIaWRkZW4gKyBcIiAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0aXNEZWxldGVIaWRkZW4gPT09IFwidHJ1ZVwiIHx8XG5cdFx0IWlzVGFyZ2V0RGVsZXRhYmxlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRpZiAoaXNEZWxldGVIaWRkZW4gJiYgaXNEZWxldGVIaWRkZW4gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIFwiez0gISRcIiArIGlzRGVsZXRlSGlkZGVuICsgXCIgJiYgJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxpdHlNYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBlbmFibGVNYXNzRWRpdEZyb21NYW5pZmVzdDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdHJldHVybiBlbmFibGVNYXNzRWRpdEZyb21NYW5pZmVzdCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdD8gY29tcGlsZUJpbmRpbmcoVUkuSXNFZGl0YWJsZSlcblx0XHQ6IGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdmlzaWJpbGl0eSBmb3IgQ3JlYXRlIGJ1dHRvblxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25CZWhhdmlvdXIgVGhlIGJlaGF2aW9yIGZvciB0aGUgY3JlYXRpb25cbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgJ2NyZWF0ZSBoaWRkZW4nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2libGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlIHwgXCJFeHRlcm5hbFwiLFxuXHRpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW46IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjdXJyZW50RW50aXR5U2V0XG5cdFx0PyBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0KGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5DcmVhdGVIaWRkZW4gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4pIHx8IGZhbHNlLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcChuYXZQcm9wID0+IG5hdlByb3AubmFtZSlcblx0XHQgIClcblx0XHQ6IGNvbnN0YW50KGZhbHNlKTtcblx0Ly8gaWYgdGhlcmUgaXMgYSBjdXN0b20gbmV3IGFjdGlvbiB0aGUgY3JlYXRlIGJ1dHRvbiB3aWxsIGJlIGJvdW5kIGFnYWluc3QgdGhpcyBuZXcgYWN0aW9uIChpbnN0ZWFkIG9mIGEgUE9TVCBhY3Rpb24pLlxuXHQvLyBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgY3JlYXRlIGJ1dHRvbiB0aGVuIGRlcGVuZHMgb24gdGhlIG5ldyBhY3Rpb24ncyBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiAoaW5zdGVhZCBvZiB0aGUgaW5zZXJ0UmVzdHJpY3Rpb25zKTpcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gdHJ1ZSBvciB1bmRlZmluZWQgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gZmFsc2UgLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gPSBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRjb25zdCBzaG93Q3JlYXRlRm9yTmV3QWN0aW9uID0gbmV3QWN0aW9uTmFtZVxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdLmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdFx0W10sXG5cdFx0XHRcdHRydWVcblx0XHQgIClcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHQvLyAtIElmIGl0J3Mgc3RhdGljYWxseSBub3QgaW5zZXJ0YWJsZSAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLSBJZiBjcmVhdGUgaXMgc3RhdGljYWxseSBoaWRkZW4gLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdC8vIC0gSWYgaXQncyBhbiBBTFAgdGVtcGxhdGUgLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdC8vIC1cblx0Ly8gLSBPdGhlcndpc2Vcblx0Ly8gXHQgLSBJZiB0aGUgY3JlYXRlIG1vZGUgaXMgZXh0ZXJuYWwgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgLSBJZiB3ZSdyZSBvbiB0aGUgbGlzdCByZXBvcnQgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgLSBPdGhlcndpc2Vcblx0Ly8gXHQgICAtIFRoaXMgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0b3IoXG5cdFx0XHRvcihcblx0XHRcdFx0ZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgZmFsc2UpLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0luc2VydGFibGUpLCBlcXVhbChpc0luc2VydGFibGUsIGZhbHNlKSwgZXF1YWwoc2hvd0NyZWF0ZUZvck5ld0FjdGlvbiwgdW5kZWZpbmVkKSlcblx0XHRcdCksXG5cdFx0XHRpc0NvbnN0YW50KGlzQ3JlYXRlSGlkZGVuKSAmJiBlcXVhbChpc0NyZWF0ZUhpZGRlbiwgdHJ1ZSksXG5cdFx0XHRvcihcblx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb24gPyBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnModmlld0NvbmZpZ3VyYXRpb24pIDogZmFsc2UsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHRcdClcblx0XHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdG9yKGNyZWF0aW9uTW9kZSA9PT0gXCJFeHRlcm5hbFwiLCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCksXG5cdFx0XHR0cnVlLFxuXHRcdFx0YW5kKG5vdChpc0NyZWF0ZUhpZGRlbiksIFVJLklzRWRpdGFibGUpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdmlzaWJpbGl0eSBmb3IgQ3JlYXRlIGJ1dHRvblxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25CZWhhdmlvdXJcbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgY3JlYXRlaGlkZGVuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlZChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y3JlYXRpb25CZWhhdmlvdXI6IFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb25bXCJjcmVhdGVcIl0sXG5cdGlzSW5zZXJ0YWJsZTogRXhwcmVzc2lvbjxib29sZWFuPixcblx0cGFzdGVFbmFibGVkSW5NYW5pZmVzdDogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBJZiBjcmVhdGUgaXMgbm90IHZpc2libGUgLT4gaXQncyBub3QgZW5hYmxlZFxuXHQvLyBJZiBjcmVhdGUgaXMgdmlzaWJsZSAtPlxuXHQvLyBcdCBJZiBpdCdzIGluIHRoZSBMaXN0UmVwb3J0IC0+IG5vdCBlbmFibGVkXG5cdC8vXHQgSWYgaXQncyBpbnNlcnRhYmxlIC0+IGVuYWJsZWRcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXN0ZUVuYWJsZWRJbk1hbmlmZXN0ICYmIGVxdWFsKGdldENyZWF0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgY3JlYXRpb25CZWhhdmlvdXIubW9kZSwgaXNJbnNlcnRhYmxlLCB2aWV3Q29uZmlndXJhdGlvbiksIHRydWUpLFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlICYmIGlzSW5zZXJ0YWJsZSxcblx0XHRmYWxzZVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IHNvcnQgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gU29ydCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRTb3J0Q29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzb3J0Q29uZGl0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/LlNvcnRPcmRlcikge1xuXHRcdGNvbnN0IHNvcnRlcnM6IFNvcnRlclR5cGVbXSA9IFtdO1xuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSB7XG5cdFx0XHRzb3J0ZXJzOiBzb3J0ZXJzXG5cdFx0fTtcblx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Tb3J0T3JkZXIuZm9yRWFjaChjb25kaXRpb24gPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gKGNvbmRpdGlvbi5Qcm9wZXJ0eSBhcyBQcm9wZXJ0eVBhdGgpPy4kdGFyZ2V0Py5uYW1lO1xuXHRcdFx0Y29uc3Qgc29ydENvbHVtbiA9IGNvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uLm5hbWUgPT09IHByb3BlcnR5TmFtZSkgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0c29ydENvbHVtbj8ucHJvcGVydHlJbmZvcz8uZm9yRWFjaChyZWxhdGVkUHJvcGVydHlOYW1lID0+IHtcblx0XHRcdFx0Ly8gQ29tcGxleCBQcm9wZXJ0eUluZm8uIEFkZCBlYWNoIHJlbGF0ZWQgcHJvcGVydHkgZm9yIHNvcnRpbmcuXG5cdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiByZWxhdGVkUHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdGRlc2NlbmRpbmc6ICEhY29uZGl0aW9uLkRlc2NlbmRpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFzb3J0Q29sdW1uPy5wcm9wZXJ0eUluZm9zPy5sZW5ndGgpIHtcblx0XHRcdFx0Ly8gTm90IGEgY29tcGxleCBQcm9wZXJ0eUluZm8uIENvbnNpZGVyIHRoZSBwcm9wZXJ0eSBpdHNlbGYgZm9yIHNvcnRpbmcuXG5cdFx0XHRcdGNvbmRpdGlvbnMuc29ydGVycy5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBwcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRzb3J0Q29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuc29ydGVycy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeShjb25kaXRpb25zKSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gc29ydENvbmRpdGlvbnM7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgcHJvcGVydHlQYXRoIHRvIGFuIGFycmF5IG9mIHByb3BlcnR5SW5mbyBuYW1lcy5cbiAqXG4gKiBAcGFyYW0gcGF0aHMgdGhlIGFycmF5IHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIGNvbHVtbnMgdGhlIGFycmF5IG9mIHByb3BlcnR5SW5mb3NcbiAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHByb3BlcnR5SW5mbyBuYW1lc1xuICovXG5cbmZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMocGF0aHM6IFByb3BlcnR5UGF0aFtdLCBjb2x1bW5zOiBUYWJsZUNvbHVtbltdKTogc3RyaW5nW10ge1xuXHRjb25zdCBpbmZvTmFtZXM6IHN0cmluZ1tdID0gW107XG5cdHBhdGhzLmZvckVhY2goY3VycmVudFBhdGggPT4ge1xuXHRcdGlmIChjdXJyZW50UGF0aD8uJHRhcmdldD8ubmFtZSkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlJbmZvID0gY29sdW1ucy5maW5kKGNvbHVtbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0XHRyZXR1cm4gIWFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyAmJiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gY3VycmVudFBhdGg/LiR0YXJnZXQ/Lm5hbWU7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChwcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0aW5mb05hbWVzLnB1c2gocHJvcGVydHlJbmZvLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIGluZm9OYW1lcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBncm91cCBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRHcm91cENvbmRpdGlvbnMoXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uOiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgZ3JvdXBDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uR3JvdXBCeSkge1xuXHRcdGNvbnN0IGFHcm91cEJ5ID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uR3JvdXBCeSBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRjb25zdCBhR3JvdXBMZXZlbHMgPSBjb252ZXJ0UHJvcGVydHlQYXRoc1RvSW5mb05hbWVzKGFHcm91cEJ5LCBjb2x1bW5zKS5tYXAoaW5mb05hbWUgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogaW5mb05hbWUgfTtcblx0XHR9KTtcblxuXHRcdGdyb3VwQ29uZGl0aW9ucyA9IGFHcm91cExldmVscy5sZW5ndGggPyBKU09OLnN0cmluZ2lmeSh7IGdyb3VwTGV2ZWxzOiBhR3JvdXBMZXZlbHMgfSkgOiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGdyb3VwQ29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyBQcmVzZW50YXRpb24gVmFyaWFudCBhZ2dyZWdhdGUgY29uZGl0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1ByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIFByZXNlbnRhdGlvbiB2YXJpYW50IGFubm90YXRpb25cbiAqIEBwYXJhbSBjb2x1bW5zIENvbnZlcnRlciBwcm9jZXNzZWQgdGFibGUgY29sdW1uc1xuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gR3JvdXAgY29uZGl0aW9ucyBmb3IgYSBQcmVzZW50YXRpb24gdmFyaWFudC5cbiAqL1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBhZ2dyZWdhdGVDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uVG90YWwpIHtcblx0XHRjb25zdCBhVG90YWxzID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uVG90YWwgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0Y29uc3QgYWdncmVnYXRlczogUmVjb3JkPHN0cmluZywgb2JqZWN0PiA9IHt9O1xuXHRcdGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYVRvdGFscywgY29sdW1ucykuZm9yRWFjaChpbmZvTmFtZSA9PiB7XG5cdFx0XHRhZ2dyZWdhdGVzW2luZm9OYW1lXSA9IHt9O1xuXHRcdH0pO1xuXG5cdFx0YWdncmVnYXRlQ29uZGl0aW9ucyA9IEpTT04uc3RyaW5naWZ5KGFnZ3JlZ2F0ZXMpO1xuXHR9XG5cblx0cmV0dXJuIGFnZ3JlZ2F0ZUNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXSxcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/OiBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbiB7XG5cdC8vIE5lZWQgdG8gZ2V0IHRoZSB0YXJnZXRcblx0Y29uc3QgeyBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIH0gPSBzcGxpdFBhdGgodmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0aXRsZTogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0RW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkhlYWRlckluZm8/LlR5cGVOYW1lUGx1cmFsO1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQ7XG5cdGNvbnN0IHBhZ2VNYW5pZmVzdFNldHRpbmdzOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoYXNBYnNvbHV0ZVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCxcblx0XHRwMTNuTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKSxcblx0XHRpZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBUYWJsZUlEKHZpc3VhbGl6YXRpb25QYXRoKSA6IFRhYmxlSUQoY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpLCBcIkxpbmVJdGVtXCIpO1xuXHRjb25zdCB0YXJnZXRDYXBhYmlsaXRpZXMgPSBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IHNlbGVjdGlvbk1vZGUgPSBnZXRTZWxlY3Rpb25Nb2RlKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGhhc0Fic29sdXRlUGF0aCwgdGFyZ2V0Q2FwYWJpbGl0aWVzKTtcblx0bGV0IHRocmVzaG9sZCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyAxMCA6IDMwO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24/Lk1heEl0ZW1zKSB7XG5cdFx0dGhyZXNob2xkID0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24uTWF4SXRlbXMudmFsdWVPZigpIGFzIG51bWJlcjtcblx0fVxuXHRjb25zdCBuYXZpZ2F0aW9uVGFyZ2V0UGF0aCA9IGdldE5hdmlnYXRpb25UYXJnZXRQYXRoKGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRjb25zdCBuYXZpZ2F0aW9uU2V0dGluZ3MgPSBwYWdlTWFuaWZlc3RTZXR0aW5ncy5nZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uVGFyZ2V0UGF0aCk7XG5cdGNvbnN0IGNyZWF0aW9uQmVoYXZpb3VyID0gX2dldENyZWF0aW9uQmVoYXZpb3VyKGxpbmVJdGVtQW5ub3RhdGlvbiwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZTogYW55LCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGlmIChpc1BhcmVudERlbGV0YWJsZT8uY3VycmVudEVudGl0eVJlc3RyaWN0aW9uKSB7XG5cdFx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUsIHRydWUpIDogaXNQYXJlbnREZWxldGFibGU7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNJbnNlcnRhYmxlOiBFeHByZXNzaW9uPGJvb2xlYW4+ID0gaXNQYXRoSW5zZXJ0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cblx0cmV0dXJuIHtcblx0XHRpZDogaWQsXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5U2V0ID8gZW50aXR5U2V0Lm5hbWUgOiBcIlwiLFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuXHRcdHJvdzogX2dldFJvd0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eShcblx0XHRcdGxpbmVJdGVtQW5ub3RhdGlvbixcblx0XHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5ncyxcblx0XHRcdG5hdmlnYXRpb25UYXJnZXRQYXRoXG5cdFx0KSxcblx0XHRwMTNuTW9kZTogcDEzbk1vZGUsXG5cdFx0c2hvdzoge1xuXHRcdFx0XCJkZWxldGVcIjogZ2V0RGVsZXRlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCB0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUsIHZpZXdDb25maWd1cmF0aW9uKSxcblx0XHRcdGNyZWF0ZTogY29tcGlsZUJpbmRpbmcoZ2V0Q3JlYXRlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0LCBjcmVhdGlvbkJlaGF2aW91cj8ubW9kZSwgaXNJbnNlcnRhYmxlKSksXG5cdFx0XHRwYXN0ZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdGdldFBhc3RlRW5hYmxlZChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGNyZWF0aW9uQmVoYXZpb3VyLFxuXHRcdFx0XHRcdGlzSW5zZXJ0YWJsZSxcblx0XHRcdFx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5lbmFibGVQYXN0ZSxcblx0XHRcdFx0XHR2aWV3Q29uZmlndXJhdGlvblxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0bWFzc0VkaXQ6IGdldFZpc2libGl0eU1hc3NFZGl0KGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5lbmFibGVNYXNzRWRpdClcblx0XHR9LFxuXHRcdGRpc3BsYXlNb2RlOiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24pLFxuXHRcdGNyZWF0ZTogY3JlYXRpb25CZWhhdmlvdXIsXG5cdFx0c2VsZWN0aW9uTW9kZTogc2VsZWN0aW9uTW9kZSxcblx0XHRhdXRvQmluZE9uSW5pdDpcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0ICYmXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlICYmXG5cdFx0XHQhKHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudCxcblx0XHR0aHJlc2hvbGQ6IHRocmVzaG9sZCxcblx0XHRzb3J0Q29uZGl0aW9uczogZ2V0U29ydENvbmRpdGlvbnMocHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sIGNvbHVtbnMpLFxuXHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IHBhcmVudEVudGl0eVNldERlbGV0YWJsZSxcblx0XHR0aXRsZTogdGl0bGVcblx0fTtcbn1cblxuZnVuY3Rpb24gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCk7XG5cdGlmIChcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0dGVtcGxhdGVUeXBlID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBTcGxpdCB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIGludG8gdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aCBhbmQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gdmlzdWFsaXphdGlvblBhdGhcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdGxldCBbbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA9PT0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0Ly8gRHJvcCB0cmFpbGluZyBzbGFzaFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHJldHVybiB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIGFubm90YXRpb25QYXRoIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbihcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oc2VsZWN0aW9uVmFyaWFudFBhdGgpO1xuXHRjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvblZhcmlhbnRUeXBlID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblxuXHRpZiAoc2VsZWN0aW9uKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBbXTtcblx0XHRzZWxlY3Rpb24uU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBQcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGlmIChwcm9wZXJ0eU5hbWVzLmluZGV4T2YoUHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdFx0cHJvcGVydHlOYW1lcy5wdXNoKFByb3BlcnR5UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRleHQ6IHNlbGVjdGlvbj8uVGV4dD8udG9TdHJpbmcoKSxcblx0XHRcdHByb3BlcnR5TmFtZXM6IHByb3BlcnR5TmFtZXNcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0Y2hlY2tDb25kZW5zZWRMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZVxuKTogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gKHRhYmxlTWFuaWZlc3RTZXR0aW5ncyAmJiB0YWJsZU1hbmlmZXN0U2V0dGluZ3MudGFibGVTZXR0aW5ncykgfHwge307XG5cdGxldCBxdWlja1NlbGVjdGlvblZhcmlhbnQ6IGFueTtcblx0Y29uc3QgcXVpY2tGaWx0ZXJQYXRoczogeyBhbm5vdGF0aW9uUGF0aDogc3RyaW5nIH1bXSA9IFtdO1xuXHRsZXQgZW5hYmxlRXhwb3J0ID0gdHJ1ZTtcblx0bGV0IGNyZWF0aW9uTW9kZSA9IENyZWF0aW9uTW9kZS5OZXdQYWdlO1xuXHRsZXQgZmlsdGVycztcblx0bGV0IGNyZWF0ZUF0RW5kID0gdHJ1ZTtcblx0bGV0IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgPSBmYWxzZTtcblx0bGV0IGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0bGV0IGNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdGxldCBoaWRlVGFibGVUaXRsZSA9IGZhbHNlO1xuXHRsZXQgdGFibGVUeXBlOiBUYWJsZVR5cGUgPSBcIlJlc3BvbnNpdmVUYWJsZVwiO1xuXHRsZXQgZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRsZXQgc2VsZWN0aW9uTGltaXQgPSAyMDA7XG5cdGxldCBlbmFibGVQYXN0ZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiO1xuXHRjb25zdCBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50ID0gY2hlY2tDb25kZW5zZWRMYXlvdXQgJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5pc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUobGluZUl0ZW1Bbm5vdGF0aW9uKTtcblx0XHR0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnBhdGhzPy5mb3JFYWNoKChwYXRoOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfSkgPT4ge1xuXHRcdFx0cXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gdGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChcIkBcIiArIHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Ly8gcXVpY2tTZWxlY3Rpb25WYXJpYW50ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmIChxdWlja1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0cXVpY2tGaWx0ZXJQYXRocy5wdXNoKHsgYW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGggfSk7XG5cdFx0XHR9XG5cdFx0XHRmaWx0ZXJzID0ge1xuXHRcdFx0XHRxdWlja0ZpbHRlcnM6IHtcblx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnRcblx0XHRcdFx0XHRcdFx0PyBcIns9ICR7cGFnZUludGVybmFsPmhhc1BlbmRpbmdGaWx0ZXJzfSAhPT0gdHJ1ZX1cIlxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0c2hvd0NvdW50czogdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdFx0XHRcdHBhdGhzOiBxdWlja0ZpbHRlclBhdGhzXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSk7XG5cdFx0Y3JlYXRpb25Nb2RlID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/Lm5hbWUgfHwgY3JlYXRpb25Nb2RlO1xuXHRcdGNyZWF0ZUF0RW5kID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgOiB0cnVlO1xuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA9IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb247XG5cdFx0Ly8gaWYgYSBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBwcm92aWRlZCwgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQsIGkuZS4gc2V0IHRvIGZhbHNlXG5cdFx0ZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9ICFjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gPyAhIXRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5kaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIDogZmFsc2U7XG5cdFx0Y29uZGVuc2VkVGFibGVMYXlvdXQgPSB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0ICE9PSB1bmRlZmluZWQgPyB0YWJsZVNldHRpbmdzLmNvbmRlbnNlZFRhYmxlTGF5b3V0IDogZmFsc2U7XG5cdFx0aGlkZVRhYmxlVGl0bGUgPSAhIXRhYmxlU2V0dGluZ3MucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5oaWRlVGFibGVUaXRsZTtcblx0XHR0YWJsZVR5cGUgPSB0YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRpZiAodGFibGVTZXR0aW5ncz8udHlwZSA9PT0gXCJBbmFseXRpY2FsVGFibGVcIiAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHR0YWJsZVR5cGUgPSBcIkdyaWRUYWJsZVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0YWJsZVNldHRpbmdzPy50eXBlKSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzRGVza3RvcCgpICYmIGFnZ3JlZ2F0aW9uSGVscGVyLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHR0YWJsZVR5cGUgPSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IHRhYmxlU2V0dGluZ3MuZW5hYmxlRnVsbFNjcmVlbiB8fCBmYWxzZTtcblx0XHRpZiAoZW5hYmxlRnVsbFNjcmVlbiA9PT0gdHJ1ZSAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCkge1xuXHRcdFx0ZW5hYmxlRnVsbFNjcmVlbiA9IGZhbHNlO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5GVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCk7XG5cdFx0fVxuXHRcdHNlbGVjdGlvbkxpbWl0ID0gdGFibGVTZXR0aW5ncy5zZWxlY3RBbGwgPT09IHRydWUgfHwgdGFibGVTZXR0aW5ncy5zZWxlY3Rpb25MaW1pdCA9PT0gMCA/IDAgOiB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0IHx8IDIwMDtcblx0XHRlbmFibGVQYXN0ZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiICYmIHRhYmxlU2V0dGluZ3MuZW5hYmxlUGFzdGUgIT09IGZhbHNlO1xuXHRcdGVuYWJsZUV4cG9ydCA9XG5cdFx0XHR0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydCAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gdGFibGVTZXR0aW5ncy5lbmFibGVFeHBvcnRcblx0XHRcdFx0OiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBcIk9iamVjdFBhZ2VcIiB8fCBlbmFibGVQYXN0ZTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGZpbHRlcnM6IGZpbHRlcnMsXG5cdFx0dHlwZTogdGFibGVUeXBlLFxuXHRcdGVuYWJsZUZ1bGxTY3JlZW46IGVuYWJsZUZ1bGxTY3JlZW4sXG5cdFx0aGVhZGVyVmlzaWJsZTogIShxdWlja1NlbGVjdGlvblZhcmlhbnQgJiYgaGlkZVRhYmxlVGl0bGUpLFxuXHRcdGVuYWJsZUV4cG9ydDogZW5hYmxlRXhwb3J0LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGNyZWF0ZUF0RW5kOiBjcmVhdGVBdEVuZCxcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhLFxuXHRcdGN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uLFxuXHRcdHVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0OiBjb25kZW5zZWRUYWJsZUxheW91dCAmJiBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50LFxuXHRcdHNlbGVjdGlvbkxpbWl0OiBzZWxlY3Rpb25MaW1pdCxcblx0XHRlbmFibGVQYXN0ZTogZW5hYmxlUGFzdGUsXG5cdFx0c2hvd1Jvd0NvdW50OiAhdGFibGVTZXR0aW5ncz8ucXVpY2tWYXJpYW50U2VsZWN0aW9uPy5zaG93Q291bnRzLFxuXHRcdGVuYWJsZU1hc3NFZGl0OiB0YWJsZVNldHRpbmdzPy5lbmFibGVNYXNzRWRpdFxuXHR9O1xufVxuIl19
2025
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlLnRzIl0sIm5hbWVzIjpbIkNvbHVtblR5cGUiLCJnZXRUYWJsZUFjdGlvbnMiLCJsaW5lSXRlbUFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJuYXZpZ2F0aW9uU2V0dGluZ3MiLCJhVGFibGVBY3Rpb25zIiwiZ2V0VGFibGVBbm5vdGF0aW9uQWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsInRhYmxlQWN0aW9ucyIsImFIaWRkZW5BY3Rpb25zIiwiaGlkZGVuVGFibGVBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImFjdGlvbnMiLCJpc05hdmlnYWJsZSIsImVuYWJsZU9uU2VsZWN0IiwiZW5hYmxlQXV0b1Njcm9sbCIsImVuYWJsZWQiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJnZXRUYWJsZUNvbHVtbnMiLCJhbm5vdGF0aW9uQ29sdW1ucyIsImdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMiLCJtYW5pZmVzdENvbHVtbnMiLCJnZXRDb2x1bW5zRnJvbU1hbmlmZXN0IiwiY29sdW1ucyIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwid2lkdGgiLCJhdmFpbGFiaWxpdHkiLCJzZXR0aW5ncyIsImhvcml6b250YWxBbGlnbiIsImZvcm1hdE9wdGlvbnMiLCJnZXRBZ2dyZWdhdGVEZWZpbml0aW9uc0Zyb21FbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsInRhYmxlQ29sdW1ucyIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJmaW5kQ29sdW1uRnJvbVBhdGgiLCJwYXRoIiwiZmluZCIsImNvbHVtbiIsImFubm90YXRpb25Db2x1bW4iLCJwcm9wZXJ0eUluZm9zIiwidW5kZWZpbmVkIiwicmVsYXRpdmVQYXRoIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzIiwiU2V0IiwiZm9yRWFjaCIsIm9Db2x1bW4iLCJvVGFibGVDb2x1bW4iLCJ1bml0IiwiYWRkIiwibVJhd0RlZmluaXRpb25zIiwiZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMiLCJtUmVzdWx0IiwiYVJhd0NvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJoYXMiLCJuYW1lIiwiaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHkiLCJkZWZhdWx0QWdncmVnYXRlIiwiYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJjb250ZXh0RGVmaW5pbmdQcm9wZXJ0eU5hbWUiLCJwdXNoIiwibGVuZ3RoIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsInVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyIsInRhYmxlVmlzdWFsaXphdGlvbiIsInByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwiY29udHJvbCIsInR5cGUiLCJhZ2dyZWdhdGVzRGVmaW5pdGlvbnMiLCJlbmFibGVBbmFseXRpY3MiLCJhZ2dyZWdhdGVzIiwiYW5ub3RhdGlvbiIsImdyb3VwQ29uZGl0aW9ucyIsImdldEdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJnZXRBZ2dyZWdhdGVDb25kaXRpb25zIiwiZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZDb25maWciLCJPYmplY3QiLCJrZXlzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwibmF2Q29uZmlnRm9yQ29udGV4dFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJzdGFydGluZ0VudGl0eVNldCIsInVwZGF0ZUxpbmtlZFByb3BlcnRpZXMiLCJmaW5kQ29sdW1uQnlQYXRoIiwib1Byb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsIm9Qcm9wIiwic1VuaXQiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJvVW5pdENvbHVtbiIsImRpc3BsYXlNb2RlIiwiZ2V0RGlzcGxheU1vZGUiLCJ0ZXh0QW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsImlzUGF0aEV4cHJlc3Npb24iLCJvVGV4dENvbHVtbiIsInRleHRBcnJhbmdlbWVudCIsInRleHRQcm9wZXJ0eSIsIm1vZGUiLCJjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24iLCJpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50Iiwidmlld0NvbmZpZ3VyYXRpb24iLCJ0YWJsZU1hbmlmZXN0Q29uZmlnIiwiZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24iLCJzcGxpdFBhdGgiLCJuYXZpZ2F0aW9uVGFyZ2V0UGF0aCIsIm9WaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsImdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24iLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwiZW5hYmxlRGF0YVN0YXRlRmlsdGVyIiwiZ2V0VGVtcGxhdGVUeXBlIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiY3JlYXRlRGVmYXVsdFRhYmxlVmlzdWFsaXphdGlvbiIsImdldENvbHVtbnNGcm9tRW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJkYXRhRmllbGQiLCIkVHlwZSIsImFjdGlvbk5hbWUiLCJBY3Rpb24iLCJpbmRleE9mIiwiRGV0ZXJtaW5pbmciLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiYmluZGluZ1BhcmFtZXRlciIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwidGFyZ2V0RXhwcmVzc2lvbiIsImFubm90YXRpb25FeHByZXNzaW9uIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRVSUhpZGRlbkV4cEZvckFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiY3VycmVudEVudGl0eVR5cGUiLCJjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zIiwiaXNCb3VuZCIsInNvdXJjZUVudGl0eVR5cGUiLCJSZXF1aXJlc0NvbnRleHQiLCJJbmxpbmUiLCJ2YWx1ZU9mIiwiVUkiLCJIaWRkZW4iLCJlcXVhbCIsImdldEJpbmRpbmdFeHBGcm9tQ29udGV4dCIsInNvdXJjZSIsInNFeHByZXNzaW9uIiwidmlzaWJsZSIsInNQYXRoIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic05hdmlnYXRpb25QYXRoIiwidGFyZ2V0T2JqZWN0IiwiX3R5cGUiLCJwYXJ0bmVyIiwiYmluZGluZ0V4cHJlc3Npb24iLCJzbGljZSIsImpvaW4iLCJjb25zdGFudCIsImhhc0JvdW5kQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJzb21lIiwiaGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhY3Rpb24iLCJyZXF1aXJlc1NlbGVjdGlvbiIsInRvU3RyaW5nIiwiZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0IiwiYVZpc2libGVQYXRoRXhwcmVzc2lvbnMiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldENhcGFiaWxpdHlSZXN0cmljdGlvbiIsImlzRGVsZXRhYmxlIiwiaXNQYXRoRGVsZXRhYmxlIiwiaXNVcGRhdGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc0NvbnN0YW50IiwidmFsdWUiLCJnZXRTZWxlY3Rpb25Nb2RlIiwidGFyZ2V0Q2FwYWJpbGl0aWVzIiwiU2VsZWN0aW9uTW9kZSIsIk5vbmUiLCJ0YWJsZU1hbmlmZXN0U2V0dGluZ3MiLCJzZWxlY3Rpb25Nb2RlIiwidGFibGVTZXR0aW5ncyIsImFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMiLCJhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9ucyIsImlzUGFyZW50RGVsZXRhYmxlIiwicGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImNvbXBpbGVCaW5kaW5nIiwiTXVsdGkiLCJpZkVsc2UiLCJBdXRvIiwib3IiLCJjb25jYXQiLCJ0YWJsZUFjdGlvbiIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJrZXkiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwibm90IiwiZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkRlZmF1bHQiLCJnZXRIaWdobGlnaHRSb3dCaW5kaW5nIiwiY3JpdGljYWxpdHlBbm5vdGF0aW9uIiwiaXNEcmFmdFJvb3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb24iLCJNZXNzYWdlVHlwZSIsImdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJJbmZvcm1hdGlvbiIsImZvcm1hdFJlc3VsdCIsInRhYmxlRm9ybWF0dGVycyIsInJvd0hpZ2hsaWdodGluZyIsIl9nZXRDcmVhdGlvbkJlaGF2aW91ciIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwibmF2aWdhdGlvbiIsImNyZWF0ZSIsImRldGFpbCIsIm91dGJvdW5kIiwib3V0Ym91bmREZXRhaWwiLCJuZXdBY3Rpb24iLCJ0YXJnZXRBbm5vdGF0aW9ucyIsImdldEVudGl0eVNldCIsIkRyYWZ0Um9vdCIsIk5ld0FjdGlvbiIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJFcnJvciIsInJvdXRlIiwiYXBwZW5kIiwiY3JlYXRlQXRFbmQiLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiTmV3UGFnZSIsIl9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkiLCJ0YXJnZXRQYXRoIiwicHJlc3NQcm9wZXJ0eSIsIm5hdmlnYXRpb25UYXJnZXQiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwiZGlzcGxheSIsInRhcmdldCIsIkNyaXRpY2FsaXR5IiwiRHJhZnROb2RlIiwicm93TmF2aWdhdGVkRXhwcmVzc2lvbiIsIm5hdmlnYXRlZFJvdyIsInByZXNzIiwicm93TmF2aWdhdGVkIiwiY29sdW1uc1RvQmVDcmVhdGVkIiwibm9uU29ydGFibGVDb2x1bW5zIiwidGFibGVUeXBlIiwicHJvcGVydHkiLCJleGlzdHMiLCJ0YXJnZXRUeXBlIiwicmVsYXRlZFByb3BlcnRpZXNJbmZvIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzIiwicmVsYXRlZFByb3BlcnR5TmFtZXMiLCJwcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnR5TmFtZXMiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImNvbHVtbkluZm8iLCJnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3MiLCJ0ZW1wbGF0ZSIsImV4cG9ydFNldHRpbmdzVGVtcGxhdGUiLCJ3cmFwIiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIiwiZnVsbFByb3BlcnR5UGF0aCIsInVzZURhdGFGaWVsZFByZWZpeCIsImF2YWlsYWJsZUZvckFkYXB0YXRpb24iLCJyZXBsYWNlU3BlY2lhbENoYXJzIiwic2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImlzSGlkZGVuIiwiZ3JvdXBQYXRoIiwiX3NsaWNlQXRTbGFzaCIsImlzR3JvdXAiLCJpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSIsImdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQiLCJpc0dyb3VwYWJsZSIsImlzUHJvcGVydHlHcm91cGFibGUiLCJBbm5vdGF0aW9uIiwibGFiZWwiLCJfZ2V0TGFiZWwiLCJncm91cExhYmVsIiwiZ3JvdXAiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJBdmFpbGFiaWxpdHlUeXBlIiwiQWRhcHRhdGlvbiIsIkRhdGFGaWVsZERlZmF1bHQiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiVmFsdWUiLCJzb3J0YWJsZSIsImlzS2V5IiwiX2lzVmFsaWRDb2x1bW4iLCJpc1Byb3BlcnR5IiwiZGF0YUZpZWxkRGVmYXVsdCIsInF1YWxpZmllciIsIkxhYmVsIiwiaXNEYXRhRmllbGRUeXBlcyIsIl9jcmVhdGVSZWxhdGVkQ29sdW1ucyIsImV4aXN0aW5nQ29sdW1ucyIsInJlbGF0ZWRDb2x1bW5zIiwicmVsYXRlZFByb3BlcnR5TmFtZU1hcCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJyZWxhdGVkQ29sdW1uIiwibmV3TmFtZSIsIm1hcCIsInByb3BlcnR5SW5mbyIsIl9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZSIsIl9nZXRSZWxhdGl2ZVBhdGgiLCJpc0xhc3RTbGFzaCIsImlzTGFzdFBhcnQiLCJpU2xhc2hJbmRleCIsIl9pc0NvbHVtblNvcnRhYmxlIiwicHJvcGVydHlQYXRoIiwiaXNTb3J0YWJsZSIsImdldERlZmF1bHRGb3JtYXRPcHRpb25zRm9yVGFibGUiLCJ0ZXh0TGluZXNEaXNwbGF5IiwidGV4dExpbmVzRWRpdCIsIkNhcGFiaWxpdGllcyIsIlNvcnRSZXN0cmljdGlvbnMiLCJOb25Tb3J0YWJsZVByb3BlcnRpZXMiLCJsaW5lSXRlbSIsImNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5Iiwic0xhYmVsIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJIVE1MNSIsIkNzc0RlZmF1bHRzIiwiZXhwb3J0Q29udGFjdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJfZ2V0UHJvcGVydHlOYW1lcyIsIm1hdGNoZWRQcm9wZXJ0aWVzIiwicmVzb2x2ZVBhdGgiLCJfYXBwZW5kQ3VzdG9tVGVtcGxhdGUiLCJfZ2V0TWFuaWZlc3RPckRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzQW5ub3RhdGlvbkNvbHVtbiIsImludGVybmFsQ29sdW1ucyIsIm1hbmlmZXN0Q29sdW1uIiwidmFsaWRhdGVLZXkiLCJpZCIsImhlYWRlciIsIkhvcml6b250YWxBbGlnbiIsIkJlZ2luIiwiU2xvdCIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc0FjdGlvbk5hdmlnYWJsZSIsImZpZWxkTGFiZWwiLCJnZXRQMTNuTW9kZSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJhUGVyc29uYWxpemF0aW9uIiwiYkFuYWx5dGljYWxUYWJsZSIsInBlcnNvbmFsaXphdGlvbiIsInNvcnQiLCJmaWx0ZXIiLCJhZ2dyZWdhdGUiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwiZ2V0RGVsZXRlVmlzaWJsZSIsIm5hdmlnYXRpb25QYXRoIiwiaXNUYXJnZXREZWxldGFibGUiLCJjdXJyZW50RW50aXR5U2V0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIm5hdlByb3AiLCJpc0RlbGV0ZUhpZGRlbkV4cHJlc3Npb24iLCJEZWxldGVIaWRkZW4iLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImlzRGVsZXRlSGlkZGVuIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsIkFuYWx5dGljYWxMaXN0UGFnZSIsIkxpc3RSZXBvcnQiLCJpc0JpbmRpbmciLCJnZXRFbmFibGVtZW50TWFzc0VkaXQiLCJiTWFzc0VkaXRWaXNpYmxlIiwiaXNQYXJlbnRVcGRhdGFibGUiLCJjdXJyZW50RW50aXR5UmVzdHJpY3Rpb24iLCJvRXhwcmVzc2lvbiIsImdldFZpc2liaWxpdHlNYXNzRWRpdCIsImVudGl0eVNldCIsImJVcGRhdGVIaWRkZW4iLCJVcGRhdGVIaWRkZW4iLCJiTWFzc0VkaXRFbmFibGVkIiwiZW5hYmxlTWFzc0VkaXQiLCJpU2VsZWN0aW9uTGltaXQiLCJzZWxlY3Rpb25MaW1pdCIsIklzRWRpdGFibGUiLCJhbmQiLCJnZXRDcmVhdGVWaXNpYmxlIiwiaXNJbnNlcnRhYmxlIiwiaXNDcmVhdGVIaWRkZW4iLCJDcmVhdGVIaWRkZW4iLCJuZXdBY3Rpb25OYW1lIiwic2hvd0NyZWF0ZUZvck5ld0FjdGlvbiIsImdldFBhc3RlRW5hYmxlZCIsImNyZWF0aW9uQmVoYXZpb3VyIiwicGFzdGVFbmFibGVkSW5NYW5pZmVzdCIsImdldFNvcnRDb25kaXRpb25zIiwic29ydENvbmRpdGlvbnMiLCJTb3J0T3JkZXIiLCJzb3J0ZXJzIiwiY29uZGl0aW9ucyIsImNvbmRpdGlvbiIsInByb3BlcnR5TmFtZSIsIlByb3BlcnR5Iiwic29ydENvbHVtbiIsInJlbGF0ZWRQcm9wZXJ0eU5hbWUiLCJkZXNjZW5kaW5nIiwiRGVzY2VuZGluZyIsImNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMiLCJwYXRocyIsImluZm9OYW1lcyIsImN1cnJlbnRQYXRoIiwiR3JvdXBCeSIsImFHcm91cEJ5IiwiYUdyb3VwTGV2ZWxzIiwiaW5mb05hbWUiLCJncm91cExldmVscyIsIlRvdGFsIiwiYVRvdGFscyIsInRpdGxlIiwiSGVhZGVySW5mbyIsIlR5cGVOYW1lUGx1cmFsIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJoYXNBYnNvbHV0ZVBhdGgiLCJwMTNuTW9kZSIsIlRhYmxlSUQiLCJ0aHJlc2hvbGQiLCJNYXhJdGVtcyIsImlzUGF0aEluc2VydGFibGUiLCJlbnRpdHlOYW1lIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJyb3ciLCJzaG93IiwicGFzdGUiLCJlbmFibGVQYXN0ZSIsIm1hc3NFZGl0IiwiaXNJbkRpc3BsYXlNb2RlIiwiYXV0b0JpbmRPbkluaXQiLCJwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkIiwidGVtcGxhdGVUeXBlIiwic3Vic3RyIiwiZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24iLCJzZWxlY3Rpb25WYXJpYW50UGF0aCIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJzZWxlY3Rpb24iLCJwcm9wZXJ0eU5hbWVzIiwiU2VsZWN0T3B0aW9ucyIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlByb3BlcnR5UGF0aCIsInRleHQiLCJjaGVja0NvbmRlbnNlZExheW91dCIsInF1aWNrU2VsZWN0aW9uVmFyaWFudCIsInF1aWNrRmlsdGVyUGF0aHMiLCJlbmFibGVFeHBvcnQiLCJmaWx0ZXJzIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImNvbmRlbnNlZFRhYmxlTGF5b3V0IiwiaGlkZVRhYmxlVGl0bGUiLCJlbmFibGVGdWxsU2NyZWVuIiwiaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQiLCJxdWlja1ZhcmlhbnRTZWxlY3Rpb24iLCJxdWlja0ZpbHRlcnMiLCJzaG93Q291bnRzIiwiaXNEZXNrdG9wIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJNYW5pZmVzdCIsIklzc3VlU2V2ZXJpdHkiLCJMb3ciLCJJc3N1ZVR5cGUiLCJGVUxMU0NSRUVOTU9ERV9OT1RfT05fTElTVFJFUE9SVCIsInNlbGVjdEFsbCIsImhlYWRlclZpc2libGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsInNob3dSb3dDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFxTUtBLFU7O2FBQUFBLFU7QUFBQUEsSUFBQUEsVTtBQUFBQSxJQUFBQSxVO0FBQUFBLElBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOztBQThFTDs7Ozs7Ozs7O0FBU08sV0FBU0MsZUFBVCxDQUNOQyxrQkFETSxFQUVOQyxpQkFGTSxFQUdOQyxnQkFITSxFQUlOQyxrQkFKTSxFQUtTO0FBQ2YsUUFBTUMsYUFBYSxHQUFHQyx5QkFBeUIsQ0FBQ0wsa0JBQUQsRUFBcUJDLGlCQUFyQixFQUF3Q0MsZ0JBQXhDLENBQS9DO0FBQ0EsUUFBTUksa0JBQWtCLEdBQUdGLGFBQWEsQ0FBQ0csWUFBekM7QUFDQSxRQUFNQyxjQUFjLEdBQUdKLGFBQWEsQ0FBQ0ssa0JBQXJDO0FBQ0EsV0FBT0Msb0JBQW9CLENBQzFCSixrQkFEMEIsRUFFMUJLLHNCQUFzQixDQUNyQlQsZ0JBQWdCLENBQUNVLCtCQUFqQixDQUFpRFgsaUJBQWpELEVBQW9FWSxPQUQvQyxFQUVyQlgsZ0JBRnFCLEVBR3JCSSxrQkFIcUIsRUFJckJILGtCQUpxQixFQUtyQixJQUxxQixFQU1yQkssY0FOcUIsQ0FGSSxFQVUxQjtBQUNDTSxNQUFBQSxXQUFXLEVBQUUsV0FEZDtBQUVDQyxNQUFBQSxjQUFjLEVBQUUsV0FGakI7QUFHQ0MsTUFBQUEsZ0JBQWdCLEVBQUUsV0FIbkI7QUFJQ0MsTUFBQUEsT0FBTyxFQUFFLFdBSlY7QUFLQ0MsTUFBQUEsOEJBQThCLEVBQUU7QUFMakMsS0FWMEIsQ0FBM0I7QUFrQkE7QUFFRDs7Ozs7Ozs7Ozs7Ozs7QUFVTyxXQUFTQyxlQUFULENBQ05uQixrQkFETSxFQUVOQyxpQkFGTSxFQUdOQyxnQkFITSxFQUlOQyxrQkFKTSxFQUtV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TjdhLE1BQUFBLElBQUksRUFBRW9OLFNBRkE7QUFHTjhOLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFIWjtBQUlOZSxNQUFBQSxhQUFhLEVBQUUsRUFBRXZCLHFCQUFxQixJQUFJTyxjQUEzQixDQUpUO0FBS05MLE1BQUFBLFlBQVksRUFBRUEsWUFMUjtBQU1OaFAsTUFBQUEsWUFBWSxFQUFFQSxZQU5SO0FBT05NLE1BQUFBLFdBQVcsRUFBRUEsV0FQUDtBQVFONE8sTUFBQUEsK0JBQStCLEVBQUVBLCtCQVIzQjtBQVNOQyxNQUFBQSx3QkFBd0IsRUFBRUEsd0JBVHBCO0FBVU5tQixNQUFBQSx1QkFBdUIsRUFBRWxCLG9CQUFvQixJQUFJblksK0JBVjNDO0FBV051VCxNQUFBQSxjQUFjLEVBQUVBLGNBWFY7QUFZTm1ELE1BQUFBLFdBQVcsRUFBRUEsV0FaUDtBQWFONEMsTUFBQUEsWUFBWSxFQUFFLEVBQUM1VCxhQUFELGFBQUNBLGFBQUQsaURBQUNBLGFBQWEsQ0FBRTZTLHFCQUFoQiwyREFBQyx1QkFBc0NFLFVBQXZDLENBYlI7QUFjTnBGLE1BQUFBLGNBQWMsRUFBRTNOLGFBQUYsYUFBRUEsYUFBRix1QkFBRUEsYUFBYSxDQUFFMk47QUFkekIsS0FBUDtBQWdCQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q3JpdGljYWxpdHlUeXBlLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbixcblx0RGF0YUZpZWxkRm9yQW5ub3RhdGlvbixcblx0RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHREYXRhUG9pbnQsXG5cdEVudW1WYWx1ZSxcblx0TGluZUl0ZW0sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdFByb3BlcnR5UGF0aCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGUsXG5cdFNlbGVjdE9wdGlvblR5cGUsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHtcblx0QWN0aW9uVHlwZSxcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0Q3JlYXRpb25Nb2RlLFxuXHRGb3JtYXRPcHRpb25zVHlwZSxcblx0SG9yaXpvbnRhbEFsaWduLFxuXHRNYW5pZmVzdFRhYmxlQ29sdW1uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHROYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbixcblx0U2VsZWN0aW9uTW9kZSxcblx0VGFibGVDb2x1bW5TZXR0aW5ncyxcblx0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBFbnRpdHlUeXBlLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBUYWJsZUlEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyxcblx0Y29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHksXG5cdENvbXBsZXhQcm9wZXJ0eUluZm8sXG5cdGdldFNlbWFudGljT2JqZWN0UGF0aCxcblx0aXNEYXRhRmllbGRBbHdheXNIaWRkZW4sXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QsXG5cdGlzRGF0YUZpZWxkVHlwZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0YmluZGluZ0V4cHJlc3Npb24sXG5cdEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0RXhwcmVzc2lvbixcblx0RXhwcmVzc2lvbk9yUHJpbWl0aXZlLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGlmRWxzZSxcblx0aXNCaW5kaW5nLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgRHJhZnQsIHNpbmdsZXRvblBhdGhWaXNpdG9yLCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVGFibGVGb3JtYXR0ZXJUeXBlc1wiO1xuaW1wb3J0IHtcblx0RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhJbnNlcnRhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0ICogYXMgRWRtIGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuXG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQge1xuXHRpc1Byb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSxcblx0aXNQYXRoRXhwcmVzc2lvbixcblx0Z2V0VGFyZ2V0VmFsdWVPbkRhdGFQb2ludFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuXG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZSwgZ2V0RGlzcGxheU1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5VHlwZSB9IGZyb20gXCIuL0NyaXRpY2FsaXR5XCI7XG5cbmV4cG9ydCB0eXBlIFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24gPSB7XG5cdGF1dG9CaW5kT25Jbml0OiBib29sZWFuO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGU7XG5cdGZpbHRlcklkPzogc3RyaW5nO1xuXHRpZDogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRwMTNuTW9kZT86IHN0cmluZztcblx0cm93Pzoge1xuXHRcdGFjdGlvbj86IHN0cmluZztcblx0XHRwcmVzcz86IHN0cmluZztcblx0XHRyb3dIaWdobGlnaHRpbmc6IEJpbmRpbmdFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHRyb3dOYXZpZ2F0ZWQ6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHNob3c/OiB7XG5cdFx0Y3JlYXRlPzogc3RyaW5nIHwgYm9vbGVhbjtcblx0XHRkZWxldGU/OiBzdHJpbmcgfCBib29sZWFuO1xuXHRcdHBhc3RlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0bWFzc0VkaXQ/OiB7IHZpc2libGU6IGJvb2xlYW4gfCBzdHJpbmc7IGVuYWJsZWQ6IGJvb2xlYW4gfCBzdHJpbmcgfTtcblx0fTtcblx0ZGlzcGxheU1vZGU/OiBib29sZWFuO1xuXHR0aHJlc2hvbGQ6IG51bWJlcjtcblx0ZW50aXR5TmFtZTogc3RyaW5nO1xuXHRzb3J0Q29uZGl0aW9ucz86IHN0cmluZztcblx0Z3JvdXBDb25kaXRpb25zPzogc3RyaW5nO1xuXHRhZ2dyZWdhdGVDb25kaXRpb25zPzogc3RyaW5nO1xuXG5cdC8qKiBDcmVhdGUgbmV3IGVudHJpZXMgKi9cblx0Y3JlYXRlOiBDcmVhdGVCZWhhdmlvdXIgfCBDcmVhdGVCZWhhdmlvdXJFeHRlcm5hbDtcblx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZD86IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBOZXcgZW50cmllcyBhcmUgY3JlYXRlZCB3aXRoaW4gdGhlIGFwcCAoZGVmYXVsdCBjYXNlKVxuICovXG50eXBlIENyZWF0ZUJlaGF2aW91ciA9IHtcblx0bW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRhcHBlbmQ6IEJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGVUb1RhcmdldD86IHN0cmluZztcbn07XG5cbi8qKlxuICogTmV3IGVudHJpZXMgYXJlIGNyZWF0ZWQgYnkgbmF2aWdhdGluZyB0byBzb21lIHRhcmdldFxuICovXG50eXBlIENyZWF0ZUJlaGF2aW91ckV4dGVybmFsID0ge1xuXHRtb2RlOiBcIkV4dGVybmFsXCI7XG5cdG91dGJvdW5kOiBzdHJpbmc7XG5cdG91dGJvdW5kRGV0YWlsOiBOYXZpZ2F0aW9uVGFyZ2V0Q29uZmlndXJhdGlvbltcIm91dGJvdW5kRGV0YWlsXCJdO1xuXHRuYXZpZ2F0aW9uU2V0dGluZ3M6IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbiA9IHtcblx0aXNEZWxldGFibGU6IGJvb2xlYW47XG5cdGlzVXBkYXRhYmxlOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVGaWx0ZXJzQ29uZmlndXJhdGlvbiA9IHtcblx0ZW5hYmxlZD86IHN0cmluZyB8IGJvb2xlYW47XG5cdHBhdGhzOiBbXG5cdFx0e1xuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0XHR9XG5cdF07XG5cdHNob3dDb3VudHM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24gPSB7XG5cdHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdO1xuXHR0ZXh0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0Y3JlYXRlQXRFbmQ6IGJvb2xlYW47XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhOiBib29sZWFuO1xuXHRjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGJvb2xlYW47XG5cdGVuYWJsZUV4cG9ydDogYm9vbGVhbjtcblx0aGVhZGVyVmlzaWJsZTogYm9vbGVhbjtcblx0ZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIFRhYmxlRmlsdGVyc0NvbmZpZ3VyYXRpb24+O1xuXHR0eXBlOiBUYWJsZVR5cGU7XG5cdHNlbGVjdEFsbD86IGJvb2xlYW47XG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXI7XG5cdGVuYWJsZVBhc3RlOiBib29sZWFuO1xuXHRlbmFibGVGdWxsU2NyZWVuOiBib29sZWFuO1xuXHRzaG93Um93Q291bnQ6IGJvb2xlYW47XG5cdGVuYWJsZU1hc3NFZGl0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgVGFibGVUeXBlID0gXCJHcmlkVGFibGVcIiB8IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfCBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXG5lbnVtIENvbHVtblR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsIC8vIERlZmF1bHQgVHlwZVxuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5leHBvcnQgdHlwZSBCYXNlVGFibGVDb2x1bW4gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkOiBzdHJpbmc7XG5cdHdpZHRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eT86IEF2YWlsYWJpbGl0eVR5cGU7XG5cdHR5cGU6IENvbHVtblR5cGU7IC8vT3JpZ2luIG9mIHRoZSBzb3VyY2Ugd2hlcmUgd2UgYXJlIGdldHRpbmcgdGhlIHRlbXBsYXRlZCBpbmZvcm1hdGlvbiBmcm9tLFxuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdHNldHRpbmdzPzogVGFibGVDb2x1bW5TZXR0aW5ncztcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xuXHRwcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRob3Jpem9udGFsQWxpZ24/OiBIb3Jpem9udGFsQWxpZ247XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVGFibGVDb2x1bW4gPSBCYXNlVGFibGVDb2x1bW4gJiB7XG5cdGhlYWRlcj86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25UYWJsZUNvbHVtbiA9IEJhc2VUYWJsZUNvbHVtbiAmIHtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0aXNHcm91cGFibGU/OiBib29sZWFuO1xuXHRpc0tleT86IGJvb2xlYW47XG5cdHVuaXQ/OiBzdHJpbmc7XG5cdGV4cG9ydFNldHRpbmdzPzoge1xuXHRcdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdGZpZWxkTGFiZWw/OiBzdHJpbmc7XG5cdFx0d3JhcD86IGJvb2xlYW47XG5cdH07XG5cdGlzRGF0YVBvaW50RmFrZVRhcmdldFByb3BlcnR5PzogYm9vbGVhbjtcblx0dGV4dEFycmFuZ2VtZW50Pzoge1xuXHRcdHRleHRQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdG1vZGU6IERpc3BsYXlNb2RlO1xuXHR9O1xuXHRleHBvcnRDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdGFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZUNvbHVtbiA9IEN1c3RvbVRhYmxlQ29sdW1uIHwgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXG5leHBvcnQgdHlwZSBDdXN0b21Db2x1bW4gPSBDdXN0b21FbGVtZW50PFRhYmxlQ29sdW1uPjtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRlRGF0YSA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0ZToge1xuXHRcdGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0fTtcblx0cmVsYXRpdmVQYXRoOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlO1xuXHRhbm5vdGF0aW9uOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uO1xuXHRjb250cm9sOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGFnZ3JlZ2F0ZXM/OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPjtcblx0ZW5hYmxlQW5hbHl0aWNzPzogYm9vbGVhbjtcblx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBib29sZWFuO1xuXHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZztcbn07XG5cbnR5cGUgU29ydGVyVHlwZSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjZW5kaW5nOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBhbm5vdGF0aW9uIGJhc2VkIGFuZCBtYW5pZmVzdCBiYXNlZCB0YWJsZSBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7TGluZUl0ZW19IGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbn0gVGhlIGNvbXBsZXRlIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQWN0aW9ucyhcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgYVRhYmxlQWN0aW9ucyA9IGdldFRhYmxlQW5ub3RhdGlvbkFjdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGFBbm5vdGF0aW9uQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMudGFibGVBY3Rpb25zO1xuXHRjb25zdCBhSGlkZGVuQWN0aW9ucyA9IGFUYWJsZUFjdGlvbnMuaGlkZGVuVGFibGVBY3Rpb25zO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLmFjdGlvbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0bmF2aWdhdGlvblNldHRpbmdzLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGFIaWRkZW5BY3Rpb25zXG5cdFx0KSxcblx0XHR7XG5cdFx0XHRpc05hdmlnYWJsZTogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZU9uU2VsZWN0OiBcIm92ZXJ3cml0ZVwiLFxuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogXCJvdmVyd3JpdGVcIixcblx0XHRcdGVuYWJsZWQ6IFwib3ZlcndyaXRlXCIsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IFwib3ZlcndyaXRlXCJcblx0XHR9XG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgY29sdW1ucywgYW5ub3RhdGlvbi1iYXNlZCBhcyB3ZWxsIGFzIG1hbmlmZXN0IGJhc2VkLlxuICogVGhleSBhcmUgc29ydGVkIGFuZCBzb21lIHByb3BlcnRpZXMgY2FuIGJlIG92ZXJ3cml0dGVuIHZpYSB0aGUgbWFuaWZlc3QgKGNoZWNrIG91dCB0aGUga2V5cyB0aGF0IGNhbiBiZSBvdmVyd3JpdHRlbikuXG4gKlxuICogQHBhcmFtIHtMaW5lSXRlbX0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIHtzdHJpbmd9IHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB7TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbn0gbmF2aWdhdGlvblNldHRpbmdzXG4gKiBAcmV0dXJucyB7VGFibGVDb2x1bW5bXX0gUmV0dXJucyBhbGwgdGFibGUgY29sdW1ucyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGVtcGxhdGluZyBvciBwZXJzb25hbGl6YXRpb24gb3IgdGhlaXIgb3JpZ2luXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbHVtbnMoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbik6IFRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCBhbm5vdGF0aW9uQ29sdW1ucyA9IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0Q29sdW1ucyA9IGdldENvbHVtbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5jb2x1bW5zLFxuXHRcdGFubm90YXRpb25Db2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdG5hdmlnYXRpb25TZXR0aW5nc1xuXHQpO1xuXG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhhbm5vdGF0aW9uQ29sdW1ucywgbWFuaWZlc3RDb2x1bW5zLCB7XG5cdFx0d2lkdGg6IFwib3ZlcndyaXRlXCIsXG5cdFx0aXNOYXZpZ2FibGU6IFwib3ZlcndyaXRlXCIsXG5cdFx0YXZhaWxhYmlsaXR5OiBcIm92ZXJ3cml0ZVwiLFxuXHRcdHNldHRpbmdzOiBcIm92ZXJ3cml0ZVwiLFxuXHRcdGhvcml6b250YWxBbGlnbjogXCJvdmVyd3JpdGVcIixcblx0XHRmb3JtYXRPcHRpb25zOiBcIm92ZXJ3cml0ZVwiXG5cdH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXN0b20gYWdncmVnYXRpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW50aXR5VHlwZS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgdGFyZ2V0IGVudGl0eSB0eXBlLlxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHJldHVybnMgVGhlIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLCBvciB1bmRlZmluZWQgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZSA9IGZ1bmN0aW9uKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHR0YWJsZUNvbHVtbnM6IFRhYmxlQ29sdW1uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEFnZ3JlZ2F0ZURhdGE+IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0ZnVuY3Rpb24gZmluZENvbHVtbkZyb21QYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoY29sdW1uID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIEtlZXAgYSBzZXQgb2YgYWxsIGN1cnJlbmN5L3VuaXQgcHJvcGVydGllcywgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb25zaWRlciB0aGVtIGFzIGFnZ3JlZ2F0ZXNcblx0Ly8gVGhleSBhcmUgYWdncmVnYXRlcyBmb3IgdGVjaG5pY2FsIHJlYXNvbnMgKHRvIG1hbmFnZSBtdWx0aS11bml0cyBzaXR1YXRpb25zKSBidXQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIGZyb20gYSB1c2VyIHN0YW5kcG9pbnRcblx0Y29uc3QgbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcyA9IG5ldyBTZXQoKTtcblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi51bml0KSB7XG5cdFx0XHRtQ3VycmVuY3lPclVuaXRQcm9wZXJ0aWVzLmFkZChvVGFibGVDb2x1bW4udW5pdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBtUmF3RGVmaW5pdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBtUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBBZ2dyZWdhdGVEYXRhPiA9IHt9O1xuXG5cdHRhYmxlQ29sdW1ucy5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuXHRcdGNvbnN0IG9UYWJsZUNvbHVtbiA9IG9Db2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdGlmIChvVGFibGVDb2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGgpIHtcblx0XHRcdGNvbnN0IGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gbVJhd0RlZmluaXRpb25zW29UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhdO1xuXG5cdFx0XHQvLyBJZ25vcmUgYWdncmVnYXRlcyBjb3JyZXNwb25kaW5nIHRvIGN1cnJlbmNpZXMgb3IgdW5pdHMgb2YgbWVhc3VyZSBhbmQgZHVtbXkgY3JlYXRlZCBwcm9wZXJ0eSBmb3IgZGF0YXBvaW50IHRhcmdldCBWYWx1ZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhUmF3Q29udGV4dERlZmluaW5nUHJvcGVydGllcyAmJlxuXHRcdFx0XHQhbUN1cnJlbmN5T3JVbml0UHJvcGVydGllcy5oYXMob1RhYmxlQ29sdW1uLm5hbWUpICYmXG5cdFx0XHRcdCFvVGFibGVDb2x1bW4uaXNEYXRhUG9pbnRGYWtlVGFyZ2V0UHJvcGVydHlcblx0XHRcdCkge1xuXHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXSA9IHtcblx0XHRcdFx0XHRkZWZhdWx0QWdncmVnYXRlOiB7fSxcblx0XHRcdFx0XHRyZWxhdGl2ZVBhdGg6IG9UYWJsZUNvbHVtbi5yZWxhdGl2ZVBhdGhcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdGFSYXdDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLmZvckVhY2goY29udGV4dERlZmluaW5nUHJvcGVydHlOYW1lID0+IHtcblx0XHRcdFx0XHRjb25zdCBvQ29sdW1uID0gZmluZENvbHVtbkZyb21QYXRoKGNvbnRleHREZWZpbmluZ1Byb3BlcnR5TmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Db2x1bW4pIHtcblx0XHRcdFx0XHRcdGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzLnB1c2gob0NvbHVtbi5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRtUmVzdWx0W29UYWJsZUNvbHVtbi5uYW1lXS5kZWZhdWx0QWdncmVnYXRlLmNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG1SZXN1bHQ7XG59O1xuXG4vKipcbiAqIFVwZGF0ZXMgYSB0YWJsZSB2aXN1YWxpemF0aW9uIGZvciBhbmFseXRpY2FsIHVzZSBjYXNlcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVWaXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIHRvIGJlIHVwZGF0ZWRcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBUaGUgcHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIChpZiBhbnkpXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVRhYmxlVmlzdWFsaXphdGlvbkZvckFuYWx5dGljcyhcblx0dGFibGVWaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlc1xuKSB7XG5cdGlmICh0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgYWdncmVnYXRlc0RlZmluaXRpb25zID0gZ2V0QWdncmVnYXRlRGVmaW5pdGlvbnNGcm9tRW50aXR5VHlwZShlbnRpdHlUeXBlLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0XHRpZiAoYWdncmVnYXRlc0RlZmluaXRpb25zKSB7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzID0gdHJ1ZTtcblx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hZ2dyZWdhdGVzID0gYWdncmVnYXRlc0RlZmluaXRpb25zO1xuXG5cdFx0XHQvLyBBZGQgZ3JvdXAgYW5kIHNvcnQgY29uZGl0aW9ucyBmcm9tIHRoZSBwcmVzZW50YXRpb24gdmFyaWFudFxuXHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zID0gZ2V0R3JvdXBDb25kaXRpb25zKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLCB0YWJsZVZpc3VhbGl6YXRpb24uY29sdW1ucyk7XG5cdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zID0gZ2V0QWdncmVnYXRlQ29uZGl0aW9ucyhcblx0XHRcdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24sXG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb2x1bW5zXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLnR5cGUgPSBcIkdyaWRUYWJsZVwiOyAvLyBBbmFseXRpY2FsVGFibGUgaXNuJ3QgYSByZWFsIHR5cGUgZm9yIHRoZSBNREM6VGFibGUsIHNvIHdlIGFsd2F5cyBzd2l0Y2ggYmFjayB0byBHcmlkXG5cdH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5hdmlnYXRpb24gdGFyZ2V0IHBhdGggZnJvbSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIFRoZSBuYXZpZ2F0aW9uIHBhdGggdG8gY2hlY2sgaW4gdGhlIG1hbmlmZXN0IHNldHRpbmdzXG4gKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHBhdGggZnJvbSBtYW5pZmVzdCBzZXR0aW5nc1xuICovXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uVGFyZ2V0UGF0aChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggJiYgbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpKSB7XG5cdFx0Y29uc3QgbmF2Q29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChPYmplY3Qua2V5cyhuYXZDb25maWcpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGNvbnN0IG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKGNvbnRleHRQYXRoKTtcblx0aWYgKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoICYmIE9iamVjdC5rZXlzKG5hdkNvbmZpZ0ZvckNvbnRleHRQYXRoKS5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGNvbnRleHRQYXRoO1xuXHR9XG5cblx0cmV0dXJuIGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSAndW5pdCcgYW5kICd0ZXh0QXJyYW5nZW1lbnQnIHByb3BlcnRpZXMgaW4gY29sdW1ucyB3aGVuIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZGlzcGxheWVkIGluIHRoZSB0YWJsZVxuICogQHBhcmFtIHRhYmxlQ29sdW1ucyBUaGUgY29sdW1ucyB0byBiZSB1cGRhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bW5bXSkge1xuXHRmdW5jdGlvbiBmaW5kQ29sdW1uQnlQYXRoKHBhdGg6IHN0cmluZyk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGFibGVDb2x1bW5zLmZpbmQoY29sdW1uID0+IHtcblx0XHRcdGNvbnN0IGFubm90YXRpb25Db2x1bW4gPSBjb2x1bW4gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBwYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0dGFibGVDb2x1bW5zLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0Y29uc3Qgb1RhYmxlQ29sdW1uID0gb0NvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0aWYgKG9UYWJsZUNvbHVtbi5wcm9wZXJ0eUluZm9zID09PSB1bmRlZmluZWQgJiYgb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCkge1xuXHRcdFx0Y29uc3Qgb1Byb3BlcnR5ID0gZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQob1Byb3AgPT4gb1Byb3AubmFtZSA9PT0gb1RhYmxlQ29sdW1uLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRpZiAob1Byb3BlcnR5KSB7XG5cdFx0XHRcdGNvbnN0IHNVbml0ID0gZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkob1Byb3BlcnR5KT8ubmFtZSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eSk/Lm5hbWU7XG5cdFx0XHRcdGlmIChzVW5pdCkge1xuXHRcdFx0XHRcdGNvbnN0IG9Vbml0Q29sdW1uID0gZmluZENvbHVtbkJ5UGF0aChzVW5pdCk7XG5cblx0XHRcdFx0XHRvVGFibGVDb2x1bW4udW5pdCA9IG9Vbml0Q29sdW1uPy5uYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShvUHJvcGVydHkpLFxuXHRcdFx0XHRcdHRleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uVGV4dDtcblx0XHRcdFx0aWYgKGlzUGF0aEV4cHJlc3Npb24odGV4dEFubm90YXRpb24pICYmIGRpc3BsYXlNb2RlICE9PSBcIlZhbHVlXCIpIHtcblx0XHRcdFx0XHRjb25zdCBvVGV4dENvbHVtbiA9IGZpbmRDb2x1bW5CeVBhdGgodGV4dEFubm90YXRpb24ucGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9UZXh0Q29sdW1uICYmIG9UZXh0Q29sdW1uLm5hbWUgIT09IG9UYWJsZUNvbHVtbi5uYW1lKSB7XG5cdFx0XHRcdFx0XHRvVGFibGVDb2x1bW4udGV4dEFycmFuZ2VtZW50ID0ge1xuXHRcdFx0XHRcdFx0XHR0ZXh0UHJvcGVydHk6IG9UZXh0Q29sdW1uLm5hbWUsXG5cdFx0XHRcdFx0XHRcdG1vZGU6IGRpc3BsYXlNb2RlXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudD86IGJvb2xlYW4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdHZpc3VhbGl6YXRpb25QYXRoLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudFxuXHQpO1xuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24obmF2aWdhdGlvblRhcmdldFBhdGgpO1xuXHRjb25zdCBjb2x1bW5zID0gZ2V0VGFibGVDb2x1bW5zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncyk7XG5cblx0Y29uc3Qgb1Zpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSxcblx0XHRhbm5vdGF0aW9uOiBnZXRUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLFxuXHRcdFx0dmlzdWFsaXphdGlvblBhdGgsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZyxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbixcblx0XHRcdHZpZXdDb25maWd1cmF0aW9uXG5cdFx0KSxcblx0XHRjb250cm9sOiB0YWJsZU1hbmlmZXN0Q29uZmlnLFxuXHRcdGFjdGlvbnM6IHJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMoZ2V0VGFibGVBY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQsIG5hdmlnYXRpb25TZXR0aW5ncykpLFxuXHRcdGNvbHVtbnM6IGNvbHVtbnMsXG5cdFx0ZW5hYmxlRGF0YVN0YXRlRmlsdGVyOiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBcIk9iamVjdFBhZ2VcIixcblx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA6IGdldE9wZXJhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbUFubm90YXRpb24pXG5cdH07XG5cblx0dXBkYXRlTGlua2VkUHJvcGVydGllcyhjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksIGNvbHVtbnMpO1xuXHR1cGRhdGVUYWJsZVZpc3VhbGl6YXRpb25Gb3JBbmFseXRpY3MoXG5cdFx0b1Zpc3VhbGl6YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb25cblx0KTtcblxuXHRyZXR1cm4gb1Zpc3VhbGl6YXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VGFibGVWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBUYWJsZVZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCB0YWJsZU1hbmlmZXN0Q29uZmlnID0gZ2V0VGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odW5kZWZpbmVkLCBcIlwiLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSk7XG5cdGNvbnN0IGNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoe30sIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBbXSwgW10sIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcudHlwZSk7XG5cdGNvbnN0IG9WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuVGFibGUsXG5cdFx0YW5ub3RhdGlvbjogZ2V0VGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbih1bmRlZmluZWQsIFwiXCIsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWcsIGNvbHVtbnMpLFxuXHRcdGNvbnRyb2w6IHRhYmxlTWFuaWZlc3RDb25maWcsXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRlbmFibGVEYXRhU3RhdGVGaWx0ZXI6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFwiT2JqZWN0UGFnZVwiLFxuXHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogZ2V0T3BlcmF0aW9uQXZhaWxhYmxlTWFwKHVuZGVmaW5lZClcblx0fTtcblxuXHR1cGRhdGVMaW5rZWRQcm9wZXJ0aWVzKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2x1bW5zKTtcblx0dXBkYXRlVGFibGVWaXN1YWxpemF0aW9uRm9yQW5hbHl0aWNzKG9WaXN1YWxpemF0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIG9WaXN1YWxpemF0aW9uO1xufVxuXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25BdmFpbGFibGVNYXAobGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRpZiAobGluZUl0ZW1Bbm5vdGF0aW9uKSB7XG5cdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmZvckVhY2goZGF0YUZpZWxkID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25OYW1lID0gZGF0YUZpZWxkLkFjdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHRcdGlmIChhY3Rpb25OYW1lPy5pbmRleE9mKFwiL1wiKSA8IDAgJiYgIWRhdGFGaWVsZC5EZXRlcm1pbmluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvblRhcmdldCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ7XG5cblx0XHRcdFx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSA9IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciA9IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZS5zdWJzdHJpbmcoYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpLFxuXHRcdFx0XHRcdFx0XHQvLyBTdHJpcCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZSBmcm9tIE9wZXJhdGlvbkF2YWlsYWJsZSBwYXRoXG5cdFx0XHRcdFx0XHRcdC8vIEZvciBlLmcuIF9pdC9wcm9wZXJ0eTEgLS0+IHByb3BlcnR5MVxuXHRcdFx0XHRcdFx0XHR0YXJnZXRFeHByZXNzaW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHQocGF0aDogc3RyaW5nKSA9PiAocGF0aCA/IHBhdGguc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXIubGVuZ3RoICsgMSkgOiBcIlwiKVxuXHRcdFx0XHRcdFx0XHQpIGFzIEJpbmRpbmdFeHByZXNzaW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0RXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXBbYWN0aW9uTmFtZV0gPSB0YXJnZXRFeHByZXNzaW9uLnBhdGg7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcFthY3Rpb25OYW1lXSA9IHRhcmdldEV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkob3BlcmF0aW9uQXZhaWxhYmxlTWFwKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmRcbiAqIHJldHVybnMgYWxsIHRoZSBVSS5IaWRkZW4gYW5ub3RhdGlvbiBleHByZXNzaW9ucy5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgdXNlZCBmb3IgcmVwcmVzZW50YXRpb24gaW4gYSB0YWJsZSBvciBsaXN0XG4gKiBAcGFyYW0gY3VycmVudEVudGl0eVR5cGUgQ3VycmVudCBFbnRpdHkgVHlwZVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEBwYXJhbSBpc0VudGl0eVNldFxuICogQHJldHVybnMgQWxsIHRoZSBgVUkuSGlkZGVuYCBwYXRoIGV4cHJlc3Npb25zIGZvdW5kIGluIHRoZSByZWxldmFudCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFVJSGlkZGVuRXhwRm9yQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQoXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sXG5cdGN1cnJlbnRFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFbnRpdHlTZXQ6IGJvb2xlYW5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFVaUhpZGRlblBhdGhFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKGRhdGFGaWVsZCA9PiB7XG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdGlmIChcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uaXNCb3VuZCAmJlxuXHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9PT0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSkgfHxcblx0XHRcdChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0ICYmXG5cdFx0XHRcdGRhdGFGaWVsZD8uSW5saW5lPy52YWx1ZU9mKCkgIT09IHRydWUpXG5cdFx0KSB7XG5cdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGFVaUhpZGRlblBhdGhFeHByZXNzaW9ucy5wdXNoKFxuXHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0Z2V0QmluZGluZ0V4cEZyb21Db250ZXh0KFxuXHRcdFx0XHRcdFx0XHRkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0XHRcdFx0aXNFbnRpdHlTZXRcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYVVpSGlkZGVuUGF0aEV4cHJlc3Npb25zO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBjb250ZXh0IGN1cnJlbnRseSByZWZlcmVuY2VkIGJ5IHRoaXMgYmluZGluZyBieSByZW1vdmluZyB0aGUgbGFzdCBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuICpcbiAqIEl0IGlzIHVzZWQgKHNwZWNpZmljYWxseSBpbiB0aGlzIGNhc2UpLCB0byB0cmFuc2Zvcm0gYSBiaW5kaW5nIG1hZGUgZm9yIGEgTmF2UHJvcCBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxL05hdlByb3AyLFxuICogaW50byBhIGJpbmRpbmcgb24gdGhlIHByZXZpb3VzIGNvbnRleHQgL01haW5PYmplY3QvTmF2UHJvcDEuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBDdXN0b21BY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcGFyYW0gaXNFbnRpdHlTZXRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gZ2V0QmluZGluZ0V4cEZyb21Db250ZXh0KFxuXHRzb3VyY2U6IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGlzRW50aXR5U2V0OiBib29sZWFuXG4pOiBFeHByZXNzaW9uPGFueT4ge1xuXHRsZXQgc0V4cHJlc3Npb246IGFueSB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdChzb3VyY2UgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdChzb3VyY2UgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHQpIHtcblx0XHRzRXhwcmVzc2lvbiA9IChzb3VyY2UgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdH0gZWxzZSB7XG5cdFx0c0V4cHJlc3Npb24gPSAoc291cmNlIGFzIEN1c3RvbUFjdGlvbik/LnZpc2libGU7XG5cdH1cblx0bGV0IHNQYXRoOiBzdHJpbmc7XG5cdGlmIChzRXhwcmVzc2lvbj8ucGF0aCkge1xuXHRcdHNQYXRoID0gc0V4cHJlc3Npb24ucGF0aDtcblx0fSBlbHNlIHtcblx0XHRzUGF0aCA9IHNFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChzUGF0aCkge1xuXHRcdGlmICgoc291cmNlIGFzIEN1c3RvbUFjdGlvbik/LnZpc2libGUpIHtcblx0XHRcdHNQYXRoID0gc1BhdGguc3Vic3RyaW5nKDEsIHNQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0XHRpZiAoc1BhdGguaW5kZXhPZihcIi9cIikgPiAwKSB7XG5cdFx0XHQvL2NoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IGlzIGNvcnJlY3Q6XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVNwbGl0UGF0aFswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdD8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiZcblx0XHRcdFx0Y29udGV4dERhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LnBhcnRuZXIgPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbihhU3BsaXRQYXRoLnNsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0XHRcdH1cblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBwcm9wZXJ0eSwgaWYgaXQncyBhbiBlbnRpdHlTZXQsIHRoZSBleHByZXNzaW9uIGJpbmRpbmcgaGFzIHRvIGJlIHJldHVybmVkOlxuXHRcdH0gZWxzZSBpZiAoaXNFbnRpdHlTZXQpIHtcblx0XHRcdHJldHVybiBiaW5kaW5nRXhwcmVzc2lvbihzUGF0aCk7XG5cdFx0XHQvLyBvdGhlcndpc2UgdGhlIGV4cHJlc3Npb24gYmluZGluZyBjYW5ub3QgYmUgdGFrZW4gaW50byBhY2NvdW50IGZvciB0aGUgc2VsZWN0aW9uIG1vZGUgZXZhbHVhdGlvbjpcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTG9vcCB0aHJvdWdoIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBvZiBhIGxpbmUgaXRlbSBhbmQgY2hlY2tcbiAqIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGlzIGFsd2F5cyB2aXNpYmxlIGluIHRoZSB0YWJsZSB0b29sYmFyIChhbmQgcmVxdWlyZXMgYSBjb250ZXh0KS5cbiAqXG4gKiBAcGFyYW0gbGluZUl0ZW1Bbm5vdGF0aW9uIENvbGxlY3Rpb24gb2YgZGF0YSBmaWVsZHMgZm9yIHJlcHJlc2VudGF0aW9uIGluIGEgdGFibGUgb3IgbGlzdFxuICogQHBhcmFtIGN1cnJlbnRFbnRpdHlUeXBlIEN1cnJlbnQgRW50aXR5IFR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3QgMSBhY3Rpb24gdGhhdCBtZWV0cyB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gaGFzQm91bmRBY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtLCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gbGluZUl0ZW1Bbm5vdGF0aW9uLnNvbWUoZGF0YUZpZWxkID0+IHtcblx0XHRpZiAoXG5cdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24gfHxcblx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRkYXRhRmllbGQ/LklubGluZT8udmFsdWVPZigpICE9PSB0cnVlICYmXG5cdFx0XHQoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IGZhbHNlIHx8IGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB1bmRlZmluZWQpXG5cdFx0KSB7XG5cdFx0XHRpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb24pIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGxpbmVJdGVtIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgYWN0aW9uOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQgJiYgY3VycmVudEVudGl0eVR5cGUgPT09IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0LnNvdXJjZUVudGl0eVR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDdXN0b21BY3Rpb25zQWx3YXlzVmlzaWJsZUluVG9vbEJhcihtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4pOiBib29sZWFuIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuc29tZShhY3Rpb25LZXkgPT4ge1xuXHRcdGNvbnN0IGFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgYWN0aW9uLnZpc2libGU/LnRvU3RyaW5nKCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBjdXN0b20gYWN0aW9ucyAod2l0aCBrZXkgcmVxdWlyZXNTZWxlY3Rpb24pIGRlY2xhcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgbGluZSBpdGVtIGFuZCByZXR1cm5zIGFsbCB0aGVcbiAqIHZpc2libGUga2V5IHZhbHVlcyBhcyBhbiBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIEFycmF5PEV4cHJlc3Npb248Ym9vbGVhbj4+IEFsbCB0aGUgdmlzaWJsZSBwYXRoIGV4cHJlc3Npb25zIG9mIHRoZSBhY3Rpb25zIHRoYXQgbWVldCB0aGUgY3JpdGVyaWFcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzaWJsZUV4cEZvckN1c3RvbUFjdGlvbnNSZXF1aXJpbmdDb250ZXh0KG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPik6IEV4cHJlc3Npb248Ym9vbGVhbj5bXSB7XG5cdGNvbnN0IGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXTtcblx0aWYgKG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdE9iamVjdC5rZXlzKG1hbmlmZXN0QWN0aW9ucykuZm9yRWFjaChhY3Rpb25LZXkgPT4ge1xuXHRcdFx0Y29uc3QgYWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0XHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlICYmIGFjdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdC8qVGhlIGZpbmFsIGFpbSB3b3VsZCBiZSB0byBjaGVjayBpZiB0aGUgcGF0aCBleHByZXNzaW9uIGRlcGVuZHMgb24gdGhlIHBhcmVudCBjb250ZXh0XG5cdFx0XHRcdFx0YW5kIGNvbnNpZGVycyBvbmx5IHRob3NlIGV4cHJlc3Npb25zIGZvciB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uLFxuXHRcdFx0XHRcdGJ1dCBjdXJyZW50bHkgbm90IHBvc3NpYmxlIGZyb20gdGhlIG1hbmlmZXN0IGFzIHRoZSB2aXNpYmxlIGtleSBpcyBib3VuZCBvbiB0aGUgcGFyZW50IGVudGl0eS5cblx0XHRcdFx0XHRUcmlja3kgdG8gZGlmZmVyZW50aWF0ZSB0aGUgcGF0aCBhcyBpdCdzIGRvbmUgZm9yIHRoZSBIaWRkZW4gYW5ub3RhdGlvbi5cblx0XHRcdFx0XHRGb3IgdGhlIHRpbWUgYmVpbmcgd2UgY29uc2lkZXIgYWxsIHRoZSBwYXRocyBvZiB0aGUgbWFuaWZlc3QqL1xuXG5cdFx0XHRcdFx0YVZpc2libGVQYXRoRXhwcmVzc2lvbnMucHVzaChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24/LnZpc2libGU/LnZhbHVlT2YoKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFWaXNpYmxlUGF0aEV4cHJlc3Npb25zO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBwYXRoIGlzIHN0YXRpY2FsbHkgZGVsZXRhYmxlIG9yIHVwZGF0YWJsZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9ufSBUaGUgdGFibGUgY2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXBhYmlsaXR5UmVzdHJpY3Rpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IFRhYmxlQ2FwYWJpbGl0eVJlc3RyaWN0aW9uIHtcblx0Y29uc3QgaXNEZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpO1xuXHRjb25zdCBpc1VwZGF0YWJsZSA9IGlzUGF0aFVwZGF0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNEZWxldGFibGU6ICEoaXNDb25zdGFudChpc0RlbGV0YWJsZSkgJiYgaXNEZWxldGFibGUudmFsdWUgPT09IGZhbHNlKSxcblx0XHRpc1VwZGF0YWJsZTogIShpc0NvbnN0YW50KGlzVXBkYXRhYmxlKSAmJiBpc1VwZGF0YWJsZS52YWx1ZSA9PT0gZmFsc2UpXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25Nb2RlKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRpc0VudGl0eVNldDogYm9vbGVhbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvblxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHR9XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5ncyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGxldCBzZWxlY3Rpb25Nb2RlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3M/LnNlbGVjdGlvbk1vZGU7XG5cdGxldCBhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zOiBFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBbXSxcblx0XHRhVmlzaWJsZUJpbmRpbmdFeHByZXNzaW9uczogRXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKS5hY3Rpb25zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0W10sXG5cdFx0dW5kZWZpbmVkLFxuXHRcdGZhbHNlXG5cdCk7XG5cdGxldCBpc1BhcmVudERlbGV0YWJsZSwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlO1xuXHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UpIHtcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSwgdW5kZWZpbmVkKTtcblx0XHRwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPSBpc1BhcmVudERlbGV0YWJsZSA/IGNvbXBpbGVCaW5kaW5nKGlzUGFyZW50RGVsZXRhYmxlLCB0cnVlKSA6IGlzUGFyZW50RGVsZXRhYmxlO1xuXHR9XG5cdGlmIChzZWxlY3Rpb25Nb2RlICYmIHNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTm9uZSkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0c2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuTXVsdGk7XG5cdFx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRpZkVsc2UoZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCIvZWRpdE1vZGVcIiwgXCJ1aVwiKSwgXCJFZGl0YWJsZVwiKSwgY29uc3RhbnQoc2VsZWN0aW9uTW9kZSksIGNvbnN0YW50KFwiTm9uZVwiKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc0VudGl0eVNldCkge1xuXHRcdFx0aWYgKHRhcmdldENhcGFiaWxpdGllcy5pc0RlbGV0YWJsZSkge1xuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHRcdFx0cmV0dXJuIHNlbGVjdGlvbk1vZGU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICghc2VsZWN0aW9uTW9kZSB8fCBzZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLkF1dG8pIHtcblx0XHRzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0fVxuXG5cdGlmIChcblx0XHRoYXNCb3VuZEFjdGlvbnNBbHdheXNWaXNpYmxlSW5Ub29sQmFyKGxpbmVJdGVtQW5ub3RhdGlvbiwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIHx8XG5cdFx0aGFzQ3VzdG9tQWN0aW9uc0Fsd2F5c1Zpc2libGVJblRvb2xCYXIobWFuaWZlc3RBY3Rpb25zKVxuXHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0fVxuXHRhSGlkZGVuQmluZGluZ0V4cHJlc3Npb25zID0gZ2V0VUlIaWRkZW5FeHBGb3JBY3Rpb25zUmVxdWlyaW5nQ29udGV4dChcblx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0aXNFbnRpdHlTZXRcblx0KTtcblx0YVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMgPSBnZXRWaXNpYmxlRXhwRm9yQ3VzdG9tQWN0aW9uc1JlcXVpcmluZ0NvbnRleHQobWFuaWZlc3RBY3Rpb25zKTtcblxuXHQvLyBObyBhY3Rpb24gcmVxdWlyaW5nIGEgY29udGV4dDpcblx0aWYgKGFIaWRkZW5CaW5kaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmIGFWaXNpYmxlQmluZGluZ0V4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuXHRcdGlmICghaXNFbnRpdHlTZXQpIHtcblx0XHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdGlmRWxzZShlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIi9lZGl0TW9kZVwiLCBcInVpXCIpLCBcIkVkaXRhYmxlXCIpLCBjb25zdGFudChzZWxlY3Rpb25Nb2RlKSwgY29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKSlcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBTZWxlY3Rpb25Nb2RlLk5vbmU7XG5cdFx0XHR9XG5cdFx0XHQvLyBFbnRpdHlTZXQgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSBpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uTW9kZTtcblx0XHRcdC8vIEVudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5Ob25lO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBhcmUgYWN0aW9ucyByZXF1aXJpbmcgYSBjb250ZXh0OlxuXHR9IGVsc2UgaWYgKCFpc0VudGl0eVNldCkge1xuXHRcdGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUgfHwgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdGVxdWFsKGJpbmRpbmdFeHByZXNzaW9uKFwiL2VkaXRNb2RlXCIsIFwidWlcIiksIFwiRWRpdGFibGVcIiksXG5cdFx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRcdGNvbnN0YW50KHNlbGVjdGlvbk1vZGUpLFxuXHRcdFx0XHRcdFx0Y29uc3RhbnQoU2VsZWN0aW9uTW9kZS5Ob25lKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRpZkVsc2UoXG5cdFx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0XHRjb25zdGFudChzZWxlY3Rpb25Nb2RlKSxcblx0XHRcdFx0XHRjb25zdGFudChTZWxlY3Rpb25Nb2RlLk5vbmUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vRW50aXR5U2V0IGRlbGV0YWJsZTpcblx0fSBlbHNlIGlmICh0YXJnZXRDYXBhYmlsaXRpZXMuaXNEZWxldGFibGUpIHtcblx0XHRyZXR1cm4gU2VsZWN0aW9uTW9kZS5NdWx0aTtcblx0XHQvL0VudGl0eVNldCBub3QgZGVsZXRhYmxlOlxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoLi4uYUhpZGRlbkJpbmRpbmdFeHByZXNzaW9ucy5jb25jYXQoYVZpc2libGVCaW5kaW5nRXhwcmVzc2lvbnMpKSxcblx0XHRcdFx0Y29uc3RhbnQoc2VsZWN0aW9uTW9kZSksXG5cdFx0XHRcdGNvbnN0YW50KFNlbGVjdGlvbk1vZGUuTm9uZSlcblx0XHRcdClcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCB0YWJsZSBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGxpbmVJdGVtQW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge1JlY29yZDxCYXNlQWN0aW9uLCBCYXNlQWN0aW9uPn0gVGhlIHRhYmxlIGFubm90YXRpb24gYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZUFubm90YXRpb25BY3Rpb25zKGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0sIHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0Y29uc3QgdGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0Y29uc3QgaGlkZGVuVGFibGVBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBbXTtcblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdGxpbmVJdGVtQW5ub3RhdGlvbi5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGxldCB0YWJsZUFjdGlvbjogQW5ub3RhdGlvbkFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdChkYXRhRmllbGQpICYmXG5cdFx0XHRcdCEoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuSW5saW5lICYmXG5cdFx0XHRcdCFkYXRhRmllbGQuRGV0ZXJtaW5pbmdcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCk7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLiRUeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0XHRcdFx0dGFibGVBY3Rpb24gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGtleSxcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0XHRcdFx0bm90KFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1YWwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0XHRcdHRhYmxlQWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0XHRcdG5vdChcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWFsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0aGlkZGVuVGFibGVBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFjdGlvbikge1xuXHRcdFx0XHR0YWJsZUFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHR0YWJsZUFjdGlvbnM6IHRhYmxlQWN0aW9ucyxcblx0XHRoaWRkZW5UYWJsZUFjdGlvbnM6IGhpZGRlblRhYmxlQWN0aW9uc1xuXHR9O1xufVxuXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKFxuXHRjcml0aWNhbGl0eUFubm90YXRpb246IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxDcml0aWNhbGl0eVR5cGU+IHwgRW51bVZhbHVlPENyaXRpY2FsaXR5VHlwZT4gfCB1bmRlZmluZWQsXG5cdGlzRHJhZnRSb290OiBib29sZWFuLFxuXHR0YXJnZXRFbnRpdHlUeXBlPzogRW50aXR5VHlwZVxuKTogRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4ge1xuXHRsZXQgZGVmYXVsdEhpZ2hsaWdodFJvd0RlZmluaXRpb246IE1lc3NhZ2VUeXBlIHwgRXhwcmVzc2lvbjxNZXNzYWdlVHlwZT4gPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRpZiAoY3JpdGljYWxpdHlBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKHR5cGVvZiBjcml0aWNhbGl0eUFubm90YXRpb24gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oY3JpdGljYWxpdHlBbm5vdGF0aW9uKSBhcyBFeHByZXNzaW9uPE1lc3NhZ2VUeXBlPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRW51bSBWYWx1ZSBzbyB3ZSBnZXQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHBhcnRcblx0XHRcdGRlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uID0gZ2V0TWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHlUeXBlKGNyaXRpY2FsaXR5QW5ub3RhdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aXNEcmFmdFJvb3QgJiYgRHJhZnQuSXNOZXdPYmplY3QsXG5cdFx0TWVzc2FnZVR5cGUuSW5mb3JtYXRpb24gYXMgTWVzc2FnZVR5cGUsXG5cdFx0Zm9ybWF0UmVzdWx0KFxuXHRcdFx0W2RlZmF1bHRIaWdobGlnaHRSb3dEZWZpbml0aW9uLCBiaW5kaW5nRXhwcmVzc2lvbihgZmlsdGVyZWRNZXNzYWdlc2AsIFwiaW50ZXJuYWxcIildLFxuXHRcdFx0dGFibGVGb3JtYXR0ZXJzLnJvd0hpZ2hsaWdodGluZyxcblx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHQpXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9nZXRDcmVhdGlvbkJlaGF2aW91cihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSB7XG5cdGNvbnN0IG5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uU2V0dGluZ3M/LmNyZWF0ZSB8fCBuYXZpZ2F0aW9uU2V0dGluZ3M/LmRldGFpbDtcblxuXHQvLyBjcm9zcy1hcHBcblx0aWYgKG5hdmlnYXRpb24/Lm91dGJvdW5kICYmIG5hdmlnYXRpb24ub3V0Ym91bmREZXRhaWwgJiYgbmF2aWdhdGlvblNldHRpbmdzPy5jcmVhdGUpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9kZTogXCJFeHRlcm5hbFwiLFxuXHRcdFx0b3V0Ym91bmQ6IG5hdmlnYXRpb24ub3V0Ym91bmQsXG5cdFx0XHRvdXRib3VuZERldGFpbDogbmF2aWdhdGlvbi5vdXRib3VuZERldGFpbCxcblx0XHRcdG5hdmlnYXRpb25TZXR0aW5nczogbmF2aWdhdGlvblNldHRpbmdzXG5cdFx0fTtcblx0fVxuXG5cdGxldCBuZXdBY3Rpb247XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHQvLyBpbi1hcHBcblx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdG5ld0FjdGlvbiA9IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uIHx8IHRhcmdldEFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb247IC8vIFRPRE86IElzIHRoZXJlIHJlYWxseSBubyAnTmV3QWN0aW9uJyBvbiBEcmFmdE5vZGU/IHRhcmdldEFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Tm9kZT8uTmV3QWN0aW9uXG5cblx0XHRpZiAodGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cgJiYgbmV3QWN0aW9uKSB7XG5cdFx0XHQvLyBBIGNvbWJpbmF0aW9uIG9mICdDcmVhdGlvblJvdycgYW5kICdOZXdBY3Rpb24nIGRvZXMgbm90IG1ha2Ugc2Vuc2Vcblx0XHRcdC8vIFRPRE86IE9yIGRvZXMgaXQ/XG5cdFx0XHR0aHJvdyBFcnJvcihgQ3JlYXRpb24gbW9kZSAnJHtDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3d9JyBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIGN1c3RvbSAnbmV3JyBhY3Rpb24gKCR7bmV3QWN0aW9ufSlgKTtcblx0XHR9XG5cdFx0aWYgKG5hdmlnYXRpb24/LnJvdXRlKSB7XG5cdFx0XHQvLyByb3V0ZSBzcGVjaWZpZWRcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdG1vZGU6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSxcblx0XHRcdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRcdFx0bmV3QWN0aW9uOiBuZXdBY3Rpb24/LnRvU3RyaW5nKCksXG5cdFx0XHRcdG5hdmlnYXRlVG9UYXJnZXQ6IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UgPyBuYXZpZ2F0aW9uLnJvdXRlIDogdW5kZWZpbmVkIC8vIG5hdmlnYXRlIG9ubHkgaW4gTmV3UGFnZSBtb2RlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdC8vIG5vIG5hdmlnYXRpb24gb3Igbm8gcm91dGUgc3BlY2lmaWVkIC0gZmFsbGJhY2sgdG8gaW5saW5lIGNyZWF0ZSBpZiBvcmlnaW5hbCBjcmVhdGlvbiBtb2RlIHdhcyAnTmV3UGFnZSdcblx0aWYgKHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2UpIHtcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUgPSBDcmVhdGlvbk1vZGUuSW5saW5lO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtb2RlOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGlvbk1vZGUsXG5cdFx0YXBwZW5kOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVBdEVuZCxcblx0XHRuZXdBY3Rpb246IG5ld0FjdGlvbj8udG9TdHJpbmcoKVxuXHR9O1xufVxuXG5jb25zdCBfZ2V0Um93Q29uZmlndXJhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdG5hdmlnYXRpb25TZXR0aW5nczogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0UGF0aDogc3RyaW5nXG4pIHtcblx0bGV0IHByZXNzUHJvcGVydHksIG5hdmlnYXRpb25UYXJnZXQ7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8TWVzc2FnZVR5cGU+ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRpZiAobmF2aWdhdGlvblNldHRpbmdzICYmIGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdG5hdmlnYXRpb25UYXJnZXQgPSBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheT8udGFyZ2V0IHx8IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/Lm91dGJvdW5kO1xuXHRcdGlmIChuYXZpZ2F0aW9uVGFyZ2V0KSB7XG5cdFx0XHRwcmVzc1Byb3BlcnR5ID1cblx0XHRcdFx0XCIuaGFuZGxlcnMub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKCAkY29udHJvbGxlciAsJ1wiICsgbmF2aWdhdGlvblRhcmdldCArIFwiJywgJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0pXCI7XG5cdFx0fSBlbHNlIGlmICh0YXJnZXRFbnRpdHlUeXBlKSB7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0bmF2aWdhdGlvblRhcmdldCA9IG5hdmlnYXRpb25TZXR0aW5ncy5kZXRhaWw/LnJvdXRlO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25UYXJnZXQpIHtcblx0XHRcdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IGdldEhpZ2hsaWdodFJvd0JpbmRpbmcoXG5cdFx0XHRcdFx0bGluZUl0ZW1Bbm5vdGF0aW9uLmFubm90YXRpb25zPy5VST8uQ3JpdGljYWxpdHksXG5cdFx0XHRcdFx0ISF0YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fCAhIXRhcmdldEVudGl0eVNldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRHJhZnROb2RlLFxuXHRcdFx0XHRcdHRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0cHJlc3NQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0XCJBUEkub25UYWJsZVJvd1ByZXNzKCRldmVudCwgJGNvbnRyb2xsZXIsICR7JHBhcmFtZXRlcnM+YmluZGluZ0NvbnRleHR9LCB7IGNhbGxFeHRlbnNpb246IHRydWUsIHRhcmdldFBhdGg6ICdcIiArXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCArXG5cdFx0XHRcdFx0XCInLCBlZGl0YWJsZSA6IFwiICtcblx0XHRcdFx0XHQodGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdFJvb3QgfHwgdGFyZ2V0RW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGVcblx0XHRcdFx0XHRcdD8gXCIhJHskcGFyYW1ldGVycz5iaW5kaW5nQ29udGV4dH0uZ2V0UHJvcGVydHkoJ0lzQWN0aXZlRW50aXR5JylcIlxuXHRcdFx0XHRcdFx0OiBcInVuZGVmaW5lZFwiKSArXG5cdFx0XHRcdFx0XCJ9KVwiOyAvL05lZWQgdG8gYWNjZXNzIHRvIERyYWZ0Um9vdCBhbmQgRHJhZnROb2RlICEhISEhISFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBnZXRIaWdobGlnaHRSb3dCaW5kaW5nKGxpbmVJdGVtQW5ub3RhdGlvbi5hbm5vdGF0aW9ucz8uVUk/LkNyaXRpY2FsaXR5LCBmYWxzZSwgdGFyZ2V0RW50aXR5VHlwZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHJvd05hdmlnYXRlZEV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBmb3JtYXRSZXN1bHQoXG5cdFx0W2JpbmRpbmdFeHByZXNzaW9uKFwiL2RlZXBlc3RQYXRoXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdHRhYmxlRm9ybWF0dGVycy5uYXZpZ2F0ZWRSb3csXG5cdFx0dGFyZ2V0RW50aXR5VHlwZVxuXHQpO1xuXHRyZXR1cm4ge1xuXHRcdHByZXNzOiBwcmVzc1Byb3BlcnR5LFxuXHRcdGFjdGlvbjogcHJlc3NQcm9wZXJ0eSA/IFwiTmF2aWdhdGlvblwiIDogdW5kZWZpbmVkLFxuXHRcdHJvd0hpZ2hsaWdodGluZzogY29tcGlsZUJpbmRpbmcoY3JpdGljYWxpdHlQcm9wZXJ0eSksXG5cdFx0cm93TmF2aWdhdGVkOiBjb21waWxlQmluZGluZyhyb3dOYXZpZ2F0ZWRFeHByZXNzaW9uKVxuXHR9O1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29sdW1ucyBmcm9tIHRoZSBlbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb2x1bW5zVG9CZUNyZWF0ZWQgVGhlIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSB0YXJnZXQgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnMgVGhlIGFycmF5IG9mIGNvbHVtbnMgY3JlYXRlZCBiYXNlZCBvbiBMaW5lSXRlbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBub25Tb3J0YWJsZUNvbHVtbnMgVGhlIGFycmF5IG9mIGFsbCBub24gc29ydGFibGUgY29sdW1uIG5hbWVzLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEByZXR1cm5zIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gVGhlIGNvbHVtbiBmcm9tIHRoZSBlbnRpdHlUeXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUgPSBmdW5jdGlvbihcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSA9IFtdLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZVxuKTogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdC8vIENhdGNoIGFscmVhZHkgZXhpc3RpbmcgY29sdW1ucyAtIHdoaWNoIHdlcmUgYWRkZWQgYmVmb3JlIGJ5IExpbmVJdGVtIEFubm90YXRpb25zXG5cdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHQvLyBDYXRjaCBhbHJlYWR5IGV4aXN0aW5nIGNvbHVtbnMgLSB3aGljaCB3ZXJlIGFkZGVkIGJlZm9yZSBieSBMaW5lSXRlbSBBbm5vdGF0aW9uc1xuXHRcdGNvbnN0IGV4aXN0cyA9IGFubm90YXRpb25Db2x1bW5zLnNvbWUoY29sdW1uID0+IHtcblx0XHRcdHJldHVybiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHkubmFtZTtcblx0XHR9KTtcblxuXHRcdC8vIGlmIHRhcmdldCB0eXBlIGV4aXN0cywgaXQgaXMgYSBjb21wbGV4IHByb3BlcnR5IGFuZCBzaG91bGQgYmUgaWdub3JlZFxuXHRcdGlmICghcHJvcGVydHkudGFyZ2V0VHlwZSAmJiAhZXhpc3RzKSB7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydGllc0luZm86IENvbXBsZXhQcm9wZXJ0eUluZm8gPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHR0YWJsZVR5cGVcblx0XHRcdCk7XG5cdFx0XHRjb25zdCByZWxhdGVkUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllcyk7XG5cdFx0XHRjb25zdCBhZGRpdGlvbmFsUHJvcGVydHlOYW1lczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllc0luZm8uYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5LFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0cHJvcGVydHkubmFtZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxhdGVkUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8ucHJvcGVydHlJbmZvcyA9IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzO1xuXHRcdFx0XHRjb2x1bW5JbmZvLmV4cG9ydFNldHRpbmdzID0ge1xuXHRcdFx0XHRcdC4uLmNvbHVtbkluZm8uZXhwb3J0U2V0dGluZ3MsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1RlbXBsYXRlLFxuXHRcdFx0XHRcdHdyYXA6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc1dyYXBwaW5nXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQ29sbGVjdCBpbmZvcm1hdGlvbiBvZiByZWxhdGVkIGNvbHVtbnMgdG8gYmUgY3JlYXRlZC5cblx0XHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0XHRjb2x1bW5zVG9CZUNyZWF0ZWRbbmFtZV0gPSByZWxhdGVkUHJvcGVydGllc0luZm8ucHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbHVtbkluZm8uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBhZGRpdGlvbmFsUHJvcGVydHlOYW1lcztcblx0XHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRcdGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzLmZvckVhY2gobmFtZSA9PiB7XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWwgb3ZlcndyaXRlIGFzIHdlIHJlcXVpcmUgb25seSBvbmUgbmV3IFByb3BlcnR5SW5mbyBmb3IgYSByZWxhdGVkIFByb3BlcnR5LlxuXHRcdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0YWJsZUNvbHVtbnMucHVzaChjb2x1bW5JbmZvKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gdGFibGVDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBjb2x1bW4gZGVmaW5pdGlvbiBmcm9tIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGNvbHVtbiBpcyBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gZnVsbFByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVBhdGggVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHRhcmdldCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgY29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSB1c2VEYXRhRmllbGRQcmVmaXggU2hvdWxkIGJlIHByZWZpeGVkIHdpdGggXCJEYXRhRmllbGQ6OlwiLCBlbHNlIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCBcIlByb3BlcnR5OjpcIlxuICogQHBhcmFtIHtib29sZWFufSBhdmFpbGFibGVGb3JBZGFwdGF0aW9uIERlY2lkZXMgd2hldGhlciBjb2x1bW4gc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWRhcHRhdGlvblxuICogQHBhcmFtIHtzdHJpbmdbXX0gbm9uU29ydGFibGVDb2x1bW5zIFRoZSBhcnJheSBvZiBhbGwgbm9uIHNvcnRhYmxlIGNvbHVtbiBuYW1lc1xuICogQHBhcmFtIHtBZ2dyZWdhdGlvbkhlbHBlcn0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uSGVscGVyIGZvciB0aGUgZW50aXR5XG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyB7QW5ub3RhdGlvblRhYmxlQ29sdW1ufSBUaGUgYW5ub3RhdGlvbiBjb2x1bW4gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDb2x1bW5EZWZpbml0aW9uRnJvbVByb3BlcnR5ID0gZnVuY3Rpb24oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRyZWxhdGl2ZVBhdGg6IHN0cmluZyxcblx0dXNlRGF0YUZpZWxkUHJlZml4OiBib29sZWFuLFxuXHRhdmFpbGFibGVGb3JBZGFwdGF0aW9uOiBib29sZWFuLFxuXHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdLFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogQWdncmVnYXRpb25IZWxwZXIsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbiB7XG5cdGNvbnN0IG5hbWUgPSB1c2VEYXRhRmllbGRQcmVmaXggPyByZWxhdGl2ZVBhdGggOiBcIlByb3BlcnR5OjpcIiArIHJlbGF0aXZlUGF0aDtcblx0Y29uc3Qga2V5ID0gKHVzZURhdGFGaWVsZFByZWZpeCA/IFwiRGF0YUZpZWxkOjpcIiA6IFwiUHJvcGVydHk6OlwiKSArIHJlcGxhY2VTcGVjaWFsQ2hhcnMocmVsYXRpdmVQYXRoKTtcblx0Y29uc3Qgc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCA9IGdldFNlbWFudGljT2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eSk7XG5cdGNvbnN0IGlzSGlkZGVuID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0Y29uc3QgZ3JvdXBQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBwcm9wZXJ0eS5uYW1lID8gX3NsaWNlQXRTbGFzaChwcm9wZXJ0eS5uYW1lLCB0cnVlLCBmYWxzZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcHJvcGVydHkubmFtZTtcblx0Y29uc3QgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHk6IGJvb2xlYW4gPSBuYW1lLmluZGV4T2YoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTE7XG5cdGNvbnN0IGV4cG9ydFNldHRpbmdzID0gaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHQ/IHtcblx0XHRcdFx0dGVtcGxhdGU6IGdldFRhcmdldFZhbHVlT25EYXRhUG9pbnQocHJvcGVydHkpXG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdHJldHVybiB7XG5cdFx0a2V5OiBrZXksXG5cdFx0aXNHcm91cGFibGU6ICFpc0RhdGFQb2ludEZha2VQcm9wZXJ0eSAmJiAhaXNIaWRkZW4gPyBhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSA6IGZhbHNlLFxuXHRcdHR5cGU6IENvbHVtblR5cGUuQW5ub3RhdGlvbixcblx0XHRsYWJlbDogX2dldExhYmVsKHByb3BlcnR5LCBpc0dyb3VwKSxcblx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gX2dldExhYmVsKHByb3BlcnR5KSA6IG51bGwsXG5cdFx0Z3JvdXA6IGlzR3JvdXAgPyBncm91cFBhdGggOiBudWxsLFxuXHRcdGFubm90YXRpb25QYXRoOiBmdWxsUHJvcGVydHlQYXRoLFxuXHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aCxcblx0XHQvLyBBIGZha2UgcHJvcGVydHkgd2FzIGNyZWF0ZWQgZm9yIHRoZSBUYXJnZXRWYWx1ZSB1c2VkIG9uIERhdGFQb2ludHMsIHRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGhpZGRlbiBhbmQgbm9uIHNvcnRhYmxlXG5cdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0IWF2YWlsYWJsZUZvckFkYXB0YXRpb24gfHwgaXNIaWRkZW4gfHwgaXNEYXRhUG9pbnRGYWtlUHJvcGVydHkgPyBBdmFpbGFiaWxpdHlUeXBlLkhpZGRlbiA6IEF2YWlsYWJpbGl0eVR5cGUuQWRhcHRhdGlvbixcblx0XHRuYW1lOiBuYW1lLFxuXHRcdHJlbGF0aXZlUGF0aDogaXNEYXRhUG9pbnRGYWtlUHJvcGVydHlcblx0XHRcdD8gKHByb3BlcnR5IGFzIGFueSkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LlZhbHVlPy5wYXRoIHx8IChwcm9wZXJ0eSBhcyBhbnkpLlZhbHVlLnBhdGhcblx0XHRcdDogcmVsYXRpdmVQYXRoLFxuXHRcdHNvcnRhYmxlOiAhaXNIaWRkZW4gJiYgbm9uU29ydGFibGVDb2x1bW5zLmluZGV4T2YocmVsYXRpdmVQYXRoKSA9PT0gLTEgJiYgIWlzRGF0YVBvaW50RmFrZVByb3BlcnR5LFxuXHRcdGlzS2V5OiBwcm9wZXJ0eS5pc0tleSxcblx0XHRpc0RhdGFQb2ludEZha2VUYXJnZXRQcm9wZXJ0eTogaXNEYXRhUG9pbnRGYWtlUHJvcGVydHksXG5cdFx0ZXhwb3J0U2V0dGluZ3M6IGV4cG9ydFNldHRpbmdzXG5cdH0gYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGJvb2xlYW4gdHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEaWZmZXJlbnQgRGF0YUZpZWxkIHR5cGVzIGRlZmluZWQgaW4gdGhlIGFubm90YXRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBmb3IgdmFsaWQgY29sdW1ucywgZmFsc2UgZm9yIGludmFsaWQgY29sdW1uc1xuICogQHByaXZhdGVcbiAqL1xuY29uc3QgX2lzVmFsaWRDb2x1bW4gPSBmdW5jdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiAhIWRhdGFGaWVsZC5JbmxpbmU7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHQvLyBUb2RvOiBSZXBsYWNlIHdpdGggcHJvcGVyIExvZyBzdGF0ZW1lbnQgb25jZSBhdmFpbGFibGVcblx0XHQvLyAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIERhdGFGaWVsZCBBYnN0cmFjdCB0eXBlOiBcIiArIGRhdGFGaWVsZC4kVHlwZSk7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydHkgYW5kIGRhdGFGaWVsZC5cbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5fSBwcm9wZXJ0eSBFbnRpdHkgdHlwZSBwcm9wZXJ0eSBvciBEYXRhRmllbGQgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBpc0dyb3VwXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBMYWJlbCBvZiB0aGUgcHJvcGVydHkgb3IgRGF0YUZpZWxkXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0TGFiZWwgPSBmdW5jdGlvbihwcm9wZXJ0eTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IFByb3BlcnR5LCBpc0dyb3VwOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRjb25zdCBkYXRhRmllbGREZWZhdWx0ID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0O1xuXHRcdGlmIChkYXRhRmllbGREZWZhdWx0ICYmICFkYXRhRmllbGREZWZhdWx0LnF1YWxpZmllciAmJiBkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGREZWZhdWx0LkxhYmVsPy52YWx1ZU9mKCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5uYW1lKSk7XG5cdH0gZWxzZSBpZiAoaXNEYXRhRmllbGRUeXBlcyhwcm9wZXJ0eSkpIHtcblx0XHRpZiAoISFpc0dyb3VwICYmIHByb3BlcnR5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0cHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5WYWx1ZT8uJHRhcmdldD8ubmFtZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAocHJvcGVydHkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0cHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSB8fCAocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHkuTGFiZWw/LnZhbHVlT2YoKSkpO1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBQcm9wZXJ0eUluZm8gZm9yIGVhY2ggaWRlbnRpZmllZCBwcm9wZXJ0eSBjb25zdW1lZCBieSBhIExpbmVJdGVtLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgUHJvcGVydHk+fSBjb2x1bW5zVG9CZUNyZWF0ZWQgSWRlbnRpZmllZCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGV4aXN0aW5nQ29sdW1ucyBUaGUgbGlzdCBvZiBjb2x1bW5zIGNyZWF0ZWQgZm9yIExpbmVJdGVtcyBhbmQgUHJvcGVydGllcyBvZiBlbnRpdHlUeXBlLlxuICogQHBhcmFtIG5vblNvcnRhYmxlQ29sdW1ucyBUaGUgYXJyYXkgb2YgY29sdW1uIG5hbWVzIHdoaWNoIGNhbm5vdCBiZSBzb3J0ZWQuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHQuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgZm9yIHRoZSBMaW5lSXRlbVxuICogQHJldHVybnMge0Fubm90YXRpb25UYWJsZUNvbHVtbltdfSBUaGUgYXJyYXkgb2YgY29sdW1ucyBjcmVhdGVkLlxuICovXG5jb25zdCBfY3JlYXRlUmVsYXRlZENvbHVtbnMgPSBmdW5jdGlvbihcblx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4sXG5cdGV4aXN0aW5nQ29sdW1uczogQW5ub3RhdGlvblRhYmxlQ29sdW1uW10sXG5cdG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEFubm90YXRpb25UYWJsZUNvbHVtbltdIHtcblx0Y29uc3QgcmVsYXRlZENvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW107XG5cdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0T2JqZWN0LmtleXMoY29sdW1uc1RvQmVDcmVhdGVkKS5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gY29sdW1uc1RvQmVDcmVhdGVkW25hbWVdLFxuXHRcdFx0YW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgobmFtZSksXG5cdFx0XHQvLyBDaGVjayB3aGV0aGVyIHRoZSByZWxhdGVkIGNvbHVtbiBhbHJlYWR5IGV4aXN0cy5cblx0XHRcdHJlbGF0ZWRDb2x1bW4gPSBleGlzdGluZ0NvbHVtbnMuZmluZChjb2x1bW4gPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpO1xuXHRcdGlmIChyZWxhdGVkQ29sdW1uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIENhc2UgMTogS2V5IGNvbnRhaW5zIERhdGFGaWVsZCBwcmVmaXggdG8gZW5zdXJlIGFsbCBwcm9wZXJ0eSBjb2x1bW5zIGhhdmUgdGhlIHNhbWUga2V5IGZvcm1hdC5cblx0XHRcdC8vIE5ldyBjcmVhdGVkIHByb3BlcnR5IGNvbHVtbiBpcyBzZXQgdG8gaGlkZGVuLlxuXHRcdFx0cmVsYXRlZENvbHVtbnMucHVzaChcblx0XHRcdFx0Z2V0Q29sdW1uRGVmaW5pdGlvbkZyb21Qcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0cmVsYXRlZENvbHVtbi5hbm5vdGF0aW9uUGF0aCAhPT0gYW5ub3RhdGlvblBhdGggfHxcblx0XHRcdChyZWxhdGVkQ29sdW1uLnByb3BlcnR5SW5mb3MgJiYgcmVsYXRlZENvbHVtbi5wcm9wZXJ0eUluZm9zLmluZGV4T2YobmFtZSkgIT09IC0xKVxuXHRcdCkge1xuXHRcdFx0Ly8gQ2FzZSAyOiBUaGUgZXhpc3RpbmcgY29sdW1uIHBvaW50cyB0byBhIExpbmVJdGVtIChvcilcblx0XHRcdC8vIENhc2UgMzogVGhpcyBpcyBhIHNlbGYgcmVmZXJlbmNlIGZyb20gYW4gZXhpc3RpbmcgY29sdW1uIGFuZFxuXHRcdFx0Ly8gYm90aCBjYXNlcyByZXF1aXJlIGEgZHVtbXkgUHJvcGVydHlJbmZvIGZvciBzZXR0aW5nIGNvcnJlY3QgZXhwb3J0IHNldHRpbmdzLlxuXG5cdFx0XHRjb25zdCBuZXdOYW1lID0gXCJQcm9wZXJ0eTo6XCIgKyBuYW1lO1xuXG5cdFx0XHQvLyBDaGVja2luZyB3aGV0aGVyIHRoZSByZWxhdGVkIHByb3BlcnR5IGNvbHVtbiBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24uXG5cdFx0XHRpZiAoIWV4aXN0aW5nQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSA9PT0gbmV3TmFtZSkpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIGEgbmV3IHByb3BlcnR5IGNvbHVtbiB3aXRoICdQcm9wZXJ0eTo6JyBwcmVmaXgsXG5cdFx0XHRcdC8vIFNldCBpdCB0byBoaWRkZW4gYXMgaXQgaXMgb25seSBjb25zdW1lZCBieSBDb21wbGV4IHByb3BlcnR5IGluZm9zLlxuXHRcdFx0XHRyZWxhdGVkQ29sdW1ucy5wdXNoKFxuXHRcdFx0XHRcdGdldENvbHVtbkRlZmluaXRpb25Gcm9tUHJvcGVydHkoXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0bmFtZSxcblx0XHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0XHRub25Tb3J0YWJsZUNvbHVtbnMsXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlcixcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0eU5hbWVNYXBbbmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gVGhlIHByb3BlcnR5ICduYW1lJyBoYXMgYmVlbiBwcmVmaXhlZCB3aXRoICdQcm9wZXJ0eTo6JyBmb3IgdW5pcXVlbmVzcy5cblx0Ly8gVXBkYXRlIHRoZSBzYW1lIGluIG90aGVyIHByb3BlcnR5SW5mb3NbXSByZWZlcmVuY2VzIHdoaWNoIHBvaW50IHRvIHRoaXMgcHJvcGVydHkuXG5cdGV4aXN0aW5nQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG5cdFx0Y29sdW1uLnByb3BlcnR5SW5mb3MgPSBjb2x1bW4ucHJvcGVydHlJbmZvcz8ubWFwKHByb3BlcnR5SW5mbyA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvKTtcblx0XHRjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3MgPSBjb2x1bW4uYWRkaXRpb25hbFByb3BlcnR5SW5mb3M/Lm1hcChcblx0XHRcdHByb3BlcnR5SW5mbyA9PiByZWxhdGVkUHJvcGVydHlOYW1lTWFwW3Byb3BlcnR5SW5mb10gPz8gcHJvcGVydHlJbmZvXG5cdFx0KTtcblx0fSk7XG5cblx0cmV0dXJuIHJlbGF0ZWRDb2x1bW5zO1xufTtcblxuLyoqXG4gKiBHZXR0aW5nIHRoZSBDb2x1bW4gTmFtZVxuICogSWYgaXQgcG9pbnRzIHRvIGEgRGF0YUZpZWxkIHdpdGggb25lIHByb3BlcnR5IG9yIERhdGFQb2ludCB3aXRoIG9uZSBwcm9wZXJ0eSwgaXQgd2lsbCB1c2UgdGhlIHByb3BlcnR5IG5hbWVcbiAqIGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBmbGV4IGNoYW5nZXMuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGlmZmVyZW50IERhdGFGaWVsZCB0eXBlcyBkZWZpbmVkIGluIHRoZSBhbm5vdGF0aW9uc1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hbWUgb2YgYW5ub3RhdGlvbiBjb2x1bW5zXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBfZ2V0QW5ub3RhdGlvbkNvbHVtbk5hbWUgPSBmdW5jdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpIHtcblx0Ly8gVGhpcyBpcyBuZWVkZWQgYXMgd2UgaGF2ZSBmbGV4aWJpbGl0eSBjaGFuZ2VzIGFscmVhZHkgdGhhdCB3ZSBoYXZlIHRvIGNoZWNrIGFnYWluc3Rcblx0aWYgKGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSkge1xuXHRcdHJldHVybiBkYXRhRmllbGQuVmFsdWU/LnBhdGg7XG5cdH0gZWxzZSBpZiAoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy5wYXRoKSB7XG5cdFx0Ly8gVGhpcyBpcyBmb3IgcmVtb3ZpbmcgZHVwbGljYXRlIHByb3BlcnRpZXMuIEZvciBleGFtcGxlLCAnUHJvZ3Jlc3MnIFByb3BlcnR5IGlzIHJlbW92ZWQgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgRGF0YVBvaW50XG5cdFx0cmV0dXJuIChkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlLnBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0fVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB3aXRoIHJlc3BlY3QgdG8gdGhlIHJvb3QgZW50aXR5LlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgYERhdGFGaWVsZGAgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHJlbGF0aXZlIHBhdGhcbiAqL1xuY29uc3QgX2dldFJlbGF0aXZlUGF0aCA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IHN0cmluZyB7XG5cdGxldCByZWxhdGl2ZVBhdGg6IHN0cmluZyA9IFwiXCI7XG5cblx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy5wYXRoO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRyZWxhdGl2ZVBhdGggPSAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LnZhbHVlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdHJlbGF0aXZlUGF0aCA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlbGF0aXZlUGF0aDtcbn07XG5cbmNvbnN0IF9zbGljZUF0U2xhc2ggPSBmdW5jdGlvbihwYXRoOiBzdHJpbmcsIGlzTGFzdFNsYXNoOiBib29sZWFuLCBpc0xhc3RQYXJ0OiBib29sZWFuKSB7XG5cdGNvbnN0IGlTbGFzaEluZGV4ID0gaXNMYXN0U2xhc2ggPyBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA6IHBhdGguaW5kZXhPZihcIi9cIik7XG5cblx0aWYgKGlTbGFzaEluZGV4ID09PSAtMSkge1xuXHRcdHJldHVybiBwYXRoO1xuXHR9XG5cdHJldHVybiBpc0xhc3RQYXJ0ID8gcGF0aC5zdWJzdHJpbmcoaVNsYXNoSW5kZXggKyAxLCBwYXRoLmxlbmd0aCkgOiBwYXRoLnN1YnN0cmluZygwLCBpU2xhc2hJbmRleCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSB3aGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIGRhdGEgZmllbGQgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG4gKiBAcGFyYW0gbm9uU29ydGFibGVDb2x1bW5zIENvbGxlY3Rpb24gb2Ygbm9uLXNvcnRhYmxlIGNvbHVtbiBuYW1lcyBhcyBwZXIgYW5ub3RhdGlvblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbHVtbiBpcyBzb3J0YWJsZVxuICovXG5jb25zdCBfaXNDb2x1bW5Tb3J0YWJsZSA9IGZ1bmN0aW9uKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgcHJvcGVydHlQYXRoOiBzdHJpbmcsIG5vblNvcnRhYmxlQ29sdW1uczogc3RyaW5nW10pOiBib29sZWFuIHtcblx0bGV0IGlzU29ydGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblx0aWYgKG5vblNvcnRhYmxlQ29sdW1ucy5pbmRleE9mKHByb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0Ly8gQ29sdW1uIGlzIG5vdCBtYXJrZWQgYXMgbm9uLXNvcnRhYmxlIHZpYSBhbm5vdGF0aW9uXG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0XHRpc1NvcnRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdC8vIEFjdGlvbiBjb2x1bW5zIGFyZSBub3Qgc29ydGFibGVcblx0XHRcdFx0aXNTb3J0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlzU29ydGFibGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgZGVmYXVsdCBmb3JtYXQgb3B0aW9ucyBmb3IgdGV4dCBmaWVsZHMgaW4gYSB0YWJsZS5cbiAqXG4gKiBAcmV0dXJucyB7Rm9ybWF0T3B0aW9uc1R5cGV9IENvbGxlY3Rpb24gb2YgZm9ybWF0IG9wdGlvbnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKCk6IEZvcm1hdE9wdGlvbnNUeXBlIHtcblx0cmV0dXJuIHtcblx0XHR0ZXh0TGluZXNEaXNwbGF5OiA0LFxuXHRcdHRleHRMaW5lc0VkaXQ6IDRcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGxpbmUgaXRlbXMgZnJvbSBtZXRhZGF0YSBhbm5vdGF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0xpbmVJdGVtfSBsaW5lSXRlbUFubm90YXRpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyB3aXRoIHRoZWlyIGFubm90YXRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdmlzdWFsaXphdGlvblBhdGggVGhlIHZpc3VhbGl6YXRpb24gcGF0aFxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge1RhYmxlQ29sdW1uW119IFRoZSBjb2x1bW5zIGZyb20gdGhlIGFubm90YXRpb25zXG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihcblx0bGluZUl0ZW1Bbm5vdGF0aW9uOiBMaW5lSXRlbSxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogVGFibGVDb2x1bW5bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKGxpbmVJdGVtQW5ub3RhdGlvbiksXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnM6IEFubm90YXRpb25UYWJsZUNvbHVtbltdID0gW10sXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eT4gPSB7fSxcblx0XHRub25Tb3J0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID1cblx0XHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5Tb3J0UmVzdHJpY3Rpb25zXG5cdFx0XHRcdD8uTm9uU29ydGFibGVQcm9wZXJ0aWVzIGFzIEVkbS5Qcm9wZXJ0eVBhdGhbXSk/Lm1hcCgocHJvcGVydHk6IFByb3BlcnR5UGF0aCkgPT4gcHJvcGVydHkudmFsdWUpID8/IFtdLFxuXHRcdHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpLFxuXHRcdHRhYmxlVHlwZTogVGFibGVUeXBlID0gdGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy50eXBlIHx8IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cblx0aWYgKGxpbmVJdGVtQW5ub3RhdGlvbikge1xuXHRcdC8vIEdldCBjb2x1bW5zIGZyb20gdGhlIExpbmVJdGVtIEFubm90YXRpb25cblx0XHRsaW5lSXRlbUFubm90YXRpb24uZm9yRWFjaChsaW5lSXRlbSA9PiB7XG5cdFx0XHRpZiAoIV9pc1ZhbGlkQ29sdW1uKGxpbmVJdGVtKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID1cblx0XHRcdFx0aXNEYXRhRmllbGRUeXBlcyhsaW5lSXRlbSkgJiYgbGluZUl0ZW0uVmFsdWU/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGxpbmVJdGVtKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gX2dldFJlbGF0aXZlUGF0aChsaW5lSXRlbSk7XG5cdFx0XHQvLyBEZXRlcm1pbmUgcHJvcGVydGllcyB3aGljaCBhcmUgY29uc3VtZWQgYnkgdGhpcyBMaW5lSXRlbS5cblx0XHRcdGNvbnN0IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mbzogQ29tcGxleFByb3BlcnR5SW5mbyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KGxpbmVJdGVtLCBjb252ZXJ0ZXJDb250ZXh0LCB0YWJsZVR5cGUpO1xuXHRcdFx0Y29uc3QgcmVsYXRlZFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXMpO1xuXHRcdFx0Y29uc3QgYWRkaXRpb25hbFByb3BlcnR5TmFtZXM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMocmVsYXRlZFByb3BlcnRpZXNJbmZvLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKTtcblx0XHRcdGNvbnN0IGdyb3VwUGF0aDogc3RyaW5nID0gX3NsaWNlQXRTbGFzaChyZWxhdGl2ZVBhdGgsIHRydWUsIGZhbHNlKTtcblx0XHRcdGNvbnN0IGlzR3JvdXA6IGJvb2xlYW4gPSBncm91cFBhdGggIT0gcmVsYXRpdmVQYXRoO1xuXHRcdFx0Y29uc3Qgc0xhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBfZ2V0TGFiZWwobGluZUl0ZW0sIGlzR3JvdXApO1xuXHRcdFx0Y29uc3QgbmFtZSA9IF9nZXRBbm5vdGF0aW9uQ29sdW1uTmFtZShsaW5lSXRlbSk7XG5cdFx0XHRhbm5vdGF0aW9uQ29sdW1ucy5wdXNoKHtcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGxpbmVJdGVtKSxcblx0XHRcdFx0dHlwZTogQ29sdW1uVHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRsYWJlbDogc0xhYmVsLFxuXHRcdFx0XHRncm91cExhYmVsOiBpc0dyb3VwID8gX2dldExhYmVsKGxpbmVJdGVtKSA6IG51bGwsXG5cdFx0XHRcdGdyb3VwOiBpc0dyb3VwID8gZ3JvdXBQYXRoIDogbnVsbCxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChsaW5lSXRlbS5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdGF2YWlsYWJpbGl0eTogaXNEYXRhRmllbGRBbHdheXNIaWRkZW4obGluZUl0ZW0pID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRcdG5hbWU6IG5hbWUsXG5cdFx0XHRcdHJlbGF0aXZlUGF0aDogcmVsYXRpdmVQYXRoLFxuXHRcdFx0XHRzb3J0YWJsZTogX2lzQ29sdW1uU29ydGFibGUobGluZUl0ZW0sIHJlbGF0aXZlUGF0aCwgbm9uU29ydGFibGVDb2x1bW5zKSxcblx0XHRcdFx0cHJvcGVydHlJbmZvczogcmVsYXRlZFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IHJlbGF0ZWRQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlJbmZvczogYWRkaXRpb25hbFByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCA/IGFkZGl0aW9uYWxQcm9wZXJ0eU5hbWVzIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHRcdHRlbXBsYXRlOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSxcblx0XHRcdFx0XHR3cmFwOiByZWxhdGVkUHJvcGVydGllc0luZm8uZXhwb3J0U2V0dGluZ3NXcmFwcGluZ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR3aWR0aDogbGluZUl0ZW0uYW5ub3RhdGlvbnM/LkhUTUw1Py5Dc3NEZWZhdWx0cz8ud2lkdGggfHwgdW5kZWZpbmVkLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZSxcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogZ2V0RGVmYXVsdEZvcm1hdE9wdGlvbnNGb3JUYWJsZSgpLFxuXHRcdFx0XHRleHBvcnRDb250YWN0UHJvcGVydHk6IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW4pO1xuXG5cdFx0XHQvLyBDb2xsZWN0IGluZm9ybWF0aW9uIG9mIHJlbGF0ZWQgY29sdW1ucyB0byBiZSBjcmVhdGVkLlxuXHRcdFx0cmVsYXRlZFByb3BlcnR5TmFtZXMuZm9yRWFjaChuYW1lID0+IHtcblx0XHRcdFx0Y29sdW1uc1RvQmVDcmVhdGVkW25hbWVdID0gcmVsYXRlZFByb3BlcnRpZXNJbmZvLnByb3BlcnRpZXNbbmFtZV07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGNvbHVtbnMgZm9yIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZGVudGlmaWVkIGZvciBBTFAgdXNlIGNhc2UuXG5cdFx0XHRhZGRpdGlvbmFsUHJvcGVydHlOYW1lcy5mb3JFYWNoKG5hbWUgPT4ge1xuXHRcdFx0XHQvLyBJbnRlbnRpb25hbCBvdmVyd3JpdGUgYXMgd2UgcmVxdWlyZSBvbmx5IG9uZSBuZXcgUHJvcGVydHlJbmZvIGZvciBhIHJlbGF0ZWQgUHJvcGVydHkuXG5cdFx0XHRcdGNvbHVtbnNUb0JlQ3JlYXRlZFtuYW1lXSA9IHJlbGF0ZWRQcm9wZXJ0aWVzSW5mby5hZGRpdGlvbmFsUHJvcGVydGllc1tuYW1lXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0Ly8gR2V0IGNvbHVtbnMgZnJvbSB0aGUgUHJvcGVydGllcyBvZiBFbnRpdHlUeXBlXG5cdGxldCB0YWJsZUNvbHVtbnMgPSBnZXRDb2x1bW5zRnJvbUVudGl0eVR5cGUoXG5cdFx0Y29sdW1uc1RvQmVDcmVhdGVkLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0bm9uU29ydGFibGVDb2x1bW5zLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0dGFibGVUeXBlXG5cdCk7XG5cdHRhYmxlQ29sdW1ucyA9IHRhYmxlQ29sdW1ucy5jb25jYXQoYW5ub3RhdGlvbkNvbHVtbnMpO1xuXG5cdC8vIENyZWF0ZSBhIHByb3BlcnR5SW5mbyBmb3IgZWFjaCByZWxhdGVkIHByb3BlcnR5LlxuXHRjb25zdCByZWxhdGVkQ29sdW1ucyA9IF9jcmVhdGVSZWxhdGVkQ29sdW1ucyhjb2x1bW5zVG9CZUNyZWF0ZWQsIHRhYmxlQ29sdW1ucywgbm9uU29ydGFibGVDb2x1bW5zLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0dGFibGVDb2x1bW5zID0gdGFibGVDb2x1bW5zLmNvbmNhdChyZWxhdGVkQ29sdW1ucyk7XG5cblx0cmV0dXJuIHRhYmxlQ29sdW1ucztcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGNoZWNrcyBhZ2FpbnN0IGV4aXN0aW5nIHByb3BlcnRpZXMgYWxyZWFkeSBhZGRlZCBieSBhbm5vdGF0aW9ucy5cbiAqIElmIGEgbm90IHlldCBzdG9yZWQgcHJvcGVydHkgaXMgZm91bmQgaXQgYWRkcyBpdCBmb3Igc29ydGluZyBhbmQgZmlsdGVyaW5nIG9ubHkgdG8gdGhlIGFubm90YXRpb25Db2x1bW5zLlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gcHJvcGVydGllc1xuICogQHBhcmFtIHtBbm5vdGF0aW9uVGFibGVDb2x1bW5bXX0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGVudGl0eVR5cGVcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gVGhlIGNvbHVtbnMgZnJvbSB0aGUgYW5ub3RhdGlvbnNcbiAqL1xuY29uc3QgX2dldFByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbihcblx0cHJvcGVydGllczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuXHRsZXQgbWF0Y2hlZFByb3BlcnRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdG1hdGNoZWRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHlQYXRoKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uQ29sdW1uID0gYW5ub3RhdGlvbkNvbHVtbnMuZmluZChmdW5jdGlvbihhbm5vdGF0aW9uQ29sdW1uKSB7XG5cdFx0XHRcdHJldHVybiBhbm5vdGF0aW9uQ29sdW1uLnJlbGF0aXZlUGF0aCA9PT0gcHJvcGVydHlQYXRoICYmIGFubm90YXRpb25Db2x1bW4ucHJvcGVydHlJbmZvcyA9PT0gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYW5ub3RhdGlvbkNvbHVtbikge1xuXHRcdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkNvbHVtbi5uYW1lO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcmVsYXRlZENvbHVtbnMgPSBfY3JlYXRlUmVsYXRlZENvbHVtbnMoXG5cdFx0XHRcdFx0eyBbcHJvcGVydHlQYXRoXTogZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpIH0sXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFubm90YXRpb25Db2x1bW5zLnB1c2gocmVsYXRlZENvbHVtbnNbMF0pO1xuXHRcdFx0XHRyZXR1cm4gcmVsYXRlZENvbHVtbnNbMF0ubmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBtYXRjaGVkUHJvcGVydGllcztcbn07XG5cbmNvbnN0IF9hcHBlbmRDdXN0b21UZW1wbGF0ZSA9IGZ1bmN0aW9uKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0cmV0dXJuIHByb3BlcnRpZXNcblx0XHQubWFwKHByb3BlcnR5ID0+IHtcblx0XHRcdHJldHVybiBgeyR7cHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KX19YDtcblx0XHR9KVxuXHRcdC5qb2luKGAke1wiXFxuXCJ9YCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGFibGUgY29sdW1uIHByb3BlcnR5IHZhbHVlIGJhc2VkIG9uIGNlcnRhaW4gY29uZGl0aW9ucy5cbiAqXG4gKiBNYW5pZmVzdCBkZWZpbmVkIHByb3BlcnR5IHZhbHVlIGZvciBjdXN0b20gLyBhbm5vdGF0aW9uIGNvbHVtbnNcbiAqIERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIGN1c3RvbSBjb2x1bW4gaWYgbm90IG92ZXJ3cml0dGVuIGluIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSB7YW55fSBwcm9wZXJ0eSBUaGUgY29sdW1uIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0ge2FueX0gZGVmYXVsdFZhbHVlIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtib29sZWFufSBpc0Fubm90YXRpb25Db2x1bW4gV2hldGhlciB0aGUgY29sdW1uLCBkZWZpbmVkIGluIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGNvbHVtbi5cbiAqIEByZXR1cm5zIHthbnl9IERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBjb2x1bW5cbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbihwcm9wZXJ0eTogYW55LCBkZWZhdWx0VmFsdWU6IGFueSwgaXNBbm5vdGF0aW9uQ29sdW1uOiBib29sZWFuKTogYW55IHtcblx0aWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGNvbHVtbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgY29sdW1uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogZGVmYXVsdFZhbHVlO1xuXHR9XG5cdC8vIFJldHVybiB3aGF0IGlzIGRlZmluZWQgaW4gbWFuaWZlc3QuXG5cdHJldHVybiBwcm9wZXJ0eTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0YWJsZSBjb2x1bW4gZGVmaW5pdGlvbnMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBjb2x1bW5zXG4gKiBAcGFyYW0gYW5ub3RhdGlvbkNvbHVtbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZW50aXR5VHlwZVxuICogQHBhcmFtIG5hdmlnYXRpb25TZXR0aW5nc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIEN1c3RvbUNvbHVtbj59IFRoZSBjb2x1bW5zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmNvbnN0IGdldENvbHVtbnNGcm9tTWFuaWZlc3QgPSBmdW5jdGlvbihcblx0Y29sdW1uczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RUYWJsZUNvbHVtbj4sXG5cdGFubm90YXRpb25Db2x1bW5zOiBBbm5vdGF0aW9uVGFibGVDb2x1bW5bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiB7XG5cdGNvbnN0IGludGVybmFsQ29sdW1uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQ29sdW1uPiA9IHt9O1xuXG5cdGZvciAoY29uc3Qga2V5IGluIGNvbHVtbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbHVtbiA9IGNvbHVtbnNba2V5XTtcblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBjb2x1bW4gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25Db2x1bW4gPSBhbm5vdGF0aW9uQ29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4ua2V5ID09PSBrZXkpO1xuXHRcdEtleUhlbHBlci52YWxpZGF0ZUtleShrZXkpO1xuXHRcdGNvbnN0IHByb3BlcnR5SW5mb3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gX2dldFByb3BlcnR5TmFtZXMoXG5cdFx0XHRtYW5pZmVzdENvbHVtbi5wcm9wZXJ0aWVzLFxuXHRcdFx0YW5ub3RhdGlvbkNvbHVtbnMsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZW50aXR5VHlwZVxuXHRcdCk7XG5cblx0XHRpbnRlcm5hbENvbHVtbnNba2V5XSA9IHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0aWQ6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdG5hbWU6IFwiQ3VzdG9tQ29sdW1uOjpcIiArIGtleSxcblx0XHRcdGhlYWRlcjogbWFuaWZlc3RDb2x1bW4uaGVhZGVyLFxuXHRcdFx0d2lkdGg6IG1hbmlmZXN0Q29sdW1uLndpZHRoIHx8IHVuZGVmaW5lZCxcblx0XHRcdGhvcml6b250YWxBbGlnbjogX2dldE1hbmlmZXN0T3JEZWZhdWx0VmFsdWUobWFuaWZlc3RDb2x1bW4/Lmhvcml6b250YWxBbGlnbiwgSG9yaXpvbnRhbEFsaWduLkJlZ2luLCBpc0Fubm90YXRpb25Db2x1bW4pLFxuXHRcdFx0dHlwZTogbWFuaWZlc3RDb2x1bW4udHlwZSA9PT0gXCJTbG90XCIgPyBDb2x1bW5UeXBlLlNsb3QgOiBDb2x1bW5UeXBlLkRlZmF1bHQsXG5cdFx0XHRhdmFpbGFiaWxpdHk6IF9nZXRNYW5pZmVzdE9yRGVmYXVsdFZhbHVlKG1hbmlmZXN0Q29sdW1uPy5hdmFpbGFiaWxpdHksIEF2YWlsYWJpbGl0eVR5cGUuRGVmYXVsdCwgaXNBbm5vdGF0aW9uQ29sdW1uKSxcblx0XHRcdHRlbXBsYXRlOiBtYW5pZmVzdENvbHVtbi50ZW1wbGF0ZSB8fCBcInVuZGVmaW5lZFwiLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0Q29sdW1uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdENvbHVtbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRpc05hdmlnYWJsZTogaXNBbm5vdGF0aW9uQ29sdW1uID8gdW5kZWZpbmVkIDogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RDb2x1bW4sIG5hdmlnYXRpb25TZXR0aW5ncywgdHJ1ZSksXG5cdFx0XHRzZXR0aW5nczogbWFuaWZlc3RDb2x1bW4uc2V0dGluZ3MsXG5cdFx0XHRzb3J0YWJsZTogZmFsc2UsXG5cdFx0XHRwcm9wZXJ0eUluZm9zOiBwcm9wZXJ0eUluZm9zLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczoge1xuXHRcdFx0XHQuLi5nZXREZWZhdWx0Rm9ybWF0T3B0aW9uc0ZvclRhYmxlKCksXG5cdFx0XHRcdC4uLm1hbmlmZXN0Q29sdW1uLmZvcm1hdE9wdGlvbnNcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRTZXR0aW5nczoge1xuXHRcdFx0XHR0ZW1wbGF0ZTogcHJvcGVydHlJbmZvcyA/IF9hcHBlbmRDdXN0b21UZW1wbGF0ZShwcm9wZXJ0eUluZm9zKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0ZmllbGRMYWJlbDogcHJvcGVydHlJbmZvcyA/IG1hbmlmZXN0Q29sdW1uLmhlYWRlciA6IHVuZGVmaW5lZCxcblx0XHRcdFx0d3JhcDogcHJvcGVydHlJbmZvcyAmJiBwcm9wZXJ0eUluZm9zLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2Vcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiBpbnRlcm5hbENvbHVtbnM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUoXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXI6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHRhYmxlTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24odmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gbWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IGFQZXJzb25hbGl6YXRpb246IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGJBbmFseXRpY2FsVGFibGUgPSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiO1xuXHRpZiAodGFibGVNYW5pZmVzdFNldHRpbmdzPy50YWJsZVNldHRpbmdzPy5wZXJzb25hbGl6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIFBlcnNvbmFsaXphdGlvbiBjb25maWd1cmVkIGluIG1hbmlmZXN0LlxuXHRcdGNvbnN0IHBlcnNvbmFsaXphdGlvbjogYW55ID0gdGFibGVNYW5pZmVzdFNldHRpbmdzLnRhYmxlU2V0dGluZ3MucGVyc29uYWxpemF0aW9uO1xuXHRcdGlmIChwZXJzb25hbGl6YXRpb24gPT09IHRydWUpIHtcblx0XHRcdC8vIFRhYmxlIHBlcnNvbmFsaXphdGlvbiBmdWxseSBlbmFibGVkLlxuXHRcdFx0cmV0dXJuIGJBbmFseXRpY2FsVGFibGUgPyBcIlNvcnQsQ29sdW1uLEZpbHRlcixHcm91cCxBZ2dyZWdhdGVcIiA6IFwiU29ydCxDb2x1bW4sRmlsdGVyXCI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHQvLyBTcGVjaWZpYyBwZXJzb25hbGl6YXRpb24gb3B0aW9ucyBlbmFibGVkIGluIG1hbmlmZXN0LiBVc2UgdGhlbSBhcyBpcy5cblx0XHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJTb3J0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5jb2x1bW4pIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiQ29sdW1uXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiRmlsdGVyXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5ncm91cCAmJiBiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkdyb3VwXCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5hZ2dyZWdhdGUgJiYgYkFuYWx5dGljYWxUYWJsZSkge1xuXHRcdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJBZ2dyZWdhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYVBlcnNvbmFsaXphdGlvbi5sZW5ndGggPiAwID8gYVBlcnNvbmFsaXphdGlvbi5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm8gcGVyc29uYWxpemF0aW9uIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QuXG5cdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJDb2x1bW5cIik7XG5cdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCkge1xuXHRcdFx0Ly8gRmVhdHVyZSBwYXJpdHkgd2l0aCBWMi5cblx0XHRcdC8vIEVuYWJsZSB0YWJsZSBmaWx0ZXJpbmcgYnkgZGVmYXVsdCBvbmx5IGluIGNhc2Ugb2YgQ29udHJvbCBsZXZlbCB2YXJpYW50IG1hbmFnZW1lbnQuXG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJGaWx0ZXJcIik7XG5cdFx0fVxuXHRcdGlmIChiQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJHcm91cFwiKTtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkFnZ3JlZ2F0ZVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIG5hdmlnYXRpb25QYXRoIFBhdGggdG8gdGhlIG5hdmlnYXRpb24gZW50aXR5XG4gKiBAcGFyYW0gaXNUYXJnZXREZWxldGFibGUgRmxhZyB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgYSB0YXJnZXQgaXMgZGVsZXRhYmxlXG4gKiBAcGFyYW0gdmlld0NvbmZpZ3VyYXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdmlldyBwYXRoXG4gKiBAcmV0dXJucyB7QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRpc1RhcmdldERlbGV0YWJsZTogYm9vbGVhbixcblx0dmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb25cbik6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKG5hdlByb3AgPT4gbmF2UHJvcC5uYW1lKTtcblx0Y29uc3QgaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uID0gY3VycmVudEVudGl0eVNldFxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdChjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+KSB8fCBmYWxzZSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHRcdCAgKVxuXHRcdDogY29uc3RhbnQoZmFsc2UpO1xuXHRjb25zdCBpc0RlbGV0ZUhpZGRlbjogYW55ID0gY29tcGlsZUJpbmRpbmcoaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uKTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlLCBwYXJlbnRFbnRpdHlTZXREZWxldGFibGU7XG5cdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZSkge1xuXHRcdGlzUGFyZW50RGVsZXRhYmxlID0gaXNQYXRoRGVsZXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCBuYXZpZ2F0aW9uUGF0aCk7XG5cdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0fVxuXHQvL2RvIG5vdCBzaG93IGNhc2UgdGhlIGRlbGV0ZSBidXR0b24gaWYgcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlIGlzIGZhbHNlXG5cdGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgPT09IFwiZmFsc2VcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmIChwYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgaXNEZWxldGVIaWRkZW4gIT09IFwidHJ1ZVwiKSB7XG5cdFx0Ly9EZWxldGUgSGlkZGVuIGluIGNhc2Ugb2YgdHJ1ZSBhbmQgcGF0aCBiYXNlZFxuXHRcdGlmIChpc0RlbGV0ZUhpZGRlbiAmJiBpc0RlbGV0ZUhpZGRlbiAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAhJFwiICsgaXNEZWxldGVIaWRkZW4gKyBcIiAmJiAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIns9ICR7dWk+L2VkaXRNb2RlfSA9PT0gJ0VkaXRhYmxlJ31cIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAoXG5cdFx0aXNEZWxldGVIaWRkZW4gPT09IFwidHJ1ZVwiIHx8XG5cdFx0IWlzVGFyZ2V0RGVsZXRhYmxlIHx8XG5cdFx0KHZpZXdDb25maWd1cmF0aW9uICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyh2aWV3Q29uZmlndXJhdGlvbikpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQpIHtcblx0XHRpZiAoaXNEZWxldGVIaWRkZW4gJiYgaXNEZWxldGVIaWRkZW4gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuIFwiez0gISRcIiArIGlzRGVsZXRlSGlkZGVuICsgXCIgJiYgJHt1aT4vZWRpdE1vZGV9ID09PSAnRWRpdGFibGUnfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJ7PSAke3VpPi9lZGl0TW9kZX0gPT09ICdFZGl0YWJsZSd9XCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzQmluZGluZyhpc0RlbGV0ZUhpZGRlbkV4cHJlc3Npb24pKSB7XG5cdFx0Ly8gVUkuRGVsZXRlSGlkZGVuIGFubm90YXRpb24gcG9pbnRzIHRvIGEgcGF0aFxuXHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3QoaXNEZWxldGVIaWRkZW5FeHByZXNzaW9uKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbmFibGVtZW50IGZvciB0aGUgJ01hc3MgRWRpdCcgYnV0dG9uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiTWFzc0VkaXRWaXNpYmxlIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSBlbmFibGVtZW50IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlbWVudE1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRiTWFzc0VkaXRWaXNpYmxlOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBib29sZWFuIHtcblx0aWYgKGJNYXNzRWRpdFZpc2libGUpIHtcblx0XHRjb25zdCBpc1BhcmVudFVwZGF0YWJsZTogYW55ID0gaXNQYXRoVXBkYXRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdC8vd2hlbiB1cGRhdGFibGUgaXMgcGF0aCBiYXNlZCBhbmQgcG9pbnRpbmcgdG8gY3VycmVudCBlbnRpdHkgc2V0IHByb3BlcnR5LCB0aGF0IGNhc2UgaXMgaGFuZGxlZCBpbiB0YWJsZSBoZWxwZXIgYW5kIHJ1bnRpbWVcblx0XHRpZiAoaXNQYXJlbnRVcGRhdGFibGU/LmN1cnJlbnRFbnRpdHlSZXN0cmljdGlvbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBvRXhwcmVzc2lvbjogYW55ID0gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnRVcGRhdGFibGUpO1xuXHRcdHJldHVybiBpc1BhcmVudFVwZGF0YWJsZVxuXHRcdFx0PyBcIns9ICV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAyICYmIFwiICsgY29tcGlsZUJpbmRpbmcoaXNQYXJlbnRVcGRhdGFibGUsIG9FeHByZXNzaW9uKSArIFwifVwiXG5cdFx0XHQ6IGZhbHNlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgJ01hc3MgRWRpdCcgYnV0dG9uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiBUaGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gdGFyZ2V0Q2FwYWJpbGl0aWVzIFRoZSB0YXJnZXQgY2FwYWJpbGl0eSByZXN0cmljdGlvbnMgZm9yIHRoZSB0YWJsZVxuICogQHBhcmFtIHNlbGVjdGlvbk1vZGUgVGhlIHNlbGVjdGlvbiBtb2RlIGZvciB0aGUgdGFibGVcbiAqIEByZXR1cm5zIHsqfSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSAnTWFzcyBFZGl0JyBidXR0b25cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzaWJpbGl0eU1hc3NFZGl0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbixcblx0dGFyZ2V0Q2FwYWJpbGl0aWVzOiBUYWJsZUNhcGFiaWxpdHlSZXN0cmljdGlvbixcblx0c2VsZWN0aW9uTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRiVXBkYXRlSGlkZGVuOiBhbnkgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCksXG5cdFx0Yk1hc3NFZGl0RW5hYmxlZDogYm9vbGVhbiA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5lbmFibGVNYXNzRWRpdCB8fCBmYWxzZSxcblx0XHRpU2VsZWN0aW9uTGltaXQ6IG51bWJlciA9IHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5zZWxlY3Rpb25MaW1pdDtcblx0bGV0IGJNYXNzRWRpdFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuXHRpZiAoKHNlbGVjdGlvbk1vZGUgJiYgc2VsZWN0aW9uTW9kZSA9PT0gXCJTaW5nbGVcIikgfHwgKGlTZWxlY3Rpb25MaW1pdCAmJiBpU2VsZWN0aW9uTGltaXQgPCAyKSkge1xuXHRcdGJNYXNzRWRpdFZpc2libGUgPSBmYWxzZTtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlICYmIChzZWxlY3Rpb25Nb2RlID09PSBcIkF1dG9cIiB8fCBzZWxlY3Rpb25Nb2RlID09PSBcIk5vbmVcIikpIHtcblx0XHRiTWFzc0VkaXRWaXNpYmxlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0Q2FwYWJpbGl0aWVzPy5pc1VwZGF0YWJsZSAhPT0gZmFsc2UgJiYgYk1hc3NFZGl0VmlzaWJsZSAmJiBiTWFzc0VkaXRFbmFibGVkKSB7XG5cdFx0aWYgKGJVcGRhdGVIaWRkZW4gJiYgdHlwZW9mIGJVcGRhdGVIaWRkZW4gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRyZXR1cm4gIWJVcGRhdGVIaWRkZW4gJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgPyBjb21waWxlQmluZGluZyhVSS5Jc0VkaXRhYmxlKSA6IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoYlVwZGF0ZUhpZGRlbiAmJiBiVXBkYXRlSGlkZGVuPy5wYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2Vcblx0XHRcdFx0PyBjb21waWxlQmluZGluZyhhbmQoZXF1YWwoVUkuSXNFZGl0YWJsZSwgdHJ1ZSksIGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGJVcGRhdGVIaWRkZW4pLCBmYWxzZSkpKVxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgPyBjb21waWxlQmluZGluZyhVSS5Jc0VkaXRhYmxlKSA6IGZhbHNlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIENyZWF0ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgbW9kZSB1c2VkIGZvciBjcmVhdGlvblxuICogQHBhcmFtIGlzSW5zZXJ0YWJsZSBBbm5vdGF0aW9uIGV4cHJlc3Npb24gb2YgSW5zZXJ0UmVzdHJpY3Rpb25zLkluc2VydGFibGVcbiAqIEBwYXJhbSB2aWV3Q29uZmlndXJhdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB2aWV3IHBhdGhcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBFeHByZXNzaW9uIG9yIEJvb2xlYW4gdmFsdWUgb2YgdGhlICdVSS5DcmVhdGVIaWRkZW4nIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVZpc2libGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlIHwgXCJFeHRlcm5hbFwiLFxuXHRpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKG5hdlByb3AgPT4gbmF2UHJvcC5uYW1lKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW46IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjdXJyZW50RW50aXR5U2V0XG5cdFx0PyBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdFx0KGN1cnJlbnRFbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5DcmVhdGVIaWRkZW4gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4pIHx8IGZhbHNlLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0ICApXG5cdFx0OiBjb25zdGFudChmYWxzZSk7XG5cblx0Ly8gaWYgdGhlcmUgaXMgYSBjdXN0b20gbmV3IGFjdGlvbiB0aGUgY3JlYXRlIGJ1dHRvbiB3aWxsIGJlIGJvdW5kIGFnYWluc3QgdGhpcyBuZXcgYWN0aW9uIChpbnN0ZWFkIG9mIGEgUE9TVCBhY3Rpb24pLlxuXHQvLyBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgY3JlYXRlIGJ1dHRvbiB0aGVuIGRlcGVuZHMgb24gdGhlIG5ldyBhY3Rpb24ncyBPcGVyYXRpb25BdmFpbGFibGUgYW5ub3RhdGlvbiAoaW5zdGVhZCBvZiB0aGUgaW5zZXJ0UmVzdHJpY3Rpb25zKTpcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gdHJ1ZSBvciB1bmRlZmluZWQgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gT3BlcmF0aW9uQXZhaWxhYmxlID0gZmFsc2UgLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4gPSBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uTmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRjb25zdCBzaG93Q3JlYXRlRm9yTmV3QWN0aW9uID0gbmV3QWN0aW9uTmFtZVxuXHRcdD8gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGUoKS5hY3Rpb25zW25ld0FjdGlvbk5hbWVdLmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSxcblx0XHRcdFx0W10sXG5cdFx0XHRcdHRydWVcblx0XHQgIClcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHQvLyAtIElmIGl0J3Mgc3RhdGljYWxseSBub3QgaW5zZXJ0YWJsZSAtPiBjcmVhdGUgaXMgbm90IHZpc2libGVcblx0Ly8gLSBJZiBjcmVhdGUgaXMgc3RhdGljYWxseSBoaWRkZW4gLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdC8vIC0gSWYgaXQncyBhbiBBTFAgdGVtcGxhdGUgLT4gY3JlYXRlIGlzIG5vdCB2aXNpYmxlXG5cdC8vIC1cblx0Ly8gLSBPdGhlcndpc2Vcblx0Ly8gXHQgLSBJZiB0aGUgY3JlYXRlIG1vZGUgaXMgZXh0ZXJuYWwgLT4gY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgLSBJZiB3ZSdyZSBvbiB0aGUgbGlzdCByZXBvcnQgLT5cblx0Ly8gXHQgXHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0LSBPdGhlcndpc2UsIGNyZWF0ZSBpcyB2aXNpYmxlXG5cdC8vIFx0IC0gT3RoZXJ3aXNlXG5cdC8vIFx0ICAgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSB0aGUgVUkuSXNFZGl0YWJsZVxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdG9yKFxuXHRcdFx0b3IoXG5cdFx0XHRcdGVxdWFsKHNob3dDcmVhdGVGb3JOZXdBY3Rpb24sIGZhbHNlKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNJbnNlcnRhYmxlKSwgZXF1YWwoaXNJbnNlcnRhYmxlLCBmYWxzZSksIGVxdWFsKHNob3dDcmVhdGVGb3JOZXdBY3Rpb24sIHVuZGVmaW5lZCkpXG5cdFx0XHQpLFxuXHRcdFx0aXNDb25zdGFudChpc0NyZWF0ZUhpZGRlbikgJiYgZXF1YWwoaXNDcmVhdGVIaWRkZW4sIHRydWUpLFxuXHRcdFx0b3IoXG5cdFx0XHRcdHZpZXdDb25maWd1cmF0aW9uID8gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSA6IGZhbHNlLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0XHQpXG5cdFx0KSxcblx0XHRmYWxzZSxcblx0XHRpZkVsc2UoXG5cdFx0XHRjcmVhdGlvbk1vZGUgPT09IFwiRXh0ZXJuYWxcIixcblx0XHRcdHRydWUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRpZkVsc2UoaXNCaW5kaW5nKGlzQ3JlYXRlSGlkZGVuKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSwgdHJ1ZSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgUGFzdGUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGlvbkJlaGF2aW91ciBUaGUgY2hvc2VuIGJlaGF2aW9yIG9mIGNyZWF0aW9uXG4gKiBAcGFyYW0gaXNJbnNlcnRhYmxlIFRoZSBleHByZXNzaW9uIHdoaWNoIGRlbm90ZXMgaW5zZXJ0IHJlc3RyaWN0aW9uc1xuICogQHBhcmFtIHBhc3RlRW5hYmxlZEluTWFuaWZlc3QgVGhlIGZsYWcgd2hpY2ggZGVub3RlcyB0aGUgcGFzdGUgZW5hYmxlbWVudCBzdGF0dXMgdmlhIG1hbmlmZXN0XG4gKiBAcGFyYW0gdmlld0NvbmZpZ3VyYXRpb24gVGhlIGluc3RhbmNlIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdmlldyBwYXRoXG4gKiBAcmV0dXJucyB7RXhwcmVzc2lvbjxib29sZWFuPn0gRXhwcmVzc2lvbiBvciBCb29sZWFuIHZhbHVlIG9mIHRoZSBVSS5DcmVhdGVIaWRkZW4gYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVFbmFibGVkKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjcmVhdGlvbkJlaGF2aW91cjogVGFibGVBbm5vdGF0aW9uQ29uZmlndXJhdGlvbltcImNyZWF0ZVwiXSxcblx0aXNJbnNlcnRhYmxlOiBFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRwYXN0ZUVuYWJsZWRJbk1hbmlmZXN0OiBib29sZWFuLFxuXHR2aWV3Q29uZmlndXJhdGlvbj86IFZpZXdQYXRoQ29uZmlndXJhdGlvblxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIElmIGNyZWF0ZSBpcyBub3QgdmlzaWJsZSAtPiBpdCdzIG5vdCBlbmFibGVkXG5cdC8vIElmIGNyZWF0ZSBpcyB2aXNpYmxlIC0+XG5cdC8vIFx0IElmIGl0J3MgaW4gdGhlIExpc3RSZXBvcnQgLT4gbm90IGVuYWJsZWRcblx0Ly9cdCBJZiBpdCdzIGluc2VydGFibGUgLT4gZW5hYmxlZFxuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdHBhc3RlRW5hYmxlZEluTWFuaWZlc3QgJiYgZXF1YWwoZ2V0Q3JlYXRlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0LCBjcmVhdGlvbkJlaGF2aW91ci5tb2RlLCBpc0luc2VydGFibGUsIHZpZXdDb25maWd1cmF0aW9uKSwgdHJ1ZSksXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UgJiYgaXNJbnNlcnRhYmxlLFxuXHRcdGZhbHNlXG5cdCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmcgUHJlc2VudGF0aW9uIFZhcmlhbnQgc29ydCBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBTb3J0IGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldFNvcnRDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNvcnRDb25kaXRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uU29ydE9yZGVyKSB7XG5cdFx0Y29uc3Qgc29ydGVyczogU29ydGVyVHlwZVtdID0gW107XG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHtcblx0XHRcdHNvcnRlcnM6IHNvcnRlcnNcblx0XHR9O1xuXHRcdHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uLlNvcnRPcmRlci5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSAoY29uZGl0aW9uLlByb3BlcnR5IGFzIFByb3BlcnR5UGF0aCk/LiR0YXJnZXQ/Lm5hbWU7XG5cdFx0XHRjb25zdCBzb3J0Q29sdW1uID0gY29sdW1ucy5maW5kKGNvbHVtbiA9PiBjb2x1bW4ubmFtZSA9PT0gcHJvcGVydHlOYW1lKSBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRzb3J0Q29sdW1uPy5wcm9wZXJ0eUluZm9zPy5mb3JFYWNoKHJlbGF0ZWRQcm9wZXJ0eU5hbWUgPT4ge1xuXHRcdFx0XHQvLyBDb21wbGV4IFByb3BlcnR5SW5mby4gQWRkIGVhY2ggcmVsYXRlZCBwcm9wZXJ0eSBmb3Igc29ydGluZy5cblx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdG5hbWU6IHJlbGF0ZWRQcm9wZXJ0eU5hbWUsXG5cdFx0XHRcdFx0ZGVzY2VuZGluZzogISFjb25kaXRpb24uRGVzY2VuZGluZ1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoIXNvcnRDb2x1bW4/LnByb3BlcnR5SW5mb3M/Lmxlbmd0aCkge1xuXHRcdFx0XHQvLyBOb3QgYSBjb21wbGV4IFByb3BlcnR5SW5mby4gQ29uc2lkZXIgdGhlIHByb3BlcnR5IGl0c2VsZiBmb3Igc29ydGluZy5cblx0XHRcdFx0Y29uZGl0aW9ucy5zb3J0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdG5hbWU6IHByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRkZXNjZW5kaW5nOiAhIWNvbmRpdGlvbi5EZXNjZW5kaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHNvcnRDb25kaXRpb25zID0gY29uZGl0aW9ucy5zb3J0ZXJzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbnMpIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBzb3J0Q29uZGl0aW9ucztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBwcm9wZXJ0eVBhdGggdG8gYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzLlxuICpcbiAqIEBwYXJhbSBwYXRocyB0aGUgYXJyYXkgdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0gY29sdW1ucyB0aGUgYXJyYXkgb2YgcHJvcGVydHlJbmZvc1xuICogQHJldHVybnMgYW4gYXJyYXkgb2YgcHJvcGVydHlJbmZvIG5hbWVzXG4gKi9cblxuZnVuY3Rpb24gY29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhwYXRoczogUHJvcGVydHlQYXRoW10sIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IGluZm9OYW1lczogc3RyaW5nW10gPSBbXTtcblx0cGF0aHMuZm9yRWFjaChjdXJyZW50UGF0aCA9PiB7XG5cdFx0aWYgKGN1cnJlbnRQYXRoPy4kdGFyZ2V0Py5uYW1lKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUluZm8gPSBjb2x1bW5zLmZpbmQoY29sdW1uID0+IHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbkNvbHVtbiA9IGNvbHVtbiBhcyBBbm5vdGF0aW9uVGFibGVDb2x1bW47XG5cdFx0XHRcdHJldHVybiAhYW5ub3RhdGlvbkNvbHVtbi5wcm9wZXJ0eUluZm9zICYmIGFubm90YXRpb25Db2x1bW4ucmVsYXRpdmVQYXRoID09PSBjdXJyZW50UGF0aD8uJHRhcmdldD8ubmFtZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0XHRpbmZvTmFtZXMucHVzaChwcm9wZXJ0eUluZm8ubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gaW5mb05hbWVzO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGdyb3VwIGNvbmRpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkfSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiBQcmVzZW50YXRpb24gdmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gY29sdW1ucyBDb252ZXJ0ZXIgcHJvY2Vzc2VkIHRhYmxlIGNvbHVtbnNcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEdyb3VwIGNvbmRpdGlvbnMgZm9yIGEgUHJlc2VudGF0aW9uIHZhcmlhbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEdyb3VwQ29uZGl0aW9ucyhcblx0cHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb246IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWQsXG5cdGNvbHVtbnM6IFRhYmxlQ29sdW1uW11cbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBncm91cENvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Hcm91cEJ5KSB7XG5cdFx0Y29uc3QgYUdyb3VwQnkgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Hcm91cEJ5IGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdGNvbnN0IGFHcm91cExldmVscyA9IGNvbnZlcnRQcm9wZXJ0eVBhdGhzVG9JbmZvTmFtZXMoYUdyb3VwQnksIGNvbHVtbnMpLm1hcChpbmZvTmFtZSA9PiB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBpbmZvTmFtZSB9O1xuXHRcdH0pO1xuXG5cdFx0Z3JvdXBDb25kaXRpb25zID0gYUdyb3VwTGV2ZWxzLmxlbmd0aCA/IEpTT04uc3RyaW5naWZ5KHsgZ3JvdXBMZXZlbHM6IGFHcm91cExldmVscyB9KSA6IHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gZ3JvdXBDb25kaXRpb25zO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBKU09OIHN0cmluZyBjb250YWluaW5nIFByZXNlbnRhdGlvbiBWYXJpYW50IGFnZ3JlZ2F0ZSBjb25kaXRpb25zLlxuICpcbiAqIEBwYXJhbSB7UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZH0gcHJlc2VudGF0aW9uVmFyaWFudEFubm90YXRpb24gUHJlc2VudGF0aW9uIHZhcmlhbnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbHVtbnMgQ29udmVydGVyIHByb2Nlc3NlZCB0YWJsZSBjb2x1bW5zXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBHcm91cCBjb25kaXRpb25zIGZvciBhIFByZXNlbnRhdGlvbiB2YXJpYW50LlxuICovXG5mdW5jdGlvbiBnZXRBZ2dyZWdhdGVDb25kaXRpb25zKFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbjogUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCxcblx0Y29sdW1uczogVGFibGVDb2x1bW5bXVxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IGFnZ3JlZ2F0ZUNvbmRpdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnRBbm5vdGF0aW9uPy5Ub3RhbCkge1xuXHRcdGNvbnN0IGFUb3RhbHMgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5Ub3RhbCBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdFx0Y29udmVydFByb3BlcnR5UGF0aHNUb0luZm9OYW1lcyhhVG90YWxzLCBjb2x1bW5zKS5mb3JFYWNoKGluZm9OYW1lID0+IHtcblx0XHRcdGFnZ3JlZ2F0ZXNbaW5mb05hbWVdID0ge307XG5cdFx0fSk7XG5cblx0XHRhZ2dyZWdhdGVDb25kaXRpb25zID0gSlNPTi5zdHJpbmdpZnkoYWdncmVnYXRlcyk7XG5cdH1cblxuXHRyZXR1cm4gYWdncmVnYXRlQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQW5ub3RhdGlvbkNvbmZpZ3VyYXRpb24oXG5cdGxpbmVJdGVtQW5ub3RhdGlvbjogTGluZUl0ZW0gfCB1bmRlZmluZWQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuXHRwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj86IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdHZpZXdDb25maWd1cmF0aW9uPzogVmlld1BhdGhDb25maWd1cmF0aW9uXG4pOiBUYWJsZUFubm90YXRpb25Db25maWd1cmF0aW9uIHtcblx0Ly8gTmVlZCB0byBnZXQgdGhlIHRhcmdldFxuXHRjb25zdCB7IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggfSA9IHNwbGl0UGF0aCh2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRpdGxlOiBhbnkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSGVhZGVySW5mbz8uVHlwZU5hbWVQbHVyYWw7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFnZU1hbmlmZXN0U2V0dGluZ3M6IE1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IGhhc0Fic29sdXRlUGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoID09PSAwLFxuXHRcdHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pLFxuXHRcdGlkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IFRhYmxlSUQodmlzdWFsaXphdGlvblBhdGgpIDogVGFibGVJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCksIFwiTGluZUl0ZW1cIik7XG5cdGNvbnN0IHRhcmdldENhcGFiaWxpdGllcyA9IGdldENhcGFiaWxpdHlSZXN0cmljdGlvbihjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VsZWN0aW9uTW9kZSA9IGdldFNlbGVjdGlvbk1vZGUobGluZUl0ZW1Bbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCwgaGFzQWJzb2x1dGVQYXRoLCB0YXJnZXRDYXBhYmlsaXRpZXMpO1xuXHRsZXQgdGhyZXNob2xkID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aCA/IDEwIDogMzA7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbj8uTWF4SXRlbXMpIHtcblx0XHR0aHJlc2hvbGQgPSBwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbi5NYXhJdGVtcy52YWx1ZU9mKCkgYXMgbnVtYmVyO1xuXHR9XG5cdGNvbnN0IG5hdmlnYXRpb25UYXJnZXRQYXRoID0gZ2V0TmF2aWdhdGlvblRhcmdldFBhdGgoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCk7XG5cdGNvbnN0IG5hdmlnYXRpb25TZXR0aW5ncyA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldE5hdmlnYXRpb25Db25maWd1cmF0aW9uKG5hdmlnYXRpb25UYXJnZXRQYXRoKTtcblx0Y29uc3QgY3JlYXRpb25CZWhhdmlvdXIgPSBfZ2V0Q3JlYXRpb25CZWhhdmlvdXIobGluZUl0ZW1Bbm5vdGF0aW9uLCB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiwgY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblNldHRpbmdzKTtcblx0bGV0IGlzUGFyZW50RGVsZXRhYmxlOiBhbnksIHBhcmVudEVudGl0eVNldERlbGV0YWJsZTtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0aXNQYXJlbnREZWxldGFibGUgPSBpc1BhdGhEZWxldGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0aWYgKGlzUGFyZW50RGVsZXRhYmxlPy5jdXJyZW50RW50aXR5UmVzdHJpY3Rpb24pIHtcblx0XHRcdHBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cGFyZW50RW50aXR5U2V0RGVsZXRhYmxlID0gaXNQYXJlbnREZWxldGFibGUgPyBjb21waWxlQmluZGluZyhpc1BhcmVudERlbGV0YWJsZSwgdHJ1ZSkgOiBpc1BhcmVudERlbGV0YWJsZTtcblx0XHR9XG5cdH1cblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBpc0luc2VydGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBpc1BhdGhJbnNlcnRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlID0gcGFnZU1hbmlmZXN0U2V0dGluZ3MuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKTtcblx0Y29uc3QgYk1hc3NFZGl0VmlzaWJsZTogYW55ID0gZ2V0VmlzaWJpbGl0eU1hc3NFZGl0KGNvbnZlcnRlckNvbnRleHQsIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLCB0YXJnZXRDYXBhYmlsaXRpZXMsIHNlbGVjdGlvbk1vZGUpO1xuXG5cdHJldHVybiB7XG5cdFx0aWQ6IGlkLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eVNldCA/IGVudGl0eVNldC5uYW1lIDogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRyb3c6IF9nZXRSb3dDb25maWd1cmF0aW9uUHJvcGVydHkoXG5cdFx0XHRsaW5lSXRlbUFubm90YXRpb24sXG5cdFx0XHR2aXN1YWxpemF0aW9uUGF0aCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRuYXZpZ2F0aW9uU2V0dGluZ3MsXG5cdFx0XHRuYXZpZ2F0aW9uVGFyZ2V0UGF0aFxuXHRcdCksXG5cdFx0cDEzbk1vZGU6IHAxM25Nb2RlLFxuXHRcdHNob3c6IHtcblx0XHRcdFwiZGVsZXRlXCI6IGdldERlbGV0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgdGFyZ2V0Q2FwYWJpbGl0aWVzLmlzRGVsZXRhYmxlLCB2aWV3Q29uZmlndXJhdGlvbiksXG5cdFx0XHRjcmVhdGU6IGNvbXBpbGVCaW5kaW5nKGdldENyZWF0ZVZpc2libGUoY29udmVydGVyQ29udGV4dCwgY3JlYXRpb25CZWhhdmlvdXI/Lm1vZGUsIGlzSW5zZXJ0YWJsZSkpLFxuXHRcdFx0cGFzdGU6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRnZXRQYXN0ZUVuYWJsZWQoXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRjcmVhdGlvbkJlaGF2aW91cixcblx0XHRcdFx0XHRpc0luc2VydGFibGUsXG5cdFx0XHRcdFx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZW5hYmxlUGFzdGUsXG5cdFx0XHRcdFx0dmlld0NvbmZpZ3VyYXRpb25cblx0XHRcdFx0KVxuXHRcdFx0KSxcblx0XHRcdG1hc3NFZGl0OiB7XG5cdFx0XHRcdHZpc2libGU6IGJNYXNzRWRpdFZpc2libGUsXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZW1lbnRNYXNzRWRpdChjb252ZXJ0ZXJDb250ZXh0LCBiTWFzc0VkaXRWaXNpYmxlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGlzcGxheU1vZGU6IGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29uZmlndXJhdGlvbiksXG5cdFx0Y3JlYXRlOiBjcmVhdGlvbkJlaGF2aW91cixcblx0XHRzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb25Nb2RlLFxuXHRcdGF1dG9CaW5kT25Jbml0OlxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgJiZcblx0XHRcdCEodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSksXG5cdFx0dmFyaWFudE1hbmFnZW1lbnQ6IHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIiAmJiAhcDEzbk1vZGUgPyBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZSA6IHZhcmlhbnRNYW5hZ2VtZW50LFxuXHRcdHRocmVzaG9sZDogdGhyZXNob2xkLFxuXHRcdHNvcnRDb25kaXRpb25zOiBnZXRTb3J0Q29uZGl0aW9ucyhwcmVzZW50YXRpb25WYXJpYW50QW5ub3RhdGlvbiwgY29sdW1ucyksXG5cdFx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZDogcGFyZW50RW50aXR5U2V0RGVsZXRhYmxlLFxuXHRcdHRpdGxlOiB0aXRsZVxuXHR9O1xufVxuXG5mdW5jdGlvbiBpc0luRGlzcGxheU1vZGUoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3VyYXRpb24/OiBWaWV3UGF0aENvbmZpZ3VyYXRpb24pOiBib29sZWFuIHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQodmlld0NvbmZpZ3VyYXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKHZpZXdDb25maWd1cmF0aW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gdXBkYXRhYmxlIHdpbGwgYmUgaGFuZGxlZCBhdCB0aGUgcHJvcGVydHkgbGV2ZWxcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSB2aXN1YWxpemF0aW9uIHBhdGggaW50byB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoIGFuZCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc3BsaXRQYXRoKHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBhbm5vdGF0aW9uUGF0aF0gPSB2aXN1YWxpemF0aW9uUGF0aC5zcGxpdChcIkBcIik7XG5cblx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHQvLyBEcm9wIHRyYWlsaW5nIHNsYXNoXG5cdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdH1cblx0cmV0dXJuIHsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgYW5ub3RhdGlvblBhdGggfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKFxuXHRzZWxlY3Rpb25WYXJpYW50UGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihzZWxlY3Rpb25WYXJpYW50UGF0aCk7XG5cdGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uVmFyaWFudFR5cGUgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFNlbGVjdGlvblZhcmlhbnRUeXBlO1xuXG5cdGlmIChzZWxlY3Rpb24pIHtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHNlbGVjdGlvbi5TZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZTogYW55ID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IFByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0aWYgKHByb3BlcnR5TmFtZXMuaW5kZXhPZihQcm9wZXJ0eVBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRwcm9wZXJ0eU5hbWVzLnB1c2goUHJvcGVydHlQYXRoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dDogc2VsZWN0aW9uPy5UZXh0Py50b1N0cmluZygpLFxuXHRcdFx0cHJvcGVydHlOYW1lczogcHJvcGVydHlOYW1lc1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuXHRsaW5lSXRlbUFubm90YXRpb246IExpbmVJdGVtIHwgdW5kZWZpbmVkLFxuXHR2aXN1YWxpemF0aW9uUGF0aDogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGVja0NvbmRlbnNlZExheW91dDogYm9vbGVhbiA9IGZhbHNlXG4pOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIHtcblx0Y29uc3QgdGFibGVNYW5pZmVzdFNldHRpbmdzOiBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbih2aXN1YWxpemF0aW9uUGF0aCk7XG5cdGNvbnN0IHRhYmxlU2V0dGluZ3MgPSAodGFibGVNYW5pZmVzdFNldHRpbmdzICYmIHRhYmxlTWFuaWZlc3RTZXR0aW5ncy50YWJsZVNldHRpbmdzKSB8fCB7fTtcblx0bGV0IHF1aWNrU2VsZWN0aW9uVmFyaWFudDogYW55O1xuXHRjb25zdCBxdWlja0ZpbHRlclBhdGhzOiB7IGFubm90YXRpb25QYXRoOiBzdHJpbmcgfVtdID0gW107XG5cdGxldCBlbmFibGVFeHBvcnQgPSB0cnVlO1xuXHRsZXQgY3JlYXRpb25Nb2RlID0gQ3JlYXRpb25Nb2RlLk5ld1BhZ2U7XG5cdGxldCBmaWx0ZXJzO1xuXHRsZXQgY3JlYXRlQXRFbmQgPSB0cnVlO1xuXHRsZXQgZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSA9IGZhbHNlO1xuXHRsZXQgY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uO1xuXHRsZXQgY29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0bGV0IGhpZGVUYWJsZVRpdGxlID0gZmFsc2U7XG5cdGxldCB0YWJsZVR5cGU6IFRhYmxlVHlwZSA9IFwiUmVzcG9uc2l2ZVRhYmxlXCI7XG5cdGxldCBlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdGxldCBzZWxlY3Rpb25MaW1pdCA9IDIwMDtcblx0bGV0IGVuYWJsZVBhc3RlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCI7XG5cdGNvbnN0IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQgPSBjaGVja0NvbmRlbnNlZExheW91dCAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChsaW5lSXRlbUFubm90YXRpb24pIHtcblx0XHRjb25zdCB0YXJnZXRFbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uRW50aXR5VHlwZShsaW5lSXRlbUFubm90YXRpb24pO1xuXHRcdHRhYmxlU2V0dGluZ3M/LnF1aWNrVmFyaWFudFNlbGVjdGlvbj8ucGF0aHM/LmZvckVhY2goKHBhdGg6IHsgYW5ub3RhdGlvblBhdGg6IHN0cmluZyB9KSA9PiB7XG5cdFx0XHRxdWlja1NlbGVjdGlvblZhcmlhbnQgPSB0YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKFwiQFwiICsgcGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHQvLyBxdWlja1NlbGVjdGlvblZhcmlhbnQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0aWYgKHF1aWNrU2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRxdWlja0ZpbHRlclBhdGhzLnB1c2goeyBhbm5vdGF0aW9uUGF0aDogcGF0aC5hbm5vdGF0aW9uUGF0aCB9KTtcblx0XHRcdH1cblx0XHRcdGZpbHRlcnMgPSB7XG5cdFx0XHRcdHF1aWNrRmlsdGVyczoge1xuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0XHRcdFx0XHQ/IFwiez0gJHtwYWdlSW50ZXJuYWw+aGFzUGVuZGluZ0ZpbHRlcnN9ICE9PSB0cnVlfVwiXG5cdFx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHRzaG93Q291bnRzOiB0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0XHRcdFx0cGF0aHM6IHF1aWNrRmlsdGVyUGF0aHNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9KTtcblx0XHRjcmVhdGlvbk1vZGUgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8ubmFtZSB8fCBjcmVhdGlvbk1vZGU7XG5cdFx0Y3JlYXRlQXRFbmQgPSB0YWJsZVNldHRpbmdzLmNyZWF0aW9uTW9kZT8uY3JlYXRlQXRFbmQgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCA6IHRydWU7XG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uID0gdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjtcblx0XHQvLyBpZiBhIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCBkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCwgaS5lLiBzZXQgdG8gZmFsc2Vcblx0XHRkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhID0gIWN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiA/ICEhdGFibGVTZXR0aW5ncy5jcmVhdGlvbk1vZGU/LmRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEgOiBmYWxzZTtcblx0XHRjb25kZW5zZWRUYWJsZUxheW91dCA9IHRhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgIT09IHVuZGVmaW5lZCA/IHRhYmxlU2V0dGluZ3MuY29uZGVuc2VkVGFibGVMYXlvdXQgOiBmYWxzZTtcblx0XHRoaWRlVGFibGVUaXRsZSA9ICEhdGFibGVTZXR0aW5ncy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LmhpZGVUYWJsZVRpdGxlO1xuXHRcdHRhYmxlVHlwZSA9IHRhYmxlU2V0dGluZ3M/LnR5cGUgfHwgXCJSZXNwb25zaXZlVGFibGVcIjtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gXCJPYmplY3RQYWdlXCIpIHtcblx0XHRcdGlmICh0YWJsZVNldHRpbmdzPy50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiICYmICFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHRhYmxlVHlwZSA9IFwiR3JpZFRhYmxlXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRhYmxlU2V0dGluZ3M/LnR5cGUpIHtcblx0XHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaXNEZXNrdG9wKCkgJiYgYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdHRhYmxlVHlwZSA9IFwiQW5hbHl0aWNhbFRhYmxlXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFibGVUeXBlID0gXCJSZXNwb25zaXZlVGFibGVcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRlbmFibGVGdWxsU2NyZWVuID0gdGFibGVTZXR0aW5ncy5lbmFibGVGdWxsU2NyZWVuIHx8IGZhbHNlO1xuXHRcdGlmIChlbmFibGVGdWxsU2NyZWVuID09PSB0cnVlICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0KSB7XG5cdFx0XHRlbmFibGVGdWxsU2NyZWVuID0gZmFsc2U7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLkZVTExTQ1JFRU5NT0RFX05PVF9PTl9MSVNUUkVQT1JUKTtcblx0XHR9XG5cdFx0c2VsZWN0aW9uTGltaXQgPSB0YWJsZVNldHRpbmdzLnNlbGVjdEFsbCA9PT0gdHJ1ZSB8fCB0YWJsZVNldHRpbmdzLnNlbGVjdGlvbkxpbWl0ID09PSAwID8gMCA6IHRhYmxlU2V0dGluZ3Muc2VsZWN0aW9uTGltaXQgfHwgMjAwO1xuXHRcdGVuYWJsZVBhc3RlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gXCJPYmplY3RQYWdlXCIgJiYgdGFibGVTZXR0aW5ncy5lbmFibGVQYXN0ZSAhPT0gZmFsc2U7XG5cdFx0ZW5hYmxlRXhwb3J0ID1cblx0XHRcdHRhYmxlU2V0dGluZ3MuZW5hYmxlRXhwb3J0ICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyB0YWJsZVNldHRpbmdzLmVuYWJsZUV4cG9ydFxuXHRcdFx0XHQ6IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFwiT2JqZWN0UGFnZVwiIHx8IGVuYWJsZVBhc3RlO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0ZmlsdGVyczogZmlsdGVycyxcblx0XHR0eXBlOiB0YWJsZVR5cGUsXG5cdFx0ZW5hYmxlRnVsbFNjcmVlbjogZW5hYmxlRnVsbFNjcmVlbixcblx0XHRoZWFkZXJWaXNpYmxlOiAhKHF1aWNrU2VsZWN0aW9uVmFyaWFudCAmJiBoaWRlVGFibGVUaXRsZSksXG5cdFx0ZW5hYmxlRXhwb3J0OiBlbmFibGVFeHBvcnQsXG5cdFx0Y3JlYXRpb25Nb2RlOiBjcmVhdGlvbk1vZGUsXG5cdFx0Y3JlYXRlQXRFbmQ6IGNyZWF0ZUF0RW5kLFxuXHRcdGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGE6IGRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEsXG5cdFx0Y3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24sXG5cdFx0dXNlQ29uZGVuc2VkVGFibGVMYXlvdXQ6IGNvbmRlbnNlZFRhYmxlTGF5b3V0ICYmIGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQsXG5cdFx0c2VsZWN0aW9uTGltaXQ6IHNlbGVjdGlvbkxpbWl0LFxuXHRcdGVuYWJsZVBhc3RlOiBlbmFibGVQYXN0ZSxcblx0XHRzaG93Um93Q291bnQ6ICF0YWJsZVNldHRpbmdzPy5xdWlja1ZhcmlhbnRTZWxlY3Rpb24/LnNob3dDb3VudHMsXG5cdFx0ZW5hYmxlTWFzc0VkaXQ6IHRhYmxlU2V0dGluZ3M/LmVuYWJsZU1hc3NFZGl0XG5cdH07XG59XG4iXX0=