@sapui5/sap.fe.core 1.135.0 → 1.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -2
- package/src/sap/fe/core/ActionRuntime.ts +3 -1
- package/src/sap/fe/core/AppComponent.js +6 -4
- package/src/sap/fe/core/AppComponent.ts +3 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -6
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/CommonUtils.js +4 -1
- package/src/sap/fe/core/CommonUtils.ts +12 -2
- package/src/sap/fe/core/ExtensionAPI.js +5 -3
- package/src/sap/fe/core/ExtensionAPI.ts +4 -2
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +13 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
- package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
- package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
- package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
- package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/WebSocket.js +10 -1
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +23 -2
- package/src/sap/fe/core/messagebundle_bg.properties +23 -2
- package/src/sap/fe/core/messagebundle_ca.properties +21 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
- package/src/sap/fe/core/messagebundle_cs.properties +21 -0
- package/src/sap/fe/core/messagebundle_cy.properties +21 -0
- package/src/sap/fe/core/messagebundle_da.properties +23 -2
- package/src/sap/fe/core/messagebundle_de.properties +23 -2
- package/src/sap/fe/core/messagebundle_el.properties +21 -0
- package/src/sap/fe/core/messagebundle_en.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
- package/src/sap/fe/core/messagebundle_es.properties +21 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
- package/src/sap/fe/core/messagebundle_et.properties +21 -0
- package/src/sap/fe/core/messagebundle_fi.properties +21 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -1
- package/src/sap/fe/core/messagebundle_hr.properties +24 -3
- package/src/sap/fe/core/messagebundle_hu.properties +21 -0
- package/src/sap/fe/core/messagebundle_id.properties +21 -0
- package/src/sap/fe/core/messagebundle_it.properties +23 -2
- package/src/sap/fe/core/messagebundle_iw.properties +21 -0
- package/src/sap/fe/core/messagebundle_ja.properties +21 -0
- package/src/sap/fe/core/messagebundle_kk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ko.properties +21 -0
- package/src/sap/fe/core/messagebundle_lt.properties +21 -0
- package/src/sap/fe/core/messagebundle_lv.properties +23 -2
- package/src/sap/fe/core/messagebundle_mk.properties +21 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -1
- package/src/sap/fe/core/messagebundle_nl.properties +21 -0
- package/src/sap/fe/core/messagebundle_no.properties +21 -0
- package/src/sap/fe/core/messagebundle_pl.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt.properties +23 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
- package/src/sap/fe/core/messagebundle_ro.properties +23 -2
- package/src/sap/fe/core/messagebundle_ru.properties +22 -1
- package/src/sap/fe/core/messagebundle_sh.properties +23 -2
- package/src/sap/fe/core/messagebundle_sk.properties +21 -0
- package/src/sap/fe/core/messagebundle_sl.properties +23 -2
- package/src/sap/fe/core/messagebundle_sr.properties +23 -2
- package/src/sap/fe/core/messagebundle_sv.properties +21 -0
- package/src/sap/fe/core/messagebundle_th.properties +21 -0
- package/src/sap/fe/core/messagebundle_tr.properties +21 -0
- package/src/sap/fe/core/messagebundle_uk.properties +23 -2
- package/src/sap/fe/core/messagebundle_vi.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
|
@@ -802,6 +802,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
802
802
|
}, props);
|
|
803
803
|
}
|
|
804
804
|
function getFilterRestrictionsByPath(entityPath, oContext) {
|
|
805
|
+
// NOTE: For getting FilterAllowedExpressions please use 'getAllowedFilterExpressionForProperty' from 'sap/fe/core/converters/controls/ListReport/FilterField.ts'.
|
|
805
806
|
const oRet = {
|
|
806
807
|
RequiredProperties: [],
|
|
807
808
|
NonFilterableProperties: [],
|
|
@@ -915,6 +916,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
915
916
|
return owner.runAsOwner(async () => {
|
|
916
917
|
return Fragment.load({
|
|
917
918
|
id: oOptions.id,
|
|
919
|
+
type: "SCOPEDFEFRAGMENT",
|
|
920
|
+
contextPath: oOptions.contextPath,
|
|
918
921
|
definition: oFragment,
|
|
919
922
|
controller: oOptions.controller,
|
|
920
923
|
containingView: containingView
|
|
@@ -1129,4 +1132,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1129
1132
|
};
|
|
1130
1133
|
return CommonUtils;
|
|
1131
1134
|
}, false);
|
|
1132
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJjb252ZXJ0ZWRTZWFyY2hUZXJtIiwicmVwbGFjZSIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInNwbGl0IiwiaW5jbHVkZXMiLCJ0ZXh0IiwidGFyZ2V0U2VtT2JqZWN0IiwidGFyZ2V0QWN0aW9uIiwidGFyZ2V0UGFyYW1zIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYUxpbmtzIiwibGVuZ3RoIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFNYW5pZmVzdFNPS2V5cyIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsInNlbWFudGljT2JqZWN0SW50ZW50cyIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldEludGVudCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QiLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVNldFBhdGgiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsIl9yZWYiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsImluZGV4T2YiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiSUJOQWN0aW9ucyIsIm1lbnVCdXR0b25XaXRoSUJOQWN0aW9uIiwiSUJOQWN0aW9uIiwibWVudUFjdGlvbiIsIm1lbnVJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJmaWx0ZXIiLCJtZW51SXRlbSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhcHBsaWNhYmxlIiwibm90QXBwbGljYWJsZSIsImR5bmFtaWNBY3Rpb25QYXRoUHJlZml4IiwiaW50ZXJuYWxNb2RlbCIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5IiwiYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJzUHJvcGVydHlOYW1lIiwic1BhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJ0VHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYVBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4IiwicmVkdWNlIiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIiR0YXJnZXQiLCJwcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJqIiwicmFuZ2UiLCJnZXRSYW5nZURlZmluaXRpb24iLCJGaWx0ZXIiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiZmlsdGVycyIsImFuZCIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic01ldGFQYXRoIiwic0VudGl0eVNldCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImNyZWF0ZVJvb3RDb250ZXh0IiwicHJvZ3JhbW1pbmdNb2RlbCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwiY29udGV4dCIsInJvb3RDb250ZXh0UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNpbXBsZVJvb3RDb250ZXh0IiwiZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSIsImdldEluc3RhbmNlZFZpZXdzIiwiZmluZCIsInBhZ2VWaWV3IiwiZ2V0UHJvcGVydHkiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNvdXJjZSIsIm1hbmFnZWRPYmplY3QiLCJnZXRWaWV3IiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsImdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzLFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXMsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1bmlxdWVTb3J0IGZyb20gXCJzYXAvYmFzZS91dGlsL2FycmF5L3VuaXF1ZVNvcnRcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudERhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgT3ZlcmZsb3dUb29sYmFyQnV0dG9uIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDQ2hhcnQgfSBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEV4cGFuZFBhdGhUeXBlLFxuXHRNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRNZXRhTW9kZWxFbnVtLFxuXHRNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0TWV0YU1vZGVsUHJvcGVydHksXG5cdE1ldGFNb2RlbFR5cGVcbn0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0UmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbEZ1bmN0aW9uIGZyb20gXCIuL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcblxudHlwZSBNeUluYm94SW50ZW50ID0ge1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRhY3Rpb246IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gY2hlY2tpbmcgZm9yIHNlYXJjaCB0ZXJtIFwiT1JcIiBpcyB0byBhbGxvdyB0aGUgU0Qgc3BlY2lmaWMgc2VhcmNoIGZvciBTYWxlT3JkZXJUeXBlPU9SIChPUiBpcyBhIGhhbmEga2V5d29yZClcblx0aWYgKHNTZWFyY2hUZXJtID09PSBcIk9SXCIpIHtcblx0XHRyZXR1cm4gJ1wiJyArIHNTZWFyY2hUZXJtICsgJ1wiJztcblx0fVxuXG5cdGNvbnN0IGNvbnZlcnRlZFNlYXJjaFRlcm0gPSBzU2VhcmNoVGVybS5yZXBsYWNlKC9bXCIoKTtdL2csIFwiIFwiKTsgLy8gdGhlc2UgYXJlIHRoZSBzcGVjaWZpYyBjaGFyYWN0ZXJzIHRoYXQgZmFpbCBvbiBib3RoLCBDQVAgYW5kIFJBUDogXCIoKTtcblx0aWYgKGNvbnZlcnRlZFNlYXJjaFRlcm0gPT09IFwiXCIgfHwgY29udmVydGVkU2VhcmNoVGVybSA9PT0gXCIgXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRTZWFyY2hUZXJtO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0YXdhaXQgYmluZGluZ0NvbnRleHQucmVxdWVzdFByb3BlcnR5KGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmtleXNbMF0/Lm5hbWUpO1xufVxuXG5mdW5jdGlvbiBmbkhhc1RyYW5zaWVudENvbnRleHRzKG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0XHRiSGFzVHJhbnNpZW50Q29udGV4dHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSGFzVHJhbnNpZW50Q29udGV4dHM7XG59XG5cbi8vIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gaW4gZW50aXR5U2V0IHBhdGggYW5kIHByb3BlcnR5IHBhdGhcblxuYXN5bmMgZnVuY3Rpb24gX2dldFNPSW50ZW50cyhcblx0b1NoZWxsU2VydmljZUhlbHBlcjogSVNoZWxsU2VydmljZXMsXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRvU2VtYW50aWNPYmplY3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b1BhcmFtOiBvYmplY3QgfCB1bmRlZmluZWRcbik6IFByb21pc2U8TGlua1tdW10+IHtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3MoW1xuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHRwYXJhbXM6IG9QYXJhbVxuXHRcdH1cblx0XSk7XG59XG5cbnR5cGUgU09NYXBwaW5nID0geyBMb2NhbFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9OyBTZW1hbnRpY09iamVjdFByb3BlcnR5OiB1bmtub3duIH07XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTT01hcHBpbmdbXSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzOiBTT01hcHBpbmdbXSA9IFtdO1xuXHRjb25zdCBhTWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhvTWFwcGluZyk7XG5cdGxldCBvU2VtYW50aWNNYXBwaW5nOiBTT01hcHBpbmc7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFwcGluZ0tleXMpIHtcblx0XHRvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiBlbGVtZW50XG5cdFx0XHR9LFxuXHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogb01hcHBpbmdbZWxlbWVudF1cblx0XHR9O1xuXHRcdGFTT01hcHBpbmdzLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdH1cblxuXHRyZXR1cm4gYVNPTWFwcGluZ3M7XG59XG50eXBlIFNlbWFudGljSXRlbSA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHR0YXJnZXRTZW1PYmplY3Q6IHN0cmluZztcblx0dGFyZ2V0QWN0aW9uOiBzdHJpbmc7XG5cdHRhcmdldFBhcmFtczogdW5rbm93bjtcbn07XG4vKipcbiAqIEBwYXJhbSBsaW5rR3JvdXBcbiAqIEBwYXJhbSBhRXhjbHVkZWRBY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFBhcmFtc1xuICogQHBhcmFtIGFJdGVtc1xuICogQHBhcmFtIGFBbGxvd2VkQWN0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoXG5cdGxpbmtHcm91cDogTGlua1tdW10sXG5cdGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSxcblx0b1RhcmdldFBhcmFtczogdW5rbm93bixcblx0YUl0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pOiB2b2lkIHtcblx0Zm9yIChjb25zdCBsaW5rcyBvZiBsaW5rR3JvdXApIHtcblx0XHRmb3IgKGNvbnN0IG9MaW5rIG9mIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdFx0Y29uc3Qgc0FjdGlvbiA9IHNJbnRlbnQuc3BsaXQoXCItXCIpWzFdLnNwbGl0KFwiP1wiKVswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFBbGxvd2VkQWN0aW9ucyAmJiBhQWxsb3dlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpIHx8XG5cdFx0XHRcdCghYUFsbG93ZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMgJiYgIWFFeGNsdWRlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpXG5cdFx0XHQpIHtcblx0XHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IG9MaW5rLnRleHQsXG5cdFx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRQYXJhbXM6IG9UYXJnZXRQYXJhbXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljT2JqZWN0ID0ge1xuXHRhbGxvd2VkQWN0aW9ucz86IHVua25vd25bXTtcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogdW5rbm93bltdO1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdG1hcHBpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3QsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUFsbG93ZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMuYWxsb3dlZEFjdGlvbnMgfHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMsIGFBbGxvd2VkQWN0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHJlbGF0ZWQgaW50ZW50cyB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG9ubHkgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbi5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdEFuZEFjdGlvbiBUaGlzIHNwZWNpZmllcyB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIGZldGNoaW5nIHRoZSBpbnRlbnRzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0IFRoaXMgc2VwY2lmaWVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHVwZGF0aW5nIHJlbGF0ZWQgYXBwc1xuICogQHBhcmFtIGFwcENvbXBvbmVudFNPSXRlbXMgVGhpcyBpcyBhIGxpc3Qgb2Ygc2VtYW50aWMgaXRlbXMgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b25cbiAqIEBwYXJhbSBhTGlua3MgVGhpcyBpcyBhbiBhcnJheSBjb21wcmlzaW5nIG9mIHJlbGF0ZWQgaW50ZW50c1xuICovXG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oXG5cdHNlbWFudGljT2JqZWN0QW5kQWN0aW9uOiBNeUluYm94SW50ZW50LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtbXVtdXG4pOiB2b2lkIHtcblx0aWYgKGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IFtzZW1hbnRpY09iamVjdEFuZEFjdGlvbi5hY3Rpb25dO1xuXHRcdGNvbnN0IGV4Y2x1ZGVkQWN0aW9uczogW10gPSBbXTtcblx0XHRjb25zdCBzb01hcHBpbmdzOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHRhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogc29NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGV4Y2x1ZGVkQWN0aW9ucywgdGFyZ2V0UGFyYW1zLCBhcHBDb21wb25lbnRTT0l0ZW1zLCBhY3Rpb25zKTtcblx0fVxufVxuXG50eXBlIFNlbWFudGljT2JqZWN0Q29uZmlnID0ge1xuXHRhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY09iamVjdD47XG59O1xudHlwZSBSZWxhdGVkQXBwc0NvbmZpZyA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHR0YXJnZXRTZW1PYmplY3Q6IHN0cmluZztcblx0dGFyZ2V0QWN0aW9uOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdG9FbnRyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRhU2VtS2V5czogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfVtdLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01ldGFQYXRoOiBzdHJpbmcsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG4pOiBQcm9taXNlPFJlbGF0ZWRBcHBzQ29uZmlnW10+IHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlcjogSVNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBvUGFyYW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdGxldCBzQ3VycmVudFNlbU9iaiA9IFwiXCIsXG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBcIlwiO1xuXHRsZXQgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG5cdGxldCBhUmVsYXRlZEFwcHNNZW51SXRlbXM6IFJlbGF0ZWRBcHBzQ29uZmlnW10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSA9IFtdO1xuXHRsZXQgYU1hbmlmZXN0U09LZXlzOiBzdHJpbmdbXTtcblxuXHRhc3luYyBmdW5jdGlvbiBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0aWYgKG9FbnRyeSkge1xuXHRcdFx0aWYgKGFTZW1LZXlzICYmIGFTZW1LZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1LZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1NlbUtleSA9IGVsZW1lbnQuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NTZW1LZXldID0geyB2YWx1ZTogb0VudHJ5W3NTZW1LZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBmYWxsYmFjayB0byBUZWNobmljYWwgS2V5cyBpZiBubyBTZW1hbnRpYyBLZXkgaXMgcHJlc2VudFxuXHRcdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNPYmpLZXkgPSBhVGVjaG5pY2FsS2V5c1trZXldO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRcdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpIGFzIFNlbWFudGljT2JqZWN0Q29uZmlnO1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0bGV0IHNlbWFudGljT2JqZWN0SW50ZW50cztcblx0XHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRhTWFuaWZlc3RTT0tleXMgPSBPYmplY3Qua2V5cyhvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFNYW5pZmVzdFNPS2V5cykge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgZWxlbWVudCwgb1BhcmFtKSk7XG5cdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cyhcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbZWxlbWVudF0sXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXMsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gYXBwQ29tcG9uZW50U09JdGVtcyBpcyB1cGRhdGVkIGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb24gd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBtZXRob2Rcblx0XHQvLyBJbiBvdGhlciBjYXNlcyBpdCByZW1haW5zIGFzIGFuIGVtcHR5IGxpc3Rcblx0XHQvLyBXZSBjb25jYXQgdGhpcyBsaXN0IHRvd2FyZHMgdGhlIGVuZCB3aXRoIGFNYW5pZmVzdFNPSXRlbXNcblxuXHRcdGNvbnN0IGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YTogQ29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0aWYgKGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudCAmJiBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkpIHtcblx0XHRcdGNvbnN0IGludGVudDogTXlJbmJveEludGVudCA9IGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKTtcblx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0X2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgaW50ZW50LnNlbWFudGljT2JqZWN0LCBvUGFyYW0pXG5cdFx0XHQpO1xuXHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbihpbnRlbnQsIG9CaW5kaW5nQ29udGV4dCwgYXBwQ29tcG9uZW50U09JdGVtcywgc2VtYW50aWNPYmplY3RJbnRlbnRzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCk7XG5cdFx0aWYgKGFMaW5rcykge1xuXHRcdFx0aWYgKGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxldCBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFBhcmFtczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IENvbnRleHQ7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGNvbnN0IGFBbm5vdGF0aW9uc1NPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYCR7b01ldGFQYXRofUBgO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBgJHtvTWV0YVBhdGh9L0BgO1xuXHRcdFx0XHRjb25zdCBvRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0aWYgKCFvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08pIHtcblx0XHRcdFx0XHRjb25zdCBvRW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVR5cGVBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdFx0XHQvL1NraXAgc2FtZSBhcHBsaWNhdGlvbiBmcm9tIFJlbGF0ZWQgQXBwc1xuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zLnB1c2goc0N1cnJlbnRBY3Rpb24pO1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLm5hdmlnYXRpb25Db250ZXh0cyA9IG9CaW5kaW5nQ29udGV4dDtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3M7XG5cdFx0XHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXG5cdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeyB0YXJnZXRTZW1PYmplY3QgfSkge1xuXHRcdFx0XHRcdGlmIChhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdPy50YXJnZXRTZW1PYmplY3QgPT09IHRhcmdldFNlbU9iamVjdCkge1xuXHRcdFx0XHRcdFx0aXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIHJlbW92ZSBhbGwgYWN0aW9ucyBmcm9tIGN1cnJlbnQgaGFzaCBhcHBsaWNhdGlvbiBpZiBtYW5pZmVzdCBjb250YWlucyBlbXB0eSBhbGxvd2VkQWN0aW9uc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzICYmXG5cdFx0XHRcdFx0YUFubm90YXRpb25zU09JdGVtc1swXSAmJlxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thQW5ub3RhdGlvbnNTT0l0ZW1zWzBdLnRhcmdldFNlbU9iamVjdF0gJiZcblx0XHRcdFx0XHQhIW9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thQW5ub3RhdGlvbnNTT0l0ZW1zWzBdLnRhcmdldFNlbU9iamVjdF0uYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzb0l0ZW1zID0gYU1hbmlmZXN0U09JdGVtcy5jb25jYXQoYXBwQ29tcG9uZW50U09JdGVtcyk7XG5cdFx0XHRcdGFSZWxhdGVkQXBwc01lbnVJdGVtcyA9IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA/IHNvSXRlbXMgOiBzb0l0ZW1zLmNvbmNhdChhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblx0XHRcdFx0Ly8gSWYgbm8gYXBwIGluIGxpc3QsIHJlbGF0ZWQgYXBwcyBidXR0b24gd2lsbCBiZSBoaWRkZW5cblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcy5sZW5ndGggPiAwKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy9pdGVtc1wiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJlYWQgbGlua3NcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0fVxuXHRyZXR1cm4gYVJlbGF0ZWRBcHBzTWVudUl0ZW1zO1xufVxuXG5mdW5jdGlvbiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhcblx0b0VudGl0eUFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c0N1cnJlbnRTZW1PYmo6IHN0cmluZ1xuKToge1xuXHRiSGFzRW50aXR5U2V0U086IGJvb2xlYW47XG5cdGFBbGxvd2VkQWN0aW9uczogc3RyaW5nW107XG5cdGFVbmF2YWlsYWJsZUFjdGlvbnM6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W107XG5cdGFNYXBwaW5nczogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdO1xufSB7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0ge1xuXHRcdGJIYXNFbnRpdHlTZXRTTzogZmFsc2UsXG5cdFx0YUFsbG93ZWRBY3Rpb25zOiBbXSxcblx0XHRhVW5hdmFpbGFibGVBY3Rpb25zOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPltdLFxuXHRcdGFNYXBwaW5nczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdXG5cdH07XG5cdGxldCBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtLCBzQW5ub3RhdGlvbkFjdGlvblRlcm07XG5cdGxldCBzUXVhbGlmaWVyO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoa2V5LmluY2x1ZGVzKENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RNYXBwaW5nfWA7XG5cdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWA7XG5cblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoXCIjXCIpKSB7XG5cdFx0XHRcdHNRdWFsaWZpZXIgPSBrZXkuc3BsaXQoXCIjXCIpWzFdO1xuXHRcdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYCR7c0Fubm90YXRpb25NYXBwaW5nVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGAke3NBbm5vdGF0aW9uQWN0aW9uVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IChvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRjb25zdCBwYXRoID0gKG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gYCR7b01ldGFQYXRofS9gICsgYEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgO1xuXHQvL1NlbWFudGljIEtleXNcblx0Y29uc3QgYVNlbUtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU2VtYW50aWNLZXlWb2NhYnVsYXJ5KTtcblx0Ly8gVW5hdmFpbGFibGUgQWN0aW9uc1xuXHRjb25zdCBvRW50cnkgPSBvQmluZGluZ0NvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRvQmluZGluZ0NvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChyZXF1ZXN0ZWRPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHJlcXVlc3RlZE9iamVjdCxcblx0XHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dCxcblx0XHRcdFx0XHRhU2VtS2V5cyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9NZXRhUGF0aCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgdXBkYXRlIHRoZSByZWxhdGVkIGFwcCBkZXRhaWxzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgsIGFwcENvbXBvbmVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uPzogQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0b0J1dHRvbiAmJlxuXHRcdG9CdXR0b24uaXNBPEJ1dHRvbiB8IE92ZXJmbG93VG9vbGJhckJ1dHRvbj4oW1wic2FwLm0uQnV0dG9uXCIsIFwic2FwLm0uT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCJdKSAmJlxuXHRcdG9CdXR0b24uZ2V0VmlzaWJsZSgpICYmXG5cdFx0b0J1dHRvbi5nZXRFbmFibGVkKClcblx0KSB7XG5cdFx0b0J1dHRvbi5maXJlUHJlc3MoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2w6IENvbnRyb2wgfCBDb21wb25lbnQpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBPEFwcENvbXBvbmVudD4oXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIikpIHtcblx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdH1cblx0Y29uc3Qgb093bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKTtcblx0aWYgKCFvT3duZXIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBzaG91bGQgYmUgYSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgb3duZXIgb2YgdGhlIGNvbnRyb2xcIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvT3duZXIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQYWdlVmlldyhvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBGRVZpZXcge1xuXHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRyZXR1cm4gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0OiBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KChvQXBwQ29tcG9uZW50LmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRWaWV3KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IEZFVmlldyB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbXBvbmVudCAmJiBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8RkVWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2whO1xufVxuXG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogb2JqZWN0LCBvS2V5c1RvQ2hlY2s6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvS2V5c1RvQ2hlY2spIHtcblx0XHRpZiAob0tleXNUb0NoZWNrW3NLZXldICE9PSBvT2JqZWN0W3NLZXkgYXMga2V5b2YgdHlwZW9mIG9PYmplY3RdKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRvRmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlOiBNZXRhTW9kZWxFbnRpdHlUeXBlID0gKG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vYCkgfHwge30pIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdFx0b1Byb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChcblx0XHRcdG9FbnRpdHlUeXBlLmhhc093blByb3BlcnR5KHNLZXkpICYmXG5cdFx0XHQhL15cXCQvaS50ZXN0KHNLZXkpICYmXG5cdFx0XHRvRW50aXR5VHlwZVtzS2V5XS4ka2luZCAmJlxuXHRcdFx0X2ZuQ2hlY2tJc01hdGNoKG9FbnRpdHlUeXBlW3NLZXldLCBvRmlsdGVyIHx8IHsgJGtpbmQ6IFwiUHJvcGVydHlcIiB9KVxuXHRcdCkge1xuXHRcdFx0b1Byb3BlcnRpZXNbc0tleV0gPSBvRW50aXR5VHlwZVtzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IFRhYmxlIHwgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSB8IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdKTogVUk1RWxlbWVudFtdIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb24pIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQTxBY3Rpb25Ub29sYmFyQWN0aW9uPihcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBvTWVudSA9IG9BY3Rpb24uZ2V0TWVudSgpO1xuXHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvTWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0l0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSwgb1ZpZXc6IFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93biB9PiA9IHt9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9WaWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdFx0LmdldExpbmtzKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluayk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKG9JQk5BY3Rpb24uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSB8fCBvSUJOQWN0aW9uLmlzQTxNZW51SXRlbT4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxICYmIGFMaW5rWzBdICYmIGFMaW5rWzBdLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0cmV0dXJuIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0Py5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmbkdldExpbmtzKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBtZW51IGJ1dHRvbiB2aXNpYmlsaXR5IGlmIGFsbCB0aGUgdW5kZXJseWluZyBzZWxlY3Rpb24gYnV0dG9ucyBhcmUgaGlkZGVuLlxuICogQHBhcmFtIElCTkFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiB2b2lkIHtcblx0Y29uc3QgbWVudUJ1dHRvbldpdGhJQk5BY3Rpb246IE1lbnVCdXR0b25bXSA9IFtdO1xuXHRJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKElCTkFjdGlvbikge1xuXHRcdGlmIChJQk5BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUl0ZW1cIikpIHtcblx0XHRcdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLnB1c2goSUJOQWN0aW9uLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNZW51QnV0dG9uKTtcblx0XHR9XG5cdH0pO1xuXHRtZW51QnV0dG9uV2l0aElCTkFjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZW51QWN0aW9uKSB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUFjdGlvbi5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAobWVudUl0ZW0pIHtcblx0XHRcdHJldHVybiBtZW51SXRlbS5nZXRWaXNpYmxlKCk7XG5cdFx0fSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRtZW51QWN0aW9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbixcblx0aW5BY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW5cbik6XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdCAgfSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCIge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpfS8kVHlwZWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBzdHJpbmcsIG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBzUHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cblxuZXhwb3J0IHR5cGUgX1JlcXVlc3RlZFByb3BlcnR5ID0ge1xuXHR2UHJvcGVydHlWYWx1ZTogdW5rbm93bjtcblx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dDtcblx0c0FjdGlvbjogc3RyaW5nO1xuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFByb3BlcnR5KFxuXHRvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT4ge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH07XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzKTogdm9pZCB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRhUmVzdWx0c1swXS5zQWN0aW9uLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYXBwbGljYWJsZVxuICogQHBhcmFtIG5vdEFwcGxpY2FibGVcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdGFwcGxpY2FibGU6IHVua25vd25bXSxcblx0bm90QXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0Y29uc3QgZHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsXG5cdFx0aW50ZXJuYWxNb2RlbCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFwcGxpY2FibGUpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBub3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKiBAcmV0dXJucyBBbGxvd2VkIG9wZXJhdG9ycyBmb3IgdHlwZSBHdWlkXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSgpOiBzdHJpbmcge1xuXHRjb25zdCBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCA9IFtcIkVRXCIsIFwiTkVcIl07XG5cdHJldHVybiBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZC50b1N0cmluZygpO1xufVxuXG50eXBlIFBhcmFtZXRlckluZm8gPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRwYXJhbWV0ZXJQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+O1xufTtcbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8obWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKTogUGFyYW1ldGVySW5mbyB7XG5cdGNvbnN0IHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gbWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlckNvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IFBhcmFtZXRlckluZm8gPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1ldGFNb2RlbFByb3BlcnR5XG5cdFx0Pjtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG1QYWdlQ29udGV4dDogdW5rbm93bltdLCBvVmlldzogVmlldyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0NvbnRyb2wpO1xuXHRyZXR1cm4gYklzU3RpY2t5TW9kZSAmJiBiVUlFZGl0YWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlckRlZmF1bHRQYXJhbWV0ZXIgPSBFZG1BY3Rpb25QYXJhbWV0ZXIgfCBDb250ZXh0O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdXNlciBkZWZhdWx0cyBmcm9tIHRoZSBzdGFydHVwIGFwcCBzdGF0ZSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgc3RhcnR1cCBwYXJhbWV0ZXIgYW5kIHNldHMgdGhlbSB0byBhIG1vZGVsLlxuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGlzQWN0aW9uXG4gKiBAcGFyYW0gaXNDcmVhdGVcbiAqIEBwYXJhbSBhY3Rpb25EZWZhdWx0VmFsdWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhcmFtZXRlcnM6IFVzZXJEZWZhdWx0UGFyYW1ldGVyW10sXG5cdG1vZGVsOiBKU09OTW9kZWwgfCBPRGF0YVY0Q29udGV4dCxcblx0aXNBY3Rpb246IGJvb2xlYW4sXG5cdGlzQ3JlYXRlPzogYm9vbGVhbixcblx0YWN0aW9uRGVmYXVsdFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgQmFzZVR5cGUgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9lbnVtcy9CYXNlVHlwZVwiKSkuZGVmYXVsdDtcblx0Y29uc3QgVHlwZU1hcCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIikpLmRlZmF1bHQ7XG5cblx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSAoY29tcG9uZW50RGF0YSAmJiBjb21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRzaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlID0gYXdhaXQgc2hlbGxTZXJ2aWNlcy5nZXRTdGFydHVwQXBwU3RhdGUoYXBwQ29tcG9uZW50KTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlRGF0YSA9IHN0YXJ0dXBBcHBTdGF0ZT8uZ2V0RGF0YSgpIHx8IHt9LFxuXHRcdGV4dGVuZGVkUGFyYW1ldGVycyA9IChzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgc3RhcnR1cEFwcFN0YXRlRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRwYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRjb25zdCBzUHJvcGVydHlOYW1lID0gaXNBY3Rpb25cblx0XHRcdD8gYC8keyhvUGFyYW1ldGVyIGFzIHsgbmFtZTogc3RyaW5nIH0pLm5hbWV9YFxuXHRcdFx0OiAob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoPy4oKS5zbGljZSgob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBpc0FjdGlvbiA/IHNQcm9wZXJ0eU5hbWUuc2xpY2UoMSkgOiBzUHJvcGVydHlOYW1lO1xuXHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzICYmIGlzQ3JlYXRlKSB7XG5cdFx0XHRpZiAoYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJ0VHlwZSA9IChcblx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdCkudHlwZVxuXHRcdFx0XHQ/IFR5cGVNYXAuZ2V0QmFzZVR5cGUoXG5cdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkudHlwZVxuXHRcdFx0XHQgIClcblx0XHRcdFx0OiBCYXNlVHlwZS5TdHJpbmc7XG5cdFx0XHRjb25zdCB0eXBlSW5zdGFuY2UgPSBUeXBlTWFwLmdldERhdGFUeXBlSW5zdGFuY2UocGFyYW1ldGVydFR5cGUpO1xuXHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgdHlwZUluc3RhbmNlLnBhcnNlVmFsdWUoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdLCBcInN0cmluZ1wiKSk7XG5cdFx0fSBlbHNlIGlmIChleHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgb2YgZXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGggLSAxXVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgSW5ib3VuZFBhcmFtZXRlciA9IHtcblx0dXNlRm9yQ3JlYXRlOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUoXG5cdG9TdGFydHVwUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPixcblx0b0luYm91bmRQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSW5ib3VuZFBhcmFtZXRlcj5cbik6IHVua25vd24ge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPVxuXHRcdFx0b0luYm91bmRzICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFDcmVhdGVQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGVsZW1lbnQ7XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyID0ge1xuXHRwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlclZhbHVlPjtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcbn07XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyVmFsdWUgPSB7XG5cdHZhbHVlPzoge1xuXHRcdHZhbHVlPzogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0fTtcbn07XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBPdXRib3VuZFBhcmFtZXRlcik6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W10gPSBbXTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9zdHJpY3QtYm9vbGVhbi1leHByZXNzaW9uc1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuTG9jYWxQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCAhPT0gb1NlbWFudGljTWFwcGluZy5Mb2NhbFByb3BlcnR5LiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdG9Dcm9zc05hdjogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXI+XG4pOiBSZWNvcmQ8XG5cdHN0cmluZyxcblx0e1xuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXTtcblx0fVxuPiB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W107XG5cdFx0fVxuXHQ+ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmF2aWdhdGlvbj86IHtcblx0XHRcdFx0dGFyZ2V0T3V0Ym91bmQ/OiB7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cdFx0fVxuXHQ+O1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpIHx8IGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uPy50YXJnZXRPdXRib3VuZD8ub3V0Ym91bmQ7XG5cdFx0XHRpZiAoc091dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJDaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgJHtzT3V0Ym91bmR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuXG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IHVua25vd24pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIG9NYXBwaW5ncykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQoZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdGVsZW1lbnRbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0aWYgKG9TZWxlY3RPcHRpb24pIHtcblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RGcm9tUGF0aCA9IHtcblx0c2VtYW50aWNPYmplY3RQYXRoOiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9W107XG5cdHNlbWFudGljT2JqZWN0OiB7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHsgJFBhdGg6IHN0cmluZyB9O1xuXHR9O1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM6IHN0cmluZ1tdO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzUGF0aDogc3RyaW5nLFxuXHRzUXVhbGlmaWVyOiBzdHJpbmdcbik6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRsZXQgc1NlbWFudGljT2JqZWN0LCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0aWYgKHNRdWFsaWZpZXIgPT09IFwiXCIpIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fSMke3NRdWFsaWZpZXJ9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfSMke3NRdWFsaWZpZXJ9YFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogc3RyaW5nLCBzUXVhbGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+IHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5LlByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4sXG5cdHNSZXN0cmljdGlvbj86IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSkge1xuXHRcdGFQcm9wcyA9IChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdXG5cdFx0KS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD4pIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChwYXRoczogc3RyaW5nW10sIG5hdlBhdGg6IHN0cmluZywgcHJvcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYXZQYXRoUHJlZml4ID0gbmF2UGF0aCArIFwiL1wiO1xuXHRyZXR1cm4gcGF0aHMucmVkdWNlKChvdXRQYXRoczogc3RyaW5nW10sIHBhdGhUb0NoZWNrOiBzdHJpbmcpID0+IHtcblx0XHRpZiAocGF0aFRvQ2hlY2suc3RhcnRzV2l0aChuYXZQYXRoUHJlZml4KSkge1xuXHRcdFx0Y29uc3Qgb3V0UGF0aCA9IHBhdGhUb0NoZWNrLnJlcGxhY2UobmF2UGF0aFByZWZpeCwgXCJcIik7XG5cdFx0XHRpZiAoIW91dFBhdGhzLmluY2x1ZGVzKG91dFBhdGgpKSB7XG5cdFx0XHRcdG91dFBhdGhzLnB1c2gob3V0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRQYXRocztcblx0fSwgcHJvcHMpO1xufVxudHlwZSBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG59O1xuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGVudGl0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKTogX0ZpbHRlclJlc3RyaWN0aW9ucyB7XG5cdGNvbnN0IG9SZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHR9O1xuXHRsZXQgb0ZpbHRlclJlc3RyaWN0aW9ucztcblx0Y29uc3QgbmF2aWdhdGlvblRleHQgPSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdGNvbnN0IGZyVGVybSA9IFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCI7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoUGFydHMgPSBlbnRpdHlQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfS9gO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlQYXRoLCBvQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldFBhdGhQYXJ0cyA9IGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9JENvbnRhaW5zVGFyZ2V0YCk7XG5cdGNvbnN0IGNvbnRhaW5tZW50TmF2UGF0aCA9ICEhaXNDb250YWlubWVudCAmJiBlbnRpdHlUeXBlUGF0aFBhcnRzW2VudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cblx0Ly9MRUFTVCBQUklPUklUWSAtIEZpbHRlciByZXN0cmljdGlvbnMgZGlyZWN0bHkgYXQgRW50aXR5IFNldFxuXHQvL2UuZy4gRlIgaW4gXCJOUy5FbnRpdHlDb250YWluZXIvU2FsZXNPcmRlck1hbmFnZVwiIENvbnRleHRQYXRoOiAvU2FsZXNPcmRlck1hbmFnZVxuXHRpZiAoIWlzQ29udGFpbm1lbnQpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRjb25zdCByZXN1bHRDb250ZXh0Q2hlY2sgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0aWYgKCFyZXN1bHRDb250ZXh0Q2hlY2spIHtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHR9XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucykgfHwge307XG5cdH1cblxuXHRpZiAoZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgbmF2UGF0aCA9IGlzQ29udGFpbm1lbnQgPyAoY29udGFpbm1lbnROYXZQYXRoIGFzIHN0cmluZykgOiBlbnRpdHlTZXRQYXRoUGFydHNbZW50aXR5U2V0UGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdC8vIEluIGNhc2Ugb2YgY29udGFpbm1lbnQgd2UgdGFrZSBlbnRpdHlTZXQgcHJvdmlkZWQgYXMgcGFyZW50LiBBbmQgaW4gY2FzZSBvZiBub3JtYWwgd2Ugd291bGQgcmVtb3ZlIHRoZSBsYXN0IG5hdmlnYXRpb24gZnJvbSBlbnRpdHlTZXRQYXRoLlxuXHRcdGNvbnN0IHBhcmVudEVudGl0eVNldFBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5U2V0UGF0aCA6IGAvJHtlbnRpdHlTZXRQYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oYC8ke25hdmlnYXRpb25UZXh0fS9gKX1gO1xuXHRcdC8vVEhJUkQgSElHSEVTVCBQUklPUklUWSAtIFJlYWRpbmcgcHJvcGVydHkgcGF0aCByZXN0cmljdGlvbnMgLSBBbm5vdGF0aW9uIGF0IG1haW4gZW50aXR5IGJ1dCBkaXJlY3RseSBvbiBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGhcblx0XHQvL2UuZy4gUGFyZW50IEN1c3RvbWVyIHdpdGggUHJvcGVydHlQYXRoPVwiU2V0L0NpdHlOYW1lXCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9QYXJlbnRSZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHRcdH07XG5cdFx0aWYgKCFuYXZQYXRoLmluY2x1ZGVzKFwiJTJGXCIpKSB7XG5cdFx0XHRjb25zdCBvUGFyZW50RlIgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7cGFyZW50RW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0Y29uc3QgY29tcGxldGVBbGxvd2VkRXhwcyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9QYXJlbnRGUikgfHwge307XG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IE9iamVjdC5rZXlzKGNvbXBsZXRlQWxsb3dlZEV4cHMpLnJlZHVjZShcblx0XHRcdFx0KG91dFByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiwgcHJvcFBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wUGF0aC5zdGFydHNXaXRoKG5hdlBhdGggKyBcIi9cIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFByb3BQYXRoID0gcHJvcFBhdGgucmVwbGFjZShuYXZQYXRoICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0b3V0UHJvcFtvdXRQcm9wUGF0aF0gPSBjb21wbGV0ZUFsbG93ZWRFeHBzW3Byb3BQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG91dFByb3A7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vU0VDT05EIEhJR0hFU1QgcHJpb3JpdHkgLSBOYXZpZ2F0aW9uIHJlc3RyaWN0aW9uc1xuXHRcdC8vZS5nLiBQYXJlbnQgXCIvQ3VzdG9tZXJcIiB3aXRoIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg9XCJTZXRcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb05hdlJlc3RyaWN0aW9ucyA9IE1ldGFNb2RlbEZ1bmN0aW9uLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob0NvbnRleHQsIHBhcmVudEVudGl0eVNldFBhdGgsIG5hdlBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikpO1xuXHRcdGNvbnN0IG9OYXZGaWx0ZXJSZXN0ID0gb05hdlJlc3RyaWN0aW9ucyAmJiAob05hdlJlc3RyaWN0aW9uc1tcIkZpbHRlclJlc3RyaWN0aW9uc1wiXSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTtcblx0XHRjb25zdCBuYXZSZXNSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZSZXNSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdk5vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdk5vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9OYXZGaWx0ZXJSZXN0KSB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9ISUdIRVNUIHByaW9yaXR5IC0gUmVzdHJpY3Rpb25zIGhhdmluZyB0YXJnZXQgd2l0aCBuYXZpZ2F0aW9uIGFzc29jaWF0aW9uIGVudGl0eVxuXHRcdC8vIGUuZy4gRlIgaW4gXCJDdXN0b21lclBhcmFtZXRlcnMvU2V0XCIgQ29udGV4dFBhdGg6IFwiQ3VzdG9tZXIvU2V0XCJcblx0XHRjb25zdCBuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QgPSBvQ29udGV4dC5nZXRPYmplY3QoXG5cdFx0XHRgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0ke2ZyVGVybX1gXG5cdFx0KSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+O1xuXHRcdGNvbnN0IG5hdkFzc29jUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZBc3NvY05vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY05vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCkgfHwge31cblx0XHQpIGFzIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5cbmV4cG9ydCB0eXBlIFByZXByb2Nlc3NvclNldHRpbmdzID0ge1xuXHRhcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQ7XG5cdGJpbmRpbmdDb250ZXh0czogb2JqZWN0O1xuXHRtb2RlbHM6IG9iamVjdDtcbn07XG5leHBvcnQgdHlwZSBCYXNlVHJlZU1vZGlmaWVyID0ge1xuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0XHRzRnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdFx0bVByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRvVmlldz86IFZpZXdcblx0KTogUHJvbWlzZTxVSTVFbGVtZW50W10gfCBFbGVtZW50W10+O1xuXHR0YXJnZXRzOiBzdHJpbmc7XG5cdGdldElkKHZDb250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCk6IHN0cmluZztcblx0Z2V0Q29udHJvbFR5cGUob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50KTogc3RyaW5nO1xuXHRnZXRQcm9wZXJ0eTxUPihvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIHNQcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8VD47XG5cdGdldEFnZ3JlZ2F0aW9uKHBhcmVudDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPjtcblx0aW5zZXJ0QWdncmVnYXRpb24oXG5cdFx0cGFyZW50OiBVSTVFbGVtZW50IHwgRWxlbWVudCxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0Y29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQgfCBVSTVFbGVtZW50W10gfCBFbGVtZW50W10sXG5cdFx0aW5kZXg/OiBudW1iZXIsXG5cdFx0dmlldz86IEVsZW1lbnQsXG5cdFx0c2tpcEFkanVzdEluZGV4PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+O1xuXHRzZXRQcm9wZXJ0eShvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQsIHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgdlZhbHVlOiB1bmtub3duKTogdm9pZDtcblx0YnlTZWxlY3RvcihvU2VsZWN0b3I6IG9iamVjdCwgb0FwcENvbXBvbmVudD86IENvbXBvbmVudCwgb1ZpZXc/OiBFbGVtZW50KTogTWFuYWdlZE9iamVjdCB8IEVsZW1lbnQ7XG59O1xuXG5hc3luYyBmdW5jdGlvbiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChcblx0c0ZyYWdtZW50TmFtZTogc3RyaW5nIHwgRWxlbWVudCB8IG51bGwsXG5cdG9QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Jbk9wdGlvbnM/OiB7IHZpZXc/OiBWaWV3OyBpc1hNTD86IGJvb2xlYW47IGlkPzogc3RyaW5nOyBjb250cm9sbGVyPzogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEk7IGNvbnRhaW5pbmdWaWV3PzogVmlldyB9LFxuXHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyXG4pOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdGNvbnN0IG9PcHRpb25zID0gb0luT3B0aW9ucyB8fCB7fTtcblx0aWYgKG9Nb2RpZmllciAmJiB0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBvTW9kaWZpZXIudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucy52aWV3KS50aGVuKGZ1bmN0aW9uIChvRnJhZ21lbnQpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBmcmFnbWVudERhdGEgPVxuXHRcdFx0dHlwZW9mIHNGcmFnbWVudE5hbWUgPT09IFwic3RyaW5nXCIgPyBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSA6IHNGcmFnbWVudE5hbWU7XG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoZnJhZ21lbnREYXRhLCB7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0XHRjb25zdCBvQ29udHJvbCA9IG9GcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRpZiAoISFvT3B0aW9ucy5pc1hNTCAmJiBvQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdH1cblx0XHRsZXQgb3duZXI6IHsgcnVuQXNPd25lcjogPFQ+KGZuOiAoKSA9PiBUKSA9PiBUIH0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYXBwQ29tcG9uZW50ID8/IHsgcnVuQXNPd25lcjogKGZuKSA9PiBmbigpIH07XG5cdFx0aWYgKG9PcHRpb25zLmNvbnRhaW5pbmdWaWV3KSB7XG5cdFx0XHRjb25zdCB2aWV3T3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpO1xuXHRcdFx0aWYgKHZpZXdPd25lcikge1xuXHRcdFx0XHRvd25lciA9IHZpZXdPd25lcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGNvbnRhaW5pbmdWaWV3OiBWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvT3B0aW9ucy52aWV3ICYmICFvT3B0aW9ucy5jb250cm9sbGVyKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG92ZXJhbGwgc3R1cGlkLCBpbiBjYXNlIHdlIGFyZSBjb21pbmcgZnJvbSB0aGUgZGVsZWdhdGUgd2l0aCBhbiB4bWwgbm9kZSBpbnN0ZWFkIG9mIGEgZnJhZ21lbnQgd2UgbmVlZCB0byBwYXNzIHRoZSBjb250YWluaW5nVmlldyBpbiB0aGVyZSAoZG9uZSBieSB0aGUgb01vZGlmaWVyIGNhbGwgZm9yIGluc3RhbmNlKVxuXHRcdFx0Ly8gQnV0IGluIG90aGVyIHJ1bnRpbWUgY2FzZSB3aGVyZSB3ZSBhcmUgaGVyZSB3ZSBuZWVkIHRvIG1haW50YWluIHRoZSBjb250cm9sbGVyIGFuZCB0aHVzIGNhbm5vdCBoYXZlIGEgY29udGFpbmluZ1ZpZXcuLi5cblx0XHRcdGNvbnRhaW5pbmdWaWV3ID0gb09wdGlvbnMudmlldztcblx0XHR9XG5cdFx0cmV0dXJuIG93bmVyLnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdGRlZmluaXRpb246IG9GcmFnbWVudCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udHJvbGxlcjogb09wdGlvbnMuY29udHJvbGxlcixcblx0XHRcdFx0Y29udGFpbmluZ1ZpZXc6IGNvbnRhaW5pbmdWaWV3XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTaW5nbGV0b25QYXRoKHBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdHByb3BlcnR5TmFtZSA9IHBhcnRzLnBvcCgpISxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke25hdmlnYXRpb25QYXRofWApO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gYC8ke3NpbmdsZXRvbk5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHVua25vd24+IHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cblxuLy8gR2V0IHRoZSBwYXRoIGZvciBhY3Rpb24gcGFyYW1ldGVycyB0aGF0IGlzIG5lZWRlZCB0byByZWFkIHRoZSBhbm5vdGF0aW9uc1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyUGF0aChzUGF0aDogc3RyaW5nLCBzUGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgc0NvbnRleHQ7XG5cdGlmIChzUGF0aC5pbmNsdWRlcyhcIkAkdWk1Lm92ZXJsb2FkXCIpKSB7XG5cdFx0c0NvbnRleHQgPSBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBVbmJvdW5kIEFjdGlvbnMgaW4gQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dzXG5cdFx0Y29uc3QgYUFjdGlvbiA9IHNQYXRoLnNwbGl0KFwiLzBcIilbMF0uc3BsaXQoXCIuXCIpO1xuXHRcdHNDb250ZXh0ID0gYC8ke2FBY3Rpb25bYUFjdGlvbi5sZW5ndGggLSAxXX0vYDtcblx0fVxuXHRyZXR1cm4gc0NvbnRleHQgKyBzUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIEdldCByZXNvbHZlZCBleHByZXNzaW9uIGJpbmRpbmcgdXNlZCBmb3IgdGV4dHMgYXQgcnVudGltZS5cbiAqIEBwYXJhbSBleHBCaW5kaW5nXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgQSBzdHJpbmcgYWZ0ZXIgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhleHBCaW5kaW5nOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcge1xuXHQvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBkdW1teSBlbGVtZW50IHdpdGggdGhlIGV4cHJlc2lvbiBiaW5kaW5nLlxuXHQvLyBBZGRpbmcgaXQgYXMgZGVwZW5kZW50IHRvIHRoZSB2aWV3L2NvbnRyb2wgd291bGQgcHJvcGFnYXRlIGFsbCB0aGUgbW9kZWxzIHRvIHRoZSBkdW1teSBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBiaW5kaW5nLlxuXHQvLyBXZSByZW1vdmUgdGhlIGR1bW15IGVsZW1lbnQgYWZ0ZXIgdGhhdCBhbmQgZGVzdHJveSBpdC5cblxuXHRjb25zdCBhbnlSZXNvdXJjZVRleHQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IGV4cEJpbmRpbmcgfSk7XG5cdGNvbnRyb2wuYWRkRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGNvbnN0IHJlc3VsdFRleHQgPSBhbnlSZXNvdXJjZVRleHQuZ2V0QW55VGV4dCgpO1xuXHRjb250cm9sLnJlbW92ZURlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRhbnlSZXNvdXJjZVRleHQuZGVzdHJveSgpO1xuXG5cdHJldHVybiByZXN1bHRUZXh0O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaGFzIGEgc21hbGwgc2NyZWVuLlxuICogQHJldHVybnMgQSBCb29sZWFuLlxuICovXG5mdW5jdGlvbiBpc1NtYWxsRGV2aWNlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIURldmljZS5zeXN0ZW0uZGVza3RvcCB8fCBEZXZpY2UucmVzaXplLndpZHRoIDw9IDMyMDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBhbmQgY3JlYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXJzLlxuICogQHBhcmFtIGNvbnRyb2wgTURDIENoYXJ0LCBNREMgVGFibGUgb3IgTXVsdGlWaWV3IGNvbnRyb2wgb24gd2hpY2ggdGhlIGZpbHRlcnMgYXJlIGFwcGxpZWRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhbiBhcnJheSBvZiBmaWx0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24oY29udHJvbDogQ29udHJvbCB8IE1EQ0NoYXJ0IHwgTURDVGFibGUsIGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBGaWx0ZXJbXSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sIGFzIENvbnRyb2wpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBzdkNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7Y29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKX0ke2Fubm90YXRpb25QYXRofWApO1xuXHRjb25zdCBwcm9wZXJ0eUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlcltdPiA9IHt9O1xuXHRsZXQgYW5ub3RhdGlvbiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoc3ZDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pihhbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkpIHtcblx0XHRhbm5vdGF0aW9uID0gYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0aWYgKCFhbm5vdGF0aW9uIHx8ICFpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uVmFyaWFudFR5cGU+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdChhbm5vdGF0aW9uLlNlbGVjdE9wdGlvbnMgfHwgW10pLmZvckVhY2goKHNlbGVjdE9wdGlvbikgPT4ge1xuXHRcdGlmIChzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy4kdGFyZ2V0ICYmIHNlbGVjdE9wdGlvbi5SYW5nZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUuJHRhcmdldC50eXBlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBzZWxlY3RPcHRpb24uUmFuZ2VzKSB7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gZ2V0UmFuZ2VEZWZpbml0aW9uKHNlbGVjdE9wdGlvbi5SYW5nZXNbal0sIHByb3BlcnR5VHlwZSk7XG5cdFx0XHRcdHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID0gKHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID8/IFtdKS5jb25jYXQoXG5cdFx0XHRcdFx0bmV3IEZpbHRlcihwcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRmb3IgKGNvbnN0IHBhdGggaW4gcHJvcGVydHlGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IHByb3BlcnR5RmlsdGVyc1twYXRoXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChcblx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzRW50aXR5U2V0OiBzdHJpbmcsXG5cdG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IG9Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzTWV0YVBhdGgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKHNFbnRpdHlTZXQsIG9Db250ZXh0IHx8IG9NZXRhTW9kZWwsIG9EaWFnbm9zdGljcywgbWVyZ2VPYmplY3RzKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBEcmFmdFJvb3QgcGF0aC5cbiAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG4gKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cbiAqIFRoZSBuZXcgY3JlYXRlZCBjb250ZXh0IHJlcXVlc3QgdGhlIGtleSBvZiB0aGUgZW50aXR5IGluIG9yZGVyIHRvIGdldCB0aGUgRXRhZyBvZiB0aGlzIGVudGl0eS5cbiAqIEBwYXJhbSBwcm9ncmFtbWluZ01vZGVsXG4gKiBAcGFyYW0gdmlld1xuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb290Q29udGV4dChcblx0cHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nLFxuXHR2aWV3OiBWaWV3LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mb1tcInBhcmFtZXRlcnNcIl1cbik6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRpZiAoY29udGV4dCkge1xuXHRcdGNvbnN0IHJvb3RDb250ZXh0UGF0aCA9XG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsID09PSBcIkRyYWZ0XCIgPyBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpIDogTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0bGV0IHNpbXBsZVJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAocm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGgsIGFuZCBoYWQgYWxyZWFkeSBsb2FkZWQgaXRzIGNvbnRleHRcblx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdC5maW5kKFxuXHRcdFx0XHRcdChwYWdlVmlldzogVmlldykgPT5cblx0XHRcdFx0XHRcdHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoICYmXG5cdFx0XHRcdFx0XHRwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdClcblx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHNpbXBsZVJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQocm9vdENvbnRleHRQYXRoLCB1bmRlZmluZWQsIGJpbmRpbmdQYXJhbWV0ZXJzKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZVJvb3RDb250ZXh0KTtcblx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiLCBzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5IGZvciB0aGUgZWRpdG1vZGUgb3Igbm90LlxuICogQHBhcmFtIHNvdXJjZVxuICogQHJldHVybnMgSWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWRpdCBtb2RlXG4gKi9cbmZ1bmN0aW9uIGdldElzRWRpdGFibGUoc291cmNlOiBNYW5hZ2VkT2JqZWN0IHwgUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3QgbWFuYWdlZE9iamVjdCA9IHNvdXJjZS5pc0E8UGFnZUNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcIikgPyBzb3VyY2UuZ2V0VmlldygpIDogc291cmNlO1xuXHRyZXR1cm4gbWFuYWdlZE9iamVjdC5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0SU5MSU5FRURJVF9VUERBVEVHUk9VUElEOiBcImlubGluZVwiLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRnZXRDdXJyZW50UGFnZVZpZXc6IGdldEN1cnJlbnRQYWdlVmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHksXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0d2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQ6IHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0c2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlOiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUsXG5cdHNldER5bmFtaWNBY3Rpb25Db250ZXh0czogc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzLFxuXHRyZXF1ZXN0UHJvcGVydHk6IHJlcXVlc3RQcm9wZXJ0eSxcblx0Z2V0UGFyYW1ldGVyUGF0aDogZ2V0UGFyYW1ldGVyUGF0aCxcblx0Z2V0UmVsYXRlZEFwcHNNZW51SXRlbXM6IF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyxcblx0Z2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZzogX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyxcblx0dXBkYXRlUmVsYXRlQXBwc01vZGVsOiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM6IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zLFxuXHRnZXRGaWx0ZXJzRnJvbUFubm90YXRpb246IGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbixcblx0Y3JlYXRlUm9vdENvbnRleHQ6IGNyZWF0ZVJvb3RDb250ZXh0LFxuXHR1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5OiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5LFxuXHRpc1NtYWxsRGV2aWNlLFxuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCxcblx0Z2V0SXNFZGl0YWJsZTogZ2V0SXNFZGl0YWJsZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThFQSxTQUFTQSxtQkFBbUJBLENBQUNDLFdBQW1CLEVBQXNCO0lBQ3JFLElBQUksQ0FBQ0EsV0FBVyxFQUFFO01BQ2pCLE9BQU9DLFNBQVM7SUFDakI7O0lBRUE7SUFDQSxJQUFJRCxXQUFXLEtBQUssSUFBSSxFQUFFO01BQ3pCLE9BQU8sR0FBRyxHQUFHQSxXQUFXLEdBQUcsR0FBRztJQUMvQjtJQUVBLE1BQU1FLG1CQUFtQixHQUFHRixXQUFXLENBQUNHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFJRCxtQkFBbUIsS0FBSyxFQUFFLElBQUlBLG1CQUFtQixLQUFLLEdBQUcsRUFBRTtN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
|
|
1135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJjb252ZXJ0ZWRTZWFyY2hUZXJtIiwicmVwbGFjZSIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInNwbGl0IiwiaW5jbHVkZXMiLCJ0ZXh0IiwidGFyZ2V0U2VtT2JqZWN0IiwidGFyZ2V0QWN0aW9uIiwidGFyZ2V0UGFyYW1zIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYUxpbmtzIiwibGVuZ3RoIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFNYW5pZmVzdFNPS2V5cyIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsInNlbWFudGljT2JqZWN0SW50ZW50cyIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldEludGVudCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QiLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVNldFBhdGgiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsIl9yZWYiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsImluZGV4T2YiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiSUJOQWN0aW9ucyIsIm1lbnVCdXR0b25XaXRoSUJOQWN0aW9uIiwiSUJOQWN0aW9uIiwibWVudUFjdGlvbiIsIm1lbnVJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJmaWx0ZXIiLCJtZW51SXRlbSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhcHBsaWNhYmxlIiwibm90QXBwbGljYWJsZSIsImR5bmFtaWNBY3Rpb25QYXRoUHJlZml4IiwiaW50ZXJuYWxNb2RlbCIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5IiwiYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJzUHJvcGVydHlOYW1lIiwic1BhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJ0VHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYVBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4IiwicmVkdWNlIiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIiR0YXJnZXQiLCJwcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJqIiwicmFuZ2UiLCJnZXRSYW5nZURlZmluaXRpb24iLCJGaWx0ZXIiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiZmlsdGVycyIsImFuZCIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic01ldGFQYXRoIiwic0VudGl0eVNldCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImNyZWF0ZVJvb3RDb250ZXh0IiwicHJvZ3JhbW1pbmdNb2RlbCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwiY29udGV4dCIsInJvb3RDb250ZXh0UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNpbXBsZVJvb3RDb250ZXh0IiwiZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSIsImdldEluc3RhbmNlZFZpZXdzIiwiZmluZCIsInBhZ2VWaWV3IiwiZ2V0UHJvcGVydHkiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNvdXJjZSIsIm1hbmFnZWRPYmplY3QiLCJnZXRWaWV3IiwiSU5MSU5FRURJVF9VUERBVEVHUk9VUElEIiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsImdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzLFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXMsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1bmlxdWVTb3J0IGZyb20gXCJzYXAvYmFzZS91dGlsL2FycmF5L3VuaXF1ZVNvcnRcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudERhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgT3ZlcmZsb3dUb29sYmFyQnV0dG9uIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDQ2hhcnQgfSBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEV4cGFuZFBhdGhUeXBlLFxuXHRNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRNZXRhTW9kZWxFbnVtLFxuXHRNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0TWV0YU1vZGVsUHJvcGVydHksXG5cdE1ldGFNb2RlbFR5cGVcbn0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0UmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbEZ1bmN0aW9uIGZyb20gXCIuL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcblxudHlwZSBNeUluYm94SW50ZW50ID0ge1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRhY3Rpb246IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gY2hlY2tpbmcgZm9yIHNlYXJjaCB0ZXJtIFwiT1JcIiBpcyB0byBhbGxvdyB0aGUgU0Qgc3BlY2lmaWMgc2VhcmNoIGZvciBTYWxlT3JkZXJUeXBlPU9SIChPUiBpcyBhIGhhbmEga2V5d29yZClcblx0aWYgKHNTZWFyY2hUZXJtID09PSBcIk9SXCIpIHtcblx0XHRyZXR1cm4gJ1wiJyArIHNTZWFyY2hUZXJtICsgJ1wiJztcblx0fVxuXG5cdGNvbnN0IGNvbnZlcnRlZFNlYXJjaFRlcm0gPSBzU2VhcmNoVGVybS5yZXBsYWNlKC9bXCIoKTtdL2csIFwiIFwiKTsgLy8gdGhlc2UgYXJlIHRoZSBzcGVjaWZpYyBjaGFyYWN0ZXJzIHRoYXQgZmFpbCBvbiBib3RoLCBDQVAgYW5kIFJBUDogXCIoKTtcblx0aWYgKGNvbnZlcnRlZFNlYXJjaFRlcm0gPT09IFwiXCIgfHwgY29udmVydGVkU2VhcmNoVGVybSA9PT0gXCIgXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBjb252ZXJ0ZWRTZWFyY2hUZXJtO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0YXdhaXQgYmluZGluZ0NvbnRleHQucmVxdWVzdFByb3BlcnR5KGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmtleXNbMF0/Lm5hbWUpO1xufVxuXG5mdW5jdGlvbiBmbkhhc1RyYW5zaWVudENvbnRleHRzKG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0XHRiSGFzVHJhbnNpZW50Q29udGV4dHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSGFzVHJhbnNpZW50Q29udGV4dHM7XG59XG5cbi8vIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gaW4gZW50aXR5U2V0IHBhdGggYW5kIHByb3BlcnR5IHBhdGhcblxuYXN5bmMgZnVuY3Rpb24gX2dldFNPSW50ZW50cyhcblx0b1NoZWxsU2VydmljZUhlbHBlcjogSVNoZWxsU2VydmljZXMsXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRvU2VtYW50aWNPYmplY3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b1BhcmFtOiBvYmplY3QgfCB1bmRlZmluZWRcbik6IFByb21pc2U8TGlua1tdW10+IHtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3MoW1xuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHRwYXJhbXM6IG9QYXJhbVxuXHRcdH1cblx0XSk7XG59XG5cbnR5cGUgU09NYXBwaW5nID0geyBMb2NhbFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9OyBTZW1hbnRpY09iamVjdFByb3BlcnR5OiB1bmtub3duIH07XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTT01hcHBpbmdbXSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzOiBTT01hcHBpbmdbXSA9IFtdO1xuXHRjb25zdCBhTWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhvTWFwcGluZyk7XG5cdGxldCBvU2VtYW50aWNNYXBwaW5nOiBTT01hcHBpbmc7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFwcGluZ0tleXMpIHtcblx0XHRvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiBlbGVtZW50XG5cdFx0XHR9LFxuXHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogb01hcHBpbmdbZWxlbWVudF1cblx0XHR9O1xuXHRcdGFTT01hcHBpbmdzLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdH1cblxuXHRyZXR1cm4gYVNPTWFwcGluZ3M7XG59XG50eXBlIFNlbWFudGljSXRlbSA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHR0YXJnZXRTZW1PYmplY3Q6IHN0cmluZztcblx0dGFyZ2V0QWN0aW9uOiBzdHJpbmc7XG5cdHRhcmdldFBhcmFtczogdW5rbm93bjtcbn07XG4vKipcbiAqIEBwYXJhbSBsaW5rR3JvdXBcbiAqIEBwYXJhbSBhRXhjbHVkZWRBY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFBhcmFtc1xuICogQHBhcmFtIGFJdGVtc1xuICogQHBhcmFtIGFBbGxvd2VkQWN0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoXG5cdGxpbmtHcm91cDogTGlua1tdW10sXG5cdGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSxcblx0b1RhcmdldFBhcmFtczogdW5rbm93bixcblx0YUl0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pOiB2b2lkIHtcblx0Zm9yIChjb25zdCBsaW5rcyBvZiBsaW5rR3JvdXApIHtcblx0XHRmb3IgKGNvbnN0IG9MaW5rIG9mIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdFx0Y29uc3Qgc0FjdGlvbiA9IHNJbnRlbnQuc3BsaXQoXCItXCIpWzFdLnNwbGl0KFwiP1wiKVswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFBbGxvd2VkQWN0aW9ucyAmJiBhQWxsb3dlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpIHx8XG5cdFx0XHRcdCghYUFsbG93ZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMgJiYgIWFFeGNsdWRlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpXG5cdFx0XHQpIHtcblx0XHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IG9MaW5rLnRleHQsXG5cdFx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRQYXJhbXM6IG9UYXJnZXRQYXJhbXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljT2JqZWN0ID0ge1xuXHRhbGxvd2VkQWN0aW9ucz86IHVua25vd25bXTtcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogdW5rbm93bltdO1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdG1hcHBpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3QsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUFsbG93ZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMuYWxsb3dlZEFjdGlvbnMgfHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMsIGFBbGxvd2VkQWN0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHJlbGF0ZWQgaW50ZW50cyB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG9ubHkgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbi5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdEFuZEFjdGlvbiBUaGlzIHNwZWNpZmllcyB0aGUgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIGZldGNoaW5nIHRoZSBpbnRlbnRzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0IFRoaXMgc2VwY2lmaWVzIHRoZSBiaW5kaW5nIGNvbnRleHQgZm9yIHVwZGF0aW5nIHJlbGF0ZWQgYXBwc1xuICogQHBhcmFtIGFwcENvbXBvbmVudFNPSXRlbXMgVGhpcyBpcyBhIGxpc3Qgb2Ygc2VtYW50aWMgaXRlbXMgdXNlZCBmb3IgdXBkYXRpbmcgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b25cbiAqIEBwYXJhbSBhTGlua3MgVGhpcyBpcyBhbiBhcnJheSBjb21wcmlzaW5nIG9mIHJlbGF0ZWQgaW50ZW50c1xuICovXG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oXG5cdHNlbWFudGljT2JqZWN0QW5kQWN0aW9uOiBNeUluYm94SW50ZW50LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtbXVtdXG4pOiB2b2lkIHtcblx0aWYgKGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IFtzZW1hbnRpY09iamVjdEFuZEFjdGlvbi5hY3Rpb25dO1xuXHRcdGNvbnN0IGV4Y2x1ZGVkQWN0aW9uczogW10gPSBbXTtcblx0XHRjb25zdCBzb01hcHBpbmdzOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHRhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogc29NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGV4Y2x1ZGVkQWN0aW9ucywgdGFyZ2V0UGFyYW1zLCBhcHBDb21wb25lbnRTT0l0ZW1zLCBhY3Rpb25zKTtcblx0fVxufVxuXG50eXBlIFNlbWFudGljT2JqZWN0Q29uZmlnID0ge1xuXHRhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY09iamVjdD47XG59O1xudHlwZSBSZWxhdGVkQXBwc0NvbmZpZyA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHR0YXJnZXRTZW1PYmplY3Q6IHN0cmluZztcblx0dGFyZ2V0QWN0aW9uOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdG9FbnRyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRhU2VtS2V5czogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfVtdLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0b01ldGFQYXRoOiBzdHJpbmcsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG4pOiBQcm9taXNlPFJlbGF0ZWRBcHBzQ29uZmlnW10+IHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlcjogSVNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBvUGFyYW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdGxldCBzQ3VycmVudFNlbU9iaiA9IFwiXCIsXG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBcIlwiO1xuXHRsZXQgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG5cdGxldCBhUmVsYXRlZEFwcHNNZW51SXRlbXM6IFJlbGF0ZWRBcHBzQ29uZmlnW10gPSBbXTtcblx0bGV0IGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSA9IFtdO1xuXHRsZXQgYU1hbmlmZXN0U09LZXlzOiBzdHJpbmdbXTtcblxuXHRhc3luYyBmdW5jdGlvbiBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdGNvbnN0IG9QYXJzZWRVcmwgPSBvU2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdHNDdXJyZW50U2VtT2JqID0gb1BhcnNlZFVybC5zZW1hbnRpY09iamVjdDsgLy8gQ3VycmVudCBTZW1hbnRpYyBPYmplY3Rcblx0XHRzQ3VycmVudEFjdGlvbiA9IG9QYXJzZWRVcmwuYWN0aW9uO1xuXHRcdHJldHVybiBfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBzQ3VycmVudFNlbU9iaiwgb1BhcmFtKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0aWYgKG9FbnRyeSkge1xuXHRcdFx0aWYgKGFTZW1LZXlzICYmIGFTZW1LZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1LZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1NlbUtleSA9IGVsZW1lbnQuJFByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzU2VtS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NTZW1LZXldID0geyB2YWx1ZTogb0VudHJ5W3NTZW1LZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBmYWxsYmFjayB0byBUZWNobmljYWwgS2V5cyBpZiBubyBTZW1hbnRpYyBLZXkgaXMgcHJlc2VudFxuXHRcdFx0XHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNPYmpLZXkgPSBhVGVjaG5pY2FsS2V5c1trZXldO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NPYmpLZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gTG9naWMgdG8gcmVhZCBhZGRpdGlvbmFsIFNPIGZyb20gbWFuaWZlc3QgYW5kIHVwZGF0ZWQgcmVsYXRlZGFwcHMgbW9kZWxcblxuXHRcdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpIGFzIFNlbWFudGljT2JqZWN0Q29uZmlnO1xuXHRcdGNvbnN0IGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0bGV0IHNlbWFudGljT2JqZWN0SW50ZW50cztcblx0XHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRhTWFuaWZlc3RTT0tleXMgPSBPYmplY3Qua2V5cyhvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFNYW5pZmVzdFNPS2V5cykge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgZWxlbWVudCwgb1BhcmFtKSk7XG5cdFx0XHRcdF9nZXRSZWxhdGVkSW50ZW50cyhcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbZWxlbWVudF0sXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXMsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gYXBwQ29tcG9uZW50U09JdGVtcyBpcyB1cGRhdGVkIGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb24gd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBtZXRob2Rcblx0XHQvLyBJbiBvdGhlciBjYXNlcyBpdCByZW1haW5zIGFzIGFuIGVtcHR5IGxpc3Rcblx0XHQvLyBXZSBjb25jYXQgdGhpcyBsaXN0IHRvd2FyZHMgdGhlIGVuZCB3aXRoIGFNYW5pZmVzdFNPSXRlbXNcblxuXHRcdGNvbnN0IGFwcENvbXBvbmVudFNPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0Y29uc3QgY29tcG9uZW50RGF0YTogQ29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0aWYgKGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudCAmJiBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkpIHtcblx0XHRcdGNvbnN0IGludGVudDogTXlJbmJveEludGVudCA9IGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKTtcblx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcblx0XHRcdFx0X2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgaW50ZW50LnNlbWFudGljT2JqZWN0LCBvUGFyYW0pXG5cdFx0XHQpO1xuXHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbihpbnRlbnQsIG9CaW5kaW5nQ29udGV4dCwgYXBwQ29tcG9uZW50U09JdGVtcywgc2VtYW50aWNPYmplY3RJbnRlbnRzKTtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3QgYUxpbmtzID0gYXdhaXQgZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCk7XG5cdFx0aWYgKGFMaW5rcykge1xuXHRcdFx0aWYgKGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGxldCBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSBmYWxzZTtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFBhcmFtczoge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cz86IENvbnRleHQ7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdO1xuXHRcdFx0XHR9ID0ge307XG5cdFx0XHRcdGNvbnN0IGFBbm5vdGF0aW9uc1NPSXRlbXM6IFNlbWFudGljSXRlbVtdID0gW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYCR7b01ldGFQYXRofUBgO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBgJHtvTWV0YVBhdGh9L0BgO1xuXHRcdFx0XHRjb25zdCBvRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0aWYgKCFvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08pIHtcblx0XHRcdFx0XHRjb25zdCBvRW50aXR5VHlwZUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVR5cGVQYXRoKTtcblx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVR5cGVBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdFx0XHQvL1NraXAgc2FtZSBhcHBsaWNhdGlvbiBmcm9tIFJlbGF0ZWQgQXBwc1xuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zLnB1c2goc0N1cnJlbnRBY3Rpb24pO1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLm5hdmlnYXRpb25Db250ZXh0cyA9IG9CaW5kaW5nQ29udGV4dDtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3M7XG5cdFx0XHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXG5cdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeyB0YXJnZXRTZW1PYmplY3QgfSkge1xuXHRcdFx0XHRcdGlmIChhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdPy50YXJnZXRTZW1PYmplY3QgPT09IHRhcmdldFNlbU9iamVjdCkge1xuXHRcdFx0XHRcdFx0aXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIHJlbW92ZSBhbGwgYWN0aW9ucyBmcm9tIGN1cnJlbnQgaGFzaCBhcHBsaWNhdGlvbiBpZiBtYW5pZmVzdCBjb250YWlucyBlbXB0eSBhbGxvd2VkQWN0aW9uc1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzICYmXG5cdFx0XHRcdFx0YUFubm90YXRpb25zU09JdGVtc1swXSAmJlxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thQW5ub3RhdGlvbnNTT0l0ZW1zWzBdLnRhcmdldFNlbU9iamVjdF0gJiZcblx0XHRcdFx0XHQhIW9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1thQW5ub3RhdGlvbnNTT0l0ZW1zWzBdLnRhcmdldFNlbU9iamVjdF0uYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzb0l0ZW1zID0gYU1hbmlmZXN0U09JdGVtcy5jb25jYXQoYXBwQ29tcG9uZW50U09JdGVtcyk7XG5cdFx0XHRcdGFSZWxhdGVkQXBwc01lbnVJdGVtcyA9IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA/IHNvSXRlbXMgOiBzb0l0ZW1zLmNvbmNhdChhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblx0XHRcdFx0Ly8gSWYgbm8gYXBwIGluIGxpc3QsIHJlbGF0ZWQgYXBwcyBidXR0b24gd2lsbCBiZSBoaWRkZW5cblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcy5sZW5ndGggPiAwKTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy9pdGVtc1wiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJlYWQgbGlua3NcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0fVxuXHRyZXR1cm4gYVJlbGF0ZWRBcHBzTWVudUl0ZW1zO1xufVxuXG5mdW5jdGlvbiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhcblx0b0VudGl0eUFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0c0N1cnJlbnRTZW1PYmo6IHN0cmluZ1xuKToge1xuXHRiSGFzRW50aXR5U2V0U086IGJvb2xlYW47XG5cdGFBbGxvd2VkQWN0aW9uczogc3RyaW5nW107XG5cdGFVbmF2YWlsYWJsZUFjdGlvbnM6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W107XG5cdGFNYXBwaW5nczogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdO1xufSB7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0ge1xuXHRcdGJIYXNFbnRpdHlTZXRTTzogZmFsc2UsXG5cdFx0YUFsbG93ZWRBY3Rpb25zOiBbXSxcblx0XHRhVW5hdmFpbGFibGVBY3Rpb25zOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPltdLFxuXHRcdGFNYXBwaW5nczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPltdXG5cdH07XG5cdGxldCBzQW5ub3RhdGlvbk1hcHBpbmdUZXJtLCBzQW5ub3RhdGlvbkFjdGlvblRlcm07XG5cdGxldCBzUXVhbGlmaWVyO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoa2V5LmluY2x1ZGVzKENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RNYXBwaW5nfWA7XG5cdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWA7XG5cblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoXCIjXCIpKSB7XG5cdFx0XHRcdHNRdWFsaWZpZXIgPSBrZXkuc3BsaXQoXCIjXCIpWzFdO1xuXHRcdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYCR7c0Fubm90YXRpb25NYXBwaW5nVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGAke3NBbm5vdGF0aW9uQWN0aW9uVGVybX0jJHtzUXVhbGlmaWVyfWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dKSB7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCwgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBQcm9taXNlPHVua25vd24+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IChvT2JqZWN0UGFnZUxheW91dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRjb25zdCBwYXRoID0gKG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRjb25zdCBvTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gYCR7b01ldGFQYXRofS9gICsgYEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgO1xuXHQvL1NlbWFudGljIEtleXNcblx0Y29uc3QgYVNlbUtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU2VtYW50aWNLZXlWb2NhYnVsYXJ5KTtcblx0Ly8gVW5hdmFpbGFibGUgQWN0aW9uc1xuXHRjb25zdCBvRW50cnkgPSBvQmluZGluZ0NvbnRleHQ/LmdldE9iamVjdCgpO1xuXHRpZiAoIW9FbnRyeSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRvQmluZGluZ0NvbnRleHRcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uIChyZXF1ZXN0ZWRPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0XHRcdHJlcXVlc3RlZE9iamVjdCxcblx0XHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dCxcblx0XHRcdFx0XHRhU2VtS2V5cyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdG9NZXRhUGF0aCxcblx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgdXBkYXRlIHRoZSByZWxhdGVkIGFwcCBkZXRhaWxzXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgsIGFwcENvbXBvbmVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gb0J1dHRvblxuICovXG5mdW5jdGlvbiBmbkZpcmVCdXR0b25QcmVzcyhvQnV0dG9uPzogQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoXG5cdFx0b0J1dHRvbiAmJlxuXHRcdG9CdXR0b24uaXNBPEJ1dHRvbiB8IE92ZXJmbG93VG9vbGJhckJ1dHRvbj4oW1wic2FwLm0uQnV0dG9uXCIsIFwic2FwLm0uT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCJdKSAmJlxuXHRcdG9CdXR0b24uZ2V0VmlzaWJsZSgpICYmXG5cdFx0b0J1dHRvbi5nZXRFbmFibGVkKClcblx0KSB7XG5cdFx0b0J1dHRvbi5maXJlUHJlc3MoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRBcHBDb21wb25lbnQob0NvbnRyb2w6IENvbnRyb2wgfCBDb21wb25lbnQpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBPEFwcENvbXBvbmVudD4oXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIikpIHtcblx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdH1cblx0Y29uc3Qgb093bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db250cm9sKTtcblx0aWYgKCFvT3duZXIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBzaG91bGQgYmUgYSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgb3duZXIgb2YgdGhlIGNvbnRyb2xcIik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdldEFwcENvbXBvbmVudChvT3duZXIpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQYWdlVmlldyhvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBGRVZpZXcge1xuXHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRyZXR1cm4gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0OiBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KChvQXBwQ29tcG9uZW50LmdldFJvb3RDb250YWluZXIoKSBhcyBOYXZDb250YWluZXIpLmdldEN1cnJlbnRQYWdlKCkpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRWaWV3KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCk6IEZFVmlldyB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0E8Q29tcG9uZW50Q29udGFpbmVyPihcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiKSkge1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbC5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdG9Db250cm9sID0gb0NvbXBvbmVudCAmJiBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdH1cblx0d2hpbGUgKG9Db250cm9sICYmICFvQ29udHJvbC5pc0E8RkVWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbC5nZXRQYXJlbnQoKTtcblx0fVxuXHRyZXR1cm4gb0NvbnRyb2whO1xufVxuXG5mdW5jdGlvbiBfZm5DaGVja0lzTWF0Y2gob09iamVjdDogb2JqZWN0LCBvS2V5c1RvQ2hlY2s6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvS2V5c1RvQ2hlY2spIHtcblx0XHRpZiAob0tleXNUb0NoZWNrW3NLZXldICE9PSBvT2JqZWN0W3NLZXkgYXMga2V5b2YgdHlwZW9mIG9PYmplY3RdKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhcblx0bWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsXG5cdHNDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRvRmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlOiBNZXRhTW9kZWxFbnRpdHlUeXBlID0gKG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vYCkgfHwge30pIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdFx0b1Byb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5PiB8IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9IHt9O1xuXG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChcblx0XHRcdG9FbnRpdHlUeXBlLmhhc093blByb3BlcnR5KHNLZXkpICYmXG5cdFx0XHQhL15cXCQvaS50ZXN0KHNLZXkpICYmXG5cdFx0XHRvRW50aXR5VHlwZVtzS2V5XS4ka2luZCAmJlxuXHRcdFx0X2ZuQ2hlY2tJc01hdGNoKG9FbnRpdHlUeXBlW3NLZXldLCBvRmlsdGVyIHx8IHsgJGtpbmQ6IFwiUHJvcGVydHlcIiB9KVxuXHRcdCkge1xuXHRcdFx0b1Byb3BlcnRpZXNbc0tleV0gPSBvRW50aXR5VHlwZVtzS2V5XTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0aWVzO1xufVxuXG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IFRhYmxlIHwgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSB8IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdKTogVUk1RWxlbWVudFtdIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb24pIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQTxBY3Rpb25Ub29sYmFyQWN0aW9uPihcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBvTWVudSA9IG9BY3Rpb24uZ2V0TWVudSgpO1xuXHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvTWVudS5nZXRJdGVtcygpO1xuXHRcdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW0pID0+IHtcblx0XHRcdFx0XHRpZiAob0l0ZW0uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0l0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSwgb1ZpZXc6IFZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93biB9PiA9IHt9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9WaWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdFx0LmdldExpbmtzKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluayk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKG9JQk5BY3Rpb24uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSB8fCBvSUJOQWN0aW9uLmlzQTxNZW51SXRlbT4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxICYmIGFMaW5rWzBdICYmIGFMaW5rWzBdLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0cmV0dXJuIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0Py5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGZuR2V0TGlua3Mob0RhdGEpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmbkdldExpbmtzKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVcGRhdGVzIHRoZSBtZW51IGJ1dHRvbiB2aXNpYmlsaXR5IGlmIGFsbCB0aGUgdW5kZXJseWluZyBzZWxlY3Rpb24gYnV0dG9ucyBhcmUgaGlkZGVuLlxuICogQHBhcmFtIElCTkFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlTWVudUJ1dHRvblZpc2libGl0eShJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiB2b2lkIHtcblx0Y29uc3QgbWVudUJ1dHRvbldpdGhJQk5BY3Rpb246IE1lbnVCdXR0b25bXSA9IFtdO1xuXHRJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKElCTkFjdGlvbikge1xuXHRcdGlmIChJQk5BY3Rpb24uaXNBPE1lbnVCdXR0b24+KFwic2FwLm0uTWVudUl0ZW1cIikpIHtcblx0XHRcdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLnB1c2goSUJOQWN0aW9uLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNZW51QnV0dG9uKTtcblx0XHR9XG5cdH0pO1xuXHRtZW51QnV0dG9uV2l0aElCTkFjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChtZW51QWN0aW9uKSB7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUFjdGlvbi5nZXRNZW51KCkuZ2V0SXRlbXMoKTtcblx0XHRjb25zdCB2aXNpYmxlTWVudUl0ZW1zID0gbWVudUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAobWVudUl0ZW0pIHtcblx0XHRcdHJldHVybiBtZW51SXRlbS5nZXRWaXNpYmxlKCk7XG5cdFx0fSk7XG5cdFx0aWYgKHZpc2libGVNZW51SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRtZW51QWN0aW9uLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdH1cblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbixcblx0aW5BY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW5cbik6XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdCAgfSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCIge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpfS8kVHlwZWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBzdHJpbmcsIG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBzUHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cblxuZXhwb3J0IHR5cGUgX1JlcXVlc3RlZFByb3BlcnR5ID0ge1xuXHR2UHJvcGVydHlWYWx1ZTogdW5rbm93bjtcblx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dDtcblx0c0FjdGlvbjogc3RyaW5nO1xuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFByb3BlcnR5KFxuXHRvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT4ge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH07XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzKTogdm9pZCB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRhUmVzdWx0c1swXS5zQWN0aW9uLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYXBwbGljYWJsZVxuICogQHBhcmFtIG5vdEFwcGxpY2FibGVcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdGFwcGxpY2FibGU6IHVua25vd25bXSxcblx0bm90QXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0Y29uc3QgZHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsXG5cdFx0aW50ZXJuYWxNb2RlbCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFwcGxpY2FibGUpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBub3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKiBAcmV0dXJucyBBbGxvd2VkIG9wZXJhdG9ycyBmb3IgdHlwZSBHdWlkXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSgpOiBzdHJpbmcge1xuXHRjb25zdCBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCA9IFtcIkVRXCIsIFwiTkVcIl07XG5cdHJldHVybiBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZC50b1N0cmluZygpO1xufVxuXG50eXBlIFBhcmFtZXRlckluZm8gPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRwYXJhbWV0ZXJQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+O1xufTtcbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8obWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKTogUGFyYW1ldGVySW5mbyB7XG5cdGNvbnN0IHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gbWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlckNvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IFBhcmFtZXRlckluZm8gPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1ldGFNb2RlbFByb3BlcnR5XG5cdFx0Pjtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG1QYWdlQ29udGV4dDogdW5rbm93bltdLCBvVmlldzogVmlldyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob0NvbnRyb2wpO1xuXHRyZXR1cm4gYklzU3RpY2t5TW9kZSAmJiBiVUlFZGl0YWJsZTtcbn1cblxuZXhwb3J0IHR5cGUgVXNlckRlZmF1bHRQYXJhbWV0ZXIgPSBFZG1BY3Rpb25QYXJhbWV0ZXIgfCBDb250ZXh0O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdXNlciBkZWZhdWx0cyBmcm9tIHRoZSBzdGFydHVwIGFwcCBzdGF0ZSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgc3RhcnR1cCBwYXJhbWV0ZXIgYW5kIHNldHMgdGhlbSB0byBhIG1vZGVsLlxuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBtb2RlbFxuICogQHBhcmFtIGlzQWN0aW9uXG4gKiBAcGFyYW0gaXNDcmVhdGVcbiAqIEBwYXJhbSBhY3Rpb25EZWZhdWx0VmFsdWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhcmFtZXRlcnM6IFVzZXJEZWZhdWx0UGFyYW1ldGVyW10sXG5cdG1vZGVsOiBKU09OTW9kZWwgfCBPRGF0YVY0Q29udGV4dCxcblx0aXNBY3Rpb246IGJvb2xlYW4sXG5cdGlzQ3JlYXRlPzogYm9vbGVhbixcblx0YWN0aW9uRGVmYXVsdFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgQmFzZVR5cGUgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9lbnVtcy9CYXNlVHlwZVwiKSkuZGVmYXVsdDtcblx0Y29uc3QgVHlwZU1hcCA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVNYXBcIikpLmRlZmF1bHQ7XG5cblx0Y29uc3QgY29tcG9uZW50RGF0YSA9IGFwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSAoY29tcG9uZW50RGF0YSAmJiBjb21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSxcblx0XHRzaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlID0gYXdhaXQgc2hlbGxTZXJ2aWNlcy5nZXRTdGFydHVwQXBwU3RhdGUoYXBwQ29tcG9uZW50KTtcblx0Y29uc3Qgc3RhcnR1cEFwcFN0YXRlRGF0YSA9IHN0YXJ0dXBBcHBTdGF0ZT8uZ2V0RGF0YSgpIHx8IHt9LFxuXHRcdGV4dGVuZGVkUGFyYW1ldGVycyA9IChzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQgJiYgc3RhcnR1cEFwcFN0YXRlRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRwYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9QYXJhbWV0ZXIpIHtcblx0XHRjb25zdCBzUHJvcGVydHlOYW1lID0gaXNBY3Rpb25cblx0XHRcdD8gYC8keyhvUGFyYW1ldGVyIGFzIHsgbmFtZTogc3RyaW5nIH0pLm5hbWV9YFxuXHRcdFx0OiAob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoPy4oKS5zbGljZSgob1BhcmFtZXRlciBhcyBDb250ZXh0KS5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBpc0FjdGlvbiA/IHNQcm9wZXJ0eU5hbWUuc2xpY2UoMSkgOiBzUHJvcGVydHlOYW1lO1xuXHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzICYmIGlzQ3JlYXRlKSB7XG5cdFx0XHRpZiAoYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgYWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJ0VHlwZSA9IChcblx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdHR5cGU/OiBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdCkudHlwZVxuXHRcdFx0XHQ/IFR5cGVNYXAuZ2V0QmFzZVR5cGUoXG5cdFx0XHRcdFx0XHQoXG5cdFx0XHRcdFx0XHRcdG9QYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdCkudHlwZVxuXHRcdFx0XHQgIClcblx0XHRcdFx0OiBCYXNlVHlwZS5TdHJpbmc7XG5cdFx0XHRjb25zdCB0eXBlSW5zdGFuY2UgPSBUeXBlTWFwLmdldERhdGFUeXBlSW5zdGFuY2UocGFyYW1ldGVydFR5cGUpO1xuXHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgdHlwZUluc3RhbmNlLnBhcnNlVmFsdWUoc3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdLCBcInN0cmluZ1wiKSk7XG5cdFx0fSBlbHNlIGlmIChleHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgb2YgZXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGlmIChvRXh0ZW5kZWRQYXJhbWV0ZXIuUHJvcGVydHlOYW1lID09PSBzUGFyYW1ldGVyTmFtZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGggLSAxXVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvUmFuZ2UuTG93KTsgLy8gaGlnaCBpcyBpZ25vcmVkIHdoZW4gT3B0aW9uPUVRXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgSW5ib3VuZFBhcmFtZXRlciA9IHtcblx0dXNlRm9yQ3JlYXRlOiBib29sZWFuO1xufTtcbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUoXG5cdG9TdGFydHVwUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPixcblx0b0luYm91bmRQYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgSW5ib3VuZFBhcmFtZXRlcj5cbik6IHVua25vd24ge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPVxuXHRcdFx0b0luYm91bmRzICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0luYm91bmRzW3NQYXJhbWV0ZXJdLnVzZUZvckNyZWF0ZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFDcmVhdGVQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3Qgc0NyZWF0ZVBhcmFtZXRlciA9IGVsZW1lbnQ7XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyID0ge1xuXHRwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlclZhbHVlPjtcblx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdGFjdGlvbj86IHN0cmluZztcbn07XG50eXBlIE91dGJvdW5kUGFyYW1ldGVyVmFsdWUgPSB7XG5cdHZhbHVlPzoge1xuXHRcdHZhbHVlPzogc3RyaW5nO1xuXHRcdGZvcm1hdD86IHN0cmluZztcblx0fTtcbn07XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBPdXRib3VuZFBhcmFtZXRlcik6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W10gPSBbXTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9zdHJpY3QtYm9vbGVhbi1leHByZXNzaW9uc1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuTG9jYWxQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCAhPT0gb1NlbWFudGljTWFwcGluZy5Mb2NhbFByb3BlcnR5LiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdG9Dcm9zc05hdjogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXI+XG4pOiBSZWNvcmQ8XG5cdHN0cmluZyxcblx0e1xuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXTtcblx0fVxuPiB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W107XG5cdFx0fVxuXHQ+ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmF2aWdhdGlvbj86IHtcblx0XHRcdFx0dGFyZ2V0T3V0Ym91bmQ/OiB7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cdFx0fVxuXHQ+O1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpIHx8IGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uPy50YXJnZXRPdXRib3VuZD8ub3V0Ym91bmQ7XG5cdFx0XHRpZiAoc091dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJDaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgJHtzT3V0Ym91bmR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuXG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IHVua25vd24pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIG9NYXBwaW5ncykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQoZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdGVsZW1lbnRbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0aWYgKG9TZWxlY3RPcHRpb24pIHtcblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RGcm9tUGF0aCA9IHtcblx0c2VtYW50aWNPYmplY3RQYXRoOiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9W107XG5cdHNlbWFudGljT2JqZWN0OiB7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHsgJFBhdGg6IHN0cmluZyB9O1xuXHR9O1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM6IHN0cmluZ1tdO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzUGF0aDogc3RyaW5nLFxuXHRzUXVhbGlmaWVyOiBzdHJpbmdcbik6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRsZXQgc1NlbWFudGljT2JqZWN0LCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0aWYgKHNRdWFsaWZpZXIgPT09IFwiXCIpIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fSMke3NRdWFsaWZpZXJ9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfSMke3NRdWFsaWZpZXJ9YFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogc3RyaW5nLCBzUXVhbGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+IHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5LlByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4sXG5cdHNSZXN0cmljdGlvbj86IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSkge1xuXHRcdGFQcm9wcyA9IChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdXG5cdFx0KS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD4pIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChwYXRoczogc3RyaW5nW10sIG5hdlBhdGg6IHN0cmluZywgcHJvcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYXZQYXRoUHJlZml4ID0gbmF2UGF0aCArIFwiL1wiO1xuXHRyZXR1cm4gcGF0aHMucmVkdWNlKChvdXRQYXRoczogc3RyaW5nW10sIHBhdGhUb0NoZWNrOiBzdHJpbmcpID0+IHtcblx0XHRpZiAocGF0aFRvQ2hlY2suc3RhcnRzV2l0aChuYXZQYXRoUHJlZml4KSkge1xuXHRcdFx0Y29uc3Qgb3V0UGF0aCA9IHBhdGhUb0NoZWNrLnJlcGxhY2UobmF2UGF0aFByZWZpeCwgXCJcIik7XG5cdFx0XHRpZiAoIW91dFBhdGhzLmluY2x1ZGVzKG91dFBhdGgpKSB7XG5cdFx0XHRcdG91dFBhdGhzLnB1c2gob3V0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRQYXRocztcblx0fSwgcHJvcHMpO1xufVxudHlwZSBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG59O1xuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGVudGl0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKTogX0ZpbHRlclJlc3RyaWN0aW9ucyB7XG5cdC8vIE5PVEU6IEZvciBnZXR0aW5nIEZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyBwbGVhc2UgdXNlICdnZXRBbGxvd2VkRmlsdGVyRXhwcmVzc2lvbkZvclByb3BlcnR5JyBmcm9tICdzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyRmllbGQudHMnLlxuXHRjb25zdCBvUmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0fTtcblx0bGV0IG9GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGNvbnN0IG5hdmlnYXRpb25UZXh0ID0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRjb25zdCBmclRlcm0gPSBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1wiO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aFBhcnRzID0gZW50aXR5UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKS5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGggPSBgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0vYDtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoUGFydHMgPSBlbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBpc0NvbnRhaW5tZW50ID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofSRDb250YWluc1RhcmdldGApO1xuXHRjb25zdCBjb250YWlubWVudE5hdlBhdGggPSAhIWlzQ29udGFpbm1lbnQgJiYgZW50aXR5VHlwZVBhdGhQYXJ0c1tlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXG5cdC8vTEVBU1QgUFJJT1JJVFkgLSBGaWx0ZXIgcmVzdHJpY3Rpb25zIGRpcmVjdGx5IGF0IEVudGl0eSBTZXRcblx0Ly9lLmcuIEZSIGluIFwiTlMuRW50aXR5Q29udGFpbmVyL1NhbGVzT3JkZXJNYW5hZ2VcIiBDb250ZXh0UGF0aDogL1NhbGVzT3JkZXJNYW5hZ2Vcblx0aWYgKCFpc0NvbnRhaW5tZW50KSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0Y29uc3QgcmVzdWx0Q29udGV4dENoZWNrID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVR5cGVQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdGlmICghcmVzdWx0Q29udGV4dENoZWNrKSB7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0fVxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnMpIHx8IHt9O1xuXHR9XG5cblx0aWYgKGVudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdGNvbnN0IG5hdlBhdGggPSBpc0NvbnRhaW5tZW50ID8gKGNvbnRhaW5tZW50TmF2UGF0aCBhcyBzdHJpbmcpIDogZW50aXR5U2V0UGF0aFBhcnRzW2VudGl0eVNldFBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHQvLyBJbiBjYXNlIG9mIGNvbnRhaW5tZW50IHdlIHRha2UgZW50aXR5U2V0IHByb3ZpZGVkIGFzIHBhcmVudC4gQW5kIGluIGNhc2Ugb2Ygbm9ybWFsIHdlIHdvdWxkIHJlbW92ZSB0aGUgbGFzdCBuYXZpZ2F0aW9uIGZyb20gZW50aXR5U2V0UGF0aC5cblx0XHRjb25zdCBwYXJlbnRFbnRpdHlTZXRQYXRoID0gaXNDb250YWlubWVudCA/IGVudGl0eVNldFBhdGggOiBgLyR7ZW50aXR5U2V0UGF0aFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKGAvJHtuYXZpZ2F0aW9uVGV4dH0vYCl9YDtcblx0XHQvL1RISVJEIEhJR0hFU1QgUFJJT1JJVFkgLSBSZWFkaW5nIHByb3BlcnR5IHBhdGggcmVzdHJpY3Rpb25zIC0gQW5ub3RhdGlvbiBhdCBtYWluIGVudGl0eSBidXQgZGlyZWN0bHkgb24gbmF2aWdhdGlvbiBwcm9wZXJ0eSBwYXRoXG5cdFx0Ly9lLmcuIFBhcmVudCBDdXN0b21lciB3aXRoIFByb3BlcnR5UGF0aD1cIlNldC9DaXR5TmFtZVwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvUGFyZW50UmV0OiBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRcdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczoge31cblx0XHR9O1xuXHRcdGlmICghbmF2UGF0aC5pbmNsdWRlcyhcIiUyRlwiKSkge1xuXHRcdFx0Y29uc3Qgb1BhcmVudEZSID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke3BhcmVudEVudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyB8fCBbXVxuXHRcdFx0KTtcblx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdGNvbnN0IGNvbXBsZXRlQWxsb3dlZEV4cHMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvUGFyZW50RlIpIHx8IHt9O1xuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBPYmplY3Qua2V5cyhjb21wbGV0ZUFsbG93ZWRFeHBzKS5yZWR1Y2UoXG5cdFx0XHRcdChvdXRQcm9wOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4sIHByb3BQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAocHJvcFBhdGguc3RhcnRzV2l0aChuYXZQYXRoICsgXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvdXRQcm9wUGF0aCA9IHByb3BQYXRoLnJlcGxhY2UobmF2UGF0aCArIFwiL1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdG91dFByb3Bbb3V0UHJvcFBhdGhdID0gY29tcGxldGVBbGxvd2VkRXhwc1twcm9wUGF0aF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvdXRQcm9wO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL1NFQ09ORCBISUdIRVNUIHByaW9yaXR5IC0gTmF2aWdhdGlvbiByZXN0cmljdGlvbnNcblx0XHQvL2UuZy4gUGFyZW50IFwiL0N1c3RvbWVyXCIgd2l0aCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPVwiU2V0XCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9OYXZSZXN0cmljdGlvbnMgPSBNZXRhTW9kZWxGdW5jdGlvbi5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Db250ZXh0LCBwYXJlbnRFbnRpdHlTZXRQYXRoLCBuYXZQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpKTtcblx0XHRjb25zdCBvTmF2RmlsdGVyUmVzdCA9IG9OYXZSZXN0cmljdGlvbnMgJiYgKG9OYXZSZXN0cmljdGlvbnNbXCJGaWx0ZXJSZXN0cmljdGlvbnNcIl0gYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPik7XG5cdFx0Y29uc3QgbmF2UmVzUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2UmVzUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvTmF2RmlsdGVyUmVzdCkgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vSElHSEVTVCBwcmlvcml0eSAtIFJlc3RyaWN0aW9ucyBoYXZpbmcgdGFyZ2V0IHdpdGggbmF2aWdhdGlvbiBhc3NvY2lhdGlvbiBlbnRpdHlcblx0XHQvLyBlLmcuIEZSIGluIFwiQ3VzdG9tZXJQYXJhbWV0ZXJzL1NldFwiIENvbnRleHRQYXRoOiBcIkN1c3RvbWVyL1NldFwiXG5cdFx0Y29uc3QgbmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0ID0gb0NvbnRleHQuZ2V0T2JqZWN0KFxuXHRcdFx0YC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9JHtmclRlcm19YFxuXHRcdCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPjtcblx0XHRjb25zdCBuYXZBc3NvY1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2QXNzb2NOb25GaWx0ZXJQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NOb25GaWx0ZXJQcm9wcykpO1xuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMsXG5cdFx0XHRnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QpIHx8IHt9XG5cdFx0KSBhcyBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zO1xuXHR9XG5cdHJldHVybiBvUmV0O1xufVxuXG5leHBvcnQgdHlwZSBQcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50O1xuXHRiaW5kaW5nQ29udGV4dHM6IG9iamVjdDtcblx0bW9kZWxzOiBvYmplY3Q7XG59O1xuZXhwb3J0IHR5cGUgQmFzZVRyZWVNb2RpZmllciA9IHtcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdG1QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0b1ZpZXc/OiBWaWV3XG5cdCk6IFByb21pc2U8VUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPjtcblx0dGFyZ2V0czogc3RyaW5nO1xuXHRnZXRJZCh2Q29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQpOiBzdHJpbmc7XG5cdGdldENvbnRyb2xUeXBlKG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCk6IHN0cmluZztcblx0Z2V0UHJvcGVydHk8VD4ob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBzUHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQ+O1xuXHRnZXRBZ2dyZWdhdGlvbihwYXJlbnQ6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdGluc2VydEFnZ3JlZ2F0aW9uKFxuXHRcdHBhcmVudDogVUk1RWxlbWVudCB8IEVsZW1lbnQsXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdGNvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50IHwgVUk1RWxlbWVudFtdIHwgRWxlbWVudFtdLFxuXHRcdGluZGV4PzogbnVtYmVyLFxuXHRcdHZpZXc/OiBFbGVtZW50LFxuXHRcdHNraXBBZGp1c3RJbmRleD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPjtcblx0c2V0UHJvcGVydHkob0NvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50LCBzUHJvcGVydHlOYW1lOiBzdHJpbmcsIHZWYWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cdGJ5U2VsZWN0b3Iob1NlbGVjdG9yOiBvYmplY3QsIG9BcHBDb21wb25lbnQ/OiBDb21wb25lbnQsIG9WaWV3PzogRWxlbWVudCk6IE1hbmFnZWRPYmplY3QgfCBFbGVtZW50O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdHNGcmFnbWVudE5hbWU6IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsLFxuXHRvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRvSW5PcHRpb25zPzoge1xuXHRcdHZpZXc/OiBWaWV3O1xuXHRcdGlzWE1MPzogYm9vbGVhbjtcblx0XHRpZD86IHN0cmluZztcblx0XHRjb250cm9sbGVyPzogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEk7XG5cdFx0Y29udGFpbmluZ1ZpZXc/OiBWaWV3O1xuXHRcdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHR9LFxuXHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyXG4pOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdGNvbnN0IG9PcHRpb25zID0gb0luT3B0aW9ucyB8fCB7fTtcblx0aWYgKG9Nb2RpZmllciAmJiB0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBvTW9kaWZpZXIudGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCBvT3B0aW9ucy52aWV3KS50aGVuKGZ1bmN0aW9uIChvRnJhZ21lbnQpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBmcmFnbWVudERhdGEgPVxuXHRcdFx0dHlwZW9mIHNGcmFnbWVudE5hbWUgPT09IFwic3RyaW5nXCIgPyBYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSA6IHNGcmFnbWVudE5hbWU7XG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoZnJhZ21lbnREYXRhLCB7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0XHRjb25zdCBvQ29udHJvbCA9IG9GcmFnbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRpZiAoISFvT3B0aW9ucy5pc1hNTCAmJiBvQ29udHJvbCkge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdH1cblx0XHRsZXQgb3duZXI6IHsgcnVuQXNPd25lcjogPFQ+KGZuOiAoKSA9PiBUKSA9PiBUIH0gPSBvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYXBwQ29tcG9uZW50ID8/IHsgcnVuQXNPd25lcjogKGZuKSA9PiBmbigpIH07XG5cdFx0aWYgKG9PcHRpb25zLmNvbnRhaW5pbmdWaWV3KSB7XG5cdFx0XHRjb25zdCB2aWV3T3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpO1xuXHRcdFx0aWYgKHZpZXdPd25lcikge1xuXHRcdFx0XHRvd25lciA9IHZpZXdPd25lcjtcblx0XHRcdH1cblx0XHR9XG5cdFx0bGV0IGNvbnRhaW5pbmdWaWV3OiBWaWV3IHwgdW5kZWZpbmVkO1xuXHRcdGlmIChvT3B0aW9ucy52aWV3ICYmICFvT3B0aW9ucy5jb250cm9sbGVyKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG92ZXJhbGwgc3R1cGlkLCBpbiBjYXNlIHdlIGFyZSBjb21pbmcgZnJvbSB0aGUgZGVsZWdhdGUgd2l0aCBhbiB4bWwgbm9kZSBpbnN0ZWFkIG9mIGEgZnJhZ21lbnQgd2UgbmVlZCB0byBwYXNzIHRoZSBjb250YWluaW5nVmlldyBpbiB0aGVyZSAoZG9uZSBieSB0aGUgb01vZGlmaWVyIGNhbGwgZm9yIGluc3RhbmNlKVxuXHRcdFx0Ly8gQnV0IGluIG90aGVyIHJ1bnRpbWUgY2FzZSB3aGVyZSB3ZSBhcmUgaGVyZSB3ZSBuZWVkIHRvIG1haW50YWluIHRoZSBjb250cm9sbGVyIGFuZCB0aHVzIGNhbm5vdCBoYXZlIGEgY29udGFpbmluZ1ZpZXcuLi5cblx0XHRcdGNvbnRhaW5pbmdWaWV3ID0gb09wdGlvbnMudmlldztcblx0XHR9XG5cdFx0cmV0dXJuIG93bmVyLnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIEZyYWdtZW50LmxvYWQoe1xuXHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdHR5cGU6IFwiU0NPUEVERkVGUkFHTUVOVFwiLFxuXHRcdFx0XHRjb250ZXh0UGF0aDogb09wdGlvbnMuY29udGV4dFBhdGgsXG5cdFx0XHRcdGRlZmluaXRpb246IG9GcmFnbWVudCBhcyB1bmtub3duIGFzIHN0cmluZyxcblx0XHRcdFx0Y29udHJvbGxlcjogb09wdGlvbnMuY29udHJvbGxlcixcblx0XHRcdFx0Y29udGFpbmluZ1ZpZXc6IGNvbnRhaW5pbmdWaWV3XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTaW5nbGV0b25QYXRoKHBhdGg6IHN0cmluZywgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdHByb3BlcnR5TmFtZSA9IHBhcnRzLnBvcCgpISxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke25hdmlnYXRpb25QYXRofWApO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gYC8ke3NpbmdsZXRvbk5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpOiBQcm9taXNlPHVua25vd24+IHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cblxuLy8gR2V0IHRoZSBwYXRoIGZvciBhY3Rpb24gcGFyYW1ldGVycyB0aGF0IGlzIG5lZWRlZCB0byByZWFkIHRoZSBhbm5vdGF0aW9uc1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyUGF0aChzUGF0aDogc3RyaW5nLCBzUGFyYW1ldGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgc0NvbnRleHQ7XG5cdGlmIChzUGF0aC5pbmNsdWRlcyhcIkAkdWk1Lm92ZXJsb2FkXCIpKSB7XG5cdFx0c0NvbnRleHQgPSBzUGF0aC5zcGxpdChcIkAkdWk1Lm92ZXJsb2FkXCIpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEZvciBVbmJvdW5kIEFjdGlvbnMgaW4gQWN0aW9uIFBhcmFtZXRlciBEaWFsb2dzXG5cdFx0Y29uc3QgYUFjdGlvbiA9IHNQYXRoLnNwbGl0KFwiLzBcIilbMF0uc3BsaXQoXCIuXCIpO1xuXHRcdHNDb250ZXh0ID0gYC8ke2FBY3Rpb25bYUFjdGlvbi5sZW5ndGggLSAxXX0vYDtcblx0fVxuXHRyZXR1cm4gc0NvbnRleHQgKyBzUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIEdldCByZXNvbHZlZCBleHByZXNzaW9uIGJpbmRpbmcgdXNlZCBmb3IgdGV4dHMgYXQgcnVudGltZS5cbiAqIEBwYXJhbSBleHBCaW5kaW5nXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgQSBzdHJpbmcgYWZ0ZXIgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhleHBCaW5kaW5nOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcge1xuXHQvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBkdW1teSBlbGVtZW50IHdpdGggdGhlIGV4cHJlc2lvbiBiaW5kaW5nLlxuXHQvLyBBZGRpbmcgaXQgYXMgZGVwZW5kZW50IHRvIHRoZSB2aWV3L2NvbnRyb2wgd291bGQgcHJvcGFnYXRlIGFsbCB0aGUgbW9kZWxzIHRvIHRoZSBkdW1teSBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBiaW5kaW5nLlxuXHQvLyBXZSByZW1vdmUgdGhlIGR1bW15IGVsZW1lbnQgYWZ0ZXIgdGhhdCBhbmQgZGVzdHJveSBpdC5cblxuXHRjb25zdCBhbnlSZXNvdXJjZVRleHQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IGV4cEJpbmRpbmcgfSk7XG5cdGNvbnRyb2wuYWRkRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGNvbnN0IHJlc3VsdFRleHQgPSBhbnlSZXNvdXJjZVRleHQuZ2V0QW55VGV4dCgpO1xuXHRjb250cm9sLnJlbW92ZURlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRhbnlSZXNvdXJjZVRleHQuZGVzdHJveSgpO1xuXG5cdHJldHVybiByZXN1bHRUZXh0O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaGFzIGEgc21hbGwgc2NyZWVuLlxuICogQHJldHVybnMgQSBCb29sZWFuLlxuICovXG5mdW5jdGlvbiBpc1NtYWxsRGV2aWNlKCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIURldmljZS5zeXN0ZW0uZGVza3RvcCB8fCBEZXZpY2UucmVzaXplLndpZHRoIDw9IDMyMDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYSBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvbiBhbmQgY3JlYXRlcyB0aGUgY29ycmVzcG9uZGluZyBmaWx0ZXJzLlxuICogQHBhcmFtIGNvbnRyb2wgTURDIENoYXJ0LCBNREMgVGFibGUgb3IgTXVsdGlWaWV3IGNvbnRyb2wgb24gd2hpY2ggdGhlIGZpbHRlcnMgYXJlIGFwcGxpZWRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBTZWxlY3Rpb25WYXJpYW50IG9yIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgYW5ub3RhdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhbiBhcnJheSBvZiBmaWx0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24oY29udHJvbDogQ29udHJvbCB8IE1EQ0NoYXJ0IHwgTURDVGFibGUsIGFubm90YXRpb25QYXRoOiBzdHJpbmcpOiBGaWx0ZXJbXSB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sIGFzIENvbnRyb2wpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBzdkNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7Y29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKX0ke2Fubm90YXRpb25QYXRofWApO1xuXHRjb25zdCBwcm9wZXJ0eUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlcltdPiA9IHt9O1xuXHRsZXQgYW5ub3RhdGlvbiA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoc3ZDb250ZXh0KS50YXJnZXRPYmplY3Q7XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pihhbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSkpIHtcblx0XHRhbm5vdGF0aW9uID0gYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50O1xuXHR9XG5cblx0aWYgKCFhbm5vdGF0aW9uIHx8ICFpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uVmFyaWFudFR5cGU+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdChhbm5vdGF0aW9uLlNlbGVjdE9wdGlvbnMgfHwgW10pLmZvckVhY2goKHNlbGVjdE9wdGlvbikgPT4ge1xuXHRcdGlmIChzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy4kdGFyZ2V0ICYmIHNlbGVjdE9wdGlvbi5SYW5nZXM/Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VHlwZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUuJHRhcmdldC50eXBlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZTtcblx0XHRcdGZvciAoY29uc3QgaiBpbiBzZWxlY3RPcHRpb24uUmFuZ2VzKSB7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gZ2V0UmFuZ2VEZWZpbml0aW9uKHNlbGVjdE9wdGlvbi5SYW5nZXNbal0sIHByb3BlcnR5VHlwZSk7XG5cdFx0XHRcdHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID0gKHByb3BlcnR5RmlsdGVyc1twcm9wZXJ0eVBhdGhdID8/IFtdKS5jb25jYXQoXG5cdFx0XHRcdFx0bmV3IEZpbHRlcihwcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgZmlsdGVycyA9IFtdO1xuXHRmb3IgKGNvbnN0IHBhdGggaW4gcHJvcGVydHlGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IHByb3BlcnR5RmlsdGVyc1twYXRoXSxcblx0XHRcdFx0YW5kOiBmYWxzZVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cdHJldHVybiBmaWx0ZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aChcblx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzRW50aXR5U2V0OiBzdHJpbmcsXG5cdG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncbik6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdGNvbnN0IG9Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzTWV0YVBhdGgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRyZXR1cm4gQ29udmVydGVyQ29udGV4dD8uY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKHNFbnRpdHlTZXQsIG9Db250ZXh0IHx8IG9NZXRhTW9kZWwsIG9EaWFnbm9zdGljcywgbWVyZ2VPYmplY3RzKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb250ZXh0IG9mIHRoZSBEcmFmdFJvb3QgcGF0aC5cbiAqIElmIGEgdmlldyBoYXMgYmVlbiBjcmVhdGVkIHdpdGggdGhlIGRyYWZ0IFJvb3QgUGF0aCwgdGhpcyBtZXRob2QgcmV0dXJucyBpdHMgYmluZGluZ0NvbnRleHQuXG4gKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cbiAqIFRoZSBuZXcgY3JlYXRlZCBjb250ZXh0IHJlcXVlc3QgdGhlIGtleSBvZiB0aGUgZW50aXR5IGluIG9yZGVyIHRvIGdldCB0aGUgRXRhZyBvZiB0aGlzIGVudGl0eS5cbiAqIEBwYXJhbSBwcm9ncmFtbWluZ01vZGVsXG4gKiBAcGFyYW0gdmlld1xuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb290Q29udGV4dChcblx0cHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nLFxuXHR2aWV3OiBWaWV3LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0YmluZGluZ1BhcmFtZXRlcnM/OiBCYXNlQWdncmVnYXRpb25CaW5kaW5nSW5mb1tcInBhcmFtZXRlcnNcIl1cbik6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRpZiAoY29udGV4dCkge1xuXHRcdGNvbnN0IHJvb3RDb250ZXh0UGF0aCA9XG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsID09PSBcIkRyYWZ0XCIgPyBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpIDogTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0bGV0IHNpbXBsZVJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAocm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGgsIGFuZCBoYWQgYWxyZWFkeSBsb2FkZWQgaXRzIGNvbnRleHRcblx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdC5maW5kKFxuXHRcdFx0XHRcdChwYWdlVmlldzogVmlldykgPT5cblx0XHRcdFx0XHRcdHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoICYmXG5cdFx0XHRcdFx0XHRwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdClcblx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHNpbXBsZVJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQocm9vdENvbnRleHRQYXRoLCB1bmRlZmluZWQsIGJpbmRpbmdQYXJhbWV0ZXJzKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZVJvb3RDb250ZXh0KTtcblx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiLCBzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5IGZvciB0aGUgZWRpdG1vZGUgb3Igbm90LlxuICogQHBhcmFtIHNvdXJjZVxuICogQHJldHVybnMgSWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWRpdCBtb2RlXG4gKi9cbmZ1bmN0aW9uIGdldElzRWRpdGFibGUoc291cmNlOiBNYW5hZ2VkT2JqZWN0IHwgUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3QgbWFuYWdlZE9iamVjdCA9IHNvdXJjZS5pc0E8UGFnZUNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcIikgPyBzb3VyY2UuZ2V0VmlldygpIDogc291cmNlO1xuXHRyZXR1cm4gbWFuYWdlZE9iamVjdC5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0SU5MSU5FRURJVF9VUERBVEVHUk9VUElEOiBcImlubGluZVwiLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRnZXRDdXJyZW50UGFnZVZpZXc6IGdldEN1cnJlbnRQYWdlVmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHksXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0d2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQ6IHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0c2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlOiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUsXG5cdHNldER5bmFtaWNBY3Rpb25Db250ZXh0czogc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzLFxuXHRyZXF1ZXN0UHJvcGVydHk6IHJlcXVlc3RQcm9wZXJ0eSxcblx0Z2V0UGFyYW1ldGVyUGF0aDogZ2V0UGFyYW1ldGVyUGF0aCxcblx0Z2V0UmVsYXRlZEFwcHNNZW51SXRlbXM6IF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyxcblx0Z2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZzogX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyxcblx0dXBkYXRlUmVsYXRlQXBwc01vZGVsOiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM6IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zLFxuXHRnZXRGaWx0ZXJzRnJvbUFubm90YXRpb246IGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbixcblx0Y3JlYXRlUm9vdENvbnRleHQ6IGNyZWF0ZVJvb3RDb250ZXh0LFxuXHR1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5OiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5LFxuXHRpc1NtYWxsRGV2aWNlLFxuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCxcblx0Z2V0SXNFZGl0YWJsZTogZ2V0SXNFZGl0YWJsZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7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
|