@schneideress/dashboardframework 0.0.188 → 0.0.190
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/bundles/schneideress-dashboardframework.umd.js +264 -119
- package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
- package/bundles/schneideress-dashboardframework.umd.min.js +11 -11
- package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
- package/esm2015/gridster/index.js +1 -1
- package/esm2015/gridster/lib/gridster.component.js +1 -1
- package/esm2015/gridster/lib/gridster.interface.js +1 -1
- package/esm2015/gridster/lib/gridster.module.js +1 -1
- package/esm2015/gridster/lib/gridsterCompact.service.js +1 -1
- package/esm2015/gridster/lib/gridsterConfig.constant.js +1 -1
- package/esm2015/gridster/lib/gridsterConfig.interface.js +1 -1
- package/esm2015/gridster/lib/gridsterConfigS.interface.js +1 -1
- package/esm2015/gridster/lib/gridsterDraggable.service.js +1 -1
- package/esm2015/gridster/lib/gridsterEmptyCell.service.js +1 -1
- package/esm2015/gridster/lib/gridsterItem.component.js +1 -1
- package/esm2015/gridster/lib/gridsterItem.interface.js +1 -1
- package/esm2015/gridster/lib/gridsterItemComponent.interface.js +1 -1
- package/esm2015/gridster/lib/gridsterPreview.component.js +1 -1
- package/esm2015/gridster/lib/gridsterPush.service.js +1 -1
- package/esm2015/gridster/lib/gridsterPushResize.service.js +1 -1
- package/esm2015/gridster/lib/gridsterRenderer.service.js +1 -1
- package/esm2015/gridster/lib/gridsterResizable.service.js +1 -1
- package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +1 -1
- package/esm2015/gridster/lib/gridsterScroll.service.js +1 -1
- package/esm2015/gridster/lib/gridsterSwap.service.js +1 -1
- package/esm2015/gridster/lib/gridsterUtils.service.js +1 -1
- package/esm2015/lib/custom.notifier.options.js +1 -1
- package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +1 -1
- package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +197 -47
- package/esm2015/lib/ra.base.dashboard.filter.js +1 -1
- package/esm2015/lib/ra.base.dashboard.template.js +1 -1
- package/esm2015/lib/ra.dashbard.event.bus.js +1 -1
- package/esm2015/lib/ra.dashboard.module.js +1 -1
- package/esm2015/lib/ra.dashboard.responsive.service.js +1 -1
- package/esm2015/lib/ra.dashboard.service.js +1 -1
- package/esm2015/lib/ra.event.enum.js +1 -1
- package/esm2015/lib/ra.gridster.config.js +1 -1
- package/esm2015/public-api.js +1 -1
- package/esm2015/schneideress-dashboardframework.js +1 -1
- package/esm5/gridster/index.js +1 -1
- package/esm5/gridster/lib/gridster.component.js +1 -1
- package/esm5/gridster/lib/gridster.interface.js +1 -1
- package/esm5/gridster/lib/gridster.module.js +1 -1
- package/esm5/gridster/lib/gridsterCompact.service.js +1 -1
- package/esm5/gridster/lib/gridsterConfig.constant.js +1 -1
- package/esm5/gridster/lib/gridsterConfig.interface.js +1 -1
- package/esm5/gridster/lib/gridsterConfigS.interface.js +1 -1
- package/esm5/gridster/lib/gridsterDraggable.service.js +1 -1
- package/esm5/gridster/lib/gridsterEmptyCell.service.js +1 -1
- package/esm5/gridster/lib/gridsterItem.component.js +1 -1
- package/esm5/gridster/lib/gridsterItem.interface.js +1 -1
- package/esm5/gridster/lib/gridsterItemComponent.interface.js +1 -1
- package/esm5/gridster/lib/gridsterPreview.component.js +1 -1
- package/esm5/gridster/lib/gridsterPush.service.js +1 -1
- package/esm5/gridster/lib/gridsterPushResize.service.js +1 -1
- package/esm5/gridster/lib/gridsterRenderer.service.js +1 -1
- package/esm5/gridster/lib/gridsterResizable.service.js +1 -1
- package/esm5/gridster/lib/gridsterResizeEventType.interface.js +1 -1
- package/esm5/gridster/lib/gridsterScroll.service.js +1 -1
- package/esm5/gridster/lib/gridsterSwap.service.js +1 -1
- package/esm5/gridster/lib/gridsterUtils.service.js +1 -1
- package/esm5/lib/custom.notifier.options.js +1 -1
- package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +1 -1
- package/esm5/lib/ra-widget-container/ra.widget.container.component.js +226 -76
- package/esm5/lib/ra.base.dashboard.filter.js +1 -1
- package/esm5/lib/ra.base.dashboard.template.js +1 -1
- package/esm5/lib/ra.dashbard.event.bus.js +1 -1
- package/esm5/lib/ra.dashboard.module.js +1 -1
- package/esm5/lib/ra.dashboard.responsive.service.js +1 -1
- package/esm5/lib/ra.dashboard.service.js +1 -1
- package/esm5/lib/ra.event.enum.js +1 -1
- package/esm5/lib/ra.gridster.config.js +1 -1
- package/esm5/public-api.js +1 -1
- package/esm5/schneideress-dashboardframework.js +1 -1
- package/fesm2015/schneideress-dashboardframework.js +226 -76
- package/fesm2015/schneideress-dashboardframework.js.map +1 -1
- package/fesm5/schneideress-dashboardframework.js +255 -105
- package/fesm5/schneideress-dashboardframework.js.map +1 -1
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +8 -7
- package/package.json +1 -1
- package/schneideress-dashboardframework.metadata.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview added by tsickle
|
|
3
3
|
* Generated from: lib/ra-widget-container/ra.widget.container.component.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,
|
|
4
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
5
|
*/
|
|
6
6
|
import * as tslib_1 from "tslib";
|
|
7
7
|
import { Component, Input, ViewChild, ElementRef, EventEmitter, Output, NgZone, Renderer2 } from '@angular/core';
|
|
@@ -24,14 +24,11 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
24
24
|
this.raPermissionService = raPermissionService;
|
|
25
25
|
this.showPanel = true;
|
|
26
26
|
this.isWidgetLoaded = false;
|
|
27
|
-
this.isIEOrEdge = /msie\s|trident\/|edge\//i.test(window.navigator.userAgent);
|
|
28
27
|
this.lockClass = "unlocked";
|
|
29
28
|
this.lockStatus = RaWidgetlockStatus.Unlocked;
|
|
30
29
|
this.isDownloadIconVisible = false;
|
|
31
30
|
this.isChartDownloadVisible = false;
|
|
32
31
|
this.isGridDownloadVisible = false;
|
|
33
|
-
this.dropDownShown = false;
|
|
34
|
-
this.isDownloadChartVisible = false;
|
|
35
32
|
this.enableTitleLine = false;
|
|
36
33
|
this.isGlobalFilterApplied = false;
|
|
37
34
|
this.toolTipValue = ' ';
|
|
@@ -52,6 +49,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
52
49
|
this.excelToolTipWidth = '0px';
|
|
53
50
|
this.deleteToolTipWidth = '0px';
|
|
54
51
|
this.noPadding = false;
|
|
52
|
+
this.isMouseHover = false;
|
|
55
53
|
this.widgetDeleted = new EventEmitter();
|
|
56
54
|
this.isWidgetStateApplicable = false;
|
|
57
55
|
this.widgetEmptyState = '';
|
|
@@ -62,11 +60,13 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
62
60
|
* @return {?}
|
|
63
61
|
*/
|
|
64
62
|
function (e) {
|
|
65
|
-
if (e.target
|
|
66
|
-
|
|
63
|
+
if (e.target.className) {
|
|
64
|
+
if (e.target.className != 'fal fa-ellipsis-v widget-menu-ellipse') {
|
|
65
|
+
_this.removeMenu();
|
|
66
|
+
}
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
_this.
|
|
68
|
+
else {
|
|
69
|
+
_this.removeMenu();
|
|
70
70
|
}
|
|
71
71
|
}));
|
|
72
72
|
}
|
|
@@ -156,6 +156,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
156
156
|
*/
|
|
157
157
|
function (isHover) {
|
|
158
158
|
if (isHover === void 0) { isHover = true; }
|
|
159
|
+
this.isMouseHover = isHover;
|
|
159
160
|
if (this.widgetElement) {
|
|
160
161
|
if (typeof this.widgetElement.hoverStatus === "function") {
|
|
161
162
|
this.widgetElement.hoverStatus(isHover);
|
|
@@ -164,9 +165,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
164
165
|
console.warn('widget framework outdated, please update to version 0.0.96');
|
|
165
166
|
}
|
|
166
167
|
}
|
|
167
|
-
if (!isHover) {
|
|
168
|
-
this.hideDropDown();
|
|
169
|
-
}
|
|
170
168
|
};
|
|
171
169
|
/**
|
|
172
170
|
* @return {?}
|
|
@@ -182,6 +180,39 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
182
180
|
function () {
|
|
183
181
|
_this.loadWidget(_this.data.widgetInfo);
|
|
184
182
|
}));
|
|
183
|
+
document.addEventListener("scroll", (/**
|
|
184
|
+
* @return {?}
|
|
185
|
+
*/
|
|
186
|
+
function () {
|
|
187
|
+
_this.removeMenu();
|
|
188
|
+
}));
|
|
189
|
+
setTimeout((/**
|
|
190
|
+
* @return {?}
|
|
191
|
+
*/
|
|
192
|
+
function () {
|
|
193
|
+
/** @type {?} */
|
|
194
|
+
var item = jQuery(_this.wcWrapper.nativeElement).closest('gridster-item');
|
|
195
|
+
item.bind('mouseenter', (/**
|
|
196
|
+
* @return {?}
|
|
197
|
+
*/
|
|
198
|
+
function () {
|
|
199
|
+
window.gridsterItemEnter = true;
|
|
200
|
+
}));
|
|
201
|
+
item.bind('mouseleave', (/**
|
|
202
|
+
* @return {?}
|
|
203
|
+
*/
|
|
204
|
+
function () {
|
|
205
|
+
window.gridsterItemEnter = false;
|
|
206
|
+
setTimeout((/**
|
|
207
|
+
* @return {?}
|
|
208
|
+
*/
|
|
209
|
+
function () {
|
|
210
|
+
if (!window.mouseOverWidgetMenu) {
|
|
211
|
+
_this.removeMenu();
|
|
212
|
+
}
|
|
213
|
+
}));
|
|
214
|
+
}));
|
|
215
|
+
}));
|
|
185
216
|
};
|
|
186
217
|
/**
|
|
187
218
|
* @return {?}
|
|
@@ -587,8 +618,6 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
587
618
|
widgetInfo: widgetInfo,
|
|
588
619
|
configChanges: this.getConfigChanges(configChanged)
|
|
589
620
|
}));
|
|
590
|
-
console.log('wiget container filter data is');
|
|
591
|
-
console.log(widgetConfigFilter);
|
|
592
621
|
if (!widgetContainerContext.isWidgetLoaded) return [3 /*break*/, 3];
|
|
593
622
|
if (this.widgetElement && typeof (this.widgetElement.setConfigFilter) == 'function') {
|
|
594
623
|
widgetContainerContext.widgetElement.setConfigFilter(widgetConfigFilter);
|
|
@@ -699,48 +728,11 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
699
728
|
});
|
|
700
729
|
});
|
|
701
730
|
};
|
|
702
|
-
// public downloadClicked() {
|
|
703
|
-
// switch (this.downloadIconType) {
|
|
704
|
-
// case RADownloadType.Grid:
|
|
705
|
-
// this.downloadIconClicked('CSV');
|
|
706
|
-
// break;
|
|
707
|
-
// case RADownloadType.Chart:
|
|
708
|
-
// this.isDownloadChartVisible = true;
|
|
709
|
-
// break;
|
|
710
|
-
// case RADownloadType.Custom:
|
|
711
|
-
// break;
|
|
712
|
-
// }
|
|
713
|
-
// }
|
|
714
|
-
// public downloadClicked() {
|
|
715
|
-
// switch (this.downloadIconType) {
|
|
716
|
-
// case RADownloadType.Grid:
|
|
717
|
-
// this.downloadIconClicked('CSV');
|
|
718
|
-
// break;
|
|
719
|
-
// case RADownloadType.Chart:
|
|
720
|
-
// this.isDownloadChartVisible = true;
|
|
721
|
-
// break;
|
|
722
|
-
// case RADownloadType.Custom:
|
|
723
|
-
// break;
|
|
724
|
-
// }
|
|
725
|
-
// }
|
|
726
731
|
/**
|
|
727
732
|
* @param {?} type
|
|
728
733
|
* @return {?}
|
|
729
734
|
*/
|
|
730
|
-
RAWidgetContainer.prototype.downloadIconClicked =
|
|
731
|
-
// public downloadClicked() {
|
|
732
|
-
// switch (this.downloadIconType) {
|
|
733
|
-
// case RADownloadType.Grid:
|
|
734
|
-
// this.downloadIconClicked('CSV');
|
|
735
|
-
// break;
|
|
736
|
-
// case RADownloadType.Chart:
|
|
737
|
-
// this.isDownloadChartVisible = true;
|
|
738
|
-
// break;
|
|
739
|
-
// case RADownloadType.Custom:
|
|
740
|
-
// break;
|
|
741
|
-
// }
|
|
742
|
-
// }
|
|
743
|
-
/**
|
|
735
|
+
RAWidgetContainer.prototype.downloadIconClicked = /**
|
|
744
736
|
* @param {?} type
|
|
745
737
|
* @return {?}
|
|
746
738
|
*/
|
|
@@ -763,33 +755,199 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
763
755
|
break;
|
|
764
756
|
}
|
|
765
757
|
};
|
|
758
|
+
/**
|
|
759
|
+
* @private
|
|
760
|
+
* @return {?}
|
|
761
|
+
*/
|
|
762
|
+
RAWidgetContainer.prototype.removeMenu = /**
|
|
763
|
+
* @private
|
|
764
|
+
* @return {?}
|
|
765
|
+
*/
|
|
766
|
+
function () {
|
|
767
|
+
jQuery('#ra-db-widget-menu').remove();
|
|
768
|
+
};
|
|
766
769
|
/**Show dropdown on gear icon click */
|
|
767
770
|
/**
|
|
768
771
|
* Show dropdown on gear icon click
|
|
772
|
+
* @param {?} e
|
|
769
773
|
* @return {?}
|
|
770
774
|
*/
|
|
771
775
|
RAWidgetContainer.prototype.showDropDown = /**
|
|
772
776
|
* Show dropdown on gear icon click
|
|
777
|
+
* @param {?} e
|
|
773
778
|
* @return {?}
|
|
774
779
|
*/
|
|
775
|
-
function () {
|
|
780
|
+
function (e) {
|
|
781
|
+
var _this = this;
|
|
776
782
|
this.setDownloadIcon();
|
|
777
|
-
this.
|
|
783
|
+
this.removeMenu();
|
|
784
|
+
setTimeout((/**
|
|
785
|
+
* @return {?}
|
|
786
|
+
*/
|
|
787
|
+
function () {
|
|
788
|
+
/** @type {?} */
|
|
789
|
+
var targetPos = e.target.getBoundingClientRect();
|
|
790
|
+
/** @type {?} */
|
|
791
|
+
var style = "position:fixed;top:" + (targetPos.y + 15) + 'px' + ';left:' + (e.pageX - 122) + 'px;z-index:1000;';
|
|
792
|
+
/** @type {?} */
|
|
793
|
+
var html = _this.getContenxtHtml(style);
|
|
794
|
+
jQuery(html).appendTo('body');
|
|
795
|
+
if (_this.isWidgetMgmnt) {
|
|
796
|
+
_this.addEventListener('wcEditWidget', _this.editWidget);
|
|
797
|
+
_this.addEventListener('wcCopyWidget', _this.copyWidget);
|
|
798
|
+
_this.addEventListener('wcMoveWidget', _this.moveWidget);
|
|
799
|
+
_this.addEventListener('wcWidgetDelete', _this.deleteWidget);
|
|
800
|
+
}
|
|
801
|
+
if (_this.detailPageUrl) {
|
|
802
|
+
_this.addEventListener('wcVisitWidget', _this.visitPage);
|
|
803
|
+
}
|
|
804
|
+
if (_this.isChartDownloadVisible) {
|
|
805
|
+
_this.addEventListener('wcDownloadPng', _this.downloadIconClicked, 'PNG');
|
|
806
|
+
_this.addEventListener('wcDownloadJpg', _this.downloadIconClicked, 'JPEG');
|
|
807
|
+
_this.addEventListener('wcDownloadPdf', _this.downloadIconClicked, 'PDF');
|
|
808
|
+
_this.addEventListener('wcDownloadSvg', _this.downloadIconClicked, 'SVG');
|
|
809
|
+
}
|
|
810
|
+
if (_this.isGridDownloadVisible) {
|
|
811
|
+
_this.addEventListener('wcDownloadExcel', _this.downloadIconClicked, 'CSV');
|
|
812
|
+
}
|
|
813
|
+
document.getElementById('ra-db-widget-menu').addEventListener('mouseenter', (/**
|
|
814
|
+
* @return {?}
|
|
815
|
+
*/
|
|
816
|
+
function () {
|
|
817
|
+
window.mouseOverWidgetMenu = true;
|
|
818
|
+
}));
|
|
819
|
+
document.getElementById('ra-db-widget-menu').addEventListener('mouseleave', (/**
|
|
820
|
+
* @return {?}
|
|
821
|
+
*/
|
|
822
|
+
function () {
|
|
823
|
+
window.mouseOverWidgetMenu = false;
|
|
824
|
+
setTimeout((/**
|
|
825
|
+
* @return {?}
|
|
826
|
+
*/
|
|
827
|
+
function () {
|
|
828
|
+
if (!window.gridsterItemEnter) {
|
|
829
|
+
_this.removeMenu();
|
|
830
|
+
}
|
|
831
|
+
}));
|
|
832
|
+
}));
|
|
833
|
+
}));
|
|
778
834
|
};
|
|
779
|
-
/**Hide dropdown on outside click */
|
|
780
835
|
/**
|
|
781
|
-
*
|
|
836
|
+
* @private
|
|
837
|
+
* @param {?} id
|
|
838
|
+
* @param {?} event
|
|
839
|
+
* @param {?=} params
|
|
782
840
|
* @return {?}
|
|
783
841
|
*/
|
|
784
|
-
RAWidgetContainer.prototype.
|
|
785
|
-
*
|
|
842
|
+
RAWidgetContainer.prototype.addEventListener = /**
|
|
843
|
+
* @private
|
|
844
|
+
* @param {?} id
|
|
845
|
+
* @param {?} event
|
|
846
|
+
* @param {?=} params
|
|
786
847
|
* @return {?}
|
|
787
848
|
*/
|
|
788
|
-
function () {
|
|
789
|
-
|
|
790
|
-
|
|
849
|
+
function (id, event, params) {
|
|
850
|
+
var _this = this;
|
|
851
|
+
/** @type {?} */
|
|
852
|
+
var element = document.getElementById(id);
|
|
853
|
+
if (element) {
|
|
854
|
+
element.addEventListener('click', (/**
|
|
855
|
+
* @return {?}
|
|
856
|
+
*/
|
|
857
|
+
function () {
|
|
858
|
+
event.call(_this, params);
|
|
859
|
+
}));
|
|
860
|
+
}
|
|
861
|
+
};
|
|
862
|
+
/**
|
|
863
|
+
* @private
|
|
864
|
+
* @param {?} style
|
|
865
|
+
* @return {?}
|
|
866
|
+
*/
|
|
867
|
+
RAWidgetContainer.prototype.getContenxtHtml = /**
|
|
868
|
+
* @private
|
|
869
|
+
* @param {?} style
|
|
870
|
+
* @return {?}
|
|
871
|
+
*/
|
|
872
|
+
function (style) {
|
|
873
|
+
/** @type {?} */
|
|
874
|
+
var html = '<div id="ra-db-widget-menu"' + 'style="' + style + '" class="download-content dropdown-content widget-config-item dropdown-click" style="z-index: 1002;">';
|
|
875
|
+
html += '<div style="color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;">';
|
|
876
|
+
html += this.translateService.translate('Common.settings') + '</div>';
|
|
877
|
+
if (this.isWidgetMgmnt) {
|
|
878
|
+
html += this.getHtmlForButton('wcEditWidget', 'fal fa-edit', this.editText);
|
|
879
|
+
html += this.getHtmlForButton('wcCopyWidget', 'fal fa-copy', this.copyText);
|
|
880
|
+
html += this.getHtmlForButton('wcMoveWidget', 'fal fa-arrows-alt', this.moveText);
|
|
881
|
+
}
|
|
882
|
+
if (this.detailPageUrl) {
|
|
883
|
+
html += '<a style="max-height: 30px;align-items: center;align-content: center; display: flex;" id="wcVisitWidget">';
|
|
884
|
+
html += '<i style="padding-left: 4px;font-size: 27px !important;" class="fal fa-angle-right"></i> ';
|
|
885
|
+
html += '<span style="padding-left: 11px;margin-top: 2px;" style="padding-left: 6px;">';
|
|
886
|
+
html += this.translateService.translate('Common.visitpage');
|
|
887
|
+
html += '</span></a>';
|
|
888
|
+
}
|
|
889
|
+
html += this.getHr();
|
|
890
|
+
;
|
|
891
|
+
if (this.isDownloadIconVisible) {
|
|
892
|
+
html += '<span style="color: #9FA0A4;font-size: 12px;">';
|
|
893
|
+
html += this.translateService.translate('Common.downloads');
|
|
894
|
+
html += '</span>';
|
|
895
|
+
if (this.isChartDownloadVisible) {
|
|
896
|
+
html += '<div style="padding-top: 10px;" class="chartDownload">';
|
|
897
|
+
html += this.getHtmlForButton('wcDownloadPng', 'fal fa-file-image', this.translateService.translate('Common.png'));
|
|
898
|
+
html += this.getHtmlForButton('wcDownloadJpg', 'fal fa-file-image', this.translateService.translate('Common.jpeg'));
|
|
899
|
+
html += this.getHtmlForButton('wcDownloadPdf', 'fal fa-file-pdf', this.translateService.translate('Common.pdf'));
|
|
900
|
+
html += this.getHtmlForButton('wcDownloadSvg', 'fal fa-file-alt', this.translateService.translate('Common.svg'));
|
|
901
|
+
html += '</div>';
|
|
902
|
+
}
|
|
903
|
+
if (this.isGridDownloadVisible) {
|
|
904
|
+
html += '<div class="gridDownload">';
|
|
905
|
+
html += this.getHtmlForButton('wcDownloadExcel', 'fal fa-download', this.excelText);
|
|
906
|
+
html += '</div>';
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
if (this.isDownloadIconVisible && this.isWidgetMgmnt) {
|
|
910
|
+
html += this.getHr();
|
|
791
911
|
}
|
|
792
|
-
this.
|
|
912
|
+
if (this.isWidgetMgmnt) {
|
|
913
|
+
html += '<a id="wcWidgetDelete"><i class="fal fa-times" style="padding-left: 3px;color: red;"></i><span>';
|
|
914
|
+
html += this.deleteText;
|
|
915
|
+
html += '</span></a>';
|
|
916
|
+
}
|
|
917
|
+
html += '</div>';
|
|
918
|
+
return html;
|
|
919
|
+
};
|
|
920
|
+
/**
|
|
921
|
+
* @private
|
|
922
|
+
* @return {?}
|
|
923
|
+
*/
|
|
924
|
+
RAWidgetContainer.prototype.getHr = /**
|
|
925
|
+
* @private
|
|
926
|
+
* @return {?}
|
|
927
|
+
*/
|
|
928
|
+
function () {
|
|
929
|
+
return '<hr class="hr" style="margin-top: 5px;margin-bottom: 5px;">';
|
|
930
|
+
};
|
|
931
|
+
/**
|
|
932
|
+
* @private
|
|
933
|
+
* @param {?} id
|
|
934
|
+
* @param {?} fontClass
|
|
935
|
+
* @param {?} text
|
|
936
|
+
* @return {?}
|
|
937
|
+
*/
|
|
938
|
+
RAWidgetContainer.prototype.getHtmlForButton = /**
|
|
939
|
+
* @private
|
|
940
|
+
* @param {?} id
|
|
941
|
+
* @param {?} fontClass
|
|
942
|
+
* @param {?} text
|
|
943
|
+
* @return {?}
|
|
944
|
+
*/
|
|
945
|
+
function (id, fontClass, text) {
|
|
946
|
+
/** @type {?} */
|
|
947
|
+
var html = '<a id="' + id + '"><i style="width:16px" class="' + fontClass + '"></i> <span style="padding-left: 6px;">';
|
|
948
|
+
html += text;
|
|
949
|
+
html += '</span></a>';
|
|
950
|
+
return html;
|
|
793
951
|
};
|
|
794
952
|
/**
|
|
795
953
|
* @private
|
|
@@ -836,8 +994,7 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
836
994
|
RAWidgetContainer.decorators = [
|
|
837
995
|
{ type: Component, args: [{
|
|
838
996
|
selector: 'ra-widget-container',
|
|
839
|
-
template: "<div class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-md-10 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\" (mouseover)=\"mouseOver($event)\"\r\n #searchInput>{{data.widgetInfo.widgetTitle}}</div>\r\n </ra-tooltip>\r\n </div>\r\n
|
|
840
|
-
styles: [".sp_icon{float:left;margin:0 15% 0 0}.dropbtn{color:#42b4e6;text-align:right;height:100%}.dropbtn i{cursor:pointer;width:100%;height:100%}.dropdown{visibility:hidden;opacity:0;transition:visibility,opacity .5s linear;position:relative;width:100%}@media screen and (max-width:400px){.dropdown{visibility:visible;opacity:1}}.dropdown hr{margin:0!important}.dropdown-content{display:none;position:absolute;right:0;background-color:#fff;min-width:100px;box-shadow:0 8px 16px 8px rgba(0,0,0,.2);z-index:2;font-size:12px;font-weight:400;width:122px}.dropdown-content a{color:#000;padding:5px 16px;text-decoration:none;display:block;cursor:pointer}.wc{height:100%}.defaultConfig{height:100%;display:flex;align-items:center}.defaultConfig .button{min-height:34px;font-size:13px;width:100%;min-height:34px;color:#fff;display:table;margin:9px 0 0;cursor:pointer;text-align:center;float:left}.defaultConfig .contentarea{width:80%;margin:0 auto;float:left;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.defaultConfig .textarea{width:100%;float:left}.defaultConfig .textarea .icon{width:52px;height:100%;float:left}.defaultConfig .textarea .error-view{color:#dc0a0a}.defaultConfig .textarea .empty-data{color:#5ab5e6}.defaultConfig .textarea .text{width:calc(100% - 52px);min-height:60px;float:left;font-size:14px;text-align:left}.defaultConfig .textarea .icon i{font-size:40px!important}.configuretext{display:table-cell;vertical-align:middle;height:34px}.dropdown-content a:hover{background-color:#f1f1f1}.lockInvisible{margin-right:-17px}.dropdown-click{display:block!important;-webkit-animation:.3s ease-out slide-down;animation:.3s ease-out slide-down}.download-icon{cursor:pointer}.dropdown:hover .dropdown-content{color:#fff}.title-bar-lock-icon{margin:0 3px}.hr{border:0;border-top:1px solid rgba(0,0,0,.1)}.settingstyle{color:#9fa0a4;font-size:12px}@-webkit-keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slide-down{0%{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.widget-config-item i{font-size:17px;color:#42b4e6}.widget-config-item span{font-size:12px;font:inherit;padding-left:12px;color:#42b4e6}.lock{color:#42b4e6}.locked{color:#42b4e6;background:#fff}.partiallocked{color:#a0d9f2}.unlocked{display:none}.download{visibility:hidden;opacity:0;transition:visibility,opacity .5s linear;position:relative}.wc-wrapper:hover .download{visibility:visible;opacity:1}.download-content a{color:#000;padding:5px 16px;text-decoration:none;display:block;cursor:pointer}.download-content a:hover{background-color:#f1f1f1}.download-content a i{font-size:17px;color:#42b4e6}.download-content a span{font-size:12px;font:inherit;padding-left:12px;color:#42b4e6}.title-label{width:96%;padding-left:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.lock-dropdown{transition:visibility,opacity .5s linear;position:relative;display:inline-block;margin:0 6px 0 10px}.lock-dropdown-content{display:none;margin-top:8px;position:absolute;right:0;top:79%;box-shadow:0 8px 16px 8px rgba(0,0,0,.2);z-index:899;font-size:12px;min-width:220px!important;min-height:112px;background-color:#219bfd;opacity:.9;padding:15px;color:#fff}.lock-dropdown-content hr{border-bottom:1px solid #fff}.lock-dropdown:hover .lock-dropdown-content{display:block!important;-webkit-animation:.3s ease-out slide-down;animation:.3s ease-out slide-down}"]
|
|
997
|
+
template: "<div #wcWrapper class=\"wc-wrapper\" (mouseenter)=\"mouseHover(true)\" (mouseleave)=\"mouseHover(false)\"\r\n [ngStyle]=\"{'margin-left': noPadding?'0px':'15px','margin-right': noPadding?'0px':'15px'}\">\r\n <div class=\"wcheader widget-move\" [ngClass]=\"{'underLine': enableTitleLine || isWidgetStateApplicable}\">\r\n <div class=\"col-md-12 wc-mover\" style=\"padding-left: 0px;height:inherit;padding-right: 0px;\">\r\n <div style=\"display:flex;margin-top:10px;\"\r\n [ngStyle]=\"{'margin-left': noPadding?'15px':'0px','margin-right': noPadding?'15px':'0px'}\">\r\n <div class=\"col-md-10 float-left title-label\">\r\n <ra-tooltip [value]=\"toolTipValue\" [width]=\"toolTipWidth\">\r\n <div style=\"text-overflow: ellipsis;white-space: nowrap;overflow: hidden;\" (mouseover)=\"mouseOver($event)\"\r\n #searchInput>{{data.widgetInfo.widgetTitle}}</div>\r\n </ra-tooltip>\r\n </div>\r\n <div class=\"col-md-2\" style=\"cursor:default;padding-right: 0px;\">\r\n <div class=\"float-right\" style=\"display: flex;\">\r\n <div class=\"title-bar-lock-icon lock-dropdown\" [hidden]=\"!lockDetails && !lockTemplateInfo\">\r\n <i class=\"fal fa-lock lock\"></i>\r\n <div class=\"lock-dropdown-content light widget-config-item\">\r\n <div *ngIf=\"lockDetails && !lockTemplateInfo\">\r\n <label style=\"color: #D9F0FA;\">\r\n {{'Common.lockedfields'|translate}}\r\n </label>\r\n <div style=\"color: white;\">\r\n <label class=\"bold\" style=\"margin-bottom: 0px;width: 100%;\" *ngFor=\"let item of lockDetails\">\r\n {{item}}\r\n </label>\r\n </div>\r\n <hr>\r\n <div style=\"color: #D9F0FA;\">\r\n <label>{{'Common.lockedfieldseditinfo'|translate}}</label>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!lockDetails && lockTemplateInfo\">\r\n <ng-container *ngTemplateOutlet=\"lockTemplateInfo\">\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"widget-menu\" style=\"width:10px;\" [ngClass]=\"{'widget-menu-show': isMouseHover}\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown($event)\" #widgetDropdown class=\"fal fa-ellipsis-v widget-menu-ellipse\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"wcBody\" [ngStyle]=\"{'bottom': noPadding?'0px':'10px'}\">\r\n <div [hidden]=\"isWidgetStateApplicable\" class=\"m-fadeOut widget-overlay\" [ngClass]=\"{'m-fadeIn': showPanel}\">\r\n <div class=\"lds-roller\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n <div class=\"wc\" [hidden]=\"isWidgetStateApplicable\">\r\n <div #ctlWidget></div>\r\n </div>\r\n <div *ngIf=\"isWidgetStateApplicable\" class=\"defaultConfig\">\r\n <ra-widget-state style=\"width: 100%;\" [isWidgetStateApplicable]=\"isWidgetStateApplicable\" [isGlobalFilterApplied]=\"isGlobalFilterApplied\"\r\n [widgetEmptyState]=\"widgetEmptyState\" (editWidgetClicked)=editWidget()>\r\n </ra-widget-state>\r\n </div>\r\n <div>\r\n </div>\r\n </div>\r\n</div>"
|
|
841
998
|
}] }
|
|
842
999
|
];
|
|
843
1000
|
/** @nocollapse */
|
|
@@ -853,8 +1010,8 @@ var RAWidgetContainer = /** @class */ (function () {
|
|
|
853
1010
|
RAWidgetContainer.propDecorators = {
|
|
854
1011
|
ctlWidget: [{ type: ViewChild, args: ['ctlWidget', { static: false },] }],
|
|
855
1012
|
widgetDropdown: [{ type: ViewChild, args: ['widgetDropdown', { static: false },] }],
|
|
856
|
-
widgetDownload: [{ type: ViewChild, args: ['widgetDownload', { static: false },] }],
|
|
857
1013
|
searchInput: [{ type: ViewChild, args: ['searchInput', { static: false },] }],
|
|
1014
|
+
wcWrapper: [{ type: ViewChild, args: ['wcWrapper', { static: false },] }],
|
|
858
1015
|
widgetInstanceId: [{ type: Input, args: ['widget-instance-id',] }],
|
|
859
1016
|
globalFilter: [{ type: Input, args: ['global-filter',] }],
|
|
860
1017
|
data: [{ type: Input, args: ['data',] }],
|
|
@@ -887,11 +1044,6 @@ if (false) {
|
|
|
887
1044
|
* @private
|
|
888
1045
|
*/
|
|
889
1046
|
RAWidgetContainer.prototype.configChanged;
|
|
890
|
-
/**
|
|
891
|
-
* @type {?}
|
|
892
|
-
* @private
|
|
893
|
-
*/
|
|
894
|
-
RAWidgetContainer.prototype.isIEOrEdge;
|
|
895
1047
|
/** @type {?} */
|
|
896
1048
|
RAWidgetContainer.prototype.widgetHeight;
|
|
897
1049
|
/** @type {?} */
|
|
@@ -905,10 +1057,6 @@ if (false) {
|
|
|
905
1057
|
/** @type {?} */
|
|
906
1058
|
RAWidgetContainer.prototype.isGridDownloadVisible;
|
|
907
1059
|
/** @type {?} */
|
|
908
|
-
RAWidgetContainer.prototype.dropDownShown;
|
|
909
|
-
/** @type {?} */
|
|
910
|
-
RAWidgetContainer.prototype.isDownloadChartVisible;
|
|
911
|
-
/** @type {?} */
|
|
912
1060
|
RAWidgetContainer.prototype.downloadIconType;
|
|
913
1061
|
/** @type {?} */
|
|
914
1062
|
RAWidgetContainer.prototype.enableTitleLine;
|
|
@@ -957,14 +1105,16 @@ if (false) {
|
|
|
957
1105
|
/** @type {?} */
|
|
958
1106
|
RAWidgetContainer.prototype.noPadding;
|
|
959
1107
|
/** @type {?} */
|
|
1108
|
+
RAWidgetContainer.prototype.isMouseHover;
|
|
1109
|
+
/** @type {?} */
|
|
960
1110
|
RAWidgetContainer.prototype.ctlWidget;
|
|
961
1111
|
/** @type {?} */
|
|
962
1112
|
RAWidgetContainer.prototype.widgetDropdown;
|
|
963
1113
|
/** @type {?} */
|
|
964
|
-
RAWidgetContainer.prototype.widgetDownload;
|
|
965
|
-
/** @type {?} */
|
|
966
1114
|
RAWidgetContainer.prototype.searchInput;
|
|
967
1115
|
/** @type {?} */
|
|
1116
|
+
RAWidgetContainer.prototype.wcWrapper;
|
|
1117
|
+
/** @type {?} */
|
|
968
1118
|
RAWidgetContainer.prototype.widgetInstanceId;
|
|
969
1119
|
/** @type {?} */
|
|
970
1120
|
RAWidgetContainer.prototype.globalFilter;
|
|
@@ -1036,4 +1186,4 @@ if (false) {
|
|
|
1036
1186
|
*/
|
|
1037
1187
|
RAWidgetContainer.prototype.raPermissionService;
|
|
1038
1188
|
}
|
|
1039
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR2xGO0lBOEVFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0M7UUFObEQsaUJBZ0JDO1FBaEJtQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsV0FBTSxH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SUFDL0MsNkNBQXdDOztJQUN4Qyw0Q0FBd0M7O0lBQ3hDLGtEQUE4Qzs7SUFDOUMseUNBQW1DOztJQUNuQyx5Q0FBb0M7O0lBQ3BDLHdDQUF3Qjs7SUFDeEIsNkNBQTBDOztJQUMxQyw2Q0FBc0M7O0lBQ3RDLDZDQUFzQzs7SUFDdEMsNkNBQXNDOztJQUN0Qyw4Q0FBdUM7O0lBQ3ZDLCtDQUF3Qzs7SUFDeEMscUNBQTZCOztJQUM3QixxQ0FBNkI7O0lBQzdCLHFDQUE2Qjs7SUFDN0Isc0NBQThCOztJQUM5Qix1Q0FBK0I7O0lBQy9CLDZDQUF3Qzs7SUFDeEMsNkNBQXdDOztJQUN4Qyw2Q0FBd0M7O0lBQ3hDLDhDQUF5Qzs7SUFDekMsK0NBQTBDOztJQUMxQywyQ0FBMkI7O0lBQzNCLHNDQUFrQzs7SUFJbEMsc0NBQWlFOztJQUNqRSwyQ0FBMkU7O0lBQzNFLDJDQUEyRTs7SUFDM0Usd0NBQXFFOztJQUdyRSw2Q0FBc0Q7O0lBQ3RELHlDQUEwQzs7SUFDMUMsaUNBQXlCOztJQUN6QixnREFBNkQ7O0lBQzdELHNDQUEyQzs7SUFDM0Msa0NBQXFDOztJQUNyQyxtQ0FBdUM7O0lBQ3ZDLDJDQUFrRDs7SUFHbEQsMENBQXFEOztJQUNyRCxzQ0FBeUI7O0lBQ3pCLG9EQUFnRDs7SUFDaEQsNkNBQXFDOztJQUNyQyx1Q0FBMkI7O0lBQzNCLHdDQUFvQzs7SUFDcEMseUNBQXlCOztJQUN6QiwwQ0FBNkI7O0lBQzdCLG9DQUF1Qjs7SUFDdkIsMENBQXNDOzs7OztJQU0xQiw2Q0FBNEM7Ozs7O0lBQ3RELHVDQUFzQzs7Ozs7SUFDdEMsNkNBQTRDOzs7OztJQUM1QyxtQ0FBc0I7Ozs7O0lBQ3RCLHFDQUFpQzs7Ozs7SUFDakMscUNBQTJCOzs7OztJQUMzQixnREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBPbkRlc3Ryb3ksIE5nWm9uZSwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQsIFJBRXZlbnRLZXkgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSUFwcENvbmZpZywgSVdpZGdldENvbmZpZ0ZpbHRlciwgSVdpZGdldEluZm8sIFJBRG93bmxvYWRUeXBlLCBSQURvd25sb2FkT3B0aW9uLCBSYVdpZGdldGxvY2tTdGF0dXMsIFdpZGdldFZpZXdTdGF0ZSwgSWNvbmZpZ0NoYW5nZXMgfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuXHJcbmltcG9ydCB7IFJBVHJhbnNsYXRlU2VydmljZSwgUkFQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0BzY2huZWlkZXJlc3MvcmEtY29tbW9uJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwcml2YXRlIGlzSUVPckVkZ2UgPSAvbXNpZVxcc3x0cmlkZW50XFwvfGVkZ2VcXC8vaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcm9wRG93blNob3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRG93bmxvYWRDaGFydFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG93bmxvYWRJY29uVHlwZTogUkFEb3dubG9hZFR5cGU7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dsb2JhbEZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICAnO1xyXG4gIHB1YmxpYyB0b29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBsb2NrRGV0YWlsczogYW55O1xyXG4gIHB1YmxpYyBsb2NrVGVtcGxhdGVJbmZvOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZWRpdFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBjb3B5VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG1vdmVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZXhjZWxUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZGVsZXRlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGVkaXRUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgd2lkZ2V0U2V0dGluZ3M6IGFueTtcclxuICBwdWJsaWMgbm9QYWRkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREb3dubG9hZCcsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREb3dubG9hZDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIEBJbnB1dCgnd2lkZ2V0LWluc3RhbmNlLWlkJykgd2lkZ2V0SW5zdGFuY2VJZDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZGF0YScpIGRhdGE6IGFueTtcclxuICBASW5wdXQoJ2V2ZW50LWJ1cycpIHJhRGFzaGJvYXJkRXZlbnRCdXM6IFJBRGFzaGJvYXJkRXZlbnRCdXM7XHJcbiAgQElucHV0KCdhcHAtY29uZmlnJykgYXBwQ29uZmlnOiBJQXBwQ29uZmlnO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LXdpZHRoJykgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSBoZWlnaHQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dyaWQtY2VsbC1oZWlnaHQnKSBncmlkQ2VsbEhlaWdodDogbnVtYmVyO1xyXG5cclxuXHJcbiAgQE91dHB1dCgpIHdpZGdldERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwdWJsaWMgbG9ja1RpdGxlOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHdpZGdldEVtcHR5U3RhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkb21SZXNpemVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBsb2NrVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsb2NrZWRGaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGV0YWlsUGFnZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYXNlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzV2lkZ2V0TWdtbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoJ2RvbS1yZXNpemVkJylcclxuICBzZXQgc2V0UmVzaXplZChyZXNpemVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogUkFUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbm90aWZpZXI6IE5vdGlmaWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgcmFQZXJtaXNzaW9uU2VydmljZTogUkFQZXJtaXNzaW9uU2VydmljZSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdjbGljaycsIChlOiBFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMud2lkZ2V0RHJvcGRvd24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMuZHJvcERvd25TaG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy53aWRnZXREb3dubG9hZCAmJiBlLnRhcmdldCAhPT0gdGhpcy53aWRnZXREb3dubG9hZC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc0Rvd25sb2FkQ2hhcnRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdpZGdldFZpZXdTdGF0ZSgpIHsgcmV0dXJuIFdpZGdldFZpZXdTdGF0ZTsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzV2lkZ2V0TWdtbnQgPSB0aGlzLnJhUGVybWlzc2lvblNlcnZpY2UuaGFzUGVybWlzc2lvbigncmEud2lkZ2V0bWFuYWdlbWVudCcpO1xyXG4gICAgaWYgKGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlZCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmVXaXRoS2V5KFJBRXZlbnQuQ29uZmlnQ2hhbmdlZCwgUkFFdmVudEtleS5XaWRnZXRJbnN0YW5jZUlkLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLnRvU3RyaW5nKCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcihlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlciAmJiBjaGFuZ2VzLmdsb2JhbEZpbHRlci5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5nbG9iYWxGaWx0ZXIucHJldmlvdXNWYWx1ZSkge1xyXG5cclxuICAgICAgbGV0IGZpbHRlck9iaiA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZ2xvYmFsRmlsdGVyKTtcclxuICAgICAgaWYgKGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQgIT0gZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy53aWR0aCAmJiBjaGFuZ2VzLndpZHRoLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLndpZHRoLnByZXZpb3VzVmFsdWUgfHxcclxuICAgICAgKGNoYW5nZXMuaGVpZ2h0ICYmIGNoYW5nZXMuaGVpZ2h0LmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmhlaWdodC5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLmludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCkge1xyXG4gICAgICBsZXQgc2l6ZTogYW55ID0ge307XHJcbiAgICAgIHNpemUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgIHNpemUud2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICBzaXplLmNlbGxIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQud2lkZ2V0UmVzaXplZChzaXplKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBtb3VzZUhvdmVyKGlzSG92ZXIgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNIb3Zlcikge1xyXG4gICAgICB0aGlzLmhpZGVEcm9wRG93bigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyOyAgICBcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGxldCBjb25maWdEYXRhID0gdGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcigpO1xyXG4gICAgICBpZiAoY29uZmlnRGF0YSkge1xyXG4gICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlciA9IGNvbmZpZ0RhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRDb25maWdGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIoZmFsc2UpO1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBUbyBEZWxldGUgY3VycmVudCB3aWRnZXQgZnJvbSBET00qL1xyXG4gIHB1YmxpYyBkZWxldGVXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQuZGFzaGJvYXJkU2VydmljZS5kZWxldGVXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUoc3RhdHVzID0+IHtcclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0b3AoKTtcclxuICAgICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RGVsZXRlZC5lbWl0KHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubm90aWZpZXIubm90aWZ5KCdlcnJvcicsIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnRmFpbGVkVG9SZW1vdmVXaWRnZXQnKSArIFwiICAoXCIgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSArIFwiKSFcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBNb3ZlIG9yIGNoYW5nZSBwb3NpdGlvbiBpZiBjdXJyZW50IHdpZGdldCBjb250YWluZXIqL1xyXG4gIHB1YmxpYyBtb3ZlV2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Nb3ZlV2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvLyB0aGlzLmRhc2hib2FyZFNlcnZpY2UubW92ZVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyBDb3B5IEN1cnJlbnQgd2lkZ2V0IHdpdGggc2FtZSBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgY29weVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuQ29weVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy90aGlzLmRhc2hib2FyZFNlcnZpY2UuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXNpdFBhZ2UoKSB7XHJcbiAgICB0aGlzLmJhc2VVcmwgPSB0aGlzLmdldEhvc3RVcmwoKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLmJhc2VVcmwgKyB0aGlzLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8gJiYgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0U2V0dGluZ3MuY3VzdG9tUGFnZVBhcmFtcykge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0UGFnZVBhcmFtc0NsaWNrZWQoKTtcclxuICAgICAgICBpZiAocGFyYW1zKVxyXG4gICAgICAgICAgdXJsID0gdXJsICsgJz8nICsgcGFyYW1zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEhvc3RVcmwoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICh3aW5kb3cubG9jYXRpb24ucG9ydCA/ICc6JyArIHdpbmRvdy5sb2NhdGlvbi5wb3J0IDogJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZUV2ZW50SGFuZGxlcih3aWRnZXRJbmZvKSB7XHJcbiAgICB0aGlzLmRhdGEud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICBpZiAodGhpcy5ncmlkQ2VsbEhlaWdodCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLndpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIodGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcih0cnVlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk4Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb25maWdGaWx0ZXIoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgd2lkZ2V0SW5mbzogdGhpcy5kYXRhLndpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZzogdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpZGdldENvbmZpZ0ZpbHRlckRhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqICBUbyBsb2FkIGV4dGVybmFsIGN1c3RvbSBlbGVtZW50IHRvIHRoZSB3aWRnZXQgY29udGFpbmVyKi9cclxuICBhc3luYyBsb2FkV2lkZ2V0KHdpZGdldEluZm86IGFueSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpXHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcod2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIHRoaXMuYXBwbGF5V2lkZ2V0U2V0dGluZ3ModGhpcy53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbFBhZ2VVcmwgPSB3aWRnZXRJbmZvLmRldGFpbFBhZ2VVcmw7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyID0gdGhpcztcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5sb2FkRXh0ZXJuYWxTY3JpcHQod2lkZ2V0SW5mby5zY3JpcHRVcmwsICgpID0+IHtcclxuICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5sb2FkVHJhbnNsYXRpb25zKHRoaXMuYXBwQ29uZmlnLmFwcE1hbmFnZW1lbnRCYXNlVXJsLCB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXROYW1lLCBmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHdpZGdldEluZm8uY3VzdG9tVGFnKTtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWRnZXQtaW5zdGFuY2UtaWRcIiwgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCd3aWRnZXRpbml0aWF0ZWQnICsgd2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb24tZGF0YS1sb2FkJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlLmRldGFpbClcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zaG93UGFuZWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbmZpZy1lZGl0LWNsaWNrZWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLmVkaXRXaWRnZXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlbmFibGUtZGVmYXVsdC1zdGF0ZScsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuc2V0RW1wdHlTdGF0ZShlLmRldGFpbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRpdGxlTGluZUVuYWJsZWQgPSB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHRpdGxlTGluZUVuYWJsZWQpICE9ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcz0gdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgICAgICAgYXdhaXQgd2lkZ2V0Q29udGFpbmVyLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXREb3dubG9hZEljb24oKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3RsV2lkZ2V0Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy53aWRnZXRFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHNldCBEZWZhdWx0IFN0YXRlIGZvciB0aGUgd2lkZ2V0IHdoZW4gaXQgaXMgbm90IGNvbmZpZ3VyZWQgKi9cclxuICBzZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGZvcmNlRW5hYmxlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICgod2lkZ2V0SW5mby5zaG93RGVmYXVsdFN0YXRlICYmICh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnID09IFwiXCIgfHwgT2JqZWN0LmtleXMoSlNPTi5wYXJzZSh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnKSkubGVuZ3RoID09IDApKSB8fCAoZm9yY2VFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWcudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSAnJztcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gY29uZmlndXJlIGVtcHR5IHN0YXRlIGZvciB0aGUgd2lkZ2V0ICAqL1xyXG4gIHNldEVtcHR5U3RhdGUod2lkZ2V0U3RhdGU6IGFueSkge1xyXG4gICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gd2lkZ2V0U3RhdGUud2lkZ2V0Vmlld1N0YXRlO1xyXG4gICAgdGhpcy5pc0dsb2JhbEZpbHRlckFwcGxpZWQgPSB3aWRnZXRTdGF0ZS5pc0dsb2JhbEZpbHRlckFwcGxpZWQ7XHJcbiAgICBpZiAod2lkZ2V0U3RhdGUgIT0gV2lkZ2V0Vmlld1N0YXRlLm5vcm1hbCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHdpZGdldFN0YXRlKSB7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnOlxyXG4gICAgICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlEYXRhOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lcnJvcjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgY29uZmlnQ2hhbmdlcyA9IDxJY29uZmlnQ2hhbmdlcz57XHJcbiAgICAgIGlzQ29uZmlnVXBkYXRlZDogY29uZmlnQ2hhbmdlZCxcclxuICAgICAgdXBkYXRlZENvbmZpZ1Byb3BlcnR5OiBbXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ0NoYW5nZXM7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmVmcmVzaCB3aWRnZXQgb24gaW5wdXQgY29uZmlnIGNoYW5nZXMgKi9cclxuICBhc3luYyByZWZyZXNoV2lkZ2V0KHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnd2lnZXQgY29udGFpbmVyIGZpbHRlciBkYXRhIGlzJyk7XHJcbiAgICBjb25zb2xlLmxvZyh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG5cclxuXHJcbiAgICBpZiAod2lkZ2V0Q29udGFpbmVyQ29udGV4dC5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlT3ZlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9ICcgJztcclxuICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkge1xyXG4gICAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9IGVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICczMDBweCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0TG9jayhjb25maWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2NrVGVtcGxhdGVJbmZvID0gdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrSW5mbygpO1xyXG4gICAgdmFyIGNvbmZpZ09iajogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBjb25maWdPYmogPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIGlmIChjb25maWdPYmogJiYgY29uZmlnT2JqLkxvY2tzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0ZVJhbmdlJykpO1xyXG5cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRpdmlzaW9uT3JHcm91cG9yU2l0ZScpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0YVN0cmVhbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xyXG4gICAgbGV0IGRvd25sb2FkVHlwZSA9IGF3YWl0IHRoaXMud2lkZ2V0RWxlbWVudC5nZXREb3dubG9hZFR5cGUoKTtcclxuICAgIHRoaXMuZG93bmxvYWRJY29uVHlwZSA9IGRvd25sb2FkVHlwZTtcclxuICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBpZiAoZG93bmxvYWRUeXBlICE9IFJBRG93bmxvYWRUeXBlLk5vbmUpIHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuQ2hhcnQpIHtcclxuICAgICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkdyaWQpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBkb3dubG9hZENsaWNrZWQoKSB7XHJcbiAgLy8gICBzd2l0Y2ggKHRoaXMuZG93bmxvYWRJY29uVHlwZSkge1xyXG4gIC8vICAgICBjYXNlIFJBRG93bmxvYWRUeXBlLkdyaWQ6XHJcbiAgLy8gICAgICAgdGhpcy5kb3dubG9hZEljb25DbGlja2VkKCdDU1YnKTtcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgICAgY2FzZSBSQURvd25sb2FkVHlwZS5DaGFydDpcclxuICAvLyAgICAgICB0aGlzLmlzRG93bmxvYWRDaGFydFZpc2libGUgPSB0cnVlO1xyXG4gIC8vICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICBjYXNlIFJBRG93bmxvYWRUeXBlLkN1c3RvbTpcclxuICAvLyAgICAgICBicmVhaztcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZEljb25DbGlja2VkKHR5cGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJDU1ZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5DU1YpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUE5HXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUE5HKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBERlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBERik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJTVkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5TVkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiSlBFR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkpQRUcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqU2hvdyBkcm9wZG93biBvbiBnZWFyIGljb24gY2xpY2sgICovXHJcbiAgcHVibGljIHNob3dEcm9wRG93bigpIHtcclxuICAgIHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB0aGlzLmRyb3BEb3duU2hvd24gPSAhdGhpcy5kcm9wRG93blNob3duO1xyXG4gIH1cclxuXHJcbiAgLyoqSGlkZSBkcm9wZG93biBvbiBvdXRzaWRlIGNsaWNrICovXHJcbiAgcHVibGljIGhpZGVEcm9wRG93bigpIHtcclxuICAgIGlmICh0aGlzLmRyb3BEb3duU2hvd24pIHtcclxuICAgICAgdGhpcy5kcm9wRG93blNob3duID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzRG93bmxvYWRDaGFydFZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBnZXRQYXJzZWRDb25maWcoY29uZmlnOiBhbnkpIHtcclxuICAgIGxldCBwYXJzZWRDb25maWc6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2h7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbGF5V2lkZ2V0U2V0dGluZ3Moc2V0dGluZ3M6IGFueSkge1xyXG4gICAgaWYgKHNldHRpbmdzLk5vUGFkZGluZylcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gZmFsc2VcclxuICB9XHJcbn1cclxuIl19
|
|
1189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2xGO0lBMEVFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0M7UUFObEQsaUJBaUJDO1FBakJtQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsV0FBTSxH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RCwwQ0FBcUQ7O0lBQ3JELHNDQUF5Qjs7SUFDekIsb0RBQWdEOztJQUNoRCw2Q0FBcUM7O0lBQ3JDLHVDQUEyQjs7SUFDM0Isd0NBQW9DOztJQUNwQyx5Q0FBeUI7O0lBQ3pCLDBDQUE2Qjs7SUFDN0Isb0NBQXVCOztJQUN2QiwwQ0FBc0M7Ozs7O0lBTTFCLDZDQUE0Qzs7Ozs7SUFDdEQsdUNBQXNDOzs7OztJQUN0Qyw2Q0FBNEM7Ozs7O0lBQzVDLG1DQUFzQjs7Ozs7SUFDdEIscUNBQWlDOzs7OztJQUNqQyxxQ0FBMkI7Ozs7O0lBQzNCLGdEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFuZWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgaXNXaWRnZXRMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHdpZGdldEVsZW1lbnQ6IGFueTtcclxuICBwcml2YXRlIGNvbmZpZ0NoYW5nZWQ6IGFueTtcclxuICBwdWJsaWMgd2lkZ2V0SGVpZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGxvY2tDbGFzczogc3RyaW5nID0gXCJ1bmxvY2tlZFwiO1xyXG4gIHB1YmxpYyBsb2NrU3RhdHVzOiBSYVdpZGdldGxvY2tTdGF0dXMgPSBSYVdpZGdldGxvY2tTdGF0dXMuVW5sb2NrZWQ7XHJcbiAgcHVibGljIGlzRG93bmxvYWRJY29uVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0NoYXJ0RG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR3JpZERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkb3dubG9hZEljb25UeXBlOiBSQURvd25sb2FkVHlwZTtcclxuICBwdWJsaWMgZW5hYmxlVGl0bGVMaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzR2xvYmFsRmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0b29sVGlwVmFsdWU6IHN0cmluZyA9ICcgICc7XHJcbiAgcHVibGljIHRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGxvY2tEZXRhaWxzOiBhbnk7XHJcbiAgcHVibGljIGxvY2tUZW1wbGF0ZUluZm86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGVkaXRUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgY29weVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBlZGl0VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGNvcHlUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgbW92ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBleGNlbFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBkZWxldGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBtb3ZlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyB3aWRnZXRTZXR0aW5nczogYW55O1xyXG4gIHB1YmxpYyBub1BhZGRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNNb3VzZUhvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3Y1dyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgd2NXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2RhdGEnKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0JykgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCdncmlkLWNlbGwtaGVpZ2h0JykgZ3JpZENlbGxIZWlnaHQ6IG51bWJlcjtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgcHVibGljIGxvY2tUaXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9ja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbG9ja2VkRmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRldGFpbFBhZ2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCdkb20tcmVzaXplZCcpXHJcbiAgc2V0IHNldFJlc2l6ZWQocmVzaXplZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ3hTZXJ2aWNlOiBOZ3hVaUxvYWRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIHJhUGVybWlzc2lvblNlcnZpY2U6IFJBUGVybWlzc2lvblNlcnZpY2UpIHtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUpIHtcclxuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lICE9ICdmYWwgZmEtZWxsaXBzaXMtdiB3aWRnZXQtbWVudS1lbGxpcHNlJykge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCB3aWRnZXRWaWV3U3RhdGUoKSB7IHJldHVybiBXaWRnZXRWaWV3U3RhdGU7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1dpZGdldE1nbW50ID0gdGhpcy5yYVBlcm1pc3Npb25TZXJ2aWNlLmhhc1Blcm1pc3Npb24oJ3JhLndpZGdldG1hbmFnZW1lbnQnKTtcclxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlV2l0aEtleShSQUV2ZW50LkNvbmZpZ0NoYW5nZWQsIFJBRXZlbnRLZXkuV2lkZ2V0SW5zdGFuY2VJZCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZC50b1N0cmluZygpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VFdmVudEhhbmRsZXIoZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgY2hhbmdlcy5nbG9iYWxGaWx0ZXIgJiYgY2hhbmdlcy5nbG9iYWxGaWx0ZXIuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuZ2xvYmFsRmlsdGVyLnByZXZpb3VzVmFsdWUpIHtcclxuXHJcbiAgICAgIGxldCBmaWx0ZXJPYmogPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmdsb2JhbEZpbHRlcik7XHJcbiAgICAgIGlmIChmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkICE9IGZpbHRlck9iai5XaWRnZXRJbnN0YW5jZUlkKVxyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2hXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMud2lkdGggJiYgY2hhbmdlcy53aWR0aC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy53aWR0aC5wcmV2aW91c1ZhbHVlIHx8XHJcbiAgICAgIChjaGFuZ2VzLmhlaWdodCAmJiBjaGFuZ2VzLmhlaWdodC5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5oZWlnaHQucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5pbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludm9rZVdpZGdldFJlc2l6ZWRFdmVudCgpIHtcclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgbGV0IHNpemU6IGFueSA9IHt9O1xyXG4gICAgICBzaXplLmhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICBzaXplLndpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgc2l6ZS5jZWxsSGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgICAgdGhpcy53aWRnZXRFbGVtZW50LndpZGdldFJlc2l6ZWQoc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbW91c2VIb3Zlcihpc0hvdmVyID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5pc01vdXNlSG92ZXIgPSBpc0hvdmVyO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5ob3ZlclN0YXR1cyhpc0hvdmVyKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTYnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsICgpID0+IHtcclxuICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgaXRlbSA9IGpRdWVyeSh0aGlzLndjV3JhcHBlci5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCdncmlkc3Rlci1pdGVtJyk7XHJcbiAgICAgIGl0ZW0uYmluZCgnbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGl0ZW0uYmluZCgnbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdDaGFuZ2VkKVxyXG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gRWRpdCBjdXJyZW50IHdpZGdldCBjb25maWd1cmF0aW9uKi9cclxuICBwdWJsaWMgZWRpdFdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXI6IElXaWRnZXRDb25maWdGaWx0ZXI7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LmdldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBsZXQgY29uZmlnRGF0YSA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIoKTtcclxuICAgICAgaWYgKGNvbmZpZ0RhdGEpIHtcclxuICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIgPSBjb25maWdEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0Q29uZmlnRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSB0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKGZhbHNlKTtcclxuICAgICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5XaWRnZXRFZGl0Q2xpY2tlZCwgd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVG8gRGVsZXRlIGN1cnJlbnQgd2lkZ2V0IGZyb20gRE9NKi9cclxuICBwdWJsaWMgZGVsZXRlV2lkZ2V0KCkge1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5uZ3hTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LmRhc2hib2FyZFNlcnZpY2UuZGVsZXRlV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHN0YXR1cyA9PiB7XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdG9wKCk7XHJcbiAgICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldERlbGV0ZWQuZW1pdCh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5vdGlmaWVyLm5vdGlmeSgnZXJyb3InLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0ZhaWxlZFRvUmVtb3ZlV2lkZ2V0JykgKyBcIiAgKFwiICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIikhXCIpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gTW92ZSBvciBjaGFuZ2UgcG9zaXRpb24gaWYgY3VycmVudCB3aWRnZXQgY29udGFpbmVyKi9cclxuICBwdWJsaWMgbW92ZVdpZGdldCgpIHtcclxuICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuTW92ZVdpZGdldCwgdGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgLy8gdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLm1vdmVXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gQ29weSBDdXJyZW50IHdpZGdldCB3aXRoIHNhbWUgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGNvcHlXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LkNvcHlXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmlzaXRQYWdlKCkge1xyXG4gICAgdGhpcy5iYXNlVXJsID0gdGhpcy5nZXRIb3N0VXJsKCk7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5iYXNlVXJsICsgdGhpcy5kZXRhaWxQYWdlVXJsO1xyXG4gICAgaWYgKHRoaXMuZGF0YS53aWRnZXRJbmZvICYmIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncyk7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldFNldHRpbmdzLmN1c3RvbVBhZ2VQYXJhbXMpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gdGhpcy53aWRnZXRFbGVtZW50LmdldFBhZ2VQYXJhbXNDbGlja2VkKCk7XHJcbiAgICAgICAgaWYgKHBhcmFtcylcclxuICAgICAgICAgIHVybCA9IHVybCArICc/JyArIHBhcmFtcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbG9jYXRpb24uaHJlZiA9IHVybDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIb3N0VXJsKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAod2luZG93LmxvY2F0aW9uLnBvcnQgPyAnOicgKyB3aW5kb3cubG9jYXRpb24ucG9ydCA6ICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWdDaGFuZ2VFdmVudEhhbmRsZXIod2lkZ2V0SW5mbykge1xyXG4gICAgdGhpcy5kYXRhLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgaWYgKHRoaXMuZ3JpZENlbGxIZWlnaHQgPiAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICB0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHRoaXMuZ2VuZXJhdGVDb25maWdGaWx0ZXIodHJ1ZSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignd2lkZ2V0IGZyYW1ld29yayBvdXRkYXRlZCwgcGxlYXNlIHVwZGF0ZSB0byB2ZXJzaW9uIDAuMC45OCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQ29uZmlnRmlsdGVyKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlckRhdGEgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIHdpZGdldEluZm86IHRoaXMuZGF0YS53aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWc6IHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZClcclxuICAgIH1cclxuICAgIHJldHVybiB3aWRnZXRDb25maWdGaWx0ZXJEYXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKiAgVG8gbG9hZCBleHRlcm5hbCBjdXN0b20gZWxlbWVudCB0byB0aGUgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgYXN5bmMgbG9hZFdpZGdldCh3aWRnZXRJbmZvOiBhbnkpIHtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy53aWRnZXRTZXR0aW5ncyA9IHRoaXMuZ2V0UGFyc2VkQ29uZmlnKHdpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICB0aGlzLmFwcGxheVdpZGdldFNldHRpbmdzKHRoaXMud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXRhaWxQYWdlVXJsID0gd2lkZ2V0SW5mby5kZXRhaWxQYWdlVXJsO1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lciA9IHRoaXM7XHJcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UubG9hZEV4dGVybmFsU2NyaXB0KHdpZGdldEluZm8uc2NyaXB0VXJsLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UubG9hZFRyYW5zbGF0aW9ucyh0aGlzLmFwcENvbmZpZy5hcHBNYW5hZ2VtZW50QmFzZVVybCwgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0TmFtZSwgZmFsc2UpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh3aWRnZXRJbmZvLmN1c3RvbVRhZyk7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkZ2V0LWluc3RhbmNlLWlkXCIsIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignd2lkZ2V0aW5pdGlhdGVkJyArIHdpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ29uLWRhdGEtbG9hZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwpXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuc2hvd1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuc2hvd1BhbmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjb25maWctZWRpdC1jbGlja2VkJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5lZGl0V2lkZ2V0KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZW5hYmxlLWRlZmF1bHQtc3RhdGUnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNldEVtcHR5U3RhdGUoZS5kZXRhaWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0aXRsZUxpbmVFbmFibGVkID0gd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQudGl0bGVMaW5lRW5hYmxlZCgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mICh0aXRsZUxpbmVFbmFibGVkKSAhPSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdGl0bGVMaW5lRW5hYmxlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5lZGl0VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29weVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKVxyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2VsVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVsZXRlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIuaXNXaWRnZXRMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuYXBwQ29uZmlnID0gdGhpcy5hcHBDb25maWc7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZ0NoYW5nZXMgPSB0aGlzLmdldENvbmZpZ0NoYW5nZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mby53aWRnZXROYW1lID0gd2lkZ2V0SW5mby53aWRnZXROYW1lO1xyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICAgICAgICBhd2FpdCB3aWRnZXRDb250YWluZXIuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgICAgICAgYXdhaXQgd2lkZ2V0Q29udGFpbmVyLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdGxXaWRnZXQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLndpZGdldEVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqVG8gc2V0IERlZmF1bHQgU3RhdGUgZm9yIHRoZSB3aWRnZXQgd2hlbiBpdCBpcyBub3QgY29uZmlndXJlZCAqL1xyXG4gIHNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgZm9yY2VFbmFibGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCh3aWRnZXRJbmZvLnNob3dEZWZhdWx0U3RhdGUgJiYgKHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcgPT0gXCJcIiB8fCBPYmplY3Qua2V5cyhKU09OLnBhcnNlKHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcpKS5sZW5ndGggPT0gMCkpIHx8IChmb3JjZUVuYWJsZSkpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9ICcnO1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipUbyBjb25maWd1cmUgZW1wdHkgc3RhdGUgZm9yIHRoZSB3aWRnZXQgICovXHJcbiAgc2V0RW1wdHlTdGF0ZSh3aWRnZXRTdGF0ZTogYW55KSB7XHJcbiAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSB3aWRnZXRTdGF0ZS53aWRnZXRWaWV3U3RhdGU7XHJcbiAgICB0aGlzLmlzR2xvYmFsRmlsdGVyQXBwbGllZCA9IHdpZGdldFN0YXRlLmlzR2xvYmFsRmlsdGVyQXBwbGllZDtcclxuICAgIGlmICh3aWRnZXRTdGF0ZSAhPSBXaWRnZXRWaWV3U3RhdGUubm9ybWFsKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAod2lkZ2V0U3RhdGUpIHtcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWc6XHJcbiAgICAgICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUodGhpcy5kYXRhLndpZGdldEluZm8sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eURhdGE6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVycm9yOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCBjb25maWdDaGFuZ2VzID0gPEljb25maWdDaGFuZ2VzPntcclxuICAgICAgaXNDb25maWdVcGRhdGVkOiBjb25maWdDaGFuZ2VkLFxyXG4gICAgICB1cGRhdGVkQ29uZmlnUHJvcGVydHk6IFtdXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnQ2hhbmdlcztcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZWZyZXNoIHdpZGdldCBvbiBpbnB1dCBjb25maWcgY2hhbmdlcyAqL1xyXG4gIGFzeW5jIHJlZnJlc2hXaWRnZXQod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgd2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgdGhpcy5zZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbyk7XHJcbiAgICBsZXQgd2lkZ2V0Q29udGFpbmVyQ29udGV4dCA9IHRoaXM7XHJcblxyXG4gICAgbGV0IHdpZGdldENvbmZpZ0ZpbHRlciA9IDxJV2lkZ2V0Q29uZmlnRmlsdGVyPntcclxuICAgICAgY29uZmlnOiB3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRJbmZvLFxyXG4gICAgICBjb25maWdDaGFuZ2VzOiB0aGlzLmdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZClcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2lkZ2V0Q29udGFpbmVyQ29udGV4dC5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIHR5cGVvZiAodGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcikgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG1vdXNlT3ZlcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9ICcgJztcclxuICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkge1xyXG4gICAgICB0aGlzLnRvb2xUaXBWYWx1ZSA9IGVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICczMDBweCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0TG9jayhjb25maWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5sb2NrVGVtcGxhdGVJbmZvID0gdGhpcy53aWRnZXRFbGVtZW50LmxvYWRMb2NrSW5mbygpO1xyXG4gICAgdmFyIGNvbmZpZ09iajogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBjb25maWdPYmogPSBKU09OLnBhcnNlKGNvbmZpZyk7XHJcbiAgICAgIGlmIChjb25maWdPYmogJiYgY29uZmlnT2JqLkxvY2tzICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IFtdO1xyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0ZVJhbmdlJykpO1xyXG5cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRpdmlzaW9uT3JHcm91cG9yU2l0ZScpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpXHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGF0YVN0cmVhbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0RG93bmxvYWRJY29uKCkge1xyXG4gICAgbGV0IGRvd25sb2FkVHlwZSA9IGF3YWl0IHRoaXMud2lkZ2V0RWxlbWVudC5nZXREb3dubG9hZFR5cGUoKTtcclxuICAgIHRoaXMuZG93bmxvYWRJY29uVHlwZSA9IGRvd25sb2FkVHlwZTtcclxuICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBpZiAoZG93bmxvYWRUeXBlICE9IFJBRG93bmxvYWRUeXBlLk5vbmUpIHtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuQ2hhcnQpIHtcclxuICAgICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkdyaWQpIHtcclxuICAgICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZEljb25DbGlja2VkKHR5cGU6IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJDU1ZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5DU1YpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUE5HXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUE5HKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBERlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBERik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJTVkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5TVkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiSlBFR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkpQRUcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVNZW51KCkge1xyXG4gICAgalF1ZXJ5KCcjcmEtZGItd2lkZ2V0LW1lbnUnKS5yZW1vdmUoKTtcclxuICB9XHJcbiAgLyoqU2hvdyBkcm9wZG93biBvbiBnZWFyIGljb24gY2xpY2sgICovXHJcbiAgcHVibGljIHNob3dEcm9wRG93bihlOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IHRhcmdldFBvcyA9IGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICBsZXQgc3R5bGU6IHN0cmluZyA9IFwicG9zaXRpb246Zml4ZWQ7dG9wOlwiICsgKHRhcmdldFBvcy55ICsgMTUpICsgJ3B4JyArICc7bGVmdDonICsgKGUucGFnZVggLSAxMjIpICsgJ3B4O3otaW5kZXg6MTAwMDsnO1xyXG4gICAgICBsZXQgaHRtbCA9IHRoaXMuZ2V0Q29udGVueHRIdG1sKHN0eWxlKTtcclxuXHJcbiAgICAgIGpRdWVyeShodG1sKS5hcHBlbmRUbygnYm9keScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NFZGl0V2lkZ2V0JywgdGhpcy5lZGl0V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djQ29weVdpZGdldCcsIHRoaXMuY29weVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y01vdmVXaWRnZXQnLCB0aGlzLm1vdmVXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NXaWRnZXREZWxldGUnLCB0aGlzLmRlbGV0ZVdpZGdldCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NWaXNpdFdpZGdldCcsIHRoaXMudmlzaXRQYWdlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUG5nJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUE5HJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkSnBnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnSlBFRycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBkZicsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BERicpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFN2ZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1NWRycpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEV4Y2VsJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnQ1NWJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYS1kYi13aWRnZXQtbWVudScpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF3aW5kb3cuZ3JpZHN0ZXJJdGVtRW50ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNZW51KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVyKGlkOiBzdHJpbmcsIGV2ZW50OiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LmNhbGwodGhpcywgcGFyYW1zKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRlbnh0SHRtbChzdHlsZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbDogc3RyaW5nID0gJzxkaXYgaWQ9XCJyYS1kYi13aWRnZXQtbWVudVwiJyArICdzdHlsZT1cIicgKyBzdHlsZSArICdcIiBjbGFzcz1cImRvd25sb2FkLWNvbnRlbnQgZHJvcGRvd24tY29udGVudCB3aWRnZXQtY29uZmlnLWl0ZW0gZHJvcGRvd24tY2xpY2tcIiBzdHlsZT1cInotaW5kZXg6IDEwMDI7XCI+JztcclxuICAgIGh0bWwgKz0gJzxkaXYgc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6IDhweDtwYWRkaW5nLWxlZnQ6IDEycHg7XCI+JztcclxuICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnNldHRpbmdzJykgKyAnPC9kaXY+JztcclxuXHJcbiAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0VkaXRXaWRnZXQnLCAnZmFsIGZhLWVkaXQnLCB0aGlzLmVkaXRUZXh0KTtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djQ29weVdpZGdldCcsICdmYWwgZmEtY29weScsIHRoaXMuY29weVRleHQpO1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NNb3ZlV2lkZ2V0JywgJ2ZhbCBmYS1hcnJvd3MtYWx0JywgdGhpcy5tb3ZlVGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgIGh0bWwgKz0gJzxhIHN0eWxlPVwibWF4LWhlaWdodDogMzBweDthbGlnbi1pdGVtczogY2VudGVyO2FsaWduLWNvbnRlbnQ6IGNlbnRlcjsgZGlzcGxheTogZmxleDtcIiBpZD1cIndjVmlzaXRXaWRnZXRcIj4nO1xyXG4gICAgICBodG1sICs9ICc8aSBzdHlsZT1cInBhZGRpbmctbGVmdDogNHB4O2ZvbnQtc2l6ZTogMjdweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiZmFsIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPiAnO1xyXG4gICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTFweDttYXJnaW4tdG9wOiAycHg7XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi52aXNpdHBhZ2UnKTtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG4gICAgaHRtbCArPSB0aGlzLmdldEhyKCk7O1xyXG4gICAgaWYgKHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlKSB7XHJcbiAgICAgIGh0bWwgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O1wiPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRvd25sb2FkcycpO1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+JztcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiZ3JpZERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEV4Y2VsJywgJ2ZhbCBmYS1kb3dubG9hZCcsIHRoaXMuZXhjZWxUZXh0KTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgJiYgdGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8YSBpZD1cIndjV2lkZ2V0RGVsZXRlXCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4O2NvbG9yOiByZWQ7XCI+PC9pPjxzcGFuPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5kZWxldGVUZXh0O1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcigpIHtcclxuICAgIHJldHVybiAnPGhyIGNsYXNzPVwiaHJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiA1cHg7XCI+JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbEZvckJ1dHRvbihpZDogc3RyaW5nLCBmb250Q2xhc3M6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9ICc8YSBpZD1cIicgKyBpZCArICdcIj48aSBzdHlsZT1cIndpZHRoOjE2cHhcIiBjbGFzcz1cIicgKyBmb250Q2xhc3MgKyAnXCI+PC9pPiA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRleHQ7XHJcbiAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdldFBhcnNlZENvbmZpZyhjb25maWc6IGFueSkge1xyXG4gICAgbGV0IHBhcnNlZENvbmZpZzogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBsYXlXaWRnZXRTZXR0aW5ncyhzZXR0aW5nczogYW55KSB7XHJcbiAgICBpZiAoc2V0dGluZ3MuTm9QYWRkaW5nKVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSBmYWxzZVxyXG4gIH1cclxufVxyXG4iXX0=
|