@sunbird-cb/consumption 0.0.47 → 0.0.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sunbird-cb-consumption.umd.js +184 -196
- package/bundles/sunbird-cb-consumption.umd.js.map +1 -1
- package/bundles/sunbird-cb-consumption.umd.min.js +1 -1
- package/bundles/sunbird-cb-consumption.umd.min.js.map +1 -1
- package/esm2015/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +22 -30
- package/esm2015/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.js +7 -3
- package/esm2015/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.js +7 -3
- package/esm2015/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +2 -2
- package/esm2015/lib/_common/cards/cards.component.js +2 -2
- package/esm2015/lib/_common/cards/provider-card/provider-card.component.js +49 -136
- package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +102 -11
- package/esm5/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +24 -45
- package/esm5/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.js +7 -3
- package/esm5/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.js +7 -3
- package/esm5/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +2 -2
- package/esm5/lib/_common/cards/cards.component.js +2 -2
- package/esm5/lib/_common/cards/provider-card/provider-card.component.js +50 -137
- package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +102 -12
- package/fesm2015/sunbird-cb-consumption.js +181 -179
- package/fesm2015/sunbird-cb-consumption.js.map +1 -1
- package/fesm5/sunbird-cb-consumption.js +184 -196
- package/fesm5/sunbird-cb-consumption.js.map +1 -1
- package/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.d.ts +4 -1
- package/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.d.ts +1 -0
- package/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.d.ts +1 -0
- package/lib/_common/cards/provider-card/provider-card.component.d.ts +9 -7
- package/package.json +1 -1
- package/sunbird-cb-consumption.metadata.json +1 -1
package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js
CHANGED
|
@@ -503,9 +503,15 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
503
503
|
let tabResults = [];
|
|
504
504
|
/** @type {?} */
|
|
505
505
|
const queryParams = _.get(strip.request.enrollmentList, 'queryParams');
|
|
506
|
+
// if (queryParams && queryParams.batchDetails) {
|
|
507
|
+
// if (!queryParams.batchDetails.includes('&retiredCoursesEnabled=true')) {
|
|
508
|
+
// queryParams.batchDetails += '&retiredCoursesEnabled=true'
|
|
509
|
+
// }
|
|
510
|
+
// }
|
|
506
511
|
if (this.configSvc.userProfile) {
|
|
507
512
|
userId = this.configSvc.userProfile.userId;
|
|
508
513
|
}
|
|
514
|
+
// this.userSvc.resetTime('enrollmentService')
|
|
509
515
|
// tslint:disable-next-line: deprecation
|
|
510
516
|
this.userSvc.fetchUserBatchList(userId, queryParams).subscribe((/**
|
|
511
517
|
* @param {?} result
|
|
@@ -633,14 +639,55 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
633
639
|
/** @type {?} */
|
|
634
640
|
const inprogress = [];
|
|
635
641
|
/** @type {?} */
|
|
636
|
-
const completed = []
|
|
642
|
+
const completed = []
|
|
643
|
+
// array.forEach((e: any, idx: number, arr: any[]) => (customFilter(e, idx, arr) ? inprogress : completed).push(e))
|
|
644
|
+
;
|
|
645
|
+
// array.forEach((e: any, idx: number, arr: any[]) => (customFilter(e, idx, arr) ? inprogress : completed).push(e))
|
|
637
646
|
array.forEach((/**
|
|
638
647
|
* @param {?} e
|
|
639
648
|
* @param {?} idx
|
|
640
649
|
* @param {?} arr
|
|
641
650
|
* @return {?}
|
|
642
651
|
*/
|
|
643
|
-
(e, idx, arr) =>
|
|
652
|
+
(e, idx, arr) => {
|
|
653
|
+
/** @type {?} */
|
|
654
|
+
const status = e.status ? ((/** @type {?} */ (e.status))).toLowerCase() : '';
|
|
655
|
+
/** @type {?} */
|
|
656
|
+
const statusRetired = status === 'retired';
|
|
657
|
+
if (customFilter(e, idx, arr)) {
|
|
658
|
+
if (!statusRetired) {
|
|
659
|
+
inprogress.push(e);
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
else {
|
|
663
|
+
completed.push(e);
|
|
664
|
+
}
|
|
665
|
+
}));
|
|
666
|
+
// Sort the completed array with 'Live' status first and 'Retired' status second
|
|
667
|
+
completed.sort((/**
|
|
668
|
+
* @param {?} a
|
|
669
|
+
* @param {?} b
|
|
670
|
+
* @return {?}
|
|
671
|
+
*/
|
|
672
|
+
(a, b) => {
|
|
673
|
+
/** @type {?} */
|
|
674
|
+
const statusA = a.status ? a.status.toLowerCase() : '';
|
|
675
|
+
/** @type {?} */
|
|
676
|
+
const statusB = b.status ? b.status.toLowerCase() : '';
|
|
677
|
+
if (statusA === 'live' && statusB !== 'live') {
|
|
678
|
+
return -1;
|
|
679
|
+
}
|
|
680
|
+
if (statusA !== 'live' && statusB === 'live') {
|
|
681
|
+
return 1;
|
|
682
|
+
}
|
|
683
|
+
if (statusA === 'retired' && statusB !== 'retired') {
|
|
684
|
+
return 1;
|
|
685
|
+
}
|
|
686
|
+
if (statusA !== 'retired' && statusB === 'retired') {
|
|
687
|
+
return -1;
|
|
688
|
+
}
|
|
689
|
+
return 0;
|
|
690
|
+
}));
|
|
644
691
|
return [
|
|
645
692
|
{ value: 'inprogress', widgets: this.transformContentsToWidgets(inprogress, strip) },
|
|
646
693
|
{ value: 'completed', widgets: this.transformContentsToWidgets(completed, strip) }
|
|
@@ -739,17 +786,44 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
739
786
|
this.enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
|
|
740
787
|
/** @type {?} */
|
|
741
788
|
let filteredArray = [];
|
|
789
|
+
/** @type {?} */
|
|
790
|
+
let now = new Date().getTime();
|
|
742
791
|
content.forEach((/**
|
|
743
792
|
* @param {?} data
|
|
744
793
|
* @return {?}
|
|
745
794
|
*/
|
|
746
795
|
(data) => {
|
|
747
796
|
if (this.enrollmentMapData[data.identifier]) {
|
|
748
|
-
data
|
|
749
|
-
|
|
750
|
-
|
|
797
|
+
if (this.enrollmentMapData[data.identifier].status !== 2 && this.enrollmentMapData[data.identifier].batch) {
|
|
798
|
+
/** @type {?} */
|
|
799
|
+
const enrollData = this.enrollmentMapData[data.identifier].batch;
|
|
800
|
+
/** @type {?} */
|
|
801
|
+
let endDate = new Date(enrollData.endDate).getTime()
|
|
802
|
+
// let endDate:any = '2024-07-7T00:00:00.000Z'
|
|
803
|
+
;
|
|
804
|
+
// let endDate:any = '2024-07-7T00:00:00.000Z'
|
|
805
|
+
/** @type {?} */
|
|
806
|
+
let timeDuration = endDate - now;
|
|
807
|
+
if (timeDuration > 0) {
|
|
808
|
+
data['batch'] = this.enrollmentMapData[data.identifier].batch;
|
|
809
|
+
data['completionPercentage'] = this.enrollmentMapData[data.identifier].completionPercentage;
|
|
810
|
+
filteredArray.push(data);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
751
813
|
}
|
|
752
814
|
}));
|
|
815
|
+
filteredArray = filteredArray.sort((/**
|
|
816
|
+
* @param {?} a
|
|
817
|
+
* @param {?} b
|
|
818
|
+
* @return {?}
|
|
819
|
+
*/
|
|
820
|
+
(a, b) => {
|
|
821
|
+
/** @type {?} */
|
|
822
|
+
const dateA = new Date(a.batch.startDate || 0);
|
|
823
|
+
/** @type {?} */
|
|
824
|
+
const dateB = new Date(b.batch.startDate || 0);
|
|
825
|
+
return dateB - dateA;
|
|
826
|
+
}));
|
|
753
827
|
this.processStrip(strip, this.transformContentsToWidgets(filteredArray, strip), 'done', calculateParentStatus, viewMoreUrl);
|
|
754
828
|
clearInterval(this.enrollInterval);
|
|
755
829
|
}
|
|
@@ -1778,7 +1852,15 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
1778
1852
|
*/
|
|
1779
1853
|
results => {
|
|
1780
1854
|
/** @type {?} */
|
|
1781
|
-
|
|
1855
|
+
let showViewMore;
|
|
1856
|
+
if (results.result.data) {
|
|
1857
|
+
showViewMore = Boolean(results.result.data && results.result.data.orgList.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
|
|
1858
|
+
}
|
|
1859
|
+
else if (results.result.content) {
|
|
1860
|
+
/** @type {?} */
|
|
1861
|
+
let featuredProvider = JSON.parse(results.result.content.featuredProviders || '[]');
|
|
1862
|
+
showViewMore = Boolean(featuredProvider && featuredProvider.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
|
|
1863
|
+
}
|
|
1782
1864
|
/** @type {?} */
|
|
1783
1865
|
const viewMoreUrl = showViewMore
|
|
1784
1866
|
? {
|
|
@@ -1824,6 +1906,9 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
1824
1906
|
formedUrl = apiUrl.replace('<playlistKey>', this.providerId + id);
|
|
1825
1907
|
formedUrl = formedUrl.replace('<orgID>', this.providerId);
|
|
1826
1908
|
}
|
|
1909
|
+
else if (apiUrl.indexOf('<doId>') >= 0) {
|
|
1910
|
+
formedUrl = apiUrl.replace('<doId>', this.environment.providerDataKey);
|
|
1911
|
+
}
|
|
1827
1912
|
return formedUrl;
|
|
1828
1913
|
}
|
|
1829
1914
|
/**
|
|
@@ -1983,7 +2068,14 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
1983
2068
|
if (response && response.results.result.content) {
|
|
1984
2069
|
/** @type {?} */
|
|
1985
2070
|
let content = response.results.result.content;
|
|
1986
|
-
|
|
2071
|
+
if (strip.key === 'providers') {
|
|
2072
|
+
/** @type {?} */
|
|
2073
|
+
let featuredProviders = JSON.parse(content.featuredProviders || '[]');
|
|
2074
|
+
this.processStrip(strip, this.transformAllContentsToWidgets(featuredProviders, strip), 'done', calculateParentStatus, response);
|
|
2075
|
+
}
|
|
2076
|
+
else {
|
|
2077
|
+
this.processStrip(strip, this.transformAllContentsToWidgets(content, strip), 'done', calculateParentStatus, response);
|
|
2078
|
+
}
|
|
1987
2079
|
}
|
|
1988
2080
|
else {
|
|
1989
2081
|
this.processStrip(strip, [], 'error', calculateParentStatus, null);
|
|
@@ -2006,7 +2098,6 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
2006
2098
|
fetchCiosContentData(strip, calculateParentStatus = true) {
|
|
2007
2099
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
2008
2100
|
if (strip.request && strip.request.ciosContent && Object.keys(strip.request.ciosContent).length) {
|
|
2009
|
-
debugger;
|
|
2010
2101
|
/** @type {?} */
|
|
2011
2102
|
let originalFilters = [];
|
|
2012
2103
|
if (strip.request &&
|
|
@@ -2053,8 +2144,8 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
|
|
|
2053
2144
|
ContentStripWithTabsLibComponent.decorators = [
|
|
2054
2145
|
{ type: Component, args: [{
|
|
2055
2146
|
selector: 'sb-uic-content-strip-with-tabs',
|
|
2056
|
-
template: "<ng-container *ngIf=\"!contentAvailable; else otherTemplate\"></ng-container>\n<ng-template #otherTemplate>\n <!-- <div *ngIf=\"showParentLoader\" class=\"text-center my-2\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div> -->\n <ng-container *ngIf=\"showParentError\" [sbUiResolverWidget]=\"widgetData.errorWidget\"></ng-container>\n <ng-container *ngIf=\"showParentNoData\" [sbUiResolverWidget]=\"widgetData.noDataWidget\"></ng-container>\n <ng-container *ngFor=\"let key of stripsKeyOrder; let i = index; trackBy: identify\">\n <ng-container *ngIf=\"isStripShowing(stripsResultDataMap[key])\">\n <a name=\"{{stripsResultDataMap[key]?.stripTitle}}\" [class]=\"key\">\n <div *ngIf=\"stripsResultDataMap && (getLength(stripsResultDataMap[key]) ||\n stripsResultDataMap[key]?.showOnNoData ||\n stripsResultDataMap[key]?.showOnLoader ||\n stripsResultDataMap[key]?.showOnError)\n \" [ngClass]=\"\n !widgetData?.isChannelStrip ? 'xs:px-8 sx:px-10ss' : i > 0 ? 'mt-12' : ''\n \" [id]=\"key\" [ngClass]=\"!widgetData?.isChannelStrip ? margin-bottom-custom : margin-bottom-xs\">\n <div [ngClass]=\"{ pad: stripsResultDataMap[key]?.stripBackground }\"\n [ngStyle]=\"{ 'background-color': stripsResultDataMap[key]?.stripBackground }\">\n <div class=\"flex flex-col pl-4 pr-4 md:pr-0 md:pl-0 \" [ngClass]=\"\n !widgetData?.isChannelStrip\n ? ''\n : stripsResultDataMap[key]?.stripTitle\n ? 'mb-8'\n : ''\n \">\n <div class=\"flex flex-1 items-center\">\n <p class=\"mat-subheading-1 margin-remove inline-block \" *ngIf=\"stripsResultDataMap[key]?.stripTitle\">\n <span class=\"capitalize\" *ngIf=\"stripsResultDataMap[key]?.disableTranslate\">\n {{stripsResultDataMap[key]?.stripTitle}}\n </span>\n <span *ngIf=\"!stripsResultDataMap[key]?.disableTranslate\">\n {{ translateLabels(stripsResultDataMap[key]?.stripTitle, 'home') }}\n </span>\n </p>\n\n <button *ngIf=\"stripsResultDataMap[key]?.stripInfo?.icon\" type=\"button\" mat-icon-button\n (click)=\"toggleInfo(stripsResultDataMap[key])\" i18n-matTooltip matTooltip=\"info\"\n class=\"margin-left-xs\">\n <mat-icon>{{ stripsResultDataMap[key]?.stripInfo?.icon.icon }}</mat-icon>\n </button>\n <a *ngIf=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [routerLink]=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [queryParams]=\"stripsResultDataMap[key]?.stripTitleLink?.link?.queryParams\">\n <mat-icon class=\"ws-mat-primary-primary-text ws-mat-default-text\" [color]=\"'accent'\">{{\n stripsResultDataMap[key]?.stripTitleLink?.icon }}</mat-icon>\n </a>\n <span class=\"spacer\"></span>\n <!-- viewAll start-->\n <div *ngIf=\"checkCondition(widgetData , stripsResultDataMap[key])\"\n class=\"ml-4 pl-2 view-more ws-mat-default-text\">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1 cursor-pointer\" \n (click)=\"raiseTelemetry(stripsResultDataMap[key]);redirectViewAll(stripsResultDataMap[key], stripsResultDataMap[key]?.viewMoreUrl?.path, stripsResultDataMap[key]?.viewMoreUrl?.queryParams )\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n <!-- viewAll end-->\n </div>\n <button mat-icon-button (click)=\"setHiddenForStrip(key)\" *ngIf=\"stripsResultDataMap[key]?.canHideStrip\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"stripsResultDataMap[key]?.mode === 'accordion' && isMobile\"\n (click)=\"showAccordionData = !showAccordionData\">{{ showAccordionData ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"checkVisible(stripsResultDataMap[key])\">\n <ng-container [sbUiResolverWidget]=\"getdata(stripsResultDataMap[key])\">\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnNoData\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.noDataWidget\"></ng-container>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnError\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.errorWidget\"></ng-container>\n <!-- IF no errors then proceed to show tabs or non tabs strip -->\n <ng-container *ngIf=\"!stripsResultDataMap[key]?.showOnNoData && !stripsResultDataMap[key]?.showOnError\">\n <ng-container *ngIf=\"stripsResultDataMap[key].tabs && stripsResultDataMap[key].tabs.length\">\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"getSelectedIndex(stripsResultDataMap[key], key)\"\n class=\"mat-tab-labels w-full strips-tabgroup\" dynamicHeight\n (selectedTabChange)=\"tabClicked($event, stripsResultDataMap[key], key)\">\n <mat-tab label=\"{{tab?.label}}\" *ngFor=\"let tab of stripsResultDataMap[key].tabs; let last = last;\">\n <ng-template mat-tab-label>\n <span>{{ translateLabels(tab?.label, 'home') }} </span>\n <span *ngIf=\"tab?.showTabDataCount && tab?.widgets?.length\">({{tab?.widgets?.length}})</span>\n </ng-template>\n <div>\n <!-- <ng-container [ngTemplateOutlet]=\"loader\" *ngIf=\"stripsResultDataMap[key]?.showOnLoader\">\n </ng-container> -->\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader ||\n !tab.fetchTabStatus\"\n class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [id]=\"key+'-scroller'\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div *ngIf=\"((tab?.fetchTabStatus && tab?.fetchTabStatus === 'done') &&\n (!tab?.widgets || !tab?.widgets?.length))\">\n <ng-container *ngIf=\"tab?.value === 'inprogress'; else msgTemp\">\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.svg\">\n <div class=\"mat-subheading-1 text-center info-content\">{{ 'contentstripmultiple.getReadyForLearningAdventure' | translate }} -\n <a class=\"click-here\" [routerLink]=\"'/page/learn'\">{{ 'contentstripmultiple.clickHere' | translate }}</a> {{ 'contentstripmultiple.toEnrollNextCourse' | translate }}</div>\n </div>\n </ng-container>\n <ng-template #msgTemp>\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.png\">\n <div class=\"mat-subheading-1 text-center\">{{ translateLabels(tab.nodataMsg, 'home') }}</div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"(tab?.fetchTabStatus === 'done' || tab?.widgets?.length)\">\n <ng-container *ngIf=\"!tab?.tabLoading\">\n\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [widgetsLength]=\"tab?.widgets?.length\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\"\n [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of tab?.widgets| slice:0:(tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </ng-container>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n <ng-container *ngIf=\"!stripsResultDataMap[key].tabs || !stripsResultDataMap[key].tabs.length\">\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader\" class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div class=\"\">\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\" [widgetsLength]=\"stripsResultDataMap[key]?.widgets?.length\" [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.widgets| slice:0:(stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <!-- <ng-container *ngIf=\"widget.widgetData.context.pageSection === 'continueLearning' \"> -->\n <!-- <ng-container *ngIf=\"widget.widgetData.content.completionPercentage !== 100\"\n [sbUiResolverWidget]=\"widget\"></ng-container> -->\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n <!-- </ng-container> -->\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </a>\n\n </ng-container>\n </ng-container>\n</ng-template>",
|
|
2057
|
-
styles: [".view-more{display:flex;align-items:center;text-align:center;height:40px;justify-content:center}.view-more .icon{font-size:24px;width:24px;height:24px;border:1px solid;border-radius:50%;padding:8px;margin-bottom:8px}.margin-bottom-custom{margin-bottom:60px}.view-more:hover{background-color:#dcdfe5}::ng-deep.strips-tabgroup .mat-tab-header{border-bottom:2px solid rgba(0,0,0,.12)}::ng-deep.strips-tabgroup .mat-tab-body{padding:20px 0!important;box-sizing:border-box;overflow-y:initial!important}::ng-deep.strips-tabgroup .mat-tab-body-wrapper{overflow:inherit!important}::ng-deep.strips-tabgroup .mat-tab-label{border-bottom:0 solid rgba(0,0,0,.1);margin-right:0;opacity:1}::ng-deep.strips-tabgroup .mat-tab-label .mat-tab-label-content{text-transform:inherit;font:400 14px/20px Lato}::ng-deep.strips-tabgroup .mat-tab-label-active .mat-tab-label-content{font-weight:700!important}.click-here{color:#1b4ca1}.info-content{opacity:1;color:rgba(0,0,0,.87);font:700 14px/20px Lato-Bold;text-align:center}"]
|
|
2147
|
+
template: "<ng-container *ngIf=\"!contentAvailable; else otherTemplate\"></ng-container>\n<ng-template #otherTemplate>\n <!-- <div *ngIf=\"showParentLoader\" class=\"text-center my-2\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div> -->\n <ng-container *ngIf=\"showParentError\" [sbUiResolverWidget]=\"widgetData.errorWidget\"></ng-container>\n <ng-container *ngIf=\"showParentNoData\" [sbUiResolverWidget]=\"widgetData.noDataWidget\"></ng-container>\n <ng-container *ngFor=\"let key of stripsKeyOrder; let i = index; trackBy: identify\">\n <ng-container *ngIf=\"isStripShowing(stripsResultDataMap[key])\">\n <a name=\"{{stripsResultDataMap[key]?.stripTitle}}\" [class]=\"key\">\n <div *ngIf=\"stripsResultDataMap && (getLength(stripsResultDataMap[key]) ||\n stripsResultDataMap[key]?.showOnNoData ||\n stripsResultDataMap[key]?.showOnLoader ||\n stripsResultDataMap[key]?.showOnError)\n \" [ngClass]=\"\n !widgetData?.isChannelStrip ? 'xs:px-8 sx:px-10ss' : i > 0 ? 'mt-12' : ''\n \" [id]=\"key\" [ngClass]=\"!widgetData?.isChannelStrip ? margin-bottom-custom : margin-bottom-xs\">\n <div [ngClass]=\"{ pad: stripsResultDataMap[key]?.stripBackground }\"\n [ngStyle]=\"{ 'background-color': stripsResultDataMap[key]?.stripBackground }\">\n <div class=\"flex flex-col pl-4 pr-4 md:pr-0 md:pl-0 \" [ngClass]=\"\n !widgetData?.isChannelStrip\n ? ''\n : stripsResultDataMap[key]?.stripTitle\n ? 'mb-8'\n : ''\n \">\n <div class=\"flex flex-1 items-center\">\n <p class=\"mat-subheading-1 margin-remove inline-block \" *ngIf=\"stripsResultDataMap[key]?.stripTitle\">\n <span class=\"capitalize\" *ngIf=\"stripsResultDataMap[key]?.disableTranslate\">\n {{stripsResultDataMap[key]?.stripTitle}}\n </span>\n <span *ngIf=\"!stripsResultDataMap[key]?.disableTranslate\">\n {{ translateLabels(stripsResultDataMap[key]?.stripTitle, 'home') }}\n </span>\n </p>\n\n <button *ngIf=\"stripsResultDataMap[key]?.stripInfo?.icon\" type=\"button\" mat-icon-button\n (click)=\"toggleInfo(stripsResultDataMap[key])\" i18n-matTooltip matTooltip=\"info\"\n class=\"margin-left-xs\">\n <mat-icon>{{ stripsResultDataMap[key]?.stripInfo?.icon.icon }}</mat-icon>\n </button>\n <a *ngIf=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [routerLink]=\"stripsResultDataMap[key]?.stripTitleLink?.link\"\n [queryParams]=\"stripsResultDataMap[key]?.stripTitleLink?.link?.queryParams\">\n <mat-icon class=\"ws-mat-primary-primary-text ws-mat-default-text\" [color]=\"'accent'\">{{\n stripsResultDataMap[key]?.stripTitleLink?.icon }}</mat-icon>\n </a>\n <span class=\"spacer\"></span>\n <!-- viewAll start-->\n <div *ngIf=\"checkCondition(widgetData , stripsResultDataMap[key])\"\n class=\"ml-4 pl-2 view-more ws-mat-default-text\">\n <a class=\"flex ws-mat-default-text items-center justify-center mat-body-1 cursor-pointer\" \n (click)=\"raiseTelemetry(stripsResultDataMap[key]);redirectViewAll(stripsResultDataMap[key], stripsResultDataMap[key]?.viewMoreUrl?.path, stripsResultDataMap[key]?.viewMoreUrl?.queryParams )\">\n <span i18n class=\"ws-mat-default-text\">{{translateLabels(widgetData.strips[0].viewMoreUrl.viewMoreText,'home') || 'See all'}}</span>\n <mat-icon class=\"ws-mat-default-text mat-icon notranslate material-icons mat-icon-no-color\" color=\"accent\">navigate_next</mat-icon>\n </a>\n </div>\n <!-- viewAll end-->\n </div>\n <button mat-icon-button (click)=\"setHiddenForStrip(key)\" *ngIf=\"stripsResultDataMap[key]?.canHideStrip\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-icon class=\"cursor-pointer\" *ngIf=\"stripsResultDataMap[key]?.mode === 'accordion' && isMobile\"\n (click)=\"showAccordionData = !showAccordionData\">{{ showAccordionData ? 'expand_less' : 'expand_more' }}\n </mat-icon>\n </div>\n\n <div class=\"mb-4\" *ngIf=\"checkVisible(stripsResultDataMap[key])\">\n <ng-container [sbUiResolverWidget]=\"getdata(stripsResultDataMap[key])\">\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnNoData\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.noDataWidget\"></ng-container>\n <ng-container *ngIf=\"stripsResultDataMap[key]?.showOnError\"\n [sbUiResolverWidget]=\"stripsResultDataMap[key]?.errorWidget\"></ng-container>\n <!-- IF no errors then proceed to show tabs or non tabs strip -->\n <ng-container *ngIf=\"!stripsResultDataMap[key]?.showOnNoData && !stripsResultDataMap[key]?.showOnError\">\n <ng-container *ngIf=\"stripsResultDataMap[key].tabs && stripsResultDataMap[key].tabs.length\">\n <mat-tab-group animationDuration=\"0ms\" [selectedIndex]=\"getSelectedIndex(stripsResultDataMap[key], key)\"\n class=\"mat-tab-labels w-full strips-tabgroup parent-tab-group\" dynamicHeight\n (selectedTabChange)=\"tabClicked($event, stripsResultDataMap[key], key)\">\n <mat-tab label=\"{{tab?.label}}\" *ngFor=\"let tab of stripsResultDataMap[key].tabs; let last = last;\">\n <ng-template mat-tab-label>\n <span>{{ translateLabels(tab?.label, 'home') }} </span>\n <span *ngIf=\"tab?.showTabDataCount && tab?.widgets?.length\">({{tab?.widgets?.length}})</span>\n </ng-template>\n <div>\n <!-- <ng-container [ngTemplateOutlet]=\"loader\" *ngIf=\"stripsResultDataMap[key]?.showOnLoader\">\n </ng-container> -->\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader ||\n !tab.fetchTabStatus\"\n class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [id]=\"key+'-scroller'\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div *ngIf=\"((tab?.fetchTabStatus && tab?.fetchTabStatus === 'done') &&\n (!tab?.widgets || !tab?.widgets?.length))\">\n <ng-container *ngIf=\"tab?.value === 'inprogress'; else msgTemp\">\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.svg\">\n <div class=\"mat-subheading-1 text-center info-content\">{{ 'contentstripmultiple.getReadyForLearningAdventure' | translate }} -\n <a class=\"click-here\" [routerLink]=\"'/page/learn'\">{{ 'contentstripmultiple.clickHere' | translate }}</a> {{ 'contentstripmultiple.toEnrollNextCourse' | translate }}</div>\n </div>\n </ng-container>\n <ng-template #msgTemp>\n <div class=\"w-full flex flex-col items-center justify-center\">\n <img alt=\"\" class=\"mt-4 mb-4\" src=\"assets/icons/home/nodataDefault.png\">\n <div class=\"mat-subheading-1 text-center\">{{ translateLabels(tab.nodataMsg, 'home') }}</div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"(tab?.fetchTabStatus === 'done' || tab?.widgets?.length)\">\n <ng-container *ngIf=\"!tab?.tabLoading\">\n\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\" [widgetsLength]=\"tab?.widgets?.length\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\"\n [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of tab?.widgets| slice:0:(tab?.maxWidgets ||\n stripsResultDataMap[key]?.sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </ng-container>\n </ng-container>\n </div>\n </mat-tab>\n </mat-tab-group>\n </ng-container>\n <ng-container *ngIf=\"!stripsResultDataMap[key].tabs || !stripsResultDataMap[key].tabs.length\">\n <div *ngIf=\"stripsResultDataMap && stripsResultDataMap[key]?.showOnLoader\" class=\"text-center my-2\">\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n [loadStatus]=\"'fetching'\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.loaderWidgets; trackBy: tracker\">\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n <div class=\"\">\n <sb-uic-horizontal-scroller-v2 [id]=\"key+'-scroller'\" [sliderConfig]=\"stripsResultDataMap[key]?.sliderConfig\"\n *ngIf=\"getContineuLearningLenth(stripsResultDataMap[key]) && showAccordion(key)\" [widgetsLength]=\"stripsResultDataMap[key]?.widgets?.length\" [loadStatus]=\"'done'\" [defaultMaxWidgets]=\"stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets\" [stripConfig]=\"stripsResultDataMap[key]?.stripConfig\">\n <ng-container *ngFor=\"let widget of stripsResultDataMap[key]?.widgets| slice:0:(stripsResultDataMap[key].sliderConfig?.maxWidgets || defaultMaxWidgets); trackBy: tracker\">\n <!-- <ng-container *ngIf=\"widget.widgetData.context.pageSection === 'continueLearning' \"> -->\n <!-- <ng-container *ngIf=\"widget.widgetData.content.completionPercentage !== 100\"\n [sbUiResolverWidget]=\"widget\"></ng-container> -->\n <ng-container [sbUiResolverWidget]=\"widget\"></ng-container>\n <!-- </ng-container> -->\n </ng-container>\n </sb-uic-horizontal-scroller-v2>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </a>\n\n </ng-container>\n </ng-container>\n</ng-template>",
|
|
2148
|
+
styles: [".view-more{display:flex;align-items:center;text-align:center;height:40px;justify-content:center}.view-more .icon{font-size:24px;width:24px;height:24px;border:1px solid;border-radius:50%;padding:8px;margin-bottom:8px}.margin-bottom-custom{margin-bottom:60px}.view-more:hover{background-color:#dcdfe5}::ng-deep.strips-tabgroup .mat-tab-header{border-bottom:2px solid rgba(0,0,0,.12)}::ng-deep.strips-tabgroup .mat-tab-body{padding:20px 0!important;box-sizing:border-box;overflow-y:initial!important}::ng-deep.strips-tabgroup .mat-tab-body-wrapper{overflow:inherit!important}::ng-deep.strips-tabgroup .mat-tab-label{border-bottom:0 solid rgba(0,0,0,.1);margin-right:0;opacity:1}::ng-deep.strips-tabgroup .mat-tab-label .mat-tab-label-content{text-transform:inherit;font:400 14px/20px Lato}::ng-deep.strips-tabgroup .mat-tab-label-active .mat-tab-label-content{font-weight:700!important}.click-here{color:#1b4ca1}.info-content{opacity:1;color:rgba(0,0,0,.87);font:700 14px/20px Lato-Bold;text-align:center}::ng-deep .parent-tab-group-1 .mat-tab-header{border-bottom:unset!important}::ng-deep .parent-tab-group-1 .mat-tab-label{border:1px solid rgba(0,0,0,.2392156863);padding:6px 8px;margin-right:8px;min-width:unset!important;border-radius:12px;height:unset!important}::ng-deep .parent-tab-group-1 .mat-ink-bar{background-color:transparent!important;visibility:hidden!important}::ng-deep .parent-tab-group-1 .mat-tab-label-active{color:#fff!important;background-color:#1b4ca1!important}::ng-deep .parent-tab-group-1 .mat-tab-body{padding:0!important}"]
|
|
2058
2149
|
}] }
|
|
2059
2150
|
];
|
|
2060
2151
|
/** @nocollapse */
|
|
@@ -2173,4 +2264,4 @@ if (false) {
|
|
|
2173
2264
|
*/
|
|
2174
2265
|
ContentStripWithTabsLibComponent.prototype.langtranslations;
|
|
2175
2266
|
}
|
|
2176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBc0NDOzs7SUFyQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBJbmplY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXItdjInO1xuaW1wb3J0IHsgTnNDb250ZW50U3RyaXBXaXRoVGFicyB9IGZyb20gJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLm1vZGVsJztcbi8vIGltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy93aWRnZXQtY29udGVudC5tb2RlbCc7XG5pbXBvcnQgeyBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL211bHRpbGluZ3VhbC10cmFuc2xhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQge1xuICBURmV0Y2hTdGF0dXMsXG4gIExvZ2dlclNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICBVdGlsaXR5U2VydmljZSxcbiAgV3NFdmVudHMsXG59IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV2lkZ2V0VXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LXVzZXIuc2VydmljZSc7XG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5pbXBvcnQgeyBOc0NhcmRDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy9jYXJkLWNvbnRlbnQtdjIubW9kZWwnO1xuaW1wb3J0IHsgSVRvZGF5RXZlbnRzIH0gZnJvbSAnLi4vLi4vX21vZGVscy9ldmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbnRlcmZhY2UgSVN0cmlwVW5pdENvbnRlbnREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGNhbkhpZGVTdHJpcDogYm9vbGVhbjtcbiAgbW9kZT86IHN0cmluZztcbiAgc2hvd1N0cmlwOiBib29sZWFuO1xuICBkaXNhYmxlVHJhbnNsYXRlOiBib29sZWFuO1xuICB3aWRnZXRzPzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXTtcbiAgc3RyaXBUaXRsZTogc3RyaW5nO1xuICBzdHJpcFRpdGxlTGluaz86IHtcbiAgICBsaW5rOiAge1xuICAgICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICAgIH0sXG4gICAgaWNvbjogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgfTtcbiAgc2xpZGVyQ29uZmlnPzoge1xuICAgIHNob3dOYXZzOiBib29sZWFuLFxuICAgIHNob3dEb3RzOiBib29sZWFuLFxuICAgIG1heFdpZGdldHM/OiBudW1iZXJcbiAgICBjZXJpZmljYXRlQ2FyZE1hcmdpbj86IGJvb2xlYW5cbiAgfTtcbiAgc3RyaXBDb25maWc6IGFueTtcbiAgdGFicz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYltdIHwgdW5kZWZpbmVkO1xuICBzdHJpcE5hbWU/OiBzdHJpbmc7XG4gIHN0cmlwTG9nbz86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0cmlwSW5mbz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSVN0cmlwSW5mbztcbiAgbm9EYXRhV2lkZ2V0PzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGE7XG4gIGVycm9yV2lkZ2V0PzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGE7XG4gIHNob3dPbk5vRGF0YTogYm9vbGVhbjtcbiAgc2hvd09uTG9hZGVyOiBib29sZWFuO1xuICBzaG93T25FcnJvcjogYm9vbGVhbjtcbiAgbG9hZGVyV2lkZ2V0cz86IGFueTtcbiAgc3RyaXBCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBzZWNvbmRhcnlIZWFkaW5nPzogYW55O1xuICB2aWV3TW9yZVVybDogYW55O1xuICByZXF1ZXN0PzogYW55XG4gIFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYi11aWMtY29udGVudC1zdHJpcC13aXRoLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRTdHJpcFdpdGhUYWJzTGliQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlPiB7XG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgdmlld0FsbFJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHRlbGVtdHJ5UmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBASW5wdXQoKSBwcm92aWRlcklkIDogYW55ID0gJydcbiAgQElucHV0KCkgZW1pdFZpZXdBbGwgOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgY2hhbm5uZWxOYW1lOiBhbnkgPSAnJ1xuICBASG9zdEJpbmRpbmcoJ2lkJylcbiAgcHVibGljIGlkID0gYHdzLXN0cmlwLW1pbHRpcGxlXyR7TWF0aC5yYW5kb20oKX1gO1xuICBzdHJpcHNSZXN1bHREYXRhTWFwOiB7IFtrZXk6IHN0cmluZ106IElTdHJpcFVuaXRDb250ZW50RGF0YSB9ID0ge307XG4gIHN0cmlwc0tleU9yZGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzaG93QWNjb3JkaW9uRGF0YSA9IHRydWU7XG4gIHNob3dQYXJlbnRMb2FkZXIgPSBmYWxzZTtcbiAgc2hvd1BhcmVudEVycm9yID0gZmFsc2U7XG4gIHNob3dQYXJlbnROb0RhdGEgPSBmYWxzZTtcbiAgZXJyb3JEYXRhQ291bnQgPSAwO1xuICBub0RhdGFDb3VudCA9IDA7XG4gIHN1Y2Nlc3NEYXRhQ291bnQgPSAwO1xuICBjb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgYmFzZVVybCA9IHRoaXMuY29uZmlnU3ZjLnNpdGVQYXRoIHx8ICcnO1xuICB2ZWlmaWVkS2FybWF5b2dpID0gZmFsc2U7XG4gIGVudmlyb25tZW50ITogYW55O1xuICBjaGFuZ2VFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGRlZmF1bHRNYXhXaWRnZXRzID0gMTI7XG4gIGVucm9sbEludGVydmFsOiBhbnk7XG4gIHRvZGF5c0V2ZW50czogYW55ID0gW107XG4gIGVucm9sbG1lbnRNYXBEYXRhOiBhbnlcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgICAgIGxldCBsYW5nID0gSlNPTi5zdHJpbmdpZnkobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKTtcbiAgICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UoL1xcXCIvZywgJycpO1xuICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHRoaXMuY29udGVudFN2Yy50ZWxlbWV0cnlEYXRhJC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICB9KVxuXG4gICBcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0FjY29yZGlvbihrZXk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2tleV0ubW9kZSA9PT0gJ2FjY29yZGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dBY2NvcmRpb25EYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNldEhpZGRlbkZvclN0cmlwKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2tleV0uc2hvd1N0cmlwID0gZmFsc2U7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShgY3N0cmlwXyR7a2V5fWAsICcxJyk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJZlN0cmlwSGlkZGVuKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RvcmFnZUl0ZW0gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGBjc3RyaXBfJHtrZXl9YCk7XG4gICAgcmV0dXJuIEJvb2xlYW4oc3RvcmFnZUl0ZW0gIT09ICcxJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXREYXRhKCkge1xuICAgIHRoaXMuc3RyaXBzS2V5T3JkZXIgPSB0aGlzLndpZGdldERhdGEgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcyAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLm1hcChzdHJpcCA9PiBzdHJpcC5rZXkpIHx8IFtdO1xuICAgIGlmICh0aGlzLndpZGdldERhdGEubG9hZGVyICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dQYXJlbnRMb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBGZXRjaCB0aGUgZGF0YVxuICAgIGZvciAoY29uc3Qgc3RyaXAgb2YgdGhpcy53aWRnZXREYXRhLnN0cmlwcykge1xuICAgICAgaWYgKHRoaXMuY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcCkpIHtcbiAgICAgICAgdGhpcy5mZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKHN0cmlwLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgdHJ1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFN1YnNjcmlwdGlvbiBmb3IgY2hhbmdlc1xuICAgIGNvbnN0IGtleUFuZEV2ZW50OiB7IGtleTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZyb206IHN0cmluZyB9W10gPSB0aGlzLndpZGdldERhdGEuc3RyaXBzXG4gICAgICAubWFwKHN0cmlwID0+ICh7XG4gICAgICAgIGtleTogc3RyaXAua2V5LFxuICAgICAgICB0eXBlOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5ldmVudFR5cGUpIHx8ICcnLFxuICAgICAgICBmcm9tOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5mcm9tLnRvU3RyaW5nKCkpIHx8ICcnLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKCh7IGtleSwgdHlwZSwgZnJvbSB9KSA9PiBrZXkgJiYgdHlwZSAmJiBmcm9tKTtcbiAgICBjb25zdCBldmVudFR5cGVTZXQgPSBuZXcgU2V0KGtleUFuZEV2ZW50Lm1hcChlID0+IGUudHlwZSkpO1xuICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50U3ZjLmV2ZW50cyRcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudFR5cGVTZXQuaGFzKGV2ZW50LmV2ZW50VHlwZSkpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGtleUFuZEV2ZW50XG4gICAgICAgICAgLmZpbHRlcihlID0+IGUudHlwZSA9PT0gZXZlbnQuZXZlbnRUeXBlICYmIGUuZnJvbSA9PT0gZXZlbnQuZnJvbSlcbiAgICAgICAgICAubWFwKGUgPT4gZS5rZXkpXG4gICAgICAgICAgLmZvckVhY2goayA9PiB0aGlzLmZldGNoU3RyaXBGcm9tS2V5KGssIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21LZXkoa2V5OiBzdHJpbmcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQoc3RyaXAgPT4gc3RyaXAua2V5ID09PSBrZXkpO1xuICAgIGlmIChzdHJpcERhdGEpIHtcbiAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcERhdGEsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgaXNTdHJpcFNob3dpbmcoZGF0YTogYW55KSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmtleSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBLZXkgJiYgKCFkYXRhLnRhYnMgfHwgIWRhdGEudGFicy5sZW5ndGgpICYmXG4gICAgICBkYXRhLnN0cmlwVGl0bGUgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwTmFtZSAmJiBkYXRhLndpZGdldHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0YS53aWRnZXRzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgIGlmIChrZXkgJiYga2V5LndpZGdldERhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwUHJpbWFyeUNhdGVnb3J5KSB7XG4gICAgICAgICAgY291bnQgPSBjb3VudCArIDE7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICBkYXRhLnNob3dTdHJpcCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnZGF0YS5rZXknLCBkYXRhLCBkYXRhLmtleSwgZGF0YS53aWRnZXRzKTtcbiAgICByZXR1cm4gZGF0YS5zaG93U3RyaXA7XG4gIH1cblxuICBnZXQgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldGRhdGEoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgaWYgKGRhdGEuc3RyaXBJbmZvKSB7XG4gICAgICByZXR1cm4gZGF0YS5zdHJpcEluZm8ud2lkZ2V0O1xuICAgIH1cbiAgICByZXR1cm4ge307XG5cbiAgfVxuICBjaGVja0NvbmRpdGlvbih3RGF0YTogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGUsIGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmICh3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcgJiYgd0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnLmhpZGVTaG93QWxsKSB7XG4gICAgICByZXR1cm4gIXdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbDtcbiAgICB9XG4gICAgcmV0dXJuIHdEYXRhLnN0cmlwc1swXS52aWV3TW9yZVVybCAmJiBkYXRhLndpZGdldHMgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+PSA0O1xuICB9XG4gIGNoZWNrVmlzaWJsZShkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICByZXR1cm4gZGF0YS5zdHJpcEluZm8gJiYgZGF0YS5zdHJpcEluZm8udmlzaWJpbGl0eU1vZGUgPT09ICd2aXNpYmxlJztcbiAgfVxuXG4gIGdldENvbnRpbmV1TGVhcm5pbmdMZW50aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICByZXR1cm4gZGF0YS53aWRnZXRzID8gZGF0YS53aWRnZXRzLmxlbmd0aCA6IDA7XG4gIH1cbiAgZ2V0TGVuZ3RoKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZGF0YS53aWRnZXRzID8gZGF0YS53aWRnZXRzLmxlbmd0aCA6IDA7XG4gICAgfSB7XG4gICAgICAvLyBpZiB0YWJzIGFyZSB0aGVyZSBjaGVjayBpZiBlYWNoIHRhYiBoYXMgd2lkZ2V0cyBhbmQgZ2V0IHRoZSB0YWIgd2l0aCBtYXggd2lkZ2V0c1xuICAgICAgY29uc3QgdGFiV2l0aE1heFdpZGdldHMgPSBkYXRhLnRhYnMucmVkdWNlKFxuICAgICAgICAocHJldiwgY3VycmVudCkgPT4ge1xuICAgICAgICAgIGlmICghcHJldi53aWRnZXRzICYmICFjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIChwcmV2LndpZGdldHMubGVuZ3RoID4gY3VycmVudC53aWRnZXRzLmxlbmd0aCkgPyBwcmV2IDogY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGN1cnJlbnQud2lkZ2V0cyAmJiAhcHJldi53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFjdXJyZW50LndpZGdldHMgJiYgcHJldi53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgLy8gcmV0dXJuIChwcmV2LndpZGdldHMgJiYgY3VycmVudC53aWRnZXRzICYmIChwcmV2LndpZGdldHMubGVuZ3RoID4gY3VycmVudC53aWRnZXRzLmxlbmd0aCkgKSA/IHByZXYgOiBjdXJyZW50XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBhbGlnblxuICAgICAgICB9LCBkYXRhLnRhYnNbMF0pO1xuICAgICAgLy8gaWYgdGFicyBoYXMgYXRsZWFzdCAxIHdpZGdldHMgdGhlbiBzdHJpcCB3aWxsIHNob3cgb3IgZWxzZSBub3RcbiAgICAgIHJldHVybiB0YWJXaXRoTWF4V2lkZ2V0cy53aWRnZXRzID8gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyc0Zyb21BcnJheSh2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMih2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgY2hlY2tGb3JEYXRlRmlsdGVycyhmaWx0ZXJzOiBhbnkpIHtcbiAgICBsZXQgdXNlckRhdGE6IGFueTtcbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHVzZXJEYXRhID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbmREYXRlJ11bJz49J10gPSBldmFsKGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJ11bJz49J10pXG4gICAgfSBlbHNlIGlmIChmaWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICApIHtcbiAgICAgIGlmKHRoaXMucHJvdmlkZXJJZCkge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHRoaXMucHJvdmlkZXJJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uID0gdXNlckRhdGEgJiYgdXNlckRhdGEucm9vdE9yZ0lkO1xuXG4gICAgICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2Rlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgICBmaWx0ZXJzLmRlc2lnbmF0aW9uID0gdXNlckRhdGEucHJvZmVzc2lvbmFsRGV0YWlscy5sZW5ndGggPiAwID9cbiAgICAgICAgICAgIHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24gOiAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5mZXRjaEZyb21FbnJvbGxtZW50TGlzdChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVNlYXJjaFY2KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsVG9wQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsRmVhdHVyZWRDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxCb29rTWFya0RhdGEoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbFBsYXlsaXN0U2VhcmNoKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hQbGF5bGlzdFJlYWREYXRhKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hDaW9zQ29udGVudERhdGEoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgXG4gICAgLy8gdGhpcy5lbnJvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKVxuICB9XG5cbiAgZmV0Y2hGcm9tRW5yb2xsbWVudExpc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkge1xuICAgICAgbGV0IHVzZXJJZCA9ICcnO1xuICAgICAgbGV0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudFtdO1xuICAgICAgbGV0IGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdO1xuICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IF8uZ2V0KHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QsICdxdWVyeVBhcmFtcycpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZDtcbiAgICAgIH1cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGVwcmVjYXRpb25cbiAgICAgIHRoaXMudXNlclN2Yy5mZXRjaFVzZXJCYXRjaExpc3QodXNlcklkLCBxdWVyeVBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3Vyc2VzID0gcmVzdWx0ICYmIHJlc3VsdC5jb3Vyc2VzO1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICBjb3Vyc2VzLmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IChzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoKSB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBmOlxuICAgICAgICAgICAgICAgICAgc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VhcmNoU2VydlN2Yy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnMoXG4gICAgICAgICAgICAgICAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGlmIChjb3Vyc2VzICYmIGNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY291cnNlcy5tYXAoKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50VGVtcDogTnNDb250ZW50LklDb250ZW50ID0gYy5jb250ZW50O1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGMuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgYy5wcm9ncmVzcyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uU3RhdHVzID0gYy5jb21wbGV0aW9uU3RhdHVzIHx8IGMuc3RhdHVzIHx8IDA7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmVucm9sbGVkRGF0ZSA9IGMuZW5yb2xsZWREYXRlIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0Q29udGVudEFjY2Vzc1RpbWUgPSBjLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdFJlYWRDb250ZW50U3RhdHVzID0gYy5sYXN0UmVhZENvbnRlbnRTdGF0dXMgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudElkID0gYy5sYXN0UmVhZENvbnRlbnRJZCB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubHJjUHJvZ3Jlc3NEZXRhaWxzID0gYy5scmNQcm9ncmVzc0RldGFpbHMgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmlzc3VlZENlcnRpZmljYXRlcyA9IGMuaXNzdWVkQ2VydGlmaWNhdGVzIHx8IFtdO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5iYXRjaElkID0gYy5iYXRjaElkIHx8ICcnO1xuICAgICAgICAgICAgICByZXR1cm4gY29udGVudFRlbXA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVG8gZmlsdGVyIGNvbnRlbnQgd2l0aCBjb21wbGV0aW9uUGVyY2VudGFnZSA+IDAsXG4gICAgICAgICAgLy8gc28gdGhhdCBvbmx5IHRob3NlIGNvbnRlbnQgd2lsbCBzaG93IGluIGhvbWUgcGFnZVxuICAgICAgICAgIC8vIGNvbnRpbnVlIGxlYXJpbmcgc3RyaXBcbiAgICAgICAgICAvLyBpZiAoY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgIC8vICAgY29udGVudE5ldyA9IGNvbnRlbnQuZmlsdGVyKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgLyoqIGNvbW1lbnRlZCBhcyBib3RoIGFyZSAwIGFmdGVyIGVucm9sbGwgKi9cbiAgICAgICAgICAvLyAgICAgaWYgKGMuY29tcGxldGlvblBlcmNlbnRhZ2UgJiYgYy5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICByZXR1cm4gY1xuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9KVxuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vIFRvIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgZW5yb2xsZWQgZGF0ZVxuICAgICAgICAgIGNvbnRlbnROZXcgPSAoY29udGVudCB8fCBbXSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBOiBhbnkgPSBuZXcgRGF0ZShhLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCOiBhbnkgPSBuZXcgRGF0ZShiLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlQiAtIGRhdGVBO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXcsIHN0cmlwKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnROZXcsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3BsaXRFbnJvbGxtZW50VGFic0RhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgKGU6IGFueSkgPT4gZS5jb21wbGV0aW9uU3RhdHVzID09PSAxIHx8IGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDAsXG4gICAgICBzdHJpcCxcbiAgICApO1xuXG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXSkge1xuICAgICAgICAgIHRhYlJlc3VsdHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc3RyaXAudGFic1tpXSxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgLi4uKHNwbGl0RGF0YS5maW5kKGl0bUlubmVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzW2ldICYmIGl0bUlubmVyLnZhbHVlID09PSBzdHJpcC50YWJzW2ldLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRtSW5uZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWJSZXN1bHRzO1xuICB9XG5cbiAgZ2V0SW5wcm9ncmVzc0FuZENvbXBsZXRlZChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmlsdGVyOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCBpbnByb2dyZXNzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbXBsZXRlZDogYW55W10gPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKChlOiBhbnksIGlkeDogbnVtYmVyLCBhcnI6IGFueVtdKSA9PiAoY3VzdG9tRmlsdGVyKGUsIGlkeCwgYXJyKSA/IGlucHJvZ3Jlc3MgOiBjb21wbGV0ZWQpLnB1c2goZSkpO1xuICAgIHJldHVybiBbXG4gICAgICB7IHZhbHVlOiAnaW5wcm9ncmVzcycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoaW5wcm9ncmVzcywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAnY29tcGxldGVkJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb21wbGV0ZWQsIHN0cmlwKSB9XTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVNlYXJjaFY2KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2KS5sZW5ndGgpIHtcbiAgICAgIC8vIGlmICghKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUpIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFt0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUubG9jYWxzWzBdXVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gWydlbiddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2cob3JpZ2luYWxGaWx0ZXJzKTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVE9ETzogSGF2ZSB0byBleHRyYWN0IHJlcXVlc3RSZXF1aXJlZCB0byBvdXRlciBsZXZlbCBvZiB0YWJzIGNvbmZpZ1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGlmIChmaXJzdFRhYi5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcCA9IChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihzdHJpcCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFY2UmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgICAgICBpZihzdHJpcC5rZXkgPT09ICdzY2hlZHVsZWRBc3Nlc3NtZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSW52aXRPbmx5QXNzZXNzbWVudHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgcmVzcG9uc2Uudmlld01vcmVVcmwpXG5cbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICBcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja0ludml0T25seUFzc2Vzc21lbnRzKGNvbnRlbnQ6YW55LCBzdHJpcDphbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1czphbnksIHZpZXdNb3JlVXJsOmFueSkge1xuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZW5yb2xsbWVudE1hcERhdGEnKSkge1xuICAgICAgdGhpcy5lbnJvbGxtZW50TWFwRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Vucm9sbG1lbnRNYXBEYXRhJykgfHwgJ3t9JylcbiAgICAgIGxldCBmaWx0ZXJlZEFycmF5OiBhbnkgPSBbXVxuICAgICAgICBjb250ZW50LmZvckVhY2goKGRhdGE6YW55KT0+IHtcbiAgICAgICAgICBpZih0aGlzLmVucm9sbG1lbnRNYXBEYXRhW2RhdGEuaWRlbnRpZmllcl0pe1xuICAgICAgICAgICAgZGF0YVsnYmF0Y2gnXSA9IHRoaXMuZW5yb2xsbWVudE1hcERhdGFbZGF0YS5pZGVudGlmaWVyXS5iYXRjaFxuICAgICAgICAgICAgZGF0YVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHRoaXMuZW5yb2xsbWVudE1hcERhdGFbZGF0YS5pZGVudGlmaWVyXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICAgICAgZmlsdGVyZWRBcnJheS5wdXNoKGRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9KSBcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICBzdHJpcCxcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhmaWx0ZXJlZEFycmF5LCBzdHJpcCksXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICk7XG4gICAgIGNsZWFySW50ZXJ2YWwodGhpcy5lbnJvbGxJbnRlcnZhbClcbiAgIH1cbiAgIFxuICAgIFxuICB9XG5cbiAgYXN5bmMgc2VhcmNoVjZSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5zZWFyY2hWNihyZXF1ZXN0LnNlYXJjaFY2KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIHRhYjogJ0xlYXJuJyxcbiAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBmOlxuICAgICAgICAgICAgICAgICAgcmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgLy8gaWYgKHZpZXdNb3JlVXJsICYmIHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgLy8gICB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpIHtcbiAgICAgIC8vIGlmICghKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUpIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFt0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUubG9jYWxzWzBdXVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gWydlbiddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2cob3JpZ2luYWxGaWx0ZXJzKTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVE9ETzogSGF2ZSB0byBleHRyYWN0IHJlcXVlc3RSZXF1aXJlZCB0byBvdXRlciBsZXZlbCBvZiB0YWJzIGNvbmZpZ1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGlmIChmaXJzdFRhYi5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcCA9IChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhzdHJpcCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZVtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCB8fCAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZighY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB0cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1ZXN0IGlmIGl0IGhhcyBkeW5hbWljIHZhbHVlc11cbiAgICAgICAgaWYgKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgdXNlclJvb3RPcmdJZDtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIHVzZXJSb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJSb290T3JnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnRyZW5kaW5nQ29udGVudFNlYXJjaChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0ICYmXG4gICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0ubGVuZ3RoID4gNSAmJlxuICAgICAgICAgICAgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGxldCBwcm9jY2VzZWRSZXN1bHQ6IGFueSA9IFtdXG4gICAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLnJlc3BvbnNlICYmIHJlc3VsdHMucmVzcG9uc2UuY2VydGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5yZXNwb25zZS5jZXJ0aWZpY2F0aW9ucy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zb3VyY2UgPT09IHRoaXMuY2hhbm5uZWxOYW1lKSB7XG4gICAgICAgICAgICAgICAgICBwcm9jY2VzZWRSZXN1bHQucHVzaChyZXN1bHQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0cyA9IHtyZXNwb25zZToge2NlcnRpZmljYXRpb25zOiBwcm9jY2VzZWRSZXN1bHR9fVxuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKVxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJbmZvKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGNvbnN0IHN0cmlwSW5mbyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvO1xuICAgIGlmIChzdHJpcEluZm8pIHtcbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSAhPT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKGBzdHJpcCBpbmZvIG1vZGU6ICR7c3RyaXBJbmZvLm1vZGV9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtcbiAgICAgICAgc3RyaXBJbmZvLm1vZGUgPSAnYmVsb3cnO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvID0ge1xuICAgICAgICAgIC4uLnN0cmlwSW5mbyxcbiAgICAgICAgICB2aXNpYmlsaXR5TW9kZTogc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAnaGlkZGVuJyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50JyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgICAgfVxuICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IElUb2RheUV2ZW50c1tdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlc3VsdHM6IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW10gPSBbXSxcbiAgICBmZXRjaFN0YXR1czogVEZldGNoU3RhdHVzLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICAgX3ZpZXdNb3JlVXJsOiBhbnksXG4gICAgdGFic1Jlc3VsdHM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZCxcbiAgICAvLyBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgaXMgdXNlZCBzbyB0aGF0IHBhcmVudHMnIHN0YXR1cyBpcyBub3QgcmUtY2FsY3VsYXRlZCBpZiB0aGUgQVBJIGlzIGNhbGxlZCBhZ2FpbiBjb3ogb2YgZmlsdGVycywgZXRjLlxuICApIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB7XG4gICAgICB2aWV3TW9yZVVybDogc3RyaXAudmlld01vcmVVcmwsXG4gICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgIGNhbkhpZGVTdHJpcDogQm9vbGVhbihzdHJpcC5jYW5IaWRlU3RyaXApLFxuICAgICAgc2hvd1N0cmlwOiB0aGlzLmdldElmU3RyaXBIaWRkZW4oc3RyaXAua2V5KSxcbiAgICAgIG5vRGF0YVdpZGdldDogc3RyaXAubm9EYXRhV2lkZ2V0LFxuICAgICAgZXJyb3JXaWRnZXQ6IHN0cmlwLmVycm9yV2lkZ2V0LFxuICAgICAgc3RyaXBJbmZvOiBzdHJpcC5pbmZvLFxuICAgICAgc3RyaXBUaXRsZTogc3RyaXAudGl0bGUsXG4gICAgICBzdHJpcFRpdGxlTGluazogc3RyaXAuc3RyaXBUaXRsZUxpbmssXG4gICAgICBkaXNhYmxlVHJhbnNsYXRlOiBzdHJpcC5kaXNhYmxlVHJhbnNsYXRlLFxuICAgICAgc2xpZGVyQ29uZmlnOiBzdHJpcC5zbGlkZXJDb25maWcsXG4gICAgICB0YWJzOiB0YWJzUmVzdWx0cyA/IHRhYnNSZXN1bHRzIDogc3RyaXAudGFicyxcbiAgICAgIHN0cmlwTmFtZTogc3RyaXAubmFtZSxcbiAgICAgIG1vZGU6IHN0cmlwLm1vZGUsXG4gICAgICBzdHJpcENvbmZpZzogc3RyaXAuc3RyaXBDb25maWcsXG4gICAgICBzdHJpcEJhY2tncm91bmQ6IHN0cmlwLnN0cmlwQmFja2dyb3VuZCxcbiAgICAgIHNlY29uZGFyeUhlYWRpbmc6IHN0cmlwLnNlY29uZGFyeUhlYWRpbmcsXG4gICAgICBsb2FkZXJXaWRnZXRzOiBzdHJpcC5sb2FkZXJXaWRnZXRzIHx8IFtdLFxuICAgICAgd2lkZ2V0czpcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJ1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgLi4uKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgLi4ucmVzdWx0cyxcbiAgICAgICAgICAgIC4uLihzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgICBzaG93T25Ob0RhdGE6IEJvb2xlYW4oXG4gICAgICAgIHN0cmlwLm5vRGF0YVdpZGdldCAmJlxuICAgICAgICAhKChzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5sZW5ndGggKyByZXN1bHRzLmxlbmd0aCArIChzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubGVuZ3RoKSAmJlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnLFxuICAgICAgKSxcbiAgICAgIHNob3dPbkxvYWRlcjogQm9vbGVhbihzdHJpcC5sb2FkZXIgJiYgZmV0Y2hTdGF0dXMgPT09ICdmZXRjaGluZycpLFxuICAgICAgc2hvd09uRXJyb3I6IEJvb2xlYW4oc3RyaXAuZXJyb3JXaWRnZXQgJiYgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpLFxuICAgIH07XG4gICAgLy8gY29uc3Qgc3RyaXBEYXRhID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV1cbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAgPSB7XG4gICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAsXG4gICAgICBbc3RyaXAua2V5XTogc3RyaXBEYXRhLFxuICAgIH07XG4gICAgaWYgKCF0YWJzUmVzdWx0cykge1xuICAgICAgaWYgKFxuICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiZcbiAgICAgICAgKGZldGNoU3RhdHVzID09PSAnZG9uZScgfHwgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpICYmXG4gICAgICAgIHN0cmlwRGF0YS53aWRnZXRzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jaGVja1BhcmVudFN0YXR1cyhmZXRjaFN0YXR1cywgc3RyaXBEYXRhLndpZGdldHMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiYgIShyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cywgc3RyaXBXaWRnZXRzQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnICYmICFzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5ub0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiBzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICs9IDE7XG4gICAgfSBlbHNlIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhpcy5lcnJvckRhdGFDb3VudCArPSAxO1xuICAgIH1cbiAgICBjb25zdCBzZXR0bGVkQ291bnQgPSB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudDtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuc3VjY2Vzc0RhdGFDb3VudCA+IDAgJiYgc2V0dGxlZENvdW50IDwgdG90YWxDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dQYXJlbnRMb2FkZXIgPSBzZXR0bGVkQ291bnQgIT09IHRvdGFsQ291bnQ7XG4gICAgdGhpcy5zaG93UGFyZW50Tm9EYXRhID1cbiAgICAgIHRoaXMubm9EYXRhQ291bnQgPiAwICYmIHRoaXMubm9EYXRhQ291bnQgKyB0aGlzLmVycm9yRGF0YUNvdW50ID09PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudEVycm9yID0gdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgfVxuICBjaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQpLmxlbmd0aCkgfHwgXG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQpLmxlbmd0aClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdGFiQ2xpY2tlZCh0YWJFdmVudDogTWF0VGFiQ2hhbmdlRXZlbnQsIHN0cmlwTWFwOiBJU3RyaXBVbml0Q29udGVudERhdGEsIHN0cmlwS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnaW5wcm9ncmVzcyc7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlUYWJEYXRhID0ge1xuICAgICAgbGFiZWw6IGAke3RhYkV2ZW50LnRhYi50ZXh0TGFiZWx9YCxcbiAgICAgIGluZGV4OiB0YWJFdmVudC5pbmRleCxcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRTdmMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0VHlwZXMuQ0xJQ0ssXG4gICAgICAgIHN1YlR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFN1YlR5cGVzLkhPTUVfUEFHRV9TVFJJUF9UQUJTLFxuICAgICAgICBpZDogYCR7Xy5jYW1lbENhc2UoZGF0YS5sYWJlbCl9LXRhYmAsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuSE9NRSxcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRTdHJpcCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzID0+IHMua2V5ID09PSBzdHJpcEtleSk7XG4gICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0gJiYgY3VycmVudFRhYkZyb21NYXApIHtcbiAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB7XG4gICAgICAgIC4uLnRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgIHRhYlNlbGVjdGVkOiBjdXJyZW50VGFiRnJvbU1hcC5sYWJlbCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljaykge1xuICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3RSZXF1aXJlZCAmJiBjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoY3VycmVudFN0cmlwLCB0YWJFdmVudC5pbmRleCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKGN1cnJlbnRTdHJpcCwgdGFiRXZlbnQuaW5kZXgsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlmaWx0ZXIoY3VycmVudFN0cmlwLCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgICAgICAgICAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBhbGxUYWJzW3RhYkluZGV4XSA9IHtcbiAgICAgICAgICAgICAgLi4uYWxsVGFic1t0YWJJbmRleF0sXG4gICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjdXJyZW50VGFiIC0tLSB3aWRnZXRzJywgd2lkZ2V0cylcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RhYlJlc3VsdHMgLSsrKysqKiotLScsIHRhYlJlc3VsdHMpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRUYWJEYXRhQnlmaWx0ZXIoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ3N0cmlwIC0tICcsIHN0cmlwKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0gJywgY3VycmVudFRhYik7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjYWxjdWxhdGVQYXJlbnRTdGF0dXMtLSAnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIFRPRE86IFdyaXRlIGxvZ2ljIGZvciBpbmRpdmlkdWFsIGZpbHRlciBpZiBwYXNzZWQgaW4gY29uZmlnXG4gICAgLy8gYWRkIHN3aXRjaCBjYXNlIGJhc2VkIG9uIGNvbmZpZyBrZXkgcGFzc2VkXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbENicFBsYW5zKHN0cmlwOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcblxuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkge1xuXG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS5zdWJzY3JpYmUoIGFzeW5jICAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlcykge1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHJlcywnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4nKVxuICAgICAgLy8gICAgIGNvdXJzZXMgPSByZXNcbiAgICAgIC8vICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgLy8gICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcClcbiAgICAgIC8vICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAnJyxcbiAgICAgIC8vICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXJyOiBhbnkpID0+IHtcblxuICAgICAgLy8gfSlcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgc3BsaXRDYnBUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0VGFic0xpc3QoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgc3RyaXAsXG4gICAgKTtcbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgbGV0IGFsbDogYW55W10gPSBbXTtcbiAgICBsZXQgdXBjb21pbmc6IGFueVtdID0gW107XG4gICAgbGV0IG92ZXJkdWU6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55KSA9PiB7XG4gICAgICBhbGwucHVzaChlKTtcbiAgICAgIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBvdmVyZHVlLnB1c2goZSk7XG4gICAgICB9IGVsc2UgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5VUENPTUlORykge1xuICAgICAgICB1cGNvbWluZy5wdXNoKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzID09PSAyKTtcbiAgICBsZXQgYWxsSW5Db21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA8IDIpO1xuXG4gICAgbGV0IGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWRBbGwgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+ICBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsSW5Db21wbGV0ZWQgPSBhbGxJbkNvbXBsZXRlZC5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsID0gWy4uLmFsbEluQ29tcGxldGVkLCAuLi5hbGxDb21wbGV0ZWRBbGwsIC4uLmFsbENvbXBsZXRlZE92ZXJEdWVdO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZEluZGV4KDEpXG4gICAgcmV0dXJuIFtcbiAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICd1cGNvbWluZycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHModXBjb21pbmcsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICdvdmVyZHVlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhvdmVyZHVlLCBzdHJpcCkgfV07XG4gIH1cblxuICBnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXA6IGFueSwga2V5OiBhbnkpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7XG4gICAgaWYgKGtleSA9PT0gJ2NicFBsYW4nKSB7XG4gICAgICBpZiAoc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhID0gc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PT0gJ3VwY29taW5nJyk7XG4gICAgICAgIHJldHVyblZhbHVlID0gZGF0YVswXS53aWRnZXRzICYmIGRhdGFbMF0ud2lkZ2V0cy5sZW5ndGggPiAwID8gMSA6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJyk7XG4gIH1cblxuICBpZGVudGlmeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgdHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIF8uZ2V0KGl0ZW0sICd3aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcicpXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbFRvcENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYWlzZVRlbGVtZXRyeShzdHJpcERhdGE6IGFueSl7XG4gICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoc3RyaXBEYXRhKVxuICB9XG5cbiAgYXN5bmMgcG9zdFJlcXVlc3RNZXRob2Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgIGFwaVVybDogc3RyaW5nLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnBvc3RBcGlNZXRob2QoYXBpVXJsLHJlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgaWYocmVzdWx0cy5yZXN1bHQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgIHRhYjogJ0xlYXJuJyxcbiAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgZjp7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0gZWxzZSBpZihyZXN1bHRzICYmIHJlc3VsdHMuZGF0YSl7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMuZGF0YSAmJiByZXN1bHRzLmRhdGEubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZT8ge1xuICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGY6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdHMucmVzdWx0ICYmIHJlc3VsdHMucmVzdWx0LmRhdGEpe1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLmRhdGEgJiYgcmVzdWx0cy5yZXN1bHQuZGF0YSAmJiByZXN1bHRzLnJlc3VsdC5kYXRhLmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmU/IHtcbiAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBmOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVxdWVzdE1ldGhvZChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5nZXRBcGlNZXRob2QoYXBpVXJsKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgIHJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzdWx0cy5yZXN1bHQuZGF0YS5vcmdMaXN0Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvc3RNZXRob2RGaWx0ZXJzKGZpbHRlcnM6IGFueSl7XG4gICAgaWYgKGZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICkge1xuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWRcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgfVxuICBnZXRGdWxsVXJsKGFwaVVybDogYW55LCBpZDpzdHJpbmcpe1xuICAgIGxldCBmb3JtZWRVcmw6IHN0cmluZyA9ICcnXG4gICAgaWYgKGFwaVVybC5pbmRleE9mKCc8Ym9va21hcmtJZD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPGJvb2ttYXJrSWQ+JywgdGhpcy5lbnZpcm9ubWVudC5tZG9DaGFubmVsc0Jvb2ttYXJrSWQpIFxuICAgIH0gZWxzZSBpZiAoYXBpVXJsLmluZGV4T2YoJzxwbGF5bGlzdEtleT4nKSA+PSAwICYmIGFwaVVybC5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMCkge1xuICAgICAgZm9ybWVkVXJsID0gYXBpVXJsLnJlcGxhY2UoJzxwbGF5bGlzdEtleT4nLCB0aGlzLnByb3ZpZGVySWQgKyBpZCkgXG4gICAgICBmb3JtZWRVcmwgPSBmb3JtZWRVcmwucmVwbGFjZSgnPG9yZ0lEPicsIHRoaXMucHJvdmlkZXJJZCkgXG4gICAgfVxuICAgIHJldHVybiBmb3JtZWRVcmxcbiAgfVxuXG4gIHJlZGlyZWN0Vmlld0FsbChzdHJpcERhdGE6IGFueSwgcGF0aDogc3RyaW5nLCBxdWVyeVBhcmFtc0RhdGE6IGFueSkge1xuICAgIGlmKHRoaXMuZW1pdFZpZXdBbGwpIHtcbiAgICAgIHRoaXMudmlld0FsbFJlc3BvbnNlLmVtaXQoc3RyaXBEYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0sIHsgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhLm9yZ0xpc3RcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1BbGxDb250ZW50c1RvV2lkZ2V0cyhcbiAgICBjb250ZW50czogYW55LFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50JyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgICAgfVxuICAgICkpO1xuICB9XG4gIFxuICBhc3luYyBmZXRjaEFsbFBsYXlsaXN0U2VhcmNoKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgZmluYWxQbGF5bGlzdERhdGE6IGFueSA9IFtdXG4gICAgICAgICAgICBsZXQgcHJvZ3JhbURhdGE6IGFueSA9IHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGFcbiAgICAgICAgICAgIHByb2dyYW1EYXRhLmZvckVhY2goKHByZ0RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZihwcmdEYXRhLmNoaWxkcmVuICYmIHByZ0RhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmluYWxQbGF5bGlzdERhdGEucHVzaChwcmdEYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYoZmluYWxQbGF5bGlzdERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoZmluYWxQbGF5bGlzdERhdGEsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoUGxheWxpc3RSZWFkRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQudHlwZSkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQudHlwZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hDaW9zQ29udGVudERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgZGVidWdnZXJcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50LmZpbHRlckNyaXRlcmlhTWFwKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQuZmlsdGVyQ3JpdGVyaWFNYXA7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQuZmlsdGVyQ3JpdGVyaWFNYXAgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQuZmlsdGVyQ3JpdGVyaWFNYXApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMuZGF0YSAmJiByZXNwb25zZS5yZXN1bHRzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgZXh0Q29udGVudERhdGE6IGFueSA9IHJlc3BvbnNlLnJlc3VsdHMuZGF0YVxuICAgICAgICAgICAgaWYoZXh0Q29udGVudERhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoZXh0Q29udGVudERhdGEsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbn1cbiJdfQ==
|
|
2267
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBc0NDOzs7SUFyQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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QUFLO2lCQUNMLFdBQVcsU0FBQyxJQUFJOzs7O0lBUGpCLHNEQUFtRTs7SUFDbkUseURBQWlEOztJQUNqRCwyREFBbUQ7O0lBQ25ELDREQUFvRDs7SUFDcEQsc0RBQTZCOztJQUM3Qix1REFBcUM7O0lBQ3JDLHdEQUErQjs7SUFDL0IsOENBQ2lEOztJQUNqRCwrREFBbUU7O0lBQ25FLDBEQUE4Qjs7SUFDOUIsNkRBQXlCOztJQUN6Qiw0REFBeUI7O0lBQ3pCLDJEQUF3Qjs7SUFDeEIsNERBQXlCOztJQUN6QiwwREFBbUI7O0lBQ25CLHVEQUFnQjs7SUFDaEIsNERBQXFCOztJQUNyQiw0REFBd0I7O0lBQ3hCLG1EQUF3Qzs7SUFDeEMsNERBQXlCOztJQUN6Qix1REFBa0I7O0lBQ2xCLG1FQUFvRDs7SUFDcEQsNkRBQXVCOztJQUN2QiwwREFBb0I7O0lBQ3BCLHdEQUF1Qjs7SUFDdkIsNkRBQXNCOzs7OztJQUtwQixzREFBd0M7Ozs7O0lBQ3hDLHFEQUFnQzs7Ozs7SUFDaEMsb0RBQThCOzs7OztJQUM5QixxREFBd0M7O0lBQ3hDLHNEQUFpQzs7SUFHakMsa0RBQXFCOzs7OztJQUNyQixtREFBa0M7Ozs7O0lBQ2xDLHFEQUFtQzs7Ozs7SUFDbkMsNERBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBJbmplY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXItdjInO1xuaW1wb3J0IHsgTnNDb250ZW50U3RyaXBXaXRoVGFicyB9IGZyb20gJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLm1vZGVsJztcbi8vIGltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy93aWRnZXQtY29udGVudC5tb2RlbCc7XG5pbXBvcnQgeyBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL211bHRpbGluZ3VhbC10cmFuc2xhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQge1xuICBURmV0Y2hTdGF0dXMsXG4gIExvZ2dlclNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICBVdGlsaXR5U2VydmljZSxcbiAgV3NFdmVudHMsXG59IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV2lkZ2V0VXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LXVzZXIuc2VydmljZSc7XG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5pbXBvcnQgeyBOc0NhcmRDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy9jYXJkLWNvbnRlbnQtdjIubW9kZWwnO1xuaW1wb3J0IHsgSVRvZGF5RXZlbnRzIH0gZnJvbSAnLi4vLi4vX21vZGVscy9ldmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbnRlcmZhY2UgSVN0cmlwVW5pdENvbnRlbnREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGNhbkhpZGVTdHJpcDogYm9vbGVhbjtcbiAgbW9kZT86IHN0cmluZztcbiAgc2hvd1N0cmlwOiBib29sZWFuO1xuICBkaXNhYmxlVHJhbnNsYXRlOiBib29sZWFuO1xuICB3aWRnZXRzPzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXTtcbiAgc3RyaXBUaXRsZTogc3RyaW5nO1xuICBzdHJpcFRpdGxlTGluaz86IHtcbiAgICBsaW5rOiB7XG4gICAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gICAgfSxcbiAgICBpY29uOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICB9O1xuICBzbGlkZXJDb25maWc/OiB7XG4gICAgc2hvd05hdnM6IGJvb2xlYW4sXG4gICAgc2hvd0RvdHM6IGJvb2xlYW4sXG4gICAgbWF4V2lkZ2V0cz86IG51bWJlclxuICAgIGNlcmlmaWNhdGVDYXJkTWFyZ2luPzogYm9vbGVhblxuICB9O1xuICBzdHJpcENvbmZpZzogYW55O1xuICB0YWJzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQ7XG4gIHN0cmlwTmFtZT86IHN0cmluZztcbiAgc3RyaXBMb2dvPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RyaXBJbmZvPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzYi11aWMtY29udGVudC1zdHJpcC13aXRoLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRTdHJpcFdpdGhUYWJzTGliQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlPiB7XG4gIEBJbnB1dCgpIHdpZGdldERhdGEhOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZTtcbiAgQE91dHB1dCgpIGVtcHR5UmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgdmlld0FsbFJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHRlbGVtdHJ5UmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBASW5wdXQoKSBwcm92aWRlcklkOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBlbWl0Vmlld0FsbDogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIGNoYW5ubmVsTmFtZTogYW55ID0gJydcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXG4gIHB1YmxpYyBpZCA9IGB3cy1zdHJpcC1taWx0aXBsZV8ke01hdGgucmFuZG9tKCl9YDtcbiAgc3RyaXBzUmVzdWx0RGF0YU1hcDogeyBba2V5OiBzdHJpbmddOiBJU3RyaXBVbml0Q29udGVudERhdGEgfSA9IHt9O1xuICBzdHJpcHNLZXlPcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgc2hvd0FjY29yZGlvbkRhdGEgPSB0cnVlO1xuICBzaG93UGFyZW50TG9hZGVyID0gZmFsc2U7XG4gIHNob3dQYXJlbnRFcnJvciA9IGZhbHNlO1xuICBzaG93UGFyZW50Tm9EYXRhID0gZmFsc2U7XG4gIGVycm9yRGF0YUNvdW50ID0gMDtcbiAgbm9EYXRhQ291bnQgPSAwO1xuICBzdWNjZXNzRGF0YUNvdW50ID0gMDtcbiAgY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gIGJhc2VVcmwgPSB0aGlzLmNvbmZpZ1N2Yy5zaXRlUGF0aCB8fCAnJztcbiAgdmVpZmllZEthcm1heW9naSA9IGZhbHNlO1xuICBlbnZpcm9ubWVudCE6IGFueTtcbiAgY2hhbmdlRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBkZWZhdWx0TWF4V2lkZ2V0cyA9IDEyO1xuICBlbnJvbGxJbnRlcnZhbDogYW55O1xuICB0b2RheXNFdmVudHM6IGFueSA9IFtdO1xuICBlbnJvbGxtZW50TWFwRGF0YTogYW55XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gcHJpdmF0ZSBjb250ZW50U3RyaXBTdmM6IENvbnRlbnRTdHJpcE5ld011bHRpcGxlU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlclN2YzogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIC8vIHByaXZhdGUgc2VhcmNoU2VydlN2YzogU2VhcmNoU2VydlNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdXNlclN2YzogV2lkZ2V0VXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJyk7XG4gICAgICBsZXQgbGFuZyA9IEpTT04uc3RyaW5naWZ5KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSk7XG4gICAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9cXFwiL2csICcnKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMuaW5pdERhdGEoKTtcbiAgICB0aGlzLmNvbnRlbnRTdmMudGVsZW1ldHJ5RGF0YSQuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudGVsZW10cnlSZXNwb25zZS5lbWl0KGRhdGEpXG4gICAgfSlcblxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5wcm92aWRlcklkKSB7XG4gICAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uID0gdGhpcy5wcm92aWRlcklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB1c2VyRGF0YSAmJiB1c2VyRGF0YS5yb290T3JnSWQ7XG5cbiAgICAgICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnZGVzaWduYXRpb24nKSkge1xuICAgICAgICAgIGZpbHRlcnMuZGVzaWduYXRpb24gPSB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgdXNlckRhdGEucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA6ICcnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgKSB7XG4gICAgLy8gc2V0dGluZyBpbml0aWFsIHZhbHVlc1xuICAgIHN0cmlwLmxvYWRlcldpZGdldHMgPSB0aGlzLnRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKHN0cmlwKTtcbiAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdmZXRjaGluZycsIGZhbHNlLCBudWxsKTtcbiAgICB0aGlzLmZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hGcm9tU2VhcmNoVjYoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEZyb21UcmVuZGluZ0NvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbENicFBsYW5zKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxUb3BDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxGZWF0dXJlZENvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsUGxheWxpc3RTZWFyY2goc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaENpb3NDb250ZW50RGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcblxuICAgIC8vIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAvLyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMClcbiAgfVxuXG4gIGZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0KS5sZW5ndGgpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJztcbiAgICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCBjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLmdldChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0LCAncXVlcnlQYXJhbXMnKTtcbiAgICAgIC8vIGlmIChxdWVyeVBhcmFtcyAmJiBxdWVyeVBhcmFtcy5iYXRjaERldGFpbHMpIHtcbiAgICAgIC8vICAgaWYgKCFxdWVyeVBhcmFtcy5iYXRjaERldGFpbHMuaW5jbHVkZXMoJyZyZXRpcmVkQ291cnNlc0VuYWJsZWQ9dHJ1ZScpKSB7XG4gICAgICAvLyAgICAgcXVlcnlQYXJhbXMuYmF0Y2hEZXRhaWxzICs9ICcmcmV0aXJlZENvdXJzZXNFbmFibGVkPXRydWUnXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQ7XG4gICAgICB9XG4gICAgICAvLyB0aGlzLnVzZXJTdmMucmVzZXRUaW1lKCdlbnJvbGxtZW50U2VydmljZScpXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgICB0aGlzLnVzZXJTdmMuZmV0Y2hVc2VyQmF0Y2hMaXN0KHVzZXJJZCwgcXVlcnlQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY291cnNlcyA9IHJlc3VsdCAmJiByZXN1bHQuY291cnNlcztcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgY291cnNlcy5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiAoc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCkgfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnNlYXJjaFNlcnZTdmMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzKFxuICAgICAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvdXJzZXMubWFwKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFRlbXA6IE5zQ29udGVudC5JQ29udGVudCA9IGMuY29udGVudDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBjLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblN0YXR1cyA9IGMuY29tcGxldGlvblN0YXR1cyB8fCBjLnN0YXR1cyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5lbnJvbGxlZERhdGUgPSBjLmVucm9sbGVkRGF0ZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdENvbnRlbnRBY2Nlc3NUaW1lID0gYy5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudFN0YXR1cyA9IGMubGFzdFJlYWRDb250ZW50U3RhdHVzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRJZCA9IGMubGFzdFJlYWRDb250ZW50SWQgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxyY1Byb2dyZXNzRGV0YWlscyA9IGMubHJjUHJvZ3Jlc3NEZXRhaWxzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5pc3N1ZWRDZXJ0aWZpY2F0ZXMgPSBjLmlzc3VlZENlcnRpZmljYXRlcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuYmF0Y2hJZCA9IGMuYmF0Y2hJZCB8fCAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUZW1wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRvIGZpbHRlciBjb250ZW50IHdpdGggY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwLFxuICAgICAgICAgIC8vIHNvIHRoYXQgb25seSB0aG9zZSBjb250ZW50IHdpbGwgc2hvdyBpbiBob21lIHBhZ2VcbiAgICAgICAgICAvLyBjb250aW51ZSBsZWFyaW5nIHN0cmlwXG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyAgIGNvbnRlbnROZXcgPSBjb250ZW50LmZpbHRlcigoYzogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIC8qKiBjb21tZW50ZWQgYXMgYm90aCBhcmUgMCBhZnRlciBlbnJvbGxsICovXG4gICAgICAgICAgLy8gICAgIGlmIChjLmNvbXBsZXRpb25QZXJjZW50YWdlICYmIGMuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIGNcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBUbyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIGVucm9sbGVkIGRhdGVcbiAgICAgICAgICBjb250ZW50TmV3ID0gKGNvbnRlbnQgfHwgW10pLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQTogYW55ID0gbmV3IERhdGUoYS5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQjogYW55ID0gbmV3IERhdGUoYi5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3LCBzdHJpcCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIChlOiBhbnkpID0+IGUuY29tcGxldGlvblN0YXR1cyA9PT0gMSB8fCBlLmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwLFxuICAgICAgc3RyaXAsXG4gICAgKTtcblxuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoYXJyYXk6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpbHRlcjogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnByb2dyZXNzOiBhbnlbXSA9IFtdXG4gICAgY29uc3QgY29tcGxldGVkOiBhbnlbXSA9IFtdXG4gICAgLy8gYXJyYXkuZm9yRWFjaCgoZTogYW55LCBpZHg6IG51bWJlciwgYXJyOiBhbnlbXSkgPT4gKGN1c3RvbUZpbHRlcihlLCBpZHgsIGFycikgPyBpbnByb2dyZXNzIDogY29tcGxldGVkKS5wdXNoKGUpKVxuICAgIGFycmF5LmZvckVhY2goKGUsIGlkeCwgYXJyKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gZS5zdGF0dXMgPyAoZS5zdGF0dXMgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpIDogJydcbiAgICBjb25zdCBzdGF0dXNSZXRpcmVkID0gc3RhdHVzID09PSAncmV0aXJlZCdcbiAgICBpZiAoY3VzdG9tRmlsdGVyKGUsIGlkeCwgYXJyKSkge1xuICAgIGlmICghc3RhdHVzUmV0aXJlZCkge1xuICAgICAgaW5wcm9ncmVzcy5wdXNoKGUpXG4gICAgfVxuICAgfSBlbHNlIHtcbiAgICBjb21wbGV0ZWQucHVzaChlKVxuICAgfVxuICAgIH0pXG4gICAgLy8gU29ydCB0aGUgY29tcGxldGVkIGFycmF5IHdpdGggJ0xpdmUnIHN0YXR1cyBmaXJzdCBhbmQgJ1JldGlyZWQnIHN0YXR1cyBzZWNvbmRcbiAgICBjb21wbGV0ZWQuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1c0EgPSBhLnN0YXR1cyA/IGEuc3RhdHVzLnRvTG93ZXJDYXNlKCkgOiAnJ1xuICAgICAgY29uc3Qgc3RhdHVzQiA9IGIuc3RhdHVzID8gYi5zdGF0dXMudG9Mb3dlckNhc2UoKSA6ICcnXG4gICAgICBpZiAoc3RhdHVzQSA9PT0gJ2xpdmUnICYmIHN0YXR1c0IgIT09ICdsaXZlJykge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0dXNBICE9PSAnbGl2ZScgJiYgc3RhdHVzQiA9PT0gJ2xpdmUnKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzQSA9PT0gJ3JldGlyZWQnICYmIHN0YXR1c0IgIT09ICdyZXRpcmVkJykge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgICAgaWYgKHN0YXR1c0EgIT09ICdyZXRpcmVkJyAmJiBzdGF0dXNCID09PSAncmV0aXJlZCcpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICByZXR1cm4gMFxuICAgIH0pXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgdmFsdWU6ICdpbnByb2dyZXNzJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhpbnByb2dyZXNzLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdjb21wbGV0ZWQnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbXBsZXRlZCwgc3RyaXApIH1dO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tU2VhcmNoVjYoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhvcmlnaW5hbEZpbHRlcnMpO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5jaGVja0ZvckRhdGVGaWx0ZXJzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGcm9tQXJyYXkoXG4gICAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRvIGV4dHJhY3QgcmVxdWVzdFJlcXVpcmVkIHRvIG91dGVyIGxldmVsIG9mIHRhYnMgY29uZmlnXG4gICAgICAgIGNvbnN0IGZpcnN0VGFiID0gc3RyaXAudGFic1swXTtcbiAgICAgICAgaWYgKGZpcnN0VGFiLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwID0gKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1swXSkgYXMgTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiO1xuXG4gICAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KHN0cmlwLCAwLCBjdXJyZW50VGFiRnJvbU1hcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBzdHJpcC5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChzdHJpcC5rZXkgPT09ICdzY2hlZHVsZWRBc3Nlc3NtZW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSW52aXRPbmx5QXNzZXNzbWVudHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgcmVzcG9uc2Uudmlld01vcmVVcmwpXG5cbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIH0sIDEwMDApXG5cblxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUV2ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tJbnZpdE9ubHlBc3Nlc3NtZW50cyhjb250ZW50OiBhbnksIHN0cmlwOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYW55LCB2aWV3TW9yZVVybDogYW55KSB7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdlbnJvbGxtZW50TWFwRGF0YScpKSB7XG4gICAgICB0aGlzLmVucm9sbG1lbnRNYXBEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZW5yb2xsbWVudE1hcERhdGEnKSB8fCAne30nKVxuICAgICAgbGV0IGZpbHRlcmVkQXJyYXk6IGFueSA9IFtdXG4gICAgICBsZXQgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgIGNvbnRlbnQuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVucm9sbG1lbnRNYXBEYXRhW2RhdGEuaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICBpZih0aGlzLmVucm9sbG1lbnRNYXBEYXRhW2RhdGEuaWRlbnRpZmllcl0uc3RhdHVzICE9PSAyICYmIHRoaXMuZW5yb2xsbWVudE1hcERhdGFbZGF0YS5pZGVudGlmaWVyXS5iYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgZW5yb2xsRGF0YSA9IHRoaXMuZW5yb2xsbWVudE1hcERhdGFbZGF0YS5pZGVudGlmaWVyXS5iYXRjaFxuICAgICAgICAgICAgbGV0IGVuZERhdGU6YW55ID0gbmV3IERhdGUoZW5yb2xsRGF0YS5lbmREYXRlKS5nZXRUaW1lKClcbiAgICAgICAgICAgIC8vIGxldCBlbmREYXRlOmFueSA9ICcyMDI0LTA3LTdUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICAgIGxldCB0aW1lRHVyYXRpb24gPSBlbmREYXRlIC0gbm93XG4gICAgICAgICAgICBpZih0aW1lRHVyYXRpb24gPiAwICkge1xuICAgICAgICAgICAgICBkYXRhWydiYXRjaCddID0gdGhpcy5lbnJvbGxtZW50TWFwRGF0YVtkYXRhLmlkZW50aWZpZXJdLmJhdGNoXG4gICAgICAgICAgICAgIGRhdGFbJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSB0aGlzLmVucm9sbG1lbnRNYXBEYXRhW2RhdGEuaWRlbnRpZmllcl0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICAgICAgZmlsdGVyZWRBcnJheS5wdXNoKGRhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgZmlsdGVyZWRBcnJheSA9IGZpbHRlcmVkQXJyYXkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZGF0ZUE6IGFueSA9IG5ldyBEYXRlKGEuYmF0Y2guc3RhcnREYXRlIHx8IDApXG4gICAgICAgIGNvbnN0IGRhdGVCOiBhbnkgPSBuZXcgRGF0ZShiLmJhdGNoLnN0YXJ0RGF0ZSB8fCAwKVxuICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQVxuICAgICAgfSlcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICBzdHJpcCxcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhmaWx0ZXJlZEFycmF5LCBzdHJpcCksXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICk7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZW5yb2xsSW50ZXJ2YWwpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoVjZSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnNlYXJjaFY2KHJlcXVlc3Quc2VhcmNoVjYpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAvLyBpZiAodmlld01vcmVVcmwgJiYgdmlld01vcmVVcmwucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAvLyAgIHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0gdmlld01vcmVVcmwucXVlcnlQYXJhbXNcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpIHtcbiAgICAgIC8vIGlmICghKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUpIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFt0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUubG9jYWxzWzBdXVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gWydlbiddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2cob3JpZ2luYWxGaWx0ZXJzKTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVE9ETzogSGF2ZSB0byBleHRyYWN0IHJlcXVlc3RSZXF1aXJlZCB0byBvdXRlciBsZXZlbCBvZiB0YWJzIGNvbmZpZ1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGlmIChmaXJzdFRhYi5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcCA9IChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhzdHJpcCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZVtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCB8fCAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1ZXN0IGlmIGl0IGhhcyBkeW5hbWljIHZhbHVlc11cbiAgICAgICAgaWYgKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgdXNlclJvb3RPcmdJZDtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIHVzZXJSb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJSb290T3JnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnRyZW5kaW5nQ29udGVudFNlYXJjaChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0ICYmXG4gICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0ubGVuZ3RoID4gNSAmJlxuICAgICAgICAgICAgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBsZXQgcHJvY2Nlc2VkUmVzdWx0OiBhbnkgPSBbXVxuICAgICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMucmVzcG9uc2UgJiYgcmVzdWx0cy5yZXNwb25zZS5jZXJ0aWZpY2F0aW9ucykge1xuICAgICAgICAgICAgcmVzdWx0cy5yZXNwb25zZS5jZXJ0aWZpY2F0aW9ucy5tYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQuc291cmNlID09PSB0aGlzLmNoYW5ubmVsTmFtZSkge1xuICAgICAgICAgICAgICAgIHByb2NjZXNlZFJlc3VsdC5wdXNoKHJlc3VsdClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0cyA9IHsgcmVzcG9uc2U6IHsgY2VydGlmaWNhdGlvbnM6IHByb2NjZXNlZFJlc3VsdCB9IH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbClcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlSW5mbyhkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBjb25zdCBzdHJpcEluZm8gPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbztcbiAgICBpZiAoc3RyaXBJbmZvKSB7XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgIT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2Fybihgc3RyaXAgaW5mbyBtb2RlOiAke3N0cmlwSW5mby5tb2RlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7XG4gICAgICAgIHN0cmlwSW5mby5tb2RlID0gJ2JlbG93JztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSA9PT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbyA9IHtcbiAgICAgICAgICAuLi5zdHJpcEluZm8sXG4gICAgICAgICAgdmlzaWJpbGl0eU1vZGU6IHN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ2hpZGRlbicgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBJVG9kYXlFdmVudHNbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFN2Yy5zZXRFdmVudExpc3REYXRhKGNvbnRlbnRzKTtcbiAgICByZXR1cm4gKHRoaXMuZXZlbnRTdmMudG9kYXlzRXZlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQ6IGFueSwgaWR4OiBhbnkpID0+IChjb250ZW50ID8ge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgIH0sXG4gICAgfSA6IHtcbiAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgIHdpZGdldFN1YlR5cGU6ICdldmVudEh1YkNhcmQnLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICB9XG4gICAgKSk7XG4gIH1cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhcbiAgICBzdHJpcDogYW55XG4gICkge1xuICAgIHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgNywgOCwgOSwgMTBdLm1hcChfY29udGVudCA9PiAoe1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAubG9hZGVyQ29uZmlnICYmIHN0cmlwLmxvYWRlckNvbmZpZy5jYXJkU3ViVHlwZSB8fCAnY2FyZC1zdGFuZGFyZC1za2VsZXRvbicsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdHJpcChcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXN1bHRzOiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdID0gW10sXG4gICAgZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICAgIF92aWV3TW9yZVVybDogYW55LFxuICAgIHRhYnNSZXN1bHRzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIHdpZGdldHM6XG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZSdcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLihzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAgICAgICAuLi4oc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgc2hvd09uTm9EYXRhOiBCb29sZWFuKFxuICAgICAgICBzdHJpcC5ub0RhdGFXaWRnZXQgJiZcbiAgICAgICAgISgoc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubGVuZ3RoICsgcmVzdWx0cy5sZW5ndGggKyAoc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLmxlbmd0aCkgJiZcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJyxcbiAgICAgICksXG4gICAgICBzaG93T25Mb2FkZXI6IEJvb2xlYW4oc3RyaXAubG9hZGVyICYmIGZldGNoU3RhdHVzID09PSAnZmV0Y2hpbmcnKSxcbiAgICAgIHNob3dPbkVycm9yOiBCb29sZWFuKHN0cmlwLmVycm9yV2lkZ2V0ICYmIGZldGNoU3RhdHVzID09PSAnZXJyb3InKSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldXG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwID0ge1xuICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwLFxuICAgICAgW3N0cmlwLmtleV06IHN0cmlwRGF0YSxcbiAgICB9O1xuICAgIGlmICghdGFic1Jlc3VsdHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmXG4gICAgICAgIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZldGNoU3RhdHVzID09PSAnZXJyb3InKSAmJlxuICAgICAgICBzdHJpcERhdGEud2lkZ2V0c1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXMsIHN0cmlwRGF0YS53aWRnZXRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmICEocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICgoc3RyaXAucmVxdWVzdC5hcGkgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5hcGkpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uICYmXG4gICAgICAgICAgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbikubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50KS5sZW5ndGgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogc3RyaW5nKSB7XG4gICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IHRydWU7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5VGFiRGF0YSA9IHtcbiAgICAgIGxhYmVsOiBgJHt0YWJFdmVudC50YWIudGV4dExhYmVsfWAsXG4gICAgICBpbmRleDogdGFiRXZlbnQuaW5kZXgsXG4gICAgfTtcbiAgICB0aGlzLmV2ZW50U3ZjLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxuICAgICAgICBzdWJUeXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RTdWJUeXBlcy5IT01FX1BBR0VfU1RSSVBfVEFCUyxcbiAgICAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkhPTUUsXG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50U3RyaXAgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQocyA9PiBzLmtleSA9PT0gc3RyaXBLZXkpO1xuICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldICYmIGN1cnJlbnRUYWJGcm9tTWFwKSB7XG4gICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICB0YWJTZWxlY3RlZDogY3VycmVudFRhYkZyb21NYXAubGFiZWwsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY3VycmVudFN0cmlwICYmIGN1cnJlbnRUYWJGcm9tTWFwICYmICFjdXJyZW50VGFiRnJvbU1hcC5jb21wdXRlRGF0YU9uQ2xpY2spIHtcbiAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0UmVxdWlyZWQgJiYgY3VycmVudFRhYkZyb21NYXAucmVxdWVzdCkge1xuICAgICAgICAvLyBjYWxsIEFQSSB0byBnZXQgdGFiIGRhdGEgYW5kIHByb2Nlc3NcbiAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoY3VycmVudFN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgdHJ1ZSwgbnVsbClcbiAgICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnQuaW5kZXgsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5ZmlsdGVyKGN1cnJlbnRTdHJpcCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2VbY3VycmVudFRhYi52YWx1ZV0gfHwgW107XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0tIHdpZGdldHMnLCB3aWRnZXRzKVxuICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZygndGFiUmVzdWx0cyAtKysrKyoqKi0tJywgdGFiUmVzdWx0cylcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRhYkRhdGFCeWZpbHRlcihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnc3RyaXAgLS0gJywgc3RyaXApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLSAnLCBjdXJyZW50VGFiKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2NhbGN1bGF0ZVBhcmVudFN0YXR1cy0tICcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgLy8gVE9ETzogV3JpdGUgbG9naWMgZm9yIGluZGl2aWR1YWwgZmlsdGVyIGlmIHBhc3NlZCBpbiBjb25maWdcbiAgICAvLyBhZGQgc3dpdGNoIGNhc2UgYmFzZWQgb24gY29uZmlnIGtleSBwYXNzZWRcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsQ2JwUGxhbnMoc3RyaXA6IGFueSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuXG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB7XG5cbiAgICAgIGxldCBjb3Vyc2VzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hDYnBQbGFuTGlzdCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvdXJzZXMgPSByZXNwb25zZTtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdENicFRhYnNEYXRhKGNvdXJzZXMsIHN0cmlwKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICd2aWV3TW9yZVVybCcsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS5zdWJzY3JpYmUoIGFzeW5jICAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlcykge1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHJlcywnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4nKVxuICAgICAgLy8gICAgIGNvdXJzZXMgPSByZXNcbiAgICAgIC8vICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgLy8gICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcClcbiAgICAgIC8vICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAnJyxcbiAgICAgIC8vICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXJyOiBhbnkpID0+IHtcblxuICAgICAgLy8gfSlcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgc3BsaXRDYnBUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0VGFic0xpc3QoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgc3RyaXAsXG4gICAgKTtcbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBsZXQgYWxsOiBhbnlbXSA9IFtdO1xuICAgIGxldCB1cGNvbWluZzogYW55W10gPSBbXTtcbiAgICBsZXQgb3ZlcmR1ZTogYW55W10gPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKChlOiBhbnkpID0+IHtcbiAgICAgIGFsbC5wdXNoKGUpO1xuICAgICAgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIG92ZXJkdWUucHVzaChlKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0LlVQQ09NSU5HKSB7XG4gICAgICAgIHVwY29taW5nLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPT09IDIpO1xuICAgIGxldCBhbGxJbkNvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzIDwgMik7XG5cbiAgICBsZXQgYWxsQ29tcGxldGVkT3ZlckR1ZSA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZEFsbCA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5wbGFuRHVyYXRpb24gIT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpO1xuXG4gICAgYWxsQ29tcGxldGVkT3ZlckR1ZSA9IGFsbENvbXBsZXRlZE92ZXJEdWUuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFICYmIGIucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxJbkNvbXBsZXRlZCA9IGFsbEluQ29tcGxldGVkLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSAmJiBiLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiBmaXJzdERhdGUgPiBzZWNvbmREYXRlID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsID0gWy4uLmFsbEluQ29tcGxldGVkLCAuLi5hbGxDb21wbGV0ZWRBbGwsIC4uLmFsbENvbXBsZXRlZE92ZXJEdWVdO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgcmV0dXJuIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgPyAtMSA6IDE7XG4gICAgfSk7XG5cbiAgICB1cGNvbWluZyA9IHVwY29taW5nLmZpbHRlcigoZGF0YTogYW55KTogYW55ID0+IHtcbiAgICAgIHJldHVybiBkYXRhLmNvbnRlbnRTdGF0dXMgPCAyO1xuICAgIH0pO1xuICAgIC8vIHRoaXMuZ2V0U2VsZWN0ZWRJbmRleCgxKVxuICAgIHJldHVybiBbXG4gICAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ3VwY29taW5nJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyh1cGNvbWluZywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAnb3ZlcmR1ZScsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMob3ZlcmR1ZSwgc3RyaXApIH1dO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRJbmRleChzdHJpcHNSZXN1bHREYXRhTWFwOiBhbnksIGtleTogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSAwO1xuICAgIGlmIChrZXkgPT09ICdjYnBQbGFuJykge1xuICAgICAgaWYgKHN0cmlwc1Jlc3VsdERhdGFNYXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHN0cmlwc1Jlc3VsdERhdGFNYXAudGFicy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUudmFsdWUgPT09ICd1cGNvbWluZycpO1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGRhdGFbMF0ud2lkZ2V0cyAmJiBkYXRhWzBdLndpZGdldHMubGVuZ3RoID4gMCA/IDEgOiAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHRyYWNrZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBfLmdldChpdGVtLCAnd2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXInKVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hBbGxUb3BDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hBbGxGZWF0dXJlZENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYWlzZVRlbGVtZXRyeShzdHJpcERhdGE6IGFueSkge1xuICAgIHRoaXMudGVsZW10cnlSZXNwb25zZS5lbWl0KHN0cmlwRGF0YSlcbiAgfVxuXG4gIGFzeW5jIHBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5wb3N0QXBpTWV0aG9kKGFwaVVybCwgcmVxdWVzdCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHRzLnJlc3VsdCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICAgIGY6IHt9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgIHJlc3VsdHMuZGF0YSAmJiByZXN1bHRzLmRhdGEubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZSA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdHMucmVzdWx0ICYmIHJlc3VsdHMucmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICAgIHJlc3VsdHMuZGF0YSAmJiByZXN1bHRzLnJlc3VsdC5kYXRhICYmIHJlc3VsdHMucmVzdWx0LmRhdGEubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZSA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlcXVlc3RNZXRob2Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgIGFwaVVybDogc3RyaW5nLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuZ2V0QXBpTWV0aG9kKGFwaVVybCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICBsZXQgc2hvd1ZpZXdNb3JlOiBhbnlcbiAgICAgICAgaWYocmVzdWx0cy5yZXN1bHQuZGF0YSl7XG4gICAgICAgICAgICBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5kYXRhICYmIHJlc3VsdHMucmVzdWx0LmRhdGEub3JnTGlzdC5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYocmVzdWx0cy5yZXN1bHQuY29udGVudCl7XG4gICAgICAgICAgbGV0IGZlYXR1cmVkUHJvdmlkZXIgPSBKU09OLnBhcnNlKHJlc3VsdHMucmVzdWx0LmNvbnRlbnQuZmVhdHVyZWRQcm92aWRlcnMgfHwgJ1tdJylcbiAgICAgICAgICBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgZmVhdHVyZWRQcm92aWRlciAmJiBmZWF0dXJlZFByb3ZpZGVyLmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvc3RNZXRob2RGaWx0ZXJzKGZpbHRlcnM6IGFueSkge1xuICAgIGlmIChmaWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICApIHtcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uID0gdGhpcy5wcm92aWRlcklkXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzXG4gIH1cbiAgZ2V0RnVsbFVybChhcGlVcmw6IGFueSwgaWQ6IHN0cmluZykge1xuICAgIGxldCBmb3JtZWRVcmw6IHN0cmluZyA9ICcnXG4gICAgaWYgKGFwaVVybC5pbmRleE9mKCc8Ym9va21hcmtJZD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPGJvb2ttYXJrSWQ+JywgdGhpcy5lbnZpcm9ubWVudC5tZG9DaGFubmVsc0Jvb2ttYXJrSWQpXG4gICAgfSBlbHNlIGlmIChhcGlVcmwuaW5kZXhPZignPHBsYXlsaXN0S2V5PicpID49IDAgJiYgYXBpVXJsLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPHBsYXlsaXN0S2V5PicsIHRoaXMucHJvdmlkZXJJZCArIGlkKSBcbiAgICAgIGZvcm1lZFVybCA9IGZvcm1lZFVybC5yZXBsYWNlKCc8b3JnSUQ+JywgdGhpcy5wcm92aWRlcklkKSBcbiAgICB9IGVsc2UgaWYoYXBpVXJsLmluZGV4T2YoJzxkb0lkPicpID49IDApIHtcbiAgICAgIGZvcm1lZFVybCA9IGFwaVVybC5yZXBsYWNlKCc8ZG9JZD4nLCB0aGlzLmVudmlyb25tZW50LnByb3ZpZGVyRGF0YUtleSkgXG4gICAgfVxuICAgIHJldHVybiBmb3JtZWRVcmxcbiAgfVxuXG4gIHJlZGlyZWN0Vmlld0FsbChzdHJpcERhdGE6IGFueSwgcGF0aDogc3RyaW5nLCBxdWVyeVBhcmFtc0RhdGE6IGFueSkge1xuICAgIGlmICh0aGlzLmVtaXRWaWV3QWxsKSB7XG4gICAgICB0aGlzLnZpZXdBbGxSZXNwb25zZS5lbWl0KHN0cmlwRGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdLCB7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICBsZXQgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEub3JnTGlzdFxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1BbGxDb250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IGFueSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsUGxheWxpc3RTZWFyY2goc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBmaW5hbFBsYXlsaXN0RGF0YTogYW55ID0gW11cbiAgICAgICAgICAgIGxldCBwcm9ncmFtRGF0YTogYW55ID0gcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YVxuICAgICAgICAgICAgcHJvZ3JhbURhdGEuZm9yRWFjaCgocHJnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwcmdEYXRhLmNoaWxkcmVuICYmIHByZ0RhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZmluYWxQbGF5bGlzdERhdGEucHVzaChwcmdEYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKGZpbmFsUGxheWxpc3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGZpbmFsUGxheWxpc3REYXRhLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoUGxheWxpc3RSZWFkRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQudHlwZSkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQudHlwZSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgaWYoc3RyaXAua2V5ID09PSAncHJvdmlkZXJzJyl7XG4gICAgICAgICAgICBsZXQgZmVhdHVyZWRQcm92aWRlcnMgOiBhbnkgPSBKU09OLnBhcnNlKGNvbnRlbnQuZmVhdHVyZWRQcm92aWRlcnN8fCAnW10nKVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUFsbENvbnRlbnRzVG9XaWRnZXRzKGZlYXR1cmVkUHJvdmlkZXJzLCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1BbGxDb250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaENpb3NDb250ZW50RGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudC5maWx0ZXJDcml0ZXJpYU1hcCkge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50LmZpbHRlckNyaXRlcmlhTWFwO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50LmZpbHRlckNyaXRlcmlhTWFwID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50LmZpbHRlckNyaXRlcmlhTWFwKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLmRhdGEgJiYgcmVzcG9uc2UucmVzdWx0cy5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGV4dENvbnRlbnREYXRhOiBhbnkgPSByZXNwb25zZS5yZXN1bHRzLmRhdGFcbiAgICAgICAgICAgIGlmIChleHRDb250ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhleHRDb250ZW50RGF0YSwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19
|