@schneideress/dashboardframework 0.0.188 → 0.0.189

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/bundles/schneideress-dashboardframework.umd.js +264 -119
  2. package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
  3. package/bundles/schneideress-dashboardframework.umd.min.js +11 -11
  4. package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
  5. package/esm2015/gridster/index.js +1 -1
  6. package/esm2015/gridster/lib/gridster.component.js +1 -1
  7. package/esm2015/gridster/lib/gridster.interface.js +1 -1
  8. package/esm2015/gridster/lib/gridster.module.js +1 -1
  9. package/esm2015/gridster/lib/gridsterCompact.service.js +1 -1
  10. package/esm2015/gridster/lib/gridsterConfig.constant.js +1 -1
  11. package/esm2015/gridster/lib/gridsterConfig.interface.js +1 -1
  12. package/esm2015/gridster/lib/gridsterConfigS.interface.js +1 -1
  13. package/esm2015/gridster/lib/gridsterDraggable.service.js +1 -1
  14. package/esm2015/gridster/lib/gridsterEmptyCell.service.js +1 -1
  15. package/esm2015/gridster/lib/gridsterItem.component.js +1 -1
  16. package/esm2015/gridster/lib/gridsterItem.interface.js +1 -1
  17. package/esm2015/gridster/lib/gridsterItemComponent.interface.js +1 -1
  18. package/esm2015/gridster/lib/gridsterPreview.component.js +1 -1
  19. package/esm2015/gridster/lib/gridsterPush.service.js +1 -1
  20. package/esm2015/gridster/lib/gridsterPushResize.service.js +1 -1
  21. package/esm2015/gridster/lib/gridsterRenderer.service.js +1 -1
  22. package/esm2015/gridster/lib/gridsterResizable.service.js +1 -1
  23. package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +1 -1
  24. package/esm2015/gridster/lib/gridsterScroll.service.js +1 -1
  25. package/esm2015/gridster/lib/gridsterSwap.service.js +1 -1
  26. package/esm2015/gridster/lib/gridsterUtils.service.js +1 -1
  27. package/esm2015/lib/custom.notifier.options.js +1 -1
  28. package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +1 -1
  29. package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +197 -47
  30. package/esm2015/lib/ra.base.dashboard.filter.js +1 -1
  31. package/esm2015/lib/ra.base.dashboard.template.js +1 -1
  32. package/esm2015/lib/ra.dashbard.event.bus.js +1 -1
  33. package/esm2015/lib/ra.dashboard.module.js +1 -1
  34. package/esm2015/lib/ra.dashboard.responsive.service.js +1 -1
  35. package/esm2015/lib/ra.dashboard.service.js +1 -1
  36. package/esm2015/lib/ra.event.enum.js +1 -1
  37. package/esm2015/lib/ra.gridster.config.js +1 -1
  38. package/esm2015/public-api.js +1 -1
  39. package/esm2015/schneideress-dashboardframework.js +1 -1
  40. package/esm5/gridster/index.js +1 -1
  41. package/esm5/gridster/lib/gridster.component.js +1 -1
  42. package/esm5/gridster/lib/gridster.interface.js +1 -1
  43. package/esm5/gridster/lib/gridster.module.js +1 -1
  44. package/esm5/gridster/lib/gridsterCompact.service.js +1 -1
  45. package/esm5/gridster/lib/gridsterConfig.constant.js +1 -1
  46. package/esm5/gridster/lib/gridsterConfig.interface.js +1 -1
  47. package/esm5/gridster/lib/gridsterConfigS.interface.js +1 -1
  48. package/esm5/gridster/lib/gridsterDraggable.service.js +1 -1
  49. package/esm5/gridster/lib/gridsterEmptyCell.service.js +1 -1
  50. package/esm5/gridster/lib/gridsterItem.component.js +1 -1
  51. package/esm5/gridster/lib/gridsterItem.interface.js +1 -1
  52. package/esm5/gridster/lib/gridsterItemComponent.interface.js +1 -1
  53. package/esm5/gridster/lib/gridsterPreview.component.js +1 -1
  54. package/esm5/gridster/lib/gridsterPush.service.js +1 -1
  55. package/esm5/gridster/lib/gridsterPushResize.service.js +1 -1
  56. package/esm5/gridster/lib/gridsterRenderer.service.js +1 -1
  57. package/esm5/gridster/lib/gridsterResizable.service.js +1 -1
  58. package/esm5/gridster/lib/gridsterResizeEventType.interface.js +1 -1
  59. package/esm5/gridster/lib/gridsterScroll.service.js +1 -1
  60. package/esm5/gridster/lib/gridsterSwap.service.js +1 -1
  61. package/esm5/gridster/lib/gridsterUtils.service.js +1 -1
  62. package/esm5/lib/custom.notifier.options.js +1 -1
  63. package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +1 -1
  64. package/esm5/lib/ra-widget-container/ra.widget.container.component.js +226 -76
  65. package/esm5/lib/ra.base.dashboard.filter.js +1 -1
  66. package/esm5/lib/ra.base.dashboard.template.js +1 -1
  67. package/esm5/lib/ra.dashbard.event.bus.js +1 -1
  68. package/esm5/lib/ra.dashboard.module.js +1 -1
  69. package/esm5/lib/ra.dashboard.responsive.service.js +1 -1
  70. package/esm5/lib/ra.dashboard.service.js +1 -1
  71. package/esm5/lib/ra.event.enum.js +1 -1
  72. package/esm5/lib/ra.gridster.config.js +1 -1
  73. package/esm5/public-api.js +1 -1
  74. package/esm5/schneideress-dashboardframework.js +1 -1
  75. package/fesm2015/schneideress-dashboardframework.js +226 -76
  76. package/fesm2015/schneideress-dashboardframework.js.map +1 -1
  77. package/fesm5/schneideress-dashboardframework.js +255 -105
  78. package/fesm5/schneideress-dashboardframework.js.map +1 -1
  79. package/lib/ra-widget-container/ra.widget.container.component.d.ts +8 -7
  80. package/package.json +1 -1
  81. 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,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
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 !== _this.widgetDropdown.nativeElement) {
66
- _this.dropDownShown = false;
63
+ if (e.target.className) {
64
+ if (e.target.className != 'fal fa-ellipsis-v widget-menu-ellipse') {
65
+ _this.removeMenu();
66
+ }
67
67
  }
68
- if (_this.widgetDownload && e.target !== _this.widgetDownload.nativeElement) {
69
- _this.isDownloadChartVisible = false;
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.dropDownShown = !this.dropDownShown;
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
- * Hide dropdown on outside click
836
+ * @private
837
+ * @param {?} id
838
+ * @param {?} event
839
+ * @param {?=} params
782
840
  * @return {?}
783
841
  */
784
- RAWidgetContainer.prototype.hideDropDown = /**
785
- * Hide dropdown on outside click
842
+ RAWidgetContainer.prototype.addEventListener = /**
843
+ * @private
844
+ * @param {?} id
845
+ * @param {?} event
846
+ * @param {?=} params
786
847
  * @return {?}
787
848
  */
788
- function () {
789
- if (this.dropDownShown) {
790
- this.dropDownShown = false;
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
+ if (this.isDownloadIconVisible && this.isWidgetMgmnt) {
909
+ html += this.getHr();
910
+ }
911
+ if (this.isWidgetMgmnt) {
912
+ html += '<a id="wcWidgetDelete"><i class="fal fa-times" style="padding-left: 3px;color: red;"></i><span>';
913
+ html += this.deleteText;
914
+ html += '</span></a>';
915
+ }
791
916
  }
792
- this.isDownloadChartVisible = false;
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\r\n\r\n <div class=\"col-md-2\" style=\"cursor:default;padding-right: 0px;\">\r\n <div class=\"float-right\" style=\"display: flex;\">\r\n\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=\"dropdown\" style=\"width:10px;\">\r\n <div class=\"dropbtn title-bar-icon\">\r\n <i (click)=\"showDropDown()\" #widgetDropdown class=\"fal fa-ellipsis-v\"></i>\r\n </div>\r\n <div class=\"download-content dropdown-content widget-config-item\"\r\n [ngClass]=\"{'dropdown-click': dropDownShown}\" style=\"z-index: 1002;\">\r\n\r\n <div style=\"color: #9FA0A4;font-size: 12px;padding-top: 8px;padding-left: 12px;\">\r\n {{'Common.settings'|translate}}</div>\r\n\r\n <a style=\"padding-top: 10px;\" (click)=\"editWidget()\" *ngIf=\"isWidgetMgmnt\">\r\n <ra-tooltip [value]=\"editToolTipValue\" [width]=\"editToolTipWidth\">\r\n <i class=\"fal fa-edit\"></i>\r\n <span style=\"padding-left: 6px;\">{{editText}}</span>\r\n </ra-tooltip>\r\n </a>\r\n <a (click)=\"copyWidget()\" *ngIf=\"isWidgetMgmnt\">\r\n <ra-tooltip [value]=\"copyToolTipValue\" [width]=\"copyToolTipWidth\">\r\n <i class=\"fal fa-copy\"></i>\r\n <span style=\"padding-left: 10px;\">{{copyText}}</span>\r\n </ra-tooltip>\r\n </a>\r\n <a (click)=\"moveWidget()\" *ngIf=\"isWidgetMgmnt\">\r\n <ra-tooltip [value]=\"moveToolTipValue\" [width]=\"moveToolTipWidth\">\r\n <i class=\"fal fa-arrows-alt\"></i>\r\n <span style=\"padding-left: 9px;\">{{moveText}}</span>\r\n </ra-tooltip>\r\n </a>\r\n <a *ngIf=\"detailPageUrl\" (click)=\"visitPage()\"\r\n style=\"max-height: 30px;align-items: center;align-content: center; display: flex;\">\r\n <i style=\"padding-left: 4px;font-size: 27px !important;\" class=\"fal fa-angle-right\"></i>\r\n <span style=\"padding-left: 11px;margin-top: 2px;\">{{'Common.visitpage'|translate}}</span>\r\n </a>\r\n <hr class=\"hr\" style=\"padding-bottom: 9px;\">\r\n <span style=\"color: #9FA0A4;font-size: 12px;\"\r\n *ngIf=\"isDownloadIconVisible\">{{'Common.downloads'|translate}}</span>\r\n <div *ngIf=\"isChartDownloadVisible\" style=\"padding-top: 10px;\" class=\"chartDownload\">\r\n <a (click)=\"downloadIconClicked('PNG')\">\r\n <i class=\"fal fa-file-image\"></i>\r\n <span>{{'Common.png'|translate}}</span>\r\n </a>\r\n <a (click)=\"downloadIconClicked('JPEG')\">\r\n <i class=\"fal fa-file-image\"></i>\r\n <span>{{'Common.jpeg'|translate}}</span>\r\n </a>\r\n <a (click)=\"downloadIconClicked('PDF')\">\r\n <i class=\"fal fa-file-pdf\"></i>\r\n <span>{{'Common.pdf'|translate}}</span>\r\n </a>\r\n <a (click)=\"downloadIconClicked('SVG')\">\r\n <i class=\"fal fa-file-alt\"></i>\r\n <span>{{'Common.svg'|translate}}</span>\r\n </a>\r\n </div>\r\n <div *ngIf=\"isGridDownloadVisible\" class=\"gridDownload\">\r\n <a (click)=\"downloadIconClicked('CSV')\">\r\n <ra-tooltip [value]=\"excelToolTipValue\" [width]=\"excelToolTipWidth\">\r\n <i class=\"fal fa-download\"></i>\r\n <span>{{excelText}}</span>\r\n </ra-tooltip>\r\n </a>\r\n </div>\r\n <hr *ngIf=\"isDownloadIconVisible && isWidgetMgmnt\" class=\"hr\">\r\n <a (click)=\"deleteWidget()\" *ngIf=\"isWidgetMgmnt\">\r\n <ra-tooltip [value]=\"deleteToolTipValue\" [width]=\"deleteToolTipWidth\">\r\n <i class=\"fal fa-times\" style=\"padding-left: 3px;color: red;\"></i>\r\n <span>{{deleteText}}</span>\r\n </ra-tooltip>\r\n </a>\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>",
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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SUFHbEQsMENBQXFEOztJQUNyRCxzQ0FBeUI7O0lBQ3pCLG9EQUFnRDs7SUFDaEQsNkNBQXFDOztJQUNyQyx1Q0FBMkI7O0lBQzNCLHdDQUFvQzs7SUFDcEMseUNBQXlCOztJQUN6QiwwQ0FBNkI7O0lBQzdCLG9DQUF1Qjs7SUFDdkIsMENBQXNDOzs7OztJQU0xQiw2Q0FBNEM7Ozs7O0lBQ3RELHVDQUFzQzs7Ozs7SUFDdEMsNkNBQTRDOzs7OztJQUM1QyxtQ0FBc0I7Ozs7O0lBQ3RCLHFDQUFpQzs7Ozs7SUFDakMscUNBQTJCOzs7OztJQUMzQixnREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgU2ltcGxlQ2hhbmdlLCBPbkRlc3Ryb3ksIE5nWm9uZSwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSYURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQsIFJBRXZlbnRLZXkgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgSUFwcENvbmZpZywgSVdpZGdldENvbmZpZ0ZpbHRlciwgSVdpZGdldEluZm8sIFJBRG93bmxvYWRUeXBlLCBSQURvd25sb2FkT3B0aW9uLCBSYVdpZGdldGxvY2tTdGF0dXMsIFdpZGdldFZpZXdTdGF0ZSwgSWNvbmZpZ0NoYW5nZXMgfSBmcm9tICdAc2NobmVpZGVyZXNzL3dpZGdldGZyYW1ld29yayc7XHJcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICdhbmd1bGFyLW5vdGlmaWVyJztcclxuaW1wb3J0IHsgUkFUcmFuc2xhdGVTZXJ2aWNlLCBSQVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnQHNjaG5laWRlcmVzcy9yYS1jb21tb24nO1xyXG5cclxuZGVjbGFyZSB2YXIgalF1ZXJ5OiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS13aWRnZXQtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJBV2lkZ2V0Q29udGFpbmVyIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgc2hvd1BhbmVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB3aWRnZXRFbGVtZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSBjb25maWdDaGFuZ2VkOiBhbnk7XHJcbiAgcHVibGljIHdpZGdldEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBsb2NrQ2xhc3M6IHN0cmluZyA9IFwidW5sb2NrZWRcIjtcclxuICBwdWJsaWMgbG9ja1N0YXR1czogUmFXaWRnZXRsb2NrU3RhdHVzID0gUmFXaWRnZXRsb2NrU3RhdHVzLlVubG9ja2VkO1xyXG4gIHB1YmxpYyBpc0Rvd25sb2FkSWNvblZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNDaGFydERvd25sb2FkVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dyaWREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZG93bmxvYWRJY29uVHlwZTogUkFEb3dubG9hZFR5cGU7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0dsb2JhbEZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICAnO1xyXG4gIHB1YmxpYyB0b29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBsb2NrRGV0YWlsczogYW55O1xyXG4gIHB1YmxpYyBsb2NrVGVtcGxhdGVJbmZvOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGNvcHlUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBkZWxldGVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZWRpdFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBjb3B5VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIG1vdmVUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZXhjZWxUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZGVsZXRlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGVkaXRUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbW92ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGV4Y2VsVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgd2lkZ2V0U2V0dGluZ3M6IGFueTtcclxuICBwdWJsaWMgbm9QYWRkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzTW91c2VIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2N0bFdpZGdldCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjdGxXaWRnZXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2lkZ2V0RHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgd2lkZ2V0RHJvcGRvd246IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnd2NXcmFwcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdjV3JhcHBlcjogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCd3aWRnZXQtaW5zdGFuY2UtaWQnKSB3aWRnZXRJbnN0YW5jZUlkOiBudW1iZXI7XHJcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XHJcbiAgQElucHV0KCdkYXRhJykgZGF0YTogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnd2lkZ2V0LWhlaWdodCcpIGhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgnZ3JpZC1jZWxsLWhlaWdodCcpIGdyaWRDZWxsSGVpZ2h0OiBudW1iZXI7XHJcblxyXG5cclxuICBAT3V0cHV0KCkgd2lkZ2V0RGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIHB1YmxpYyBsb2NrVGl0bGU6IHN0cmluZztcclxuICBwdWJsaWMgaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgd2lkZ2V0RW1wdHlTdGF0ZTogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRvbVJlc2l6ZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIGxvY2tWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxvY2tlZEZpZWxkczogYW55O1xyXG4gIHB1YmxpYyBkZXRhaWxQYWdlVXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIGJhc2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgaXNXaWRnZXRNZ21udDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZG9tLXJlc2l6ZWQnKVxyXG4gIHNldCBzZXRSZXNpemVkKHJlc2l6ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByYVBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAhPSAnZmFsIGZhLWVsbGlwc2lzLXYgd2lkZ2V0LW1lbnUtZWxsaXBzZScpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2lkZ2V0Vmlld1N0YXRlKCkgeyByZXR1cm4gV2lkZ2V0Vmlld1N0YXRlOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucmFQZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XHJcblxyXG4gICAgICBsZXQgZmlsdGVyT2JqID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5nbG9iYWxGaWx0ZXIpO1xyXG4gICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCAhPSBmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZClcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLndpZHRoICYmIGNoYW5nZXMud2lkdGguY3VycmVudFZhbHVlICE9IGNoYW5nZXMud2lkdGgucHJldmlvdXNWYWx1ZSB8fFxyXG4gICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcclxuICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgc2l6ZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgIHNpemUuY2VsbEhlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGNvbmZpZ0RhdGEgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKCk7XHJcbiAgICAgIGlmIChjb25maWdEYXRhKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyID0gY29uZmlnRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbmZpZ0ZpbHRlcikge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldFRpdGxlICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vIHRoaXMuZGFzaGJvYXJkU2VydmljZS5tb3ZlV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIENvcHkgQ3VycmVudCB3aWRnZXQgd2l0aCBzYW1lIGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBjb3B5V2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Db3B5V2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvL3RoaXMuZGFzaGJvYXJkU2VydmljZS5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpc2l0UGFnZSgpIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuZ2V0SG9zdFVybCgpO1xyXG4gICAgbGV0IHVybCA9IHRoaXMuYmFzZVVybCArIHRoaXMuZGV0YWlsUGFnZVVybDtcclxuICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpXHJcbiAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SG9zdFVybCgpIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKHdpbmRvdy5sb2NhdGlvbi5wb3J0ID8gJzonICsgd2luZG93LmxvY2F0aW9uLnBvcnQgOiAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKHdpZGdldEluZm8pIHtcclxuICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgIGlmICh0aGlzLmdyaWRDZWxsSGVpZ2h0ID4gMCkge1xyXG4gICAgICB0aGlzLmRhdGEud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKHRydWUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTgnKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbmZpZ0ZpbHRlcihjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICB3aWRnZXRJbmZvOiB0aGlzLmRhdGEud2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnOiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG5cclxuICAvKiogIFRvIGxvYWQgZXh0ZXJuYWwgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHdpZGdldCBjb250YWluZXIqL1xyXG4gIGFzeW5jIGxvYWRXaWRnZXQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSlcclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgdGhpcy5hcHBsYXlXaWRnZXRTZXR0aW5ncyh0aGlzLndpZGdldFNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGV0YWlsUGFnZVVybCA9IHdpZGdldEluZm8uZGV0YWlsUGFnZVVybDtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXIgPSB0aGlzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWUsIGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQod2lkZ2V0SW5mby5jdXN0b21UYWcpO1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi1kYXRhLWxvYWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsKVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29uZmlnLWVkaXQtY2xpY2tlZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuYWJsZS1kZWZhdWx0LXN0YXRlJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zZXRFbXB0eVN0YXRlKGUuZGV0YWlsKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGl0bGVMaW5lRW5hYmxlZCkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZWRpdCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmNvcHknKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJylcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLm1vdmUnKTtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVGV4dCA9ICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5leGNlbCcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRlbGV0ZScpLnN1YnN0cmluZygwLCA2KSArICcuLi4nKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVRvb2xUaXBXaWR0aCA9IFwiMzAwcHhcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLmFwcENvbmZpZyA9IHRoaXMuYXBwQ29uZmlnO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIud2lkZ2V0SW5mbyA9IHdpZGdldEluZm87XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWdDaGFuZ2VzID0gdGhpcy5nZXRDb25maWdDaGFuZ2VzKGZhbHNlKTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8ud2lkZ2V0TmFtZSA9IHdpZGdldEluZm8ud2lkZ2V0TmFtZTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQubG9hZENvbnRlbnQod2lkZ2V0Q29uZmlnRmlsdGVyKTtcclxuICAgICAgICAgICAgYXdhaXQgd2lkZ2V0Q29udGFpbmVyLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXREb3dubG9hZEljb24oKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3RsV2lkZ2V0Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy53aWRnZXRFbGVtZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHNldCBEZWZhdWx0IFN0YXRlIGZvciB0aGUgd2lkZ2V0IHdoZW4gaXQgaXMgbm90IGNvbmZpZ3VyZWQgKi9cclxuICBzZXROb3RDb25maWd1cmVkU3RhdGUod2lkZ2V0SW5mbzogSVdpZGdldEluZm8sIGZvcmNlRW5hYmxlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICgod2lkZ2V0SW5mby5zaG93RGVmYXVsdFN0YXRlICYmICh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnID09IFwiXCIgfHwgT2JqZWN0LmtleXMoSlNPTi5wYXJzZSh3aWRnZXRJbmZvLndpZGdldENvbmZpZ0luZm8uY29uZmlnKSkubGVuZ3RoID09IDApKSB8fCAoZm9yY2VFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlDb25maWcudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLndpZGdldEVtcHR5U3RhdGUgPSAnJztcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqVG8gY29uZmlndXJlIGVtcHR5IHN0YXRlIGZvciB0aGUgd2lkZ2V0ICAqL1xyXG4gIHNldEVtcHR5U3RhdGUod2lkZ2V0U3RhdGU6IGFueSkge1xyXG4gICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gd2lkZ2V0U3RhdGUud2lkZ2V0Vmlld1N0YXRlO1xyXG4gICAgdGhpcy5pc0dsb2JhbEZpbHRlckFwcGxpZWQgPSB3aWRnZXRTdGF0ZS5pc0dsb2JhbEZpbHRlckFwcGxpZWQ7XHJcbiAgICBpZiAod2lkZ2V0U3RhdGUgIT0gV2lkZ2V0Vmlld1N0YXRlLm5vcm1hbCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHdpZGdldFN0YXRlKSB7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnOlxyXG4gICAgICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHRoaXMuZGF0YS53aWRnZXRJbmZvLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZW1wdHlEYXRhOlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lcnJvcjpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ0NoYW5nZXMoY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBsZXQgY29uZmlnQ2hhbmdlcyA9IDxJY29uZmlnQ2hhbmdlcz57XHJcbiAgICAgIGlzQ29uZmlnVXBkYXRlZDogY29uZmlnQ2hhbmdlZCxcclxuICAgICAgdXBkYXRlZENvbmZpZ1Byb3BlcnR5OiBbXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ0NoYW5nZXM7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gcmVmcmVzaCB3aWRnZXQgb24gaW5wdXQgY29uZmlnIGNoYW5nZXMgKi9cclxuICBhc3luYyByZWZyZXNoV2lkZ2V0KHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHdpZGdldEluZm8ucm93SGVpZ2h0ID0gdGhpcy5ncmlkQ2VsbEhlaWdodDtcclxuICAgIHRoaXMuc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm8pO1xyXG4gICAgbGV0IHdpZGdldENvbnRhaW5lckNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXIgPSA8SVdpZGdldENvbmZpZ0ZpbHRlcj57XHJcbiAgICAgIGNvbmZpZzogd2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmdsb2JhbEZpbHRlcixcclxuICAgICAgYXBwQ29uZmlnOiB0aGlzLmFwcENvbmZpZyxcclxuICAgICAgd2lkZ2V0SW5mbzogd2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZGdldENvbnRhaW5lckNvbnRleHQuaXNXaWRnZXRMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0LndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0TG9jayh3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZU92ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy50b29sVGlwVmFsdWUgPSAnICc7XHJcbiAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGgpIHtcclxuICAgICAgdGhpcy50b29sVGlwVmFsdWUgPSBlbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgdGhpcy50b29sVGlwV2lkdGggPSAnMzAwcHgnO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzBweCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldExvY2soY29uZmlnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubG9ja1RlbXBsYXRlSW5mbyA9IHRoaXMud2lkZ2V0RWxlbWVudC5sb2FkTG9ja0luZm8oKTtcclxuICAgIHZhciBjb25maWdPYmo6IGFueTtcclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgY29uZmlnT2JqID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICBpZiAoY29uZmlnT2JqICYmIGNvbmZpZ09iai5Mb2NrcyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNQYXJ0aWNpcGFudExvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNTb3VyY2VMb2NrZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSBbXTtcclxuICAgICAgICAgIGlmIChjb25maWdPYmouTG9ja3MuSXNEYXRlTG9ja2VkIHx8IGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVzTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGVSYW5nZScpKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EaXZpc2lvbk9yR3JvdXBvclNpdGUnKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKVxyXG4gICAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzLnB1c2godGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLkRhdGFTdHJlYW0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2NrRGV0YWlscyA9IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldERvd25sb2FkSWNvbigpIHtcclxuICAgIGxldCBkb3dubG9hZFR5cGUgPSBhd2FpdCB0aGlzLndpZGdldEVsZW1lbnQuZ2V0RG93bmxvYWRUeXBlKCk7XHJcbiAgICB0aGlzLmRvd25sb2FkSWNvblR5cGUgPSBkb3dubG9hZFR5cGU7XHJcbiAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgaWYgKGRvd25sb2FkVHlwZSAhPSBSQURvd25sb2FkVHlwZS5Ob25lKSB7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG93bmxvYWRUeXBlID09IFJBRG93bmxvYWRUeXBlLkNoYXJ0KSB7XHJcbiAgICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5HcmlkKSB7XHJcbiAgICAgIHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZG93bmxvYWRJY29uQ2xpY2tlZCh0eXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwiQ1NWXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uQ1NWKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlBOR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlBORyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQREZcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QREYpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU1ZHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uU1ZHKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkpQRUdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5KUEVHKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlTWVudSgpIHtcclxuICAgIGpRdWVyeSgnI3JhLWRiLXdpZGdldC1tZW51JykucmVtb3ZlKCk7XHJcbiAgfVxyXG4gIC8qKlNob3cgZHJvcGRvd24gb24gZ2VhciBpY29uIGNsaWNrICAqL1xyXG4gIHB1YmxpYyBzaG93RHJvcERvd24oZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERvd25sb2FkSWNvbigpO1xyXG5cclxuICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCB0YXJnZXRQb3MgPSBlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgbGV0IHN0eWxlOiBzdHJpbmcgPSBcInBvc2l0aW9uOmZpeGVkO3RvcDpcIiArICh0YXJnZXRQb3MueSArIDE1KSArICdweCcgKyAnO2xlZnQ6JyArIChlLnBhZ2VYIC0gMTIyKSArICdweDt6LWluZGV4OjEwMDA7JztcclxuICAgICAgbGV0IGh0bWwgPSB0aGlzLmdldENvbnRlbnh0SHRtbChzdHlsZSk7XHJcblxyXG4gICAgICBqUXVlcnkoaHRtbCkuYXBwZW5kVG8oJ2JvZHknKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRWRpdFdpZGdldCcsIHRoaXMuZWRpdFdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0NvcHlXaWRnZXQnLCB0aGlzLmNvcHlXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NNb3ZlV2lkZ2V0JywgdGhpcy5tb3ZlV2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djV2lkZ2V0RGVsZXRlJywgdGhpcy5kZWxldGVXaWRnZXQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRldGFpbFBhZ2VVcmwpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djVmlzaXRXaWRnZXQnLCB0aGlzLnZpc2l0UGFnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZFBuZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ1BORycpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NEb3dubG9hZEpwZycsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0pQRUcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQZGYnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQREYnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRTdmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdTVkcnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRFeGNlbCcsIHRoaXMuZG93bmxvYWRJY29uQ2xpY2tlZCwgJ0NTVicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYS1kYi13aWRnZXQtbWVudScpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93Lm1vdXNlT3ZlcldpZGdldE1lbnUgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGlmICghd2luZG93LmdyaWRzdGVySXRlbUVudGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcihpZDogc3RyaW5nLCBldmVudDogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICBldmVudC5jYWxsKHRoaXMsIHBhcmFtcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZW54dEh0bWwoc3R5bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWw6IHN0cmluZyA9ICc8ZGl2IGlkPVwicmEtZGItd2lkZ2V0LW1lbnVcIicgKyAnc3R5bGU9XCInICsgc3R5bGUgKyAnXCIgY2xhc3M9XCJkb3dubG9hZC1jb250ZW50IGRyb3Bkb3duLWNvbnRlbnQgd2lkZ2V0LWNvbmZpZy1pdGVtIGRyb3Bkb3duLWNsaWNrXCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAyO1wiPic7XHJcbiAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwiY29sb3I6ICM5RkEwQTQ7Zm9udC1zaXplOiAxMnB4O3BhZGRpbmctdG9wOiA4cHg7cGFkZGluZy1sZWZ0OiAxMnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zZXR0aW5ncycpICsgJzwvZGl2Pic7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NFZGl0V2lkZ2V0JywgJ2ZhbCBmYS1lZGl0JywgdGhpcy5lZGl0VGV4dCk7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0NvcHlXaWRnZXQnLCAnZmFsIGZhLWNvcHknLCB0aGlzLmNvcHlUZXh0KTtcclxuICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djTW92ZVdpZGdldCcsICdmYWwgZmEtYXJyb3dzLWFsdCcsIHRoaXMubW92ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICBodG1sICs9ICc8YSBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwcHg7YWxpZ24taXRlbXM6IGNlbnRlcjthbGlnbi1jb250ZW50OiBjZW50ZXI7IGRpc3BsYXk6IGZsZXg7XCIgaWQ9XCJ3Y1Zpc2l0V2lkZ2V0XCI+JztcclxuICAgICAgaHRtbCArPSAnPGkgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDRweDtmb250LXNpemU6IDI3cHggIWltcG9ydGFudDtcIiBjbGFzcz1cImZhbCBmYS1hbmdsZS1yaWdodFwiPjwvaT4gJztcclxuICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDExcHg7bWFyZ2luLXRvcDogMnB4O1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgICAgaHRtbCArPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24udmlzaXRwYWdlJyk7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3Bhbj48L2E+JztcclxuICAgIH1cclxuICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpOztcclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSkge1xyXG4gICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kb3dubG9hZHMnKTtcclxuICAgICAgaHRtbCArPSAnPC9zcGFuPic7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NoYXJ0RG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cInBhZGRpbmctdG9wOiAxMHB4O1wiIGNsYXNzPVwiY2hhcnREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQbmcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucG5nJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkSnBnJywgJ2ZhbCBmYS1maWxlLWltYWdlJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmpwZWcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRQZGYnLCAnZmFsIGZhLWZpbGUtcGRmJywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnBkZicpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFN2ZycsICdmYWwgZmEtZmlsZS1hbHQnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uc3ZnJykpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImdyaWREb3dubG9hZFwiPic7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRFeGNlbCcsICdmYWwgZmEtZG93bmxvYWQnLCB0aGlzLmV4Y2VsVGV4dCk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgJiYgdGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEhyKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICAgIGh0bWwgKz0gJzxhIGlkPVwid2NXaWRnZXREZWxldGVcIj48aSBjbGFzcz1cImZhbCBmYS10aW1lc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAzcHg7Y29sb3I6IHJlZDtcIj48L2k+PHNwYW4+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZGVsZXRlVGV4dDtcclxuICAgICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcigpIHtcclxuICAgIHJldHVybiAnPGhyIGNsYXNzPVwiaHJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiA1cHg7XCI+JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbEZvckJ1dHRvbihpZDogc3RyaW5nLCBmb250Q2xhc3M6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9ICc8YSBpZD1cIicgKyBpZCArICdcIj48aSBzdHlsZT1cIndpZHRoOjE2cHhcIiBjbGFzcz1cIicgKyBmb250Q2xhc3MgKyAnXCI+PC9pPiA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRleHQ7XHJcbiAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdldFBhcnNlZENvbmZpZyhjb25maWc6IGFueSkge1xyXG4gICAgbGV0IHBhcnNlZENvbmZpZzogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaHtcclxuICAgICAgICAgIHBhcnNlZENvbmZpZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFyc2VkQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBsYXlXaWRnZXRTZXR0aW5ncyhzZXR0aW5nczogYW55KSB7XHJcbiAgICBpZiAoc2V0dGluZ3MuTm9QYWRkaW5nKVxyXG4gICAgICB0aGlzLm5vUGFkZGluZyA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSBmYWxzZVxyXG4gIH1cclxufVxyXG4iXX0=