@sunbird-cb/consumption 0.0.35 → 0.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/bundles/sunbird-cb-consumption.umd.js +298 -45
  2. package/bundles/sunbird-cb-consumption.umd.js.map +1 -1
  3. package/bundles/sunbird-cb-consumption.umd.min.js +1 -1
  4. package/bundles/sunbird-cb-consumption.umd.min.js.map +1 -1
  5. package/esm2015/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.js +167 -0
  6. package/esm2015/lib/_common/cards/cards.component.js +25 -8
  7. package/esm2015/lib/_common/cards/cards.module.js +4 -2
  8. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +79 -17
  9. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.js +1 -1
  10. package/esm2015/sunbird-cb-consumption.js +23 -22
  11. package/esm5/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.js +173 -0
  12. package/esm5/lib/_common/cards/cards.component.js +19 -8
  13. package/esm5/lib/_common/cards/cards.module.js +4 -2
  14. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +91 -17
  15. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.js +1 -1
  16. package/esm5/sunbird-cb-consumption.js +23 -22
  17. package/fesm2015/sunbird-cb-consumption.js +265 -24
  18. package/fesm2015/sunbird-cb-consumption.js.map +1 -1
  19. package/fesm5/sunbird-cb-consumption.js +276 -24
  20. package/fesm5/sunbird-cb-consumption.js.map +1 -1
  21. package/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.d.ts +33 -0
  22. package/lib/_common/cards/cards.component.d.ts +1 -2
  23. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts +1 -0
  24. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts +1 -0
  25. package/package.json +1 -1
  26. package/sunbird-cb-consumption.d.ts +22 -21
  27. package/sunbird-cb-consumption.metadata.json +1 -1
@@ -480,6 +480,7 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
480
480
  this.fetchAllBookMarkData(strip, calculateParentStatus);
481
481
  this.fetchAllPlaylistSearch(strip, calculateParentStatus);
482
482
  this.fetchPlaylistReadData(strip, calculateParentStatus);
483
+ this.fetchCiosContentData(strip, calculateParentStatus);
483
484
  // this.enrollInterval = setInterval(() => {
484
485
  // this.fetchAllCbpPlans(strip, calculateParentStatus)
485
486
  // }, 1000)
@@ -1120,7 +1121,8 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
1120
1121
  (strip.request.featureContent && Object.keys(strip.request.featureContent).length) ||
1121
1122
  (strip.request.bookmarkRead && Object.keys(strip.request.bookmarkRead).length) ||
1122
1123
  (strip.request.playlistSearch && Object.keys(strip.request.playlistSearch).length) ||
1123
- (strip.request.playlistRead && Object.keys(strip.request.playlistRead).length))) {
1124
+ (strip.request.playlistRead && Object.keys(strip.request.playlistRead).length) ||
1125
+ (strip.request.ciosContent && Object.keys(strip.request.ciosContent).length))) {
1124
1126
  return true;
1125
1127
  }
1126
1128
  return false;
@@ -1629,8 +1631,6 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
1629
1631
  */
