@sapui5/sap.fe.templates 1.141.1 → 1.142.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/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +10 -12
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +95 -60
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +92 -53
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +25 -0
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +20 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +180 -13
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +209 -13
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +4 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +136 -24
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +178 -26
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +3 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -1
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +7 -4
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +8 -7
- package/src/sap/fe/templates/messagebundle_ar.properties +5 -5
- package/src/sap/fe/templates/messagebundle_bg.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ca.properties +4 -4
- package/src/sap/fe/templates/messagebundle_cnr.properties +5 -5
- package/src/sap/fe/templates/messagebundle_cs.properties +6 -6
- package/src/sap/fe/templates/messagebundle_cy.properties +5 -5
- package/src/sap/fe/templates/messagebundle_da.properties +6 -6
- package/src/sap/fe/templates/messagebundle_de.properties +7 -7
- package/src/sap/fe/templates/messagebundle_el.properties +5 -5
- package/src/sap/fe/templates/messagebundle_en.properties +6 -6
- package/src/sap/fe/templates/messagebundle_en_GB.properties +6 -6
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +3 -3
- package/src/sap/fe/templates/messagebundle_es.properties +4 -4
- package/src/sap/fe/templates/messagebundle_es_MX.properties +4 -4
- package/src/sap/fe/templates/messagebundle_et.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fi.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +5 -5
- package/src/sap/fe/templates/messagebundle_hi.properties +6 -6
- package/src/sap/fe/templates/messagebundle_hr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_hu.properties +6 -6
- package/src/sap/fe/templates/messagebundle_id.properties +7 -7
- package/src/sap/fe/templates/messagebundle_it.properties +4 -4
- package/src/sap/fe/templates/messagebundle_iw.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ja.properties +4 -4
- package/src/sap/fe/templates/messagebundle_kk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ko.properties +4 -4
- package/src/sap/fe/templates/messagebundle_lt.properties +4 -4
- package/src/sap/fe/templates/messagebundle_lv.properties +6 -6
- package/src/sap/fe/templates/messagebundle_mk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ms.properties +5 -5
- package/src/sap/fe/templates/messagebundle_nl.properties +4 -4
- package/src/sap/fe/templates/messagebundle_no.properties +4 -4
- package/src/sap/fe/templates/messagebundle_pl.properties +4 -4
- package/src/sap/fe/templates/messagebundle_pt.properties +5 -5
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +6 -6
- package/src/sap/fe/templates/messagebundle_ro.properties +4 -4
- package/src/sap/fe/templates/messagebundle_ru.properties +4 -4
- package/src/sap/fe/templates/messagebundle_sh.properties +5 -5
- package/src/sap/fe/templates/messagebundle_sk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_sl.properties +6 -6
- package/src/sap/fe/templates/messagebundle_sr.properties +5 -5
- package/src/sap/fe/templates/messagebundle_sv.properties +4 -4
- package/src/sap/fe/templates/messagebundle_th.properties +4 -4
- package/src/sap/fe/templates/messagebundle_tr.properties +4 -4
- package/src/sap/fe/templates/messagebundle_uk.properties +4 -4
- package/src/sap/fe/templates/messagebundle_vi.properties +6 -6
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +4 -4
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +4 -4
- package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.js +10 -0
- package/src/sap/fe/templates/types/sap.fe.templates-auto-ext.d.ts +49 -0
|
@@ -19,6 +19,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
19
19
|
function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
|
|
20
20
|
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
21
21
|
const ProgrammingModel = FELibrary.ProgrammingModel;
|
|
22
|
+
const PreferredActionStatus = FELibrary.PreferredActionStatusType;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
22
27
|
let ObjectPageController = (_dec = defineUI5Class("sap.fe.templates.ObjectPage.ObjectPageController"), _dec2 = usingExtension(Placeholder), _dec3 = usingExtension(Share.override(ShareOverrides)), _dec4 = usingExtension(InternalRouting.override(InternalRoutingOverride)), _dec5 = usingExtension(Paginator.override(PaginatorOverride)), _dec6 = usingExtension(MessageHandler.override(MessageHandlerOverride)), _dec7 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec8 = usingExtension(CollaborationManager.override(CollaborationManagerOverride)), _dec9 = usingExtension(InternalIntentBasedNavigation.override({
|
|
23
28
|
getNavigationMode: function () {
|
|
24
29
|
const bIsStickyEditMode = this.getView().getController().getStickyEditMode && this.getView().getController().getStickyEditMode();
|
|
@@ -45,8 +50,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
45
50
|
_initializerDefineProperty(_this, "_intentBasedNavigation", _descriptor8, _this);
|
|
46
51
|
_initializerDefineProperty(_this, "viewState", _descriptor9, _this);
|
|
47
52
|
_initializerDefineProperty(_this, "pageReady", _descriptor10, _this);
|
|
48
|
-
_this.
|
|
53
|
+
_this.invalidateTitleHierarchyCacheSetUp = false;
|
|
49
54
|
_this.mergePatchDraft = false;
|
|
55
|
+
_this.isFirstBinding = true;
|
|
50
56
|
_this.handlers = {
|
|
51
57
|
onPrimaryAction(oController, oView, oContext, sActionName, mParameters, mConditions) {
|
|
52
58
|
/**
|
|
@@ -251,14 +257,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
251
257
|
const oObjectPage = this._getObjectPageLayoutControl();
|
|
252
258
|
|
|
253
259
|
// Setting defaults of internal model context
|
|
254
|
-
const oInternalModelContext = this.
|
|
260
|
+
const oInternalModelContext = this.getOwnerComponent().getBindingContext("internal");
|
|
255
261
|
oInternalModelContext?.setProperty("externalNavigationContext", {
|
|
256
262
|
page: true
|
|
257
|
-
});
|
|
263
|
+
}, undefined, true);
|
|
258
264
|
oInternalModelContext?.setProperty("relatedApps", {
|
|
259
265
|
visibility: false,
|
|
260
266
|
items: null
|
|
261
|
-
});
|
|
267
|
+
}, undefined, true);
|
|
262
268
|
oInternalModelContext?.setProperty("batchGroups", this._getBatchGroupsForView());
|
|
263
269
|
oInternalModelContext?.setProperty("errorNavigationSectionFlag", false);
|
|
264
270
|
if (oObjectPage.getEnableLazyLoading()) {
|
|
@@ -268,8 +274,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
268
274
|
this.messageButton = this.getView().byId("fe::FooterBar::MessageButton");
|
|
269
275
|
this.messageBinding = Messaging.getMessageModel().bindList("/");
|
|
270
276
|
this.messageBinding?.attachChange(this._fnShowOPMessage, this);
|
|
271
|
-
oInternalModelContext?.setProperty("rootEditEnabled", true);
|
|
272
|
-
oInternalModelContext?.setProperty("rootEditVisible", true);
|
|
277
|
+
oInternalModelContext?.setProperty("rootEditEnabled", true, undefined, true);
|
|
278
|
+
oInternalModelContext?.setProperty("rootEditVisible", true, undefined, true);
|
|
279
|
+
this._handleSmartSummaryStartupAction();
|
|
273
280
|
};
|
|
274
281
|
_proto.onExit = function onExit() {
|
|
275
282
|
if (this.mCustomSectionExtensionAPIs) {
|
|
@@ -443,6 +450,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
443
450
|
|
|
444
451
|
//Set the Binding for Paginators using ListBinding ID
|
|
445
452
|
this._initializePagination(oContext, oInternalModel, mParameters?.listBinding);
|
|
453
|
+
const firstSubSectionVisibilityBinding = this._getfirstSubSectionVisibilityBinding();
|
|
454
|
+
if (this.useLazyLoaderOptimizations() && oObjectPage.getEnableLazyLoading() && firstSubSectionVisibilityBinding && this.isFirstBinding) {
|
|
455
|
+
// if lazy loading is enabled and at least one subsection has a visibility binding
|
|
456
|
+
oObjectPage.setVisible(false); // The objectPage Visibility is set to false to prevent the lazy loader to compute the sections
|
|
457
|
+
firstSubSectionVisibilityBinding.attachEventOnce("change", async () => {
|
|
458
|
+
const MDCTablePromises = this._getAllBlocks().map(async block => block.getVisible() && block.getContent?.()?.isA("sap.fe.macros.table.TableAPI") ? block.getContent().getContent().initialized() : null);
|
|
459
|
+
await Promise.all(MDCTablePromises);
|
|
460
|
+
oObjectPage.setVisible(true); // Visibility is restored once the visibility bindings of the sections are resolved, allowing lazy loading to properly process them
|
|
461
|
+
this.isFirstBinding = false;
|
|
462
|
+
});
|
|
463
|
+
}
|
|
446
464
|
if (oObjectPage.getEnableLazyLoading()) {
|
|
447
465
|
this._disableBlocksBindings(oObjectPage);
|
|
448
466
|
}
|
|
@@ -455,6 +473,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
455
473
|
}
|
|
456
474
|
}
|
|
457
475
|
};
|
|
476
|
+
_proto.useLazyLoaderOptimizations = function useLazyLoaderOptimizations() {
|
|
477
|
+
if (new URLSearchParams(window.location.search).get("sap-ui-xx-lazyloader-optimizations") === "true") {
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
return false;
|
|
481
|
+
};
|
|
458
482
|
_proto.getFirstEditableInput = function getFirstEditableInput() {
|
|
459
483
|
const domEditableElement = this._getObjectPageLayoutControl()._getFirstEditableInput();
|
|
460
484
|
return domEditableElement ? UI5Element.closestTo(domEditableElement) : undefined;
|
|
@@ -498,22 +522,27 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
498
522
|
let iSkip = 3; // 3 sections/subsections are loaded initially, the others are loaded lazily
|
|
499
523
|
const bIsInEditMode = CommonUtils.getIsEditable(this.getView());
|
|
500
524
|
const bEditableHeader = this.getView().getViewData().editableHeaderContent;
|
|
525
|
+
const firstVisibilityBinding = this._getfirstSubSectionVisibilityBinding();
|
|
501
526
|
for (let iSection = 0; iSection < aSections.length; iSection++) {
|
|
502
527
|
const oSection = aSections[iSection];
|
|
503
528
|
const aSubSections = oSection.getSubSections();
|
|
504
529
|
for (let iSubSection = 0; iSubSection < aSubSections.length; iSubSection++, iSkip--) {
|
|
505
530
|
// In IconTabBar mode keep the second section bound if there is an editable header and we are switching to display mode
|
|
506
|
-
|
|
531
|
+
|
|
532
|
+
const disableBindingContextCondition = !this.useLazyLoaderOptimizations() && (iSkip < 1 || bUseIconTabBar && (iSection > 1 || iSection === 1 && !bEditableHeader && !bIsInEditMode)) || this.useLazyLoaderOptimizations() && (!bUseIconTabBar && firstVisibilityBinding ||
|
|
533
|
+
//if some subsections have visibility binding and we are not in IconTabBar mode
|
|
534
|
+
!bUseIconTabBar && !firstVisibilityBinding && iSkip < 1 ||
|
|
535
|
+
// if no subsection has visibility binding and we are not in IconTabBar mode
|
|
536
|
+
bUseIconTabBar && (iSection > 1 || iSection === 1 && !bEditableHeader && !bIsInEditMode));
|
|
537
|
+
if (disableBindingContextCondition) {
|
|
507
538
|
const oSubSection = aSubSections[iSubSection];
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
oSubSection.getActions().forEach(actions => actions.setBindingContext(null));
|
|
516
|
-
}
|
|
539
|
+
// SubSection's binding is enabled.
|
|
540
|
+
oSubSection.setBindingContext(undefined);
|
|
541
|
+
const blocks = oSubSection.getBlocks();
|
|
542
|
+
// SubSection's contents binding is disabled.
|
|
543
|
+
blocks.forEach(block => block.setBindingContext(null));
|
|
544
|
+
oSubSection.getMoreBlocks().forEach(subBlock => subBlock.setBindingContext(null));
|
|
545
|
+
oSubSection.getActions().forEach(actions => actions.setBindingContext(null));
|
|
517
546
|
}
|
|
518
547
|
}
|
|
519
548
|
}
|
|
@@ -604,7 +633,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
604
633
|
}
|
|
605
634
|
oFieldToFocus.focus(focusInfo);
|
|
606
635
|
}
|
|
607
|
-
}.bind(this), 0
|
|
636
|
+
}.bind(this), 0 //300
|
|
637
|
+
);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Get the first sub-section with a visibility bound to the model of the view.
|
|
642
|
+
* Sections with Bindings on internal models only are ignored.
|
|
643
|
+
* @returns The visibility binding of the first sub-section or undefined if not found.
|
|
644
|
+
*/;
|
|
645
|
+
_proto._getfirstSubSectionVisibilityBinding = function _getfirstSubSectionVisibilityBinding() {
|
|
646
|
+
const allsubSections = this._getAllSubSections();
|
|
647
|
+
const currentModel = this.getView().getModel();
|
|
648
|
+
return allsubSections.find(subSection => subSection.getBinding("visible")?.getBindings?.().some(binding => binding.getModel() === currentModel))?.getBinding("visible");
|
|
608
649
|
};
|
|
609
650
|
_proto._handleSubSectionEnteredViewPort = function _handleSubSectionEnteredViewPort(oEvent) {
|
|
610
651
|
const oSubSection = oEvent.getParameter("subSection");
|
|
@@ -758,6 +799,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
758
799
|
|
|
759
800
|
//To Compute the Edit Binding of the subObject page using root object page, create a context for draft root and update the edit button in sub OP using the context
|
|
760
801
|
ActionRuntime.updateEditButtonVisibilityAndEnablement(this.getView());
|
|
802
|
+
this._updateAvailableCards([]);
|
|
761
803
|
}
|
|
762
804
|
// we are clearing any previous data from recommendations every time we come to new OP
|
|
763
805
|
// so that cached recommendations are not shown to user
|
|
@@ -767,10 +809,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
767
809
|
return;
|
|
768
810
|
});
|
|
769
811
|
}
|
|
770
|
-
this._updateAvailableCards([]);
|
|
771
812
|
this.displayCollaborationMessage(mParameters?.redirectedToNonDraft);
|
|
772
813
|
this._setOPMessageStripInternalContext();
|
|
773
|
-
const applyAppState = this.getAppComponent().getAppStateHandler().applyAppState(view
|
|
814
|
+
const applyAppState = this.getAppComponent().getAppStateHandler().applyAppState(view);
|
|
774
815
|
this.pageReady.waitFor(applyAppState);
|
|
775
816
|
}
|
|
776
817
|
|
|
@@ -937,11 +978,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
937
978
|
const appComponent = this.getAppComponent();
|
|
938
979
|
const rootViewController = appComponent.getRootViewController();
|
|
939
980
|
const fnClearCacheTitle = () => {
|
|
940
|
-
rootViewController.
|
|
981
|
+
rootViewController.invalidateTitleHierarchyCache(oObjectPage.getBindingContext()?.getPath());
|
|
941
982
|
};
|
|
942
|
-
if (oObjectPageSubtitle && !this.
|
|
943
|
-
oObjectPageSubtitle
|
|
944
|
-
this
|
|
983
|
+
if ((oObjectPageDescription || oObjectPageSubtitle) && !this.invalidateTitleHierarchyCacheSetUp) {
|
|
984
|
+
oObjectPageSubtitle?.getBinding("value")?.attachChange(fnClearCacheTitle, this);
|
|
985
|
+
oObjectPageDescription?.getBinding("value")?.attachChange(fnClearCacheTitle, this);
|
|
986
|
+
this.invalidateTitleHierarchyCacheSetUp = true;
|
|
945
987
|
}
|
|
946
988
|
const oObjectPageContext = oObjectPage.getBindingContext();
|
|
947
989
|
const build = () => ({
|
|
@@ -1520,6 +1562,76 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1520
1562
|
}
|
|
1521
1563
|
}
|
|
1522
1564
|
};
|
|
1565
|
+
_proto._findSummarizeButton = function _findSummarizeButton() {
|
|
1566
|
+
const objectPage = this._getObjectPageLayoutControl();
|
|
1567
|
+
const objectPageTitle = objectPage.getHeaderTitle();
|
|
1568
|
+
const actions = objectPageTitle?.getActions();
|
|
1569
|
+
let summarizeButton;
|
|
1570
|
+
for (const action of actions) {
|
|
1571
|
+
if (action.isA("sap.fe.macros.ai.SummarizationButton")) {
|
|
1572
|
+
const button = action.getContent();
|
|
1573
|
+
if (button && button.getId().endsWith("::Summarize::button")) {
|
|
1574
|
+
summarizeButton = button;
|
|
1575
|
+
break;
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
return summarizeButton;
|
|
1580
|
+
}
|
|
1581
|
+
|
|
1582
|
+
/**
|
|
1583
|
+
* Evaluates startup parameters and triggers the smart summary action on the Object Page if required.
|
|
1584
|
+
*
|
|
1585
|
+
* This method checks whether the startup parameters indicate that a smart summary should be performed for the current Object Page level.
|
|
1586
|
+
* The level parameter determines which Object Page should be summarized, which is relevant in Flexible Column Layout (FCL) scenarios where
|
|
1587
|
+
* multiple Object Pages may be displayed simultaneously.
|
|
1588
|
+
* If no level is provided in the startup parameters, the method defaults the level to 1.
|
|
1589
|
+
* If the summary action is allowed and the SmartSummarize capability is available, it locates the summarize button and triggers its press event.
|
|
1590
|
+
* The method ensures the summary is only executed once per navigation and logs errors if prerequisites are not met or the button is unavailable.
|
|
1591
|
+
* All errors encountered during the process are caught and logged.
|
|
1592
|
+
* @private
|
|
1593
|
+
*/;
|
|
1594
|
+
_proto._handleSmartSummaryStartupAction = function _handleSmartSummaryStartupAction() {
|
|
1595
|
+
const appComponent = this.getAppComponent();
|
|
1596
|
+
appComponent?.getStartupParameters()?.then(startupParams => {
|
|
1597
|
+
if (!startupParams.preferredAction || !startupParams.preferredAction[0].startsWith("summary")) {
|
|
1598
|
+
return;
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
// check if we are on the correct OP by checking the level provided in the startup parameters
|
|
1602
|
+
const viewLevel = this.getView().getViewData().viewLevel;
|
|
1603
|
+
const preferredActionLevel = startupParams.preferredAction[0] === "summary" ? 1 : parseInt(startupParams.preferredAction[0].split("-")[1], 10);
|
|
1604
|
+
if (isNaN(preferredActionLevel) || viewLevel !== preferredActionLevel) {
|
|
1605
|
+
return;
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
// Check if summary action shall be executed now (it might have already been executed by a higher level OP)
|
|
1609
|
+
if (appComponent.getPreferredActionStatus() === PreferredActionStatus.CanPerform) {
|
|
1610
|
+
appComponent.setPreferredActionStatus(PreferredActionStatus.AlreadyPerformed); // to prevent other OPs on higher levels to execute the summary again
|
|
1611
|
+
} else {
|
|
1612
|
+
return;
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
// Check if SmartSummarize capability is available
|
|
1616
|
+
const environmentService = appComponent.getEnvironmentCapabilities();
|
|
1617
|
+
if (!environmentService?.environmentCapabilities.SmartSummarize) {
|
|
1618
|
+
Log.error("Smart Summarization was not triggered because SmartSummarize capability is not available");
|
|
1619
|
+
return;
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
// Find the Summary button
|
|
1623
|
+
const summarizeButton = this._findSummarizeButton();
|
|
1624
|
+
if (summarizeButton && summarizeButton.getVisible() && summarizeButton.getEnabled()) {
|
|
1625
|
+
summarizeButton.firePress();
|
|
1626
|
+
return;
|
|
1627
|
+
} else {
|
|
1628
|
+
Log.error("Smart Summarization was not triggered because the Summarize button is either not visible or not enabled or not found.");
|
|
1629
|
+
return;
|
|
1630
|
+
}
|
|
1631
|
+
}).catch(error => {
|
|
1632
|
+
Log.error("Error while retrieving startup parameters or triggering smart summary:", error);
|
|
1633
|
+
});
|
|
1634
|
+
};
|
|
1523
1635
|
return ObjectPageController;
|
|
1524
1636
|
}(PageController), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "placeholder", [_dec2], {
|
|
1525
1637
|
configurable: true,
|
|
@@ -1574,4 +1686,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
|
|
|
1574
1686
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _class2)) || _class);
|
|
1575
1687
|
return ObjectPageController;
|
|
1576
1688
|
}, false);
|
|
1577
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJfZGVjMyIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIl9kZWM0IiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJfZGVjNSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiX2RlYzYiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJfZGVjNyIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiX2RlYzgiLCJDb2xsYWJvcmF0aW9uTWFuYWdlciIsIkNvbGxhYm9yYXRpb25NYW5hZ2VyT3ZlcnJpZGUiLCJfZGVjOSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJfZGVjMTAiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJfZGVjMTEiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIl9kZWMxMiIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWMxMyIsImZpbmFsRXh0ZW5zaW9uIiwiX2RlYzE0IiwiX2RlYzE1IiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX1BhZ2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsImNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaGFuZGxlcnMiLCJvblByaW1hcnlBY3Rpb24iLCJvQ29udHJvbGxlciIsIm9WaWV3Iiwib0NvbnRleHQiLCJzQWN0aW9uTmFtZSIsIm1QYXJhbWV0ZXJzIiwibUNvbmRpdGlvbnMiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwic3luY1Rhc2siLCJpbnZva2VBY3Rpb24iLCJ0aGVuIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsImJpbmQiLCJjYXRjaCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib1NvdXJjZSIsIm9NYW5pZmVzdE91dGJvdW5kIiwic0NvbnRyb2xDb25maWciLCJzQ29sbGVjdGlvblBhdGgiLCJKU09OIiwicGFyc2UiLCJvVGFyZ2V0SW5mbyIsIm9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFOYXZpZ2F0aW9uRGF0YSIsIl9nZXRDaGFydENvbnRleHREYXRhIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibWFwIiwib05hdmlnYXRpb25EYXRhIiwibWV0YVBhdGgiLCJwYXJhbWV0ZXJzIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRPdXRib3VuZFBhcmFtcyIsIk9iamVjdCIsImN1c3RvbURhdGEiLCJnZXRDdXN0b21EYXRhIiwiZ2V0S2V5IiwiX2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyIsImdldFZhbHVlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsIm9FdmVudCIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0IiwiZ2V0UHJvcGVydHkiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwiY2xvc2VDb2xsYWJvcmF0aW9uU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJ2aWV3IiwiYklzSW5FZGl0TW9kZSIsImludGVybmFsTW9kZWwiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImNvbnRleHRCb3VuZE1lc3NhZ2VzIiwiTWVzc2FnaW5nIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwiZ2V0UGVyc2lzdGVudCIsInJlbW92ZU1lc3NhZ2VzIiwiaGlkZU1lc3NhZ2UiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0IiwibWVzc2FnZUJpbmRpbmciLCJiaW5kTGlzdCIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyIsInBsYWNlaG9sZGVyIiwiaXNQbGFjZWhvbGRlckVuYWJsZWQiLCJzaG93UGxhY2Vob2xkZXIiLCJvTmF2Q29udGFpbmVyIiwib0NvbnRhaW5lciIsImVuYWJsZUFuaW1hdGlvbiIsImdldEZpcnN0RWRpdGFibGVJbnB1dCIsImRvbUVkaXRhYmxlRWxlbWVudCIsIl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJVSTVFbGVtZW50IiwiY2xvc2VzdFRvIiwiZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib2JqZWN0UGFnZSIsImZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJnZXRDb250ZW50IiwiZ2V0RW5hYmxlZCIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiRWRpdGFibGVIZWFkZXIiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImZvckVhY2giLCJzdWJCbG9jayIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJibG9ja0NvbnRyb2wiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJuYXZCYWNrIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiaGlzdG9yeSIsImJhY2siLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwid2FybmluZyIsImhpZGRlbkRyYWZ0RW5hYmxlZCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsImlucHV0QmluZGluZ0NvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkiLCJiaW5kaW5nQ29udGV4dCIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiY2xlYXJTZWxlY3Rpb24iLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJjb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJvRXJyb3IiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsInJlY29tbWVuZGF0aW9ucyIsImNsZWFyUmVjb21tZW5kYXRpb25zIiwiX3VwZGF0ZUF2YWlsYWJsZUNhcmRzIiwiZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQiLCJhcHBseUFwcFN0YXRlIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImNhcmRzIiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkT2JqZWN0IiwidXBkYXRlQ2FyZHMiLCJwYXJlbnRBcHBJZCIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImFkZENhcmRzVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsInNoYXJlQXZhaWxhYmxlQ2FyZHMiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImZpbmRFbGVtZW50cyIsImVsZW0iLCJtZXNzYWdlU3RyaXAiLCJlbnRpdHlOYW1lIiwicmVzb3VyY2VCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJjb2xsYWJvcmF0aW9uTWVzc2FnZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJjdHh0Iiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJpc0VkaXRhYmxlIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHQiLCJmb3JjZUZvY3VzIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJEZXZpY2UiLCJzdXBwb3J0IiwidG91Y2giLCJzYXZlQnV0dG9uIiwiYXV0b1F1ZXVlVW5sb2NrIiwiYXV0b1F1ZXVlTG9jayIsImlzTG9ja2VkIiwidW5sb2NrIiwiZGV0YWNoQnJvd3NlckV2ZW50IiwiYXR0YWNoQnJvd3NlckV2ZW50IiwibG9jayIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsIm9PYmplY3RQYWdlRGVzY3JpcHRpb24iLCJleHRyYWN0UGF0aHMiLCJiaW5kaW5nSW5mbyIsImZyb20iLCJTZXQiLCJwYXJ0cyIsInBhcnQiLCJtb2RlbCIsInBhdGgiLCJCb29sZWFuIiwic3VidGl0bGVQYXRocyIsImdldEJpbmRpbmdJbmZvIiwiZGVzY3JpcHRpb25QYXRocyIsInBhdGhzVG9SZXNvbHZlIiwiYXBwQ29tcG9uZW50Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZm5DbGVhckNhY2hlVGl0bGUiLCJjbGVhclRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJhbGwiLCJwIiwicmVxdWVzdE9iamVjdCIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImluY2x1ZGVzIiwiZXJyIiwib1JldCIsImlzRWRpdE1vZGUiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiQnVzeUxvY2tlciIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJwcm9wZXJ0eVBhdGgiLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfdmFsaWRhdGVEb2N1bWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJieVBhc3NTaWRlRWZmZWN0cyIsImlzVHJhbnNpZW50IiwiY3JlYXRlZCIsImhvbGRNZXNzYWdlc0ZvckNvbnRyb2wiLCJyZXQiLCJleGVjdXRlR2xvYmFsVmFsaWRhdGlvbiIsInNob3dNZXNzYWdlcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJzaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJjcmVhdGVSb290Q29udGV4dCIsIkRyYWZ0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImlzQ29ubmVjdGVkIiwic2tpcEJpbmRpbmdUb1ZpZXciLCJhd2FpdENyZWF0ZURvY3VtZW50cyIsImV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZGlhbG9nQWN0aW9uIiwiQ29sbGFib3JhdGlvbkRpc2NhcmQiLCJnZXRVc2VyQWN0aW9uIiwiY3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJjb250ZXh0S2V5cyIsInN0YXJ0c1dpdGgiLCJjcmVhdGVEb2N1bWVudCIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwic2tpcFNpZGVFZmZlY3RzIiwiaXNTa2lwQmluZGluZ1RvVmlldyIsImlzU3RhbmRhcmRTYXZlIiwiYmluZGluZ3MiLCJzYXZlRG9jdW1lbnQiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsIlJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJDb250aW51ZSIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImxhc3RGb2N1c2VkQ29udHJvbElkIiwic2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIiwiaXNEb2N1bWVudE1vZGlmaWVkIiwiVWlNb2RlbENvbnN0YW50cyIsIkRvY3VtZW50TW9kaWZpZWQiLCJhZnRlckNhbmNlbCIsInByb21pc2VSZXN1bHQiLCJjYW5jZWxEb2N1bWVudCIsInNraXBEaXNjYXJkUG9wb3ZlciIsImFwcGx5RG9jdW1lbnQiLCJzaG93UmVsYXRlZEFwcHMiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJfZmluZENvbnRyb2xJblN1YlNlY3Rpb24iLCJhUGFyZW50RWxlbWVudCIsImFTdWJzZWN0aW9uIiwiYUNvbnRyb2xzIiwiYklzQ2hhcnQiLCJpdGVtMSIsIm9FbGVtZW50IiwiZ2V0QWdncmVnYXRpb24iLCJjaGFydENvbnRyb2wiLCJnZXRDaGFydENvbnRyb2wiLCJvU3ViRWxlbWVudCIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJyZXBsYWNlIiwib1NpbmdsZUNvbnRleHQiLCJvU3ViQ2hhcnRDb250ZXh0RGF0YSIsImNvbnRleHREYXRhIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9QYWdlTGV2ZWxTViIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJhdHRyaWJ1dGVzIiwib1ZpZXdEYXRhIiwib0NvbmZpZ3VyYXRpb25zIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJhQ29uZmlndXJhdGlvbnMiLCJzS2V5Iiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsInBhZ2luYXRvckN1cnJlbnRDb250ZXh0IiwiYmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsIm9EYXRhUG9pbnRzIiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvU2hlbGxTZXJ2aWNlcyIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmsiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgeyBFbmhhbmNlV2l0aFVJNSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBleHRlbnNpYmxlLCBmaW5hbEV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NhcmRzL0NvbGxhYm9yYXRpb25NYW5hZ2VyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgVWlNb2RlbENvbnN0YW50cyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZWRpdEZsb3dDb25zdGFudHNcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCwgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHsgdHlwZSBXcmFwcGVkQ2FyZCB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDaGFydEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NoYXJ0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbGxCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbGxCdXR0b25cIjtcbmltcG9ydCB0eXBlIFN1bW1hcml6YXRpb25CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvU3VtbWFyaXphdGlvbkJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2VCdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvbWVzc2FnZXMvTWVzc2FnZUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU2hhcmVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2hhcmUvU2hhcmVBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgSW5wdXRCYXNlIGZyb20gXCJzYXAvbS9JbnB1dEJhc2VcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgQ29tbWFuZEV4ZWN1dGlvbiRFeGVjdXRlRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIEZvcm0gZnJvbSBcInNhcC91aS9sYXlvdXQvZm9ybS9Gb3JtXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlVHlwZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVGFibGVUeXBlQmFzZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0xpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGlvbkRyYWZ0IGZyb20gXCIuL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRyYWZ0XCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIEJpbmRpbmdQYXJhbXMgPSB7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0bGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IEZFVmlldztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oQ29sbGFib3JhdGlvbk1hbmFnZXIub3ZlcnJpZGUoQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSkpXG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyITogQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSBmYWxzZTtcblxuXHRwcml2YXRlIHN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uITogTWVzc2FnZUJ1dHRvbjtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25NZXNzYWdlPzogTWVzc2FnZTtcblxuXHRwcml2YXRlIG1lcmdlUGF0Y2hEcmFmdCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgYXV0b1F1ZXVlTG9jazogUmV0dXJuVHlwZTxPRGF0YU1vZGVsW1wibG9ja1wiXT4gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQmluZGluZz86IEJpbmRpbmc7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHNcIiwge1xuXHRcdFx0dmlzaWJpbGl0eTogZmFsc2UsXG5cdFx0XHRpdGVtczogbnVsbFxuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgTWVzc2FnZUJ1dHRvbjtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiKTtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdFZpc2libGVcIiwgdHJ1ZSk7XG5cdH1cblxuXHRvbkV4aXQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VQb3BvdmVyID0gdGhpcy5tZXNzYWdlQnV0dG9uID8gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlciA6IG51bGw7XG5cdFx0aWYgKG9NZXNzYWdlUG9wb3ZlciAmJiBvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdG9NZXNzYWdlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdH1cblx0XHQvL3doZW4gZXhpdGluZyB3ZSBzZXQga2VlcEFsaXZlIGNvbnRleHQgdG8gZmFsc2Vcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXG5cdFx0dGhpcy5tZXNzYWdlQmluZGluZz8uZGV0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5pc1N1c3BlbmRlZCgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgYXBwIGlzIHN1c3BlbmRlZCwgd2UgZG8gbm90IHNob3cgdGhlIG1lc3NhZ2VzICh0aGUgTWVzc2FnZU1vZGVsIGNvbnRhaW5zIG1lc3NhZ2VzIGZyb20gdGhlIGFjdGl2ZSBhcHApLlxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gTWVzc2FnaW5nPy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBUYWJsZSk6IE9EYXRhTGlzdEJpbmRpbmcge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIHRoZSBsYXN0IHZpc2libGUgc3Vic2VjdGlvbiBhbmQgYWRkIHRoZSBzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXIgQ1NTIGNsYXNzIGlmIGl0IGNvbnRhaW5zIG9ubHkgYSBHcmlkVGFibGUgb3IgYSBUcmVlVGFibGUuXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IFsuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0QmxvY2tzKCksIC4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0aWYgKGJsb2Nrcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Y29uc3QgdGFibGUgPSB0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKTtcblx0XHRcdFx0aWYgKCF0YWJsZSkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAodGFibGUuZ2V0VHlwZSgpIGFzIFRhYmxlVHlwZUJhc2UpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKVxuXHRcdFx0XHRcdD8gKHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGFibGVUeXBlICYmXG5cdFx0XHRcdFx0KHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpIHx8IHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5UcmVlVGFibGVUeXBlXCIpKSAmJlxuXHRcdFx0XHRcdHRhYmxlQVBJPy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLnJvd0NvdW50TW9kZSA9PT0gXCJBdXRvXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5kZXRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spOiBUYWJsZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKTogdm9pZCB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcuZ2V0Vmlld0RhdGEoKT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdGxldCBzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcblx0XHRpZiAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRVc2VJY29uVGFiQmFyKCkpIHtcblx0XHRcdGNvbnN0IHNlY3Rpb25zID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG5cdFx0XHRcdHN1YlNlY3Rpb25zID0gc2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0XHR0aGlzLmNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkJlZm9yZUJpbmRpbmcob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGl0ZW0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgeyBpc0ZpcnN0UmVuZGVyaW5nPzogKCkgPT4gYm9vbGVhbiB9KS5pc0ZpcnN0UmVuZGVyaW5nPy4oKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyB1bmtub3duIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdGNvbnN0IGZuT1BSZW5kZXJpbmdMYXlvdXQgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpPy5lZGl0YWJsZUhlYWRlckNvbnRlbnQpIHtcblx0XHRcdFx0XHRmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24oKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKGZuT1BSZW5kZXJpbmdMYXlvdXQpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0dGhpcy5faW5pdGlhbGl6ZVBhZ2luYXRpb24ob0NvbnRleHQsIG9JbnRlcm5hbE1vZGVsLCBtUGFyYW1ldGVycz8ubGlzdEJpbmRpbmcpO1xuXG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdHRoaXMuX2Rpc2FibGVCbG9ja3NCaW5kaW5ncyhvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIHVua25vd24gYXMgeyBvQ29udGFpbmVyOiBDb250cm9sIH0pLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHR0aGlzLnBsYWNlaG9sZGVyLmVuYWJsZUFuaW1hdGlvbigpO1xuXHRcdFx0XHQob05hdkNvbnRhaW5lciBhcyB1bmtub3duIGFzIHsgc2hvd1BsYWNlaG9sZGVyOiBGdW5jdGlvbiB9KS5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0Q29udGVudCgpPy5nZXRWaXNpYmxlKCkgPz8gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2FibGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBiaW5kaW5nIGlzIGVuYWJsZWQuXG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgY29udGVudHMgYmluZGluZyBpcyBkaXNhYmxlZC5cblx0XHRcdFx0XHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dD8uKCkpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwXG5cdFx0KTtcblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogVUk1RXZlbnQ8eyBzdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB9Pik6IHZvaWQge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2spID0+IHN1YkJsb2NrLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHRcdG9TdWJTZWN0aW9uLmdldEFjdGlvbnMoKS5mb3JFYWNoKChhY3Rpb25zKSA9PiBhY3Rpb25zLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCkpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cblx0XHQvLyBGdW5jdGlvbiB0byBuYXZpZ2F0ZSBiYWNrLCBvciBkaXNwbGF5IHRoZSBsYXVuY2hwYWQgaWYgd2UncmUgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGhpc3Rvcnlcblx0XHRjb25zdCBuYXZCYWNrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFVSTCA9IGRvY3VtZW50LlVSTDtcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBubyBwcmV2aW91cyBwYWdlIGluIHRoZSBoaXN0b3J5LCBoaXN0b3J5LmJhY2sgZG9lcyBub3RoaW5nLlxuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHVzZSBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCwgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIGhvbWUgcGFnZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmIChkb2N1bWVudC5VUkwgPT09IGN1cnJlbnRVUkwpIHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgNTAwKTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0Ly8gVGhpcyBvYmplY3QgcGFnZSBkb2Vzbid0IGhhdmUgYSBiaW5kaW5nIGNvbnRleHQsIGJ1dCBzdGlsbCBoYW5kbGVzIHRoZSBzaGVsbCBiYWNrIG5hdmlnYXRpb24gLS0+IHBmb3JtIHRoZSBuYXYgYmFjayBhbmQgcmVtb3ZlIHRoZSBuYXZiYWNrIGhhbmRsZXIgYXMgaXQgbWFrZXMgbm8gc2Vuc2UgYW55IGxvbmdlclxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdC5zZXRCYWNrTmF2aWdhdGlvbih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKG5hdkJhY2spXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRXJyb3Igd2hpbGUgc2V0dGluZyBiYWNrIG5hdmlnYXRpb25cIiwgZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBoaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0bmF2QmFjayxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0aGlkZGVuRHJhZnRFbmFibGVkID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhpbnB1dEJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB2aWV3Py5nZXRWaWV3RGF0YSgpPy52aWV3TGV2ZWw7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24pIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogVGFibGUpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwge30pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdFx0Ly8gb25seSBmb3IgZWRpdCBtb2RlLCB3ZSBjbGVhciB0aGUgdGFibGUgY2FjaGVcblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1RhYmxlUm93QmluZGluZykge1xuXHRcdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdFx0KG9UYWJsZVJvd0JpbmRpbmcgYXMgdW5rbm93biBhcyB7IHJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzOiBGdW5jdGlvbiB9KS5yZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyhcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBlbmRzIGhlcmUhIVxuXG5cdFx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGFuZCB1cGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYWNjb3JkaW5nbHlcblx0XHRcdFx0Ly8gV2lsbCB0byBiZSBmaXhlZCB3aXRoIEJMSTogRklPUklURUNIUDEtMjQzMThcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSB0YWJsZUFQSSA/IEpTT04ucGFyc2UodGFibGVBUEkudGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCkgOiB7fTtcblxuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBbXSwgXCJ0YWJsZVwiKTtcblxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBVSTVFbGVtZW50W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRcdG9GaW5hbFVJU3RhdGU6IFByb21pc2U8dW5rbm93bj4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBUYWJsZSk6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0KCkpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlTW9kZWxzRm9yRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdChvT2JqZWN0UGFnZSBhcyB1bmtub3duIGFzIHsgX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHM6IEZ1bmN0aW9uIH0pLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKFtdKTtcblx0XHR0aGlzLmRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShtUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQpO1xuXHRcdHRoaXMuX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk7XG5cblx0XHRjb25zdCBhcHBseUFwcFN0YXRlID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHZpZXcuZ2V0SWQoKSwgdmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGV4dHJhY3RQYXRocyA9IChiaW5kaW5nSW5mbz86IHsgcGFydHM/OiB7IHBhdGg/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH1bXSB9KTogc3RyaW5nW10gPT5cblx0XHRcdEFycmF5LmZyb20oXG5cdFx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdFx0KGJpbmRpbmdJbmZvPy5wYXJ0cyB8fCBbXSlcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0Lm1vZGVsKVxuXHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gcGFydC5wYXRoIHx8IFwiXCIpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y29uc3Qgc3VidGl0bGVQYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXNvbHZlID0gWy4uLnN1YnRpdGxlUGF0aHMsIC4uLmRlc2NyaXB0aW9uUGF0aHNdO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZShvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgYXMgc3RyaW5nKTtcblx0XHR9O1xuXHRcdGlmIChvT2JqZWN0UGFnZVN1YnRpdGxlICYmICF0aGlzLmNsZWFyVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwKSB7XG5cdFx0XHRvT2JqZWN0UGFnZVN1YnRpdGxlLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuY2xlYXJUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXAgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBvT2JqZWN0UGFnZUNvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGJ1aWxkID0gKCk6IHsgdGl0bGU6IHN0cmluZzsgc3VidGl0bGU6IHN0cmluZzsgaW50ZW50OiBzdHJpbmc7IGljb246IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9ID0+ICh7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSA/PyBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGU/LmdldFZhbHVlKCkgPz8gXCJcIixcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCIsXG5cdFx0XHRkZXNjcmlwdGlvbjogb09iamVjdFBhZ2VEZXNjcmlwdGlvbj8uZ2V0VmFsdWUoKSA/PyBcIlwiXG5cdFx0fSk7XG5cdFx0Ly9pZiBubyBjb250ZXh0IG9yIG5vdGhpbmcgdG8gcmVzb2x2ZSwgZGlyZWN0IHJldHVyblxuXHRcdGlmICghb09iamVjdFBhZ2VDb250ZXh0IHx8IHBhdGhzVG9SZXNvbHZlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShidWlsZCgpKTtcblx0XHR9XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwocGF0aHNUb1Jlc29sdmUubWFwKGFzeW5jIChwKSA9PiAob09iamVjdFBhZ2VDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KS5yZXF1ZXN0T2JqZWN0KHApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkpKTtcblx0XHRyZXR1cm4gYnVpbGQoKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogVUk1RXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSAob0V4ZWN1dGlvbi5nZXRTb3VyY2UoKSBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24pLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSEpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpOiB2b2lkIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdFx0Py5lbmFibGVkO1xuXHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0XHRcdGNvbnN0IGlzRXJyb3JNZXNzYWdlID0gb01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS5nZXRUeXBlKCkgPT09IFwiRXJyb3JcIjtcblx0XHRcdFx0Y29uc3QgbWVzc2FnZVZhbGlkYXRpb24gPSBpc0hpZGRlbkRyYWZ0RW5hYmxlZFxuXHRcdFx0XHRcdD8gaXNFcnJvck1lc3NhZ2Vcblx0XHRcdFx0XHQ6IGlzRXJyb3JNZXNzYWdlICYmIG9NZXNzYWdlLmdldFRhcmdldHMoKS5zb21lKCh0YXJnZXQpID0+IHRhcmdldC5pbmNsdWRlcyhzVmlld0lkKSk7XG5cdFx0XHRcdGlmIChtZXNzYWdlVmFsaWRhdGlvbikge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IHN0cmluZywgb1JldD86IHVua25vd24pOiB1bmtub3duIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3QgaXNFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3ID0gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHRcdDogKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKTtcblx0XHRpZiAoaXNFZGl0TW9kZSAmJiAhY3VycmVudFBhZ2VWaWV3LmlzQShcInNhcC5tLk1lc3NhZ2VQYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMubWVzc2FnZUJ1dHRvbixcblx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyLFxuXHRcdFx0XHRvSXRlbUJpbmRpbmcgPSBvTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpIGFzIExpc3RCaW5kaW5nO1xuXG5cdFx0XHRpZiAob0l0ZW1CaW5kaW5nLmdldExlbmd0aCgpID4gMCAmJiAhb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdG9NZXNzYWdlQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgb01lc3NhZ2VCdXR0b24gaXMgcmVuZGVyZWQgd2hlbiBvcGVuQnkgaXMgY2FsbGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9NZXNzYWdlUG9wb3Zlci5vcGVuQnkob01lc3NhZ2VCdXR0b24pO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9SZXQ7XG5cdH1cblxuXHRhc3luYyBfZWRpdERvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IENvbnRleHQ+IHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGRlZmF1bHQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgb2JqZWN0LlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSB2YWx1ZSBvZiB0aGUgZGF0YSBwb2ludCBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBUaGUgc2VtYW50aWMgb2JqZWN0XG5cdCAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3Rcblx0ICovXG5cdF9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZ1xuXHQpOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBwcm9wZXJ0eVBhdGhcblx0XHRcdFx0fSxcblx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc2VtYW50aWNPYmplY3Rcblx0XHRcdH1cblx0XHRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqIC0gb24gYSB0cmFuc2llbnQgY29udGV4dDpcblx0ICogLSBpZiB0aGUgY29udGV4dCBnZXRzIGRhdGEsIHdhaXQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY29udGV4dCBhbmQgZXhlY3V0ZSB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICogLSBpZiBubyBkYXRhIGlzIGZvdW5kIG9uIHRoaXMgY29udGV4dCwgb25seSB0aGUgcHJlcGFyZUFjdGlvbiBpcyByZXF1ZXN0ZWRcblx0ICogLSBvbiBhIHJlZ3VsYXIgY29udGV4dCwgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIGlzIHJlcXVlc3RlZC5cblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBleGVjdXRlZFxuXHQgKi9cblx0YXN5bmMgX3ZhbGlkYXRlRG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBVSTVFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKSBhcyBDb250cm9sO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFjb250cm9sIHx8ICFjb250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZTtcblx0XHRpZiAoY29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRpZiAoY29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpKSB7XG5cdFx0XHRcdGF3YWl0IGNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnlQYXNzU2lkZUVmZmVjdHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLmhvbGRNZXNzYWdlc0ZvckNvbnRyb2woY29udHJvbCk7XG5cdFx0Y29uc3QgcmV0ID0gYXdhaXQgdGhpcy5leGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyk7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoeyBjb250cm9sIH0pO1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9mIHRoZSBkcmFmdFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqIC0gdGhlIGdsb2JhbCBzaWRlIGVmZmVjdHMgYXJlIGV4ZWN1dGVkIGlmIHRoZXNlIHNpZGUgZWZmZWN0cyBhcmUgZGVmaW5lZCBpbiB0aGUgY29udGV4dFxuXHQgKiAtIHRoZSBkcmFmdCBWYWxpZGF0aW9uIG9uIHRoZSBEcmFmdFJvb3QgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHRcblx0ICogQHBhcmFtIGJ5UGFzc1NpZGVFZmZlY3RzIE9ubHkgdGhlIGRyYWZ0IFZhbGlkYXRpb24gc3RlcCBpcyBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzID0gZmFsc2UpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHQvLyB0aGUgZHJhZnQgdmFsaWRhdGlvbiBpcyB0cmVhdGVkIGFzIGEgdXNlciBpbnRlcmFjdGlvbiwgYW5kIHRoZSBzZXJ2aWNlIG11c3QgcmV0dXJuIHRyYW5zaXRpb24gbWVzc2FnZXMgYWdhaW4gaWYgc3RpbGwgdmFsaWRcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICghYnlQYXNzU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHMgPSBlbnRpdHlUeXBlID8gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSkgOiBbXTtcblx0XHRcdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnbG9iYWwgU2lkZUVmZmVjdHMgZm9yIHRoZSByZWxhdGVkIGVudGl0eSwgZXhlY3V0ZSBpdC90aGVtXG5cdFx0XHRpZiAoZ2xvYmFsU2lkZUVmZmVjdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGdsb2JhbFNpZGVFZmZlY3RzLm1hcChhc3luYyAoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IChhd2FpdCBDb21tb25VdGlscy5jcmVhdGVSb290Q29udGV4dChcblx0XHRcdFByb2dyYW1taW5nTW9kZWwuRHJhZnQsXG5cdFx0XHR0aGlzLmdldFZpZXcoKSxcblx0XHRcdGFwcENvbXBvbmVudFxuXHRcdCkpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0Nvbm5lY3RlZCgpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIElmIGRhdGEgaGFzIGJlZW4gcHJvdmlkZWQgb24gdGhlIGNyZWF0aW9uIHJvd3MsIHRoZSByZWxhdGVkIGRvY3VtZW50cyBhcmUgY3JlYXRlZFxuXHQgKiBiZWZvcmUgc2F2aW5nIHRoZSBkcmFmdCB2ZXJzaW9uLlxuXHQgKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgSW5kaWNhdGVzIGlmIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3IHNob3VsZCBiZSBza2lwcGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQoc2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHM6IFByb21pc2U8dm9pZCB8IE9EYXRhTGlzdEJpbmRpbmc+W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IGZhbHNlO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhtb2RlbCk7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdC5pc0NvbGxhYm9yYXRpb25FbmFibGVkKCkpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIHRydWUpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYFNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29sbGFib3JhdGlvbiBkaXNjYXJkOiAke2Vycn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgodGFibGU6IFRhYmxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dEtleXMgPSBPYmplY3Qua2V5cygoY3JlYXRpb25Sb3c/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRPYmplY3QoKSB8fCB7fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0S2V5cy5maWx0ZXIoKGtleSkgPT4gIWtleS5zdGFydHNXaXRoKFwiQCR1aTUuXCIpKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvd1xuXHRcdFx0XHRcdFx0XHQuY3JlYXRlRG9jdW1lbnQodGFibGVCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uUm93OiBjcmVhdGlvblJvdyxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVBdEVuZDogdGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIixcblx0XHRcdFx0XHRcdFx0XHRza2lwU2lkZUVmZmVjdHM6IHRydWUgLy8gdGhlIHNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleSwgd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0YWJsZUJpbmRpbmcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBpc1NraXBCaW5kaW5nVG9WaWV3ID0gc2tpcEJpbmRpbmdUb1ZpZXcgYXMgdW5rbm93biBhcyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudDtcblx0XHRcdGNvbnN0IGlzU3RhbmRhcmRTYXZlID1cblx0XHRcdFx0aXNTa2lwQmluZGluZ1RvVmlldyAmJiB0eXBlb2YgaXNTa2lwQmluZGluZ1RvVmlldyA9PSBcIm9iamVjdFwiICYmIGlzU2tpcEJpbmRpbmdUb1ZpZXcuZ2V0U291cmNlKCkuZ2V0Q29tbWFuZCgpID09PSBcIlNhdmVcIjtcblxuXHRcdFx0Y29uc3QgYmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhd2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChjb250ZXh0LCB7XG5cdFx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGJpbmRpbmdzIGFzIHVua25vd24gYXMgT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdFx0XHRcdG1lcmdlUGF0Y2hEcmFmdDogdGhpcy5tZXJnZVBhdGNoRHJhZnQsXG5cdFx0XHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0aXNTdGFuZGFyZFNhdmVcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHRpZiAoZXJyb3IgIT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQobW9kZWwpKSB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG1vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY2FuY2VsRG9jdW1lbnQobVBhcmFtZXRlcnM6IHsgY2FuY2VsQnV0dG9uOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGV4dCB8IHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0Y29uc3QgbGFzdEZvY3VzZWRDb250cm9sSWQgPSBVSTVFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKT8uZ2V0SWQoKTtcblx0XHRsZXQgc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gZmFsc2U7XG5cdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCBmYWxzZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBoYXZlIGRpc3BsYXllZCB0aGUgZGlhbG9nIGFuZCB0aGUgdXNlciBjb25maXJtZWQgdGhlIGRpc2NhcmQgLT4gV2Ugc2tpcCB0aGUgZGlzY2FyZCBjb25maXJtYXRpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJkaXNjYXJkQ29uZmlybWVkXCIpIHtcblx0XHRcdFx0XHRzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGdldCBjb2xsYWJvcmF0aXZlIHVzZXJzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBpc0RvY3VtZW50TW9kaWZpZWQgPVxuXHRcdFx0ISF0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFVpTW9kZWxDb25zdGFudHMuRG9jdW1lbnRNb2RpZmllZCkgfHxcblx0XHRcdCghdGhpcy5nZXRTdGlja3lFZGl0TW9kZSgpICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKTtcblx0XHRjb25zdCBhZnRlckNhbmNlbDogRnVuY3Rpb24gPSAocHJvbWlzZVJlc3VsdDogT0RhdGFWNENvbnRleHQpID0+IHtcblx0XHRcdC8vIGZvY3VzIGlzIHJldGFpbmVkIG9uIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxuXHRcdFx0aWYgKGxhc3RGb2N1c2VkQ29udHJvbElkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0VUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChsYXN0Rm9jdXNlZENvbnRyb2xJZCk/LmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJvbWlzZVJlc3VsdDtcblx0XHR9O1xuXHRcdGlmIChcblx0XHRcdCh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkICYmXG5cdFx0XHRpc0RvY3VtZW50TW9kaWZpZWRcblx0XHQpIHtcblx0XHRcdHJldHVybiBkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0YWZ0ZXJDYW5jZWwsXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR0cnVlXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvd1xuXHRcdFx0LmNhbmNlbERvY3VtZW50KGNvbnRleHQsIHsgY29udHJvbDogY2FuY2VsQnV0dG9uLCBza2lwRGlzY2FyZFBvcG92ZXI6IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciB9KVxuXHRcdFx0LnRoZW4oKHByb21pc2VSZXN1bHQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFmdGVyQ2FuY2VsKHByb21pc2VSZXN1bHQpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBfYXBwbHlEb2N1bWVudChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKTtcblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpOiB2b2lkIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBDb250cm9sW10sIGFTdWJzZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiwgYUNvbnRyb2xzOiBDb250cm9sW10sIGJJc0NoYXJ0PzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaXRlbTEgb2YgYVBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IChpdGVtMSBhcyBNYWNyb0FQSSkuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoYklzQ2hhcnQpIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50Py5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpIGFzIENvbnRyb2xbXTtcblx0XHRcdFx0XHRpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5pc0E8Q2hhcnRCbG9jaz4oXCJzYXAuZmUubWFjcm9zLkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0Q29udHJvbCA9IGl0ZW0uZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKGNoYXJ0Q29udHJvbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBPER5bmFtaWNTaWRlQ29udGVudD4oXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IG9FbGVtZW50LmdldE1haW5Db250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9FbGVtZW50ID0gb1N1YkVsZW1lbnRbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgb0VsZW1lbnQuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJFbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvU3ViRWxlbWVudCAmJiBvU3ViRWxlbWVudC5pc0EgJiYgb1N1YkVsZW1lbnQuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9TdWJFbGVtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbikge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10ge1xuXHRcdGxldCBhQmxvY2tzOiBFbmhhbmNlV2l0aFVJNTxTdWJTZWN0aW9uQmxvY2s+W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpOiBUYWJsZVtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IFRhYmxlW10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfZmluZENoYXJ0cygpOiBDaGFydFtdIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFDaGFydHM6IENoYXJ0W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpOiB2b2lkIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9Db250ZW50ID0gb0Jsb2NrLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvQmxvY2suZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKG9Db250ZW50ICYmIG9Db250ZW50LmlzQSAmJiBvQ29udGVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhcnQgQ29udGV4dCBpcyByZXNvbHZlZCBmb3IgMTpuIG1pY3JvY2hhcnRzLlxuXHQgKiBAcGFyYW0gb0NoYXJ0Q29udGV4dCBUaGUgQ29udGV4dCBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBUaGUgY29sbGVjdGlvblBhdGggb2YgdGhlIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBBdHRyaWJ1dGVzIG9mIHRoZSBjaGFydCBDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q2hhcnRDb250ZXh0RGF0YShvQ2hhcnRDb250ZXh0OiBDb250ZXh0LCBzQ2hhcnRQYXRoOiBzdHJpbmcpOiB1bmtub3duW10ge1xuXHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9DaGFydENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0bGV0IG9DaGFydENvbnRleHREYXRhID0gW29Db250ZXh0RGF0YV07XG5cdFx0aWYgKG9DaGFydENvbnRleHQgJiYgc0NoYXJ0UGF0aCkge1xuXHRcdFx0aWYgKG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXSkge1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0ZGVsZXRlIG9Db250ZXh0RGF0YVtzQ2hhcnRQYXRoXTtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEucHVzaChvQ29udGV4dERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0NoYXJ0Q29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogU2Nyb2xsIHRoZSB0YWJsZXMgdG8gdGhlIHJvdyB3aXRoIHRoZSBzUGF0aFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVRhYmxlcykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coaXRlbSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMoXG5cdFx0b1BhZ2VDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFMaW5lQ29udGV4dDogT0RhdGFWNENvbnRleHRbXSxcblx0XHRzQ2hhcnRQYXRoOiBzdHJpbmdcblx0KTogeyBzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50OyBhdHRyaWJ1dGVzOiB1bmtub3duW10gfSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiB1bmtub3duW10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldIGFzIE1pY3JvQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGluaXRpYWxpemUgcGFnaW5hdGlvbi5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBvYmplY3QgcGFnZVxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgUGFyZW50IGxpc3QgYmluZGluZyB0byB1c2Vcblx0ICovXG5cdF9pbml0aWFsaXplUGFnaW5hdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnZpZXdMZXZlbDtcblx0XHRpZiAodmlld0xldmVsID4gMSkge1xuXHRcdFx0Y29uc3QgcGFnaW5hdG9yQ3VycmVudENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdUb1VzZSA9IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShiaW5kaW5nVG9Vc2UsIHBhZ2luYXRvckN1cnJlbnRDb250ZXh0KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAobGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShsaXN0QmluZGluZywgY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTogdm9pZCB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBvYmplY3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IHN0cmluZyk6IHZvaWQge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IHsgc3VwcG9ydGVkPzogYm9vbGVhbiB9W10pOiB2b2lkIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKFxuXHRcdFx0b1N1YkRhdGFQb2ludHM6IFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fVxuXHRcdFx0Pixcblx0XHRcdG9QYWdlRGF0YTogb2JqZWN0XG5cdFx0KTogdm9pZCB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBvYmplY3QgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl0hW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXSE7XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIl9cIikgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHR9LFxuXHRcdFx0bUNvbmRpdGlvbnM6IHtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpOiB2b2lkIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogSW52b2tlcyB0aGUgcGFnZSBwcmltYXJ5IGFjdGlvbiBvbiBwcmVzcyBvZiBDdHJsK0VudGVyLlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBpVmlld0xldmVsID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuaGFuZGxlcnMub25DYWxsQWN0aW9uKG9WaWV3LCBzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0RG9jdW1lbnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIENvbW1vblV0aWxzLmdldElzRWRpdGFibGUob1ZpZXcpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQoKTtcblx0XHRcdH0gZWxzZSBpZiAoQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYW5hZ2VzIHRoZSBjb250ZXh0IGNoYW5nZSBldmVudCBvbiB0aGUgdGFibGVzLlxuXHRcdCAqIFRoZSBmb2N1cyBpcyBzZXQgaWYgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBhbiBlZGl0RmxvdyBhY3Rpb24gYW5kXG5cdFx0ICogYW4gZXZlbnQgaXMgZmlyZWQgb24gdGhlIG9iamVjdFBhZ2UgbWVzc2FnZUJ1dHRvbi5cblx0XHQgKiBAcGFyYW0gdGhpcyBUaGUgb2JqZWN0UGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIGV2ZW50IFRoZSBVSTUgZXZlbnRcblx0XHQgKi9cblx0XHRhc3luYyBvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgZXZlbnQ6IFVJNUV2ZW50PHt9LCBUYWJsZUFQST4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlQ29udGV4dHMgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpPy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblxuXHRcdFx0aWYgKGN1cnJlbnRBY3Rpb25Qcm9taXNlICYmIHRhYmxlQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvblJlc3BvbnNlID0gYXdhaXQgY3VycmVudEFjdGlvblByb21pc2U7XG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3BvbnNlPy5jb250cm9sSWQgPT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbkRhdGEgPSBhY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBhY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbSA9IHRhYmxlQ29udGV4dHMuZmluZEluZGV4KCh0YWJsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGFibGVEYXRhID0gdGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5cy5ldmVyeSgoa2V5OiBzdHJpbmcpID0+IHRhYmxlRGF0YVtrZXldID09PSBhY3Rpb25EYXRhW2tleV0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGlhbG9nID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlZCBiZWZvcmUgc2V0IHRoZSBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdGFzeW5jIG9uQ2FsbEFjdGlvbihcblx0XHRcdG9WaWV3OiBGRVZpZXcsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHtcblx0XHRcdFx0cGFyYW1ldGVyVmFsdWVzPzogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH1bXTtcblx0XHRcdFx0c2tpcFBhcmFtZXRlckRpYWxvZz86IGJvb2xlYW47XG5cdFx0XHRcdGNvbnRleHRzPzogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRtb2RlbD86IE9EYXRhTW9kZWw7XG5cdFx0XHRcdHJlcXVpcmVzTmF2aWdhdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGxhYmVsPzogc3RyaW5nO1xuXHRcdFx0XHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdFx0XHRcdGVudGl0eVNldE5hbWU/OiBzdHJpbmc7XG5cdFx0XHRcdGludm9jYXRpb25Hcm91cGluZz86IHN0cmluZztcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwPzogc3RyaW5nO1xuXHRcdFx0XHRjb250cm9sSWQ/OiBzdHJpbmc7XG5cdFx0XHRcdGJTdGF0aWNBY3Rpb24/OiBib29sZWFuO1xuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM/OiBPRGF0YVY0Q29udGV4dFtdO1xuXHRcdFx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRcdFx0fVxuXHRcdCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG5cblx0XHRcdC8vIFdhaXQgZm9yIFZIIHZhbHVlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyB0aGUgYWN0aW9uXG5cdFx0XHRhd2FpdCBvQ29udHJvbGxlci5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvU291cmNlOiBDb250cm9sLFxuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQ6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4sXG5cdFx0XHRzQ29udHJvbENvbmZpZzogc3RyaW5nLFxuXHRcdFx0c0NvbGxlY3Rpb25QYXRoOiBzdHJpbmdcblx0XHQpOiB2b2lkIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpISxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0YU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKSxcblx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IHVua25vd24pIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIENoZWNrIGlmIGltcGxpY2l0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIG5lZWRlZFxuXHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBvU291cmNlLmdldEN1c3RvbURhdGEoKS5maW5kKChkYXRhKSA9PiBkYXRhLmdldEtleSgpID09PSBcIlZhbHVlUHJvcGVydHlQYXRoXCIpO1xuXHRcdFx0XHRpZiAoY3VzdG9tRGF0YSkge1xuXHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvQ29udHJvbGxlci5fZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzKFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YS5nZXRWYWx1ZSgpLFxuXHRcdFx0XHRcdFx0b1RhcmdldEluZm8uc2VtYW50aWNPYmplY3Rcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0c091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsXG5cdFx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0XHRzQ3JlYXRlUGF0aDogc3RyaW5nXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBVSTVFdmVudDx7IHN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIH0+KTogdm9pZCB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHRoaXMuZ2V0VmlldygpKSAmJlxuXHRcdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAyMDAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBzVGl0bGUgPSBnZXRSZXNvdXJjZU1vZGVsKG9Db250cm9sbGVyKS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuZW50aXR5U2V0XG5cdFx0XHRcdCk7XG5cdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2xvc2VDb2xsYWJvcmF0aW9uU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9zaG93Q29sbGFib3JhdGlvblN0cmlwXCIsIGZhbHNlKTtcblx0XHR9LFxuXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IGludGVybmFsTW9kZWxcblx0XHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCkhO1xuXHRcdFx0Ly8gUmVtb3ZlIGNvbnRleHQgYm91bmQgbWVzc2FnZXMgYW5kIHNldCB0aGUgcHJvcGVydHkgdG8gZmFsc2UgZm9yIHRoZSBiYWNrZW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaW4gZWRpdCBtb2RlLlxuXHRcdFx0aWYgKCFiSXNJbkVkaXRNb2RlICYmIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgY29udGV4dEJvdW5kTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdFx0LmZpbHRlcihcblx0XHRcdFx0XHRcdChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpICYmIG1lc3NhZ2UuZ2V0UGVyc2lzdGVudCgpID09PSB0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGNvbnRleHRCb3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhjb250ZXh0Qm91bmRNZXNzYWdlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUdBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUFDLElBRzlDRSxvQkFBb0IsSUFBQUMsSUFBQSxHQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLEVBQUFDLEtBQUEsR0FJakVDLGNBQWMsQ0FBQ0MsV0FBVyxDQUFDLEVBQUFDLEtBQUEsR0FHM0JGLGNBQWMsQ0FBQ0csS0FBSyxDQUFDQyxRQUFRLENBQUNDLGNBQWMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHOUNOLGNBQWMsQ0FBQ08sZUFBZSxDQUFDSCxRQUFRLENBQUNJLHVCQUF1QixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdqRVQsY0FBYyxDQUFDVSxTQUFTLENBQUNOLFFBQVEsQ0FBQ08saUJBQWlCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3JEWixjQUFjLENBQUNhLGNBQWMsQ0FBQ1QsUUFBUSxDQUFDVSxzQkFBc0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHL0RmLGNBQWMsQ0FBQ2dCLHFCQUFxQixDQUFDWixRQUFRLENBQUNhLDZC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
|
|
1689
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzIiwiUHJlZmVycmVkQWN0aW9uU3RhdHVzVHlwZSIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiX2RlYzMiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJfZGVjNCIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiX2RlYzUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIl9kZWM2IiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiX2RlYzciLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIl9kZWM4IiwiQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJDb2xsYWJvcmF0aW9uTWFuYWdlck92ZXJyaWRlIiwiX2RlYzkiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiX2RlYzEwIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiX2RlYzExIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJfZGVjMTIiLCJwdWJsaWNFeHRlbnNpb24iLCJfZGVjMTMiLCJmaW5hbEV4dGVuc2lvbiIsIl9kZWMxNCIsIl9kZWMxNSIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9QYWdlQ29udHJvbGxlciIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJpbnZhbGlkYXRlVGl0bGVIaWVyYXJjaHlDYWNoZVNldFVwIiwibWVyZ2VQYXRjaERyYWZ0IiwiaXNGaXJzdEJpbmRpbmciLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsIm9uQ2FsbEFjdGlvbiIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJfZWRpdERvY3VtZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRJc0VkaXRhYmxlIiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJldmVudCIsInRhYmxlQVBJIiwiZ2V0U291cmNlIiwidGFibGUiLCJjb250ZW50IiwiY3VycmVudEFjdGlvblByb21pc2UiLCJlZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwidGFibGVDb250ZXh0cyIsIl9nZXRUYWJsZUJpbmRpbmciLCJnZXRDdXJyZW50Q29udGV4dHMiLCJhY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsImdldElkIiwiYWN0aW9uRGF0YSIsIm9EYXRhIiwia2V5cyIsIm5ld0l0ZW0iLCJmaW5kSW5kZXgiLCJ0YWJsZUNvbnRleHQiLCJ0YWJsZURhdGEiLCJnZXRPYmplY3QiLCJldmVyeSIsImtleSIsImRpYWxvZyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZmluZCIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZSIsIkxvZyIsImVycm9yIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJzeW5jVGFzayIsImludm9rZUFjdGlvbiIsInRoZW4iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsImNhdGNoIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvU291cmNlIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0IiwiY3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJfZ2V0SW1wbGljaXRTZW1hbnRpY09iamVjdE1hcHBpbmdGb3JEYXRhUG9pbnRzIiwiZ2V0VmFsdWUiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJnZXRQcm9wZXJ0eSIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsIm9PYmplY3RQYWdlIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwic1RpdGxlIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJjbG9zZUNvbGxhYm9yYXRpb25TdHJpcCIsInNldFByb3BlcnR5IiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsInZpZXciLCJiSXNJbkVkaXRNb2RlIiwiaW50ZXJuYWxNb2RlbCIsIm1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiZ2V0Qm91bmRDb250ZXh0IiwiY29udGV4dEJvdW5kTWVzc2FnZXMiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJnZXRQZXJzaXN0ZW50IiwicmVtb3ZlTWVzc2FnZXMiLCJoaWRlTWVzc2FnZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic0lkIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwiZ2V0T3duZXJDb21wb25lbnQiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm1lc3NhZ2VCaW5kaW5nIiwiYmluZExpc3QiLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwiX2hhbmRsZVNtYXJ0U3VtbWFyeVN0YXJ0dXBBY3Rpb24iLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsImRpc2Nvbm5lY3QiLCJkZXRhY2hDaGFuZ2UiLCJnZXRBcHBDb21wb25lbnQiLCJpc1N1c3BlbmRlZCIsIm1lc3NhZ2VzIiwiX3Nob3dNZXNzYWdlcyIsIm9UYWJsZSIsImdldFJvd0JpbmRpbmciLCJjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJ0YWJsZVR5cGUiLCJpc0EiLCJnZXRUeXBlIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29udHJvbCIsInJvd0NvdW50TW9kZSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsImFwcGx5IiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaXRlbSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsImZuT1BSZW5kZXJpbmdMYXlvdXQiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsIl9pbml0aWFsaXplUGFnaW5hdGlvbiIsImxpc3RCaW5kaW5nIiwiZmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJfZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmciLCJ1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucyIsInNldFZpc2libGUiLCJNRENUYWJsZVByb21pc2VzIiwiX2dldEFsbEJsb2NrcyIsImdldENvbnRlbnQiLCJpbml0aWFsaXplZCIsIlByb21pc2UiLCJhbGwiLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZW5hYmxlQW5pbWF0aW9uIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsImdldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9iamVjdFBhZ2UiLCJmaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwiZ2V0RW5hYmxlZCIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiRWRpdGFibGVIZWFkZXIiLCJmaXJzdFZpc2liaWxpdHlCaW5kaW5nIiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiIsImZvckVhY2giLCJzdWJCbG9jayIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJibG9ja0NvbnRyb2wiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZW1wdHlGaWVsZCIsImdldEZpcnN0RW1wdHlSZXF1aXJlZEZpZWxkIiwiZmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJpc0VtcHR5IiwiZ2V0TXVsdGlWYWx1ZUZpZWxkIiwiZ2V0SXRlbXMiLCJ2YWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiZm9jdXNJbmZvIiwiZ2V0Rm9jdXNJbmZvIiwidGFyZ2V0SW5mbyIsInNpbGVudCIsImZvY3VzIiwiYWxsc3ViU2VjdGlvbnMiLCJjdXJyZW50TW9kZWwiLCJnZXRCaW5kaW5ncyIsImJpbmRpbmciLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm5hdkJhY2siLCJjdXJyZW50VVJMIiwiZG9jdW1lbnQiLCJVUkwiLCJoaXN0b3J5IiwiYmFjayIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ3YXJuaW5nIiwiaGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiRnVuY3Rpb24iLCJOYXZpZ2F0aW9uVHlwZSIsIkJhY2tOYXZpZ2F0aW9uIiwiX29uQWZ0ZXJCaW5kaW5nIiwiaW5wdXRCaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImJpbmRpbmdDb250ZXh0IiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsInJlc29sdmUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwib0Vycm9yIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJfdXBkYXRlQXZhaWxhYmxlQ2FyZHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsInBhZ2VSZWFkeSIsIndhaXRGb3IiLCJjYXJkcyIsImNvbGxhYm9yYXRpb25NYW5hZ2VyIiwiY29sbGVjdEF2YWlsYWJsZUNhcmRzIiwiY2FyZE9iamVjdCIsInVwZGF0ZUNhcmRzIiwicGFyZW50QXBwSWQiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJhZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIiLCJzaGFyZUF2YWlsYWJsZUNhcmRzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJmaW5kRWxlbWVudHMiLCJlbGVtIiwibWVzc2FnZVN0cmlwIiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiSW5mb3JtYXRpb24iLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50Iiwib1NlbGVjdGVkU2VjdGlvbiIsImdldEVsZW1lbnRCeUlkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJvT2JqZWN0UGFnZURlc2NyaXB0aW9uIiwiZXh0cmFjdFBhdGhzIiwiYmluZGluZ0luZm8iLCJmcm9tIiwiU2V0IiwicGFydHMiLCJwYXJ0IiwibW9kZWwiLCJwYXRoIiwiQm9vbGVhbiIsInN1YnRpdGxlUGF0aHMiLCJnZXRCaW5kaW5nSW5mbyIsImRlc2NyaXB0aW9uUGF0aHMiLCJwYXRoc1RvUmVzb2x2ZSIsImFwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImZuQ2xlYXJDYWNoZVRpdGxlIiwiaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGUiLCJvT2JqZWN0UGFnZUNvbnRleHQiLCJidWlsZCIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiZGVzY3JpcHRpb24iLCJwIiwicmVxdWVzdE9iamVjdCIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwib01lc3NhZ2UiLCJpc0Vycm9yTWVzc2FnZSIsInZhbGlkYXRpb24iLCJtZXNzYWdlVmFsaWRhdGlvbiIsImluY2x1ZGVzIiwiZXJyIiwib1JldCIsImlzRWRpdE1vZGUiLCJjdXJyZW50UGFnZVZpZXciLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib01lc3NhZ2VCdXR0b24iLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInByb3BlcnR5UGF0aCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0QWN0aXZlRWxlbWVudCIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiaG9sZE1lc3NhZ2VzRm9yQ29udHJvbCIsInJldCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwic2hvd01lc3NhZ2VzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiaXNDb25uZWN0ZWQiLCJza2lwQmluZGluZ1RvVmlldyIsImF3YWl0Q3JlYXRlRG9jdW1lbnRzIiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJza2lwU2lkZUVmZmVjdHMiLCJpc1NraXBCaW5kaW5nVG9WaWV3IiwiaXNTdGFuZGFyZFNhdmUiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIkNvbnRpbnVlIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwibGFzdEZvY3VzZWRDb250cm9sSWQiLCJzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIiLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJVaU1vZGVsQ29uc3RhbnRzIiwiRG9jdW1lbnRNb2RpZmllZCIsImFmdGVyQ2FuY2VsIiwicHJvbWlzZVJlc3VsdCIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsIml0ZW0xIiwib0VsZW1lbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsIm9TdWJFbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwicmVwbGFjZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9WaWV3RGF0YSIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwic0tleSIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsImJpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJmbkdldExpbmtzIiwiZm5PbkVycm9yIiwiZm5TZXRMaW5rRW5hYmxlbWVudCIsImlkIiwiYVN1cHBvcnRlZExpbmtzIiwic0xpbmtJZCIsInN1cHBvcnRlZCIsIm9TdWJEYXRhUG9pbnRzIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rIiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyIsIl9maW5kU3VtbWFyaXplQnV0dG9uIiwib2JqZWN0UGFnZVRpdGxlIiwic3VtbWFyaXplQnV0dG9uIiwiYnV0dG9uIiwiZW5kc1dpdGgiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbXMiLCJwcmVmZXJyZWRBY3Rpb24iLCJwcmVmZXJyZWRBY3Rpb25MZXZlbCIsInBhcnNlSW50Iiwic3BsaXQiLCJpc05hTiIsImdldFByZWZlcnJlZEFjdGlvblN0YXR1cyIsIkNhblBlcmZvcm0iLCJzZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMiLCJBbHJlYWR5UGVyZm9ybWVkIiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJTbWFydFN1bW1hcml6ZSIsImZpcmVQcmVzcyIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uTWFuYWdlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY2FyZHMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBVaU1vZGVsQ29uc3RhbnRzIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9lZGl0Rmxvd0NvbnN0YW50c1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHR5cGUgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0LCBNaWNyb0NoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENoYXJ0QmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ2hhcnRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsbEJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9FYXN5RmlsbEJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgU3VtbWFyaXphdGlvbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9haS9TdW1tYXJpemF0aW9uQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBGb3JtQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUFQSVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9tZXNzYWdlcy9NZXNzYWdlQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTaGFyZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEV4dGVuc2lvbkFQSSB9IGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkRpc2NhcmQgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb21wb25lbnRzL0NvbGxhYm9yYXRpb25EaXNjYXJkRGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBJbnB1dEJhc2UgZnJvbSBcInNhcC9tL0lucHV0QmFzZVwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kRXhlY3V0aW9uJEV4ZWN1dGVFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnkgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgRm9ybSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0Zvcm1cIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgVGFibGVUeXBlQmFzZSBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9UYWJsZVR5cGVCYXNlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0xpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGlvbkRyYWZ0IGZyb20gXCIuL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRyYWZ0XCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvQ29sbGFib3JhdGlvbk1hbmFnZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbmV4cG9ydCB0eXBlIEJpbmRpbmdQYXJhbXMgPSB7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0bGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuY29uc3QgUHJlZmVycmVkQWN0aW9uU3RhdHVzID0gRkVMaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGU7XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IEZFVmlldztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oQ29sbGFib3JhdGlvbk1hbmFnZXIub3ZlcnJpZGUoQ29sbGFib3JhdGlvbk1hbmFnZXJPdmVycmlkZSkpXG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyITogQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b24hOiBNZXNzYWdlQnV0dG9uO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbk1lc3NhZ2U/OiBNZXNzYWdlO1xuXG5cdHByaXZhdGUgbWVyZ2VQYXRjaERyYWZ0ID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBhdXRvUXVldWVMb2NrOiBSZXR1cm5UeXBlPE9EYXRhTW9kZWxbXCJsb2NrXCJdPiB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIG1lc3NhZ2VCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIGlzRmlyc3RCaW5kaW5nID0gdHJ1ZTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJleHRlcm5hbE5hdmlnYXRpb25Db250ZXh0XCIsIHsgcGFnZTogdHJ1ZSB9LCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXG5cdFx0XHRcInJlbGF0ZWRBcHBzXCIsXG5cdFx0XHR7XG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0XHRpdGVtczogbnVsbFxuXHRcdFx0fSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdFx0dGhpcy5tZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgTWVzc2FnZUJ1dHRvbjtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmJpbmRMaXN0KFwiL1wiKTtcblx0XHR0aGlzLm1lc3NhZ2VCaW5kaW5nPy5hdHRhY2hDaGFuZ2UodGhpcy5fZm5TaG93T1BNZXNzYWdlLCB0aGlzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRFbmFibGVkXCIsIHRydWUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlLCB1bmRlZmluZWQsIHRydWUpO1xuXG5cdFx0dGhpcy5faGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmRpc2Nvbm5lY3QoKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblxuXHRcdHRoaXMubWVzc2FnZUJpbmRpbmc/LmRldGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBzaG93IHRoZSBtZXNzYWdlIHN0cmlwIG9uIHRoZSBvYmplY3QgcGFnZS5cblx0ICpcblx0ICovXG5cdF9mblNob3dPUE1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGFwcCBpcyBzdXNwZW5kZWQsIHdlIGRvIG5vdCBzaG93IHRoZSBtZXNzYWdlcyAodGhlIE1lc3NhZ2VNb2RlbCBjb250YWlucyBtZXNzYWdlcyBmcm9tIHRoZSBhY3RpdmUgYXBwKS5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZz8uZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5maWx0ZXIoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKGV4dGVuc2lvbkFQSSkge1xuXHRcdFx0ZXh0ZW5zaW9uQVBJLl9zaG93TWVzc2FnZXMobWVzc2FnZXMsIFwiQmFja2VuZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogVGFibGUpOiBPRGF0YUxpc3RCaW5kaW5nIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgR3JpZFRhYmxlIG9yIGEgVHJlZVRhYmxlLlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChibG9ja3MubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gdGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk7XG5cdFx0XHRcdGlmICghdGFibGUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdGFibGVUeXBlID0gdGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikgJiYgKHRhYmxlLmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKT8uaXNBPFRhYmxlQVBJPihcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIilcblx0XHRcdFx0XHQ/ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSlcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHRhYmxlVHlwZSAmJlxuXHRcdFx0XHRcdCh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkgJiZcblx0XHRcdFx0XHR0YWJsZUFQST8uZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5yb3dDb3VudE1vZGUgPT09IFwiQXV0b1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc3ViU2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uSW5kZXggPSBzdWJTZWN0aW9ucy5sZW5ndGggLSAxOyBzdWJTZWN0aW9uSW5kZXggPj0gMDsgc3ViU2VjdGlvbkluZGV4LS0pIHtcblx0XHRcdGlmIChzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24gPSBzdWJTZWN0aW9uc1tzdWJTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIGF0dGFjaCB0aGlzIGV2ZW50IGluIG9yZGVyIHRvIG1hbmFnZSB0aGUgT2JqZWN0IFBhZ2UgTGF6eSBMb2FkaW5nIG1lY2hhbmlzbVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgbGFzdFZpc2libGVTdWJTZWN0aW9uLCBjaGFuZ2VDbGFzc0ZvclRhYmxlcywgdGhpcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKTogVGFibGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3LmdldFZpZXdEYXRhKCk/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKTtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFUYWJsZXMpIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBpdGVtLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIHsgaXNGaXJzdFJlbmRlcmluZz86ICgpID0+IGJvb2xlYW4gfSkuaXNGaXJzdFJlbmRlcmluZz8uKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHRjb25zdCBmbk9QUmVuZGVyaW5nTGF5b3V0ID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKT8uZWRpdGFibGVIZWFkZXJDb250ZW50KSB7XG5cdFx0XHRcdFx0Zm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShmbk9QUmVuZGVyaW5nTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUoZm5PUFJlbmRlcmluZ0xheW91dCk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGNvbnN0IGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nID0gdGhpcy5fZ2V0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcoKTtcblxuXHRcdGlmIChcblx0XHRcdHRoaXMudXNlTGF6eUxvYWRlck9wdGltaXphdGlvbnMoKSAmJlxuXHRcdFx0b09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSAmJlxuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcgJiZcblx0XHRcdHRoaXMuaXNGaXJzdEJpbmRpbmdcblx0XHQpIHtcblx0XHRcdC8vIGlmIGxhenkgbG9hZGluZyBpcyBlbmFibGVkIGFuZCBhdCBsZWFzdCBvbmUgc3Vic2VjdGlvbiBoYXMgYSB2aXNpYmlsaXR5IGJpbmRpbmdcblx0XHRcdG9PYmplY3RQYWdlLnNldFZpc2libGUoZmFsc2UpOyAvLyBUaGUgb2JqZWN0UGFnZSBWaXNpYmlsaXR5IGlzIHNldCB0byBmYWxzZSB0byBwcmV2ZW50IHRoZSBsYXp5IGxvYWRlciB0byBjb21wdXRlIHRoZSBzZWN0aW9uc1xuXHRcdFx0Zmlyc3RTdWJTZWN0aW9uVmlzaWJpbGl0eUJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcblx0XHRcdFx0Y29uc3QgTURDVGFibGVQcm9taXNlcyA9IHRoaXMuX2dldEFsbEJsb2NrcygpLm1hcChhc3luYyAoYmxvY2spID0+XG5cdFx0XHRcdFx0YmxvY2suZ2V0VmlzaWJsZSgpICYmIGJsb2NrLmdldENvbnRlbnQ/LigpPy5pc0E8VGFibGVBUEk+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKVxuXHRcdFx0XHRcdFx0PyAoYmxvY2suZ2V0Q29udGVudCgpIGFzIFRhYmxlQVBJKS5nZXRDb250ZW50KCkuaW5pdGlhbGl6ZWQoKVxuXHRcdFx0XHRcdFx0OiBudWxsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKE1EQ1RhYmxlUHJvbWlzZXMpO1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRWaXNpYmxlKHRydWUpOyAvLyBWaXNpYmlsaXR5IGlzIHJlc3RvcmVkIG9uY2UgdGhlIHZpc2liaWxpdHkgYmluZGluZ3Mgb2YgdGhlIHNlY3Rpb25zIGFyZSByZXNvbHZlZCwgYWxsb3dpbmcgbGF6eSBsb2FkaW5nIHRvIHByb3Blcmx5IHByb2Nlc3MgdGhlbVxuXHRcdFx0XHR0aGlzLmlzRmlyc3RCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyB7IG9Db250YWluZXI6IENvbnRyb2wgfSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdHRoaXMucGxhY2Vob2xkZXIuZW5hYmxlQW5pbWF0aW9uKCk7XG5cdFx0XHRcdChvTmF2Q29udGFpbmVyIGFzIHVua25vd24gYXMgeyBzaG93UGxhY2Vob2xkZXI6IEZ1bmN0aW9uIH0pLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1c2VMYXp5TG9hZGVyT3B0aW1pemF0aW9ucygpOiBib29sZWFuIHtcblx0XHRpZiAobmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5nZXQoXCJzYXAtdWkteHgtbGF6eWxvYWRlci1vcHRpbWl6YXRpb25zXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmlyc3QgY2xpY2thYmxlIGVsZW1lbnQgaW4gdGhlIGhlYWRlciBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBvYmplY3RQYWdlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdCAqIEByZXR1cm5zIFRoZSBmaXJzdCBjbGlja2FibGUgZWxlbWVudCBmb3VuZCBpbiB0aGUgaGVhZGVyXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvYmplY3RQYWdlOiBPYmplY3RQYWdlTGF5b3V0KTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhY3Rpb25zID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIChvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFjdGlvbnMuZmluZChmdW5jdGlvbiAoYWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0Q29udGVudCgpPy5nZXRWaXNpYmxlKCkgPz8gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxTaGFyZUFQST4oXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxFYXN5RmlsbEJ1dHRvbj4oXCJzYXAuZmUubWFjcm9zLmFpLkVhc3lGaWxsQnV0dG9uXCIpIHx8XG5cdFx0XHRcdFx0YWN0aW9uLmlzQTxDb2xsYWJvcmF0aW9uRHJhZnQ+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbXBvbmVudHMuQ29sbGFib3JhdGlvbkRyYWZ0XCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlIGFuZCBDb2xsYWJvcmF0aW9uRHJhZnQgZG9lcyBub3QgaGF2ZSBhIGRpc2FibGUgcHJvcGVydHlcblx0XHRcdFx0XHQvLyBoZW5jZSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIGl0IGlzIGRpc2FibGVkIG9yIG5vdFxuXHRcdFx0XHRcdHJldHVybiBhY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFhY3Rpb24uaXNBPEludmlzaWJsZVRleHQ+KFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhYWN0aW9uLmlzQTxUb29sYmFyU3BhY2VyPihcInNhcC5tLlRvb2xiYXJTcGFjZXJcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gYWN0aW9uLmdldFZpc2libGUoKSAmJiAoYWN0aW9uIGFzIEJ1dHRvbikuZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSBiaW5kaW5ncyBvZiBibG9ja3MgaW4gT2JqZWN0IFBhZ2UgTGF5b3V0IGJhc2VkIG9uIHRoZSBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDM7IC8vIDMgc2VjdGlvbnMvc3Vic2VjdGlvbnMgYXJlIGxvYWRlZCBpbml0aWFsbHksIHRoZSBvdGhlcnMgYXJlIGxvYWRlZCBsYXppbHlcblx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Y29uc3QgZmlyc3RWaXNpYmlsaXR5QmluZGluZyA9IHRoaXMuX2dldGZpcnN0U3ViU2VjdGlvblZpc2liaWxpdHlCaW5kaW5nKCk7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXG5cdFx0XHRcdGNvbnN0IGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbiA9XG5cdFx0XHRcdFx0KCF0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKSB8fFxuXHRcdFx0XHRcdCh0aGlzLnVzZUxhenlMb2FkZXJPcHRpbWl6YXRpb25zKCkgJiZcblx0XHRcdFx0XHRcdCgoIWJVc2VJY29uVGFiQmFyICYmIGZpcnN0VmlzaWJpbGl0eUJpbmRpbmcpIHx8IC8vaWYgc29tZSBzdWJzZWN0aW9ucyBoYXZlIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KCFiVXNlSWNvblRhYkJhciAmJiAhZmlyc3RWaXNpYmlsaXR5QmluZGluZyAmJiBpU2tpcCA8IDEpIHx8IC8vIGlmIG5vIHN1YnNlY3Rpb24gaGFzIHZpc2liaWxpdHkgYmluZGluZyBhbmQgd2UgYXJlIG5vdCBpbiBJY29uVGFiQmFyIG1vZGVcblx0XHRcdFx0XHRcdFx0KGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpKTtcblx0XHRcdFx0aWYgKGRpc2FibGVCaW5kaW5nQ29udGV4dENvbmRpdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0Ly8gU3ViU2VjdGlvbidzIGNvbnRlbnRzIGJpbmRpbmcgaXMgZGlzYWJsZWQuXG5cdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IElucHV0QmFzZSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Zm9yIChjb25zdCBzdWJTZWN0aW9uIG9mIGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Y29uc3QgYUJsb2NrcyA9IHN1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgKEZvcm0gfCBGb3JtQVBJKVtdO1xuXG5cdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGJsb2NrQ29udHJvbCBvZiBhQmxvY2tzKSB7XG5cdFx0XHRcdFx0aWYgKGJsb2NrQ29udHJvbC5nZXRCaW5kaW5nQ29udGV4dD8uKCkpIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChibG9ja0NvbnRyb2wuaXNBPEZvcm0+KFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYmxvY2tDb250cm9sLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbC5nZXRDb250ZW50ICYmIGJsb2NrQ29udHJvbC5nZXRDb250ZW50KCk/LmlzQTxGb3JtPihcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IChibG9ja0NvbnRyb2wuZ2V0Q29udGVudCgpIGFzIEZvcm0pLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGJsb2NrQ29udHJvbD8uZ2V0Q29udGVudD8uKCk/LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9ICgoYmxvY2tDb250cm9sLmdldENvbnRlbnQoKSBhcyBGb3JtQVBJKS5nZXRDb250ZW50KCkgYXMgRm9ybSkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBmb3JtQ29udGFpbmVyIG9mIGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBmb3JtQ29udGFpbmVyLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1FbGVtZW50IG9mIGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGZvcm1FbGVtZW50LmdldEZpZWxkcygpIGFzIElucHV0QmFzZVtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBlbXB0eUZpZWxkID0gdGhpcy5nZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChhRmllbGRzKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVtcHR5RmllbGQpIHJldHVybiBlbXB0eUZpZWxkO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogVmVyaWZ5IGlmIHRoZSBmaXJzdCBmaWVsZCBpcyBlbXB0eSBhbmQgcmVxdWlyZWQuXG5cdCAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgZmlyc3QgZW1wdHkgcmVxdWlyZWQgZmllbGQgb3IgdW5kZWZpbmVkIGlmIG5vIHN1Y2ggZmllbGQgZXhpc3RzXG5cdCAqL1xuXHRnZXRGaXJzdEVtcHR5UmVxdWlyZWRGaWVsZChmaWVsZHM6IElucHV0QmFzZVtdKTogSW5wdXRCYXNlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRpZiAoIWZpZWxkc1swXS5nZXRSZXF1aXJlZD8uKCkpIHJldHVybjtcblxuXHRcdGxldCBpc0VtcHR5ID0gZmFsc2U7XG5cblx0XHR0cnkge1xuXHRcdFx0aWYgKGZpZWxkc1swXS5pc0EoXCJzYXAuZmUubWFjcm9zLk11bHRpVmFsdWVGaWVsZFwiKSkge1xuXHRcdFx0XHRjb25zdCBpdGVtcyA9IChmaWVsZHNbMF0gYXMgdW5rbm93biBhcyBNdWx0aVZhbHVlRmllbGRCbG9jaykuZ2V0TXVsdGlWYWx1ZUZpZWxkKCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0aXNFbXB0eSA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKGZpZWxkc1swXSBhcyBJbnB1dEJhc2UpLmdldFZhbHVlKCk7XG5cdFx0XHRcdGlzRW1wdHkgPSAhdmFsdWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBjaGVja2luZyBmaWVsZCBwcm9wZXJ0aWVzOiAke2Vycm9yfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBpc0VtcHR5ID8gZmllbGRzWzBdIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW5pdGlhbCBmb2N1cyBpbiBlZGl0IG1vZGUuXG5cdCAqIEBwYXJhbSBhU3ViU2VjdGlvbnMgT2JqZWN0IHBhZ2Ugc3ViIHNlY3Rpb25zXG5cdCAqL1xuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQuaXNBKFwic2FwLmZlLm1hY3Jvcy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob01hbmRhdG9yeUZpZWxkIGFzIHVua25vd24gYXMgTXVsdGlWYWx1ZUZpZWxkQmxvY2spLmdldE11bHRpVmFsdWVGaWVsZCgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gKFxuXHRcdFx0XHRcdFx0XHRvTWFuZGF0b3J5RmllbGQgYXMgdW5rbm93biBhcyB7IGNvbnRlbnQ6IHsgZ2V0Q29udGVudEVkaXQ6IEZ1bmN0aW9uIH0gfVxuXHRcdFx0XHRcdFx0KS5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0XHRcdGNvbnN0IGZvY3VzSW5mbyA9IG9GaWVsZFRvRm9jdXMuZ2V0Rm9jdXNJbmZvKCkgYXMgeyB0YXJnZXRJbmZvOiBvYmplY3QgfTtcblx0XHRcdFx0XHRmb2N1c0luZm8udGFyZ2V0SW5mbyA9IHsgc2lsZW50OiB0cnVlIH07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMuaXNBKFwic2FwLnVpLm1kYy5maWVsZC5GaWVsZElucHV0XCIpKSB7XG5cdFx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb0ZpZWxkVG9Gb2N1cy5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cyhmb2N1c0luZm8pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LmJpbmQodGhpcyksXG5cdFx0XHQwIC8vMzAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpcnN0IHN1Yi1zZWN0aW9uIHdpdGggYSB2aXNpYmlsaXR5IGJvdW5kIHRvIHRoZSBtb2RlbCBvZiB0aGUgdmlldy5cblx0ICogU2VjdGlvbnMgd2l0aCBCaW5kaW5ncyBvbiBpbnRlcm5hbCBtb2RlbHMgb25seSBhcmUgaWdub3JlZC5cblx0ICogQHJldHVybnMgVGhlIHZpc2liaWxpdHkgYmluZGluZyBvZiB0aGUgZmlyc3Qgc3ViLXNlY3Rpb24gb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZC5cblx0ICovXG5cdF9nZXRmaXJzdFN1YlNlY3Rpb25WaXNpYmlsaXR5QmluZGluZygpOiBCaW5kaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBhbGxzdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgY3VycmVudE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKTtcblx0XHRyZXR1cm4gYWxsc3ViU2VjdGlvbnNcblx0XHRcdC5maW5kKFxuXHRcdFx0XHQoc3ViU2VjdGlvbikgPT5cblx0XHRcdFx0XHQoc3ViU2VjdGlvbi5nZXRCaW5kaW5nKFwidmlzaWJsZVwiKSBhcyBDb21wb3NpdGVCaW5kaW5nIHwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0Py5nZXRCaW5kaW5ncz8uKClcblx0XHRcdFx0XHRcdC5zb21lKChiaW5kaW5nKSA9PiBiaW5kaW5nLmdldE1vZGVsKCkgPT09IGN1cnJlbnRNb2RlbClcblx0XHRcdClcblx0XHRcdD8uZ2V0QmluZGluZyhcInZpc2libGVcIik7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiB2b2lkIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXG5cdFx0Ly8gRnVuY3Rpb24gdG8gbmF2aWdhdGUgYmFjaywgb3IgZGlzcGxheSB0aGUgbGF1bmNocGFkIGlmIHdlJ3JlIG9uIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBoaXN0b3J5XG5cdFx0Y29uc3QgbmF2QmFjayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IGN1cnJlbnRVUkwgPSBkb2N1bWVudC5VUkw7XG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byB1c2UgbmF2aWdhdGVCYWNrRnJvbUNvbnRleHQsIHRoYXQgd2lsbCBkaXNwbGF5IHRoZSBob21lIHBhZ2Vcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDUwMCk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRcdC8vIFRoaXMgb2JqZWN0IHBhZ2UgZG9lc24ndCBoYXZlIGEgYmluZGluZyBjb250ZXh0LCBidXQgc3RpbGwgaGFuZGxlcyB0aGUgc2hlbGwgYmFjayBuYXZpZ2F0aW9uIC0tPiBwZm9ybSB0aGUgbmF2IGJhY2sgYW5kIHJlbW92ZSB0aGUgbmF2YmFjayBoYW5kbGVyIGFzIGl0IG1ha2VzIG5vIHNlbnNlIGFueSBsb25nZXJcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldFNoZWxsU2VydmljZXMoKVxuXHRcdFx0XHQuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKVxuXHRcdFx0XHQudGhlbihuYXZCYWNrKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhcIkVycm9yIHdoaWxlIHNldHRpbmcgYmFjayBuYXZpZ2F0aW9uXCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGlkZGVuRHJhZnRFbmFibGVkID0gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdClcblx0XHRcdFx0Py5lbmFibGVkO1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdG5hdkJhY2ssXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0RW5hYmxlZCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gdmlldz8uZ2V0Vmlld0RhdGEoKT8udmlld0xldmVsO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24pIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdChvVGFibGVSb3dCaW5kaW5nIGFzIHVua25vd24gYXMgeyByZW1vdmVDYWNoZXNBbmRNZXNzYWdlczogRnVuY3Rpb24gfSkucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gdGFibGVBUEkgPyBKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApIDoge307XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogVUk1RWxlbWVudFtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogVGFibGUpOiB2b2lkID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dCgpKSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZU1vZGVsc0ZvckVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSk6IHZvaWQge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgdW5rbm93biBhcyB7IF90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzOiBGdW5jdGlvbiB9KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdFx0dGhpcy5fdXBkYXRlQXZhaWxhYmxlQ2FyZHMoW10pO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgdGhlIGNhcmRzIHdoZW4gdGhlIGJpbmRpbmcgaXMgcmVmcmVzaGVkLlxuXHQgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgY2FyZHMgdG8gYmUgdXBkYXRlZFxuXHQgKi9cblx0YXN5bmMgX3VwZGF0ZUF2YWlsYWJsZUNhcmRzKGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci5jb2xsZWN0QXZhaWxhYmxlQ2FyZHMoY2FyZHMpO1xuXHRcdGlmIChjYXJkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBjYXJkT2JqZWN0ID0gdGhpcy5jb2xsYWJvcmF0aW9uTWFuYWdlci51cGRhdGVDYXJkcyhjYXJkcyk7XG5cdFx0XHRjb25zdCBwYXJlbnRBcHBJZCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0SWQoKTtcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0LmdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpXG5cdFx0XHRcdC5hZGRDYXJkc1RvQ29sbGFib3JhdGlvbk1hbmFnZXIoY2FyZE9iamVjdCwgcGFyZW50QXBwSWQsIHRoaXMuZ2V0VmlldygpLmdldElkKCkpO1xuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKS5zaGFyZUF2YWlsYWJsZUNhcmRzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Ly8gSWYgdGhlIHZpZXcncyBiaW5kaW5nIGNvbnRleHQgYWxyZWFkeSBoYWQgbWVzc2FnZXMgdGhhdCB3ZXJlIG5vdCBjbGVhcmVkLCB3ZSB3b3VsZCBuZWVkIHRvIHJlLWV2YWx1YXRlIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHR0aGlzLl9mblNob3dPUE1lc3NhZ2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLmdldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdGlmIChpc0VkaXRhYmxlICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyhbeyBjb250ZXh0OiBvQmluZGluZ0NvbnRleHQgfV0pO1xuXHRcdH1cblxuXHRcdGlmIChtUGFyYW1ldGVycz8uZm9yY2VGb2N1cykge1xuXHRcdFx0c2V0Rm9jdXMoKTtcblx0XHR9XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblxuXHRcdC8vVGhlIGZvbGxvd2luZyBjb2RpbmcgaXMgZG9uZSB0byBtZXJnZSBhbiBvcGVuIFBBVENIIGFuZCB0aGUgZHJhZnRwcmVwYXJlL2RyYWZ0YWN0aXZhdGVcblx0XHQvL3JlcXVlc3QgaW50byBvbmUgJGJhdGNoIHJlcXVlc3Rcblx0XHQvL1RvIGFjaGlldmUgdGhpcyB0aGUgJGF1dG8gcXVldWUgaXMgbG9ja2VkIGF0IHRoZSBtb3VzZWRvd24gZXZlbnQgKGJlZm9yZSBmb2N1c291dCkgaW5cblx0XHQvL29yZGVyIHRvIHdhaXQgZm9yIHRoZSBkcmFmdCByZXF1ZXN0IGlzc3VlZCBpbiB0aGUgc2F2ZSBidXR0b25zIHByZXNzIGV2ZW50IGhhbmRsZXIuXG5cdFx0Ly9UaGUgcXVldWUgaXMgcmVsZWFzZWQgYWdhaW4gZHVyaW5nIG1vdXNldXAgKGJlZm9yZSBwcmVzcykuXG5cdFx0Ly9UaGlzIGlzIG9ubHkgcG9zc2libGUgb24gbm9uIHRvdWNoIGRldmljZXMgYmVjYXVzZSBvbiB0b3VjaCBkZXZpY2VzIHRoZSBmb2N1c291dCBhbmQgcHJlc3Ncblx0XHQvL2V2ZW50cyBhcmUgYm90aCBpbml0aWF0ZWQgYXQgdG91Y2hlbmQgYnkgc2FwLm0uQnV0dG9uLlxuXHRcdC8vbW91c2VIYW5kbGVyU2V0IGlzIHVzZWQgdG8gZW5zdXJlcyB0aGF0IHRoZSBldmVudCBoYW5kbGVycyBhcmUgYXR0YWNoZWQgb25seSBvbmUgdGltZS5cblx0XHQvL1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBvblBhZ2VSZWFkeSBlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZWRpdC9kaXNwbGF5IG1vZGVcblx0XHRpZiAoIXRoaXMubWVyZ2VQYXRjaERyYWZ0ICYmICFEZXZpY2Uuc3VwcG9ydC50b3VjaCkge1xuXHRcdFx0Y29uc3Qgc2F2ZUJ1dHRvbiA9IG9WaWV3LmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpTdGFuZGFyZEFjdGlvbjo6U2F2ZVwiKSBhcyBCdXR0b247XG5cdFx0XHRjb25zdCBhdXRvUXVldWVVbmxvY2sgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sudW5sb2NrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0fTtcblxuXHRcdFx0c2F2ZUJ1dHRvbj8uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2Vkb3duXCIsICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmF1dG9RdWV1ZUxvY2s/LmlzTG9ja2VkKCkpIHtcblx0XHRcdFx0XHR0aGlzLmF1dG9RdWV1ZUxvY2sgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLmxvY2soXCIkYXV0b1wiKTtcblx0XHRcdFx0XHQvL3doZW4gdGhlIG1vdXNlIGlzIGRyYWdnZWQgYXdheSBmcm9tIHRoZSBzYXZlIGJ1dHRvbiB3aGlsZSBwcmVzc2VkIHRoZW4gdGhlcmUgd2lsbCBiZSBub1xuXHRcdFx0XHRcdC8vbW91c2V1cCBldmVudCBvbiB0aGUgc2F2ZSBidXR0b24uIFRoZXJlZm9yZSwgdGhlIHVubG9ja2luZyBpcyBkb25lIG9uIFwibW91c2V1cFwiIGFuZCBcImJsdXJcIlxuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRcdHNhdmVCdXR0b24uYXR0YWNoQnJvd3NlckV2ZW50KFwiYmx1clwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5tZXJnZVBhdGNoRHJhZnQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmIHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTogT2JqZWN0UGFnZUxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRhc3luYyBfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmc7IHN1YnRpdGxlOiBzdHJpbmc7IGludGVudDogc3RyaW5nOyBpY29uOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4ge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhKSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VEZXNjcmlwdGlvbiA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VEZXNjcmlwdGlvblwiO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGV4dHJhY3RQYXRocyA9IChiaW5kaW5nSW5mbz86IHsgcGFydHM/OiB7IHBhdGg/OiBzdHJpbmc7IG1vZGVsPzogc3RyaW5nIH1bXSB9KTogc3RyaW5nW10gPT5cblx0XHRcdEFycmF5LmZyb20oXG5cdFx0XHRcdG5ldyBTZXQoXG5cdFx0XHRcdFx0KGJpbmRpbmdJbmZvPy5wYXJ0cyB8fCBbXSlcblx0XHRcdFx0XHRcdC5maWx0ZXIoKHBhcnQpID0+ICFwYXJ0Lm1vZGVsKVxuXHRcdFx0XHRcdFx0Lm1hcCgocGFydCkgPT4gcGFydC5wYXRoIHx8IFwiXCIpXG5cdFx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y29uc3Qgc3VidGl0bGVQYXRocyA9IGV4dHJhY3RQYXRocyhvT2JqZWN0UGFnZVN1YnRpdGxlPy5nZXRCaW5kaW5nSW5mbyhcInZhbHVlXCIpKTtcblx0XHRjb25zdCBkZXNjcmlwdGlvblBhdGhzID0gZXh0cmFjdFBhdGhzKG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmdJbmZvKFwidmFsdWVcIikpO1xuXHRcdGNvbnN0IHBhdGhzVG9SZXNvbHZlID0gWy4uLnN1YnRpdGxlUGF0aHMsIC4uLmRlc2NyaXB0aW9uUGF0aHNdO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IGZuQ2xlYXJDYWNoZVRpdGxlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlKG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSBhcyBzdHJpbmcpO1xuXHRcdH07XG5cdFx0aWYgKChvT2JqZWN0UGFnZURlc2NyaXB0aW9uIHx8IG9PYmplY3RQYWdlU3VidGl0bGUpICYmICF0aGlzLmludmFsaWRhdGVUaXRsZUhpZXJhcmNoeUNhY2hlU2V0VXApIHtcblx0XHRcdG9PYmplY3RQYWdlU3VidGl0bGU/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdG9PYmplY3RQYWdlRGVzY3JpcHRpb24/LmdldEJpbmRpbmcoXCJ2YWx1ZVwiKT8uYXR0YWNoQ2hhbmdlKGZuQ2xlYXJDYWNoZVRpdGxlLCB0aGlzKTtcblx0XHRcdHRoaXMuaW52YWxpZGF0ZVRpdGxlSGllcmFyY2h5Q2FjaGVTZXRVcCA9IHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IG9PYmplY3RQYWdlQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgYnVpbGQgPSAoKTogeyB0aXRsZTogc3RyaW5nOyBzdWJ0aXRsZTogc3RyaW5nOyBpbnRlbnQ6IHN0cmluZzsgaWNvbjogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH0gPT4gKHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpID8/IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZT8uZ2V0VmFsdWUoKSA/PyBcIlwiLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIixcblx0XHRcdGRlc2NyaXB0aW9uOiBvT2JqZWN0UGFnZURlc2NyaXB0aW9uPy5nZXRWYWx1ZSgpID8/IFwiXCJcblx0XHR9KTtcblx0XHQvL2lmIG5vIGNvbnRleHQgb3Igbm90aGluZyB0byByZXNvbHZlLCBkaXJlY3QgcmV0dXJuXG5cdFx0aWYgKCFvT2JqZWN0UGFnZUNvbnRleHQgfHwgcGF0aHNUb1Jlc29sdmUubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJ1aWxkKCkpO1xuXHRcdH1cblx0XHRhd2FpdCBQcm9taXNlLmFsbChwYXRoc1RvUmVzb2x2ZS5tYXAoYXN5bmMgKHApID0+IChvT2JqZWN0UGFnZUNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpLnJlcXVlc3RPYmplY3QocCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKSkpO1xuXHRcdHJldHVybiBidWlsZCgpO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IChvRXhlY3V0aW9uLmdldFNvdXJjZSgpIGFzIHVua25vd24gYXMgQ29tbWFuZEV4ZWN1dGlvbikuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpISkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRjb25zdCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpXG5cdFx0XHQ/LmVuYWJsZWQ7XG5cdFx0TWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRcdFx0Y29uc3QgaXNFcnJvck1lc3NhZ2UgPSBvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLmdldFR5cGUoKSA9PT0gXCJFcnJvclwiO1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlVmFsaWRhdGlvbiA9IGlzSGlkZGVuRHJhZnRFbmFibGVkXG5cdFx0XHRcdFx0PyBpc0Vycm9yTWVzc2FnZVxuXHRcdFx0XHRcdDogaXNFcnJvck1lc3NhZ2UgJiYgb01lc3NhZ2UuZ2V0VGFyZ2V0cygpLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LmluY2x1ZGVzKHNWaWV3SWQpKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2VWYWxpZGF0aW9uKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogc3RyaW5nLCBvUmV0PzogdW5rbm93bik6IHVua25vd24ge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh0aGlzLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIikgYXMgTGlzdEJpbmRpbmc7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGVmYXVsdCBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBvYmplY3QuXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIHZhbHVlIG9mIHRoZSBkYXRhIHBvaW50IHByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFRoZSBzZW1hbnRpYyBvYmplY3Rcblx0ICogQHJldHVybnMgVGhlIGFycmF5IG9mIHRoZSBkZWZhdWx0IHNlbWFudGljIG9iamVjdCBtYXBwaW5nIG9iamVjdFxuXHQgKi9cblx0X2dldEltcGxpY2l0U2VtYW50aWNPYmplY3RNYXBwaW5nRm9yRGF0YVBvaW50cyhcblx0XHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nXG5cdCk6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IHByb3BlcnR5UGF0aFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzZW1hbnRpY09iamVjdFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiAtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiAtIGlmIG5vIGRhdGEgaXMgZm91bmQgb24gdGhpcyBjb250ZXh0LCBvbmx5IHRoZSBwcmVwYXJlQWN0aW9uIGlzIHJlcXVlc3RlZFxuXHQgKiAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpIGFzIENvbnRyb2w7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRyb2wgfHwgIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGxldCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlO1xuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRieVBhc3NTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIuaG9sZE1lc3NhZ2VzRm9yQ29udHJvbChjb250cm9sKTtcblx0XHRjb25zdCByZXQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQsIGJ5UGFzc1NpZGVFZmZlY3RzKTtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7IGNvbnRyb2wgfSk7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0XG5cdCAqIE9uZSBvZiB0aGUgZm9sbG93aW5nIGFjdGlvbnMgaXMgdHJpZ2dlcmVkIG9uIHRoZSBkcmFmdCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudDpcblx0ICogLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdC8vIHRoZSBkcmFmdCB2YWxpZGF0aW9uIGlzIHRyZWF0ZWQgYXMgYSB1c2VyIGludGVyYWN0aW9uLCBhbmQgdGhlIHNlcnZpY2UgbXVzdCByZXR1cm4gdHJhbnNpdGlvbiBtZXNzYWdlcyBhZ2FpbiBpZiBzdGlsbCB2YWxpZFxuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0Z2xvYmFsU2lkZUVmZmVjdHMubWFwKGFzeW5jIChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFxuXHRcdFx0UHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCxcblx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0KSkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogSWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBJbmRpY2F0ZXMgaWYgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcgc2hvdWxkIGJlIHNraXBwZWRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkIHwgT0RhdGFMaXN0QmluZGluZz5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29sbGFib3JhdGlvbkVuYWJsZWQoKSkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBjb2xsYWJvcmF0aW9uIGRpc2NhcmQ6ICR7ZXJyfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZXMoKS5mb3JFYWNoKCh0YWJsZTogVGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3QgY3JlYXRpb25Sb3cgPSB0YWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpO1xuXHRcdFx0XHRjb25zdCBjb250ZXh0S2V5cyA9IE9iamVjdC5rZXlzKChjcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCk/LmdldE9iamVjdCgpIHx8IHt9KTtcblx0XHRcdFx0aWYgKGNvbnRleHRLZXlzLmZpbHRlcigoa2V5KSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJAJHVpNS5cIikpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRcdGF3YWl0Q3JlYXRlRG9jdW1lbnRzLnB1c2goXG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93XG5cdFx0XHRcdFx0XHRcdC5jcmVhdGVEb2N1bWVudCh0YWJsZUJpbmRpbmcsIHtcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlLmRhdGEoXCJjcmVhdGlvbk1vZGVcIiksXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Sb3c6IGNyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUF0RW5kOiB0YWJsZS5kYXRhKFwiY3JlYXRlQXRFbmRcIikgPT09IFwidHJ1ZVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNraXBTaWRlRWZmZWN0czogdHJ1ZSAvLyB0aGUgc2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5LCB3ZSBkb24ndCBleGVjdXRlIHRoZSBoYW5kbGVTaWRlRWZmZWN0cyBmdW5jaXRvbiB0byBhdm9pZCBiYXRjaCByZWR1bmRhbmN5XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHRhYmxlQmluZGluZylcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGlzU2tpcEJpbmRpbmdUb1ZpZXcgPSBza2lwQmluZGluZ1RvVmlldyBhcyB1bmtub3duIGFzIENvbW1hbmRFeGVjdXRpb24kRXhlY3V0ZUV2ZW50O1xuXHRcdFx0Y29uc3QgaXNTdGFuZGFyZFNhdmUgPVxuXHRcdFx0XHRpc1NraXBCaW5kaW5nVG9WaWV3ICYmIHR5cGVvZiBpc1NraXBCaW5kaW5nVG9WaWV3ID09IFwib2JqZWN0XCIgJiYgaXNTa2lwQmluZGluZ1RvVmlldy5nZXRTb3VyY2UoKS5nZXRDb21tYW5kKCkgPT09IFwiU2F2ZVwiO1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdCxcblx0XHRcdFx0XHRza2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0XHRpc1N0YW5kYXJkU2F2ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbikgYXMgQnV0dG9uIHwgdW5kZWZpbmVkOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IFVJNUVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpPy5nZXRJZCgpO1xuXHRcdGxldCBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgPSBmYWxzZTtcblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIGZhbHNlKS5nZXRVc2VyQWN0aW9uKCk7XG5cdFx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImtlZXBEcmFmdFwiKSB7XG5cdFx0XHRcdFx0dGhpcy5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImRpc2NhcmRDb25maXJtZWRcIikge1xuXHRcdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZ2V0IGNvbGxhYm9yYXRpdmUgdXNlcnNcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGlzRG9jdW1lbnRNb2RpZmllZCA9XG5cdFx0XHQhIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoVWlNb2RlbENvbnN0YW50cy5Eb2N1bWVudE1vZGlmaWVkKSB8fFxuXHRcdFx0KCF0aGlzLmdldFN0aWNreUVkaXRNb2RlKCkgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpO1xuXHRcdGNvbnN0IGFmdGVyQ2FuY2VsOiBGdW5jdGlvbiA9IChwcm9taXNlUmVzdWx0OiBPRGF0YVY0Q29udGV4dCkgPT4ge1xuXHRcdFx0Ly8gZm9jdXMgaXMgcmV0YWluZWQgb24gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50XG5cdFx0XHRpZiAobGFzdEZvY3VzZWRDb250cm9sSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcm9taXNlUmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgJiZcblx0XHRcdGlzRG9jdW1lbnRNb2RpZmllZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRhZnRlckNhbmNlbCxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb24sXG5cdFx0XHRcdHRydWVcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYWZ0ZXJDYW5jZWwocHJvbWlzZVJlc3VsdCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCk6IHZvaWQge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IENvbnRyb2xbXSwgYVN1YnNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uLCBhQ29udHJvbHM6IENvbnRyb2xbXSwgYklzQ2hhcnQ/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpdGVtMSBvZiBhUGFyZW50RWxlbWVudCkge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gKGl0ZW0xIGFzIE1hY3JvQVBJKS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoaXRlbTEgYXMgTWFjcm9BUEkpLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEJsb2NrPihcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0E8RHluYW1pY1NpZGVDb250ZW50PihcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1N1YkVsZW1lbnQgJiYgb1N1YkVsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvU3ViRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQTxUYWJsZUFQST4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YkVsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gPyBvRWxlbWVudC5nZXRDb250ZW50KCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKG9TdWJFbGVtZW50ICYmIG9TdWJFbGVtZW50LmlzQSAmJiBvU3ViRWxlbWVudC5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob1N1YkVsZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uKSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCk6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSB7XG5cdFx0bGV0IGFCbG9ja3M6IEVuaGFuY2VXaXRoVUk1PFN1YlNlY3Rpb25CbG9jaz5bXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPltdKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCk6IFRhYmxlW10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogVGFibGVbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCk6IENoYXJ0W10ge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogQ2hhcnRbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCk6IHZvaWQge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogRW5oYW5jZVdpdGhVSTU8U3ViU2VjdGlvbkJsb2NrPik6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQTxEeW5hbWljU2lkZUNvbnRlbnQ+KFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IENvbnRleHQsIHNDaGFydFBhdGg6IHN0cmluZyk6IHVua25vd25bXSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhVGFibGVzKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhpdGVtLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhcblx0XHRvUGFnZUNvbnRleHQ6IENvbnRleHQsXG5cdFx0YUxpbmVDb250ZXh0OiBPRGF0YVY0Q29udGV4dFtdLFxuXHRcdHNDaGFydFBhdGg6IHN0cmluZ1xuXHQpOiB7IHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7IGF0dHJpYnV0ZXM6IHVua25vd25bXSB9IHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKTogc3RyaW5nW10ge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV0gYXMgTWljcm9DaGFydE1hbmlmZXN0Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gaW5pdGlhbGl6ZSBwYWdpbmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIG9iamVjdCBwYWdlXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsIEludGVybmFsIG1vZGVsXG5cdCAqIEBwYXJhbSBsaXN0QmluZGluZyBQYXJlbnQgbGlzdCBiaW5kaW5nIHRvIHVzZVxuXHQgKi9cblx0X2luaXRpYWxpemVQYWdpbmF0aW9uKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IG9iamVjdCkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogeyBzdXBwb3J0ZWQ/OiBib29sZWFuIH1bXSk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3MoXG5cdFx0XHRvU3ViRGF0YVBvaW50czogUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHRcdFx0XHR9XG5cdFx0XHQ+LFxuXHRcdFx0b1BhZ2VEYXRhOiBvYmplY3Rcblx0XHQpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IG9iamVjdCA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXSFbXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdITtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmICghc0tleS5zdGFydHNXaXRoKFwiX1wiKSAmJiAhc0tleS5pbmNsdWRlcyhcIm9kYXRhLmNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZmluZFN1bW1hcml6ZUJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9iamVjdFBhZ2VUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBvYmplY3RQYWdlVGl0bGU/LmdldEFjdGlvbnMoKTtcblx0XHRsZXQgc3VtbWFyaXplQnV0dG9uOiBCdXR0b24gfCB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG5cdFx0XHRpZiAoYWN0aW9uLmlzQTxTdW1tYXJpemF0aW9uQnV0dG9uPihcInNhcC5mZS5tYWNyb3MuYWkuU3VtbWFyaXphdGlvbkJ1dHRvblwiKSkge1xuXHRcdFx0XHRjb25zdCBidXR0b24gPSBhY3Rpb24uZ2V0Q29udGVudCgpIGFzIEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGJ1dHRvbiAmJiBidXR0b24uZ2V0SWQoKS5lbmRzV2l0aChcIjo6U3VtbWFyaXplOjpidXR0b25cIikpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24gPSBidXR0b247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc3VtbWFyaXplQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlcyBzdGFydHVwIHBhcmFtZXRlcnMgYW5kIHRyaWdnZXJzIHRoZSBzbWFydCBzdW1tYXJ5IGFjdGlvbiBvbiB0aGUgT2JqZWN0IFBhZ2UgaWYgcmVxdWlyZWQuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgaW5kaWNhdGUgdGhhdCBhIHNtYXJ0IHN1bW1hcnkgc2hvdWxkIGJlIHBlcmZvcm1lZCBmb3IgdGhlIGN1cnJlbnQgT2JqZWN0IFBhZ2UgbGV2ZWwuXG5cdCAqIFRoZSBsZXZlbCBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB3aGljaCBPYmplY3QgUGFnZSBzaG91bGQgYmUgc3VtbWFyaXplZCwgd2hpY2ggaXMgcmVsZXZhbnQgaW4gRmxleGlibGUgQ29sdW1uIExheW91dCAoRkNMKSBzY2VuYXJpb3Mgd2hlcmVcblx0ICogbXVsdGlwbGUgT2JqZWN0IFBhZ2VzIG1heSBiZSBkaXNwbGF5ZWQgc2ltdWx0YW5lb3VzbHkuXG5cdCAqIElmIG5vIGxldmVsIGlzIHByb3ZpZGVkIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHRoZSBtZXRob2QgZGVmYXVsdHMgdGhlIGxldmVsIHRvIDEuXG5cdCAqIElmIHRoZSBzdW1tYXJ5IGFjdGlvbiBpcyBhbGxvd2VkIGFuZCB0aGUgU21hcnRTdW1tYXJpemUgY2FwYWJpbGl0eSBpcyBhdmFpbGFibGUsIGl0IGxvY2F0ZXMgdGhlIHN1bW1hcml6ZSBidXR0b24gYW5kIHRyaWdnZXJzIGl0cyBwcmVzcyBldmVudC5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoZSBzdW1tYXJ5IGlzIG9ubHkgZXhlY3V0ZWQgb25jZSBwZXIgbmF2aWdhdGlvbiBhbmQgbG9ncyBlcnJvcnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldCBvciB0aGUgYnV0dG9uIGlzIHVuYXZhaWxhYmxlLlxuXHQgKiBBbGwgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0IGFuZCBsb2dnZWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaGFuZGxlU21hcnRTdW1tYXJ5U3RhcnR1cEFjdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGFwcENvbXBvbmVudFxuXHRcdFx0Py5nZXRTdGFydHVwUGFyYW1ldGVycygpXG5cdFx0XHQ/LnRoZW4oKHN0YXJ0dXBQYXJhbXM6IFN0YXJ0dXBQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb24gfHwgIXN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnN0YXJ0c1dpdGgoXCJzdW1tYXJ5XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBjb3JyZWN0IE9QIGJ5IGNoZWNraW5nIHRoZSBsZXZlbCBwcm92aWRlZCBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkudmlld0xldmVsO1xuXHRcdFx0XHRjb25zdCBwcmVmZXJyZWRBY3Rpb25MZXZlbCA9XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtcy5wcmVmZXJyZWRBY3Rpb25bMF0gPT09IFwic3VtbWFyeVwiID8gMSA6IHBhcnNlSW50KHN0YXJ0dXBQYXJhbXMucHJlZmVycmVkQWN0aW9uWzBdLnNwbGl0KFwiLVwiKVsxXSwgMTApO1xuXHRcdFx0XHRpZiAoaXNOYU4ocHJlZmVycmVkQWN0aW9uTGV2ZWwpIHx8IHZpZXdMZXZlbCAhPT0gcHJlZmVycmVkQWN0aW9uTGV2ZWwpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBzdW1tYXJ5IGFjdGlvbiBzaGFsbCBiZSBleGVjdXRlZCBub3cgKGl0IG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGV4ZWN1dGVkIGJ5IGEgaGlnaGVyIGxldmVsIE9QKVxuXHRcdFx0XHRpZiAoYXBwQ29tcG9uZW50LmdldFByZWZlcnJlZEFjdGlvblN0YXR1cygpID09PSBQcmVmZXJyZWRBY3Rpb25TdGF0dXMuQ2FuUGVyZm9ybSkge1xuXHRcdFx0XHRcdGFwcENvbXBvbmVudC5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoUHJlZmVycmVkQWN0aW9uU3RhdHVzLkFscmVhZHlQZXJmb3JtZWQpOyAvLyB0byBwcmV2ZW50IG90aGVyIE9QcyBvbiBoaWdoZXIgbGV2ZWxzIHRvIGV4ZWN1dGUgdGhlIHN1bW1hcnkgYWdhaW5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiBTbWFydFN1bW1hcml6ZSBjYXBhYmlsaXR5IGlzIGF2YWlsYWJsZVxuXHRcdFx0XHRjb25zdCBlbnZpcm9ubWVudFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTtcblx0XHRcdFx0aWYgKCFlbnZpcm9ubWVudFNlcnZpY2U/LmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNtYXJ0U3VtbWFyaXplKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIFNtYXJ0U3VtbWFyaXplIGNhcGFiaWxpdHkgaXMgbm90IGF2YWlsYWJsZVwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBTdW1tYXJ5IGJ1dHRvblxuXHRcdFx0XHRjb25zdCBzdW1tYXJpemVCdXR0b24gPSB0aGlzLl9maW5kU3VtbWFyaXplQnV0dG9uKCk7XG5cblx0XHRcdFx0aWYgKHN1bW1hcml6ZUJ1dHRvbiAmJiBzdW1tYXJpemVCdXR0b24uZ2V0VmlzaWJsZSgpICYmIHN1bW1hcml6ZUJ1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0XHRzdW1tYXJpemVCdXR0b24uZmlyZVByZXNzKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcblx0XHRcdFx0XHRcdFwiU21hcnQgU3VtbWFyaXphdGlvbiB3YXMgbm90IHRyaWdnZXJlZCBiZWNhdXNlIHRoZSBTdW1tYXJpemUgYnV0dG9uIGlzIGVpdGhlciBub3QgdmlzaWJsZSBvciBub3QgZW5hYmxlZCBvciBub3QgZm91bmQuXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyBzdGFydHVwIHBhcmFtZXRlcnMgb3IgdHJpZ2dlcmluZyBzbWFydCBzdW1tYXJ5OlwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB7XG5cdFx0XHRcdHBhcmFtZXRlclZhbHVlcz86IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9W107XG5cdFx0XHRcdHNraXBQYXJhbWV0ZXJEaWFsb2c/OiBib29sZWFuO1xuXHRcdFx0XHRjb250ZXh0cz86IE9EYXRhVjRDb250ZXh0IHwgT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bW9kZWw/OiBPRGF0YU1vZGVsO1xuXHRcdFx0XHRyZXF1aXJlc05hdmlnYXRpb24/OiBib29sZWFuO1xuXHRcdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdFx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRcdFx0XHRlbnRpdHlTZXROYW1lPzogc3RyaW5nO1xuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc/OiBzdHJpbmc7XG5cdFx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZU1hcD86IHN0cmluZztcblx0XHRcdFx0Y29udHJvbElkPzogc3RyaW5nO1xuXHRcdFx0XHRiU3RhdGljQWN0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0YXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdFx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0XHRcdH0sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCk6IHZvaWQge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldykpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCgpO1xuXHRcdFx0fSBlbHNlIGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQ8e30sIFRhYmxlQVBJPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0YXN5bmMgb25DYWxsQWN0aW9uKFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdHNBY3Rpb25OYW1lOiBzdHJpbmcsXG5cdFx0XHRtUGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYXJhbWV0ZXJWYWx1ZXM/OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfVtdO1xuXHRcdFx0XHRza2lwUGFyYW1ldGVyRGlhbG9nPzogYm9vbGVhbjtcblx0XHRcdFx0Y29udGV4dHM/OiBPRGF0YVY0Q29udGV4dCB8IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG1vZGVsPzogT0RhdGFNb2RlbDtcblx0XHRcdFx0cmVxdWlyZXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcblx0XHRcdFx0bGFiZWw/OiBzdHJpbmc7XG5cdFx0XHRcdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0XHRcdFx0ZW50aXR5U2V0TmFtZT86IHN0cmluZztcblx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0XHRvcGVyYXRpb25BdmFpbGFibGVNYXA/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbnRyb2xJZD86IHN0cmluZztcblx0XHRcdFx0YlN0YXRpY0FjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdG5vdEFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdFx0XHRcdGRpc2FibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW47XG5cdFx0XHR9XG5cdFx0KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcjtcblxuXHRcdFx0Ly8gV2FpdCBmb3IgVkggdmFsdWVzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhY3Rpb25cblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9Tb3VyY2U6IENvbnRyb2wsXG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZDogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5Pixcblx0XHRcdHNDb250cm9sQ29uZmlnOiBzdHJpbmcsXG5cdFx0XHRzQ29sbGVjdGlvblBhdGg6IHN0cmluZ1xuXHRcdCk6IHZvaWQge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkhLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogdW5rbm93bikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gQ2hlY2sgaWYgaW1wbGljaXQgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmcgaXMgbmVlZGVkXG5cdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IG9Tb3VyY2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoKGRhdGEpID0+IGRhdGEuZ2V0S2V5KCkgPT09IFwiVmFsdWVQcm9wZXJ0eVBhdGhcIik7XG5cdFx0XHRcdGlmIChjdXN0b21EYXRhKSB7XG5cdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9Db250cm9sbGVyLl9nZXRJbXBsaWNpdFNlbWFudGljT2JqZWN0TWFwcGluZ0ZvckRhdGFQb2ludHMoXG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLmdldFZhbHVlKCksXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRhc3luYyBvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQoXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRcdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRcdHNDcmVhdGVQYXRoOiBzdHJpbmdcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IFVJNUV2ZW50PHsgc3ViU2VjdGlvbjogT2JqZWN0UGFnZVN1YlNlY3Rpb24gfT4pOiB2b2lkIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodGhpcy5nZXRWaWV3KCkpICYmXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IHN0cmluZyB8IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNvbGxhYm9yYXRpb25TdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHR0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL3Nob3dDb2xsYWJvcmF0aW9uU3RyaXBcIiwgZmFsc2UpO1xuXHRcdH0sXG5cblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbFxuXHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0XHQvLyBSZW1vdmUgY29udGV4dCBib3VuZCBtZXNzYWdlcyBhbmQgc2V0IHRoZSBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgdGhlIGJhY2tlbmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBpbiBlZGl0IG1vZGUuXG5cdFx0XHRpZiAoIWJJc0luRWRpdE1vZGUgJiYgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0Qm91bmRNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXREYXRhKClcblx0XHRcdFx0XHQuZmlsdGVyKFxuXHRcdFx0XHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgJiYgbWVzc2FnZS5nZXRQZXJzaXN0ZW50KCkgPT09IHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoY29udGV4dEJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKGNvbnRleHRCb3VuZE1lc3NhZ2VzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5R0EsTUFBTUEsZ0JBQWdCLEdBQUdDLFNBQVMsQ0FBQ0QsZ0JBQWdCO0VBQ25ELE1BQU1FLHFCQUFxQixHQUFHRCxTQUFTLENBQUNFLHlCQUF5Qjs7RUFFakU7QUFDQTtBQUNBO0VBRkEsSUFJTUMsb0JBQW9CLElBQUFDLElBQUEsR0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFBQyxLQUFBLEdBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxFQUFBQyxLQUFBLEdBRzNCRixjQUFjLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzlDTixjQUFjLENBQUNPLGVBQWUsQ0FBQ0gsUUFBUSxDQUFDSSx1QkFBdUIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakVULGNBQWMsQ0FBQ1UsU0FBUyxDQUFDTixRQUFRLENBQUNPLGlCQUFpQixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdyRFosY0FBYyxDQUFDYSxjQUFjLENBQUNULFFBQVEsQ0FBQ1Usc0JBQXNCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRy9EZixjQUFjLENBQUNnQixxQkFBcUIsQ0FBQ1osUUFBUSxDQUFDYSw2QkFBNkIsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHN0VsQixjQUFjLENBQUNtQixvQkFBb0IsQ0FBQ2YsUUFBUSxDQUFDZ0IsNEJBQTRCLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBRzNFckIsY0FBYyxDQUNkc0IsNkJBQTZCLENBQUNsQixRQUFRLENBQUM7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
|