igniteui-angular 16.1.17 → 16.1.19

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.
@@ -320,7 +320,7 @@ export class WorksheetFile {
320
320
  if (worksheetData.hasSummaries && (isValidRecordType || (worksheetData.isGroupedGrid && isSummaryRecord))) {
321
321
  this.setSummaryCoordinates(columnName, key, fullRow.hierarchicalOwner, worksheetData.isGroupedGrid && isSummaryRecord);
322
322
  }
323
- if (fullRow.summaryKey && fullRow.summaryKey === GRID_ROOT_SUMMARY && key !== GRID_LEVEL_COL && !this.isValidGrid) {
323
+ if (fullRow.summaryKey && fullRow.summaryKey === GRID_ROOT_SUMMARY && key !== GRID_LEVEL_COL && worksheetData.isGroupedGrid) {
324
324
  this.setRootSummaryStartCoordinate(column, key);
325
325
  if (this.firstColumn > column) {
326
326
  this.setRootSummaryStartCoordinate(worksheetData.columnCount + 1, GRID_LEVEL_COL);
@@ -464,8 +464,9 @@ export class WorksheetFile {
464
464
  }
465
465
  setRootSummaryStartCoordinate(column, key) {
466
466
  const firstDataRecordColName = ExcelStrings.getExcelColumn(column) + (this.firstDataRow);
467
- if (this.dimensionMap.get(key).startCoordinate !== firstDataRecordColName) {
468
- this.dimensionMap.get(key).startCoordinate = firstDataRecordColName;
467
+ const targetMap = this.hierarchicalDimensionMap.get(GRID_PARENT);
468
+ if (targetMap.get(key).startCoordinate !== firstDataRecordColName) {
469
+ targetMap.get(key).startCoordinate = firstDataRecordColName;
469
470
  }
470
471
  }
471
472
  printHeaders(worksheetData, headersForLevel, i, isVertical) {
@@ -621,4 +622,4 @@ export class WorksheetRelsFile {
621
622
  folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());
622
623
  }
623
624
  }
624
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBMkMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXJMOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDZCxZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDVCxZQUFZLENBQUMsTUFBYyxFQUFFLGFBQTRCO1FBQzVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNWLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFlBQVksQ0FBQyxNQUFjLEVB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUV4Y2VsRmlsZSB9IGZyb20gJy4vZXhjZWwtaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeGNlbFN0cmluZ3MgfSBmcm9tICcuL2V4Y2VsLXN0cmluZ3MnO1xuaW1wb3J0IHsgV29ya3NoZWV0RGF0YSB9IGZyb20gJy4vd29ya3NoZWV0LWRhdGEnO1xuXG5pbXBvcnQgeyBzdHJUb1U4IH0gZnJvbSAnZmZsYXRlJztcbmltcG9ydCB7IHlpZWxkaW5nTG9vcCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRXhwb3J0SGVhZGVyVHlwZSwgRXhwb3J0UmVjb3JkVHlwZSwgSUV4cG9ydFJlY29yZCwgSUNvbHVtbkxpc3QsIElDb2x1bW5JbmZvLCBHUklEX1JPT1RfU1VNTUFSWSwgR1JJRF9QQVJFTlQsIEdSSURfTEVWRUxfQ09MIH0gZnJvbSAnLi4vZXhwb3J0ZXItY29tbW9uL2Jhc2UtZXhwb3J0LXNlcnZpY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFJvb3RSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWycucmVscyddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0UmVscygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQXBwRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyWydhcHAueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRBcHAod29ya3NoZWV0RGF0YS5vcHRpb25zLndvcmtzaGVldE5hbWUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQ29yZUZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnY29yZS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldENvcmUoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtib29rUmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzO1xuICAgICAgICBmb2xkZXJbJ3dvcmtib29rLnhtbC5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRXb3JrYm9va1JlbHMoaGFzU2hhcmVkU3RyaW5ncykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBUaGVtZUZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsndGhlbWUxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0VGhlbWUoKSk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgRGltZW5zaW9ucyB7XG4gICAgc3RhcnRDb29yZGluYXRlOiBzdHJpbmdcbiAgICBlbmRDb29yZGluYXRlOiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIEN1cnJlbmN5SW5mbyB7XG4gICAgc3R5bGVYZjogbnVtYmVyXG4gICAgc3ltYm9sOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgTUlOX1dJRFRIID0gOC40MztcbiAgICBwcml2YXRlIG1heE91dGxpbmVMZXZlbCA9IDA7XG4gICAgcHJpdmF0ZSBzaGVldERhdGEgPSAnJztcbiAgICBwcml2YXRlIGRpbWVuc2lvbiA9ICcnO1xuICAgIHByaXZhdGUgZnJlZXplUGFuZSA9ICcnO1xuICAgIHByaXZhdGUgcm93SGVpZ2h0ID0gJyc7XG5cbiAgICBwcml2YXRlIG1lcmdlQ2VsbFN0ciA9ICcnO1xuICAgIHByaXZhdGUgbWVyZ2VDZWxsc0NvdW50ZXIgPSAwO1xuICAgIHByaXZhdGUgcm93SW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGl2b3RHcmlkUm93SGVhZGVyc01hcCA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIGRpbWVuc2lvbk1hcDogTWFwPHN0cmluZywgRGltZW5zaW9ucz4gPSBuZXcgTWFwPHN0cmluZywgRGltZW5zaW9ucz4oKTtcbiAgICBwcml2YXRlIGhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcDogTWFwPGFueSwgIE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+PiA9IG5ldyBNYXA8YW55LCAgTWFwPHN0cmluZywgRGltZW5zaW9ucz4+KCk7XG4gICAgcHJpdmF0ZSBjdXJyZW50U3VtbWFyeU93bmVyID0gJyc7XG4gICAgcHJpdmF0ZSBjdXJyZW50SGllcmFyY2hpY2FsT3duZXIgPSAnJztcbiAgICBwcml2YXRlIGZpcnN0Q29sdW1uID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICBwcml2YXRlIGZpcnN0RGF0YVJvdyA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgcHJpdmF0ZSBpc1ZhbGlkR3JpZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGxhc3RWYWxpZFJvdzogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW5jeVN0eWxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEN1cnJlbmN5SW5mbz4oW1xuICAgICAgICBbJ1VTRCcsIHtzdHlsZVhmOiA1LCBzeW1ib2w6ICckJ31dLFxuICAgICAgICBbJ0dCUCcsIHtzdHlsZVhmOiA2LCBzeW1ib2w6ICfCoyd9XSxcbiAgICAgICAgWydDTlknLCB7c3R5bGVYZjogNywgc3ltYm9sOiAnwqUnfV0sXG4gICAgICAgIFsnRVVSJywge3N0eWxlWGY6IDgsIHN5bWJvbDogJ+KCrCd9XSxcbiAgICAgICAgWydKUFknLCB7c3R5bGVYZjogOSwgc3ltYm9sOiAnwqUnfV0sXG4gICAgXSk7XG5cbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KCkge31cblxuICAgIHB1YmxpYyBhc3luYyB3cml0ZUVsZW1lbnRBc3luYyhmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVEYXRhQXN5bmMod29ya3NoZWV0RGF0YSwgKGNvbHMsIHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNUYWJsZSA9ICghd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzKVxuICAgICAgICAgICAgICAgICAgICAmJiB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZXhwb3J0QXNUYWJsZTtcblxuICAgICAgICAgICAgICAgIGZvbGRlclsnc2hlZXQxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0U2hlZXRYTUwoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uLCB0aGlzLmZyZWV6ZVBhbmUsIGNvbHMsIHJvd3MsIGhhc1RhYmxlLCB0aGlzLm1heE91dGxpbmVMZXZlbCwgd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVEYXRhQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKGNvbHM6IHN0cmluZywgc2hlZXREYXRhOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5zaGVldERhdGEgPSAnJztcbiAgICAgICAgbGV0IGNvbHMgPSAnJztcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIHRoaXMucm93SW5kZXggPSAwO1xuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmlzRW1wdHkgJiYgKCF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycyB8fCB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gJzxzaGVldERhdGEvPic7XG4gICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMSc7XG4gICAgICAgICAgICBkb25lKCcnLCB0aGlzLnNoZWV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvd25lciA9IHdvcmtzaGVldERhdGEub3duZXI7XG4gICAgICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlDb2x1bW5IZWFkZXIgPSB3b3Jrc2hlZXREYXRhLmhhc011bHRpQ29sdW1uSGVhZGVyO1xuICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlSb3dIZWFkZXIgPSB3b3Jrc2hlZXREYXRhLmhhc011bHRpUm93SGVhZGVyO1xuXG4gICAgICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSBvd25lci5jb2x1bW5zLnNvbWUoY29sID0+IGNvbC5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gIHdvcmtzaGVldERhdGEub3B0aW9ucy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsIHx8IHdvcmtzaGVldERhdGEuaXNUcmVlR3JpZCB8fCB3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQ7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/IGAgaHQ9XCIke2hlaWdodH1cIiBjdXN0b21IZWlnaHQ9XCIxXCJgIDogJyc7XG4gICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPHNoZWV0RGF0YT5gO1xuXG4gICAgICAgICAgICBsZXQgaGVhZGVyc0ZvckxldmVsOiBJQ29sdW1uSW5mb1tdID0gW107XG5cbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPD0gb3duZXIubWF4Um93TGV2ZWw7IGkrKykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnNGb3JMZXZlbCA9ICBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+IGMubGV2ZWwgPT09IGkgJiYgYy5yb3dTcGFuID4gMCAmJiAhYy5za2lwKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5wcmludEhlYWRlcnMod29ya3NoZWV0RGF0YSwgaGVhZGVyc0ZvckxldmVsLCBpLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCA9IDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG93bmVyLm1heExldmVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICAgICAgY29uc3QgcGl2b3RHcmlkQ29sdW1ucyA9IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQodGhpcy5yb3dJbmRleCkgPz8gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPHJvdyByPVwiJHt0aGlzLnJvd0luZGV4fVwiJHt0aGlzLnJvd0hlaWdodH0+JHtwaXZvdEdyaWRDb2x1bW5zfWA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhbGxvd2VkQ29sdW1ucyA9IG93bmVyLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5oZWFkZXJUeXBlICE9PSBFeHBvcnRIZWFkZXJUeXBlLlJvd0hlYWRlciAmJiBjLmhlYWRlclR5cGUgIT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlSb3dIZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgaGVhZGVyc0ZvckxldmVsID0gaGFzTXVsdGlDb2x1bW5IZWFkZXIgP1xuICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuaGVhZGVyVHlwZSAhPT0gRXhwb3J0SGVhZGVyVHlwZS5NdWx0aUNvbHVtbkhlYWRlciB8fCBjLmxldmVsID09PSBpKSAmJiBjLmNvbHVtblNwYW4gPiAwICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KSA6XG4gICAgICAgICAgICAgICAgICAgIGhhc1VzZXJTZXRJbmRleCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkQ29sdW1ucy5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbCwgaSwgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlTXVsdGlDb2x1bW5IZWFkZXJzID8gMCA6IG93bmVyLm1heExldmVsO1xuICAgICAgICAgICAgY29uc3QgZnJlZXplSGVhZGVycyA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzID8gMiArIG11bHRpQ29sdW1uSGVhZGVyTGV2ZWwgOiAxO1xuXG4gICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzID8gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDEgOiB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50IC0gMVxuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uID0gJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sKSArICh3b3Jrc2hlZXREYXRhLnJvd0NvdW50KTtcblxuICAgICAgICAgICAgICAgIGNvbHMgKz0gJzxjb2xzPic7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc011bHRpQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IGRpY3Rpb25hcnkuY29sdW1uV2lkdGhzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB3aWR0aCBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucyBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aEluVHdpcHMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuY29sdW1uV2lkdGggOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoKCh3aWR0aCAvIDk2KSAqIDE0LjQpLCBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh3aWR0aEluVHdpcHMgPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoSW5Ud2lwcyA9IFdvcmtzaGVldEZpbGUuTUlOX1dJRFRIO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIiR7KGogKyAxKX1cIiBtYXg9XCIkeyhqICsgMSl9XCIgd2lkdGg9XCIke3dpZHRoSW5Ud2lwc31cIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIjE1XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gPSB3b3Jrc2hlZXREYXRhLmluZGV4T2ZMYXN0UGlubmVkQ29sdW1uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb3plbkNvbHVtbkNvdW50ID0gaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGxldCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oZnJvemVuQ29sdW1uQ291bnQpICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBpbmRleE9mTGFzdFBpbm5lZENvbHVtbiAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgIXdvcmtzaGVldERhdGEub3B0aW9ucy5pZ25vcmVQaW5uaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlQ29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiJHtmcm96ZW5Db2x1bW5Db3VudH1cIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKDApICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIwXCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoID8gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoIDogMjA7XG4gICAgICAgICAgICAgICAgY29scyArPSBgPGNvbHM+PGNvbCBtaW49XCIxXCIgbWF4PVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50fVwiIHdpZHRoPVwiJHtjb2x1bW5XaWR0aH1cIiBjdXN0b21XaWR0aD1cIjFcIi8+YDtcblxuICAgICAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENlbGwgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oMCkgKyBmcmVlemVIZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIjBcIiB5U3BsaXQ9XCIke2ZyZWV6ZUhlYWRlcnMgLSAxfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdENlbGw9XCIke2ZpcnN0Q2VsbH1cIiBhY3RpdmVQYW5lPVwidG9wUmlnaHRcIiBzdGF0ZT1cImZyb3plblwiLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAyfVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDJ9XCIgaGlkZGVuPVwiMVwiLz5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2xzICs9ICc8L2NvbHM+JztcblxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVJlY29yZHNBc3luYyh3b3Jrc2hlZXREYXRhLCAocm93cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IHJvd3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gJzwvc2hlZXREYXRhPic7XG5cbiAgICAgICAgICAgICAgICBpZiAoKGhhc011bHRpQ29sdW1uSGVhZGVyIHx8IGhhc011bHRpUm93SGVhZGVyKSAmJiB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBgPG1lcmdlQ2VsbHMgY291bnQ9XCIke3RoaXMubWVyZ2VDZWxsc0NvdW50ZXJ9XCI+JHt0aGlzLm1lcmdlQ2VsbFN0cn08L21lcmdlQ2VsbHM+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKGNvbHMsIHRoaXMuc2hlZXREYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzRGF0YVJlY29yZHNBc3luYyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBkb25lOiAocm93czogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIGNvbnN0IHJvd0RhdGFBcnIgPSBbXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gIHdvcmtzaGVldERhdGEub3B0aW9ucy5yb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gaGVpZ2h0ID8gJyBodD1cIicgKyBoZWlnaHQgKyAnXCIgY3VzdG9tSGVpZ2h0PVwiMVwiJyA6ICcnO1xuXG4gICAgICAgIGNvbnN0IGlzSGllcmFyY2hpY2FsR3JpZCA9IHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWw7XG4gICAgICAgIGNvbnN0IGhhc1VzZXJTZXRJbmRleCA9IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1ucy5zb21lKGMgPT4gYy5leHBvcnRJbmRleCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICBsZXQgcmVjb3JkSGVhZGVycyA9IFtdO1xuXG4gICAgICAgIHlpZWxkaW5nTG9vcCh3b3Jrc2hlZXREYXRhLnJvd0NvdW50IC0gd29ya3NoZWV0RGF0YS5tdWx0aUNvbHVtbkhlYWRlclJvd3MgLSAxLCAxMDAwLFxuICAgICAgICAgICAgKGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXdvcmtzaGVldERhdGEuaXNFbXB0eSl7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNIaWVyYXJjaGljYWxHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVXNlclNldEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IHdvcmtzaGVldERhdGEucm9vdEtleXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSA9PT0gRXhwb3J0SGVhZGVyVHlwZS5Db2x1bW5IZWFkZXIgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleC1iLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4LWIucGlubmVkSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHdvcmtzaGVldERhdGEuZGF0YVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhlYWRlclJlY29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZE93bmVyID0gd29ya3NoZWV0RGF0YS5vd25lcnMuZ2V0KHJlY29yZC5vd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTXVsdGlDb2x1bW5IZWFkZXJzID0gcmVjb3JkT3duZXIuY29sdW1ucy5zb21lKGMgPT4gIWMuc2tpcCAmJiBjLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc011bHRpQ29sdW1uSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YSwgcm93RGF0YUFyciwgcmVjb3JkLCByZWNvcmRPd25lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gT2JqZWN0LmtleXMod29ya3NoZWV0RGF0YS5kYXRhW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YUFyci5wdXNoKHRoaXMucHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhLCBpLCByZWNvcmRIZWFkZXJzLCBpc0hpZXJhcmNoaWNhbEdyaWQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUocm93RGF0YUFyci5qb2luKCcnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaEdyaWRQcmludE11bHRpQ29sSGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3dEYXRhQXJyOiBhbnlbXSwgcmVjb3JkOiBJRXhwb3J0UmVjb3JkLFxuICAgICAgICBvd25lcjogSUNvbHVtbkxpc3QpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBvd25lci5tYXhMZXZlbDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRMZXZlbCA9IHJlY29yZC5sZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJlY29yZExldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyZWNvcmRMZXZlbH1cImAgOiAnJztcbiAgICAgICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByZWNvcmRMZXZlbCA/IHJlY29yZExldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICBsZXQgcm93ID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT5gO1xuXG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzRm9yTGV2ZWwgPSBvd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IChjLmxldmVsIDwgaiAmJlxuICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaikgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KTtcblxuICAgICAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwICsgcmVjb3JkLmxldmVsO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGopIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUpICsgdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiIHM9XCIzXCIgdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPT0gb3duZXIubWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAgPG1lcmdlQ2VsbCByZWY9XCIke2NvbHVtbkNvb3JkaW5hdGV9OmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnJvd0luZGV4ICsgb3duZXIubWF4TGV2ZWwgLSBjdXJyZW50Q29sLmxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBjdXJyZW50Q29sLmNvbHVtblNwYW47IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHN0YXJ0VmFsdWUgKyBrKSArIHRoaXMucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBjdXJyZW50Q29sLmNvbHVtblNwYW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgKz0gYDwvcm93PmA7XG4gICAgICAgICAgICByb3dEYXRhQXJyLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jvdyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBpOiBudW1iZXIsIGhlYWRlcnNGb3JMZXZlbDogYW55W10sIGlzSGllcmFyY2hpY2FsR3JpZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IG5ldyBBcnJheSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMik7XG5cbiAgICAgICAgY29uc3Qgcm93TGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgIGNvbnN0IG91dGxpbmVMZXZlbCA9IHJvd0xldmVsID4gMCA/IGAgb3V0bGluZUxldmVsPVwiJHtyb3dMZXZlbH1cImAgOiAnJztcbiAgICAgICAgdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPSB0aGlzLm1heE91dGxpbmVMZXZlbCA8IHJvd0xldmVsID8gcm93TGV2ZWwgOiB0aGlzLm1heE91dGxpbmVMZXZlbDtcblxuICAgICAgICBjb25zdCBzSGlkZGVuID0gcmVjb3JkLmhpZGRlbiA/IGAgaGlkZGVuPVwiMVwiYCA6ICcnO1xuXG4gICAgICAgIHRoaXMucm93SW5kZXgrKztcbiAgICAgICAgY29uc3QgcGl2b3RHcmlkQ29sdW1ucyA9IHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQodGhpcy5yb3dJbmRleCkgPz8gXCJcIjtcblxuICAgICAgICByb3dEYXRhWzBdID0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9JHtvdXRsaW5lTGV2ZWx9JHtzSGlkZGVufT4ke3Bpdm90R3JpZENvbHVtbnN9YDtcbiAgICAgICAgY29uc3Qga2V5cyA9IHdvcmtzaGVldERhdGEuaXNTcGVjaWFsRGF0YSA/IFtyZWNvcmQuZGF0YV0gOiBoZWFkZXJzRm9yTGV2ZWw7XG4gICAgICAgIGNvbnN0IGlzRGF0YVJlY29yZCA9IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkdyb3VwZWRSZWNvcmRcbiAgICAgICAgICAgIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlRyZWVHcmlkUmVjb3JkO1xuXG4gICAgICAgIGNvbnN0IGlzVmFsaWRSZWNvcmRUeXBlID0gaXNEYXRhUmVjb3JkIHx8IHJlY29yZC50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLlN1bW1hcnlSZWNvcmQ7XG5cbiAgICAgICAgaWYgKGlzVmFsaWRSZWNvcmRUeXBlICYmIHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVTdW1tYXJ5RGltZW5zaW9ucyhyZWNvcmQsIGlzRGF0YVJlY29yZCwgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkKVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSBqICsgKGlzSGllcmFyY2hpY2FsR3JpZCA/IHJvd0xldmVsIDogd29ya3NoZWV0RGF0YS5pc1Bpdm90R3JpZCA/IHdvcmtzaGVldERhdGEub3duZXIubWF4Um93TGV2ZWwgOiAwKTtcblxuICAgICAgICAgICAgY29uc3QgY2VsbERhdGEgPSB0aGlzLmdldENlbGxEYXRhKHdvcmtzaGVldERhdGEsIGksIGNvbCwga2V5c1tqXSk7XG5cbiAgICAgICAgICAgIHJvd0RhdGFbaiArIDFdID0gY2VsbERhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByb3dEYXRhW2tleXMubGVuZ3RoICsgMV0gPSAnPC9yb3c+JztcblxuICAgICAgICByZXR1cm4gcm93RGF0YS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENlbGxEYXRhKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgbGV0IGNvbHVtbk5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgZnVsbFJvdyA9IHdvcmtzaGVldERhdGEuZGF0YVtyb3ddO1xuICAgICAgICBjb25zdCBpc0hlYWRlclJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQ7XG4gICAgICAgIGNvbnN0IGlzU3VtbWFyeVJlY29yZCA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkO1xuICAgICAgICBjb25zdCBpc1ZhbGlkUmVjb3JkVHlwZSA9IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkXG4gICAgICAgICAgICB8fCBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuRGF0YVJlY29yZFxuICAgICAgICAgICAgfHwgZnVsbFJvdy50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkhpZXJhcmNoaWNhbEdyaWRSZWNvcmRcbiAgICAgICAgICAgIHx8IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZDtcblxuICAgICAgICB0aGlzLmZpcnN0RGF0YVJvdyA9IHRoaXMuZmlyc3REYXRhUm93ID4gdGhpcy5yb3dJbmRleCA/IHRoaXMucm93SW5kZXggOiB0aGlzLmZpcnN0RGF0YVJvdztcblxuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB3b3Jrc2hlZXREYXRhLmlzU3BlY2lhbERhdGEgP1xuICAgICAgICAgICAgZnVsbFJvdy5kYXRhIDpcbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YVtrZXldO1xuXG4gICAgICAgIGlmIChjZWxsVmFsdWUgPT09IEdSSURfTEVWRUxfQ09MIHx8IGtleSA9PT0gR1JJRF9MRVZFTF9DT0wpIHtcbiAgICAgICAgICAgIGNvbHVtbk5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4od29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDEpICsgKHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzICYmIChpc1ZhbGlkUmVjb3JkVHlwZSB8fCAod29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkICYmIGlzU3VtbWFyeVJlY29yZCkpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN1bW1hcnlDb29yZGluYXRlcyhjb2x1bW5OYW1lLCBrZXksIGZ1bGxSb3cuaGllcmFyY2hpY2FsT3duZXIsIHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZCAmJiBpc1N1bW1hcnlSZWNvcmQpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVsbFJvdy5zdW1tYXJ5S2V5ICYmIGZ1bGxSb3cuc3VtbWFyeUtleSA9PT0gR1JJRF9ST09UX1NVTU1BUlkgJiYga2V5ICE9PSBHUklEX0xFVkVMX0NPTCAmJiAhdGhpcy5pc1ZhbGlkR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb290U3VtbWFyeVN0YXJ0Q29vcmRpbmF0ZShjb2x1bW4sIGtleSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Q29sdW1uID4gY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSb290U3VtbWFyeVN0YXJ0Q29vcmRpbmF0ZSh3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMSwgR1JJRF9MRVZFTF9DT0wpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXRDb2xBcnIgPSBBcnJheS5mcm9tKHdvcmtzaGVldERhdGEub3duZXJzLnZhbHVlcygpKS5tYXAoYXJyID0+IGFyci5jb2x1bW5zKS5maW5kKHByb2R1Y3QgPT4gcHJvZHVjdC5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PT0ga2V5KSk7XG4gICAgICAgIGNvbnN0IHRhcmdldENvbCA9IHRhcmdldENvbEFyciA/IHRhcmdldENvbEFyci5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKChjZWxsVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBjZWxsVmFsdWUgPT09IG51bGwpICYmICF3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiIHM9XCIxXCIvPmA7XG4gICAgICAgIH0gZWxzZSBpZiAoKHdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzICYmIChpc1ZhbGlkUmVjb3JkVHlwZSB8fCBpc0hlYWRlclJlY29yZCkpIHx8ICF3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgY29uc3Qgc2F2ZWRWYWx1ZSA9IGRpY3Rpb25hcnkuc2F2ZVZhbHVlKGNlbGxWYWx1ZSwgaXNIZWFkZXJSZWNvcmQpO1xuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzU3RyaW5nID0gc2F2ZWRWYWx1ZSAhPT0gLTE7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzU2F2ZWRBc0RhdGUgPSAhaXNTYXZlZEFzU3RyaW5nICYmIGNlbGxWYWx1ZSBpbnN0YW5jZW9mIERhdGU7XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGlzU2F2ZWRBc1N0cmluZyA/IHNhdmVkVmFsdWUgOiBjZWxsVmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChpc1NhdmVkQXNEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZVpvbmVPZmZzZXQgPSB2YWx1ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNvU3RyaW5nID0gKG5ldyBEYXRlKHZhbHVlIC0gdGltZVpvbmVPZmZzZXQpKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaXNvU3RyaW5nLnN1YnN0cmluZygwLCBpc29TdHJpbmcuaW5kZXhPZignLicpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IGlzU2F2ZWRBc1N0cmluZyA/IGAgdD1cInNcImAgOiBpc1NhdmVkQXNEYXRlID8gYCB0PVwiZFwiYCA6ICcnO1xuXG4gICAgICAgICAgICBjb25zdCBpc1RpbWUgPSB0YXJnZXRDb2w/LmRhdGFUeXBlID09PSAndGltZSc7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGVUaW1lID0gdGFyZ2V0Q29sPy5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJztcbiAgICAgICAgICAgIGNvbnN0IGlzUGVyY2VudGFnZSA9IHRhcmdldENvbD8uZGF0YVR5cGUgPT09ICdwZXJjZW50JztcbiAgICAgICAgICAgIGNvbnN0IGlzQ29sdW1uQ3VycmVuY3lUeXBlID0gdGFyZ2V0Q29sPy5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JztcblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gaXNQZXJjZW50YWdlID8gYCBzPVwiMTJcImAgOiBpc0RhdGVUaW1lID8gYCBzPVwiMTFcImAgOiBpc1RpbWUgPyBgIHM9XCIxMFwiYCA6IGlzSGVhZGVyUmVjb3JkID8gYCBzPVwiM1wiYCA6IGlzU2F2ZWRBc1N0cmluZyA/ICcnIDogaXNTYXZlZEFzRGF0ZSA/IGAgcz1cIjJcImAgOiBpc0NvbHVtbkN1cnJlbmN5VHlwZSA/IGAgcz1cIiR7dGhpcy5jdXJyZW5jeVN0eWxlTWFwLmdldCh0YXJnZXRDb2wuY3VycmVuY3lDb2RlKT8uc3R5bGVYZiB8fCAwfVwiYCA6IGAgcz1cIjFcImA7XG5cbiAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiR7dHlwZX0ke2Zvcm1hdH0+PHY+JHt2YWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc3VtbWFyeUZ1bmMgPSBgXCIke2NlbGxWYWx1ZSA/PyBcIlwifVwiYDtcblxuICAgICAgICAgICAgaWYgKGlzU3VtbWFyeVJlY29yZCAmJiBjZWxsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1lbnNpb25NYXBLZXkgPSB0aGlzLmlzVmFsaWRHcmlkID8gZnVsbFJvdy5oaWVyYXJjaGljYWxPd25lciA/PyBHUklEX1BBUkVOVCA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWwgPSB3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQgPyB3b3Jrc2hlZXREYXRhLm1heExldmVsIDogZnVsbFJvdy5sZXZlbDtcblxuICAgICAgICAgICAgICAgIHN1bW1hcnlGdW5jID0gdGhpcy5nZXRTdW1tYXJ5RnVuY3Rpb24oY2VsbFZhbHVlLmxhYmVsLCBrZXksIGRpbWVuc2lvbk1hcEtleSwgbGV2ZWwsIHRhcmdldENvbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlGdW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxTdHIgPSBgJHtjZWxsVmFsdWUubGFiZWx9OiAke2NlbGxWYWx1ZS52YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzYXZlZFZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY2VsbFN0ciwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgdD1cInNcIiBzPVwiMVwiPjx2PiR7c2F2ZWRWYWx1ZX08L3Y+PC9jPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiPjxmIHQ9XCJhcnJheVwiIHJlZj1cIiR7Y29sdW1uTmFtZX1cIj4ke3N1bW1hcnlGdW5jfTwvZj48L2M+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiIHM9XCIxXCI+PGY+JHtzdW1tYXJ5RnVuY308L2Y+PC9jPmA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc29sdmVTdW1tYXJ5RGltZW5zaW9ucyhyZWNvcmQ6IElFeHBvcnRSZWNvcmQsIGlzRGF0YVJlY29yZDogYm9vbGVhbiwgaXNHcm91cGVkR3JpZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkR3JpZCAmJlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgIT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gcmVjb3JkLm93bmVyICYmXG4gICAgICAgICAgICAhdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuc2V0KHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyLCBuZXcgTWFwKHRoaXMuZGltZW5zaW9uTWFwKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RhdGFSZWNvcmQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdW1tYXJ5T3duZXIgIT09IHJlY29yZC5zdW1tYXJ5S2V5IHx8IHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSByZWNvcmQuaGllcmFyY2hpY2FsT3duZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbk1hcC5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdW1tYXJ5T3duZXIgPSByZWNvcmQuc3VtbWFyeUtleTtcblxuICAgICAgICAgICAgLy8gRm9yIGdyb3VwZWQgZ3JpZCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBwYXJlbnQgbWFwXG4gICAgICAgICAgICAvLyBzbyB3ZSBjYW4gY2hhbmdlIHRoZSBzdGFydENvb3JkaW5hdGUgZm9yIGVhY2ggcmVjb3JkXG4gICAgICAgICAgICBpZiAoaXNHcm91cGVkR3JpZCAmJiB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gJycgJiYgcmVjb3JkLmhpZXJhcmNoaWNhbE93bmVyID09PSBHUklEX1BBUkVOVCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmRlbGV0ZShHUklEX1BBUkVOVClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgPSByZWNvcmQuaGllcmFyY2hpY2FsT3duZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN1bW1hcnlDb29yZGluYXRlcyhjb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBoaWVyYXJjaGljYWxPd25lcjogc3RyaW5nLCB1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERpbWVuc2lvbk1hcCA9IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChoaWVyYXJjaGljYWxPd25lcikgPz8gdGhpcy5kaW1lbnNpb25NYXA7XG5cbiAgICAgICAgaWYgKCF0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxEaW1lbnNpb25zOiBEaW1lbnNpb25zID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0Q29vcmRpbmF0ZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBlbmRDb29yZGluYXRlOiBjb2x1bW5OYW1lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0YXJnZXREaW1lbnNpb25NYXAuc2V0KGtleSwgaW5pdGlhbERpbWVuc2lvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kQ29vcmRpbmF0ZXModGFyZ2V0RGltZW5zaW9uTWFwLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGltZW5zaW9uTWFwLmdldChrZXkpLmVuZENvb3JkaW5hdGUgPSBjb2x1bW5OYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFZhbGlkUm93ID0gdGFyZ2V0RGltZW5zaW9uTWFwLmdldChrZXkpLmVuZENvb3JkaW5hdGUubWF0Y2goL1thLXpdK3xbXmEtel0rL2dpKVsxXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZEdyaWQgJiYgIXVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGUgJiYgaGllcmFyY2hpY2FsT3duZXIgIT09IEdSSURfUEFSRU5UKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5nZXQoR1JJRF9QQVJFTlQpO1xuICAgICAgICAgICAgdGhpcy5zZXRFbmRDb29yZGluYXRlcyhwYXJlbnRNYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRFbmRDb29yZGluYXRlcyhtYXA6IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+LCB1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlID0gZmFsc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBhIG9mIG1hcC52YWx1ZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgY29sTmFtZSA9IGEuZW5kQ29vcmRpbmF0ZS5tYXRjaCgvW2Etel0rfFteYS16XSsvZ2kpWzBdO1xuICAgICAgICAgICAgYS5lbmRDb29yZGluYXRlID0gYCR7Y29sTmFtZX0ke3VzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGUgPyB0aGlzLmxhc3RWYWxpZFJvdyA6IHRoaXMucm93SW5kZXh9YDtcbiAgICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlGdW5jdGlvbih0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBkaW1lbnNpb25NYXBLZXk6IGFueSwgcmVjb3JkTGV2ZWw6IG51bWJlciwgY29sOiBJQ29sdW1uSW5mbyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbk1hcCA9IGRpbWVuc2lvbk1hcEtleSA/IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChkaW1lbnNpb25NYXBLZXkpIDogdGhpcy5kaW1lbnNpb25NYXA7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBkaW1lbnNpb25NYXAuZ2V0KGtleSk7XG4gICAgICAgIGNvbnN0IGxldmVsRGltZW5zaW9ucyA9IGRpbWVuc2lvbk1hcC5nZXQoR1JJRF9MRVZFTF9DT0wpO1xuXG4gICAgICAgIGxldCBmdW5jID0gJyc7XG4gICAgICAgIGxldCBmdW5jVHlwZSA9ICcnO1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5SW5mbyA9IHRoaXMuY3VycmVuY3lTdHlsZU1hcC5nZXQoY29sLmN1cnJlbmN5Q29kZSk7XG5cbiAgICAgICAgc3dpdGNoKHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImNvdW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcIkNvdW50OiBcIiZhbXA7X3hsZm4uQ09VTlRJRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSlgXG4gICAgICAgICAgICBjYXNlIFwibWluXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5NSU4oX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJNaW46IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5NQVgoX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJNYXg6IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwic3VtXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9ICBgX3hsZm4uU1VNSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSwgJHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJTdW06IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwiYXZnXCI6XG4gICAgICAgICAgICAgICAgZnVuYyA9IGBfeGxmbi5BVkVSQUdFSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSwgJHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSlgXG4gICAgICAgICAgICAgICAgZnVuY1R5cGUgPSBgXCJBdmc6IFwiJmFtcDtgO1xuXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuY1R5cGUgKyAoY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knICYmIGN1cnJlbmN5SW5mb1xuICAgICAgICAgICAgICAgICAgICA/IGBfeGxmbi5URVhUKCR7ZnVuY30sIFwiJHtjdXJyZW5jeUluZm8uc3ltYm9sfSMsIyMwLjAwXCIpYFxuICAgICAgICAgICAgICAgICAgICA6IGAke2Z1bmN9YCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICBjYXNlIFwiZWFybGllc3RcIjpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgZGF0ZSBmb3JtYXQgZnJvbSBsb2NhbGVcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiRWFybGllc3Q6IFwiJmFtcDtfeGxmbi5URVhUKF94bGZuLk1JTihfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKSwgXCJtL2QveXl5eVwiKWBcbiAgICAgICAgICAgIGNhc2UgXCJsYXRlc3RcIjpcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBnZXQgZGF0ZSBmb3JtYXQgZnJvbSBsb2NhbGVcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiTGF0ZXN0OiBcIiZhbXA7X3hsZm4uVEVYVChfeGxmbi5NQVgoX3hsZm4uSUYoJHtsZXZlbERpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2xldmVsRGltZW5zaW9ucy5lbmRDb29yZGluYXRlfT0ke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KSksIFwibS9kL3l5eXlcIilgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKGNvbHVtbjogbnVtYmVyLCBrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaXJzdERhdGFSZWNvcmRDb2xOYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikgKyAodGhpcy5maXJzdERhdGFSb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpbWVuc2lvbk1hcC5nZXQoa2V5KS5zdGFydENvb3JkaW5hdGUgIT09IGZpcnN0RGF0YVJlY29yZENvbE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uTWFwLmdldChrZXkpLnN0YXJ0Q29vcmRpbmF0ZSA9IGZpcnN0RGF0YVJlY29yZENvbE5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWw6IElDb2x1bW5JbmZvW10sIGk6IG51bWJlciwgaXNWZXJ0aWNhbDogYm9vbGVhbikge1xuICAgICAgICBsZXQgc3RhcnRWYWx1ZSA9IDA7XG4gICAgICAgIGxldCBzdHIgPSAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICBsZXQgcm93U3R5bGUgPSBpc0hpZXJhcmNoaWNhbEdyaWQgPyAnIHM9XCIzXCInIDogJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICBjb25zdCBvd25lciA9IHdvcmtzaGVldERhdGEub3duZXI7XG4gICAgICAgIGNvbnN0IG1heExldmVsID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgPyBvd25lci5tYXhSb3dMZXZlbFxuICAgICAgICAgICAgOiBvd25lci5tYXhMZXZlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnRDb2wgb2YgaGVhZGVyc0ZvckxldmVsKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFuTGVuZ3RoID0gaXNWZXJ0aWNhbCA/IGN1cnJlbnRDb2wucm93U3BhbiA6IGN1cnJlbnRDb2wuY29sdW1uU3BhbjtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2wubGV2ZWwgPT09IGkpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uQ29vcmRpbmF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5yb3dJbmRleFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJ0VmFsdWUgKyAob3duZXIubWF4Um93TGV2ZWwgPz8gMClcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0Nvb3JkaW5hdGUgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgID8gc3RhcnRWYWx1ZSArIG93bmVyLm1heExldmVsICsgMlxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm93SW5kZXhcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY3VycmVudENvbC5oZWFkZXIsIHRydWUsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSAoY3VycmVudENvbC5maWVsZCA9PT0gR1JJRF9MRVZFTF9DT0xcbiAgICAgICAgICAgICAgICAgICAgPyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4od29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDEpXG4gICAgICAgICAgICAgICAgICAgIDogRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikpICsgcm93Q29vcmRpbmF0ZTtcblxuICAgICAgICAgICAgICAgIHJvd1N0eWxlID0gaXNWZXJ0aWNhbCAmJiBjdXJyZW50Q29sLnJvd1NwYW4gPiAxID8gJyBzPVwiNFwiJyA6IHJvd1N0eWxlO1xuICAgICAgICAgICAgICAgIHN0ciA9IGA8YyByPVwiJHtjb2x1bW5Db29yZGluYXRlfVwiJHtyb3dTdHlsZX0gdD1cInNcIj48dj4ke2NvbHVtblZhbHVlfTwvdj48L2M+YDtcblxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuaGFzKHJvd0Nvb3JkaW5hdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvd0Nvb3JkaW5hdGUsIHRoaXMucGl2b3RHcmlkUm93SGVhZGVyc01hcC5nZXQocm93Q29vcmRpbmF0ZSkgKyBzdHIpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvd0Nvb3JkaW5hdGUsIHN0cilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IHN0cjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaSAhPT0gbWF4TGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxzQ291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgIDxtZXJnZUNlbGwgcmVmPVwiJHtjb2x1bW5Db29yZGluYXRlfTpgO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhMZXZlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhcnRWYWx1ZSArIChvd25lci5tYXhSb3dMZXZlbCA/PyAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93Q29vcmRpbmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogb3duZXIubWF4TGV2ZWwgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyByb3c7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMTsgayA8IHNwYW5MZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4gKyBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0Nvb3JkaW5hdGUgKyBrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3dJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sKSArIHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiR7cm93U3R5bGV9IC8+YDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuc2V0KHJvdywgc3RyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc2hlZXREYXRhICs9IHN0clxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCR7Y29sdW1uQ29vcmRpbmF0ZX1cIiAvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydFZhbHVlICs9IHNwYW5MZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3N0eWxlcy54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFN0eWxlcygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya2Jvb2tGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBmb2xkZXJbJ3dvcmtib29rLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2sod29ya3NoZWV0RGF0YS5vcHRpb25zLndvcmtzaGVldE5hbWUpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgQ29udGVudFR5cGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzU2hhcmVkU3RyaW5ncyA9ICF3b3Jrc2hlZXREYXRhLmlzRW1wdHkgfHwgd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnM7XG4gICAgICAgIGZvbGRlclsnW0NvbnRlbnRfVHlwZXNdLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0Q29udGVudFR5cGVzWE1MKGhhc1NoYXJlZFN0cmluZ3MsIHdvcmtzaGVldERhdGEub3B0aW9ucy5leHBvcnRBc1RhYmxlKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFNoYXJlZFN0cmluZ3NGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBkaWN0ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3Qgc29ydGVkVmFsdWVzID0gZGljdC5nZXRLZXlzKCk7XG4gICAgICAgIGNvbnN0IHNoYXJlZFN0cmluZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPihzb3J0ZWRWYWx1ZXMubGVuZ3RoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNvcnRlZFZhbHVlcykge1xuICAgICAgICAgICAgc2hhcmVkU3RyaW5nc1tkaWN0LmdldFNhbml0aXplZFZhbHVlKHZhbHVlKV0gPSAnPHNpPjx0PicgKyB2YWx1ZSArICc8L3Q+PC9zaT4nO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyWydzaGFyZWRTdHJpbmdzLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0U2hhcmVkU3RyaW5nWE1MKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5zdHJpbmdzQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWRWYWx1ZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkU3RyaW5ncy5qb2luKCcnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGFibGVzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgY29sdW1uQ291bnQgPSB3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50O1xuICAgICAgICBjb25zdCBsYXN0Q29sdW1uID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbkNvdW50IC0gMSkgKyB3b3Jrc2hlZXREYXRhLnJvd0NvdW50O1xuICAgICAgICBjb25zdCBhdXRvRmlsdGVyRGltZW5zaW9uID0gJ0ExOicgKyBsYXN0Q29sdW1uO1xuICAgICAgICBjb25zdCB0YWJsZURpbWVuc2lvbiA9IHdvcmtzaGVldERhdGEuaXNFbXB0eVxuICAgICAgICAgICAgPyAnQTE6JyArIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgKHdvcmtzaGVldERhdGEucm93Q291bnQgKyAxKVxuICAgICAgICAgICAgOiBhdXRvRmlsdGVyRGltZW5zaW9uO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGhhc1VzZXJTZXRJbmRleFxuICAgICAgICAgICAgPyB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzXG4gICAgICAgICAgICA6IHdvcmtzaGVldERhdGEub3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5za2lwKVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXggLSBiLnN0YXJ0SW5kZXgpXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucGlubmVkSW5kZXggLSBiLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmhlYWRlcik7XG5cbiAgICAgICAgbGV0IHNvcnRTdHJpbmcgPSAnJztcblxuICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gJzx0YWJsZUNvbHVtbnMgY291bnQ9XCInICsgY29sdW1uQ291bnQgKyAnXCI+JztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICB2YWx1ZXNbaV07XG4gICAgICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzx0YWJsZUNvbHVtbiBpZD1cIicgKyAoaSArIDEpICsgJ1wiIG5hbWU9XCInICsgdmFsdWUgKyAnXCIvPic7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZUNvbHVtbnMgKz0gJzwvdGFibGVDb2x1bW5zPic7XG5cbiAgICAgICAgaWYgKHdvcmtzaGVldERhdGEuc29ydCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZ0V4cHJlc3Npb24gPSB3b3Jrc2hlZXREYXRhLnNvcnQ7XG4gICAgICAgICAgICBjb25zdCBzYyA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbih2YWx1ZXMuaW5kZXhPZihzb3J0aW5nRXhwcmVzc2lvbi5maWVsZE5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IHNvcnRpbmdFeHByZXNzaW9uLmRpciAtIDE7XG4gICAgICAgICAgICBzb3J0U3RyaW5nID0gYDxzb3J0U3RhdGUgcmVmPVwiQTI6JHtsYXN0Q29sdW1ufVwiPjxzb3J0Q29uZGl0aW9uIGRlc2NlbmRpbmc9XCIke2Rpcn1cIiByZWY9XCIke3NjfTE6JHtzY30xNVwiLz48L3NvcnRTdGF0ZT5gO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9sZGVyWyd0YWJsZTEueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRUYWJsZXNYTUwoYXV0b0ZpbHRlckRpbWVuc2lvbiwgdGFibGVEaW1lbnNpb24sIHRhYmxlQ29sdW1ucywgc29ydFN0cmluZykpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3Jrc2hlZXRSZWxzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydzaGVldDEueG1sLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtzaGVldFJlbHMoKSk7XG4gICAgfVxufVxuIl19
625
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZXhjZWwvZXhjZWwtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBMkMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXJMOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDZCxZQUFZLENBQUMsTUFBYztRQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFDVCxZQUFZLENBQUMsTUFBYyxFQUFFLGFBQTRCO1FBQzVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNWLFlBQVksQ0FBQyxNQUFjO1FBQzlCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2xCLFlBQVksQ0FBQyxNQUFjLEVB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LENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFeGNlbEZpbGUgfSBmcm9tICcuL2V4Y2VsLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhjZWxTdHJpbmdzIH0gZnJvbSAnLi9leGNlbC1zdHJpbmdzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuaW1wb3J0IHsgc3RyVG9VOCB9IGZyb20gJ2ZmbGF0ZSc7XG5pbXBvcnQgeyB5aWVsZGluZ0xvb3AgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEV4cG9ydEhlYWRlclR5cGUsIEV4cG9ydFJlY29yZFR5cGUsIElFeHBvcnRSZWNvcmQsIElDb2x1bW5MaXN0LCBJQ29sdW1uSW5mbywgR1JJRF9ST09UX1NVTU1BUlksIEdSSURfUEFSRU5ULCBHUklEX0xFVkVMX0NPTCB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb290UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnLnJlbHMnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFJlbHMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcEZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGZvbGRlclsnYXBwLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0QXBwKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvcmVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ2NvcmUueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRDb3JlKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrYm9va1JlbHNGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCwgd29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSkge1xuICAgICAgICBjb25zdCBoYXNTaGFyZWRTdHJpbmdzID0gIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycztcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwucmVscyddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0V29ya2Jvb2tSZWxzKGhhc1NoYXJlZFN0cmluZ3MpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgVGhlbWVGaWxlIGltcGxlbWVudHMgSUV4Y2VsRmlsZSB7XG4gICAgcHVibGljIHdyaXRlRWxlbWVudChmb2xkZXI6IE9iamVjdCkge1xuICAgICAgICBmb2xkZXJbJ3RoZW1lMS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFRoZW1lKCkpO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIERpbWVuc2lvbnMge1xuICAgIHN0YXJ0Q29vcmRpbmF0ZTogc3RyaW5nXG4gICAgZW5kQ29vcmRpbmF0ZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBDdXJyZW5jeUluZm8ge1xuICAgIHN0eWxlWGY6IG51bWJlclxuICAgIHN5bWJvbDogc3RyaW5nXG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0RmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTl9XSURUSCA9IDguNDM7XG4gICAgcHJpdmF0ZSBtYXhPdXRsaW5lTGV2ZWwgPSAwO1xuICAgIHByaXZhdGUgc2hlZXREYXRhID0gJyc7XG4gICAgcHJpdmF0ZSBkaW1lbnNpb24gPSAnJztcbiAgICBwcml2YXRlIGZyZWV6ZVBhbmUgPSAnJztcbiAgICBwcml2YXRlIHJvd0hlaWdodCA9ICcnO1xuXG4gICAgcHJpdmF0ZSBtZXJnZUNlbGxTdHIgPSAnJztcbiAgICBwcml2YXRlIG1lcmdlQ2VsbHNDb3VudGVyID0gMDtcbiAgICBwcml2YXRlIHJvd0luZGV4ID0gMDtcbiAgICBwcml2YXRlIHBpdm90R3JpZFJvd0hlYWRlcnNNYXAgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBkaW1lbnNpb25NYXA6IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+ID0gbmV3IE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+KCk7XG4gICAgcHJpdmF0ZSBoaWVyYXJjaGljYWxEaW1lbnNpb25NYXA6IE1hcDxhbnksICBNYXA8c3RyaW5nLCBEaW1lbnNpb25zPj4gPSBuZXcgTWFwPGFueSwgIE1hcDxzdHJpbmcsIERpbWVuc2lvbnM+PigpO1xuICAgIHByaXZhdGUgY3VycmVudFN1bW1hcnlPd25lciA9ICcnO1xuICAgIHByaXZhdGUgY3VycmVudEhpZXJhcmNoaWNhbE93bmVyID0gJyc7XG4gICAgcHJpdmF0ZSBmaXJzdENvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgcHJpdmF0ZSBmaXJzdERhdGFSb3cgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHByaXZhdGUgaXNWYWxpZEdyaWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBsYXN0VmFsaWRSb3c6IHN0cmluZztcblxuICAgIHByaXZhdGUgY3VycmVuY3lTdHlsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDdXJyZW5jeUluZm8+KFtcbiAgICAgICAgWydVU0QnLCB7c3R5bGVYZjogNSwgc3ltYm9sOiAnJCd9XSxcbiAgICAgICAgWydHQlAnLCB7c3R5bGVYZjogNiwgc3ltYm9sOiAnwqMnfV0sXG4gICAgICAgIFsnQ05ZJywge3N0eWxlWGY6IDcsIHN5bWJvbDogJ8KlJ31dLFxuICAgICAgICBbJ0VVUicsIHtzdHlsZVhmOiA4LCBzeW1ib2w6ICfigqwnfV0sXG4gICAgICAgIFsnSlBZJywge3N0eWxlWGY6IDksIHN5bWJvbDogJ8KlJ31dLFxuICAgIF0pO1xuXG4gICAgcHVibGljIHdyaXRlRWxlbWVudCgpIHt9XG5cbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVFbGVtZW50QXN5bmMoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGEsIChjb2xzLCByb3dzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGFibGUgPSAoIXdvcmtzaGVldERhdGEuaXNFbXB0eSB8fCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuYWx3YXlzRXhwb3J0SGVhZGVycylcbiAgICAgICAgICAgICAgICAgICAgJiYgd29ya3NoZWV0RGF0YS5vcHRpb25zLmV4cG9ydEFzVGFibGU7XG5cbiAgICAgICAgICAgICAgICBmb2xkZXJbJ3NoZWV0MS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoZWV0WE1MKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiwgdGhpcy5mcmVlemVQYW5lLCBjb2xzLCByb3dzLCBoYXNUYWJsZSwgdGhpcy5tYXhPdXRsaW5lTGV2ZWwsIHdvcmtzaGVldERhdGEuaXNIaWVyYXJjaGljYWwpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlRGF0YUFzeW5jKHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEsIGRvbmU6IChjb2xzOiBzdHJpbmcsIHNoZWV0RGF0YTogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuc2hlZXREYXRhID0gJyc7XG4gICAgICAgIGxldCBjb2xzID0gJyc7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gMDtcblxuICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5pc0VtcHR5ICYmICghd29ya3NoZWV0RGF0YS5vcHRpb25zLmFsd2F5c0V4cG9ydEhlYWRlcnMgfHwgd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8c2hlZXREYXRhLz4nO1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb24gPSAnQTEnO1xuICAgICAgICAgICAgZG9uZSgnJywgdGhpcy5zaGVldERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aUNvbHVtbkhlYWRlcjtcbiAgICAgICAgICAgIGNvbnN0IGhhc011bHRpUm93SGVhZGVyID0gd29ya3NoZWV0RGF0YS5oYXNNdWx0aVJvd0hlYWRlcjtcblxuICAgICAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gb3duZXIuY29sdW1ucy5zb21lKGNvbCA9PiBjb2wuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbCB8fCB3b3Jrc2hlZXREYXRhLmlzVHJlZUdyaWQgfHwgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkO1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBoZWlnaHQgPyBgIGh0PVwiJHtoZWlnaHR9XCIgY3VzdG9tSGVpZ2h0PVwiMVwiYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxzaGVldERhdGE+YDtcblxuICAgICAgICAgICAgbGV0IGhlYWRlcnNGb3JMZXZlbDogSUNvbHVtbkluZm9bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDw9IG93bmVyLm1heFJvd0xldmVsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzRm9yTGV2ZWwgPSAgb3duZXIuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmxldmVsID09PSBpICYmIGMucm93U3BhbiA+IDAgJiYgIWMuc2tpcClcblxuICAgICAgICAgICAgICAgIHRoaXMucHJpbnRIZWFkZXJzKHdvcmtzaGVldERhdGEsIGhlYWRlcnNGb3JMZXZlbCwgaSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucm93SW5kZXggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBvd25lci5tYXhMZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpdm90R3JpZENvbHVtbnMgPSB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHRoaXMucm93SW5kZXgpID8/IFwiXCI7XG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxyb3cgcj1cIiR7dGhpcy5yb3dJbmRleH1cIiR7dGhpcy5yb3dIZWlnaHR9PiR7cGl2b3RHcmlkQ29sdW1uc31gO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYWxsb3dlZENvbHVtbnMgPSBvd25lci5jb2x1bW5zLmZpbHRlcihjID0+IGMuaGVhZGVyVHlwZSAhPT0gRXhwb3J0SGVhZGVyVHlwZS5Sb3dIZWFkZXIgJiYgYy5oZWFkZXJUeXBlICE9PSBFeHBvcnRIZWFkZXJUeXBlLk11bHRpUm93SGVhZGVyKTtcblxuICAgICAgICAgICAgICAgIGhlYWRlcnNGb3JMZXZlbCA9IGhhc011bHRpQ29sdW1uSGVhZGVyID9cbiAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmhlYWRlclR5cGUgIT09IEV4cG9ydEhlYWRlclR5cGUuTXVsdGlDb2x1bW5IZWFkZXIgfHwgYy5sZXZlbCA9PT0gaSkgJiYgYy5jb2x1bW5TcGFuID4gMCAmJiAhYy5za2lwKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRJbmRleCAtIGIuc3RhcnRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCkgOlxuICAgICAgICAgICAgICAgICAgICBoYXNVc2VyU2V0SW5kZXggP1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZENvbHVtbnMuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByaW50SGVhZGVycyh3b3Jrc2hlZXREYXRhLCBoZWFkZXJzRm9yTGV2ZWwsIGksIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9IGA8L3Jvdz5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtdWx0aUNvbHVtbkhlYWRlckxldmVsID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZU11bHRpQ29sdW1uSGVhZGVycyA/IDAgOiBvd25lci5tYXhMZXZlbDtcbiAgICAgICAgICAgIGNvbnN0IGZyZWV6ZUhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZnJlZXplSGVhZGVycyA/IDIgKyBtdWx0aUNvbHVtbkhlYWRlckxldmVsIDogMTtcblxuICAgICAgICAgICAgaWYgKCFpc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcyA/IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxIDogd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCAtIDFcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbiA9ICdBMTonICsgRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyAod29ya3NoZWV0RGF0YS5yb3dDb3VudCk7XG5cbiAgICAgICAgICAgICAgICBjb2xzICs9ICc8Y29scz4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNNdWx0aUNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkaWN0aW9uYXJ5LmNvbHVtbldpZHRoc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgd2lkdGggcHJvdmlkZWQgaW4gdGhlIG9wdGlvbnMgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgd2lkdGhJblR3aXBzID0gd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya3NoZWV0RGF0YS5vcHRpb25zLmNvbHVtbldpZHRoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KCgod2lkdGggLyA5NikgKiAxNC40KSwgV29ya3NoZWV0RmlsZS5NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEod2lkdGhJblR3aXBzID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aEluVHdpcHMgPSBXb3Jrc2hlZXRGaWxlLk1JTl9XSURUSDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29scyArPSBgPGNvbCBtaW49XCIkeyhqICsgMSl9XCIgbWF4PVwiJHsoaiArIDEpfVwiIHdpZHRoPVwiJHt3aWR0aEluVHdpcHN9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xzICs9IGA8Y29sIG1pbj1cIjFcIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnR9XCIgd2lkdGg9XCIxNVwiIGN1c3RvbVdpZHRoPVwiMVwiLz5gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uID0gd29ya3NoZWV0RGF0YS5pbmRleE9mTGFzdFBpbm5lZENvbHVtbjtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm96ZW5Db2x1bW5Db3VudCA9IGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICsgMTtcbiAgICAgICAgICAgICAgICBsZXQgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGZyb3plbkNvbHVtbkNvdW50KSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4T2ZMYXN0UGlubmVkQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgaW5kZXhPZkxhc3RQaW5uZWRDb2x1bW4gIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICF3b3Jrc2hlZXREYXRhLm9wdGlvbnMuaWdub3JlUGlubmluZyAmJlxuICAgICAgICAgICAgICAgICAgICAhd29ya3NoZWV0RGF0YS5vcHRpb25zLmlnbm9yZUNvbHVtbnNPcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyZWV6ZVBhbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYDxwYW5lIHhTcGxpdD1cIiR7ZnJvemVuQ29sdW1uQ291bnR9XCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmtzaGVldERhdGEub3B0aW9ucy5mcmVlemVIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q2VsbCA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbigwKSArIGZyZWV6ZUhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJlZXplUGFuZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBgPHBhbmUgeFNwbGl0PVwiMFwiIHlTcGxpdD1cIiR7ZnJlZXplSGVhZGVycyAtIDF9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BMZWZ0Q2VsbD1cIiR7Zmlyc3RDZWxsfVwiIGFjdGl2ZVBhbmU9XCJ0b3BSaWdodFwiIHN0YXRlPVwiZnJvemVuXCIvPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA/IHdvcmtzaGVldERhdGEub3B0aW9ucy5jb2x1bW5XaWR0aCA6IDIwO1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2xzPjxjb2wgbWluPVwiMVwiIG1heD1cIiR7d29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudH1cIiB3aWR0aD1cIiR7Y29sdW1uV2lkdGh9XCIgY3VzdG9tV2lkdGg9XCIxXCIvPmA7XG5cbiAgICAgICAgICAgICAgICBpZiAod29ya3NoZWV0RGF0YS5vcHRpb25zLmZyZWV6ZUhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDZWxsID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKDApICsgZnJlZXplSGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmVlemVQYW5lID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGA8cGFuZSB4U3BsaXQ9XCIwXCIgeVNwbGl0PVwiJHtmcmVlemVIZWFkZXJzIC0gMX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRvcExlZnRDZWxsPVwiJHtmaXJzdENlbGx9XCIgYWN0aXZlUGFuZT1cInRvcFJpZ2h0XCIgc3RhdGU9XCJmcm96ZW5cIi8+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgICAgIGNvbHMgKz0gYDxjb2wgbWluPVwiJHt3b3Jrc2hlZXREYXRhLmNvbHVtbkNvdW50ICsgMn1cIiBtYXg9XCIke3dvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAyfVwiIGhpZGRlbj1cIjFcIi8+YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29scyArPSAnPC9jb2xzPic7XG5cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YSwgKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSByb3dzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXREYXRhICs9ICc8L3NoZWV0RGF0YT4nO1xuXG4gICAgICAgICAgICAgICAgaWYgKChoYXNNdWx0aUNvbHVtbkhlYWRlciB8fCBoYXNNdWx0aVJvd0hlYWRlcikgJiYgdGhpcy5tZXJnZUNlbGxzQ291bnRlciA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVldERhdGEgKz0gYDxtZXJnZUNlbGxzIGNvdW50PVwiJHt0aGlzLm1lcmdlQ2VsbHNDb3VudGVyfVwiPiR7dGhpcy5tZXJnZUNlbGxTdHJ9PC9tZXJnZUNlbGxzPmA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShjb2xzLCB0aGlzLnNoZWV0RGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc0RhdGFSZWNvcmRzQXN5bmMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgZG9uZTogKHJvd3M6IHN0cmluZykgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCByb3dEYXRhQXJyID0gW107XG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICB3b3Jrc2hlZXREYXRhLm9wdGlvbnMucm93SGVpZ2h0O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IGhlaWdodCA/ICcgaHQ9XCInICsgaGVpZ2h0ICsgJ1wiIGN1c3RvbUhlaWdodD1cIjFcIicgOiAnJztcblxuICAgICAgICBjb25zdCBpc0hpZXJhcmNoaWNhbEdyaWQgPSB3b3Jrc2hlZXREYXRhLmlzSGllcmFyY2hpY2FsO1xuICAgICAgICBjb25zdCBoYXNVc2VyU2V0SW5kZXggPSB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnMuc29tZShjID0+IGMuZXhwb3J0SW5kZXggIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgbGV0IHJlY29yZEhlYWRlcnMgPSBbXTtcblxuICAgICAgICB5aWVsZGluZ0xvb3Aod29ya3NoZWV0RGF0YS5yb3dDb3VudCAtIHdvcmtzaGVldERhdGEubXVsdGlDb2x1bW5IZWFkZXJSb3dzIC0gMSwgMTAwMCxcbiAgICAgICAgICAgIChpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF3b3Jrc2hlZXREYXRhLmlzRW1wdHkpe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VzZXJTZXRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZEhlYWRlcnMgPSB3b3Jrc2hlZXREYXRhLnJvb3RLZXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRIZWFkZXJzID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmhlYWRlclR5cGUgPT09IEV4cG9ydEhlYWRlclR5cGUuQ29sdW1uSGVhZGVyICYmICFjLnNraXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0SW5kZXgtYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5waW5uZWRJbmRleC1iLnBpbm5lZEluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSB3b3Jrc2hlZXREYXRhLmRhdGFbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IZWFkZXJSZWNvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRPd25lciA9IHdvcmtzaGVldERhdGEub3duZXJzLmdldChyZWNvcmQub3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc011bHRpQ29sdW1uSGVhZGVycyA9IHJlY29yZE93bmVyLmNvbHVtbnMuc29tZShjID0+ICFjLnNraXAgJiYgYy5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNdWx0aUNvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oR3JpZFByaW50TXVsdGlDb2xIZWFkZXJzKHdvcmtzaGVldERhdGEsIHJvd0RhdGFBcnIsIHJlY29yZCwgcmVjb3JkT3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSGVhZGVycyA9IE9iamVjdC5rZXlzKHdvcmtzaGVldERhdGEuZGF0YVtpXS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFBcnIucHVzaCh0aGlzLnByb2Nlc3NSb3cod29ya3NoZWV0RGF0YSwgaSwgcmVjb3JkSGVhZGVycywgaXNIaWVyYXJjaGljYWxHcmlkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKHJvd0RhdGFBcnIuam9pbignJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhHcmlkUHJpbnRNdWx0aUNvbEhlYWRlcnMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgcm93RGF0YUFycjogYW55W10sIHJlY29yZDogSUV4cG9ydFJlY29yZCxcbiAgICAgICAgb3duZXI6IElDb2x1bW5MaXN0KSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgb3duZXIubWF4TGV2ZWw7IGorKykge1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkTGV2ZWwgPSByZWNvcmQubGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBvdXRsaW5lTGV2ZWwgPSByZWNvcmRMZXZlbCA+IDAgPyBgIG91dGxpbmVMZXZlbD1cIiR7cmVjb3JkTGV2ZWx9XCJgIDogJyc7XG4gICAgICAgICAgICB0aGlzLm1heE91dGxpbmVMZXZlbCA9IHRoaXMubWF4T3V0bGluZUxldmVsIDwgcmVjb3JkTGV2ZWwgPyByZWNvcmRMZXZlbCA6IHRoaXMubWF4T3V0bGluZUxldmVsO1xuICAgICAgICAgICAgY29uc3Qgc0hpZGRlbiA9IHJlY29yZC5oaWRkZW4gPyBgIGhpZGRlbj1cIjFcImAgOiAnJztcblxuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCsrO1xuICAgICAgICAgICAgbGV0IHJvdyA9IGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fSR7b3V0bGluZUxldmVsfSR7c0hpZGRlbn0+YDtcblxuICAgICAgICAgICAgY29uc3QgaGVhZGVyc0ZvckxldmVsID0gb3duZXIuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAoYy5sZXZlbCA8IGogJiZcbiAgICAgICAgICAgICAgICAgICAgYy5oZWFkZXJUeXBlICE9PSBFeHBvcnRIZWFkZXJUeXBlLk11bHRpQ29sdW1uSGVhZGVyIHx8IGMubGV2ZWwgPT09IGopICYmIGMuY29sdW1uU3BhbiA+IDAgJiYgIWMuc2tpcClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleCk7XG5cbiAgICAgICAgICAgIGxldCBzdGFydFZhbHVlID0gMCArIHJlY29yZC5sZXZlbDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29sIG9mIGhlYWRlcnNGb3JMZXZlbCkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmxldmVsID09PSBqKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5Db29yZGluYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlKSArIHRoaXMucm93SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB3b3Jrc2hlZXREYXRhLmRhdGFEaWN0aW9uYXJ5LnNhdmVWYWx1ZShjdXJyZW50Q29sLmhlYWRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyArPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiBzPVwiM1wiIHQ9XCJzXCI+PHY+JHtjb2x1bW5WYWx1ZX08L3Y+PC9jPmA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGogIT09IG93bmVyLm1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbHNDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgIDxtZXJnZUNlbGwgcmVmPVwiJHtjb2x1bW5Db29yZGluYXRlfTpgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvb3JkaW5hdGUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oc3RhcnRWYWx1ZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5yb3dJbmRleCArIG93bmVyLm1heExldmVsIC0gY3VycmVudENvbC5sZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgY3VycmVudENvbC5jb2x1bW5TcGFuOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihzdGFydFZhbHVlICsgaykgKyB0aGlzLnJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgKz0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIgcz1cIjNcIiAvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlQ2VsbFN0ciArPSBgJHtjb2x1bW5Db29yZGluYXRlfVwiIC8+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXJ0VmFsdWUgKz0gY3VycmVudENvbC5jb2x1bW5TcGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93ICs9IGA8L3Jvdz5gO1xuICAgICAgICAgICAgcm93RGF0YUFyci5wdXNoKHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NSb3cod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgaTogbnVtYmVyLCBoZWFkZXJzRm9yTGV2ZWw6IGFueVtdLCBpc0hpZXJhcmNoaWNhbEdyaWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gd29ya3NoZWV0RGF0YS5kYXRhW2ldO1xuXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBuZXcgQXJyYXkod29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudCArIDIpO1xuXG4gICAgICAgIGNvbnN0IHJvd0xldmVsID0gcmVjb3JkLmxldmVsO1xuICAgICAgICBjb25zdCBvdXRsaW5lTGV2ZWwgPSByb3dMZXZlbCA+IDAgPyBgIG91dGxpbmVMZXZlbD1cIiR7cm93TGV2ZWx9XCJgIDogJyc7XG4gICAgICAgIHRoaXMubWF4T3V0bGluZUxldmVsID0gdGhpcy5tYXhPdXRsaW5lTGV2ZWwgPCByb3dMZXZlbCA/IHJvd0xldmVsIDogdGhpcy5tYXhPdXRsaW5lTGV2ZWw7XG5cbiAgICAgICAgY29uc3Qgc0hpZGRlbiA9IHJlY29yZC5oaWRkZW4gPyBgIGhpZGRlbj1cIjFcImAgOiAnJztcblxuICAgICAgICB0aGlzLnJvd0luZGV4Kys7XG4gICAgICAgIGNvbnN0IHBpdm90R3JpZENvbHVtbnMgPSB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHRoaXMucm93SW5kZXgpID8/IFwiXCI7XG5cbiAgICAgICAgcm93RGF0YVswXSA9IGA8cm93IHI9XCIke3RoaXMucm93SW5kZXh9XCIke3RoaXMucm93SGVpZ2h0fSR7b3V0bGluZUxldmVsfSR7c0hpZGRlbn0+JHtwaXZvdEdyaWRDb2x1bW5zfWA7XG4gICAgICAgIGNvbnN0IGtleXMgPSB3b3Jrc2hlZXREYXRhLmlzU3BlY2lhbERhdGEgPyBbcmVjb3JkLmRhdGFdIDogaGVhZGVyc0ZvckxldmVsO1xuICAgICAgICBjb25zdCBpc0RhdGFSZWNvcmQgPSByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5EYXRhUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5Hcm91cGVkUmVjb3JkXG4gICAgICAgICAgICB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5UcmVlR3JpZFJlY29yZDtcblxuICAgICAgICBjb25zdCBpc1ZhbGlkUmVjb3JkVHlwZSA9IGlzRGF0YVJlY29yZCB8fCByZWNvcmQudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5TdW1tYXJ5UmVjb3JkO1xuXG4gICAgICAgIGlmIChpc1ZhbGlkUmVjb3JkVHlwZSAmJiB3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcykge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlU3VtbWFyeURpbWVuc2lvbnMocmVjb3JkLCBpc0RhdGFSZWNvcmQsIHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZClcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgY29sID0gaiArIChpc0hpZXJhcmNoaWNhbEdyaWQgPyByb3dMZXZlbCA6IHdvcmtzaGVldERhdGEuaXNQaXZvdEdyaWQgPyB3b3Jrc2hlZXREYXRhLm93bmVyLm1heFJvd0xldmVsIDogMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhLCBpLCBjb2wsIGtleXNbal0pO1xuXG4gICAgICAgICAgICByb3dEYXRhW2ogKyAxXSA9IGNlbGxEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93RGF0YVtrZXlzLmxlbmd0aCArIDFdID0gJzwvcm93Pic7XG5cbiAgICAgICAgcmV0dXJuIHJvd0RhdGEuam9pbignJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YSh3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhLCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGxldCBjb2x1bW5OYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbHVtbikgKyAodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IGZ1bGxSb3cgPSB3b3Jrc2hlZXREYXRhLmRhdGFbcm93XTtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSZWNvcmQgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuSGVhZGVyUmVjb3JkO1xuICAgICAgICBjb25zdCBpc1N1bW1hcnlSZWNvcmQgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuU3VtbWFyeVJlY29yZDtcbiAgICAgICAgY29uc3QgaXNWYWxpZFJlY29yZFR5cGUgPSBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuR3JvdXBlZFJlY29yZFxuICAgICAgICAgICAgfHwgZnVsbFJvdy50eXBlID09PSBFeHBvcnRSZWNvcmRUeXBlLkRhdGFSZWNvcmRcbiAgICAgICAgICAgIHx8IGZ1bGxSb3cudHlwZSA9PT0gRXhwb3J0UmVjb3JkVHlwZS5IaWVyYXJjaGljYWxHcmlkUmVjb3JkXG4gICAgICAgICAgICB8fCBmdWxsUm93LnR5cGUgPT09IEV4cG9ydFJlY29yZFR5cGUuVHJlZUdyaWRSZWNvcmQ7XG5cbiAgICAgICAgdGhpcy5maXJzdERhdGFSb3cgPSB0aGlzLmZpcnN0RGF0YVJvdyA+IHRoaXMucm93SW5kZXggPyB0aGlzLnJvd0luZGV4IDogdGhpcy5maXJzdERhdGFSb3c7XG5cbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gd29ya3NoZWV0RGF0YS5pc1NwZWNpYWxEYXRhID9cbiAgICAgICAgICAgIGZ1bGxSb3cuZGF0YSA6XG4gICAgICAgICAgICBmdWxsUm93LmRhdGFba2V5XTtcblxuICAgICAgICBpZiAoY2VsbFZhbHVlID09PSBHUklEX0xFVkVMX0NPTCB8fCBrZXkgPT09IEdSSURfTEVWRUxfQ09MKSB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxKSArICh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLmhhc1N1bW1hcmllcyAmJiAoaXNWYWxpZFJlY29yZFR5cGUgfHwgKHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZCAmJiBpc1N1bW1hcnlSZWNvcmQpKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdW1tYXJ5Q29vcmRpbmF0ZXMoY29sdW1uTmFtZSwga2V5LCBmdWxsUm93LmhpZXJhcmNoaWNhbE93bmVyLCB3b3Jrc2hlZXREYXRhLmlzR3JvdXBlZEdyaWQgJiYgaXNTdW1tYXJ5UmVjb3JkKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bGxSb3cuc3VtbWFyeUtleSAmJiBmdWxsUm93LnN1bW1hcnlLZXkgPT09IEdSSURfUk9PVF9TVU1NQVJZICYmIGtleSAhPT0gR1JJRF9MRVZFTF9DT0wgJiYgd29ya3NoZWV0RGF0YS5pc0dyb3VwZWRHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKGNvbHVtbiwga2V5KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RDb2x1bW4gPiBjb2x1bW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJvb3RTdW1tYXJ5U3RhcnRDb29yZGluYXRlKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxLCBHUklEX0xFVkVMX0NPTCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldENvbEFyciA9IEFycmF5LmZyb20od29ya3NoZWV0RGF0YS5vd25lcnMudmFsdWVzKCkpLm1hcChhcnIgPT4gYXJyLmNvbHVtbnMpLmZpbmQocHJvZHVjdCA9PiBwcm9kdWN0LnNvbWUoaXRlbSA9PiBpdGVtLmZpZWxkID09PSBrZXkpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gdGFyZ2V0Q29sQXJyID8gdGFyZ2V0Q29sQXJyLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0ga2V5KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoKGNlbGxWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNlbGxWYWx1ZSA9PT0gbnVsbCkgJiYgIXdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIi8+YDtcbiAgICAgICAgfSBlbHNlIGlmICgod29ya3NoZWV0RGF0YS5oYXNTdW1tYXJpZXMgJiYgKGlzVmFsaWRSZWNvcmRUeXBlIHx8IGlzSGVhZGVyUmVjb3JkKSkgfHwgIXdvcmtzaGVldERhdGEuaGFzU3VtbWFyaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzYXZlZFZhbHVlID0gZGljdGlvbmFyeS5zYXZlVmFsdWUoY2VsbFZhbHVlLCBpc0hlYWRlclJlY29yZCk7XG4gICAgICAgICAgICBjb25zdCBpc1NhdmVkQXNTdHJpbmcgPSBzYXZlZFZhbHVlICE9PSAtMTtcblxuICAgICAgICAgICAgY29uc3QgaXNTYXZlZEFzRGF0ZSA9ICFpc1NhdmVkQXNTdHJpbmcgJiYgY2VsbFZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gaXNTYXZlZEFzU3RyaW5nID8gc2F2ZWRWYWx1ZSA6IGNlbGxWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlzU2F2ZWRBc0RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lWm9uZU9mZnNldCA9IHZhbHVlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc29TdHJpbmcgPSAobmV3IERhdGUodmFsdWUgLSB0aW1lWm9uZU9mZnNldCkpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpc29TdHJpbmcuc3Vic3RyaW5nKDAsIGlzb1N0cmluZy5pbmRleE9mKCcuJykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gaXNTYXZlZEFzU3RyaW5nID8gYCB0PVwic1wiYCA6IGlzU2F2ZWRBc0RhdGUgPyBgIHQ9XCJkXCJgIDogJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzVGltZSA9IHRhcmdldENvbD8uZGF0YVR5cGUgPT09ICd0aW1lJztcbiAgICAgICAgICAgIGNvbnN0IGlzRGF0ZVRpbWUgPSB0YXJnZXRDb2w/LmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnO1xuICAgICAgICAgICAgY29uc3QgaXNQZXJjZW50YWdlID0gdGFyZ2V0Q29sPy5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnO1xuICAgICAgICAgICAgY29uc3QgaXNDb2x1bW5DdXJyZW5jeVR5cGUgPSB0YXJnZXRDb2w/LmRhdGFUeXBlID09PSAnY3VycmVuY3knO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBpc1BlcmNlbnRhZ2UgPyBgIHM9XCIxMlwiYCA6IGlzRGF0ZVRpbWUgPyBgIHM9XCIxMVwiYCA6IGlzVGltZSA/IGAgcz1cIjEwXCJgIDogaXNIZWFkZXJSZWNvcmQgPyBgIHM9XCIzXCJgIDogaXNTYXZlZEFzU3RyaW5nID8gJycgOiBpc1NhdmVkQXNEYXRlID8gYCBzPVwiMlwiYCA6IGlzQ29sdW1uQ3VycmVuY3lUeXBlID8gYCBzPVwiJHt0aGlzLmN1cnJlbmN5U3R5bGVNYXAuZ2V0KHRhcmdldENvbC5jdXJyZW5jeUNvZGUpPy5zdHlsZVhmIHx8IDB9XCJgIDogYCBzPVwiMVwiYDtcblxuICAgICAgICAgICAgcmV0dXJuIGA8YyByPVwiJHtjb2x1bW5OYW1lfVwiJHt0eXBlfSR7Zm9ybWF0fT48dj4ke3ZhbHVlfTwvdj48L2M+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzdW1tYXJ5RnVuYyA9IGBcIiR7Y2VsbFZhbHVlID8/IFwiXCJ9XCJgO1xuXG4gICAgICAgICAgICBpZiAoaXNTdW1tYXJ5UmVjb3JkICYmIGNlbGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpbWVuc2lvbk1hcEtleSA9IHRoaXMuaXNWYWxpZEdyaWQgPyBmdWxsUm93LmhpZXJhcmNoaWNhbE93bmVyID8/IEdSSURfUEFSRU5UIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbCA9IHdvcmtzaGVldERhdGEuaXNHcm91cGVkR3JpZCA/IHdvcmtzaGVldERhdGEubWF4TGV2ZWwgOiBmdWxsUm93LmxldmVsO1xuXG4gICAgICAgICAgICAgICAgc3VtbWFyeUZ1bmMgPSB0aGlzLmdldFN1bW1hcnlGdW5jdGlvbihjZWxsVmFsdWUubGFiZWwsIGtleSwgZGltZW5zaW9uTWFwS2V5LCBsZXZlbCwgdGFyZ2V0Q29sKTtcblxuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeUZ1bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFN0ciA9IGAke2NlbGxWYWx1ZS5sYWJlbH06ICR7Y2VsbFZhbHVlLnZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhdmVkVmFsdWUgPSBkaWN0aW9uYXJ5LnNhdmVWYWx1ZShjZWxsU3RyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGMgcj1cIiR7Y29sdW1uTmFtZX1cIiB0PVwic1wiIHM9XCIxXCI+PHY+JHtzYXZlZFZhbHVlfTwvdj48L2M+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCI+PGYgdD1cImFycmF5XCIgcmVmPVwiJHtjb2x1bW5OYW1lfVwiPiR7c3VtbWFyeUZ1bmN9PC9mPjwvYz5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYDxjIHI9XCIke2NvbHVtbk5hbWV9XCIgcz1cIjFcIj48Zj4ke3N1bW1hcnlGdW5jfTwvZj48L2M+YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzb2x2ZVN1bW1hcnlEaW1lbnNpb25zKHJlY29yZDogSUV4cG9ydFJlY29yZCwgaXNEYXRhUmVjb3JkOiBib29sZWFuLCBpc0dyb3VwZWRHcmlkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRHcmlkICYmXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciAhPT0gJycgJiZcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSByZWNvcmQub3duZXIgJiZcbiAgICAgICAgICAgICF0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5nZXQodGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNhbERpbWVuc2lvbk1hcC5zZXQodGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIsIG5ldyBNYXAodGhpcy5kaW1lbnNpb25NYXApKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGF0YVJlY29yZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFN1bW1hcnlPd25lciAhPT0gcmVjb3JkLnN1bW1hcnlLZXkgfHwgdGhpcy5jdXJyZW50SGllcmFyY2hpY2FsT3duZXIgIT09IHJlY29yZC5oaWVyYXJjaGljYWxPd25lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9uTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN1bW1hcnlPd25lciA9IHJlY29yZC5zdW1tYXJ5S2V5O1xuXG4gICAgICAgICAgICAvLyBGb3IgZ3JvdXBlZCBncmlkIHdlIG5lZWQgdG8gcmVzZXQgdGhlIHBhcmVudCBtYXBcbiAgICAgICAgICAgIC8vIHNvIHdlIGNhbiBjaGFuZ2UgdGhlIHN0YXJ0Q29vcmRpbmF0ZSBmb3IgZWFjaCByZWNvcmRcbiAgICAgICAgICAgIGlmIChpc0dyb3VwZWRHcmlkICYmIHRoaXMuY3VycmVudEhpZXJhcmNoaWNhbE93bmVyICE9PSAnJyAmJiByZWNvcmQuaGllcmFyY2hpY2FsT3duZXIgPT09IEdSSURfUEFSRU5UKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZGVsZXRlKEdSSURfUEFSRU5UKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRIaWVyYXJjaGljYWxPd25lciA9IHJlY29yZC5oaWVyYXJjaGljYWxPd25lcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3VtbWFyeUNvb3JkaW5hdGVzKGNvbHVtbk5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGhpZXJhcmNoaWNhbE93bmVyOiBzdHJpbmcsIHVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGltZW5zaW9uTWFwID0gdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KGhpZXJhcmNoaWNhbE93bmVyKSA/PyB0aGlzLmRpbWVuc2lvbk1hcDtcblxuICAgICAgICBpZiAoIXRhcmdldERpbWVuc2lvbk1hcC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbERpbWVuc2lvbnM6IERpbWVuc2lvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnRDb29yZGluYXRlOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIGVuZENvb3JkaW5hdGU6IGNvbHVtbk5hbWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRhcmdldERpbWVuc2lvbk1hcC5zZXQoa2V5LCBpbml0aWFsRGltZW5zaW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1c2VMYXN0VmFsaWRFbmRDb29yZGluYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmRDb29yZGluYXRlcyh0YXJnZXREaW1lbnNpb25NYXAsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkuZW5kQ29vcmRpbmF0ZSA9IGNvbHVtbk5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0VmFsaWRSb3cgPSB0YXJnZXREaW1lbnNpb25NYXAuZ2V0KGtleSkuZW5kQ29vcmRpbmF0ZS5tYXRjaCgvW2Etel0rfFteYS16XSsvZ2kpWzFdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkR3JpZCAmJiAhdXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSAmJiBoaWVyYXJjaGljYWxPd25lciAhPT0gR1JJRF9QQVJFTlQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChHUklEX1BBUkVOVCk7XG4gICAgICAgICAgICB0aGlzLnNldEVuZENvb3JkaW5hdGVzKHBhcmVudE1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEVuZENvb3JkaW5hdGVzKG1hcDogTWFwPHN0cmluZywgRGltZW5zaW9ucz4sIHVzZUxhc3RWYWxpZEVuZENvb3JkaW5hdGUgPSBmYWxzZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgbWFwLnZhbHVlcygpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xOYW1lID0gYS5lbmRDb29yZGluYXRlLm1hdGNoKC9bYS16XSt8W15hLXpdKy9naSlbMF07XG4gICAgICAgICAgICBhLmVuZENvb3JkaW5hdGUgPSBgJHtjb2xOYW1lfSR7dXNlTGFzdFZhbGlkRW5kQ29vcmRpbmF0ZSA/IHRoaXMubGFzdFZhbGlkUm93IDogdGhpcy5yb3dJbmRleH1gO1xuICAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VtbWFyeUZ1bmN0aW9uKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcsIGRpbWVuc2lvbk1hcEtleTogYW55LCByZWNvcmRMZXZlbDogbnVtYmVyLCBjb2w6IElDb2x1bW5JbmZvKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uTWFwID0gZGltZW5zaW9uTWFwS2V5ID8gdGhpcy5oaWVyYXJjaGljYWxEaW1lbnNpb25NYXAuZ2V0KGRpbWVuc2lvbk1hcEtleSkgOiB0aGlzLmRpbWVuc2lvbk1hcDtcbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IGRpbWVuc2lvbk1hcC5nZXQoa2V5KTtcbiAgICAgICAgY29uc3QgbGV2ZWxEaW1lbnNpb25zID0gZGltZW5zaW9uTWFwLmdldChHUklEX0xFVkVMX0NPTCk7XG5cbiAgICAgICAgbGV0IGZ1bmMgPSAnJztcbiAgICAgICAgbGV0IGZ1bmNUeXBlID0gJyc7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgY29uc3QgY3VycmVuY3lJbmZvID0gdGhpcy5jdXJyZW5jeVN0eWxlTWFwLmdldChjb2wuY3VycmVuY3lDb2RlKTtcblxuICAgICAgICBzd2l0Y2godHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiY291bnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFwiQ291bnQ6IFwiJmFtcDtfeGxmbi5DT1VOVElGKCR7bGV2ZWxEaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtsZXZlbERpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0sICR7cmVjb3JkTGV2ZWx9KWBcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLk1JTihfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIk1pbjogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJtYXhcIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLk1BWChfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIk1heDogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gIGBfeGxmbi5TVU1JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIlN1bTogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgICBmdW5jID0gYF94bGZuLkFWRVJBR0VJRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9LCAke3JlY29yZExldmVsfSwgJHtkaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtkaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9KWBcbiAgICAgICAgICAgICAgICBmdW5jVHlwZSA9IGBcIkF2ZzogXCImYW1wO2A7XG5cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jVHlwZSArIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgJiYgY3VycmVuY3lJbmZvXG4gICAgICAgICAgICAgICAgICAgID8gYF94bGZuLlRFWFQoJHtmdW5jfSwgXCIke2N1cnJlbmN5SW5mby5zeW1ib2x9IywjIzAuMDBcIilgXG4gICAgICAgICAgICAgICAgICAgIDogYCR7ZnVuY31gKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIGNhc2UgXCJlYXJsaWVzdFwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBkYXRlIGZvcm1hdCBmcm9tIGxvY2FsZVxuICAgICAgICAgICAgICAgIHJldHVybiBgXCJFYXJsaWVzdDogXCImYW1wO194bGZuLlRFWFQoX3hsZm4uTUlOKF94bGZuLklGKCR7bGV2ZWxEaW1lbnNpb25zLnN0YXJ0Q29vcmRpbmF0ZX06JHtsZXZlbERpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX09JHtyZWNvcmRMZXZlbH0sICR7ZGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7ZGltZW5zaW9ucy5lbmRDb29yZGluYXRlfSkpLCBcIm0vZC95eXl5XCIpYFxuICAgICAgICAgICAgY2FzZSBcImxhdGVzdFwiOlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IGdldCBkYXRlIGZvcm1hdCBmcm9tIGxvY2FsZVxuICAgICAgICAgICAgICAgIHJldHVybiBgXCJMYXRlc3Q6IFwiJmFtcDtfeGxmbi5URVhUKF94bGZuLk1BWChfeGxmbi5JRigke2xldmVsRGltZW5zaW9ucy5zdGFydENvb3JkaW5hdGV9OiR7bGV2ZWxEaW1lbnNpb25zLmVuZENvb3JkaW5hdGV9PSR7cmVjb3JkTGV2ZWx9LCAke2RpbWVuc2lvbnMuc3RhcnRDb29yZGluYXRlfToke2RpbWVuc2lvbnMuZW5kQ29vcmRpbmF0ZX0pKSwgXCJtL2QveXl5eVwiKWBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Um9vdFN1bW1hcnlTdGFydENvb3JkaW5hdGUoY29sdW1uOiBudW1iZXIsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0YVJlY29yZENvbE5hbWUgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uKSArICh0aGlzLmZpcnN0RGF0YVJvdyk7XG4gICAgICAgIGNvbnN0IHRhcmdldE1hcCA9IHRoaXMuaGllcmFyY2hpY2FsRGltZW5zaW9uTWFwLmdldChHUklEX1BBUkVOVCk7XG5cbiAgICAgICAgaWYgKHRhcmdldE1hcC5nZXQoa2V5KS5zdGFydENvb3JkaW5hdGUgIT09IGZpcnN0RGF0YVJlY29yZENvbE5hbWUpIHtcbiAgICAgICAgICAgIHRhcmdldE1hcC5nZXQoa2V5KS5zdGFydENvb3JkaW5hdGUgPSBmaXJzdERhdGFSZWNvcmRDb2xOYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludEhlYWRlcnMod29ya3NoZWV0RGF0YTogV29ya3NoZWV0RGF0YSwgaGVhZGVyc0ZvckxldmVsOiBJQ29sdW1uSW5mb1tdLCBpOiBudW1iZXIsIGlzVmVydGljYWw6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHN0YXJ0VmFsdWUgPSAwO1xuICAgICAgICBsZXQgc3RyID0gJyc7XG5cbiAgICAgICAgY29uc3QgaXNIaWVyYXJjaGljYWxHcmlkID0gd29ya3NoZWV0RGF0YS5pc0hpZXJhcmNoaWNhbDtcbiAgICAgICAgbGV0IHJvd1N0eWxlID0gaXNIaWVyYXJjaGljYWxHcmlkID8gJyBzPVwiM1wiJyA6ICcnO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gd29ya3NoZWV0RGF0YS5kYXRhRGljdGlvbmFyeTtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB3b3Jrc2hlZXREYXRhLm93bmVyO1xuICAgICAgICBjb25zdCBtYXhMZXZlbCA9IGlzVmVydGljYWxcbiAgICAgICAgICAgID8gb3duZXIubWF4Um93TGV2ZWxcbiAgICAgICAgICAgIDogb3duZXIubWF4TGV2ZWw7XG5cbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Q29sIG9mIGhlYWRlcnNGb3JMZXZlbCkge1xuICAgICAgICAgICAgY29uc3Qgc3Bhbkxlbmd0aCA9IGlzVmVydGljYWwgPyBjdXJyZW50Q29sLnJvd1NwYW4gOiBjdXJyZW50Q29sLmNvbHVtblNwYW47XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sLmxldmVsID09PSBpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkNvb3JkaW5hdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucm93SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgOiBzdGFydFZhbHVlICsgKG93bmVyLm1heFJvd0xldmVsID8/IDApXG5cbiAgICAgICAgICAgICAgICBjb25zdCByb3dDb29yZGluYXRlID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICA/IHN0YXJ0VmFsdWUgKyBvd25lci5tYXhMZXZlbCArIDJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJvd0luZGV4XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGRpY3Rpb25hcnkuc2F2ZVZhbHVlKGN1cnJlbnRDb2wuaGVhZGVyLCB0cnVlLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gKGN1cnJlbnRDb2wuZmllbGQgPT09IEdSSURfTEVWRUxfQ09MXG4gICAgICAgICAgICAgICAgICAgID8gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKHdvcmtzaGVldERhdGEuY29sdW1uQ291bnQgKyAxKVxuICAgICAgICAgICAgICAgICAgICA6IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW4pKSArIHJvd0Nvb3JkaW5hdGU7XG5cbiAgICAgICAgICAgICAgICByb3dTdHlsZSA9IGlzVmVydGljYWwgJiYgY3VycmVudENvbC5yb3dTcGFuID4gMSA/ICcgcz1cIjRcIicgOiByb3dTdHlsZTtcbiAgICAgICAgICAgICAgICBzdHIgPSBgPGMgcj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX1cIiR7cm93U3R5bGV9IHQ9XCJzXCI+PHY+JHtjb2x1bW5WYWx1ZX08L3Y+PC9jPmA7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLmhhcyhyb3dDb29yZGluYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCB0aGlzLnBpdm90R3JpZFJvd0hlYWRlcnNNYXAuZ2V0KHJvd0Nvb3JkaW5hdGUpICsgc3RyKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3dDb29yZGluYXRlLCBzdHIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0RGF0YSArPSBzdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IG1heExldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsc0NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNlbGxTdHIgKz0gYCA8bWVyZ2VDZWxsIHJlZj1cIiR7Y29sdW1uQ29vcmRpbmF0ZX06YDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudENvbC5oZWFkZXJUeXBlID09PSBFeHBvcnRIZWFkZXJUeXBlLkNvbHVtbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gaXNWZXJ0aWNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4TGV2ZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXJ0VmFsdWUgKyAob3duZXIubWF4Um93TGV2ZWwgPz8gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJvd0Nvb3JkaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG93bmVyLm1heExldmVsICsgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29vcmRpbmF0ZSA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2wpICsgcm93O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDE7IGsgPCBzcGFuTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uICsgaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IGlzVmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dDb29yZGluYXRlICsga1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm93SW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db29yZGluYXRlID0gRXhjZWxTdHJpbmdzLmdldEV4Y2VsQ29sdW1uKGNvbCkgKyByb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gYDxjIHI9XCIke2NvbHVtbkNvb3JkaW5hdGV9XCIke3Jvd1N0eWxlfSAvPmA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5waXZvdEdyaWRSb3dIZWFkZXJzTWFwLnNldChyb3csIHN0cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnNoZWV0RGF0YSArPSBzdHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VDZWxsU3RyICs9IGAke2NvbHVtbkNvb3JkaW5hdGV9XCIgLz5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRWYWx1ZSArPSBzcGFuTGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0eWxlRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QpIHtcbiAgICAgICAgZm9sZGVyWydzdHlsZXMueG1sJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRTdHlsZXMoKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtib29rRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgZm9sZGVyWyd3b3JrYm9vay54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFdvcmtib29rKHdvcmtzaGVldERhdGEub3B0aW9ucy53b3Jrc2hlZXROYW1lKSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRlbnRUeXBlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc1NoYXJlZFN0cmluZ3MgPSAhd29ya3NoZWV0RGF0YS5pc0VtcHR5IHx8IHdvcmtzaGVldERhdGEub3B0aW9ucy5hbHdheXNFeHBvcnRIZWFkZXJzO1xuICAgICAgICBmb2xkZXJbJ1tDb250ZW50X1R5cGVzXS54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldENvbnRlbnRUeXBlc1hNTChoYXNTaGFyZWRTdHJpbmdzLCB3b3Jrc2hlZXREYXRhLm9wdGlvbnMuZXhwb3J0QXNUYWJsZSkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGFyZWRTdHJpbmdzRmlsZSBpbXBsZW1lbnRzIElFeGNlbEZpbGUge1xuICAgIHB1YmxpYyB3cml0ZUVsZW1lbnQoZm9sZGVyOiBPYmplY3QsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpIHtcbiAgICAgICAgY29uc3QgZGljdCA9IHdvcmtzaGVldERhdGEuZGF0YURpY3Rpb25hcnk7XG4gICAgICAgIGNvbnN0IHNvcnRlZFZhbHVlcyA9IGRpY3QuZ2V0S2V5cygpO1xuICAgICAgICBjb25zdCBzaGFyZWRTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oc29ydGVkVmFsdWVzLmxlbmd0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3J0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHNoYXJlZFN0cmluZ3NbZGljdC5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSldID0gJzxzaT48dD4nICsgdmFsdWUgKyAnPC90Pjwvc2k+JztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsnc2hhcmVkU3RyaW5ncy54bWwnXSA9IHN0clRvVTgoRXhjZWxTdHJpbmdzLmdldFNoYXJlZFN0cmluZ1hNTChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Quc3RyaW5nc0NvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVkVmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFN0cmluZ3Muam9pbignJykpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhYmxlc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0LCB3b3Jrc2hlZXREYXRhOiBXb3Jrc2hlZXREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gd29ya3NoZWV0RGF0YS5jb2x1bW5Db3VudDtcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IEV4Y2VsU3RyaW5ncy5nZXRFeGNlbENvbHVtbihjb2x1bW5Db3VudCAtIDEpICsgd29ya3NoZWV0RGF0YS5yb3dDb3VudDtcbiAgICAgICAgY29uc3QgYXV0b0ZpbHRlckRpbWVuc2lvbiA9ICdBMTonICsgbGFzdENvbHVtbjtcbiAgICAgICAgY29uc3QgdGFibGVEaW1lbnNpb24gPSB3b3Jrc2hlZXREYXRhLmlzRW1wdHlcbiAgICAgICAgICAgID8gJ0ExOicgKyBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4oY29sdW1uQ291bnQgLSAxKSArICh3b3Jrc2hlZXREYXRhLnJvd0NvdW50ICsgMSlcbiAgICAgICAgICAgIDogYXV0b0ZpbHRlckRpbWVuc2lvbjtcbiAgICAgICAgY29uc3QgaGFzVXNlclNldEluZGV4ID0gd29ya3NoZWV0RGF0YS5vd25lci5jb2x1bW5zLnNvbWUoYyA9PiBjLmV4cG9ydEluZGV4ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBoYXNVc2VyU2V0SW5kZXhcbiAgICAgICAgICAgID8gd29ya3NoZWV0RGF0YS5yb290S2V5c1xuICAgICAgICAgICAgOiB3b3Jrc2hlZXREYXRhLm93bmVyLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuc2tpcClcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zdGFydEluZGV4IC0gYi5zdGFydEluZGV4KVxuICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBpbm5lZEluZGV4IC0gYi5waW5uZWRJbmRleClcbiAgICAgICAgICAgICAgICAubWFwKGMgPT4gYy5oZWFkZXIpO1xuXG4gICAgICAgIGxldCBzb3J0U3RyaW5nID0gJyc7XG5cbiAgICAgICAgbGV0IHRhYmxlQ29sdW1ucyA9ICc8dGFibGVDb2x1bW5zIGNvdW50PVwiJyArIGNvbHVtbkNvdW50ICsgJ1wiPic7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAgdmFsdWVzW2ldO1xuICAgICAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8dGFibGVDb2x1bW4gaWQ9XCInICsgKGkgKyAxKSArICdcIiBuYW1lPVwiJyArIHZhbHVlICsgJ1wiLz4nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVDb2x1bW5zICs9ICc8L3RhYmxlQ29sdW1ucz4nO1xuXG4gICAgICAgIGlmICh3b3Jrc2hlZXREYXRhLnNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdFeHByZXNzaW9uID0gd29ya3NoZWV0RGF0YS5zb3J0O1xuICAgICAgICAgICAgY29uc3Qgc2MgPSBFeGNlbFN0cmluZ3MuZ2V0RXhjZWxDb2x1bW4odmFsdWVzLmluZGV4T2Yoc29ydGluZ0V4cHJlc3Npb24uZmllbGROYW1lKSk7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0aW5nRXhwcmVzc2lvbi5kaXIgLSAxO1xuICAgICAgICAgICAgc29ydFN0cmluZyA9IGA8c29ydFN0YXRlIHJlZj1cIkEyOiR7bGFzdENvbHVtbn1cIj48c29ydENvbmRpdGlvbiBkZXNjZW5kaW5nPVwiJHtkaXJ9XCIgcmVmPVwiJHtzY30xOiR7c2N9MTVcIi8+PC9zb3J0U3RhdGU+YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvbGRlclsndGFibGUxLnhtbCddID0gc3RyVG9VOChFeGNlbFN0cmluZ3MuZ2V0VGFibGVzWE1MKGF1dG9GaWx0ZXJEaW1lbnNpb24sIHRhYmxlRGltZW5zaW9uLCB0YWJsZUNvbHVtbnMsIHNvcnRTdHJpbmcpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgV29ya3NoZWV0UmVsc0ZpbGUgaW1wbGVtZW50cyBJRXhjZWxGaWxlIHtcbiAgICBwdWJsaWMgd3JpdGVFbGVtZW50KGZvbGRlcjogT2JqZWN0KSB7XG4gICAgICAgIGZvbGRlclsnc2hlZXQxLnhtbC5yZWxzJ10gPSBzdHJUb1U4KEV4Y2VsU3RyaW5ncy5nZXRXb3Jrc2hlZXRSZWxzKCkpO1xuICAgIH1cbn1cbiJdfQ==