1630
1632
  postRequestMethod(strip, request, apiUrl, calculateParentStatus) {
1631
1633
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
1632
- /** @type {?} */
1633
- const originalFilters = [];
1634
1634
  return new Promise((/**
1635
1635
  * @param {?} resolve
1636
1636
  * @param {?} reject
@@ -1643,25 +1643,37 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
1643
1643
  * @return {?}
1644
1644
  */
1645
1645
  results => {
1646
- /** @type {?} */
1647
- const showViewMore = Boolean(results.result.content && results.result.content.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
1648
- /** @type {?} */
1649
- const viewMoreUrl = showViewMore
1650
- ? {
1646
+ if (results.result && results.result.content) {
1647
+ /** @type {?} */
1648
+ const showViewMore = Boolean(results.result.content && results.result.content.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
1649
+ /** @type {?} */
1650
+ const viewMoreUrl = showViewMore
1651
+ ? {
1652
+ path: strip.viewMoreUrl && strip.viewMoreUrl.path || '',
1653
+ queryParams: {
1654
+ tab: 'Learn',
1655
+ q: strip.viewMoreUrl && strip.viewMoreUrl.queryParams,
1656
+ f: {},
1657
+ },
1658
+ }
1659
+ : null;
1660
+ resolve({ results, viewMoreUrl });
1661
+ }
1662
+ else if (results && results.data) {
1663
+ /** @type {?} */
1664
+ const showViewMore = Boolean(results.data && results.data.length > 5 && strip.stripConfig && strip.stripConfig.postCardForSearch);
1665
+ /** @type {?} */
1666
+ const viewMoreUrl = showViewMore ? {
1651
1667
  path: strip.viewMoreUrl && strip.viewMoreUrl.path || '',
1652
1668
  queryParams: {
1653
1669
  tab: 'Learn',
1654
1670
  q: strip.viewMoreUrl && strip.viewMoreUrl.queryParams,
1655
- f: request &&
1656
- request.searchV6 &&
1657
- request.searchV6.request &&
1658
- request.searchV6.request.filters
1659
- ? JSON.stringify(this.transformSearchV6FiltersV2(originalFilters))
1660
- : {},
1671
+ f: {},
1661
1672
  },
1662
1673
  }
1663
- : null;
1664
- resolve({ results, viewMoreUrl });
1674
+ : null;
1675
+ resolve({ results, viewMoreUrl });
1676
+ }
1665
1677
  }), (/**
1666
1678
  * @param {?} error
1667
1679
  * @return {?}
@@ -1921,6 +1933,56 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
1921
1933
  }
1922
1934
  });
1923
1935
  }
1936
+ /**
1937
+ * @param {?} strip
1938
+ * @param {?=} calculateParentStatus
1939
+ * @return {?}
1940
+ */
1941
+ fetchCiosContentData(strip, calculateParentStatus = true) {
1942
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
1943
+ if (strip.request && strip.request.ciosContent && Object.keys(strip.request.ciosContent).length) {
1944
+ /** @type {?} */
1945
+ let originalFilters = [];
1946
+ if (strip.request &&
1947
+ strip.request.ciosContent &&
1948
+ strip.request.ciosContent.filterCriteriaMap) {
1949
+ originalFilters = strip.request.ciosContent.filterCriteriaMap;
1950
+ strip.request.ciosContent.filterCriteriaMap = this.postMethodFilters(strip.request.ciosContent.filterCriteriaMap);
1951
+ }
1952
+ try {
1953
+ /** @type {?} */
1954
+ const response = yield this.postRequestMethod(strip, strip.request.ciosContent, strip.request.apiUrl, calculateParentStatus);
1955
+ // console.log('calling after - response, ', response)
1956
+ if (response && response.results) {
1957
+ // console.log('calling after-- ')
1958
+ if (response.results.data && response.results.data.length) {
1959
+ /** @type {?} */
1960
+ let extContentData = response.results.data;
1961
+ if (extContentData.length) {
1962
+ this.processStrip(strip, this.transformContentsToWidgets(extContentData, strip), 'done', calculateParentStatus, response.viewMoreUrl);
1963
+ }
1964
+ else {
1965
+ this.emptyResponse.emit(true);
1966
+ }
1967
+ }
1968
+ else {
1969
+ this.processStrip(strip, [], 'error', calculateParentStatus, null);
1970
+ this.emptyResponse.emit(true);
1971
+ }
1972
+ }
1973
+ else {
1974
+ this.processStrip(strip, [], 'error', calculateParentStatus, null);
1975
+ this.emptyResponse.emit(true);
1976
+ }
1977
+ }
1978
+ catch (error) {
1979
+ this.emptyResponse.emit(true);
1980
+ // Handle errors
1981
+ // console.error('Error:', error);
1982
+ }
1983
+ }
1984
+ });
1985
+ }
1924
1986
  }
1925
1987
  ContentStripWithTabsLibComponent.decorators = [
1926
1988
  { type: Component, args: [{
@@ -2040,4 +2102,4 @@ if (false) {
2040
2102
  */
2041
2103
  ContentStripWithTabsLibComponent.prototype.langtranslations;
2042
2104
  }
2043
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBcUNDOzs7SUFwQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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K0I7Ozt5QkFzRXJDLEtBQUs7NEJBQ0wsTUFBTTs4QkFDTixNQUFNOytCQUNOLE1BQU07eUJBQ04sS0FBSzswQkFDTCxLQUFLO2lCQUNMLFdBQVcsU0FBQyxJQUFJOzs7O0lBTmpCLHNEQUFtRTs7SUFDbkUseURBQWlEOztJQUNqRCwyREFBbUQ7O0lBQ25ELDREQUFvRDs7SUFDcEQsc0RBQThCOztJQUM5Qix1REFBc0M7O0lBQ3RDLDhDQUNpRDs7SUFDakQsK0RBQW1FOztJQUNuRSwwREFBOEI7O0lBQzlCLDZEQUF5Qjs7SUFDekIsNERBQXlCOztJQUN6QiwyREFBd0I7O0lBQ3hCLDREQUF5Qjs7SUFDekIsMERBQW1COztJQUNuQix1REFBZ0I7O0lBQ2hCLDREQUFxQjs7SUFDckIsNERBQXdCOztJQUN4QixtREFBd0M7O0lBQ3hDLDREQUF5Qjs7SUFDekIsdURBQWtCOztJQUNsQixtRUFBb0Q7O0lBQ3BELDZEQUF1Qjs7SUFDdkIsMERBQW9COztJQUNwQix3REFBdUI7Ozs7O0lBS3JCLHNEQUF3Qzs7Ozs7SUFDeEMscURBQWdDOzs7OztJQUNoQyxvREFBOEI7Ozs7O0lBQzlCLHFEQUF3Qzs7SUFDeEMsc0RBQWlDOztJQUdqQyxrREFBcUI7Ozs7O0lBQ3JCLG1EQUFrQzs7Ozs7SUFDbEMscURBQW1DOzs7OztJQUNuQyw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC12Mi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9kYXlFdmVudHMgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2V2ZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmludGVyZmFjZSBJU3RyaXBVbml0Q29udGVudERhdGEge1xuICBrZXk6IHN0cmluZztcbiAgY2FuSGlkZVN0cmlwOiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBzaG93U3RyaXA6IGJvb2xlYW47XG4gIGRpc2FibGVUcmFuc2xhdGU6IGJvb2xlYW47XG4gIHdpZGdldHM/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdO1xuICBzdHJpcFRpdGxlOiBzdHJpbmc7XG4gIHN0cmlwVGl0bGVMaW5rPzoge1xuICAgIGxpbms6ICB7XG4gICAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gICAgfSxcbiAgICBpY29uOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICB9O1xuICBzbGlkZXJDb25maWc/OiB7XG4gICAgc2hvd05hdnM6IGJvb2xlYW4sXG4gICAgc2hvd0RvdHM6IGJvb2xlYW4sXG4gICAgbWF4V2lkZ2V0cz86IG51bWJlclxuICAgIGNlcmlmaWNhdGVDYXJkTWFyZ2luPzogYm9vbGVhblxuICB9O1xuICBzdHJpcENvbmZpZzogYW55O1xuICB0YWJzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQ7XG4gIHN0cmlwTmFtZT86IHN0cmluZztcbiAgc3RyaXBMb2dvPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RyaXBJbmZvPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItdWljLWNvbnRlbnQtc3RyaXAtd2l0aC10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic0xpYkNvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZT4ge1xuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHZpZXdBbGxSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB0ZWxlbXRyeVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZCA6IGFueSA9ICcnXG4gIEBJbnB1dCgpIGVtaXRWaWV3QWxsIDogYm9vbGVhbiA9IGZhbHNlXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgICAgIGxldCBsYW5nID0gSlNPTi5zdHJpbmdpZnkobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKTtcbiAgICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UoL1xcXCIvZywgJycpO1xuICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuXG4gICAgdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChkYXRhKVxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBpZih0aGlzLnByb3ZpZGVySWQpIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgZmlsdGVycy5kZXNpZ25hdGlvbiA9IHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICApIHtcbiAgICAvLyBzZXR0aW5nIGluaXRpYWwgdmFsdWVzXG4gICAgc3RyaXAubG9hZGVyV2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtU2tlbGV0b25Ub1dpZGdldHMoc3RyaXApO1xuICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMuZmV0Y2hGcm9tRW5yb2xsbWVudExpc3Qoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEZyb21TZWFyY2hWNihzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbFRvcENvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQm9va01hcmtEYXRhKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxQbGF5bGlzdFNlYXJjaChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoUGxheWxpc3RSZWFkRGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICBcbiAgICAvLyB0aGlzLmVucm9sbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5mZXRjaEFsbENicFBsYW5zKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgLy8gfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApXG4gIH1cblxuICBmZXRjaEZyb21FbnJvbGxtZW50TGlzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB7XG4gICAgICBsZXQgdXNlcklkID0gJyc7XG4gICAgICBsZXQgY29udGVudDogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gXy5nZXQoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCwgJ3F1ZXJ5UGFyYW1zJyk7XG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkO1xuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkZXByZWNhdGlvblxuICAgICAgdGhpcy51c2VyU3ZjLmZldGNoVXNlckJhdGNoTGlzdCh1c2VySWQsIHF1ZXJ5UGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvdXJzZXMgPSByZXN1bHQgJiYgcmVzdWx0LmNvdXJzZXM7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIGNvdXJzZXMubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogKHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGgpIHx8ICcnLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZWFyY2hTZXJ2U3ZjLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVycyhcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgaWYgKGNvdXJzZXMgJiYgY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb3Vyc2VzLm1hcCgoYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUZW1wOiBOc0NvbnRlbnQuSUNvbnRlbnQgPSBjLmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmNvbXBsZXRpb25QZXJjZW50YWdlID0gYy5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjLnByb2dyZXNzIHx8IDA7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmNvbXBsZXRpb25TdGF0dXMgPSBjLmNvbXBsZXRpb25TdGF0dXMgfHwgYy5zdGF0dXMgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuZW5yb2xsZWREYXRlID0gYy5lbnJvbGxlZERhdGUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RDb250ZW50QWNjZXNzVGltZSA9IGMubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRTdGF0dXMgPSBjLmxhc3RSZWFkQ29udGVudFN0YXR1cyB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdFJlYWRDb250ZW50SWQgPSBjLmxhc3RSZWFkQ29udGVudElkIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5scmNQcm9ncmVzc0RldGFpbHMgPSBjLmxyY1Byb2dyZXNzRGV0YWlscyB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuaXNzdWVkQ2VydGlmaWNhdGVzID0gYy5pc3N1ZWRDZXJ0aWZpY2F0ZXMgfHwgW107XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmJhdGNoSWQgPSBjLmJhdGNoSWQgfHwgJyc7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50VGVtcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUbyBmaWx0ZXIgY29udGVudCB3aXRoIGNvbXBsZXRpb25QZXJjZW50YWdlID4gMCxcbiAgICAgICAgICAvLyBzbyB0aGF0IG9ubHkgdGhvc2UgY29udGVudCB3aWxsIHNob3cgaW4gaG9tZSBwYWdlXG4gICAgICAgICAgLy8gY29udGludWUgbGVhcmluZyBzdHJpcFxuICAgICAgICAgIC8vIGlmIChjb250ZW50ICYmIGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gICBjb250ZW50TmV3ID0gY29udGVudC5maWx0ZXIoKGM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAvKiogY29tbWVudGVkIGFzIGJvdGggYXJlIDAgYWZ0ZXIgZW5yb2xsbCAqL1xuICAgICAgICAgIC8vICAgICBpZiAoYy5jb21wbGV0aW9uUGVyY2VudGFnZSAmJiBjLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCkge1xuICAgICAgICAgIC8vICAgICAgIHJldHVybiBjXG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gVG8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZSBlbnJvbGxlZCBkYXRlXG4gICAgICAgICAgY29udGVudE5ldyA9IChjb250ZW50IHx8IFtdKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUE6IGFueSA9IG5ldyBEYXRlKGEubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUI6IGFueSA9IG5ldyBEYXRlKGIubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVCIC0gZGF0ZUE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRFbnJvbGxtZW50VGFic0RhdGEoY29udGVudE5ldywgc3RyaXApO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnROZXcsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0SW5wcm9ncmVzc0FuZENvbXBsZXRlZChcbiAgICAgIGNvbnRlbnROZXcsXG4gICAgICAoZTogYW55KSA9PiBlLmNvbXBsZXRpb25TdGF0dXMgPT09IDEgfHwgZS5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCxcbiAgICAgIHN0cmlwLFxuICAgICk7XG5cbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWx0ZXI6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IGlucHJvZ3Jlc3M6IGFueVtdID0gW107XG4gICAgY29uc3QgY29tcGxldGVkOiBhbnlbXSA9IFtdO1xuICAgIGFycmF5LmZvckVhY2goKGU6IGFueSwgaWR4OiBudW1iZXIsIGFycjogYW55W10pID0+IChjdXN0b21GaWx0ZXIoZSwgaWR4LCBhcnIpID8gaW5wcm9ncmVzcyA6IGNvbXBsZXRlZCkucHVzaChlKSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgdmFsdWU6ICdpbnByb2dyZXNzJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhpbnByb2dyZXNzLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdjb21wbGV0ZWQnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbXBsZXRlZCwgc3RyaXApIH1dO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tU2VhcmNoVjYoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhvcmlnaW5hbEZpbHRlcnMpO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5jaGVja0ZvckRhdGVGaWx0ZXJzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGcm9tQXJyYXkoXG4gICAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRvIGV4dHJhY3QgcmVxdWVzdFJlcXVpcmVkIHRvIG91dGVyIGxldmVsIG9mIHRhYnMgY29uZmlnXG4gICAgICAgIGNvbnN0IGZpcnN0VGFiID0gc3RyaXAudGFic1swXTtcbiAgICAgICAgaWYgKGZpcnN0VGFiLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwID0gKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1swXSkgYXMgTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiO1xuXG4gICAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KHN0cmlwLCAwLCBjdXJyZW50VGFiRnJvbU1hcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBzdHJpcC5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hWNlJlcXVlc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnNlYXJjaFY2KHJlcXVlc3Quc2VhcmNoVjYpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAvLyBpZiAodmlld01vcmVVcmwgJiYgdmlld01vcmVVcmwucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAvLyAgIHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0gdmlld01vcmVVcmwucXVlcnlQYXJhbXNcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmZXRjaEZyb21UcmVuZGluZ0NvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhvcmlnaW5hbEZpbHRlcnMpO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5jaGVja0ZvckRhdGVGaWx0ZXJzKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGcm9tQXJyYXkoXG4gICAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRvIGV4dHJhY3QgcmVxdWVzdFJlcXVpcmVkIHRvIG91dGVyIGxldmVsIG9mIHRhYnMgY29uZmlnXG4gICAgICAgIGNvbnN0IGZpcnN0VGFiID0gc3RyaXAudGFic1swXTtcbiAgICAgICAgaWYgKGZpcnN0VGFiLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwID0gKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1swXSkgYXMgTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiO1xuXG4gICAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKHN0cmlwLCAwLCBjdXJyZW50VGFiRnJvbU1hcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBzdHJpcC5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsIHx8ICcnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmKCFjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAvLyBjaGVjayBmb3IgdGhlIHJlcXVlc3QgaWYgaXQgaGFzIGR5bmFtaWMgdmFsdWVzXVxuICAgICAgICBpZiAocmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICAgICAgdXNlclJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMub3JnYW5pc2F0aW9uID0gdXNlclJvb3RPcmdJZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRTdmMudHJlbmRpbmdDb250ZW50U2VhcmNoKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQgJiZcbiAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XS5sZW5ndGggPiA1ICYmXG4gICAgICAgICAgICBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKVxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVJbmZvKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGNvbnN0IHN0cmlwSW5mbyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvO1xuICAgIGlmIChzdHJpcEluZm8pIHtcbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSAhPT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLmxvZ2dlclN2Yy53YXJuKGBzdHJpcCBpbmZvIG1vZGU6ICR7c3RyaXBJbmZvLm1vZGV9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtcbiAgICAgICAgc3RyaXBJbmZvLm1vZGUgPSAnYmVsb3cnO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlID09PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtkYXRhLmtleV0uc3RyaXBJbmZvID0ge1xuICAgICAgICAgIC4uLnN0cmlwSW5mbyxcbiAgICAgICAgICB2aXNpYmlsaXR5TW9kZTogc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAnaGlkZGVuJyA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50JyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgICAgfVxuICAgICkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IElUb2RheUV2ZW50c1tdLFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlc3VsdHM6IE5zV2lkZ2V0UmVzb2x2ZXIuSVJlbmRlckNvbmZpZ1dpdGhBbnlEYXRhW10gPSBbXSxcbiAgICBmZXRjaFN0YXR1czogVEZldGNoU3RhdHVzLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICAgX3ZpZXdNb3JlVXJsOiBhbnksXG4gICAgdGFic1Jlc3VsdHM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWJbXSB8IHVuZGVmaW5lZCxcbiAgICAvLyBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgaXMgdXNlZCBzbyB0aGF0IHBhcmVudHMnIHN0YXR1cyBpcyBub3QgcmUtY2FsY3VsYXRlZCBpZiB0aGUgQVBJIGlzIGNhbGxlZCBhZ2FpbiBjb3ogb2YgZmlsdGVycywgZXRjLlxuICApIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB7XG4gICAgICB2aWV3TW9yZVVybDogc3RyaXAudmlld01vcmVVcmwsXG4gICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgIGNhbkhpZGVTdHJpcDogQm9vbGVhbihzdHJpcC5jYW5IaWRlU3RyaXApLFxuICAgICAgc2hvd1N0cmlwOiB0aGlzLmdldElmU3RyaXBIaWRkZW4oc3RyaXAua2V5KSxcbiAgICAgIG5vRGF0YVdpZGdldDogc3RyaXAubm9EYXRhV2lkZ2V0LFxuICAgICAgZXJyb3JXaWRnZXQ6IHN0cmlwLmVycm9yV2lkZ2V0LFxuICAgICAgc3RyaXBJbmZvOiBzdHJpcC5pbmZvLFxuICAgICAgc3RyaXBUaXRsZTogc3RyaXAudGl0bGUsXG4gICAgICBzdHJpcFRpdGxlTGluazogc3RyaXAuc3RyaXBUaXRsZUxpbmssXG4gICAgICBkaXNhYmxlVHJhbnNsYXRlOiBzdHJpcC5kaXNhYmxlVHJhbnNsYXRlLFxuICAgICAgc2xpZGVyQ29uZmlnOiBzdHJpcC5zbGlkZXJDb25maWcsXG4gICAgICB0YWJzOiB0YWJzUmVzdWx0cyA/IHRhYnNSZXN1bHRzIDogc3RyaXAudGFicyxcbiAgICAgIHN0cmlwTmFtZTogc3RyaXAubmFtZSxcbiAgICAgIG1vZGU6IHN0cmlwLm1vZGUsXG4gICAgICBzdHJpcENvbmZpZzogc3RyaXAuc3RyaXBDb25maWcsXG4gICAgICBzdHJpcEJhY2tncm91bmQ6IHN0cmlwLnN0cmlwQmFja2dyb3VuZCxcbiAgICAgIHNlY29uZGFyeUhlYWRpbmc6IHN0cmlwLnNlY29uZGFyeUhlYWRpbmcsXG4gICAgICBsb2FkZXJXaWRnZXRzOiBzdHJpcC5sb2FkZXJXaWRnZXRzIHx8IFtdLFxuICAgICAgd2lkZ2V0czpcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJ1xuICAgICAgICAgID8gW1xuICAgICAgICAgICAgLi4uKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgLi4ucmVzdWx0cyxcbiAgICAgICAgICAgIC4uLihzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgICBzaG93T25Ob0RhdGE6IEJvb2xlYW4oXG4gICAgICAgIHN0cmlwLm5vRGF0YVdpZGdldCAmJlxuICAgICAgICAhKChzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5sZW5ndGggKyByZXN1bHRzLmxlbmd0aCArIChzdHJpcC5wb3N0V2lkZ2V0cyB8fCBbXSkubGVuZ3RoKSAmJlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnLFxuICAgICAgKSxcbiAgICAgIHNob3dPbkxvYWRlcjogQm9vbGVhbihzdHJpcC5sb2FkZXIgJiYgZmV0Y2hTdGF0dXMgPT09ICdmZXRjaGluZycpLFxuICAgICAgc2hvd09uRXJyb3I6IEJvb2xlYW4oc3RyaXAuZXJyb3JXaWRnZXQgJiYgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpLFxuICAgIH07XG4gICAgLy8gY29uc3Qgc3RyaXBEYXRhID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV1cbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAgPSB7XG4gICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXAsXG4gICAgICBbc3RyaXAua2V5XTogc3RyaXBEYXRhLFxuICAgIH07XG4gICAgaWYgKCF0YWJzUmVzdWx0cykge1xuICAgICAgaWYgKFxuICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiZcbiAgICAgICAgKGZldGNoU3RhdHVzID09PSAnZG9uZScgfHwgZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpICYmXG4gICAgICAgIHN0cmlwRGF0YS53aWRnZXRzXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jaGVja1BhcmVudFN0YXR1cyhmZXRjaFN0YXR1cywgc3RyaXBEYXRhLndpZGdldHMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxjdWxhdGVQYXJlbnRTdGF0dXMgJiYgIShyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cywgc3RyaXBXaWRnZXRzQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnICYmICFzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5ub0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiBzdHJpcFdpZGdldHNDb3VudCkge1xuICAgICAgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICs9IDE7XG4gICAgfSBlbHNlIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhpcy5lcnJvckRhdGFDb3VudCArPSAxO1xuICAgIH1cbiAgICBjb25zdCBzZXR0bGVkQ291bnQgPSB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5zdWNjZXNzRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudDtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuc3VjY2Vzc0RhdGFDb3VudCA+IDAgJiYgc2V0dGxlZENvdW50IDwgdG90YWxDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dQYXJlbnRMb2FkZXIgPSBzZXR0bGVkQ291bnQgIT09IHRvdGFsQ291bnQ7XG4gICAgdGhpcy5zaG93UGFyZW50Tm9EYXRhID1cbiAgICAgIHRoaXMubm9EYXRhQ291bnQgPiAwICYmIHRoaXMubm9EYXRhQ291bnQgKyB0aGlzLmVycm9yRGF0YUNvdW50ID09PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudEVycm9yID0gdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgfVxuICBjaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFJlYWQpLmxlbmd0aClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdGFiQ2xpY2tlZCh0YWJFdmVudDogTWF0VGFiQ2hhbmdlRXZlbnQsIHN0cmlwTWFwOiBJU3RyaXBVbml0Q29udGVudERhdGEsIHN0cmlwS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnaW5wcm9ncmVzcyc7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlUYWJEYXRhID0ge1xuICAgICAgbGFiZWw6IGAke3RhYkV2ZW50LnRhYi50ZXh0TGFiZWx9YCxcbiAgICAgIGluZGV4OiB0YWJFdmVudC5pbmRleCxcbiAgICB9O1xuICAgIHRoaXMuZXZlbnRTdmMucmFpc2VJbnRlcmFjdFRlbGVtZXRyeShcbiAgICAgIHtcbiAgICAgICAgdHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0VHlwZXMuQ0xJQ0ssXG4gICAgICAgIHN1YlR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFN1YlR5cGVzLkhPTUVfUEFHRV9TVFJJUF9UQUJTLFxuICAgICAgICBpZDogYCR7Xy5jYW1lbENhc2UoZGF0YS5sYWJlbCl9LXRhYmAsXG4gICAgICB9LFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuSE9NRSxcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRTdHJpcCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzID0+IHMua2V5ID09PSBzdHJpcEtleSk7XG4gICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0gJiYgY3VycmVudFRhYkZyb21NYXApIHtcbiAgICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB7XG4gICAgICAgIC4uLnRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcEtleV0udmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgIHRhYlNlbGVjdGVkOiBjdXJyZW50VGFiRnJvbU1hcC5sYWJlbCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljaykge1xuICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3RSZXF1aXJlZCAmJiBjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoY3VycmVudFN0cmlwLCB0YWJFdmVudC5pbmRleCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKGN1cnJlbnRTdHJpcCwgdGFiRXZlbnQuaW5kZXgsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlmaWx0ZXIoY3VycmVudFN0cmlwLCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnNob3dPbkxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgICAgICAgICAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHRhYkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFY2UmVxdWVzdChzdHJpcCwgY3VycmVudFRhYi5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApO1xuICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgdGFiUmVzdWx0cyAvLyB0YWJSZXN1bHRzIGFzIHdpZGdldHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHRhYkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgY3VycmVudFRhYi5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZVtjdXJyZW50VGFiLnZhbHVlXSB8fCBbXTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLS0gd2lkZ2V0cycsIHdpZGdldHMpXG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBhbGxUYWJzW3RhYkluZGV4XSA9IHtcbiAgICAgICAgICAgICAgLi4uYWxsVGFic1t0YWJJbmRleF0sXG4gICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd0YWJSZXN1bHRzIC0rKysrKioqLS0nLCB0YWJSZXN1bHRzKVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgdGFiUmVzdWx0cyAvLyB0YWJSZXN1bHRzIGFzIHdpZGdldHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGFiRGF0YUJ5ZmlsdGVyKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdzdHJpcCAtLSAnLCBzdHJpcCk7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjdXJyZW50VGFiIC0tICcsIGN1cnJlbnRUYWIpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY2FsY3VsYXRlUGFyZW50U3RhdHVzLS0gJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAvLyBUT0RPOiBXcml0ZSBsb2dpYyBmb3IgaW5kaXZpZHVhbCBmaWx0ZXIgaWYgcGFzc2VkIGluIGNvbmZpZ1xuICAgIC8vIGFkZCBzd2l0Y2ggY2FzZSBiYXNlZCBvbiBjb25maWcga2V5IHBhc3NlZFxuICB9XG5cbiAgYXN5bmMgZmV0Y2hBbGxDYnBQbGFucyhzdHJpcDogYW55LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG5cbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmNicExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jYnBMaXN0KS5sZW5ndGgpIHtcblxuICAgICAgbGV0IGNvdXJzZXM6IE5zQ29udGVudC5JQ29udGVudFtdO1xuICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudXNlclN2Yy5mZXRjaENicFBsYW5MaXN0KCkudG9Qcm9taXNlKCk7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvdXJzZXMgPSByZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0Q2JwVGFic0RhdGEoY291cnNlcywgc3RyaXApO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRoaXMudXNlclN2Yy5mZXRjaENicFBsYW5MaXN0KCkuc3Vic2NyaWJlKCBhc3luYyAgKHJlczogYW55KSA9PiB7XG4gICAgICAvLyAgIGlmIChyZXMpIHtcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhyZXMsJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0+JylcbiAgICAgIC8vICAgICBjb3Vyc2VzID0gcmVzXG4gICAgICAvLyAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0Q2JwVGFic0RhdGEoY291cnNlcywgc3RyaXApXG4gICAgICAvLyAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJycsXG4gICAgICAvLyAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAvLyAgICAgICAgIHN0cmlwLFxuICAgICAgLy8gICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgIC8vICAgICAgICAgJ2RvbmUnLFxuICAgICAgLy8gICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAvLyAgICAgICAgICd2aWV3TW9yZVVybCcsXG4gICAgICAvLyAgICAgICApXG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2VycjogYW55KSA9PiB7XG5cbiAgICAgIC8vIH0pXG5cbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5lbnJvbGxJbnRlcnZhbCk7XG4gICAgfVxuICB9XG4gIHNwbGl0Q2JwVGFic0RhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldFRhYnNMaXN0KFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIHN0cmlwLFxuICAgICk7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXSkge1xuICAgICAgICAgIHRhYlJlc3VsdHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc3RyaXAudGFic1tpXSxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgLi4uKHNwbGl0RGF0YS5maW5kKGl0bUlubmVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzW2ldICYmIGl0bUlubmVyLnZhbHVlID09PSBzdHJpcC50YWJzW2ldLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRtSW5uZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWJSZXN1bHRzO1xuICB9XG5cbiAgZ2V0VGFic0xpc3QoYXJyYXk6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgICAgICAgICAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGxldCBhbGw6IGFueVtdID0gW107XG4gICAgbGV0IHVwY29taW5nOiBhbnlbXSA9IFtdO1xuICAgIGxldCBvdmVyZHVlOiBhbnlbXSA9IFtdO1xuICAgIGFycmF5LmZvckVhY2goKGU6IGFueSkgPT4ge1xuICAgICAgYWxsLnB1c2goZSk7XG4gICAgICBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgb3ZlcmR1ZS5wdXNoKGUpO1xuICAgICAgfSBlbHNlIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuVVBDT01JTkcpIHtcbiAgICAgICAgdXBjb21pbmcucHVzaChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA9PT0gMik7XG4gICAgbGV0IGFsbEluQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPCAyKTtcblxuICAgIGxldCBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkQWxsID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiAgYWxsRGF0YS5wbGFuRHVyYXRpb24gIT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpO1xuXG4gICAgYWxsQ29tcGxldGVkT3ZlckR1ZSA9IGFsbENvbXBsZXRlZE92ZXJEdWUuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFICYmIGIucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFsbEluQ29tcGxldGVkID0gYWxsSW5Db21wbGV0ZWQuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFICYmIGIucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFsbCA9IFsuLi5hbGxJbkNvbXBsZXRlZCwgLi4uYWxsQ29tcGxldGVkQWxsLCAuLi5hbGxDb21wbGV0ZWRPdmVyRHVlXTtcblxuICAgIG92ZXJkdWUgPSBvdmVyZHVlLmZpbHRlcigoZGF0YTogYW55KTogYW55ID0+IHtcbiAgICAgIHJldHVybiBkYXRhLmNvbnRlbnRTdGF0dXMgPCAyO1xuICAgIH0pO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiAgZmlyc3REYXRlID4gc2Vjb25kRGF0ZSAgPyAtMSA6IDE7XG4gICAgfSk7XG5cbiAgICB1cGNvbWluZyA9IHVwY29taW5nLmZpbHRlcigoZGF0YTogYW55KTogYW55ID0+IHtcbiAgICAgIHJldHVybiBkYXRhLmNvbnRlbnRTdGF0dXMgPCAyO1xuICAgIH0pO1xuICAgIC8vIHRoaXMuZ2V0U2VsZWN0ZWRJbmRleCgxKVxuICAgIHJldHVybiBbXG4gICAgeyB2YWx1ZTogJ2FsbCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoYWxsLCBzdHJpcCkgfSxcbiAgICB7IHZhbHVlOiAndXBjb21pbmcnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHVwY29taW5nLCBzdHJpcCkgfSxcbiAgICB7IHZhbHVlOiAnb3ZlcmR1ZScsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMob3ZlcmR1ZSwgc3RyaXApIH1dO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRJbmRleChzdHJpcHNSZXN1bHREYXRhTWFwOiBhbnksIGtleTogYW55KTogbnVtYmVyIHtcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSAwO1xuICAgIGlmIChrZXkgPT09ICdjYnBQbGFuJykge1xuICAgICAgaWYgKHN0cmlwc1Jlc3VsdERhdGFNYXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHN0cmlwc1Jlc3VsdERhdGFNYXAudGFicy5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUudmFsdWUgPT09ICd1cGNvbWluZycpO1xuICAgICAgICByZXR1cm5WYWx1ZSA9IGRhdGFbMF0ud2lkZ2V0cyAmJiBkYXRhWzBdLndpZGdldHMubGVuZ3RoID4gMCA/IDEgOiAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHRyYWNrZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBfLmdldChpdGVtLCAnd2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXInKVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hBbGxUb3BDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hBbGxGZWF0dXJlZENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnkoc3RyaXBEYXRhOiBhbnkpe1xuICAgIHRoaXMudGVsZW10cnlSZXNwb25zZS5lbWl0KHN0cmlwRGF0YSlcbiAgfVxuXG4gIGFzeW5jIHBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnBvc3RBcGlNZXRob2QoYXBpVXJsLHJlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICBmOlxuICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICA6IG51bGw7XG4gICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLmdldEFwaU1ldGhvZChhcGlVcmwpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzLCdyZXN1bHRzPT09PT09PT09JylcbiAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgcmVzdWx0cy5yZXN1bHQuZGF0YSAmJiByZXN1bHRzLnJlc3VsdC5kYXRhLm9yZ0xpc3QubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgPyB7XG4gICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcG9zdE1ldGhvZEZpbHRlcnMoZmlsdGVyczogYW55KXtcbiAgICBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHRoaXMucHJvdmlkZXJJZFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyc1xuICB9XG4gIGdldEZ1bGxVcmwoYXBpVXJsOiBhbnksIGlkOnN0cmluZyl7XG4gICAgbGV0IGZvcm1lZFVybDogc3RyaW5nID0gJydcbiAgICBpZiAoYXBpVXJsLmluZGV4T2YoJzxib29rbWFya0lkPicpID49IDApIHtcbiAgICAgIGZvcm1lZFVybCA9IGFwaVVybC5yZXBsYWNlKCc8Ym9va21hcmtJZD4nLCB0aGlzLmVudmlyb25tZW50Lm1kb0NoYW5uZWxzQm9va21hcmtJZCkgXG4gICAgfSBlbHNlIGlmIChhcGlVcmwuaW5kZXhPZignPHBsYXlsaXN0S2V5PicpID49IDAgJiYgYXBpVXJsLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPHBsYXlsaXN0S2V5PicsIHRoaXMucHJvdmlkZXJJZCArIGlkKSBcbiAgICAgIGZvcm1lZFVybCA9IGZvcm1lZFVybC5yZXBsYWNlKCc8b3JnSUQ+JywgdGhpcy5wcm92aWRlcklkKSBcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1lZFVybFxuICB9XG5cbiAgcmVkaXJlY3RWaWV3QWxsKHN0cmlwRGF0YTogYW55LCBwYXRoOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zRGF0YTogYW55KSB7XG4gICAgaWYodGhpcy5lbWl0Vmlld0FsbCkge1xuICAgICAgdGhpcy52aWV3QWxsUmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwgeyAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zRGF0YSB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsQm9va01hcmtEYXRhKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZC5ib29rbWFya0lkKSB7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuYXBpVXJsID0gdGhpcy5nZXRGdWxsVXJsKHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZC5ib29rbWFya0lkKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgbGV0IGNvbnRlbnQgID0gcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YS5vcmdMaXN0XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUFsbENvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IGFueSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuICBcbiAgYXN5bmMgZmV0Y2hBbGxQbGF5bGlzdFNlYXJjaChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2ggJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGZpbmFsUGxheWxpc3REYXRhOiBhbnkgPSBbXVxuICAgICAgICAgICAgbGV0IHByb2dyYW1EYXRhOiBhbnkgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhXG4gICAgICAgICAgICBwcm9ncmFtRGF0YS5mb3JFYWNoKChwcmdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYocHJnRGF0YS5jaGlsZHJlbiAmJiBwcmdEYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZpbmFsUGxheWxpc3REYXRhLnB1c2gocHJnRGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKGZpbmFsUGxheWxpc3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGZpbmFsUGxheWxpc3REYXRhLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpIHtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5hcGlVcmwgPSB0aGlzLmdldEZ1bGxVcmwoc3RyaXAucmVxdWVzdC5hcGlVcmwsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
2105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBcUNDOzs7SUFwQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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QkFDbkM7YUFDRjtRQUNILENBQUM7S0FBQTs7O1lBcmdERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztnQkFDMUMsdzZYQUEyRDs7YUFFNUQ7Ozs7NENBa0NJLE1BQU0sU0FBQyxhQUFhO1lBcEdoQixvQkFBb0I7WUFLM0IsYUFBYTtZQUNiLFlBQVk7WUFDWixxQkFBcUI7WUFDckIsY0FBYztZQWFQLE1BQU07WUFSTixpQkFBaUI7WUFPakIsZ0JBQWdCO1lBbEJoQiwrQkFBK0I7Ozt5QkFzRXJDLEtBQUs7NEJBQ0wsTUFBTTs4QkFDTixNQUFNOytCQUNOLE1BQU07eUJBQ04sS0FBSzswQkFDTCxLQUFLO2lCQUNMLFdBQVcsU0FBQyxJQUFJOzs7O0lBTmpCLHNEQUFtRTs7SUFDbkUseURBQWlEOztJQUNqRCwyREFBbUQ7O0lBQ25ELDREQUFvRDs7SUFDcEQsc0RBQThCOztJQUM5Qix1REFBc0M7O0lBQ3RDLDhDQUNpRDs7SUFDakQsK0RBQW1FOztJQUNuRSwwREFBOEI7O0lBQzlCLDZEQUF5Qjs7SUFDekIsNERBQXlCOztJQUN6QiwyREFBd0I7O0lBQ3hCLDREQUF5Qjs7SUFDekIsMERBQW1COztJQUNuQix1REFBZ0I7O0lBQ2hCLDREQUFxQjs7SUFDckIsNERBQXdCOztJQUN4QixtREFBd0M7O0lBQ3hDLDREQUF5Qjs7SUFDekIsdURBQWtCOztJQUNsQixtRUFBb0Q7O0lBQ3BELDZEQUF1Qjs7SUFDdkIsMERBQW9COztJQUNwQix3REFBdUI7Ozs7O0lBS3JCLHNEQUF3Qzs7Ozs7SUFDeEMscURBQWdDOzs7OztJQUNoQyxvREFBOEI7Ozs7O0lBQzlCLHFEQUF3Qzs7SUFDeEMsc0RBQWlDOztJQUdqQyxrREFBcUI7Ozs7O0lBQ3JCLG1EQUFrQzs7Ozs7SUFDbEMscURBQW1DOzs7OztJQUNuQyw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC12Mi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9kYXlFdmVudHMgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2V2ZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmludGVyZmFjZSBJU3RyaXBVbml0Q29udGVudERhdGEge1xuICBrZXk6IHN0cmluZztcbiAgY2FuSGlkZVN0cmlwOiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBzaG93U3RyaXA6IGJvb2xlYW47XG4gIGRpc2FibGVUcmFuc2xhdGU6IGJvb2xlYW47XG4gIHdpZGdldHM/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdO1xuICBzdHJpcFRpdGxlOiBzdHJpbmc7XG4gIHN0cmlwVGl0bGVMaW5rPzoge1xuICAgIGxpbms6ICB7XG4gICAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gICAgfSxcbiAgICBpY29uOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICB9O1xuICBzbGlkZXJDb25maWc/OiB7XG4gICAgc2hvd05hdnM6IGJvb2xlYW4sXG4gICAgc2hvd0RvdHM6IGJvb2xlYW4sXG4gICAgbWF4V2lkZ2V0cz86IG51bWJlclxuICAgIGNlcmlmaWNhdGVDYXJkTWFyZ2luPzogYm9vbGVhblxuICB9O1xuICBzdHJpcENvbmZpZzogYW55O1xuICB0YWJzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQ7XG4gIHN0cmlwTmFtZT86IHN0cmluZztcbiAgc3RyaXBMb2dvPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RyaXBJbmZvPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItdWljLWNvbnRlbnQtc3RyaXAtd2l0aC10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic0xpYkNvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZT4ge1xuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHZpZXdBbGxSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB0ZWxlbXRyeVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZCA6IGFueSA9ICcnXG4gIEBJbnB1dCgpIGVtaXRWaWV3QWxsIDogYm9vbGVhbiA9IGZhbHNlXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgICAgIGxldCBsYW5nID0gSlNPTi5zdHJpbmdpZnkobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKTtcbiAgICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UoL1xcXCIvZywgJycpO1xuICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuXG4gICAgdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChkYXRhKVxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBpZih0aGlzLnByb3ZpZGVySWQpIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgZmlsdGVycy5kZXNpZ25hdGlvbiA9IHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICApIHtcbiAgICAvLyBzZXR0aW5nIGluaXRpYWwgdmFsdWVzXG4gICAgc3RyaXAubG9hZGVyV2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtU2tlbGV0b25Ub1dpZGdldHMoc3RyaXApO1xuICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMuZmV0Y2hGcm9tRW5yb2xsbWVudExpc3Qoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEZyb21TZWFyY2hWNihzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbFRvcENvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQm9va01hcmtEYXRhKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxQbGF5bGlzdFNlYXJjaChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoUGxheWxpc3RSZWFkRGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQ2lvc0NvbnRlbnREYXRhKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIFxuICAgIC8vIHRoaXMuZW5yb2xsSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAvLyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMClcbiAgfVxuXG4gIGZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0KS5sZW5ndGgpIHtcbiAgICAgIGxldCB1c2VySWQgPSAnJztcbiAgICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCBjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBfLmdldChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0LCAncXVlcnlQYXJhbXMnKTtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQ7XG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgICB0aGlzLnVzZXJTdmMuZmV0Y2hVc2VyQmF0Y2hMaXN0KHVzZXJJZCwgcXVlcnlQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY291cnNlcyA9IHJlc3VsdCAmJiByZXN1bHQuY291cnNlcztcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgY291cnNlcy5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiAoc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCkgfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnNlYXJjaFNlcnZTdmMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzKFxuICAgICAgICAgICAgICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29udGVudCA9IGNvdXJzZXMubWFwKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udGVudFRlbXA6IE5zQ29udGVudC5JQ29udGVudCA9IGMuY29udGVudDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBjLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblN0YXR1cyA9IGMuY29tcGxldGlvblN0YXR1cyB8fCBjLnN0YXR1cyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5lbnJvbGxlZERhdGUgPSBjLmVucm9sbGVkRGF0ZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdENvbnRlbnRBY2Nlc3NUaW1lID0gYy5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudFN0YXR1cyA9IGMubGFzdFJlYWRDb250ZW50U3RhdHVzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRJZCA9IGMubGFzdFJlYWRDb250ZW50SWQgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxyY1Byb2dyZXNzRGV0YWlscyA9IGMubHJjUHJvZ3Jlc3NEZXRhaWxzIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5pc3N1ZWRDZXJ0aWZpY2F0ZXMgPSBjLmlzc3VlZENlcnRpZmljYXRlcyB8fCBbXTtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuYmF0Y2hJZCA9IGMuYmF0Y2hJZCB8fCAnJztcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUZW1wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRvIGZpbHRlciBjb250ZW50IHdpdGggY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwLFxuICAgICAgICAgIC8vIHNvIHRoYXQgb25seSB0aG9zZSBjb250ZW50IHdpbGwgc2hvdyBpbiBob21lIHBhZ2VcbiAgICAgICAgICAvLyBjb250aW51ZSBsZWFyaW5nIHN0cmlwXG4gICAgICAgICAgLy8gaWYgKGNvbnRlbnQgJiYgY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyAgIGNvbnRlbnROZXcgPSBjb250ZW50LmZpbHRlcigoYzogYW55KSA9PiB7XG4gICAgICAgICAgLy8gICAgIC8qKiBjb21tZW50ZWQgYXMgYm90aCBhcmUgMCBhZnRlciBlbnJvbGxsICovXG4gICAgICAgICAgLy8gICAgIGlmIChjLmNvbXBsZXRpb25QZXJjZW50YWdlICYmIGMuY29tcGxldGlvblBlcmNlbnRhZ2UgPiAwKSB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIGNcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAvLyBUbyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIGVucm9sbGVkIGRhdGVcbiAgICAgICAgICBjb250ZW50TmV3ID0gKGNvbnRlbnQgfHwgW10pLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQTogYW55ID0gbmV3IERhdGUoYS5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQjogYW55ID0gbmV3IERhdGUoYi5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgMCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3LCBzdHJpcCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIChlOiBhbnkpID0+IGUuY29tcGxldGlvblN0YXR1cyA9PT0gMSB8fCBlLmNvbXBsZXRpb25QZXJjZW50YWdlIDwgMTAwLFxuICAgICAgc3RyaXAsXG4gICAgKTtcblxuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoYXJyYXk6IE5zQ29udGVudC5JQ29udGVudFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpbHRlcjogYW55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgaW5wcm9ncmVzczogYW55W10gPSBbXTtcbiAgICBjb25zdCBjb21wbGV0ZWQ6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55LCBpZHg6IG51bWJlciwgYXJyOiBhbnlbXSkgPT4gKGN1c3RvbUZpbHRlcihlLCBpZHgsIGFycikgPyBpbnByb2dyZXNzIDogY29tcGxldGVkKS5wdXNoKGUpKTtcbiAgICByZXR1cm4gW1xuICAgICAgeyB2YWx1ZTogJ2lucHJvZ3Jlc3MnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGlucHJvZ3Jlc3MsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ2NvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29tcGxldGVkLCBzdHJpcCkgfV07XG4gIH1cblxuICBhc3luYyBmZXRjaEZyb21TZWFyY2hWNihzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNikubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1FdmVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuRXZlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaFY2UmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYocmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIGlmICh2aWV3TW9yZVVybCAmJiB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcykge1xuICAgICAgICAgIC8vICAgdmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB2aWV3TW9yZVVybC5xdWVyeVBhcmFtc1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKSB7XG4gICAgICAvLyBpZiAoIShzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZS5sZW5ndGggPiAwKSkge1xuICAgICAgLy8gICBpZiAodGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlKSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbdGhpcy5jb25maWdTdmMuYWN0aXZlTG9jYWxlLmxvY2Fsc1swXV1cbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFsnZW4nXVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKG9yaWdpbmFsRmlsdGVycyk7XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoc3RyaXAsIDAsIGN1cnJlbnRUYWJGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2Vbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gfHwgW107XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwgfHwgJycsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYoIWNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgZHluYW1pYyB2YWx1ZXNdXG4gICAgICAgIGlmIChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHVzZXJSb290T3JnSWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgICAgICB1c2VyUm9vdE9yZ0lkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gPSB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy50cmVuZGluZ0NvbnRlbnRTZWFyY2gocmVxdWVzdC50cmVuZGluZ1NlYXJjaCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdCAmJlxuICAgICAgICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldLmxlbmd0aCA+IDUgJiZcbiAgICAgICAgICAgIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIHRhYjogJ0xlYXJuJyxcbiAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBmOlxuICAgICAgICAgICAgICAgICAgcmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZUluZm8oZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgY29uc3Qgc3RyaXBJbmZvID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2RhdGEua2V5XS5zdHJpcEluZm87XG4gICAgaWYgKHN0cmlwSW5mbykge1xuICAgICAgaWYgKHN0cmlwSW5mby5tb2RlICE9PSAnYmVsb3cnKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyU3ZjLndhcm4oYHN0cmlwIGluZm8gbW9kZTogJHtzdHJpcEluZm8ubW9kZX0gbm90IGltcGxlbWVudGVkIHlldGApO1xuICAgICAgICBzdHJpcEluZm8ubW9kZSA9ICdiZWxvdyc7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgPT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW2RhdGEua2V5XS5zdHJpcEluZm8gPSB7XG4gICAgICAgICAgLi4uc3RyaXBJbmZvLFxuICAgICAgICAgIHZpc2liaWxpdHlNb2RlOiBzdHJpcEluZm8udmlzaWJpbGl0eU1vZGUgPT09ICdoaWRkZW4nID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhcbiAgICBjb250ZW50czogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICkge1xuICAgIHJldHVybiAoY29udGVudHMgfHwgW10pLm1hcCgoY29udGVudCwgaWR4KSA9PiAoXG4gICAgICBjb250ZW50ID8ge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudExpYicsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAuLi4oY29udGVudC5iYXRjaCAmJiB7IGJhdGNoOiBjb250ZW50LmJhdGNoIH0pLFxuICAgICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jYXJkU3ViVHlwZSxcbiAgICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICB9LFxuICAgICAgfSA6IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnQnLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge30sXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUV2ZW50c1RvV2lkZ2V0cyhcbiAgICBjb250ZW50czogSVRvZGF5RXZlbnRzW10sXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICkge1xuICAgIHRoaXMuZXZlbnRTdmMuc2V0RXZlbnRMaXN0RGF0YShjb250ZW50cyk7XG4gICAgcmV0dXJuICh0aGlzLmV2ZW50U3ZjLnRvZGF5c0V2ZW50cyB8fCBbXSkubWFwKChjb250ZW50OiBhbnksIGlkeDogYW55KSA9PiAoY29udGVudCA/IHtcbiAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgIHdpZGdldFN1YlR5cGU6ICdldmVudEh1YkNhcmQnLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jYXJkU3ViVHlwZSxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgZGVsZXRlZE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmRlbGV0ZWRNb2RlLFxuICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICB9LFxuICAgIH0gOiB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge30sXG4gICAgfVxuICAgICkpO1xuICB9XG4gIHByaXZhdGUgdHJhbnNmb3JtU2tlbGV0b25Ub1dpZGdldHMoXG4gICAgc3RyaXA6IGFueVxuICApIHtcbiAgICByZXR1cm4gWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDcsIDgsIDksIDEwXS5tYXAoX2NvbnRlbnQgPT4gKHtcbiAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudExpYicsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLmxvYWRlckNvbmZpZyAmJiBzdHJpcC5sb2FkZXJDb25maWcuY2FyZFN1YlR5cGUgfHwgJ2NhcmQtc3RhbmRhcmQtc2tlbGV0b24nLFxuICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzU3RyaXAoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVzdWx0czogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXSA9IFtdLFxuICAgIGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgICBfdmlld01vcmVVcmw6IGFueSxcbiAgICB0YWJzUmVzdWx0cz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYltdIHwgdW5kZWZpbmVkLFxuICAgIC8vIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyBpcyB1c2VkIHNvIHRoYXQgcGFyZW50cycgc3RhdHVzIGlzIG5vdCByZS1jYWxjdWxhdGVkIGlmIHRoZSBBUEkgaXMgY2FsbGVkIGFnYWluIGNveiBvZiBmaWx0ZXJzLCBldGMuXG4gICkge1xuICAgIGNvbnN0IHN0cmlwRGF0YSA9IHtcbiAgICAgIHZpZXdNb3JlVXJsOiBzdHJpcC52aWV3TW9yZVVybCxcbiAgICAgIGtleTogc3RyaXAua2V5LFxuICAgICAgY2FuSGlkZVN0cmlwOiBCb29sZWFuKHN0cmlwLmNhbkhpZGVTdHJpcCksXG4gICAgICBzaG93U3RyaXA6IHRoaXMuZ2V0SWZTdHJpcEhpZGRlbihzdHJpcC5rZXkpLFxuICAgICAgbm9EYXRhV2lkZ2V0OiBzdHJpcC5ub0RhdGFXaWRnZXQsXG4gICAgICBlcnJvcldpZGdldDogc3RyaXAuZXJyb3JXaWRnZXQsXG4gICAgICBzdHJpcEluZm86IHN0cmlwLmluZm8sXG4gICAgICBzdHJpcFRpdGxlOiBzdHJpcC50aXRsZSxcbiAgICAgIHN0cmlwVGl0bGVMaW5rOiBzdHJpcC5zdHJpcFRpdGxlTGluayxcbiAgICAgIGRpc2FibGVUcmFuc2xhdGU6IHN0cmlwLmRpc2FibGVUcmFuc2xhdGUsXG4gICAgICBzbGlkZXJDb25maWc6IHN0cmlwLnNsaWRlckNvbmZpZyxcbiAgICAgIHRhYnM6IHRhYnNSZXN1bHRzID8gdGFic1Jlc3VsdHMgOiBzdHJpcC50YWJzLFxuICAgICAgc3RyaXBOYW1lOiBzdHJpcC5uYW1lLFxuICAgICAgbW9kZTogc3RyaXAubW9kZSxcbiAgICAgIHN0cmlwQ29uZmlnOiBzdHJpcC5zdHJpcENvbmZpZyxcbiAgICAgIHN0cmlwQmFja2dyb3VuZDogc3RyaXAuc3RyaXBCYWNrZ3JvdW5kLFxuICAgICAgc2Vjb25kYXJ5SGVhZGluZzogc3RyaXAuc2Vjb25kYXJ5SGVhZGluZyxcbiAgICAgIGxvYWRlcldpZGdldHM6IHN0cmlwLmxvYWRlcldpZGdldHMgfHwgW10sXG4gICAgICB3aWRnZXRzOlxuICAgICAgICBmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAuLi4oc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubWFwKHcgPT4gKHtcbiAgICAgICAgICAgICAgLi4udyxcbiAgICAgICAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiBgbWItMiAke3cud2lkZ2V0SG9zdENsYXNzfWAsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAuLi5yZXN1bHRzLFxuICAgICAgICAgICAgLi4uKHN0cmlwLnBvc3RXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICBdXG4gICAgICAgICAgOiBbXSxcbiAgICAgIHNob3dPbk5vRGF0YTogQm9vbGVhbihcbiAgICAgICAgc3RyaXAubm9EYXRhV2lkZ2V0ICYmXG4gICAgICAgICEoKHN0cmlwLnByZVdpZGdldHMgfHwgW10pLmxlbmd0aCArIHJlc3VsdHMubGVuZ3RoICsgKHN0cmlwLnBvc3RXaWRnZXRzIHx8IFtdKS5sZW5ndGgpICYmXG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZScsXG4gICAgICApLFxuICAgICAgc2hvd09uTG9hZGVyOiBCb29sZWFuKHN0cmlwLmxvYWRlciAmJiBmZXRjaFN0YXR1cyA9PT0gJ2ZldGNoaW5nJyksXG4gICAgICBzaG93T25FcnJvcjogQm9vbGVhbihzdHJpcC5lcnJvcldpZGdldCAmJiBmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJyksXG4gICAgfTtcbiAgICAvLyBjb25zdCBzdHJpcERhdGEgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XVxuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcCA9IHtcbiAgICAgIC4uLnRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcCxcbiAgICAgIFtzdHJpcC5rZXldOiBzdHJpcERhdGEsXG4gICAgfTtcbiAgICBpZiAoIXRhYnNSZXN1bHRzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyAmJlxuICAgICAgICAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyB8fCBmZXRjaFN0YXR1cyA9PT0gJ2Vycm9yJykgJiZcbiAgICAgICAgc3RyaXBEYXRhLndpZGdldHNcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzLCBzdHJpcERhdGEud2lkZ2V0cy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKGNhbGN1bGF0ZVBhcmVudFN0YXR1cyAmJiAhKHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAwKSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1BhcmVudFN0YXR1cyhmZXRjaFN0YXR1czogVEZldGNoU3RhdHVzLCBzdHJpcFdpZGdldHNDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgIXN0cmlwV2lkZ2V0c0NvdW50KSB7XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ICs9IDE7XG4gICAgfSBlbHNlIGlmIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnICYmIHN0cmlwV2lkZ2V0c0NvdW50KSB7XG4gICAgICB0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICB0aGlzLmVycm9yRGF0YUNvdW50ICs9IDE7XG4gICAgfVxuICAgIGNvbnN0IHNldHRsZWRDb3VudCA9IHRoaXMubm9EYXRhQ291bnQgKyB0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgKyB0aGlzLmVycm9yRGF0YUNvdW50O1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aDtcbiAgICBpZiAodGhpcy5zdWNjZXNzRGF0YUNvdW50ID4gMCAmJiBzZXR0bGVkQ291bnQgPCB0b3RhbENvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2hvd1BhcmVudExvYWRlciA9IHNldHRsZWRDb3VudCAhPT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnROb0RhdGEgPVxuICAgICAgdGhpcy5ub0RhdGFDb3VudCA+IDAgJiYgdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gICAgdGhpcy5zaG93UGFyZW50RXJyb3IgPSB0aGlzLmVycm9yRGF0YUNvdW50ID09PSB0b3RhbENvdW50O1xuICB9XG4gIGNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICBzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAoKHN0cmlwLnJlcXVlc3QuYXBpICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYXBpKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbiAmJlxuICAgICAgICAgIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24pLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNikubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmNicExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jYnBMaXN0KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50KS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB8fCBcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudCkubGVuZ3RoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0YWJDbGlja2VkKHRhYkV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCwgc3RyaXBNYXA6IElTdHJpcFVuaXRDb250ZW50RGF0YSwgc3RyaXBLZXk6IHN0cmluZykge1xuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZGF0YTogV3NFdmVudHMuSVRlbGVtZXRyeVRhYkRhdGEgPSB7XG4gICAgICBsYWJlbDogYCR7dGFiRXZlbnQudGFiLnRleHRMYWJlbH1gLFxuICAgICAgaW5kZXg6IHRhYkV2ZW50LmluZGV4LFxuICAgIH07XG4gICAgdGhpcy5ldmVudFN2Yy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RUeXBlcy5DTElDSyxcbiAgICAgICAgc3ViVHlwZTogV3NFdmVudHMuRW51bUludGVyYWN0U3ViVHlwZXMuSE9NRV9QQUdFX1NUUklQX1RBQlMsXG4gICAgICAgIGlkOiBgJHtfLmNhbWVsQ2FzZShkYXRhLmxhYmVsKX0tdGFiYCxcbiAgICAgIH0sXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5IT01FLFxuICAgICAgfVxuICAgICk7XG4gICAgY29uc3QgY3VycmVudFRhYkZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLmxhYmVsLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRTdHJpcCAmJiBjdXJyZW50VGFiRnJvbU1hcCAmJiAhY3VycmVudFRhYkZyb21NYXAuY29tcHV0ZURhdGFPbkNsaWNrKSB7XG4gICAgICBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgLy8gY2FsbCBBUEkgdG8gZ2V0IHRhYiBkYXRhIGFuZCBwcm9jZXNzXG4gICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKGN1cnJlbnRTdHJpcCwgW10sICdmZXRjaGluZycsIHRydWUsIG51bGwpXG4gICAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJFdmVudC5pbmRleCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAgICAgICAgIDIwMCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxU2VhcmNoVjYoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBhbGxUYWJzW3RhYkluZGV4XSA9IHtcbiAgICAgICAgICAgICAgLi4uYWxsVGFic1t0YWJJbmRleF0sXG4gICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IGFsbFRhYnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjdXJyZW50VGFiIC0tLSB3aWRnZXRzJywgd2lkZ2V0cylcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RhYlJlc3VsdHMgLSsrKysqKiotLScsIHRhYlJlc3VsdHMpXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICB0YWJSZXN1bHRzIC8vIHRhYlJlc3VsdHMgYXMgd2lkZ2V0c1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXRUYWJEYXRhQnlmaWx0ZXIoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ3N0cmlwIC0tICcsIHN0cmlwKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0gJywgY3VycmVudFRhYik7XG4gICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdjYWxjdWxhdGVQYXJlbnRTdGF0dXMtLSAnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIC8vIFRPRE86IFdyaXRlIGxvZ2ljIGZvciBpbmRpdmlkdWFsIGZpbHRlciBpZiBwYXNzZWQgaW4gY29uZmlnXG4gICAgLy8gYWRkIHN3aXRjaCBjYXNlIGJhc2VkIG9uIGNvbmZpZyBrZXkgcGFzc2VkXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbENicFBsYW5zKHN0cmlwOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcblxuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkge1xuXG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS50b1Byb21pc2UoKTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QoKS5zdWJzY3JpYmUoIGFzeW5jICAocmVzOiBhbnkpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlcykge1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHJlcywnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4nKVxuICAgICAgLy8gICAgIGNvdXJzZXMgPSByZXNcbiAgICAgIC8vICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgLy8gICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcClcbiAgICAgIC8vICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAnJyxcbiAgICAgIC8vICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgIC8vICAgICAgICAgc3RyaXAsXG4gICAgICAvLyAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgLy8gICAgICAgICAnZG9uZScsXG4gICAgICAvLyAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgIC8vICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgIC8vICAgICAgIClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXJyOiBhbnkpID0+IHtcblxuICAgICAgLy8gfSlcblxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cbiAgc3BsaXRDYnBUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0VGFic0xpc3QoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgc3RyaXAsXG4gICAgKTtcbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgbGV0IGFsbDogYW55W10gPSBbXTtcbiAgICBsZXQgdXBjb21pbmc6IGFueVtdID0gW107XG4gICAgbGV0IG92ZXJkdWU6IGFueVtdID0gW107XG4gICAgYXJyYXkuZm9yRWFjaCgoZTogYW55KSA9PiB7XG4gICAgICBhbGwucHVzaChlKTtcbiAgICAgIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBvdmVyZHVlLnB1c2goZSk7XG4gICAgICB9IGVsc2UgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5VUENPTUlORykge1xuICAgICAgICB1cGNvbWluZy5wdXNoKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzID09PSAyKTtcbiAgICBsZXQgYWxsSW5Db21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA8IDIpO1xuXG4gICAgbGV0IGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWRBbGwgPSBhbGxDb21wbGV0ZWQuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+ICBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsSW5Db21wbGV0ZWQgPSBhbGxJbkNvbXBsZXRlZC5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsID0gWy4uLmFsbEluQ29tcGxldGVkLCAuLi5hbGxDb21wbGV0ZWRBbGwsIC4uLmFsbENvbXBsZXRlZE92ZXJEdWVdO1xuXG4gICAgb3ZlcmR1ZSA9IG92ZXJkdWUuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuICBmaXJzdERhdGUgPiBzZWNvbmREYXRlICA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG4gICAgLy8gdGhpcy5nZXRTZWxlY3RlZEluZGV4KDEpXG4gICAgcmV0dXJuIFtcbiAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICd1cGNvbWluZycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHModXBjb21pbmcsIHN0cmlwKSB9LFxuICAgIHsgdmFsdWU6ICdvdmVyZHVlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhvdmVyZHVlLCBzdHJpcCkgfV07XG4gIH1cblxuICBnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXA6IGFueSwga2V5OiBhbnkpOiBudW1iZXIge1xuICAgIGxldCByZXR1cm5WYWx1ZSA9IDA7XG4gICAgaWYgKGtleSA9PT0gJ2NicFBsYW4nKSB7XG4gICAgICBpZiAoc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhID0gc3RyaXBzUmVzdWx0RGF0YU1hcC50YWJzLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PT0gJ3VwY29taW5nJyk7XG4gICAgICAgIHJldHVyblZhbHVlID0gZGF0YVswXS53aWRnZXRzICYmIGRhdGFbMF0ud2lkZ2V0cy5sZW5ndGggPiAwID8gMSA6IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndHJhbnNsYXRpb25zLnRyYW5zbGF0ZUxhYmVsKGxhYmVsLCB0eXBlLCAnJyk7XG4gIH1cblxuICBpZGVudGlmeShpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgdHJhY2tlcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB9XG4gICAgcmV0dXJuIF8uZ2V0KGl0ZW0sICd3aWRnZXREYXRhLmNvbnRlbnQuaWRlbnRpZmllcicpXG4gIH1cblxuICBhc3luYyBmZXRjaEFsbFRvcENvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXItLSAnKVxuICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByYWlzZVRlbGVtZXRyeShzdHJpcERhdGE6IGFueSl7XG4gICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoc3RyaXBEYXRhKVxuICB9XG5cbiAgYXN5bmMgcG9zdFJlcXVlc3RNZXRob2Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgIGFwaVVybDogc3RyaW5nLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnBvc3RBcGlNZXRob2QoYXBpVXJsLHJlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgaWYocmVzdWx0cy5yZXN1bHQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgIHRhYjogJ0xlYXJuJyxcbiAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgZjp7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0gZWxzZSBpZihyZXN1bHRzICYmIHJlc3VsdHMuZGF0YSl7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMuZGF0YSAmJiByZXN1bHRzLmRhdGEubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZT8ge1xuICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGY6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRSZXF1ZXN0TWV0aG9kKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXRbJ3JlcXVlc3QnXSxcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLmdldEFwaU1ldGhvZChhcGlVcmwpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHRzLCdyZXN1bHRzPT09PT09PT09JylcbiAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgcmVzdWx0cy5yZXN1bHQuZGF0YSAmJiByZXN1bHRzLnJlc3VsdC5kYXRhLm9yZ0xpc3QubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgPyB7XG4gICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcG9zdE1ldGhvZEZpbHRlcnMoZmlsdGVyczogYW55KXtcbiAgICBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHRoaXMucHJvdmlkZXJJZFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyc1xuICB9XG4gIGdldEZ1bGxVcmwoYXBpVXJsOiBhbnksIGlkOnN0cmluZyl7XG4gICAgbGV0IGZvcm1lZFVybDogc3RyaW5nID0gJydcbiAgICBpZiAoYXBpVXJsLmluZGV4T2YoJzxib29rbWFya0lkPicpID49IDApIHtcbiAgICAgIGZvcm1lZFVybCA9IGFwaVVybC5yZXBsYWNlKCc8Ym9va21hcmtJZD4nLCB0aGlzLmVudmlyb25tZW50Lm1kb0NoYW5uZWxzQm9va21hcmtJZCkgXG4gICAgfSBlbHNlIGlmIChhcGlVcmwuaW5kZXhPZignPHBsYXlsaXN0S2V5PicpID49IDAgJiYgYXBpVXJsLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPHBsYXlsaXN0S2V5PicsIHRoaXMucHJvdmlkZXJJZCArIGlkKSBcbiAgICAgIGZvcm1lZFVybCA9IGZvcm1lZFVybC5yZXBsYWNlKCc8b3JnSUQ+JywgdGhpcy5wcm92aWRlcklkKSBcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1lZFVybFxuICB9XG5cbiAgcmVkaXJlY3RWaWV3QWxsKHN0cmlwRGF0YTogYW55LCBwYXRoOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zRGF0YTogYW55KSB7XG4gICAgaWYodGhpcy5lbWl0Vmlld0FsbCkge1xuICAgICAgdGhpcy52aWV3QWxsUmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwgeyAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zRGF0YSB9KVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsQm9va01hcmtEYXRhKHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZC5ib29rbWFya0lkKSB7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuYXBpVXJsID0gdGhpcy5nZXRGdWxsVXJsKHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZC5ib29rbWFya0lkKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LmJvb2ttYXJrUmVhZCwgc3RyaXAucmVxdWVzdC5hcGlVcmwsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgbGV0IGNvbnRlbnQgID0gcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YS5vcmdMaXN0XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUFsbENvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoXG4gICAgY29udGVudHM6IGFueSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuICBcbiAgYXN5bmMgZmV0Y2hBbGxQbGF5bGlzdFNlYXJjaChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2ggJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvc3RSZXF1ZXN0TWV0aG9kKHN0cmlwLCBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGZpbmFsUGxheWxpc3REYXRhOiBhbnkgPSBbXVxuICAgICAgICAgICAgbGV0IHByb2dyYW1EYXRhOiBhbnkgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhXG4gICAgICAgICAgICBwcm9ncmFtRGF0YS5mb3JFYWNoKChwcmdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYocHJnRGF0YS5jaGlsZHJlbiAmJiBwcmdEYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZpbmFsUGxheWxpc3REYXRhLnB1c2gocHJnRGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKGZpbmFsUGxheWxpc3REYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGZpbmFsUGxheWxpc3REYXRhLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpIHtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5hcGlVcmwgPSB0aGlzLmdldEZ1bGxVcmwoc3RyaXAucmVxdWVzdC5hcGlVcmwsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hDaW9zQ29udGVudERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmNpb3NDb250ZW50ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQuZmlsdGVyQ3JpdGVyaWFNYXApIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudC5maWx0ZXJDcml0ZXJpYU1hcDtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudC5maWx0ZXJDcml0ZXJpYU1hcCA9IHRoaXMucG9zdE1ldGhvZEZpbHRlcnMoc3RyaXAucmVxdWVzdC5jaW9zQ29udGVudC5maWx0ZXJDcml0ZXJpYU1hcCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QuY2lvc0NvbnRlbnQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5kYXRhICYmIHJlc3BvbnNlLnJlc3VsdHMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBleHRDb250ZW50RGF0YTogYW55ID0gcmVzcG9uc2UucmVzdWx0cy5kYXRhXG4gICAgICAgICAgICBpZihleHRDb250ZW50RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhleHRDb250ZW50RGF0YSwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxufVxuIl19