@sunbird-cb/cbp-ai 0.1.87 → 0.1.88

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.
@@ -687,7 +687,7 @@ export class GenerateCourseRecommendationComponent {
687
687
  const behavioralThemes = data
688
688
  .filter(item => item?.type &&
689
689
  ['behavioral', 'behavioural'].includes(item.type.toLowerCase()))
690
- .map(item => `${item.theme}-${item.sub_theme}`)
690
+ .map(item => this.formatThemeWithSubTheme(item?.theme, item?.sub_theme))
691
691
  .filter((theme) => Boolean(theme)); // Ensures type safety
692
692
  const uniqueBehavioralThemes = Array.from(new Set(behavioralThemes));
693
693
  console.log(uniqueBehavioralThemes);
@@ -697,7 +697,7 @@ export class GenerateCourseRecommendationComponent {
697
697
  const functionalThemes = data
698
698
  .filter(item => item?.type &&
699
699
  ['functional'].includes(item.type.toLowerCase()))
700
- .map(item => `${item.theme}-${item.sub_theme}`)
700
+ .map(item => this.formatThemeWithSubTheme(item?.theme, item?.sub_theme))
701
701
  .filter((theme) => Boolean(theme)); // Ensures type safety
702
702
  const uniqueFunctionalThemes = Array.from(new Set(functionalThemes));
703
703
  console.log(uniqueFunctionalThemes);
@@ -708,7 +708,7 @@ export class GenerateCourseRecommendationComponent {
708
708
  const domainThemes = data
709
709
  .filter(item => item?.type &&
710
710
  ['domain'].includes(item.type.toLowerCase()))
711
- .map(item => `${item.theme}-${item.sub_theme}`)
711
+ .map(item => this.formatThemeWithSubTheme(item?.theme, item?.sub_theme))
712
712
  .filter((theme) => Boolean(theme)); // Ensures type safety
713
713
  const uniqueDomainThemes = Array.from(new Set(domainThemes));
714
714
  console.log(uniqueDomainThemes);
@@ -927,10 +927,10 @@ export class GenerateCourseRecommendationComponent {
927
927
  });
928
928
  // Store matched competency info for later use
929
929
  let obj = {};
930
- obj[typeKey] = [themeKey]; // Store the original theme, not the course theme
930
+ obj[typeKey] = [this.getThemeSubThemeKey(themeKey, subThemeKey)];
931
931
  this.competencyNotMatchedByCategory.push(obj);
932
932
  seen.add(matchKey);
933
- matchedCompetencies.add(themeKey); // Track matched themes
933
+ matchedCompetencies.add(this.getThemeSubThemeKey(themeKey, subThemeKey));
934
934
  isMatched = true;
935
935
  if (counts.hasOwnProperty(typeKey)) {
936
936
  counts[typeKey]++;
@@ -950,13 +950,15 @@ export class GenerateCourseRecommendationComponent {
950
950
  let allCategoryCompetencies = [];
951
951
  for (let i = 0; i < this.planData.competencies.length; i++) {
952
952
  if (this.planData.competencies[i]['type']?.toLowerCase() === categoryType?.toLowerCase()) {
953
- allCategoryCompetencies.push(this.planData.competencies[i]['theme']?.toLowerCase().trim());
953
+ allCategoryCompetencies.push(this.getThemeSubThemeKey(this.planData.competencies[i]['theme'], this.planData.competencies[i]['sub_theme']));
954
954
  }
955
955
  }
956
956
  // Get matched competencies for this category from courses
957
957
  let matchedCompetencies = [];
958
+ console.log('competencyNotMatchedByCategory', this.competencyNotMatchedByCategory);
958
959
  for (let i = 0; i < this.competencyNotMatchedByCategory.length; i++) {
959
960
  if (this.competencyNotMatchedByCategory[i][categoryType?.toLowerCase()]) {
961
+ console.log('competencyNotMatchedByCategory[i]', this.competencyNotMatchedByCategory[i]);
960
962
  // Extract matched themes from course competencies
961
963
  this.competencyNotMatchedByCategory[i][categoryType?.toLowerCase()].forEach(theme => {
962
964
  if (theme) {
@@ -1015,7 +1017,7 @@ export class GenerateCourseRecommendationComponent {
1015
1017
  frac: { theme: fracTheme, subTheme: fracSubTheme },
1016
1018
  matchType: matchType
1017
1019
  });
1018
- matchedCompetencies.push(fracTheme);
1020
+ matchedCompetencies.push(this.getThemeSubThemeKey(fracTheme, fracSubTheme));
1019
1021
  break; // Found a match, move to next course competency
1020
1022
  }
1021
1023
  }
@@ -1044,11 +1046,11 @@ export class GenerateCourseRecommendationComponent {
1044
1046
  let dialogData = { ...this.planData };
1045
1047
  // If competency parameters are provided, add them to the dialog data
1046
1048
  if (missingCompetency && competencyType) {
1047
- // Parse the theme from the missing competency string (assumes format "theme-subtheme" or just "theme")
1048
- const theme = missingCompetency.trim();
1049
+ const { theme, subTheme } = this.parseThemeAndSubTheme(missingCompetency);
1049
1050
  dialogData.prefillCompetency = {
1050
1051
  type: competencyType,
1051
- theme: theme
1052
+ theme: theme,
1053
+ subTheme: subTheme
1052
1054
  };
1053
1055
  }
1054
1056
  const dialogRef = this.dialog.open(AddCourseComponent, {
@@ -1074,8 +1076,9 @@ export class GenerateCourseRecommendationComponent {
1074
1076
  }
1075
1077
  filterOnCompetencyTheme(themeItem) {
1076
1078
  this.selectedThemeFilter = themeItem;
1077
- let themeName = themeItem?.split("-")[0]?.trim();
1078
- let subThemeName = themeItem?.split("-")[1]?.trim();
1079
+ const { theme, subTheme } = this.parseThemeAndSubTheme(themeItem || '');
1080
+ let themeName = theme;
1081
+ let subThemeName = subTheme;
1079
1082
  console.log('Filtering by theme:', themeName, 'subTheme:', subThemeName, 'Tab index:', this.innerTabActiveIndex);
1080
1083
  // Get the current competency type based on the active tab
1081
1084
  let competencyType = '';
@@ -1173,10 +1176,7 @@ export class GenerateCourseRecommendationComponent {
1173
1176
  console.warn('No theme selected for adding course');
1174
1177
  return;
1175
1178
  }
1176
- // Parse theme and sub-theme from selectedThemeFilter (format: "Theme - SubTheme")
1177
- const themeParts = this.selectedThemeFilter.split('-');
1178
- const theme = themeParts[0]?.trim();
1179
- const subTheme = themeParts[1]?.trim();
1179
+ const { theme, subTheme } = this.parseThemeAndSubTheme(this.selectedThemeFilter);
1180
1180
  // Get the current competency type based on the active tab
1181
1181
  // Map the tab labels to the format expected by AddCourseComponent
1182
1182
  let competencyType = '';
@@ -1229,7 +1229,8 @@ export class GenerateCourseRecommendationComponent {
1229
1229
  console.log('this.planData.competencies', this.planData);
1230
1230
  console.log('this.behaviouralNotMatched', this.behaviouralNotMatched);
1231
1231
  this.planData.competencies.map((item) => {
1232
- if (item && item?.type === 'Behavioral' && this.behaviouralNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {
1232
+ const competencyKey = this.getThemeSubThemeKey(item?.theme, item?.sub_theme);
1233
+ if (item && item?.type === 'Behavioral' && this.behaviouralNotMatched.indexOf(competencyKey) < 0) {
1233
1234
  this.behaviouralMatched.push(item);
1234
1235
  }
1235
1236
  });
@@ -1238,7 +1239,8 @@ export class GenerateCourseRecommendationComponent {
1238
1239
  getFunctionalMatched() {
1239
1240
  this.functionalMatched = [];
1240
1241
  this.planData.competencies.map((item) => {
1241
- if (item && item?.type === 'Functional' && this.functionalNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {
1242
+ const competencyKey = this.getThemeSubThemeKey(item?.theme, item?.sub_theme);
1243
+ if (item && item?.type === 'Functional' && this.functionalNotMatched.indexOf(competencyKey) < 0) {
1242
1244
  this.functionalMatched.push(item);
1243
1245
  }
1244
1246
  });
@@ -1247,12 +1249,47 @@ export class GenerateCourseRecommendationComponent {
1247
1249
  getDomainMatched() {
1248
1250
  this.domainMatched = [];
1249
1251
  this.planData.competencies.map((item) => {
1250
- if (item && item?.type === 'Domain' && this.domainNotMatched.indexOf(item?.theme?.toLowerCase()) < 0) {
1252
+ const competencyKey = this.getThemeSubThemeKey(item?.theme, item?.sub_theme);
1253
+ if (item && item?.type === 'Domain' && this.domainNotMatched.indexOf(competencyKey) < 0) {
1251
1254
  this.domainMatched.push(item);
1252
1255
  }
1253
1256
  });
1254
1257
  console.log('this.domainMatched--', this.domainMatched);
1255
1258
  }
1259
+ formatThemeWithSubTheme(theme, subTheme) {
1260
+ const normalizedTheme = (theme || '').toString().trim();
1261
+ const normalizedSubTheme = (subTheme || '').toString().trim();
1262
+ if (normalizedTheme && normalizedSubTheme) {
1263
+ return `${normalizedTheme} - ${normalizedSubTheme}`;
1264
+ }
1265
+ return normalizedTheme || normalizedSubTheme;
1266
+ }
1267
+ getThemeSubThemeKey(theme, subTheme) {
1268
+ return this.formatThemeWithSubTheme(theme, subTheme).toLowerCase().trim();
1269
+ }
1270
+ parseThemeAndSubTheme(value) {
1271
+ const text = (value || '').toString().trim();
1272
+ if (!text) {
1273
+ return { theme: '', subTheme: '' };
1274
+ }
1275
+ if (text.includes(' - ')) {
1276
+ const parts = text.split(' - ');
1277
+ return {
1278
+ theme: (parts.shift() || '').trim(),
1279
+ subTheme: parts.join(' - ').trim()
1280
+ };
1281
+ }
1282
+ if (text.includes('-')) {
1283
+ const parts = text.split('-');
1284
+ if (parts.length === 2) {
1285
+ return {
1286
+ theme: parts[0].trim(),
1287
+ subTheme: parts[1].trim()
1288
+ };
1289
+ }
1290
+ }
1291
+ return { theme: text, subTheme: '' };
1292
+ }
1256
1293
  downloadPDF() {
1257
1294
  this.isPDFDownload = true;
1258
1295
  this.loading = true;
@@ -2003,4 +2040,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2003
2040
  </div>
2004
2041
  `, styles: [".confirmation-dialog-container{padding:0}.dialog-header{display:flex;align-items:center;gap:12px;padding:24px 24px 16px;border-bottom:1px solid #e0e0e0}.warning-icon{font-size:24px;width:24px;height:24px;color:#ff9800}h2{margin:0;font-size:18px;font-weight:600;color:#333}.dialog-content{padding:24px}.main-message{font-size:16px;color:#333;margin:0 0 12px;line-height:1.5}.sub-message{font-size:14px;color:#666;margin:0;font-weight:500}.dialog-actions{padding:16px 24px 24px;gap:12px;justify-content:flex-end}.cancel-btn{color:#666}.confirm-btn{display:flex;align-items:center;gap:8px;.mat-icon{font-size:18px;width:18px;height:18px;margin:0}}\n"] }]
2005
2042
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }]; } });
2006
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBcUIsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9uSCxNQUFNLE9BQU8scUNBQXFDO0lBb0JoRCxZQUFtQixTQUE4RCxFQUMvQyxJQUFTLEVBQVMsYUFBNEIs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O0lBQ0wsQ0FBQzsrR0FyckVVLHFDQUFxQyw4Q0FxQnRDLGVBQWU7bUdBckJkLHFDQUFxQyxvTENqQmxELDY0aUVBNitCTTs7NEZENTlCTyxxQ0FBcUM7a0JBTGpELFNBQVM7K0JBQ0Usb0NBQW9DOzswQkF5QjNDLE1BQU07MkJBQUMsZUFBZTtvSkFwQm1CLFVBQVU7c0JBQXJELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7QUF1ckU1QyxnQ0FBZ0M7QUFtR2hDLE1BQU0sT0FBTyw0QkFBNEI7SUFDdkMsWUFDUyxTQUFxRDtRQUFyRCxjQUFTLEdBQVQsU0FBUyxDQUE0QztJQUMxRCxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0FYVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixzRUFoRzdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVDs7NEZBc0VVLDRCQUE0QjtrQkFsR3hDLFNBQVM7K0JBQ0UsZ0NBQWdDLFlBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudCB9IGZyb20gJy4uL3N1Z2dlc3QtbW9yZS1jb3Vyc2VzL3N1Z2dlc3QtbW9yZS1jb3Vyc2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgQWRkQ291cnNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWRkLWNvdXJzZS9hZGQtY291cnNlLmNvbXBvbmVudCc7XG5pbXBvcnQgaHRtbDJwZGYgZnJvbSAnaHRtbDJwZGYuanMnO1xuaW1wb3J0IHsgY29uY2F0LCBpbnRlcnZhbCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXAsIGNhdGNoRXJyb3IsIGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2RlbGV0ZS1yb2xlLW1hcHBpbmctcG9wdXAvZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvc2hhcmVkL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3BkZkNvbnRlbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcGRmQ29udGVudCE6IEVsZW1lbnRSZWY7XG4gIHBsYW5EYXRhOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIGRhdGFMb2FkZWQgPSBmYWxzZSAvLyBUcmFjayBpZiBpbml0aWFsIGRhdGEgaGFzIGJlZW4gbG9hZGVkXG4gIGlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2UgLy8gVHJhY2sgcmVnZW5lcmF0aW9uIHdpdGggcHJvZ3Jlc3MgbG9hZGluZ1xuICByZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSAnJ1xuXG4gIC8vIFByb2dyZXNzaXZlIGxvYWRpbmcgZm9yIGNvdXJzZSBnZW5lcmF0aW9uXG4gIGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2U6IHN0cmluZyA9ICcnO1xuICBwcm9ncmVzc1BlcmNlbnRhZ2U6IG51bWJlciA9IDA7XG4gIHByb2Nlc3NpbmdTdGFnZXMgPSBbXG4gICAgJ0FuYWx5emluZyByb2xlcyBhbmQgcmVzcG9uc2liaWxpdGllcy4uLicsXG4gICAgJ0RldGFpbGluZyBjb21wZXRlbmN5IHJlcXVpcmVtZW50cy4uLicsXG4gICAgJ1ByZXBhcmluZyBpR09UIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nLFxuICAgICdHZW5lcmF0aW5nIHB1YmxpYyBjb3Vyc2Ugc3VnZ2VzdGlvbnMuLi4nLFxuICAgICdDb21wdXRpbmcgY29tcHJlaGVuc2l2ZSBnYXAgYW5hbHlzaXMuLi4nLFxuICAgICdGaW5hbGl6aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiBwbGFuLi4uJ1xuICBdO1xuICBzdGFnZVN0YXJ0VGltZTogbnVtYmVyID0gMDtcbiAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LCBwdWJsaWMgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhciwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5wbGFuRGF0YSA9IGRhdGFcbiAgfVxuICBzZWFyY2hUZXh0ID0gJydcbiAgZmlsdGVyZENvdXJzZXM6IGFueSA9IFtdXG4gIG9yaWdpbmFsRGF0YTogYW55ID0gW11cbiAgc2VsZWN0RmlsdGVyQ291cnNlczogYW55ID0gW11cbiAgc3VnZ2VzdGVkQ291cnNlczogYW55ID0gW10gLy8gVHJhY2sgaUdPVCBzdWdnZXN0ZWQgY291cnNlcyBzZXBhcmF0ZWx5XG4gIHVzZXJBZGRlZENvdXJzZXM6IGFueSA9IFtdIC8vIFRyYWNrIHVzZXItYWRkZWQgY291cnNlcyBzZXBhcmF0ZWx5XG4gIG1vZGUgPSAnYWRkJ1xuICBjYnBfcGxhbl9pZCA9ICcnXG4gIGV4cGFuZGVkQ29tcGV0ZW5jaWVzOiBhbnkgPSB7fTsgLy8gVHJhY2sgZXhwYW5kZWQgc3RhdGUgZm9yIGVhY2ggY291cnNlIGFuZCBjb21wZXRlbmN5IHR5cGVcbiAgb3V0ZXJUYWJBY3RpdmVJbmRleCA9IDBcbiAgaW5uZXJUYWJBY3RpdmVJbmRleCA9IDBcbiAgb3V0ZXJUYWJBY3RpdmVUZXh0ID0gJ2FsbCdcbiAgaW5uZXJUYWJBY3RpdmVUZXh0ID0gJ2FsbCdcbiAgc2VsZWN0ZWRDYXRlZ29yeSA9ICdhbGwnO1xuICBjb21wZXRlbmN5Q292ZXJlZENvdW50ID0gMFxuICBvdmVyYWxsQ292ZXJhZ2U6IGFueSA9IDBcbiAgYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIGJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcyA9IDBcbiAgYmVoYXZpb3JhbENvdmVyYWdlOiBhbnkgPSAwXG4gIGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ID0gMFxuICBmdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMgPSAwXG4gIGZ1bmN0aW9uYWxDb3ZlcmFnZTogYW55ID0gMFxuICBkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50ID0gMFxuICBkb21haW5Ub3RhbENvbXBldGVuY2llcyA9IDBcbiAgZG9tYWluQ292ZXJhZ2U6IGFueSA9IDBcbiAgY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5ID0gW11cbiAgY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gW11cbiAgbWVudUl0ZW1zID0gW1xuICAgIHsga2V5OiAnYWxsJywgbGFiZWw6ICdBbGwgQ2F0ZWdvcmllcycgfSxcbiAgICB7IGtleTogJ2JlaGF2aW9yYWwnLCBsYWJlbDogJ0JlaGF2aW91cmFsJyB9LFxuICAgIHsga2V5OiAnZnVuY3Rpb25hbCcsIGxhYmVsOiAnRnVuY3Rpb25hbCcgfSxcbiAgICB7IGtleTogJ2RvbWFpbicsIGxhYmVsOiAnRG9tYWluJyB9XG4gIF07XG4gIGJlaGF2aW91cmFsTm90TWF0Y2hlZCA9IFtdXG4gIGZ1bmN0aW9uYWxOb3RNYXRjaGVkID0gW11cbiAgZG9tYWluTm90TWF0Y2hlZCA9IFtdXG4gIHNlbGVjdGVkVGhlbWVGaWx0ZXIgPSAnJ1xuICBvcmlnaW5hbEZpbHRlcmVkQ291cnNlcyA9IFtdXG4gIGlzUmVnZW5lcmF0aW5nID0gZmFsc2VcbiAgaXNQREZEb3dubG9hZCA9IGZhbHNlXG4gIGJlaGF2aW91cmFsTWF0Y2hlZCA9IFtdXG4gIGZ1bmN0aW9uYWxNYXRjaGVkID0gW11cbiAgZG9tYWluTWF0Y2hlZCA9IFtdXG4gIGZpbHRlckZvcm0hOiBGb3JtR3JvdXA7XG4gIGNvbXBldGVuY2llc1R5cGUgPSBbJ0FsbCcsICdCZWhhdmlvdXJhbCcsICdGdW5jdGlvbmFsJywgJ0RvbWFpbiddXG4gIHJhdGluZ3MgPSBbJzQuNSBhbmQgYWJvdmUnLCAnNC4wIGFuZCBhYm92ZScsICczLjUgYW5kIGFib3ZlJywgJzIuNSBhbmQgYWJvdmUnLCAnMSBhbmQgYWJvdmUnXTtcbiAgbGFuZ3VhZ2VzID0gWydFbmdsaXNoJywgJ0hpbmRpJywgJ1RhbWlsJywgJ0thbm5hZGEnLCAnVGVsdWd1JywgJ01hbGF5YWxhbScsICdBc3NhbWVzZScsICdCZW5nYWxpJywgJ0d1amFyYXRpJywgJ01hcmF0aGknLCAnT2RpYScsICdQdW5qYWJpJywgJ0tvbmthbmknLCAnQm9kbycsICdEb2dyaScsICdLYXNobWlyaScsICdNYWl0aGlsaScsICdNYW5pcHVyaScsICdOZXBhbGknLCAnU2Fuc2tyaXQnLCAnU2FudGFsaScsICdTaW5kaGknLCAnVXJkdSddO1xuICBkdXJhdGlvbnMgPSBbJzwgMSBIb3VyJywgJzEtNSBIb3VycycsICc1KyBIb3VycyddO1xuICBwcm92aWRlcnMgPSBbXTtcbiAgZmlsdGVyZWRDb21wZXRlbmN5ID0gWy4uLnRoaXMuY29tcGV0ZW5jaWVzVHlwZV07XG4gIGZpbHRlcmVkUmF0aW5ncyA9IFsuLi50aGlzLnJhdGluZ3NdO1xuICBmaWx0ZXJlZExhbmd1YWdlcyA9IFsuLi50aGlzLmxhbmd1YWdlc107XG4gIGZpbHRlcmVkRHVyYXRpb25zID0gWy4uLnRoaXMuZHVyYXRpb25zXTtcbiAgZmlsdGVyZWRQcm92aWRlcnMgPSBbLi4udGhpcy5wcm92aWRlcnNdO1xuICBmdWxsQ291cnNlTGlzdCA9IFtdXG4gIC8vIFNlbGVjdGVkIGZpbHRlcnNcbiAgc2VsZWN0ZWRDb21wZXRlbmN5ID0gJ0FsbCc7XG4gIHNlbGVjdGVkUmF0aW5nOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkRHVyYXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZFByb3ZpZGVyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZmlyc3RBcGlSZXNwb25zZTogYW55ID0gbnVsbFxuICBleGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQgPSBmYWxzZTtcbiAgc2VsZWN0Q2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRoaXMuZ2FwQW5hbHlzaXNTdGF0cygpXG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb21wZXRlbmN5OiBbW11dLFxuICAgICAgcmF0aW5nOiBbW11dLFxuICAgICAgbGFuZ3VhZ2U6IFtbXV0sXG4gICAgICBkdXJhdGlvbjogW1tdXSxcbiAgICAgIHByb3ZpZGVyOiBbW11dXG4gICAgfSk7XG4gICAgdGhpcy5sb2FkQ29tcG9uZW50RGF0YSgpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlYXJjaFRleHQnLCB2YWx1ZSlcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZVxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZpbHRlckRhdGEodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG4gICAgLy8gIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZpbHRlckRhdGEodGhpcy5zZWFyY2hUZXh0KTtcbiAgfVxuXG4gIHNlbGVjdGVkRmlsdGVyQ291cnNlcyhldmVudCwgaXRlbSkge1xuICAgIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50KVxuICAgIGNvbnNvbGUubG9nKCdpdGVtJywgaXRlbSlcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpIDwgMCkge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5maW5kSW5kZXgoXG4gICAgICAgIGNvbnRyb2wgPT4gY29udHJvbCA9PT0gaXRlbS5pZGVudGlmaWVyXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygndGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzJywgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzKVxuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgc2F2ZUNvdXJzZXMoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnBsYW5EYXRhJywgdGhpcy5wbGFuRGF0YSlcbiAgICBsZXQgcmVxQm9keSA9IHtcbiAgICAgIFwicm9sZV9tYXBwaW5nX2lkXCI6IHRoaXMucGxhbkRhdGEuaWQsXG4gICAgICBcInJlY29tbWVuZGVkX2NvdXJzZV9pZFwiOiB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCxcbiAgICAgIFwiY291cnNlX2lkZW50aWZpZXJzXCI6IHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlc1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygncmVxQm9keSwgJywgcmVxQm9keSlcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkJykge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNhdmVDb3Vyc2UocmVxQm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZXMgU2F2ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICAgICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2JwX3BsYW5faWQpIHtcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnVwZGF0ZUNvdXJzZShyZXFCb2R5LCB0aGlzLmNicF9wbGFuX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBVcGRhdGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgICAvLyBIYW5kbGUgNDA5IENvbmZsaWN0IGhlcmVcbiAgICAgICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBjYnBfcGxhbl9pZCBpcyBub3QgYXZhaWxhYmxlXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2NicF9wbGFuX2lkIGlzIG5vdCBhdmFpbGFibGUgZm9yIHVwZGF0ZSBvcGVyYXRpb24nKTtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gdXBkYXRlIGNvdXJzZXM6IG1pc3NpbmcgcGxhbiBJRCcsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgZ2V0Q291cnNlcygpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZygncmVzJywgcmVzKVxuICAgICAgICB0aGlzLmNicF9wbGFuX2lkID0gcmVzPy5pZFxuICAgICAgICBpZiAocmVzICYmIHJlcz8uc2VsZWN0ZWRfY291cnNlcyAmJiByZXM/LnNlbGVjdGVkX2NvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubW9kZSA9ICdlZGl0J1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzPy5zZWxlY3RlZF9jb3Vyc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaChyZXMuc2VsZWN0ZWRfY291cnNlc1tpXT8uaWRlbnRpZmllcilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIC8vdGhpcy5hbHJlYWR5QXZhaWxhYmxlUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH1cblxuXG4gICAgfSlcbiAgfVxuICBnZXRTdWdnZXN0ZWRDb3Vyc2UoKSB7XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFN1Z2dlc3RlZENvdXJzZXMocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKCdnZXRTdWdnZXN0ZWRDb3Vyc2VzIHJlcycsIHJlcylcbiAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgICAvLyBTdG9yZSBzdWdnZXN0ZWQgY291cnNlcyBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9IFsuLi5yZXNdO1xuXG4gICAgICAgIC8vIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgdG8gaW5jbHVkZSBhbGwgY291cnNlIHR5cGVzXG4gICAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkQ291cnNlcygpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgc3VnZ2VzdGVkIGNvdXJzZXMgYXJlIGFkZGVkXG4gICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKVxuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1VuYXV0aG9yaXplZCBhY2Nlc3MgLSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byBsb2dpbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEhhbmRsZSBvdGhlciBlcnJvcnMgZ3JhY2VmdWxseVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHN1Z2dlc3RlZCBjb3Vyc2VzJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG5cbiAgZ2V0VXNlckNvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFVzZXJDb3Vyc2UgQVBJIHJlc3BvbnNlOicsIHJlcylcbiAgICAgICAgY29uc29sZS5sb2coJ0N1cnJlbnQgZmlsdGVyZENvdXJzZXMgYmVmb3JlIGFkZGluZyB1c2VyIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcylcblxuICAgICAgICAvLyBTdG9yZSB1c2VyLWFkZGVkIGNvdXJzZXMgc2VwYXJhdGVseSAocmVzZXQgdG8gYXZvaWQgZHVwbGljYXRlcylcbiAgICAgICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzID0gWy4uLnJlc107XG5cbiAgICAgICAgLy8gUHJvY2VzcyB1c2VyLWFkZGVkIGNvdXJzZXMgdG8gZW5zdXJlIHByb3BlciBzdHJ1Y3R1cmVcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB1c2VyQ291cnNlID0gcmVzW2ldO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBVc2VyIGNvdXJzZSAke2l9IGNvbXBldGVuY2llczpgLCB1c2VyQ291cnNlLmNvbXBldGVuY2llcyk7XG5cbiAgICAgICAgICAvLyBFbnN1cmUgdXNlci1hZGRlZCBjb3Vyc2VzIGhhdmUgdGhlIGV4cGVjdGVkIHN0cnVjdHVyZSBmb3IgZGlzcGxheVxuICAgICAgICAgIGlmICh1c2VyQ291cnNlICYmICF1c2VyQ291cnNlLmNvdXJzZV90eXBlKSB7XG4gICAgICAgICAgICB1c2VyQ291cnNlLmNvdXJzZV90eXBlID0gJ1VzZXIgQWRkZWQnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFkZCBpZGVudGlmaWVyIGlmIG1pc3NpbmcgKG5lZWRlZCBmb3IgY291cnNlIHNlbGVjdGlvbiBsb2dpYylcbiAgICAgICAgICBpZiAodXNlckNvdXJzZSAmJiAhdXNlckNvdXJzZS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICB1c2VyQ291cnNlLmlkZW50aWZpZXIgPSB1c2VyQ291cnNlLmlkIHx8IGB1c2VyX2NvdXJzZV8ke2l9XyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgdG8gaW5jbHVkZSBhbGwgY291cnNlIHR5cGVzXG4gICAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkQ291cnNlcygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXJkQ291cnNlcyBhZnRlciBhZGRpbmcgdXNlciBjb3Vyc2VzOicsIHRoaXMuZmlsdGVyZENvdXJzZXMpO1xuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG5cbiAgY2hlY2tJZkNvdXJzZUV4aXN0cyhpdGVtKSB7XG4gICAgbGV0IGZsYWcgPSBmYWxzZVxuICAgIGlmICh0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMuaW5kZXhPZihpdGVtPy5pZGVudGlmaWVyKSA+IC0xKSB7XG4gICAgICBmbGFnID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmxhZ1xuICB9XG5cbiAgc2VsZWN0QWxsQ291cnNlcyhldmVudCkge1xuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnB1c2godGhpcy5maWx0ZXJkQ291cnNlc1tpXS5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMgPSBbXVxuXG4gICAgfVxuICAgIGlmICh0aGlzLmNicF9wbGFuX2lkKSB7XG4gICAgICB0aGlzLm1vZGUgPSAndXBkYXRlJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGUgPSAnYWRkJ1xuICAgIH1cblxuXG4gIH1cbiAgZ2V0U2VjdG9ycyhzZWN0b3IpIHtcbiAgICBpZiAoc2VjdG9yICYmIHNlY3Rvci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlY3RvcikgPyBzZWN0b3Iuam9pbignLyAnKSA6ICcnXG4gICAgfVxuXG4gIH1cblxuICBmaWx0ZXJEYXRhKHNlYXJjaFRleHQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzZWFyY2hUZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZ2lmaWVkID0gdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcoaXRlbSkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZmllZC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZmxhdHRlbk9iamVjdFRvU3RyaW5nKG9iajogYW55KTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJlc3VsdCArPSAnICcgKyB2YWx1ZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHZhbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgdGhpcy5mbGF0dGVuT2JqZWN0VG9TdHJpbmcodmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN1Z2dlc3RNb3JlQ291cnNlcygpIHtcbiAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgY29uc3QgZGlhbG9nUmVmTmV3ID0gdGhpcy5kaWFsb2cub3BlbihTdWdnZXN0TW9yZUNvdXJzZXNDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTEwMHB4JyxcbiAgICAgIGRhdGE6IHsgcmVjb21tZW5kZWRfY291cnNlX2lkOiB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCwgcm9sZV9tYXBwaW5nX2lkOiB0aGlzLnBsYW5EYXRhLmlkIH0sXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZk5ldy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb24oZWxlbWVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0dlbmVyYXRlIENvdXJzZSBSZWNvbW1lbmRhdGlvbiBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgLy8gdGhpcy5hY3RpdmVSb3dFbGVtZW50ID0gZWxlbWVudFxuICAgIGNvbnNvbGUubG9nKCdFZGl0IFJvbGUgTWFwcGluZyBjbGlja2VkJywgZWxlbWVudCk7XG4gICAgLy8gTmF2aWdhdGUgb3Igb3BlbiBtb2RhbFxuICAgIGNvbnNvbGUubG9nKCdWaWV3IENCUCBQbGFuIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25Db21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IGVsZW1lbnQsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2hhbmdlcyBzYXZlZCEnKTtcbiAgICAgICAgLy8gUmVmcmVzaCBkYXRhIG9yIHNob3cgYSB0b2FzdCBoZXJlXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmopXG4gICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZCkge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSb2xlTWFwcGluZ0J5U3RhdGVDZW50ZXIodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5pZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICAgICAgICAvLyB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHJlc1xuICAgICAgICAgICAgLy8gdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSByZXM7XG4gICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ3RoaXMuZGF0YVNvdXJjZScsdGhpcy5kYXRhU291cmNlKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nLCBpbmRleCk6IGFueVtdIHtcbiAgICBjb25zdCBjb3Vyc2UgPSB0aGlzLmZpbHRlcmRDb3Vyc2VzW2luZGV4XTtcbiAgICBpZiAoIWNvdXJzZSkge1xuICAgICAgY29uc29sZS5sb2coYE5vIGNvdXJzZSBmb3VuZCBhdCBpbmRleCAke2luZGV4fWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgIC8vIEFJIFJlY29tbWVuZGVkICYgUHVibGljIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXMnXG4gICAgLy8gTWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVCBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzX3Y2J1xuICAgIC8vIFVzZXIgQWRkZWQgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llcydcbiAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICAgIC8vICBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSB1c2luZyAnY29tcGV0ZW5jaWVzJyBwcm9wZXJ0eTpgLCBjb21wZXRlbmNpZXMpO1xuICAgIH0gZWxzZSBpZiAoY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgLy8gY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgdXNpbmcgJ2NvbXBldGVuY2llc192NicgcHJvcGVydHk6YCwgY29tcGV0ZW5jaWVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29uc29sZS5sb2coYENvdXJzZSAke2luZGV4fSAoJHtjb3Vyc2UuY291cnNlX3R5cGUgfHwgY291cnNlLm5hbWUgfHwgJ1Vua25vd24nfSkgaGFzIG5vIHZhbGlkIGNvbXBldGVuY2llcyBwcm9wZXJ0eTpgLCB7XG4gICAgICAvLyAgIGhhc0NvbXBldGVuY2llczogISFjb3Vyc2UuY29tcGV0ZW5jaWVzLFxuICAgICAgLy8gICBjb21wZXRlbmNpZXNUeXBlOiB0eXBlb2YgY291cnNlLmNvbXBldGVuY2llcyxcbiAgICAgIC8vICAgaGFzQ29tcGV0ZW5jaWVzVjY6ICEhY291cnNlLmNvbXBldGVuY2llc192NixcbiAgICAgIC8vICAgY29tcGV0ZW5jaWVzVjZUeXBlOiB0eXBlb2YgY291cnNlLmNvbXBldGVuY2llc192NixcbiAgICAgIC8vICAgY291cnNlS2V5czogT2JqZWN0LmtleXMoY291cnNlKVxuICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vICBjb25zb2xlLmxvZyhgTm8gY29tcGV0ZW5jaWVzIGZvdW5kIGZvciBjb3Vyc2UgJHtpbmRleH0gYW5kIHR5cGUgJHt0eXBlfWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgdHlwZSBmb3IgY29tcGFyaXNvbiAoY2FzZS1pbnNlbnNpdGl2ZSArIGhhbmRsZSBzcGVsbGluZyB2YXJpYXRpb25zKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIGNvbnN0IG1hdGNoZWRDb21wZXRlbmNpZXMgPSBjb21wZXRlbmNpZXMuZmlsdGVyKGMgPT4ge1xuICAgICAgaWYgKCFjIHx8ICFjLmNvbXBldGVuY3lBcmVhTmFtZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgSW52YWxpZCBjb21wZXRlbmN5IHN0cnVjdHVyZSBpbiBjb3Vyc2UgJHtpbmRleH06YCwgYyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcGV0ZW5jeUFyZWEgPSBjLmNvbXBldGVuY3lBcmVhTmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gSGFuZGxlIGJvdGggXCJiZWhhdmlvcmFsXCIgYW5kIFwiYmVoYXZpb3VyYWxcIiBzcGVsbGluZ3NcbiAgICAgIGlmIChub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBub3JtYWxpemVkVHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICAgIHJldHVybiBjb21wZXRlbmN5QXJlYSA9PT0gJ2JlaGF2aW9yYWwnIHx8IGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3VyYWwnO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3Igb3RoZXIgdHlwZXMsIGRvIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvblxuICAgICAgcmV0dXJuIGNvbXBldGVuY3lBcmVhID09PSBub3JtYWxpemVkVHlwZTtcbiAgICB9KTtcblxuICAgIC8vIGNvbnNvbGUubG9nKGBGb3VuZCAke21hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RofSBjb21wZXRlbmNpZXMgb2YgdHlwZSAke3R5cGV9IGZvciBjb3Vyc2UgJHtpbmRleH06YCwgbWF0Y2hlZENvbXBldGVuY2llcyk7XG4gICAgcmV0dXJuIG1hdGNoZWRDb21wZXRlbmNpZXM7XG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeUJlaHZpb3VyYWxUeXBlKGluZGV4KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb3Vyc2UgPSB0aGlzLmZpbHRlcmRDb3Vyc2VzW2luZGV4XTtcbiAgICBpZiAoIWNvdXJzZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICBpZiAoY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgIH0gZWxzZSBpZiAoY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgIH1cblxuICAgIGlmIChjb21wZXRlbmNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBldGVuY2llc1xuICAgICAgLmZpbHRlcihjID0+IGMgJiYgKGMuY29tcGV0ZW5jeUFyZWFOYW1lID09PSAnQmVoYXZpb3JhbCcgfHwgYy5jb21wZXRlbmN5QXJlYU5hbWUgPT09ICdCZWhhdmlvdXJhbCcpKVxuICAgICAgLm1hcChjID0+IGAke2MuY29tcGV0ZW5jeVRoZW1lTmFtZSB8fCAnJ30gLSAke2MuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB8fCAnJ31gKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KTtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG5cbiAgICBpZiAodGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldKSB7XG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuc2xpY2UoMCwgMik7XG4gIH1cblxuICB0b2dnbGVDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSA9ICF0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV07XG4gIH1cblxuICBpc0V4cGFuZGVkKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldIHx8IGZhbHNlO1xuICB9XG5cbiAgaGFzTW9yZVRoYW5Ud28odHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KS5sZW5ndGggPiAyO1xuICB9XG5cbiAgZ2V0UmVtYWluaW5nQ291bnQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aDtcbiAgICByZXR1cm4gdG90YWxDb3VudCAtIDI7XG4gIH1cblxuICBvbk91dGVyVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub3V0ZXJUYWJBY3RpdmVJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5vdXRlclRhYkFjdGl2ZVRleHQgPSBldmVudC50YWIudGV4dExhYmVsXG4gICAgY29uc29sZS5sb2coJ091dGVyIFRhYiBJbmRleDonLCBldmVudC5pbmRleCk7XG4gICAgY29uc29sZS5sb2coJ091dGVyIFRhYiBMYWJlbDonLCBldmVudC50YWIudGV4dExhYmVsKTtcbiAgICBpZiAoZXZlbnQuaW5kZXggPT09IDEpIHtcbiAgICAgIHRoaXMuZ2FwQW5hbHlzaXNTdGF0cygpXG4gICAgfVxuICAgIGlmIChldmVudC5pbmRleCA9PT0gMCkge1xuICAgICAgLy8gdGhpcy5nZXRDb3Vyc2VzKClcbiAgICAgIC8vIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcbiAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpXG4gICAgfVxuICB9XG5cbiAgb25Jbm5lclRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPSBldmVudC5pbmRleFxuICAgIHRoaXMuaW5uZXJUYWJBY3RpdmVUZXh0ID0gZXZlbnQudGFiLnRleHRMYWJlbFxuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnOyAvLyBSZXNldCB0aGVtZSBmaWx0ZXIgd2hlbiBzd2l0Y2hpbmcgdGFic1xuICAgIGNvbnNvbGUubG9nKCdJbm5lciBUYWIgSW5kZXg6JywgZXZlbnQuaW5kZXgpO1xuICAgIGNvbnNvbGUubG9nKCdJbm5lciBUYWIgTGFiZWw6JywgZXZlbnQudGFiLnRleHRMYWJlbCk7XG4gICAgbGV0IHRhYkluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IFtdXG5cbiAgICAvLyBHZXQgYWxsIGF2YWlsYWJsZSBjb3Vyc2VzIChvcmlnaW5hbCArIHN1Z2dlc3RlZCArIHVzZXIgYWRkZWQpXG4gICAgY29uc3QgYWxsQXZhaWxhYmxlQ291cnNlcyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuXG5cblxuICAgIHN3aXRjaCAodGFiSW5kZXgpIHtcbiAgICAgIGNhc2UgMDogLy8gQWxsXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxBdmFpbGFibGVDb3Vyc2VzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gQmVoYXZpb3JhbFxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5iZWhhdmlvcmFsRmlsdGVyKGFsbEF2YWlsYWJsZUNvdXJzZXMpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuYmVoYXZpb3JhbENvbXBldGVuY3lGaWx0ZXIodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjogLy8gRnVuY3Rpb25hbFxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5mdW5jdGlvbmFsRmlsdGVyKGFsbEF2YWlsYWJsZUNvdXJzZXMpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lGaWx0ZXIodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzogLy8gRG9tYWluXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmRvbWFpbkZpbHRlcihhbGxBdmFpbGFibGVDb3Vyc2VzKTtcbiAgICAgICAgdGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSB0aGlzLmRvbWFpbkNvbXBldGVuY3lGaWx0ZXIodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeScsIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5KVxuICB9XG5cbiAgZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpIHtcbiAgICAvLyBTdGFydCB3aXRoIG9yaWdpbmFsIGRhdGEgKEFJIHJlY29tbWVuZGVkIGNvdXJzZXMpXG4gICAgY29uc3QgYWxsQ291cnNlcyA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07XG4gICAgY29uc3Qgc2VlbklkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuXG4gICAgLy8gVHJhY2sgb3JpZ2luYWwgY291cnNlIGlkZW50aWZpZXJzXG4gICAgdGhpcy5vcmlnaW5hbERhdGEuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgaWYgKGNvdXJzZS5pZGVudGlmaWVyKSBzZWVuSWRlbnRpZmllcnMuYWRkKGNvdXJzZS5pZGVudGlmaWVyKTtcbiAgICAgIGlmIChjb3Vyc2UuaWQpIHNlZW5JZGVudGlmaWVycy5hZGQoY291cnNlLmlkKTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBzdWdnZXN0ZWQgY291cnNlcyAoaUdPVCBwbGF0Zm9ybSBjb3Vyc2VzKVxuICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICBjb25zdCBjb3Vyc2VJZCA9IGNvdXJzZS5pZGVudGlmaWVyIHx8IGNvdXJzZS5pZDtcbiAgICAgIGlmIChjb3Vyc2VJZCAmJiAhc2VlbklkZW50aWZpZXJzLmhhcyhjb3Vyc2VJZCkpIHtcbiAgICAgICAgYWxsQ291cnNlcy5wdXNoKGNvdXJzZSk7XG4gICAgICAgIHNlZW5JZGVudGlmaWVycy5hZGQoY291cnNlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHVzZXItYWRkZWQgY291cnNlc1xuICAgIHRoaXMudXNlckFkZGVkQ291cnNlcy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICBjb25zdCBjb3Vyc2VJZCA9IGNvdXJzZS5pZGVudGlmaWVyIHx8IGNvdXJzZS5pZDtcbiAgICAgIGlmIChjb3Vyc2VJZCAmJiAhc2VlbklkZW50aWZpZXJzLmhhcyhjb3Vyc2VJZCkpIHtcbiAgICAgICAgLy8gRW5zdXJlIHVzZXItYWRkZWQgY291cnNlcyBoYXZlIHByb3BlciBzdHJ1Y3R1cmVcbiAgICAgICAgaWYgKCFjb3Vyc2UuY291cnNlX3R5cGUpIHtcbiAgICAgICAgICBjb3Vyc2UuY291cnNlX3R5cGUgPSAnVXNlciBBZGRlZCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb3Vyc2UuaWRlbnRpZmllciAmJiBjb3Vyc2UuaWQpIHtcbiAgICAgICAgICBjb3Vyc2UuaWRlbnRpZmllciA9IGNvdXJzZS5pZDtcbiAgICAgICAgfVxuICAgICAgICBhbGxDb3Vyc2VzLnB1c2goY291cnNlKTtcbiAgICAgICAgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2VJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnZ2V0QWxsQXZhaWxhYmxlQ291cnNlcyBicmVha2Rvd246Jywge1xuICAgICAgb3JpZ2luYWxEYXRhOiB0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGgsXG4gICAgICBzdWdnZXN0ZWRDb3Vyc2VzOiB0aGlzLnN1Z2dlc3RlZENvdXJzZXMubGVuZ3RoLFxuICAgICAgdXNlckFkZGVkQ291cnNlczogdGhpcy51c2VyQWRkZWRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgIHRvdGFsQXZhaWxhYmxlOiBhbGxDb3Vyc2VzLmxlbmd0aFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ2FsbENvdXJzZXMtLScsIGFsbENvdXJzZXMpXG4gICAgYWxsQ291cnNlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtLm9yZ2FuaXNhdGlvbiAmJiBpdGVtLm9yZ2FuaXNhdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRQcm92aWRlcnMuaW5kZXhPZihpdGVtLm9yZ2FuaXNhdGlvblswXSkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycy5wdXNoKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuZnVsbENvdXJzZUxpc3QgPSBhbGxDb3Vyc2VzXG4gICAgbGV0IGlkZW50aWZpZXJzQXJyID0gW11cbiAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0Lm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWRlbnRpZmllcnNBcnIucHVzaChpdGVtPy5pZGVudGlmaWVyKVxuICAgIH0pXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFkZGl0aW9uYWxQYXJhbWV0ZXJmb3JTdWdnZXN0ZWRDb3Vyc2VzKGlkZW50aWZpZXJzQXJyKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0ICYmIHJlc3BvbnNlLnJlc3VsdC5jb250ZW50ICYmIHJlc3BvbnNlLnJlc3VsdC5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZ1bGxDb3Vyc2VMaXN0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mdWxsQ291cnNlTGlzdFtqXVsnaWRlbnRpZmllciddID09PSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnaWRlbnRpZmllciddKSB7XG4gICAgICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2xhbmd1YWdlJ10gPSByZXNwb25zZS5yZXN1bHQuY29udGVudFtpXVsnbGFuZ3VhZ2UnXVxuICAgICAgICAgICAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0W2pdWydhdmdSYXRpbmcnXSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydhdmdSYXRpbmcnXVxuICAgICAgICAgICAgICB0aGlzLmZ1bGxDb3Vyc2VMaXN0W2pdWydjb3Vyc2UnXSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWyduYW1lJ11cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0pXG4gICAgcmV0dXJuIGFsbENvdXJzZXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZWJ1aWxkIGZpbHRlcmRDb3Vyc2VzIGFycmF5IHdpdGggYWxsIGF2YWlsYWJsZSBjb3Vyc2UgdHlwZXNcbiAgICogVGhpcyBlbnN1cmVzIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgYXBwbGljYXRpb25cbiAgICovXG4gIHJlYnVpbGRGaWx0ZXJlZENvdXJzZXMoKSB7XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuXG4gICAgY29uc29sZS5sb2coJ1JlYnVpbHQgZmlsdGVyZENvdXJzZXMgd2l0aCBhbGwgY291cnNlIHR5cGVzOicsIHtcbiAgICAgIHRvdGFsOiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgIGJyZWFrZG93bjoge1xuICAgICAgICBvcmlnaW5hbDogdGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoLFxuICAgICAgICBzdWdnZXN0ZWQ6IHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGgsXG4gICAgICAgIHVzZXJBZGRlZDogdGhpcy51c2VyQWRkZWRDb3Vyc2VzLmxlbmd0aFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYmVoYXZpb3JhbEZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmICgoYz8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHx8IGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2JlaGF2aW91cmFsJykpO1xuICAgIH0pO1xuICB9XG5cbiAgYmVoYXZpb3JhbENvbXBldGVuY3lGaWx0ZXIoZGF0YTogYW55W10pOiBzdHJpbmdbXSB7XG4gICAgY29uc29sZS5sb2coJ2RhdGEtLScsIGRhdGEpXG4gICAgY29uc3QgYmVoYXZpb3JhbFRoZW1lcyA9IGRhdGFcbiAgICAgIC5maWx0ZXIoaXRlbSA9PlxuICAgICAgICBpdGVtPy50eXBlICYmXG4gICAgICAgIFsnYmVoYXZpb3JhbCcsICdiZWhhdmlvdXJhbCddLmluY2x1ZGVzKGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgLm1hcChpdGVtID0+IGAke2l0ZW0udGhlbWV9LSR7aXRlbS5zdWJfdGhlbWV9YClcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlQmVoYXZpb3JhbFRoZW1lcyA9IEFycmF5LmZyb20obmV3IFNldChiZWhhdmlvcmFsVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVCZWhhdmlvcmFsVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlQmVoYXZpb3JhbFRoZW1lcztcbiAgfVxuXG4gIGZ1bmN0aW9uYWxDb21wZXRlbmN5RmlsdGVyKGRhdGE6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBmdW5jdGlvbmFsVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydmdW5jdGlvbmFsJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gYCR7aXRlbS50aGVtZX0tJHtpdGVtLnN1Yl90aGVtZX1gKVxuICAgICAgLmZpbHRlcigodGhlbWUpOiB0aGVtZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih0aGVtZSkpOyAvLyBFbnN1cmVzIHR5cGUgc2FmZXR5XG5cbiAgICBjb25zdCB1bmlxdWVGdW5jdGlvbmFsVGhlbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGZ1bmN0aW9uYWxUaGVtZXMpKTtcblxuICAgIGNvbnNvbGUubG9nKHVuaXF1ZUZ1bmN0aW9uYWxUaGVtZXMpO1xuICAgIHJldHVybiB1bmlxdWVGdW5jdGlvbmFsVGhlbWVzO1xuXG4gICAgLy8gY29uc29sZS5sb2codW5pcXVlQ29tcGV0ZW5jeUFyZWFOYW1lcyk7XG4gIH1cblxuICBkb21haW5Db21wZXRlbmN5RmlsdGVyKGRhdGE6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBkb21haW5UaGVtZXMgPSBkYXRhXG4gICAgICAuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgaXRlbT8udHlwZSAmJlxuICAgICAgICBbJ2RvbWFpbiddLmluY2x1ZGVzKGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgLm1hcChpdGVtID0+IGAke2l0ZW0udGhlbWV9LSR7aXRlbS5zdWJfdGhlbWV9YClcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlRG9tYWluVGhlbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGRvbWFpblRoZW1lcykpO1xuXG4gICAgY29uc29sZS5sb2codW5pcXVlRG9tYWluVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlRG9tYWluVGhlbWVzO1xuXG4gICAgLy8gY29uc29sZS5sb2codW5pcXVlQ29tcGV0ZW5jeUFyZWFOYW1lcyk7XG4gIH1cblxuXG4gIGZ1bmN0aW9uYWxGaWx0ZXIoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcy5zb21lKGMgPT4gYyAmJiBjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdmdW5jdGlvbmFsJyk7XG4gICAgfSk7XG4gIH1cblxuICBkb21haW5GaWx0ZXIoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgaWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcy5zb21lKGMgPT4gYyAmJiBjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdkb21haW4nKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdhcEFuYWx5c2lzU3RhdHMoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMucGxhbkRhdGEnLCB0aGlzLnBsYW5EYXRhKVxuXG4gICAgLy8gQWx3YXlzIHVzZSBBTEwgY29tcGV0ZW5jaWVzIGZvciBjYWxjdWxhdGluZyBvdmVyYWxsIHN0YXRzXG4gICAgY29uc3QgYWxsQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXM7XG5cbiAgICAvLyBGaWx0ZXIgZm9yIGNhdGVnb3J5LXNwZWNpZmljIGNhbGN1bGF0aW9uc1xuICAgIGxldCBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzOiBhbnkgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcztcbiAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJykge1xuICAgICAgY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5zZWxlY3RlZENhdGVnb3J5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH1cblxuICAgIC8vIENvdW50IEFMTCBjb21wZXRlbmNpZXMgYnkgY2F0ZWdvcnkgKG5vdCBqdXN0IGZpbHRlcmVkIG9uZXMpXG4gICAgY29uc3QgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkgPSB7IHRvdGFsOiBhbGxDb21wZXRlbmNpZXMubGVuZ3RoLCBiZWhhdmlvdXJhbDogMCwgZnVuY3Rpb25hbDogMCwgZG9tYWluOiAwIH1cblxuICAgIC8vIElNUE9SVEFOVDogVXNlIGFsbCBhdmFpbGFibGUgY291cnNlcyBmb3IgY29uc2lzdGVudCBjb3ZlcmFnZSBjYWxjdWxhdGlvblxuICAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHdoYXQncyBhdmFpbGFibGUgaW4gdGhlIEZpbHRlciBCeSBDb21wZXRlbmN5IHNlY3Rpb25cbiAgICBjb25zdCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMgPSBbXVxuICAgIGNvbnN0IGFsbEF2YWlsYWJsZUNvdXJzZXNGb3JTdGF0cyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuXG4gICAgYWxsQXZhaWxhYmxlQ291cnNlc0ZvclN0YXRzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICBjb21wZXRlbmNpZXMuZm9yRWFjaCgobGlzdDogYW55KSA9PiB7XG4gICAgICAgIGFsbENvdXJzZUNvbXBldGVuY2llcy5wdXNoKGxpc3QpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdhbGxDb21wZXRlbmNpZXMnLCBhbGxDb21wZXRlbmNpZXMpXG4gICAgY29uc29sZS5sb2coJ2NhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMnLCBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzKVxuICAgIGNvbnNvbGUubG9nKCdhbGxDb3Vyc2VDb21wZXRlbmNpZXMnLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpXG5cbiAgICAvLyBDb3VudCBhbGwgY29tcGV0ZW5jaWVzIGJ5IHR5cGUgZm9yIHByb3BlciB0b3RhbHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbENvbXBldGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29tcGV0ZW5jeVR5cGUgPSBhbGxDb21wZXRlbmNpZXNbaV1bJ3R5cGUnXT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnNvbGUubG9nKGBDb21wZXRlbmN5ICR7aX06IHR5cGU9XCIke2NvbXBldGVuY3lUeXBlfVwiLCBkYXRhOmAsIGFsbENvbXBldGVuY2llc1tpXSk7XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHwgY29tcGV0ZW5jeVR5cGUgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgICBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnYmVoYXZpb3VyYWwnXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddICsgMVxuICAgICAgfVxuICAgICAgaWYgKGNvbXBldGVuY3lUeXBlID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgICAgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydmdW5jdGlvbmFsJ10gKyAxXG4gICAgICB9XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdkb21haW4nKSB7XG4gICAgICAgIG1hc3Rlckxpc3RCeUNhdGVnb3J5Wydkb21haW4nXSA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5Wydkb21haW4nXSArIDFcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21hc3Rlckxpc3RCeUNhdGVnb3J5IGFmdGVyIGNvdW50aW5nOicsIG1hc3Rlckxpc3RCeUNhdGVnb3J5KVxuXG4gICAgLy8gR2V0IG1hdGNoaW5nIHJlc3VsdHMgZm9yIEFMTCBjb21wZXRlbmNpZXMgKGZvciBvdmVyYWxsIGNvdmVyYWdlKVxuICAgIGNvbnN0IG92ZXJhbGxSZXN1bHQgPSB0aGlzLmdldE1hdGNoZWRDb21wZXRlbmN5U3RhdHMoYWxsQ29tcGV0ZW5jaWVzLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpO1xuXG4gICAgLy8gR2V0IG1hdGNoaW5nIHJlc3VsdHMgZm9yIGNhdGVnb3J5LXNwZWNpZmljIGNvbXBldGVuY2llcyAoZm9yIGZpbHRlcmVkIHZpZXcpXG4gICAgY29uc3QgY2F0ZWdvcnlSZXN1bHQgPSB0aGlzLmdldE1hdGNoZWRDb21wZXRlbmN5U3RhdHMoY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcywgYWxsQ291cnNlQ29tcGV0ZW5jaWVzKTtcblxuICAgIC8vIFNldCBjb21wZXRlbmN5Q292ZXJlZENvdW50IGJhc2VkIG9uIHNlbGVjdGVkIGNhdGVnb3J5IChmb3IgdGhlIGZpbHRlcmVkIG51bWJlcnMpXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCcpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ3RvdGFsJ107XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2JlaGF2aW9yYWwnXSB8fCAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IGNhdGVnb3J5UmVzdWx0WydmdW5jdGlvbmFsJ10gfHwgMDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IGNhdGVnb3J5UmVzdWx0Wydkb21haW4nXSB8fCAwO1xuICAgIH1cblxuICAgIC8vIElNUE9SVEFOVDogT3ZlcmFsbCBDb3ZlcmFnZSBzaG91bGQgQUxXQVlTIGJlIGJhc2VkIG9uIEFMTCBjb21wZXRlbmNpZXMsIG5vdCBmaWx0ZXJlZFxuICAgIGxldCB0b3RhbENvbXBldGVuY2llcyA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgLy8gQWx3YXlzIHVzZSB0b3RhbCBjb3VudFxuICAgIGxldCBvdmVyYWxsQ292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsndG90YWwnXTsgLy8gQWx3YXlzIHVzZSBvdmVyYWxsIHJlc3VsdHNcbiAgICBsZXQgbWF0aFJvdW5kID0gTWF0aC5yb3VuZCgob3ZlcmFsbENvdmVyZWRDb3VudCAvIHRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMClcbiAgICB0aGlzLm92ZXJhbGxDb3ZlcmFnZSA9IGAke21hdGhSb3VuZH0lYFxuXG4gICAgY29uc29sZS5sb2coJ092ZXJhbGwgQ292ZXJhZ2UgQ2FsY3VsYXRpb246Jywge1xuICAgICAgdG90YWxDb21wZXRlbmNpZXM6IHRvdGFsQ29tcGV0ZW5jaWVzLFxuICAgICAgb3ZlcmFsbENvdmVyZWRDb3VudDogb3ZlcmFsbENvdmVyZWRDb3VudCxcbiAgICAgIG92ZXJhbGxDb3ZlcmFnZTogdGhpcy5vdmVyYWxsQ292ZXJhZ2UsXG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnksXG4gICAgICBjb21wZXRlbmN5Q292ZXJlZENvdW50OiB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnRcbiAgICB9KTtcblxuICAgIC8vIEFsd2F5cyBjYWxjdWxhdGUgYWxsIGNhdGVnb3J5LXNwZWNpZmljIG1ldHJpY3MgcmVnYXJkbGVzcyBvZiBzZWxlY3RlZCBjYXRlZ29yeVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgZGF0YSBpcyBhdmFpbGFibGUgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBjYXRlZ29yaWVzXG4gICAgLy8gVXNlIG92ZXJhbGxSZXN1bHQgZm9yIGNvbnNpc3RlbnQgY2FsY3VsYXRpb25zIGFjcm9zcyBhbGwgY2F0ZWdvcmllc1xuICAgIHRoaXMuYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0WydiZWhhdmlvcmFsJ10gfHwgMDtcbiAgICB0aGlzLmJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcyA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddO1xuICAgIGxldCBiZWhhdmlvcmFsTWF0aFJvdW5kID0gdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMgPiAwID8gTWF0aC5yb3VuZCgodGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMCkgOiAwO1xuICAgIHRoaXMuYmVoYXZpb3JhbENvdmVyYWdlID0gYCR7YmVoYXZpb3JhbE1hdGhSb3VuZH0lYDtcblxuICAgIHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0WydmdW5jdGlvbmFsJ10gfHwgMDtcbiAgICB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA9IG1hc3Rlckxpc3RCeUNhdGVnb3J5WydmdW5jdGlvbmFsJ107XG4gICAgbGV0IGZ1bmN0aW9uYWxNYXRoUm91bmQgPSB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA+IDAgPyBNYXRoLnJvdW5kKCh0aGlzLmZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5mdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5mdW5jdGlvbmFsQ292ZXJhZ2UgPSBgJHtmdW5jdGlvbmFsTWF0aFJvdW5kfSVgO1xuXG4gICAgdGhpcy5kb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsnZG9tYWluJ10gfHwgMDtcbiAgICB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddO1xuICAgIGxldCBkb21haW5NYXRoUm91bmQgPSB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID4gMCA/IE1hdGgucm91bmQoKHRoaXMuZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5kb21haW5Db3ZlcmFnZSA9IGAke2RvbWFpbk1hdGhSb3VuZH0lYDtcblxuICAgIGNvbnNvbGUubG9nKCdBbGwgY2F0ZWdvcnkgbWV0cmljcyBjYWxjdWxhdGVkOicsIHtcbiAgICAgIGJlaGF2aW9yYWw6IHsgY292ZXJlZDogdGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5iZWhhdmlvcmFsQ292ZXJhZ2UgfSxcbiAgICAgIGZ1bmN0aW9uYWw6IHsgY292ZXJlZDogdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5mdW5jdGlvbmFsQ292ZXJhZ2UgfSxcbiAgICAgIGRvbWFpbjogeyBjb3ZlcmVkOiB0aGlzLmRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQsIHRvdGFsOiB0aGlzLmRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzLCBjb3ZlcmFnZTogdGhpcy5kb21haW5Db3ZlcmFnZSB9LFxuICAgICAgb3ZlcmFsbDogeyBjb3ZlcmVkOiBvdmVyYWxsQ292ZXJlZENvdW50LCB0b3RhbDogdG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLm92ZXJhbGxDb3ZlcmFnZSB9LFxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogdGhpcy5zZWxlY3RlZENhdGVnb3J5LFxuICAgICAgY29tcGV0ZW5jeUNvdmVyZWRDb3VudEZvckNhdGVnb3J5OiB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnRcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygnT3ZlcmFsbCBSZXN1bHQ6Jywgb3ZlcmFsbFJlc3VsdCk7XG4gICAgY29uc29sZS5sb2coJ0NhdGVnb3J5IFJlc3VsdDonLCBjYXRlZ29yeVJlc3VsdCk7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5JywgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkpXG4gICAgdGhpcy5iZWhhdmlvdXJhbE5vdE1hdGNoZWQgPSB0aGlzLmdldENvbXBldGVuY3lCeUNhdGVnb3J5Tm90TWF0Y2hpbmcoJ2JlaGF2aW9yYWwnKVxuICAgIHRoaXMuZnVuY3Rpb25hbE5vdE1hdGNoZWQgPSB0aGlzLmdldENvbXBldGVuY3lCeUNhdGVnb3J5Tm90TWF0Y2hpbmcoJ2Z1bmN0aW9uYWwnKVxuICAgIHRoaXMuZG9tYWluTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnZG9tYWluJylcblxuICAgIHRoaXMuZ2V0QmVoYXZpb3VyYWxNYXRjaGVkKClcbiAgICB0aGlzLmdldEZ1bmN0aW9uYWxNYXRjaGVkKClcbiAgICB0aGlzLmdldERvbWFpbk1hdGNoZWQoKVxuICB9XG5cbiAgZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhwcmltYXJ5QXJyYXk6IGFueVtdLCBzZWNvbmRhcnlBcnJheTogYW55W10pIHtcbiAgICAvLyBDb252ZXJ0IGJvdGggYXJyYXlzIHRvIGVuc3VyZSBjb25zaXN0ZW50IGNhc2luZ1xuICAgIGNvbnN0IGNvdW50czogYW55ID0ge1xuICAgICAgYmVoYXZpb3JhbDogMCxcbiAgICAgIGZ1bmN0aW9uYWw6IDAsXG4gICAgICBkb21haW46IDAsXG4gICAgICB0b3RhbDogMFxuICAgIH07XG5cbiAgICAvLyBDbGVhciB0aGUgY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5IGFycmF5IGZvciBmcmVzaCBjYWxjdWxhdGlvblxuICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5ID0gW107XG5cbiAgICAvLyBTZXQgdG8ga2VlcCB0cmFjayBvZiB1bmlxdWUgbWF0Y2hlc1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHByaW1hcnkgb2YgcHJpbWFyeUFycmF5KSB7XG4gICAgICBjb25zdCB0eXBlS2V5ID0gcHJpbWFyeS50eXBlPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHRoZW1lS2V5ID0gcHJpbWFyeS50aGVtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCBzdWJUaGVtZUtleSA9IHByaW1hcnkuc3ViX3RoZW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgbGV0IGlzTWF0Y2hlZCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IHNlY29uZGFyeSBvZiBzZWNvbmRhcnlBcnJheSkge1xuICAgICAgICAvLyBOb3JtYWxpemUgc2Vjb25kYXJ5IGtleXNcbiAgICAgICAgbGV0IHNlY1R5cGUgPSBzZWNvbmRhcnk/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGxldCBzZWNUaGVtZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeVRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGxldCBzZWNTdWJUaGVtZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeVN1YlRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgLy8gRml4IGZvciBkYXRhIGluY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKHNlY1R5cGUgPT09ICdiZWhhdmlvdXJhbCcpIHNlY1R5cGUgPSAnYmVoYXZpb3JhbCc7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVuaXF1ZSBtYXRjaCBrZXkgZm9yIHByaW1hcnkgY29tcGV0ZW5jeVxuICAgICAgICBjb25zdCBtYXRjaEtleSA9IGAke3R5cGVLZXl9fCR7dGhlbWVLZXl9fCR7c3ViVGhlbWVLZXl9YDtcblxuICAgICAgICAvLyBFbmhhbmNlZCBjcm9zcy1tYXRjaGluZyBsb2dpYyBhcyByZXF1ZXN0ZWQ6XG4gICAgICAgIC8vIDEuIFJvbGUgbWFwcGluZyBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgLy8gMi4gUm9sZSBtYXBwaW5nIFN1YiBUaGVtZSB2cyBDb3Vyc2UgU3ViIFRoZW1lICBcbiAgICAgICAgLy8gMy4gUm9sZSBtYXBwaW5nIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWVcbiAgICAgICAgLy8gNC4gUm9sZSBtYXBwaW5nIFN1YiBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgY29uc3QgdGhlbWVUb1RoZW1lTWF0Y2ggPSB0aGVtZUtleSA9PT0gc2VjVGhlbWU7XG4gICAgICAgIGNvbnN0IHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoID0gc3ViVGhlbWVLZXkgPT09IHNlY1N1YlRoZW1lO1xuICAgICAgICBjb25zdCB0aGVtZVRvU3ViVGhlbWVNYXRjaCA9IHRoZW1lS2V5ID09PSBzZWNTdWJUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1RoZW1lTWF0Y2ggPSBzdWJUaGVtZUtleSA9PT0gc2VjVGhlbWU7XG5cbiAgICAgICAgbGV0IG1hdGNoVHlwZSA9ICcnO1xuICAgICAgICBsZXQgaXNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0eXBlS2V5ID09PSBzZWNUeXBlICYmICFzZWVuLmhhcyhtYXRjaEtleSkpIHtcbiAgICAgICAgICBpZiAodGhlbWVUb1RoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdUaGVtZS10by1UaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVtZVRvU3ViVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVN1YlRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3ViVGhlbWVUb1RoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1UaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV06YCwge1xuICAgICAgICAgICAgcm9sZU1hcHBpbmc6IHsgdHlwZTogdHlwZUtleSwgdGhlbWU6IHRoZW1lS2V5LCBzdWJUaGVtZTogc3ViVGhlbWVLZXkgfSxcbiAgICAgICAgICAgIGNvdXJzZTogeyB0eXBlOiBzZWNUeXBlLCB0aGVtZTogc2VjVGhlbWUsIHN1YlRoZW1lOiBzZWNTdWJUaGVtZSB9LFxuICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIFN0b3JlIG1hdGNoZWQgY29tcGV0ZW5jeSBpbmZvIGZvciBsYXRlciB1c2VcbiAgICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgICAgb2JqW3R5cGVLZXldID0gW3RoZW1lS2V5XTsgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIHRoZW1lLCBub3QgdGhlIGNvdXJzZSB0aGVtZVxuICAgICAgICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5LnB1c2gob2JqKTtcbiAgICAgICAgICBzZWVuLmFkZChtYXRjaEtleSk7XG4gICAgICAgICAgbWF0Y2hlZENvbXBldGVuY2llcy5hZGQodGhlbWVLZXkpOyAvLyBUcmFjayBtYXRjaGVkIHRoZW1lc1xuICAgICAgICAgIGlzTWF0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoY291bnRzLmhhc093blByb3BlcnR5KHR5cGVLZXkpKSB7XG4gICAgICAgICAgICBjb3VudHNbdHlwZUtleV0rKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRzW3R5cGVLZXldID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb3VudHMudG90YWwrKztcbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBsb29raW5nIGZvciBtYXRjaGVzIGZvciB0aGlzIHByaW1hcnkgY29tcGV0ZW5jeVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50cztcbiAgfVxuICBnZXRDb21wZXRlbmN5QnlDYXRlZ29yeU5vdE1hdGNoaW5nKGNhdGVnb3J5VHlwZSkge1xuICAgIC8vIEdldCBhbGwgY29tcGV0ZW5jaWVzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSByb2xlIG1hcHBpbmdcbiAgICBsZXQgYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3R5cGUnXT8udG9Mb3dlckNhc2UoKSA9PT0gY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLnB1c2godGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3RoZW1lJ10/LnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgbWF0Y2hlZCBjb21wZXRlbmNpZXMgZm9yIHRoaXMgY2F0ZWdvcnkgZnJvbSBjb3Vyc2VzXG4gICAgbGV0IG1hdGNoZWRDb21wZXRlbmNpZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV1bY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAvLyBFeHRyYWN0IG1hdGNoZWQgdGhlbWVzIGZyb20gY291cnNlIGNvbXBldGVuY2llc1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeVtpXVtjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCldLmZvckVhY2godGhlbWUgPT4ge1xuICAgICAgICAgIGlmICh0aGVtZSkge1xuICAgICAgICAgICAgbWF0Y2hlZENvbXBldGVuY2llcy5wdXNoKHRoZW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVuaGFuY2VkIG1hdGNoaW5nOiBjaGVjayBib3RoIHRoZW1lIGFuZCBzdWJ0aGVtZSBmcm9tIGNvdXJzZXMgYWdhaW5zdCBGUkFDIGNvbXBldGVuY2llc1xuICAgIC8vIElNUE9SVEFOVDogVXNlIGFsbCBhdmFpbGFibGUgY291cnNlcyBmb3IgY29uc2lzdGVudCBjb3ZlcmFnZSBjYWxjdWxhdGlvblxuICAgIGNvbnN0IGFsbENvdXJzZXNGb3JNYXRjaGluZyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuXG4gICAgYWxsQ291cnNlc0Zvck1hdGNoaW5nLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICBjb21wZXRlbmNpZXMuZm9yRWFjaCgoY29tcDogYW55KSA9PiB7XG4gICAgICAgIGxldCBzZWNUeXBlID0gY29tcD8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlY1R5cGUgPT09ICdiZWhhdmlvdXJhbCcpIHNlY1R5cGUgPSAnYmVoYXZpb3JhbCc7XG5cbiAgICAgICAgaWYgKHNlY1R5cGUgPT09IGNhdGVnb3J5VHlwZT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbnN0IGNvdXJzZVRoZW1lID0gY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBjb3Vyc2VTdWJUaGVtZSA9IGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBhbnkgRlJBQyBjb21wZXRlbmN5IG1hdGNoZXMgdGhpcyBjb3Vyc2UgY29tcGV0ZW5jeVxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYWNDb21wID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV07XG4gICAgICAgICAgICBpZiAoZnJhY0NvbXBbJ3R5cGUnXT8udG9Mb3dlckNhc2UoKSA9PT0gY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZyYWNUaGVtZSA9IGZyYWNDb21wWyd0aGVtZSddPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgZnJhY1N1YlRoZW1lID0gZnJhY0NvbXBbJ3N1Yl90aGVtZSddPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgICAgICAgICAvLyBFbmhhbmNlZCBjcm9zcy1tYXRjaGluZyBsb2dpYyAoc2FtZSBhcyBpbiBnZXRNYXRjaGVkQ29tcGV0ZW5jeVN0YXRzKTpcbiAgICAgICAgICAgICAgLy8gMS4gQ291cnNlIFRoZW1lIHZzIEZSQUMgVGhlbWVcbiAgICAgICAgICAgICAgLy8gMi4gQ291cnNlIFN1YiBUaGVtZSB2cyBGUkFDIFN1YiBUaGVtZSAgXG4gICAgICAgICAgICAgIC8vIDMuIENvdXJzZSBUaGVtZSB2cyBGUkFDIFN1YiBUaGVtZVxuICAgICAgICAgICAgICAvLyA0LiBDb3Vyc2UgU3ViIFRoZW1lIHZzIEZSQUMgVGhlbWVcbiAgICAgICAgICAgICAgY29uc3QgY291cnNlVGhlbWVUb0ZyYWNUaGVtZSA9IGNvdXJzZVRoZW1lID09PSBmcmFjVGhlbWU7XG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVN1YlRoZW1lVG9GcmFjU3ViVGhlbWUgPSBjb3Vyc2VTdWJUaGVtZSA9PT0gZnJhY1N1YlRoZW1lO1xuICAgICAgICAgICAgICBjb25zdCBjb3Vyc2VUaGVtZVRvRnJhY1N1YlRoZW1lID0gY291cnNlVGhlbWUgPT09IGZyYWNTdWJUaGVtZTtcbiAgICAgICAgICAgICAgY29uc3QgY291cnNlU3ViVGhlbWVUb0ZyYWNUaGVtZSA9IGNvdXJzZVN1YlRoZW1lID09PSBmcmFjVGhlbWU7XG5cbiAgICAgICAgICAgICAgaWYgKGNvdXJzZVRoZW1lVG9GcmFjVGhlbWUgfHwgY291cnNlU3ViVGhlbWVUb0ZyYWNTdWJUaGVtZSB8fFxuICAgICAgICAgICAgICAgIGNvdXJzZVRoZW1lVG9GcmFjU3ViVGhlbWUgfHwgY291cnNlU3ViVGhlbWVUb0ZyYWNUaGVtZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1hdGNoVHlwZSA9ICcnO1xuICAgICAgICAgICAgICAgIGlmIChjb3Vyc2VUaGVtZVRvRnJhY1RoZW1lKSBtYXRjaFR5cGUgPSAnQ291cnNlVGhlbWUtdG8tRlJBQ1RoZW1lJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3Vyc2VTdWJUaGVtZVRvRnJhY1N1YlRoZW1lKSBtYXRjaFR5cGUgPSAnQ291cnNlU3ViVGhlbWUtdG8tRlJBQ1N1YlRoZW1lJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3Vyc2VUaGVtZVRvRnJhY1N1YlRoZW1lKSBtYXRjaFR5cGUgPSAnQ291cnNlVGhlbWUtdG8tRlJBQ1N1YlRoZW1lJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3Vyc2VTdWJUaGVtZVRvRnJhY1RoZW1lKSBtYXRjaFR5cGUgPSAnQ291cnNlU3ViVGhlbWUtdG8tRlJBQ1RoZW1lJztcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGDinIUgQ09NUEVURU5DWSBNQVRDSCBGT1VORCBbJHttYXRjaFR5cGV9XSBmb3IgJHtjYXRlZ29yeVR5cGV9OmAsIHtcbiAgICAgICAgICAgICAgICAgIGNvdXJzZTogeyB0aGVtZTogY291cnNlVGhlbWUsIHN1YlRoZW1lOiBjb3Vyc2VTdWJUaGVtZSB9LFxuICAgICAgICAgICAgICAgICAgZnJhYzogeyB0aGVtZTogZnJhY1RoZW1lLCBzdWJUaGVtZTogZnJhY1N1YlRoZW1lIH0sXG4gICAgICAgICAgICAgICAgICBtYXRjaFR5cGU6IG1hdGNoVHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbWF0Y2hlZENvbXBldGVuY2llcy5wdXNoKGZyYWNUaGVtZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZvdW5kIGEgbWF0Y2gsIG1vdmUgdG8gbmV4dCBjb3Vyc2UgY29tcGV0ZW5jeVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIGZyb20gbWF0Y2hlZCBjb21wZXRlbmNpZXNcbiAgICBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gWy4uLm5ldyBTZXQobWF0Y2hlZENvbXBldGVuY2llcyldO1xuXG4gICAgY29uc29sZS5sb2coYFxcbj09PSAke2NhdGVnb3J5VHlwZS50b1VwcGVyQ2FzZSgpfSBDT01QRVRFTkNZIE1BVENISU5HID09PWApO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBBbGwgRlJBQyBjb21wZXRlbmNpZXM6YCwgYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMpO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBNYXRjaGVkIGZyb20gY291cnNlczpgLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgICBjb25zb2xlLmxvZyhgJHtjYXRlZ29yeVR5cGV9IC0gTWF0Y2ggcmF0ZTogJHttYXRjaGVkQ29tcGV0ZW5jaWVzLmxlbmd0aH0vJHthbGxDYXRlZ29yeUNvbXBldGVuY2llcy5sZW5ndGh9ICgke01hdGgucm91bmQoKG1hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RoIC8gYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMubGVuZ3RoKSAqIDEwMCl9JSlgKTtcblxuICAgIC8vIFJldHVybiB1bm1hdGNoZWQgY29tcGV0ZW5jaWVzICh0aG9zZSBpbiByb2xlIG1hcHBpbmcgYnV0IG5vdCBjb3ZlcmVkIGJ5IGNvdXJzZXMpXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZVN0cmluZ0FycmF5cyhhbGxDYXRlZ29yeUNvbXBldGVuY2llcywgbWF0Y2hlZENvbXBldGVuY2llcyk7XG4gIH1cblxuICBjb21wYXJlU3RyaW5nQXJyYXlzKGFycjE6IHN0cmluZ1tdLCBhcnIyOiBzdHJpbmdbXSkge1xuICAgIGNvbnNvbGUubG9nKCdBbGwgY29tcGV0ZW5jaWVzIGluIGNhdGVnb3J5OicsIGFycjEpO1xuICAgIGNvbnNvbGUubG9nKCdNYXRjaGVkIGNvbXBldGVuY2llcyBmcm9tIGNvdXJzZXM6JywgYXJyMik7XG5cbiAgICAvLyBSZXR1cm4gaXRlbXMgaW4gYXJyMSB0aGF0IGFyZSBOT1QgaW4gYXJyMiAodW5tYXRjaGVkIGNvbXBldGVuY2llcylcbiAgICBjb25zdCB1bm1hdGNoZWQgPSBhcnIxLmZpbHRlcihpdGVtID0+ICFhcnIyLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICBjb25zb2xlLmxvZygnVW5tYXRjaGVkIGNvbXBldGVuY2llczonLCB1bm1hdGNoZWQpO1xuXG4gICAgcmV0dXJuIHVubWF0Y2hlZDtcbiAgfVxuXG4gIGFkZENvdXJzZShtaXNzaW5nQ29tcGV0ZW5jeT86IHN0cmluZywgY29tcGV0ZW5jeVR5cGU/OiBzdHJpbmcpIHtcbiAgICBsZXQgZGlhbG9nRGF0YSA9IHsgLi4udGhpcy5wbGFuRGF0YSB9O1xuXG4gICAgLy8gSWYgY29tcGV0ZW5jeSBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZCwgYWRkIHRoZW0gdG8gdGhlIGRpYWxvZyBkYXRhXG4gICAgaWYgKG1pc3NpbmdDb21wZXRlbmN5ICYmIGNvbXBldGVuY3lUeXBlKSB7XG4gICAgICAvLyBQYXJzZSB0aGUgdGhlbWUgZnJvbSB0aGUgbWlzc2luZyBjb21wZXRlbmN5IHN0cmluZyAoYXNzdW1lcyBmb3JtYXQgXCJ0aGVtZS1zdWJ0aGVtZVwiIG9yIGp1c3QgXCJ0aGVtZVwiKVxuICAgICAgY29uc3QgdGhlbWUgPSBtaXNzaW5nQ29tcGV0ZW5jeS50cmltKCk7XG5cbiAgICAgIGRpYWxvZ0RhdGEucHJlZmlsbENvbXBldGVuY3kgPSB7XG4gICAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgICB0aGVtZTogdGhlbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRDb3Vyc2VDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnMTAwMHB4JyxcbiAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICBwYW5lbENsYXNzOiAndmlldy1jYnAtcGxhbi1wb3B1cCcsXG4gICAgICBtaW5IZWlnaHQ6ICc0MDBweCcsICAgICAgICAgIC8vIFNldCBtaW5pbXVtIGhlaWdodFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsICAgICAgICAgICAvLyBQcmV2ZW50IGl0IGZyb20gZ29pbmcgYmV5b25kIHZpZXdwb3J0XG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUgLy8gT3B0aW9uYWw6IHByZXZlbnQgY2xvc2luZyB3aXRoIG91dHNpZGUgY2xpY2tcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIGFkZGVkIHN1Y2Nlc3NmdWxseSEgUmVmcmVzaGluZyBkYXRhLi4uJyk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB1c2VyIGNvdXJzZXMgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgY291cnNlXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggZ2FwIGFuYWx5c2lzIHdpdGggdGhlIGxhdGVzdCBkYXRhXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnR2FwIGFuYWx5c2lzIHJlZnJlc2hlZCBhZnRlciBjb3Vyc2UgYWRkaXRpb24nKTtcbiAgICAgICAgfSwgNTAwKTsgLy8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIGRhdGEgaXMgbG9hZGVkXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZSh0aGVtZUl0ZW0pIHtcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSB0aGVtZUl0ZW07XG4gICAgbGV0IHRoZW1lTmFtZSA9IHRoZW1lSXRlbT8uc3BsaXQoXCItXCIpWzBdPy50cmltKCk7XG4gICAgbGV0IHN1YlRoZW1lTmFtZSA9IHRoZW1lSXRlbT8uc3BsaXQoXCItXCIpWzFdPy50cmltKCk7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsdGVyaW5nIGJ5IHRoZW1lOicsIHRoZW1lTmFtZSwgJ3N1YlRoZW1lOicsIHN1YlRoZW1lTmFtZSwgJ1RhYiBpbmRleDonLCB0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXgpO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbXBldGVuY3kgdHlwZSBiYXNlZCBvbiB0aGUgYWN0aXZlIHRhYlxuICAgIGxldCBjb21wZXRlbmN5VHlwZSA9ICcnO1xuICAgIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDEpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ2JlaGF2aW9yYWwnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAyKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdmdW5jdGlvbmFsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMykge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnZG9tYWluJztcbiAgICB9XG5cbiAgICAvLyBHZXQgYWxsIGF2YWlsYWJsZSBjb3Vyc2VzIHVzaW5nIHRoZSBoZWxwZXIgbWV0aG9kXG4gICAgY29uc3QgYWxsQXZhaWxhYmxlQ291cnNlcyA9IHRoaXMuZ2V0QWxsQXZhaWxhYmxlQ291cnNlcygpO1xuICAgIGNvbnNvbGUubG9nKCdUb3RhbCBjb3Vyc2VzIHRvIGZpbHRlciBmcm9tOicsIGFsbEF2YWlsYWJsZUNvdXJzZXMubGVuZ3RoKTtcblxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxBdmFpbGFibGVDb3Vyc2VzLmZpbHRlcihjb3Vyc2UgPT4ge1xuICAgICAgaWYgKCFjb3Vyc2UpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcGV0ZW5jaWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBGaWx0ZXIgYnkgY29tcGV0ZW5jeSB0eXBlIGFuZCB0aGVtZS9zdWJ0aGVtZVxuICAgICAgcmV0dXJuIGNvbXBldGVuY2llcy5zb21lKGNvbXAgPT4ge1xuICAgICAgICBpZiAoIWNvbXApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBDaGVjayBjb21wZXRlbmN5IHR5cGUgbWF0Y2hlcyBjdXJyZW50IHRhYlxuICAgICAgICBsZXQgY29tcFR5cGUgPSBjb21wPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChjb21wVHlwZSA9PT0gJ2JlaGF2aW91cmFsJykgY29tcFR5cGUgPSAnYmVoYXZpb3JhbCc7IC8vIE5vcm1hbGl6ZSBzcGVsbGluZ1xuXG4gICAgICAgIGlmIChjb21wVHlwZSAhPT0gY29tcGV0ZW5jeVR5cGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBDaGVjayBjcm9zcy1tYXRjaGluZyBsaWtlIGdhcCBhbmFseXNpczogdGhlbWUgdnMgc3VidGhlbWUgYW5kIHN1YnRoZW1lIHZzIHRoZW1lXG4gICAgICAgIGNvbnN0IGNvbXBUaGVtZSA9IGNvbXA/LmNvbXBldGVuY3lUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKTtcbiAgICAgICAgY29uc3QgY29tcFN1YlRoZW1lID0gY29tcD8uY29tcGV0ZW5jeVN1YlRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKT8udHJpbSgpO1xuICAgICAgICBjb25zdCBzZWFyY2hUaGVtZSA9IHRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoU3ViVGhlbWUgPSBzdWJUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY3Jvc3MtbWF0Y2hpbmcgbG9naWMgbGlrZSBnYXAgYW5hbHlzaXM6XG4gICAgICAgIC8vIDEuIFNlbGVjdGVkIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICAvLyAyLiBTZWxlY3RlZCBTdWIgVGhlbWUgdnMgQ291cnNlIFN1YiBUaGVtZSAgXG4gICAgICAgIC8vIDMuIFNlbGVjdGVkIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWVcbiAgICAgICAgLy8gNC4gU2VsZWN0ZWQgU3ViIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICBjb25zdCB0aGVtZVRvVGhlbWVNYXRjaCA9IHNlYXJjaFRoZW1lICYmIGNvbXBUaGVtZSA9PT0gc2VhcmNoVGhlbWU7XG4gICAgICAgIGNvbnN0IHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoID0gc2VhcmNoU3ViVGhlbWUgJiYgY29tcFN1YlRoZW1lID09PSBzZWFyY2hTdWJUaGVtZTtcbiAgICAgICAgY29uc3QgdGhlbWVUb1N1YlRoZW1lTWF0Y2ggPSBzZWFyY2hUaGVtZSAmJiBjb21wU3ViVGhlbWUgPT09IHNlYXJjaFRoZW1lO1xuICAgICAgICBjb25zdCBzdWJUaGVtZVRvVGhlbWVNYXRjaCA9IHNlYXJjaFN1YlRoZW1lICYmIGNvbXBUaGVtZSA9PT0gc2VhcmNoU3ViVGhlbWU7XG5cbiAgICAgICAgY29uc3QgaXNNYXRjaCA9IHRoZW1lVG9UaGVtZU1hdGNoIHx8IHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoIHx8IHRoZW1lVG9TdWJUaGVtZU1hdGNoIHx8IHN1YlRoZW1lVG9UaGVtZU1hdGNoO1xuXG4gICAgICAgIC8vIExvZyBtYXRjaGVzIGZvciBkZWJ1Z2dpbmcgKHNpbWlsYXIgdG8gZ2FwIGFuYWx5c2lzKVxuICAgICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICAgIGxldCBtYXRjaFR5cGUgPSAnJztcbiAgICAgICAgICBpZiAodGhlbWVUb1RoZW1lTWF0Y2gpIG1hdGNoVHlwZSA9ICdUaGVtZS10by1UaGVtZSc7XG4gICAgICAgICAgZWxzZSBpZiAoc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2gpIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1TdWJUaGVtZSc7XG4gICAgICAgICAgZWxzZSBpZiAodGhlbWVUb1N1YlRoZW1lTWF0Y2gpIG1hdGNoVHlwZSA9ICdUaGVtZS10by1TdWJUaGVtZSc7XG4gICAgICAgICAgZWxzZSBpZiAoc3ViVGhlbWVUb1RoZW1lTWF0Y2gpIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1UaGVtZSc7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhg4pyFIEZJTFRFUiBNQVRDSCBGT1VORCBbJHttYXRjaFR5cGV9XTpgLCB7XG4gICAgICAgICAgICBzZWxlY3RlZDogeyB0aGVtZTogc2VhcmNoVGhlbWUsIHN1YlRoZW1lOiBzZWFyY2hTdWJUaGVtZSB9LFxuICAgICAgICAgICAgY291cnNlOiB7IHR5cGU6IGNvbXBUeXBlLCB0aGVtZTogY29tcFRoZW1lLCBzdWJUaGVtZTogY29tcFN1YlRoZW1lIH0sXG4gICAgICAgICAgICBtYXRjaFR5cGU6IG1hdGNoVHlwZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWF0Y2ggaWYgYW55IG9mIHRoZSBjcm9zcy1tYXRjaGluZyBjb25kaXRpb25zIGFyZSBtZXRcbiAgICAgICAgcmV0dXJuIGlzTWF0Y2g7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJlZCBjb3Vyc2VzIGZvciB0aGVtZTonLCB0aGVtZU5hbWUsICdDb3VudDonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCk7XG4gICAgY29uc29sZS5sb2coJ0ZpbHRlcmVkIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcy5tYXAoYyA9PiBjLm5hbWUgfHwgYy5jb3Vyc2UpKTtcbiAgfVxuXG4gIGNsZWFyVGhlbWVGaWx0ZXIoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyID0gJyc7XG4gICAgLy8gUmVzZXQgdG8gY2F0ZWdvcnkgZmlsdGVyZWQgY291cnNlcyBieSBjYWxsaW5nIHRoZSB0YWIgY2hhbmdlIG1ldGhvZFxuICAgIHRoaXMub25Jbm5lclRhYkNoYW5nZSh7XG4gICAgICBpbmRleDogdGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4LFxuICAgICAgdGFiOiB7IHRleHRMYWJlbDogdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQgfVxuICAgIH0gYXMgYW55KTtcbiAgICBjb25zb2xlLmxvZygnVGhlbWUgZmlsdGVyIGNsZWFyZWQsIHNob3dpbmcgYWxsIGNvdXJzZXMgZm9yIGNhdGVnb3J5OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVUZXh0KTtcbiAgfVxuXG4gIGlzVGhlbWVTZWxlY3RlZCh0aGVtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9PT0gdGhlbWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvdXJzZSBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0aGVtZSBmaWx0ZXIgd2l0aCBwcmVmaWxsZWQgY29tcGV0ZW5jeSBkYXRhXG4gICAqL1xuICBhZGRDb3Vyc2VGb3JTZWxlY3RlZFRoZW1lKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIHRoZW1lIHNlbGVjdGVkIGZvciBhZGRpbmcgY291cnNlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdGhlbWUgYW5kIHN1Yi10aGVtZSBmcm9tIHNlbGVjdGVkVGhlbWVGaWx0ZXIgKGZvcm1hdDogXCJUaGVtZSAtIFN1YlRoZW1lXCIpXG4gICAgY29uc3QgdGhlbWVQYXJ0cyA9IHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlci5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHRoZW1lID0gdGhlbWVQYXJ0c1swXT8udHJpbSgpO1xuICAgIGNvbnN0IHN1YlRoZW1lID0gdGhlbWVQYXJ0c1sxXT8udHJpbSgpO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbXBldGVuY3kgdHlwZSBiYXNlZCBvbiB0aGUgYWN0aXZlIHRhYlxuICAgIC8vIE1hcCB0aGUgdGFiIGxhYmVscyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IEFkZENvdXJzZUNvbXBvbmVudFxuICAgIGxldCBjb21wZXRlbmN5VHlwZSA9ICcnO1xuICAgIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDEpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0JlaGF2aW9yYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJiZWhhdmlvdXJhbFwiXG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDIpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0Z1bmN0aW9uYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJmdW5jdGlvbmFsXCJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMykge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJzsgLy8gVGFiIGxhYmVsIGlzIFwiZG9tYWluXCJcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVGFiIG1hcHBpbmcgLSBpbm5lclRhYkFjdGl2ZUluZGV4OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCxcbiAgICAgICdpbm5lclRhYkFjdGl2ZVRleHQ6JywgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQsXG4gICAgICAnbWFwcGVkIGNvbXBldGVuY3lUeXBlOicsIGNvbXBldGVuY3lUeXBlKTtcblxuICAgIGNvbnNvbGUubG9nKCdBZGRpbmcgY291cnNlIGZvciBtaXNzaW5nIGNvbXBldGVuY3k6Jywge1xuICAgICAgY29tcGV0ZW5jeVR5cGUsXG4gICAgICB0aGVtZSxcbiAgICAgIHN1YlRoZW1lLFxuICAgICAgc2VsZWN0ZWRUaGVtZUZpbHRlcjogdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGRhdGEgd2l0aCBwcmVmaWxsZWQgY29tcGV0ZW5jeSBpbmZvcm1hdGlvblxuICAgIGxldCBkaWFsb2dEYXRhID0geyAuLi50aGlzLnBsYW5EYXRhIH07XG4gICAgZGlhbG9nRGF0YS5wcmVmaWxsQ29tcGV0ZW5jeSA9IHtcbiAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgc3ViVGhlbWU6IHN1YlRoZW1lIHx8ICcnIC8vIEluY2x1ZGUgc3ViLXRoZW1lIGlmIGF2YWlsYWJsZVxuICAgIH07XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZENvdXJzZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIGFkZGVkIHN1Y2Nlc3NmdWxseSBmb3IgY29tcGV0ZW5jeSEgUmVmcmVzaGluZyBkYXRhLi4uJyk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB1c2VyIGNvdXJzZXMgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgY291cnNlXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBnYXAgYW5hbHlzaXMgYWZ0ZXIgY291cnNlIGFkZGl0aW9uXG4gICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldER1cmF0aW9uKHRpbWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuY29udmVydCh0aW1lKTtcbiAgfVxuXG5cbiAgZ2V0QmVoYXZpb3VyYWxNYXRjaGVkKCkge1xuICAgIHRoaXMuYmVoYXZpb3VyYWxNYXRjaGVkID0gW11cbiAgICBjb25zb2xlLmxvZygndGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMnLCB0aGlzLnBsYW5EYXRhKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZCcsIHRoaXMuYmVoYXZpb3VyYWxOb3RNYXRjaGVkKVxuICAgIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8udHlwZSA9PT0gJ0JlaGF2aW9yYWwnICYmIHRoaXMuYmVoYXZpb3VyYWxOb3RNYXRjaGVkLmluZGV4T2YoaXRlbT8udGhlbWU/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICB0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC0tJywgdGhpcy5iZWhhdmlvdXJhbE1hdGNoZWQpXG4gIH1cblxuICBnZXRGdW5jdGlvbmFsTWF0Y2hlZCgpIHtcbiAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkID0gW11cbiAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0/LnR5cGUgPT09ICdGdW5jdGlvbmFsJyAmJiB0aGlzLmZ1bmN0aW9uYWxOb3RNYXRjaGVkLmluZGV4T2YoaXRlbT8udGhlbWU/LnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkXG4gIH1cblxuICBnZXREb21haW5NYXRjaGVkKCkge1xuICAgIHRoaXMuZG9tYWluTWF0Y2hlZCA9IFtdXG4gICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtPy50eXBlID09PSAnRG9tYWluJyAmJiB0aGlzLmRvbWFpbk5vdE1hdGNoZWQuaW5kZXhPZihpdGVtPy50aGVtZT8udG9Mb3dlckNhc2UoKSkgPCAwKSB7XG4gICAgICAgIHRoaXMuZG9tYWluTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zb2xlLmxvZygndGhpcy5kb21haW5NYXRjaGVkLS0nLCB0aGlzLmRvbWFpbk1hdGNoZWQpXG4gIH1cblxuICBkb3dubG9hZFBERigpIHtcbiAgICB0aGlzLmlzUERGRG93bmxvYWQgPSB0cnVlXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnBkZkNvbnRlbnQubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIFdhaXQgZm9yIGltYWdlcyB0byBsb2FkXG4gICAgY29uc3QgaW1hZ2VzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IEFycmF5LmZyb20oaW1hZ2VzKS5tYXAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGltZy5jb21wbGV0ZSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gaW1nLm9ubG9hZCA9IHJlc29sdmUpO1xuICAgIH0pO1xuXG4gICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgbWFyZ2luOiAwLjIwLFxuICAgICAgICBmaWxlbmFtZTogJ0dhcCBBbmFseXNpcy5wZGYnLFxuICAgICAgICBpbWFnZTogeyB0eXBlOiAnanBlZycsIHF1YWxpdHk6IDAuOTggfSxcbiAgICAgICAgaHRtbDJjYW52YXM6IHtcbiAgICAgICAgICBzY2FsZTogMixcbiAgICAgICAgICB1c2VDT1JTOiB0cnVlLFxuICAgICAgICAgIHNjcm9sbFk6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIGpzUERGOiB7XG4gICAgICAgICAgdW5pdDogJ2luJyxcbiAgICAgICAgICBmb3JtYXQ6ICdhNCcsXG4gICAgICAgICAgb3JpZW50YXRpb246ICdwb3J0cmFpdCdcbiAgICAgICAgfSxcbiAgICAgICAgcGFnZWJyZWFrOiB7XG4gICAgICAgICAgbW9kZTogWydjc3MnLCAnbGVnYWN5J10sXG4gICAgICAgICAgYmVmb3JlOiAnLnBhZ2UtYnJlYWsnLFxuICAgICAgICAgIGF2b2lkOiBbJy5uby1icmVhayddXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGh0bWwycGRmKCkuZnJvbShlbGVtZW50KS5zZXQob3B0aW9ucykuc2F2ZSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1BERkRvd25sb2FkID0gZmFsc2VcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LCAzMDAwKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcmVkaXJlY3RUb1RvYyhpdGVtKSB7XG4gICAgaWYgKGl0ZW0/LnB1YmxpY19saW5rKSB7XG4gICAgICB3aW5kb3cub3BlbihpdGVtPy5wdWJsaWNfbGluaywgJ19ibGFuaycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB1cmwgPSBgaHR0cHM6Ly9wb3J0YWwuaWdvdGthcm1heW9naS5nb3YuaW4vYXBwL3RvYy8ke2l0ZW0/LmlkZW50aWZpZXJ9L292ZXJ2aWV3P2BcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpXG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgaW5pdGlhbCBkYXRhIGxvYWRcbiAgICovXG4gIGluaXRpYWxpemVHYXBBbmFseXNpc1N0YXRzKCkge1xuICAgIC8vIFNldCBhIHNtYWxsIHRpbWVvdXQgdG8gZW5zdXJlIGFsbCBhc3luYyBvcGVyYXRpb25zIGNvbXBsZXRlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJkQ291cnNlcyAmJiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKCk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZ2FwIGFuYWx5c2lzIHN0YXRzIGFmdGVyIGNvdXJzZXMgYXJlIHVwZGF0ZWQgKGxpa2Ugc3VnZ2VzdGVkIGNvdXJzZXMgYWRkZWQpXG4gICAqL1xuICB1cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpIHtcbiAgICAvLyBEb24ndCBtb2RpZnkgb3JpZ2luYWxEYXRhIC0gaXQgc2hvdWxkIHJlbWFpbiBhcyBBSSByZWNvbW1lbmRlZCBjb3Vyc2VzIG9ubHlcbiAgICAvLyBUaGUgZ2FwIGFuYWx5c2lzIGFscmVhZHkgcHJvcGVybHkgaW5jbHVkZXMgYWxsIGNvdXJzZSB0eXBlc1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgZ2FwIGFuYWx5c2lzIHN0YXRzXG4gICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZSBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGJ5IGRlbGV0aW5nIGV4aXN0aW5nIHJlY29tbWVuZGF0aW9ucyBhbmQgZ2VuZXJhdGluZyBuZXcgb25lc1xuICAgKi9cbiAgYXN5bmMgcmVnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucygpIHtcbiAgICBpZiAodGhpcy5pc1JlZ2VuZXJhdGluZykge1xuICAgICAgcmV0dXJuOyAvLyBQcmV2ZW50IG11bHRpcGxlIHNpbXVsdGFuZW91cyByZWdlbmVyYXRpb25zXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSB0cnVlO1xuXG4gICAgICAvLyBTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2dcbiAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpO1xuXG4gICAgICBpZiAoIWNvbmZpcm1lZCkge1xuICAgICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ1N0YXJ0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb24uLi4nKTtcblxuICAgICAgLy8gU2V0IHJlZ2VuZXJhdGlvbiBwcm9ncmVzcyBzdGF0ZVxuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSBmYWxzZTsgLy8gSGlkZSBtYWluIGNvbnRlbnQgZHVyaW5nIHJlZ2VuZXJhdGlvblxuXG4gICAgICAvLyBTdGVwIDE6IERlbGV0ZSBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zXG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucygpO1xuXG4gICAgICAvLyBTdGVwIDI6IEdlbmVyYXRlIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlTmV3Q291cnNlUmVjb21tZW5kYXRpb25zKCk7XG5cbiAgICAgIC8vIFN0ZXAgMzogUmVmcmVzaCB0aGUgY3VycmVudCBkYXRhXG4gICAgICB0aGlzLnJlZnJlc2hDb21wb25lbnQoKTtcblxuICAgICAgY29uc29sZS5sb2coJ0NvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAvLyBTaG93IHN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIHJlZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnLCAnQ2xvc2UnLCB7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ3N1Y2Nlc3Mtc25hY2tiYXInXVxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb246JywgZXJyb3IpO1xuXG4gICAgICAvLyBTaG93IGVycm9yIG1lc3NhZ2VcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignRmFpbGVkIHRvIHJlZ2VuZXJhdGUgY291cnNlIHJlY29tbWVuZGF0aW9ucy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCAnQ2xvc2UnLCB7XG4gICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2Vycm9yLXNuYWNrYmFyJ11cbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlOyAvLyBFbnN1cmUgbWFpbiBjb250ZW50IGlzIHNob3duIGFmdGVyIHJlZ2VuZXJhdGlvblxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGNvbmZpcm1hdGlvbiBkaWFsb2cgZm9yIHJlZ2VuZXJhdGUgYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIHNob3dDb25maXJtYXRpb25EaWFsb2coKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgYSBjdXN0b20gY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWdlbmVyYXRlQ29uZmlybWF0aW9uRGlhbG9nLCB7XG4gICAgICAgIHdpZHRoOiAnNDUwcHgnLFxuICAgICAgICBwYW5lbENsYXNzOiAncmVnZW5lcmF0ZS1jb25maXJtYXRpb24tZGlhbG9nJyxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICB9KTtcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzdWx0ID09PSB0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGZvciB0aGUgY3VycmVudCByb2xlIG1hcHBpbmdcbiAgICovXG4gIHByaXZhdGUgZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJvbGVNYXBJZCA9IHRoaXMucGxhbkRhdGE/LmlkO1xuXG4gICAgICBpZiAoIXJvbGVNYXBJZCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdSb2xlIG1hcHBpbmcgSUQgbm90IGZvdW5kJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKCdEZWxldGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGZvciByb2xlIG1hcHBpbmc6Jywgcm9sZU1hcElkKTtcblxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmRlbGV0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucyhyb2xlTWFwSWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnM6JywgZXJyb3IpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGR1cmluZyByZWdlbmVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVOZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGluZyBuZXcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicpO1xuICAgIHJldHVybiB0aGlzLmdldFJlY29tbWVuZGVkQ291cnNlRm9yUmVnZW5lcmF0aW9uKHRoaXMucGxhbkRhdGEuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VkIGNvdXJzZSBnZW5lcmF0aW9uIHNwZWNpZmljYWxseSBmb3IgcmVnZW5lcmF0aW9uIHdpdGggcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRSZWNvbW1lbmRlZENvdXJzZUZvclJlZ2VuZXJhdGlvbihyb2xlX21hcHBpbmdfaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzc2l2ZSBsb2FkaW5nIHNpbXVsYXRpb24gZm9yIHJlZ2VuZXJhdGlvblxuICAgICAgdGhpcy5zdGFydFJlZ2VuZXJhdGl2ZVByb2dyZXNzaXZlTG9hZGluZygpO1xuXG4gICAgICAvLyBNYWtlIHRoZSBhY3R1YWwgQVBJIGNhbGxcbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICAvLyAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gICAgIC8vIFN0b3AgcHJvZ3Jlc3NpdmUgbG9hZGluZyBhbmQgc2hvdyBjb21wbGV0aW9uXG4gICAgICAvLyAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlOyAvLyBUaGlzIHdpbGwgc3RvcCB0aGUgaW50ZXJ2YWxcbiAgICAgIC8vICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyByZWdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgLy8gICAgIC8vIENsZWFyIHRoZSBsb2FkaW5nIHN0YXRlIGFmdGVyIHNob3dpbmcgY29tcGxldGlvblxuICAgICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAvLyAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAvLyAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIC8vICAgICB9LCAyMDAwKTtcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgLy8gICAgIC8vIFN0b3AgcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICAgICAgLy8gICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICAgIC8vICAgICAvLyBIYW5kbGUgc3BlY2lmaWMgZXJyb3IgY2FzZXNcbiAgICAgIC8vICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDkgfHwgZXJyb3IuZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIC8vICAgICAgIC8vIENvdXJzZSByZWNvbW1lbmRhdGlvbnMgYWxyZWFkeSBleGlzdCAtIHRoaXMgaXMgbm9ybWFsXG4gICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIHJlY29tbWVuZGF0aW9ucyBhbHJlYWR5IGV4aXN0LCBsb2FkaW5nIGV4aXN0aW5nIGRhdGEuLi4nKTtcblxuICAgICAgLy8gICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRpbmcgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgIC8vICAgICAgIC8vIFRyeSB0byBnZXQgZXhpc3RpbmcgZGF0YVxuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIC8vICAgICAgICAgbmV4dDogKGV4aXN0aW5nUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZygnU3VjY2Vzc2Z1bGx5IGxvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zJyk7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAvLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgICAgICAgIHJlc29sdmUoZXhpc3RpbmdSZXNwb25zZSk7XG4gICAgICAvLyAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAvLyAgICAgICAgIH0sXG4gICAgICAvLyAgICAgICAgIGVycm9yOiAobG9hZEVycm9yKSA9PiB7XG4gICAgICAvLyAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uczonLCBsb2FkRXJyb3IpO1xuICAgICAgLy8gICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgICAgICByZWplY3QobG9hZEVycm9yKTtcbiAgICAgIC8vICAgICAgICAgfVxuICAgICAgLy8gICAgICAgfSk7XG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb24gcmVnZW5lcmF0aW9uOicsIGVycm9yKTtcbiAgICAgIC8vICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9KTtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0dlbmVyYXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgIGludGVydmFsKDUwMDApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkucGlwZShcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUGFzcyBlcnJvciB0aHJvdWdoIG9ic2VydmFibGUgc28gcG9sbGluZyBsb2dpYyBjYW4gaW5zcGVjdCBpdFxuICAgICAgICAgICAgICAgIHJldHVybiBvZih7IGVycm9yIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG5cbiAgICAgICAgICB0YXAocmVzID0+IGNvbnNvbGUubG9nKFwiUG9sbGluZyByZXN1bHQ6XCIsIHJlcykpLFxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICog4qyH77iPIFNUT1AgUE9MTElORyBvbmx5IHdoZW46XG4gICAgICAgICAgICogLSBTVUNDRVNTIOKGkiByZXMuc3RhdHVzID09PSBDT01QTEVURURcbiAgICAgICAgICAgKiAtIEVSUk9SIOKGkiBjb25mbGljdCAvIGFscmVhZHkgZXhpc3RzXG4gICAgICAgICAgICovXG4gICAgICAgICAgdGFrZVdoaWxlKHJlcyA9PiB7XG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdDT01QTEVURUQnKSByZXR1cm4gZmFsc2U7ICAgICAgIC8vIFN0b3BcbiAgICAgICAgICAgIGlmIChyZXM/LmVycm9yPy5zdGF0dXMgPT09IDQwOSkgcmV0dXJuIGZhbHNlOyAgICAgICAgLy8gU3RvcFxuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3I/LmVycm9yPy5kZXRhaWw/LmluY2x1ZGVzKCdhbHJlYWR5IGV4aXN0cycpKSByZXR1cm4gZmFsc2U7IC8vIFN0b3BcbiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBLZWVwIHBvbGxpbmdcbiAgICAgICAgICB9LCB0cnVlKSAvLyBpbmNsdWRlIGZpbmFsIGVtaXNzaW9uXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgLyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBTVUNDRVNTIENBU0UgKHN0YXR1cyBDT01QTEVURUQpXG4gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgcmVnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgfSwgMjAwMCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBFUlJPUiBDQVNFICg0MDkgLyBhbHJlYWR5IGV4aXN0cylcbiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIGlmIChyZXM/LmVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzLmVycm9yO1xuXG4gICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOSB8fCBlcnJvcj8uZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdMb2FkaW5nIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChleGlzdGluZ0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdMb2FkZWQgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucyBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShleGlzdGluZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbG9hZEVycm9yID0+IHJlamVjdChsb2FkRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvKiogQW55IG90aGVyIGVycm9yIOKGkiBzdG9wICYgcmVqZWN0ICovXG4gICAgICAgICAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAgICAgKiAgU1RJTEwgUFJPQ0VTU0lORyAoa2VlcCBwb2xsaW5nKVxuICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gTWF0aC5taW4odGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgKyAxMCwgOTUpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ1N0aWxsIHByb2Nlc3NpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiBlcnIgPT4gcmVqZWN0KGVycilcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBtZXRob2RzIGZvciByZWdlbmVyYXRpb25cbiAgc3RhcnRSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZUxvYWRpbmcoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzWzBdO1xuICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnNpbXVsYXRlUmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVTdGFnZXMoKTtcbiAgfVxuXG4gIHNpbXVsYXRlUmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVTdGFnZXMoKSB7XG4gICAgbGV0IGN1cnJlbnRTdGFnZUluZGV4ID0gMDtcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gNjAwMDA7IC8vIDYwIHNlY29uZHMgZXN0aW1hdGVkIGR1cmF0aW9uXG4gICAgY29uc3Qgc3RhZ2VJbnRlcnZhbCA9IHRvdGFsRHVyYXRpb24gLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIC8vIFN0b3AgaWYgcmVnZW5lcmF0aW9uIGlzIGNvbXBsZXRlXG4gICAgICBpZiAoIXRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHRoaXMuc3RhZ2VTdGFydFRpbWU7XG4gICAgICBjb25zdCBjdXJyZW50U3RhZ2VQcm9ncmVzcyA9IChlbGFwc2VkICUgc3RhZ2VJbnRlcnZhbCkgLyBzdGFnZUludGVydmFsO1xuICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IE1hdGgubWluKE1hdGguZmxvb3IoZWxhcHNlZCAvIHN0YWdlSW50ZXJ2YWwpLCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoIC0gMSk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGFnZSBpZiBuZWVkZWRcbiAgICAgIGlmIChzdGFnZUluZGV4ICE9PSBjdXJyZW50U3RhZ2VJbmRleCAmJiBzdGFnZUluZGV4IDwgdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkge1xuICAgICAgICBjdXJyZW50U3RhZ2VJbmRleCA9IHN0YWdlSW5kZXg7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9IHRoaXMucHJvY2Vzc2luZ1N0YWdlc1tzdGFnZUluZGV4XTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG92ZXJhbGwgcHJvZ3Jlc3MgKGVhY2ggc3RhZ2UgaXMgd29ydGggfjE2LjY3JSlcbiAgICAgIGNvbnN0IGJhc2VQcm9ncmVzcyA9IChzdGFnZUluZGV4IC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICBjb25zdCBzdGFnZVByb2dyZXNzID0gKGN1cnJlbnRTdGFnZVByb2dyZXNzIC8gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCkgKiAxMDA7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IE1hdGgubWluKE1hdGgucm91bmQoYmFzZVByb2dyZXNzICsgc3RhZ2VQcm9ncmVzcyksIDk1KTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjb21wb25lbnQgZGF0YSBhZnRlciByZWdlbmVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaENvbXBvbmVudCgpIHtcbiAgICBjb25zb2xlLmxvZygnUmVmcmVzaGluZyBjb21wb25lbnQgZGF0YS4uLicpO1xuXG4gICAgLy8gUmVzZXQgYWxsIGZpbHRlcnMgYW5kIHNlbGVjdGlvbnNcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPSAnJztcbiAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gW107XG4gICAgdGhpcy5vcmlnaW5hbEZpbHRlcmVkQ291cnNlcyA9IFtdO1xuICAgIHRoaXMuc3VnZ2VzdGVkQ291cnNlcyA9IFtdO1xuICAgIHRoaXMudXNlckFkZGVkQ291cnNlcyA9IFtdO1xuXG4gICAgLy8gUmVzZXQgdGFiIHN0YXRlc1xuICAgIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9IDA7XG4gICAgdGhpcy5vdXRlclRhYkFjdGl2ZUluZGV4ID0gMDtcblxuICAgIC8vIENhbGwgdGhlIGRhdGEgbG9hZGluZyBtZXRob2RzIGRpcmVjdGx5IHRvIGF2b2lkIHJlc2V0dGluZyBkYXRhTG9hZGVkXG4gICAgdGhpcy5sb2FkQ29tcG9uZW50RGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY29tcG9uZW50IGRhdGEgKHNlcGFyYXRlZCBmcm9tIG5nT25Jbml0IGZvciByZXVzZSlcbiAgICovXG4gIHByaXZhdGUgbG9hZENvbXBvbmVudERhdGEoKSB7XG4gICAgdGhpcy5nZXRSZWNvbW1lbmRlZENvdXJzZVdpdGhQcm9ncmVzcyh0aGlzLnBsYW5EYXRhLmlkKS50aGVuKChyZXMpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcy5pZFxuICAgICAgbGV0IGFsbENvdXJlcyA9IFtdXG4gICAgICBpZiAocmVzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzICYmIHJlcy5maWx0ZXJlZF9jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICByZXM/LmZpbHRlcmVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtPy5yZWxldmFuY3kgPj0gNzUpIHtcbiAgICAgICAgICAgIGFsbENvdXJlcy5wdXNoKGl0ZW0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IGFsbENvdXJlc1xuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cmVzXG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLmZpbHRlcmRDb3Vyc2VzJywgdGhpcy5maWx0ZXJkQ291cnNlcylcbiAgICAgIHRoaXMuZ2V0Q291cnNlcygpXG4gICAgICB0aGlzLmdldFN1Z2dlc3RlZENvdXJzZSgpXG5cbiAgICAgIC8vIEluaXRpYWxpemUgZ2FwIGFuYWx5c2lzIHN0YXRzIGFmdGVyIGNvdXJzZXMgYXJlIGxvYWRlZFxuICAgICAgdGhpcy5pbml0aWFsaXplR2FwQW5hbHlzaXNTdGF0cygpXG4gICAgICB0aGlzLmdldFVzZXJDb3Vyc2UoKVxuXG4gICAgICAvLyBNYXJrIGRhdGEgYXMgbG9hZGVkIGFmdGVyIGFsbCBpbml0aWFsIG9wZXJhdGlvbnNcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIHJlY29tbWVuZGVkIGNvdXJzZXM6JywgZXJyb3IpO1xuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmF1dGhvcml6ZWQgYWNjZXNzIC0gdXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gbG9naW4nKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDkpIHtcbiAgICAgICAgLy8gRG9uJ3QgbG9nIGVycm9yIGZvciA0MDkgKGFscmVhZHkgZXhpc3RzKSBhcyBpdCdzIGhhbmRsZWQgaW4gdGhlIG1ldGhvZFxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBjb3Vyc2UgcmVjb21tZW5kYXRpb25zJyk7XG4gICAgICB9XG4gICAgICAvLyBNYXJrIGRhdGEgYXMgbG9hZGVkIGV2ZW4gaWYgdGhlcmUncyBhbiBlcnJvciB0byBzaG93IHRoZSBkaWFsb2cgY29udGVudFxuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2dyZXNzaXZlIGxvYWRpbmcgbWV0aG9kcyBmb3IgY291cnNlIGdlbmVyYXRpb25cbiAgc3RhcnRQcm9ncmVzc2l2ZUxvYWRpbmcoKSB7XG4gICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzWzBdO1xuICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICB0aGlzLnN0YWdlU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnNpbXVsYXRlUHJvZ3Jlc3NpdmVTdGFnZXMoKTtcbiAgfVxuXG4gIHNpbXVsYXRlUHJvZ3Jlc3NpdmVTdGFnZXMoKSB7XG4gICAgbGV0IGN1cnJlbnRTdGFnZUluZGV4ID0gMDtcbiAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gNjAwMDA7IC8vIDYwIHNlY29uZHMgZXN0aW1hdGVkIGR1cmF0aW9uXG4gICAgY29uc3Qgc3RhZ2VJbnRlcnZhbCA9IHRvdGFsRHVyYXRpb24gLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3NJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpcy5zdGFnZVN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGFnZVByb2dyZXNzID0gKGVsYXBzZWQgJSBzdGFnZUludGVydmFsKSAvIHN0YWdlSW50ZXJ2YWw7XG4gICAgICBjb25zdCBzdGFnZUluZGV4ID0gTWF0aC5taW4oTWF0aC5mbG9vcihlbGFwc2VkIC8gc3RhZ2VJbnRlcnZhbCksIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGggLSAxKTtcblxuICAgICAgLy8gVXBkYXRlIHN0YWdlIGlmIG5lZWRlZFxuICAgICAgaWYgKHN0YWdlSW5kZXggIT09IGN1cnJlbnRTdGFnZUluZGV4ICYmIHN0YWdlSW5kZXggPCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSB7XG4gICAgICAgIGN1cnJlbnRTdGFnZUluZGV4ID0gc3RhZ2VJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgb3ZlcmFsbCBwcm9ncmVzcyAoZWFjaCBzdGFnZSBpcyB3b3J0aCB+MTYuNjclKVxuICAgICAgY29uc3QgYmFzZVByb2dyZXNzID0gKHN0YWdlSW5kZXggLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHN0YWdlUHJvZ3Jlc3MgPSAoY3VycmVudFN0YWdlUHJvZ3Jlc3MgLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gTWF0aC5taW4oTWF0aC5yb3VuZChiYXNlUHJvZ3Jlc3MgKyBzdGFnZVByb2dyZXNzKSwgOTUpO1xuXG4gICAgICAvLyBDbGVhciBpbnRlcnZhbCB3aGVuIGxvYWRpbmcgc3RvcHNcbiAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwocHJvZ3Jlc3NJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICAvLyBFbmhhbmNlZCBjb3Vyc2UgZ2VuZXJhdGlvbiB3aXRoIHByb2dyZXNzaXZlIGxvYWRpbmdcbiAgZ2V0UmVjb21tZW5kZWRDb3Vyc2VXaXRoUHJvZ3Jlc3Mocm9sZV9tYXBwaW5nX2lkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnR2VuZXJhdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcbiAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMzA7XG5cbiAgICAgIHRoaXMuc3RhcnRQcm9ncmVzc2l2ZUxvYWRpbmcoKTtcblxuICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgY29uY2F0KFxuICAgICAgICBvZihudWxsKSwgICAgICAgICAgLy8gaW1tZWRpYXRlIGNhbGxcbiAgICAgICAgaW50ZXJ2YWwoNTAwMCkgICAgIC8vIHBvbGwgZXZlcnkgNSBzZWNcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKVxuICAgICAgICAgICksXG5cbiAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmZpcnN0QXBpUmVzcG9uc2UgJiYgIXRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LmlzX2V4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdGaXJzdCByZWNvbW1lbmRhdGlvbiByZXNwb25zZTonLFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICB0YWtlV2hpbGUoKHJlc3BvbnNlOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgLy8gc3RvcCBwb2xsaW5nIGlmIGV4aXN0aW5nIHJlY29tbWVuZGF0aW9ucyBmb3VuZFxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RBcGlSZXNwb25zZT8uaXNfZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyAhPT0gJ0NPTVBMRVRFRCc7XG5cbiAgICAgICAgICB9LCB0cnVlKSxcblxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSh7XG5cbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8vIEVYSVNUSU5HIFJFQ09NTUVOREFUSU9OU1xuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZyAmJiB0aGlzLmV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCkge1xuXG4gICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oXG4gICAgICAgICAgICAgICAgRGVsZXRlUm9sZU1hcHBpbmdQb3B1cENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGZyb206ICdnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucycgICAgICAgICAgICAgICAgIC8vIGluZGV4IGZvciBVSSByZW1vdmFsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKHJvbGVfbWFwcGluZ19pZClcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG5cbiAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdlbmVyYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJlY29tbWVuZGVkQ291cnNlV2l0aFByb2dyZXNzKHJvbGVfbWFwcGluZ19pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I/LmVycm9yPy5kZXRhaWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBkZWxldGUgcmVjb21tZW5kYXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmZpcnN0QXBpUmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAvLyBDT01QTEVURURcbiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdGF0dXMgPT09ICdDT01QTEVURUQnKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID1cbiAgICAgICAgICAgICAgICAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyBnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5ISc7XG5cbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcblxuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgICAgICAgJ1JlY29tbWVuZGF0aW9ucyByZWFkeSEnLFxuICAgICAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBnZW5lcmF0ZSBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLicsXG4gICAgICAgICAgICAgICdYJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXNldEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnJlc2V0KHtcbiAgICAgIGNvbXBldGVuY3k6IFtdLFxuICAgICAgcmF0aW5nOiBbXSxcbiAgICAgIGxhbmd1YWdlOiBbXSxcbiAgICAgIGR1cmF0aW9uOiBbXSxcbiAgICAgIHByb3ZpZGVyOiBbXVxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgZmlsdGVyZWQgZHJvcGRvd24gbGlzdHNcbiAgICB0aGlzLmZpbHRlcmVkQ29tcGV0ZW5jeSA9IFsuLi50aGlzLmNvbXBldGVuY2llc1R5cGVdO1xuICAgIHRoaXMuZmlsdGVyZWRSYXRpbmdzID0gWy4uLnRoaXMucmF0aW5nc107XG4gICAgdGhpcy5maWx0ZXJlZExhbmd1YWdlcyA9IFsuLi50aGlzLmxhbmd1YWdlc107XG4gICAgdGhpcy5maWx0ZXJlZER1cmF0aW9ucyA9IFsuLi50aGlzLmR1cmF0aW9uc107XG4gICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycyA9IFsuLi50aGlzLnByb3ZpZGVyc107XG5cbiAgICAvLyBSZXNldCBjb3Vyc2UgbGlzdFxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBbLi4udGhpcy5mdWxsQ291cnNlTGlzdF07XG4gICAgLy8gdGhpcy5mdWxsQ291cnNlTGlzdC5mb3JFYWNoKChpdGVtKT0+e1xuICAgIC8vICAgaWYoaXRlbSAmJiBpdGVtLm9yZ2FuaXNhdGlvbiAmJiBpdGVtLm9yZ2FuaXNhdGlvbi5sZW5ndGgpIHtcbiAgICAvLyAgICAgaWYodGhpcy5maWx0ZXJlZFByb3ZpZGVycy5pbmRleE9mKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKSA8IDApIHtcbiAgICAvLyAgICAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLnB1c2goaXRlbS5vcmdhbmlzYXRpb25bMF0pXG4gICAgLy8gICAgIH1cblxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gICAgdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKClcbiAgfVxuXG4gIGZpbHRlckxpc3QodmFsdWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VhcmNoID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnY29tcGV0ZW5jeSc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRDb21wZXRlbmN5ID0gdGhpcy5jb21wZXRlbmNpZXNUeXBlLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyYXRpbmcnOlxuICAgICAgICB0aGlzLmZpbHRlcmVkUmF0aW5ncyA9IHRoaXMucmF0aW5ncy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgICB0aGlzLmZpbHRlcmVkTGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZXMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2R1cmF0aW9uJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZER1cmF0aW9ucyA9IHRoaXMuZHVyYXRpb25zLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwcm92aWRlcic6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMgPSB0aGlzLnByb3ZpZGVycy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG5vcm1hbGl6ZUNvbXBldGVuY3kodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHYgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKHYgPT09ICdhbGwnKSByZXR1cm4gJ2FsbCc7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ2JlaGF2aW91cmFsJykgfHwgdi5pbmNsdWRlcygnYmVoYXZpb3JhbCcpKSByZXR1cm4gJ2JlaGF2aW9yYWwnO1xuICAgIGlmICh2LmluY2x1ZGVzKCdmdW5jdGlvbmFsJykpIHJldHVybiAnZnVuY3Rpb25hbCc7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ2RvbWFpbicpKSByZXR1cm4gJ2RvbWFpbic7XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgY29tcGV0ZW5jeSA9IFtdLFxuICAgICAgcmF0aW5nID0gW10sXG4gICAgICBsYW5ndWFnZSA9IFtdLFxuICAgICAgZHVyYXRpb24gPSBbXSxcbiAgICAgIHByb3ZpZGVyID0gW11cbiAgICB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuXG4gICAgY29uc29sZS5sb2coJ3RoaXMuZnVsbENvdXJzZUxpc3QtLScsIHRoaXMuZnVsbENvdXJzZUxpc3QpXG5cbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5mdWxsQ291cnNlTGlzdC5maWx0ZXIoY291cnNlID0+IHtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBDb21wZXRlbmN5IC0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGNvbnN0IGNvdXJzZUNvbXBldGVuY2llcyA9IFtcbiAgICAgICAgLi4uKGNvdXJzZS5jb21wZXRlbmNpZXMgfHwgW10pLFxuICAgICAgICAuLi4oY291cnNlLmNvbXBldGVuY2llc192NiB8fCBbXSlcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkQ29tcGV0ZW5jaWVzID0gY29tcGV0ZW5jeVxuICAgICAgICAubWFwKChjOiBzdHJpbmcpID0+IHRoaXMubm9ybWFsaXplQ29tcGV0ZW5jeShjKSlcbiAgICAgICAgLmZpbHRlcihjID0+IGMgIT09ICcnKTtcblxuICAgICAgY29uc3QgY29tcGV0ZW5jeU1hdGNoID1cbiAgICAgICAgc2VsZWN0ZWRDb21wZXRlbmNpZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHNlbGVjdGVkQ29tcGV0ZW5jaWVzLmluY2x1ZGVzKCdhbGwnKSB8fFxuICAgICAgICBjb3Vyc2VDb21wZXRlbmNpZXMuc29tZSgoYzogYW55KSA9PlxuICAgICAgICAgIHNlbGVjdGVkQ29tcGV0ZW5jaWVzLmluY2x1ZGVzKFxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVDb21wZXRlbmN5KGMuY29tcGV0ZW5jeUFyZWFOYW1lKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBSYXRpbmcgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgcmF0aW5nTWF0Y2ggPVxuICAgICAgICByYXRpbmcubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHRoaXMubWF0Y2hSYXRpbmcoY291cnNlLCByYXRpbmcpO1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIGNvbnN0IGxhbmd1YWdlTWF0Y2ggPVxuICAgICAgICBsYW5ndWFnZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgbGFuZ3VhZ2Uuc29tZSgobDogc3RyaW5nKSA9PlxuICAgICAgICAgIGNvdXJzZS5sYW5ndWFnZSA9PT0gbCB8fFxuICAgICAgICAgIGNvdXJzZS5sYW5ndWFnZT8uaW5jbHVkZXM/LihsKSB8fFxuICAgICAgICAgIGNvdXJzZS5sYW5ndWFnZT8uWzBdPy5pbmNsdWRlcz8uKGwpXG4gICAgICAgICk7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gRHVyYXRpb24gLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgZHVyYXRpb25NYXRjaCA9XG4gICAgICAgIGR1cmF0aW9uLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICB0aGlzLm1hdGNoRHVyYXRpb24oY291cnNlLmR1cmF0aW9uLCBkdXJhdGlvbik7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gUHJvdmlkZXIgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgcHJvdmlkZXJNYXRjaCA9XG4gICAgICAgIHByb3ZpZGVyLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBwcm92aWRlci5zb21lKChwOiBzdHJpbmcpID0+XG4gICAgICAgICAgY291cnNlLm9yZ2FuaXNhdGlvbj8uaW5jbHVkZXMocClcbiAgICAgICAgKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29tcGV0ZW5jeU1hdGNoICYmXG4gICAgICAgIHJhdGluZ01hdGNoICYmXG4gICAgICAgIGxhbmd1YWdlTWF0Y2ggJiZcbiAgICAgICAgZHVyYXRpb25NYXRjaCAmJlxuICAgICAgICBwcm92aWRlck1hdGNoXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgbWF0Y2hSYXRpbmcoY291cnNlOiBhbnksIHNlbGVjdGVkUmF0aW5nczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAoIXNlbGVjdGVkUmF0aW5ncyB8fCBzZWxlY3RlZFJhdGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gbm8gZmlsdGVyIHNlbGVjdGVkIOKGkiBtYXRjaCBldmVyeXRoaW5nXG4gICAgfVxuXG4gICAgbGV0IHJhdGluZyA9IG51bGw7XG5cbiAgICAvLyAx77iP4oOjIFVzZSBhdmdSYXRpbmcgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvdXJzZS5hdmdSYXRpbmcgIT0gbnVsbCAmJiAhaXNOYU4oY291cnNlLmF2Z1JhdGluZykpIHtcbiAgICAgIHJhdGluZyA9IE51bWJlcihjb3Vyc2UuYXZnUmF0aW5nKTtcbiAgICB9XG4gICAgLy8gMu+4j+KDoyBNYXAgcmVsZXZhbmN5IGlmIGF2Z1JhdGluZyBtaXNzaW5nXG4gICAgZWxzZSBpZiAoY291cnNlLnJlbGV2YW5jeSAhPSBudWxsICYmICFpc05hTihjb3Vyc2UucmVsZXZhbmN5KSkge1xuICAgICAgY29uc3QgcmVsID0gTnVtYmVyKGNvdXJzZS5yZWxldmFuY3kpO1xuICAgICAgaWYgKHJlbCA+PSA5MCkgcmF0aW5nID0gNC41O1xuICAgICAgZWxzZSBpZiAocmVsID49IDgwKSByYXRpbmcgPSA0LjA7XG4gICAgICBlbHNlIGlmIChyZWwgPj0gNzApIHJhdGluZyA9IDMuNTtcbiAgICAgIGVsc2UgaWYgKHJlbCA+PSA1MCkgcmF0aW5nID0gMi41O1xuICAgICAgZWxzZSByYXRpbmcgPSAxLjA7XG4gICAgfVxuXG4gICAgLy8gM++4j+KDoyBObyB1c2FibGUgcmF0aW5nIOKGkiBleGNsdWRlXG4gICAgaWYgKHJhdGluZyA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gNO+4j+KDoyBNYXRjaCBzZWxlY3RlZCByYXRpbmcgcmFuZ2VzXG4gICAgcmV0dXJuIHNlbGVjdGVkUmF0aW5ncy5zb21lKHIgPT4ge1xuICAgICAgc3dpdGNoIChyKSB7XG4gICAgICAgIGNhc2UgJzQuNSBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDQuNTtcbiAgICAgICAgY2FzZSAnNC4wIGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gNC4wO1xuICAgICAgICBjYXNlICczLjUgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSAzLjU7XG4gICAgICAgIGNhc2UgJzIuNSBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDIuNTtcbiAgICAgICAgY2FzZSAnMSBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDEuMDtcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBtYXRjaER1cmF0aW9uKGR1cmF0aW9uSW5TZWNvbmRzOiBudW1iZXIgfCBzdHJpbmcsIHNlbGVjdGVkUmFuZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvdXJzID0gTnVtYmVyKGR1cmF0aW9uSW5TZWNvbmRzKSAvIDM2MDA7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRSYW5nZXMuc29tZShyYW5nZSA9PiB7XG4gICAgICBzd2l0Y2ggKHJhbmdlKSB7XG4gICAgICAgIGNhc2UgJzwgMSBIb3VyJzpcbiAgICAgICAgICByZXR1cm4gaG91cnMgPCAxO1xuICAgICAgICBjYXNlICcxLTUgSG91cnMnOlxuICAgICAgICAgIHJldHVybiBob3VycyA+PSAxICYmIGhvdXJzIDw9IDU7XG4gICAgICAgIGNhc2UgJzUrIEhvdXJzJzpcbiAgICAgICAgICByZXR1cm4gaG91cnMgPiA1O1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIENvbmZpcm1hdGlvbiBEaWFsb2cgQ29tcG9uZW50XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyZWdlbmVyYXRlLWNvbmZpcm1hdGlvbi1kaWFsb2cnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJjb25maXJtYXRpb24tZGlhbG9nLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1oZWFkZXJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid2FybmluZy1pY29uXCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPlJlZ2VuZXJhdGUgQ291cnNlIFJlY29tbWVuZGF0aW9uczwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgIDxwIGNsYXNzPVwibWFpbi1tZXNzYWdlXCI+XG4gICAgICAgICAgVGhpcyB3aWxsIGRlbGV0ZSBhbGwgY3VycmVudCBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIGFuZCBnZW5lcmF0ZSBuZXcgb25lcyBiYXNlZCBvbiB0aGUgbGF0ZXN0IHJvbGUgbWFwcGluZy5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cInN1Yi1tZXNzYWdlXCI+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbnRpbnVlP1xuICAgICAgICA8L3A+XG4gICAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICAgIFxuICAgICAgPG1hdC1kaWFsb2ctYWN0aW9ucyBjbGFzcz1cImRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiIGNsYXNzPVwiY2FuY2VsLWJ0blwiPlxuICAgICAgICAgIENhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwib25Db25maXJtKClcIiBjbGFzcz1cImNvbmZpcm0tYnRuXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgICAgICAgIFllcywgUmVnZW5lcmF0ZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmNvbmZpcm1hdGlvbi1kaWFsb2ctY29udGFpbmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuICAgIFxuICAgIC5kaWFsb2ctaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAgcGFkZGluZzogMjRweCAyNHB4IDE2cHggMjRweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xuICAgIH1cbiAgICBcbiAgICAud2FybmluZy1pY29uIHtcbiAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgIHdpZHRoOiAyNHB4O1xuICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgY29sb3I6ICNmZjk4MDA7XG4gICAgfVxuICAgIFxuICAgIGgyIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogIzMzMztcbiAgICB9XG4gICAgXG4gICAgLmRpYWxvZy1jb250ZW50IHtcbiAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgfVxuICAgIFxuICAgIC5tYWluLW1lc3NhZ2Uge1xuICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgY29sb3I6ICMzMzM7XG4gICAgICBtYXJnaW46IDAgMCAxMnB4IDA7XG4gICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIH1cbiAgICBcbiAgICAuc3ViLW1lc3NhZ2Uge1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgY29sb3I6ICM2NjY7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cbiAgICBcbiAgICAuZGlhbG9nLWFjdGlvbnMge1xuICAgICAgcGFkZGluZzogMTZweCAyNHB4IDI0cHggMjRweDtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgfVxuICAgIFxuICAgIC5jYW5jZWwtYnRuIHtcbiAgICAgIGNvbG9yOiAjNjY2O1xuICAgIH1cbiAgICBcbiAgICAuY29uZmlybS1idG4ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIFxuICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICB3aWR0aDogMThweDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBSZWdlbmVyYXRlQ29uZmlybWF0aW9uRGlhbG9nIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFJlZ2VuZXJhdGVDb25maXJtYXRpb25EaWFsb2c+XG4gICkgeyB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoZmFsc2UpO1xuICB9XG5cbiAgb25Db25maXJtKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIFxuICAgICAgICA8IS0tIEluaXRpYWwgTG9hZGluZyBTY3JlZW4gKGZvciBpbml0aWFsIGxvYWQgYW5kIHJlZ2VuZXJhdGlvbikgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbml0aWFsLWxvYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCIhZGF0YUxvYWRlZCB8fCBpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0IG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj57eyBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlIHx8IChpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA/ICdSZWdlbmVyYXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicgOiAnTG9hZGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJykgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1kZXRhaWxzXCIgKm5nSWY9XCJwcm9ncmVzc1BlcmNlbnRhZ2UgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9ncmVzcy10ZXh0XCI+e3sgcHJvZ3Jlc3NQZXJjZW50YWdlIH19JSBDb21wbGV0ZTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRpbWUtZXN0aW1hdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsLXRpbWUgY291cnNlIGdlbmVyYXRpb24gaW4gcHJvZ3Jlc3MuIFRoaXMgbWF5IHRha2UgMS0yIG1pbnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIE1haW4gQ29udGVudCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiICpuZ0lmPVwiZGF0YUxvYWRlZCAmJiAhaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3NcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5TYXZlIENvdXJzZXMgKDxzcGFuPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8ub3JnTmFtZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSBcIj4vIHt7cGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWV9fTwvc3Bhbj48L3NwYW4+KTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVnZW5lcmF0ZS1idG5cIiAoY2xpY2spPVwicmVnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlZ2VuZXJhdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzUmVnZW5lcmF0aW5nXCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzUmVnZW5lcmF0aW5nXCIgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7aXNSZWdlbmVyYXRpbmcgPyAnUmVnZW5lcmF0aW5nLi4uJyA6ICdSZWdlbmVyYXRlIFJlY29tbWVuZGF0aW9ucyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2UtYnRuXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGFpbmVyIG10LTRcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJvbk91dGVyVGFiQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEZpcnN0IE1haW4gVGFiIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiY291cnNlIHJlY29tbWVuZGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmVzdGVkIFRhYnMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uSW5uZXJUYWJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJhbGxcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJiZWhhdmlvdXJhbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImZ1bmN0aW9uYWxcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJkb21haW5cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+IC0tPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU2Vjb25kIE1haW4gVGFiIC0tPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiZ2FwIGFuYWx5c2lzXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHA+R2FwIGFuYWx5c2lzIGNvbnRlbnQgZ29lcyBoZXJlPC9wPiAtLT5cbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIiBjbGFzcz1cImZpbHRlcnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1tYXBwaW5nLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJvdXRlclRhYkFjdGl2ZUluZGV4ID09PSAwICYmIChpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAwIHx8IGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDEgfHwgaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMiB8fCBpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAzIClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1pbXByb3ZlZCBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWFyY2ggQ291cnNlczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyLWNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCI+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInNpbnB1dC1jb21wYWN0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiYXBwbHlGaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDb3Vyc2VzXCIgdHlwZT1cInRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBDb21wZXRlbmN5PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5jb21wZXRlbmN5Py5sZW5ndGggPyAnJyA6ICdDb21wZXRlbmN5JyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBDb21wZXRlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdjb21wZXRlbmN5JylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZENvbXBldGVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBSYXRpbmc8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5yYXRpbmc/Lmxlbmd0aCA/ICcnIDogJ1JhdGluZycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYXRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBSZWF0aW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAncmF0aW5nJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZFJhdGluZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItaW1wcm92ZWQtc2VjLTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgTGFuZ3VhZ2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5sYW5ndWFnZT8ubGVuZ3RoID8gJycgOiAnTGFuZ3VhZ2UnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFuZ3VhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBMYW5ndWFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2xhbmd1YWdlJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZExhbmd1YWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBEdXJhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmR1cmF0aW9uPy5sZW5ndGggPyAnJyA6ICdEdXJhdGlvbicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkdXJhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIER1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdkdXJhdGlvbicpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWREdXJhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1hbmQtYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5TZWxlY3QgUHJvdmlkZXI8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyRm9ybS52YWx1ZS5wcm92aWRlcj8ubGVuZ3RoID8gJycgOiAnUHJvdmlkZXInIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwic2VsZWN0LXNlYXJjaC1wYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiYXBwbHlGaWx0ZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYm94IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cImJvcmRlcjoxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4O3dpZHRoOiA5MiU7bWFyZ2luOiA1cHg7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAncHJvdmlkZXInKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkUHJvdmlkZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiA0NXB4O21hcmdpbi1sZWZ0OiAyMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJSZXNldCBBbGwgRmlsdGVyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcnMoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyZWQgQ291cnNlIENvdW50IDoge3tmaWx0ZXJkQ291cnNlcz8ubGVuZ3RofX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTUgc3ViLWhlYWRpbmcgc2VsZWN0LWFsbC1jb250YWluZXJcIiAqbmdJZj1cImZpbHRlcmRDb3Vyc2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTZweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IFtjaGVja2VkXT1cImZhbHNlXCIgKGNoYW5nZSk9XCJzZWxlY3RBbGxDb3Vyc2VzKCRldmVudClcIj5TZWxlY3QgQWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZXM8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cC1jb21wYWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkFkZCBNb3JlIENvdXJzZSBGcm9tIGlHT1RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Z2dlc3RNb3JlQ291cnNlcygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGwtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cInNlbGVjdEZpbHRlckNvdXJzZXM/Lmxlbmd0aCA+IDAgPyBmYWxzZSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0RmlsdGVyQ291cnNlcz8ubGVuZ3RoID4gMCA/ICdidG4tYWN0aXZlJyA6ICdidG4tZGlzYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFt2YWx1ZV09XCJtb2RlID09PSAnYWRkJyA/ICdTYXZlIENvdXJzZXMnIDogJ1VwZGF0ZSBDb3Vyc2VzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUNvdXJzZXMoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLWNvbnRhaW5lciBtdC0yXCIgKm5nSWY9XCJmaWx0ZXJkQ291cnNlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lci1tZXNzYWdlIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPkRpc2NsYWltZXI6PC9zdHJvbmc+IFBsZWFzZSB2ZXJpZnkgdGhlIHB1YmxpYyBjb3Vyc2UgVVJMIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIHBsYW4uXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlubmVyVGFiQWN0aXZlSW5kZXggPiAwID8gJ2NvdXJzZS1saXN0LWNvbnRhaW5lci1mbGV4JzonY291cnNlLWxpc3QtY29udGFpbmVyLXJpZ2h0LWZsZXgnIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA+IDAgPyAnbGVmdC1wYW5lbCc6JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY2llcyBpbiBCZWhhdmlvdXJhbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlbWUtZmlsdGVyLWNvbnRyb2xzIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFyLWZpbHRlci1idG5cIiAoY2xpY2spPVwiY2xlYXJUaGVtZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPiBDbGVhciBGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZmlsdGVyT25Db21wZXRlbmN5VGhlbWUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS1saXN0LWl0ZW0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLXRoZW1lJzogaXNUaGVtZVNlbGVjdGVkKGl0ZW0pfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPT09IDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIGluIEZ1bmN0aW9uYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoZW1lLWZpbHRlci1jb250cm9scyBtYi0yXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbGVhci1maWx0ZXItYnRuXCIgKGNsaWNrKT1cImNsZWFyVGhlbWVGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj4gQ2xlYXIgRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImZpbHRlck9uQ29tcGV0ZW5jeVRoZW1lKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F0ZWdvcnktbGlzdC1pdGVtIGN1cnNvci1wb2ludGVyIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC10aGVtZSc6IGlzVGhlbWVTZWxlY3RlZChpdGVtKX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY2llcyBpbiBEb21haW48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRoZW1lLWZpbHRlci1jb250cm9scyBtYi0yXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbGVhci1maWx0ZXItYnRuXCIgKGNsaWNrKT1cImNsZWFyVGhlbWVGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj4gQ2xlYXIgRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImZpbHRlck9uQ29tcGV0ZW5jeVRoZW1lKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS1saXN0LWl0ZW0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdGhlbWUnOiBpc1RoZW1lU2VsZWN0ZWQoaXRlbSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA+IDAgPyAncmlnaHQtcGFuZWwnOidyaWdodC1wYW5lbC1mbGV4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyBDb3Vyc2UgRm91bmQgTWVzc2FnZSBpbiBSaWdodCBQYW5lbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb3Vyc2UtZm91bmQtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlcmRDb3Vyc2VzPy5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb3Vyc2UtY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tY291cnNlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2hfb2ZmPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb3Vyc2UtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pk5vIENvdXJzZXMgRm91bmQ8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm8gY291cnNlcyBmb3VuZCBmb3IgdGhlIHNlbGVjdGVkIHRoZW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tzZWxlY3RlZFRoZW1lRmlsdGVyfX08L3N0cm9uZz48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Xb3VsZCB5b3UgbGlrZSB0byBhZGQgYSBjb3Vyc2UgZm9yIHRoaXMgY29tcGV0ZW5jeT88L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3VnZ2VzdC1jb3Vyc2UtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkQ291cnNlRm9yU2VsZWN0ZWRUaGVtZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBDb3Vyc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvdXJzZXMgTGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZENvdXJzZXM7bGV0IGk9aW5kZXhcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrZWQtY291cnNlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tJZkNvdXJzZUV4aXN0cyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGVkRmlsdGVyQ291cnNlcygkZXZlbnQsIGl0ZW0pXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9jb3Vyc2Uuc3ZnXCI+PC9zcGFuPiZuYnNwOzxzcGFuPkNvdXJzZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlXCI+QUkgUmVjb21tZW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LmlzX3B1YmxpY1wiPiAtIFB1YmxpYzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtPy5pc19wdWJsaWNcIj4gLSBpR09UPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+TWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgIWl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlbi10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1wdWJsaWMtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFJlY29tbWVuZGVkIC0gUHVibGljIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWFudWFsbHkgU3VnZ2VzdGVkIC0gaUdPVCA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ucGxhdGZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW2hyZWZdPVwiaXRlbT8ucHVibGljX2xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5wbGF0Zm9ybX19PC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UgbXQtMlwiICpuZ0lmPVwiaXRlbT8ub3JnYW5pc2F0aW9uPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGUgbXQtMyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZWRpcmVjdFRvVG9jKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LmNvdXJzZVwiPnt7aXRlbT8uY291cnNlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiaXRlbT8ubmFtZVwiPnt7aXRlbT8ubmFtZX19KioqKjwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjEwcHg7XCIgKGNsaWNrKT1cInJlZGlyZWN0VG9Ub2MoaXRlbSlcIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE4cHhcIiB3aWR0aD1cIjE4cHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvcmVkaXJlY3QucG5nXCIgLz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWRlc2MgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZVwiPnt7aXRlbT8ucmF0aW9uYWxlfX08L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5kZXNjcmlwdGlvblwiPnt7aXRlbT8uZGVzY3JpcHRpb259fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW91cmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkJlaGF2aW91cmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJiZWhhdmlvdXJhbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdCZWhhdmlvdXJhbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiaGFzTW9yZVRoYW5Ud28oJ0JlaGF2aW91cmFsJyxpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdCZWhhdmlvdXJhbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0JlaGF2aW91cmFsJyxpKSA/ICdTaG93IExlc3MnIDogJysnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdCZWhhdmlvdXJhbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0Z1bmN0aW9uYWwnLGkpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiZnVuY3Rpb25hbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdGdW5jdGlvbmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRnVuY3Rpb25hbCcsaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2hvdy1tb3JlLWxpbmsgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0Z1bmN0aW9uYWwnLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0Z1bmN0aW9uYWwnLGkpICsgJyBNb3JlJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdEb21haW4nLGkpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RG9tYWluIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJkb21haW4tcGlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRG9tYWluJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRG9tYWluJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdEb21haW4nLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0RvbWFpbicsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZWxldmFuY3kgYW5kIER1cmF0aW9uIHNlY3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1mb290ZXJcIiAqbmdJZj1cIml0ZW0/LnJlbGV2YW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LXBpbGwtZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeVwiPlJlbGV2YW5jeTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+e3tpdGVtPy5yZWxldmFuY3l9fSU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1waWxsLWdyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3lcIj5EdXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmR1cmF0aW9uXCI+e3tnZXREdXJhdGlvbihpdGVtPy5kdXJhdGlvbil9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKGl0ZW0/LmR1cmF0aW9uKVwiPk4vQTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gR2VuZXJhbCBObyBEYXRhIE1lc3NhZ2UgKG9ubHkgd2hlbiBubyB0aGVtZSBmaWx0ZXIgaXMgYWN0aXZlKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc3ViLWhlYWRpbmdcIiAqbmdJZj1cImZpbHRlcmRDb3Vyc2VzPy5sZW5ndGggPT09IDAgJiYgIXNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPk5vIERhdGEgRm91bmQ8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLW1hcHBpbmctY29udGFpbmVyXCIgKm5nSWY9XCJvdXRlclRhYkFjdGl2ZUluZGV4ID09PSAxXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImdhcC1hbmFseXNpcy1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd25sb2FkLXBkZiBtdC00IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkRvd25sb2FkXCIgKGNsaWNrKT1cImRvd25sb2FkUERGKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNQREZEb3dubG9hZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZGYtaGVhZGluZ1wiPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8ubmFtZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIFwiPl97e3BsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lfX1fR2FwX0FuYWx5c2lzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB2aC0xMDBcIiBbbmdDbGFzc109XCJpc1BERkRvd25sb2FkID8gJ210LTQnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaWRlYmFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gcC0zIGJnLWxpZ2h0IGJvcmRlci1lbmRcIiBzdHlsZT1cIndpZHRoOiAyNTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItNFwiPkFuYWx5emUgYnkgQ2F0ZWdvcnk8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lbnVJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1iLTIgdGV4dC1zdGFydCBtZW51LWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09IGl0ZW0ua2V5XCIgKGNsaWNrKT1cInNlbGVjdENhdGVnb3J5KGl0ZW0ua2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZ3JheS1iZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtbGFiZWwgc3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIENvdmVyZWQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiPnt7Y29tcGV0ZW5jeUNvdmVyZWRDb3VudH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZ3JheS1iZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtbGFiZWwgc3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPlRvdGFsIENvbXBldGVuY2llczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5Ub3RhbCBCZWhhdmlvdXJhbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJ1wiPlRvdGFsIEZ1bmN0aW9uYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJ1wiPlRvdGFsIERvbWFpbiBDb21wZXRlbmNpZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXN9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9tYWluVG90YWxDb21wZXRlbmNpZXN9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0zIGdyZWVuLWJnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1sYWJlbFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCdcIj5PdmVyYWxsIENvdmVyYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1sYWJlbFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlaGF2aW91cmFsIENvdmVyYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1sYWJlbFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWwgQ292ZXJhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJ1wiPkRvbWFpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3ZlcmFnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3ZlcmFsbENvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiZWhhdmlvcmFsQ292ZXJhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Z1bmN0aW9uYWxDb3ZlcmFnZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkb21haW5Db3ZlcmFnZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFsbC1jYXRlZ29yeS1saXN0XCIgW25nU3dpdGNoXT1cInNlbGVjdGVkQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidhbGwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkFsbCBDYXRlZ29yaWVzPC9oND5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBCZWhhdmlvdXJhbCBzZWN0aW9uIG9ubHkgaWYgdGhlcmUgYXJlIHVubWF0Y2hlZCBiZWhhdmlvdXJhbCBjb21wZXRlbmNpZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJlaGF2aW91cmFsTm90TWF0Y2hlZCAmJiBiZWhhdmlvdXJhbE5vdE1hdGNoZWQubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJlaGF2aW91cmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJlaGF2aW91cmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtIHwgdGl0bGVjYXNlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnQmVoYXZpb3JhbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2U8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgRnVuY3Rpb25hbCBzZWN0aW9uIG9ubHkgaWYgdGhlcmUgYXJlIHVubWF0Y2hlZCBmdW5jdGlvbmFsIGNvbXBldGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZnVuY3Rpb25hbE5vdE1hdGNoZWQgJiYgZnVuY3Rpb25hbE5vdE1hdGNoZWQubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZ1bmN0aW9uYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZnVuY3Rpb25hbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0Z1bmN0aW9uYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IERvbWFpbiBzZWN0aW9uIG9ubHkgaWYgdGhlcmUgYXJlIHVubWF0Y2hlZCBkb21haW4gY29tcGV0ZW5jaWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJkb21haW5Ob3RNYXRjaGVkICYmIGRvbWFpbk5vdE1hdGNoZWQubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkRvbWFpbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5Ob3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdEb21haW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IG1lc3NhZ2Ugd2hlbiBhbGwgY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoIWJlaGF2aW91cmFsTm90TWF0Y2hlZCB8fCBiZWhhdmlvdXJhbE5vdE1hdGNoZWQubGVuZ3RoID09PSAwKSAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghZnVuY3Rpb25hbE5vdE1hdGNoZWQgfHwgZnVuY3Rpb25hbE5vdE1hdGNoZWQubGVuZ3RoID09PSAwKSAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghZG9tYWluTm90TWF0Y2hlZCB8fCBkb21haW5Ob3RNYXRjaGVkLmxlbmd0aCA9PT0gMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWdhcHMtbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic3VjY2Vzcy1pY29uXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5FeGNlbGxlbnQhIEFsbCBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQ8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QWxsIHJlcXVpcmVkIGNvbXBldGVuY2llcyBoYXZlIGJlZW4gYWRkcmVzc2VkIGJ5IHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZXMuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidiZWhhdmlvcmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5CZWhhdmlvdXJhbDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImJlaGF2aW9yYWxDb3ZlcmFnZSAhPT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkJlaGF2aW91cmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJlaGF2aW91cmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXcgQ291cnNlIDwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImJlaGF2aW9yYWxDb3ZlcmFnZSA9PT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZThmNWU4OyBib3JkZXI6IDFweCBzb2xpZCAjNGNhZjUwOyBib3JkZXItcmFkaXVzOiA4cHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogIzJlN2QzMjsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfjokgRXhjZWxsZW50ISBBbGwgYmVoYXZpb3JhbCBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgY291cnNlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+RnVuY3Rpb25hbDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImZ1bmN0aW9uYWxDb3ZlcmFnZSAhPT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkZ1bmN0aW9uYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZnVuY3Rpb25hbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnRnVuY3Rpb25hbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3IENvdXJzZTwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImZ1bmN0aW9uYWxDb3ZlcmFnZSA9PT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZThmNWU4OyBib3JkZXI6IDFweCBzb2xpZCAjNGNhZjUwOyBib3JkZXItcmFkaXVzOiA4cHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogIzJlN2QzMjsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfjokgRXhjZWxsZW50ISBBbGwgZnVuY3Rpb25hbCBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQgYnkgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgY291cnNlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Eb21haW48L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJkb21haW5Db3ZlcmFnZSAhPT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPkRvbWFpbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5Ob3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW19fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3IENvdXJzZSA8L3NwYW4+PC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCIgKm5nSWY9XCJkb21haW5Db3ZlcmFnZSA9PT0gJzEwMCUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZThmNWU4OyBib3JkZXI6IDFweCBzb2xpZCAjNGNhZjUwOyBib3JkZXItcmFkaXVzOiA4cHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjogIzJlN2QzMjsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIPCfjokgRXhjZWxsZW50ISBBbGwgZG9tYWluIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCBieSB0aGUgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vyc2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgY2F0ZWdvcnkuPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiA8IS0tIENsb3NlIG1haW4tY29udGVudCBkaXYgLS0+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG5cbjxkaXYgW2hpZGRlbl09XCIhaXNQREZEb3dubG9hZFwiIGNsYXNzPVwiZ2FwLWFuYWx5c2lzLXBkZi1jb250YWluZXJcIiAjcGRmQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZ2FwLWFuYWx5c2lzLXBkZi1oZWFkZXJcIj5cbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2thcm1heW9naUxvZ28tbWluLnBuZ1wiIGFsdD1cIkthcm1heW9naSBCaGFyYXQgTG9nb1wiIGNsYXNzPVwibG9nb1wiIC8+XG4gICAgICA8aDE+PHNwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwic2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnXCI+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/LmRlcGFydG1lbnRfbmFtZT8ubmFtZX19PC9zcGFuPiBcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeSdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/Lm5hbWV9fTwvc3Bhbj4gICBcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSBcIj4vIHt7cGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPjwvaDE+XG4gICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+QSBkZXRhaWxlZCBicmVha2Rvd24gb2YgY29tcGV0ZW5jaWVzIEdhcCBBbmFseXNpczwvcD5cbiAgICAgXG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXNuYXBzaG90XCI+XG4gICAgICA8aDI+Q29tcGV0ZW5jeSBTbmFwc2hvdDwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwic25hcHNob3QtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2lyY2xlLXdyYXBwZXJcIj5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwicHJvZ3Jlc3MtcmluZ1wiIHdpZHRoPVwiMTIwXCIgaGVpZ2h0PVwiMTIwXCI+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicHJvZ3Jlc3MtcmluZy1iZ1wiIGN4PVwiNjBcIiBjeT1cIjYwXCIgcj1cIjUyXCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwcm9ncmVzcy1yaW5nLWNpcmNsZVwiIGN4PVwiNjBcIiBjeT1cIjYwXCIgcj1cIjUyXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVyY2VudGFnZS10ZXh0XCI+e3tvdmVyYWxsQ292ZXJhZ2V9fTxiciAvPjxzcGFuPk92ZXJhbGwgQ292ZXJhZ2U8L3NwYW4+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8IS0tIFRvdGFsIENvbXBldGVuY2llcyBCb3ggLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWwtYm94XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlRvdGFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBQcm9ncmVzcyBCYXJzIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dCBiZWhhdmlvcmFsXCI+QmVoYXZpb3VyYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3ZlcmVkLXRleHRcIj57e2JlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50fX0gLyB7e2JlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llc319IENvdmVyZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWZpbGwgYmVoYXZpb3JhbFwiIFtzdHlsZS53aWR0aC4lXT1cIihiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIGJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcykgKiAxMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHQgZnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3ZlcmVkLXRleHRcIj57e2Z1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50fX0gLyB7e2Z1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llc319IENvdmVyZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWZpbGwgZnVuY3Rpb25hbFwiIFtzdHlsZS53aWR0aC4lXT1cIihmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIGZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcykgKiAxMDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHQgZG9tYWluXCI+RG9tYWluPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY292ZXJlZC10ZXh0XCI+e3tkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50fX0gLyB7e2RvbWFpblRvdGFsQ29tcGV0ZW5jaWVzfX0gQ292ZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbCBkb21haW5cIiBbc3R5bGUud2lkdGguJV09XCIoZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCAvIGRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxkaXYgY2xhc3M9XCJnYXAtc2VjdGlvbiBtYi00XCI+XG4gICAgICA8aDI+RGV0YWlsZWQgQ29tcGV0ZW5jeSBBbmFseXNpczwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2FwLWJveFwiPlxuICAgICAgICBCcmlkZ2UgWW91ciBDb21wZXRlbmNpZXMgR2FwXG4gICAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj5IZXJlIGFyZSB7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50KX19IGtleSBhcmVhcyBmb3IgZGV2ZWxvcG1lbnQuPC9wPlxuICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZyBtYi00XCI+XG4gICAgICAgIDxwPkdhcCB0byBBZGRyZXNzIDxzcGFuICpuZ0lmPVwiKHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50KSkgPiAwXCI+KHt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQpfX0pPC9zcGFuPjwvcD5cbiAgICAgICAgXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBiZWhhdmlvcmFsXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgYmVoYXZpb3JhbFwiPkJlaGF2aW91cmFsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBmdW5jdGlvbmFsXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZnVuY3Rpb25hbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgZnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgZG9tYWluXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZG9tYWluTm90TWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICA8IS0tIFByb2plY3QgTWFuYWdlbWVudCAgLS0+XG4gICAgICAgICAgJm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBkb21haW5cIj5Eb21haW48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmcgbWItNFwiPlxuICAgICAgICA8cD5Db3ZlcmVkIENvbXBldGVuY2llcyA8c3Bhbj4oe3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvdXJhbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGZ1bmN0aW9uYWxOb3RNYXRjaGVkPy5sZW5ndGggKyBkb21haW5Ob3RNYXRjaGVkPy5sZW5ndGgpfX0pPC9zcGFuPjwvcD4gICAgICAgIFxuICAgICA8L2Rpdj5cbiAgICAgPGRpdiBjbGFzcz1cImdhcC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmVlbi1iZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1sYWJlbCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgQ29uZ3JhdHVsYXRpb25zIVxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgXG4gICAgICAgICAgICA8cD5Zb3UgaGF2ZSBzdWNjZXNzZnVsbHkgY292ZXJlZCA8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPnt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3VyYWxOb3RNYXRjaGVkPy5sZW5ndGggKyBmdW5jdGlvbmFsTm90TWF0Y2hlZD8ubGVuZ3RoICsgZG9tYWluTm90TWF0Y2hlZD8ubGVuZ3RoKX19IGtleSBjb21wZXRlbmNpZXMsIGZvcm1pbmcgYSBzdHJvbmcgcHJvZmVzc2lvbmFsIGZvdW5kYXRpb24uPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgYmVoYXZpb3JhbFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJlaGF2aW91cmFsTWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0/LnRoZW1lIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAge3tpdGVtPy5zdWJfdGhlbWV9fSZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgYmVoYXZpb3JhbFwiPkJlaGF2aW91cmFsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBmdW5jdGlvbmFsXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZnVuY3Rpb25hbE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtPy50aGVtZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAge3tpdGVtPy5zdWJfdGhlbWV9fSZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgZnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNhcmQgZG9tYWluXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZG9tYWluTWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0/LnRoZW1lIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgPCEtLSBQcm9qZWN0IE1hbmFnZW1lbnQgIC0tPlxuICAgICAgICAgIHt7aXRlbT8uc3ViX3RoZW1lfX0mbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGRvbWFpblwiPkRvbWFpbjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYXAtc2VjdGlvbiBtYi00XCI+XG4gICAgICAgIDxoMj5SZWNvbW1lbmRlZCBDb3Vyc2VzPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFwcC1nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlIFtwbGFuRGF0YV09XCJwbGFuRGF0YVwiPjwvYXBwLWdhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2U+XG48L2Rpdj5cbiAgXG5cblxuPGRpdiBjbGFzcz1cIm92ZXJsYXktbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nICYmIGRhdGFMb2FkZWQgJiYgIWlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzXCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGVudFwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHQgbXQtM1wiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj57eyBjdXJyZW50UHJvY2Vzc2luZ1N0YWdlIHx8ICdQcmVwYXJpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIGdlbmVyYXRpb24uLi4nIH19PC9wPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtaW5kaWNhdG9yXCIgKm5nSWY9XCJwcm9ncmVzc1BlcmNlbnRhZ2UgPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzUGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJwcm9ncmVzcy10ZXh0XCI+e3sgcHJvZ3Jlc3NQZXJjZW50YWdlIH19JSBDb21wbGV0ZTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGltZS1lc3RpbWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICBSZWFsLXRpbWUgY291cnNlIGdlbmVyYXRpb24gaW4gcHJvZ3Jlc3MuIFRoaXMgbWF5IHRha2UgMS0yIG1pbnV0ZXMuXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
2043
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2VuZXJhdGUtY291cnNlLXJlY29tbWVuZGF0aW9uL2dlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBcUIsU0FBUyxFQUFjLE1BQU0sRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFckcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxRQUFRLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtFQUFrRSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQU9uSCxNQUFNLE9BQU8scUNBQXFDO0lBb0JoRCxZQUFtQixTQUE4RCxFQUMvQyxJQUFTLEVBQVMsYUFBNEIs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RSxvQ0FBb0M7OzBCQXlCM0MsTUFBTTsyQkFBQyxlQUFlO29KQXBCbUIsVUFBVTtzQkFBckQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztBQXl1RTVDLGdDQUFnQztBQW1HaEMsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUNTLFNBQXFEO1FBQXJELGNBQVMsR0FBVCxTQUFTLENBQTRDO0lBQzFELENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQVhVLDRCQUE0QjttR0FBNUIsNEJBQTRCLHNFQWhHN0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzs0RkFzRVUsNEJBQTRCO2tCQWxHeEMsU0FBUzsrQkFDRSxnQ0FBZ0MsWUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQXJyYXksIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU3VnZ2VzdE1vcmVDb3Vyc2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3VnZ2VzdC1tb3JlLWNvdXJzZXMvc3VnZ2VzdC1tb3JlLWNvdXJzZXMuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBBZGRDb3Vyc2VDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtY291cnNlL2FkZC1jb3Vyc2UuY29tcG9uZW50JztcbmltcG9ydCBodG1sMnBkZiBmcm9tICdodG1sMnBkZi5qcyc7XG5pbXBvcnQgeyBjb25jYXQsIGludGVydmFsLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlV2hpbGUsIHRhcCwgY2F0Y2hFcnJvciwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVsZXRlLXJvbGUtbWFwcGluZy1wb3B1cC9kZWxldGUtcm9sZS1tYXBwaW5nLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdlbmVyYXRlLWNvdXJzZS1yZWNvbW1lbmRhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZS1jb3Vyc2UtcmVjb21tZW5kYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgncGRmQ29udGVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZGZDb250ZW50ITogRWxlbWVudFJlZjtcbiAgcGxhbkRhdGE6IGFueVxuICBsb2FkaW5nID0gZmFsc2VcbiAgZGF0YUxvYWRlZCA9IGZhbHNlIC8vIFRyYWNrIGlmIGluaXRpYWwgZGF0YSBoYXMgYmVlbiBsb2FkZWRcbiAgaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZSAvLyBUcmFjayByZWdlbmVyYXRpb24gd2l0aCBwcm9ncmVzcyBsb2FkaW5nXG4gIHJlY29tbWVuZGVkX2NvdXJzZV9pZCA9ICcnXG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBmb3IgY291cnNlIGdlbmVyYXRpb25cbiAgY3VycmVudFByb2Nlc3NpbmdTdGFnZTogc3RyaW5nID0gJyc7XG4gIHByb2dyZXNzUGVyY2VudGFnZTogbnVtYmVyID0gMDtcbiAgcHJvY2Vzc2luZ1N0YWdlcyA9IFtcbiAgICAnQW5hbHl6aW5nIHJvbGVzIGFuZCByZXNwb25zaWJpbGl0aWVzLi4uJyxcbiAgICAnRGV0YWlsaW5nIGNvbXBldGVuY3kgcmVxdWlyZW1lbnRzLi4uJyxcbiAgICAnUHJlcGFyaW5nIGlHT1QgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLicsXG4gICAgJ0dlbmVyYXRpbmcgcHVibGljIGNvdXJzZSBzdWdnZXN0aW9ucy4uLicsXG4gICAgJ0NvbXB1dGluZyBjb21wcmVoZW5zaXZlIGdhcCBhbmFseXNpcy4uLicsXG4gICAgJ0ZpbmFsaXppbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHBsYW4uLi4nXG4gIF07XG4gIHN0YWdlU3RhcnRUaW1lOiBudW1iZXIgPSAwO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8R2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLCBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLnBsYW5EYXRhID0gZGF0YVxuICB9XG4gIHNlYXJjaFRleHQgPSAnJ1xuICBmaWx0ZXJkQ291cnNlczogYW55ID0gW11cbiAgb3JpZ2luYWxEYXRhOiBhbnkgPSBbXVxuICBzZWxlY3RGaWx0ZXJDb3Vyc2VzOiBhbnkgPSBbXVxuICBzdWdnZXN0ZWRDb3Vyc2VzOiBhbnkgPSBbXSAvLyBUcmFjayBpR09UIHN1Z2dlc3RlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgdXNlckFkZGVkQ291cnNlczogYW55ID0gW10gLy8gVHJhY2sgdXNlci1hZGRlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgbW9kZSA9ICdhZGQnXG4gIGNicF9wbGFuX2lkID0gJydcbiAgZXhwYW5kZWRDb21wZXRlbmNpZXM6IGFueSA9IHt9OyAvLyBUcmFjayBleHBhbmRlZCBzdGF0ZSBmb3IgZWFjaCBjb3Vyc2UgYW5kIGNvbXBldGVuY3kgdHlwZVxuICBvdXRlclRhYkFjdGl2ZUluZGV4ID0gMFxuICBpbm5lclRhYkFjdGl2ZUluZGV4ID0gMFxuICBvdXRlclRhYkFjdGl2ZVRleHQgPSAnYWxsJ1xuICBpbm5lclRhYkFjdGl2ZVRleHQgPSAnYWxsJ1xuICBzZWxlY3RlZENhdGVnb3J5ID0gJ2FsbCc7XG4gIGNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIG92ZXJhbGxDb3ZlcmFnZTogYW55ID0gMFxuICBiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IDBcbiAgYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzID0gMFxuICBiZWhhdmlvcmFsQ292ZXJhZ2U6IGFueSA9IDBcbiAgZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIGZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcyA9IDBcbiAgZnVuY3Rpb25hbENvdmVyYWdlOiBhbnkgPSAwXG4gIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSAwXG4gIGRvbWFpblRvdGFsQ29tcGV0ZW5jaWVzID0gMFxuICBkb21haW5Db3ZlcmFnZTogYW55ID0gMFxuICBjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXVxuICBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXVxuICBtZW51SXRlbXMgPSBbXG4gICAgeyBrZXk6ICdhbGwnLCBsYWJlbDogJ0FsbCBDYXRlZ29yaWVzJyB9LFxuICAgIHsga2V5OiAnYmVoYXZpb3JhbCcsIGxhYmVsOiAnQmVoYXZpb3VyYWwnIH0sXG4gICAgeyBrZXk6ICdmdW5jdGlvbmFsJywgbGFiZWw6ICdGdW5jdGlvbmFsJyB9LFxuICAgIHsga2V5OiAnZG9tYWluJywgbGFiZWw6ICdEb21haW4nIH1cbiAgXTtcbiAgYmVoYXZpb3VyYWxOb3RNYXRjaGVkID0gW11cbiAgZnVuY3Rpb25hbE5vdE1hdGNoZWQgPSBbXVxuICBkb21haW5Ob3RNYXRjaGVkID0gW11cbiAgc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnXG4gIG9yaWdpbmFsRmlsdGVyZWRDb3Vyc2VzID0gW11cbiAgaXNSZWdlbmVyYXRpbmcgPSBmYWxzZVxuICBpc1BERkRvd25sb2FkID0gZmFsc2VcbiAgYmVoYXZpb3VyYWxNYXRjaGVkID0gW11cbiAgZnVuY3Rpb25hbE1hdGNoZWQgPSBbXVxuICBkb21haW5NYXRjaGVkID0gW11cbiAgZmlsdGVyRm9ybSE6IEZvcm1Hcm91cDtcbiAgY29tcGV0ZW5jaWVzVHlwZSA9IFsnQWxsJywgJ0JlaGF2aW91cmFsJywgJ0Z1bmN0aW9uYWwnLCAnRG9tYWluJ11cbiAgcmF0aW5ncyA9IFsnNC41IGFuZCBhYm92ZScsICc0LjAgYW5kIGFib3ZlJywgJzMuNSBhbmQgYWJvdmUnLCAnMi41IGFuZCBhYm92ZScsICcxIGFuZCBhYm92ZSddO1xuICBsYW5ndWFnZXMgPSBbJ0VuZ2xpc2gnLCAnSGluZGknLCAnVGFtaWwnLCAnS2FubmFkYScsICdUZWx1Z3UnLCAnTWFsYXlhbGFtJywgJ0Fzc2FtZXNlJywgJ0JlbmdhbGknLCAnR3VqYXJhdGknLCAnTWFyYXRoaScsICdPZGlhJywgJ1B1bmphYmknLCAnS29ua2FuaScsICdCb2RvJywgJ0RvZ3JpJywgJ0thc2htaXJpJywgJ01haXRoaWxpJywgJ01hbmlwdXJpJywgJ05lcGFsaScsICdTYW5za3JpdCcsICdTYW50YWxpJywgJ1NpbmRoaScsICdVcmR1J107XG4gIGR1cmF0aW9ucyA9IFsnPCAxIEhvdXInLCAnMS01IEhvdXJzJywgJzUrIEhvdXJzJ107XG4gIHByb3ZpZGVycyA9IFtdO1xuICBmaWx0ZXJlZENvbXBldGVuY3kgPSBbLi4udGhpcy5jb21wZXRlbmNpZXNUeXBlXTtcbiAgZmlsdGVyZWRSYXRpbmdzID0gWy4uLnRoaXMucmF0aW5nc107XG4gIGZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgZmlsdGVyZWREdXJhdGlvbnMgPSBbLi4udGhpcy5kdXJhdGlvbnNdO1xuICBmaWx0ZXJlZFByb3ZpZGVycyA9IFsuLi50aGlzLnByb3ZpZGVyc107XG4gIGZ1bGxDb3Vyc2VMaXN0ID0gW11cbiAgLy8gU2VsZWN0ZWQgZmlsdGVyc1xuICBzZWxlY3RlZENvbXBldGVuY3kgPSAnQWxsJztcbiAgc2VsZWN0ZWRSYXRpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWREdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNlbGVjdGVkUHJvdmlkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBmaXJzdEFwaVJlc3BvbnNlOiBhbnkgPSBudWxsXG4gIGV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCA9IGZhbHNlO1xuICBzZWxlY3RDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKClcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGNvbXBldGVuY3k6IFtbXV0sXG4gICAgICByYXRpbmc6IFtbXV0sXG4gICAgICBsYW5ndWFnZTogW1tdXSxcbiAgICAgIGR1cmF0aW9uOiBbW11dLFxuICAgICAgcHJvdmlkZXI6IFtbXV1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRDb21wb25lbnREYXRhKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuc2VhcmNoVGV4dCcsIHZhbHVlKVxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgc2VhcmNoRGF0YSgpIHtcbiAgICAvLyAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLnNlYXJjaFRleHQpO1xuICB9XG5cbiAgc2VsZWN0ZWRGaWx0ZXJDb3Vyc2VzKGV2ZW50LCBpdGVtKSB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXG4gICAgY29uc29sZS5sb2coJ2l0ZW0nLCBpdGVtKVxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmluZGV4T2YoaXRlbT8uaWRlbnRpZmllcikgPCAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLmZpbmRJbmRleChcbiAgICAgICAgY29udHJvbCA9PiBjb250cm9sID09PSBpdGVtLmlkZW50aWZpZXJcbiAgICAgICk7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMnLCB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMpXG4gIH1cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBzYXZlQ291cnNlcygpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgY29uc29sZS5sb2coJ3RoaXMucGxhbkRhdGEnLCB0aGlzLnBsYW5EYXRhKVxuICAgIGxldCByZXFCb2R5ID0ge1xuICAgICAgXCJyb2xlX21hcHBpbmdfaWRcIjogdGhpcy5wbGFuRGF0YS5pZCxcbiAgICAgIFwicmVjb21tZW5kZWRfY291cnNlX2lkXCI6IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkLFxuICAgICAgXCJjb3Vyc2VfaWRlbnRpZmllcnNcIjogdGhpcy5zZWxlY3RGaWx0ZXJDb3Vyc2VzXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdyZXFCb2R5LCAnLCByZXFCb2R5KVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdhZGQnKSB7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2F2ZUNvdXJzZShyZXFCb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlcyk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jYnBfcGxhbl9pZCkge1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlQ291cnNlKHJlcUJvZHksIHRoaXMuY2JwX3BsYW5faWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdDb3Vyc2VzIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8uZGV0YWlsLCAnWCcsIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIGNicF9wbGFuX2lkIGlzIG5vdCBhdmFpbGFibGVcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5lcnJvcignY2JwX3BsYW5faWQgaXMgbm90IGF2YWlsYWJsZSBmb3IgdXBkYXRlIG9wZXJhdGlvbicpO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byB1cGRhdGUgY291cnNlczogbWlzc2luZyBwbGFuIElEJywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxuICBnZXRDb3Vyc2VzKCkge1xuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBTdWNjZXNzIGhhbmRsaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMpXG4gICAgICAgIHRoaXMuY2JwX3BsYW5faWQgPSByZXM/LmlkXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5zZWxlY3RlZF9jb3Vyc2VzICYmIHJlcz8uc2VsZWN0ZWRfY291cnNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5tb2RlID0gJ2VkaXQnXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXM/LnNlbGVjdGVkX2NvdXJzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5wdXNoKHJlcy5zZWxlY3RlZF9jb3Vyc2VzW2ldPy5pZGVudGlmaWVyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL3RoaXMuc3VjY2Vzc1JvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcilcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuXG5cbiAgICB9KVxuICB9XG4gIGdldFN1Z2dlc3RlZENvdXJzZSgpIHtcbiAgICBsZXQgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZFxuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0U3VnZ2VzdGVkQ291cnNlcyhyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgY29uc29sZS5sb2coJ2dldFN1Z2dlc3RlZENvdXJzZXMgcmVzJywgcmVzKVxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgICAgIC8vIFN0b3JlIHN1Z2dlc3RlZCBjb3Vyc2VzIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gWy4uLnJlc107XG5cbiAgICAgICAgLy8gUmVidWlsZCBmaWx0ZXJkQ291cnNlcyB0byBpbmNsdWRlIGFsbCBjb3Vyc2UgdHlwZXNcbiAgICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRDb3Vyc2VzKCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGdhcCBhbmFseXNpcyBzdGF0cyBhZnRlciBzdWdnZXN0ZWQgY291cnNlcyBhcmUgYWRkZWRcbiAgICAgICAgdGhpcy51cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpXG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVW5hdXRob3JpemVkIGFjY2VzcyAtIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIGxvZ2luJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSGFuZGxlIG90aGVyIGVycm9ycyBncmFjZWZ1bGx5XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgc3VnZ2VzdGVkIGNvdXJzZXMnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG5cblxuICAgIH0pXG4gIH1cblxuICBnZXRVc2VyQ291cnNlKCkge1xuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmxvZygnZ2V0VXNlckNvdXJzZSBBUEkgcmVzcG9uc2U6JywgcmVzKVxuICAgICAgICBjb25zb2xlLmxvZygnQ3VycmVudCBmaWx0ZXJkQ291cnNlcyBiZWZvcmUgYWRkaW5nIHVzZXIgY291cnNlczonLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuXG4gICAgICAgIC8vIFN0b3JlIHVzZXItYWRkZWQgY291cnNlcyBzZXBhcmF0ZWx5IChyZXNldCB0byBhdm9pZCBkdXBsaWNhdGVzKVxuICAgICAgICB0aGlzLnVzZXJBZGRlZENvdXJzZXMgPSBbLi4ucmVzXTtcblxuICAgICAgICAvLyBQcm9jZXNzIHVzZXItYWRkZWQgY291cnNlcyB0byBlbnN1cmUgcHJvcGVyIHN0cnVjdHVyZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHVzZXJDb3Vyc2UgPSByZXNbaV07XG4gICAgICAgICAgY29uc29sZS5sb2coYFVzZXIgY291cnNlICR7aX0gY29tcGV0ZW5jaWVzOmAsIHVzZXJDb3Vyc2UuY29tcGV0ZW5jaWVzKTtcblxuICAgICAgICAgIC8vIEVuc3VyZSB1c2VyLWFkZGVkIGNvdXJzZXMgaGF2ZSB0aGUgZXhwZWN0ZWQgc3RydWN0dXJlIGZvciBkaXNwbGF5XG4gICAgICAgICAgaWYgKHVzZXJDb3Vyc2UgJiYgIXVzZXJDb3Vyc2UuY291cnNlX3R5cGUpIHtcbiAgICAgICAgICAgIHVzZXJDb3Vyc2UuY291cnNlX3R5cGUgPSAnVXNlciBBZGRlZCc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGlkZW50aWZpZXIgaWYgbWlzc2luZyAobmVlZGVkIGZvciBjb3Vyc2Ugc2VsZWN0aW9uIGxvZ2ljKVxuICAgICAgICAgIGlmICh1c2VyQ291cnNlICYmICF1c2VyQ291cnNlLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHVzZXJDb3Vyc2UuaWRlbnRpZmllciA9IHVzZXJDb3Vyc2UuaWQgfHwgYHVzZXJfY291cnNlXyR7aX1fJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVidWlsZCBmaWx0ZXJkQ291cnNlcyB0byBpbmNsdWRlIGFsbCBjb3Vyc2UgdHlwZXNcbiAgICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRDb3Vyc2VzKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2ZpbHRlcmRDb3Vyc2VzIGFmdGVyIGFkZGluZyB1c2VyIGNvdXJzZXM6JywgdGhpcy5maWx0ZXJkQ291cnNlcyk7XG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvLyBIYW5kbGUgNDA5IENvbmZsaWN0IGhlcmVcbiAgICAgICAgLy8gYWxlcnQoJ0NvbmZsaWN0IGRldGVjdGVkOiBUaGUgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgb3IgYWN0aW9uIGNvbmZsaWN0cy4nKTtcbiAgICAgICAgLy90aGlzLmdldFxuICAgICAgICAvLyBPciB5b3UgY2FuIHNldCBhIFVJIGVycm9yIG1lc3NhZ2UgdmFyaWFibGVcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG5cblxuICAgIH0pXG4gIH1cblxuICBjaGVja0lmQ291cnNlRXhpc3RzKGl0ZW0pIHtcbiAgICBsZXQgZmxhZyA9IGZhbHNlXG4gICAgaWYgKHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcy5pbmRleE9mKGl0ZW0/LmlkZW50aWZpZXIpID4gLTEpIHtcbiAgICAgIGZsYWcgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmbGFnXG4gIH1cblxuICBzZWxlY3RBbGxDb3Vyc2VzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLnNlbGVjdEZpbHRlckNvdXJzZXMucHVzaCh0aGlzLmZpbHRlcmRDb3Vyc2VzW2ldLmlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyA9IFtdXG5cbiAgICB9XG4gICAgaWYgKHRoaXMuY2JwX3BsYW5faWQpIHtcbiAgICAgIHRoaXMubW9kZSA9ICd1cGRhdGUnXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZSA9ICdhZGQnXG4gICAgfVxuXG5cbiAgfVxuICBnZXRTZWN0b3JzKHNlY3Rvcikge1xuICAgIGlmIChzZWN0b3IgJiYgc2VjdG9yLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2VjdG9yKSA/IHNlY3Rvci5qb2luKCcvICcpIDogJydcbiAgICB9XG5cbiAgfVxuXG4gIGZpbHRlckRhdGEoc2VhcmNoVGV4dDogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGZpbHRlciA9IHNlYXJjaFRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyhpdGVtKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgfSk7XG4gIH1cblxuICBmbGF0dGVuT2JqZWN0VG9TdHJpbmcob2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgdmFsO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyB0aGlzLmZsYXR0ZW5PYmplY3RUb1N0cmluZyh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0ICs9ICcgJyArIHRoaXMuZmxhdHRlbk9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3VnZ2VzdE1vcmVDb3Vyc2VzKCkge1xuICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICBjb25zdCBkaWFsb2dSZWZOZXcgPSB0aGlzLmRpYWxvZy5vcGVuKFN1Z2dlc3RNb3JlQ291cnNlc0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMTAwcHgnLFxuICAgICAgZGF0YTogeyByZWNvbW1lbmRlZF9jb3Vyc2VfaWQ6IHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkLCByb2xlX21hcHBpbmdfaWQ6IHRoaXMucGxhbkRhdGEuaWQgfSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmTmV3LmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbihlbGVtZW50OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnR2VuZXJhdGUgQ291cnNlIFJlY29tbWVuZGF0aW9uIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyB0aGlzLmFjdGl2ZVJvd0VsZW1lbnQgPSBlbGVtZW50XG4gICAgY29uc29sZS5sb2coJ0VkaXQgUm9sZSBNYXBwaW5nIGNsaWNrZWQnLCBlbGVtZW50KTtcbiAgICAvLyBOYXZpZ2F0ZSBvciBvcGVuIG1vZGFsXG4gICAgY29uc29sZS5sb2coJ1ZpZXcgQ0JQIFBsYW4gY2xpY2tlZCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oR2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbkNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgICAgZGF0YTogZWxlbWVudCxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDaGFuZ2VzIHNhdmVkIScpO1xuICAgICAgICAvLyBSZWZyZXNoIGRhdGEgb3Igc2hvdyBhIHRvYXN0IGhlcmVcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iailcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmogJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeSAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkKSB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJvbGVNYXBwaW5nQnlTdGF0ZUNlbnRlcih0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLm1pbmlzdHJ5LmlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgICAgICAgIC8vIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gcmVzXG4gICAgICAgICAgICAvLyB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHJlcztcbiAgICAgICAgICAgIC8vICBjb25zb2xlLmxvZygndGhpcy5kYXRhU291cmNlJyx0aGlzLmRhdGFTb3VyY2UpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGluZGV4KTogYW55W10ge1xuICAgIGNvbnN0IGNvdXJzZSA9IHRoaXMuZmlsdGVyZENvdXJzZXNbaW5kZXhdO1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gY291cnNlIGZvdW5kIGF0IGluZGV4ICR7aW5kZXh9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgLy8gQUkgUmVjb21tZW5kZWQgJiBQdWJsaWMgY291cnNlcyB1c2UgJ2NvbXBldGVuY2llcydcbiAgICAvLyBNYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIGNvdXJzZXMgdXNlICdjb21wZXRlbmNpZXNfdjYnXG4gICAgLy8gVXNlciBBZGRlZCBjb3Vyc2VzIHVzZSAnY29tcGV0ZW5jaWVzJ1xuICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICBpZiAoY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgLy8gIGNvbnNvbGUubG9nKGBDb3Vyc2UgJHtpbmRleH0gKCR7Y291cnNlLmNvdXJzZV90eXBlIHx8IGNvdXJzZS5uYW1lIHx8ICdVbmtub3duJ30pIHVzaW5nICdjb21wZXRlbmNpZXMnIHByb3BlcnR5OmAsIGNvbXBldGVuY2llcyk7XG4gICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSB1c2luZyAnY29tcGV0ZW5jaWVzX3Y2JyBwcm9wZXJ0eTpgLCBjb21wZXRlbmNpZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgQ291cnNlICR7aW5kZXh9ICgke2NvdXJzZS5jb3Vyc2VfdHlwZSB8fCBjb3Vyc2UubmFtZSB8fCAnVW5rbm93bid9KSBoYXMgbm8gdmFsaWQgY29tcGV0ZW5jaWVzIHByb3BlcnR5OmAsIHtcbiAgICAgIC8vICAgaGFzQ29tcGV0ZW5jaWVzOiAhIWNvdXJzZS5jb21wZXRlbmNpZXMsXG4gICAgICAvLyAgIGNvbXBldGVuY2llc1R5cGU6IHR5cGVvZiBjb3Vyc2UuY29tcGV0ZW5jaWVzLFxuICAgICAgLy8gICBoYXNDb21wZXRlbmNpZXNWNjogISFjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2LFxuICAgICAgLy8gICBjb21wZXRlbmNpZXNWNlR5cGU6IHR5cGVvZiBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2LFxuICAgICAgLy8gICBjb3Vyc2VLZXlzOiBPYmplY3Qua2V5cyhjb3Vyc2UpXG4gICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcGV0ZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gIGNvbnNvbGUubG9nKGBObyBjb21wZXRlbmNpZXMgZm91bmQgZm9yIGNvdXJzZSAke2luZGV4fSBhbmQgdHlwZSAke3R5cGV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSB0eXBlIGZvciBjb21wYXJpc29uIChjYXNlLWluc2Vuc2l0aXZlICsgaGFuZGxlIHNwZWxsaW5nIHZhcmlhdGlvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgY29uc3QgbWF0Y2hlZENvbXBldGVuY2llcyA9IGNvbXBldGVuY2llcy5maWx0ZXIoYyA9PiB7XG4gICAgICBpZiAoIWMgfHwgIWMuY29tcGV0ZW5jeUFyZWFOYW1lKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJbnZhbGlkIGNvbXBldGVuY3kgc3RydWN0dXJlIGluIGNvdXJzZSAke2luZGV4fTpgLCBjKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wZXRlbmN5QXJlYSA9IGMuY29tcGV0ZW5jeUFyZWFOYW1lLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAvLyBIYW5kbGUgYm90aCBcImJlaGF2aW9yYWxcIiBhbmQgXCJiZWhhdmlvdXJhbFwiIHNwZWxsaW5nc1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3VyYWwnIHx8IG5vcm1hbGl6ZWRUeXBlID09PSAnYmVoYXZpb3JhbCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3JhbCcgfHwgY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvdXJhbCc7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBvdGhlciB0eXBlcywgZG8gY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uXG4gICAgICByZXR1cm4gY29tcGV0ZW5jeUFyZWEgPT09IG5vcm1hbGl6ZWRUeXBlO1xuICAgIH0pO1xuXG4gICAgLy8gY29uc29sZS5sb2coYEZvdW5kICR7bWF0Y2hlZENvbXBldGVuY2llcy5sZW5ndGh9IGNvbXBldGVuY2llcyBvZiB0eXBlICR7dHlwZX0gZm9yIGNvdXJzZSAke2luZGV4fTpgLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgICByZXR1cm4gbWF0Y2hlZENvbXBldGVuY2llcztcbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5QmVodmlvdXJhbFR5cGUoaW5kZXgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdXJzZSA9IHRoaXMuZmlsdGVyZENvdXJzZXNbaW5kZXhdO1xuICAgIGlmICghY291cnNlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llcykpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGV0ZW5jaWVzXG4gICAgICAuZmlsdGVyKGMgPT4gYyAmJiAoYy5jb21wZXRlbmN5QXJlYU5hbWUgPT09ICdCZWhhdmlvcmFsJyB8fCBjLmNvbXBldGVuY3lBcmVhTmFtZSA9PT0gJ0JlaGF2aW91cmFsJykpXG4gICAgICAubWFwKGMgPT4gYCR7Yy5jb21wZXRlbmN5VGhlbWVOYW1lIHx8ICcnfSAtICR7Yy5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIHx8ICcnfWApXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGdldERpc3BsYXllZENvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY29tcGV0ZW5jaWVzID0gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpO1xuICAgIGNvbnN0IGtleSA9IGAke2luZGV4fS0ke3R5cGV9YDtcblxuICAgIGlmICh0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0pIHtcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBldGVuY2llcy5zbGljZSgwLCAyKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbXBldGVuY2llcyh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldID0gIXRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XTtcbiAgfVxuXG4gIGlzRXhwYW5kZWQodHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ29tcGV0ZW5jaWVzW2tleV0gfHwgZmFsc2U7XG4gIH1cblxuICBoYXNNb3JlVGhhblR3byh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZSwgaW5kZXgpLmxlbmd0aCA+IDI7XG4gIH1cblxuICBnZXRSZW1haW5pbmdDb3VudCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuICAgIHJldHVybiB0b3RhbENvdW50IC0gMjtcbiAgfVxuXG4gIG9uT3V0ZXJUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vdXRlclRhYkFjdGl2ZUluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLm91dGVyVGFiQWN0aXZlVGV4dCA9IGV2ZW50LnRhYi50ZXh0TGFiZWxcbiAgICBjb25zb2xlLmxvZygnT3V0ZXIgVGFiIEluZGV4OicsIGV2ZW50LmluZGV4KTtcbiAgICBjb25zb2xlLmxvZygnT3V0ZXIgVGFiIExhYmVsOicsIGV2ZW50LnRhYi50ZXh0TGFiZWwpO1xuICAgIGlmIChldmVudC5pbmRleCA9PT0gMSkge1xuICAgICAgdGhpcy5nYXBBbmFseXNpc1N0YXRzKClcbiAgICB9XG4gICAgaWYgKGV2ZW50LmluZGV4ID09PSAwKSB7XG4gICAgICAvLyB0aGlzLmdldENvdXJzZXMoKVxuICAgICAgLy8gdGhpcy5nZXRTdWdnZXN0ZWRDb3Vyc2UoKVxuICAgICAgdGhpcy5nZXRVc2VyQ291cnNlKClcbiAgICB9XG4gIH1cblxuICBvbklubmVyVGFiQ2hhbmdlKGV2ZW50OiBNYXRUYWJDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQgPSBldmVudC50YWIudGV4dExhYmVsXG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyID0gJyc7IC8vIFJlc2V0IHRoZW1lIGZpbHRlciB3aGVuIHN3aXRjaGluZyB0YWJzXG4gICAgY29uc29sZS5sb2coJ0lubmVyIFRhYiBJbmRleDonLCBldmVudC5pbmRleCk7XG4gICAgY29uc29sZS5sb2coJ0lubmVyIFRhYiBMYWJlbDonLCBldmVudC50YWIudGV4dExhYmVsKTtcbiAgICBsZXQgdGFiSW5kZXggPSBldmVudC5pbmRleFxuICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gW11cblxuICAgIC8vIEdldCBhbGwgYXZhaWxhYmxlIGNvdXJzZXMgKG9yaWdpbmFsICsgc3VnZ2VzdGVkICsgdXNlciBhZGRlZClcbiAgICBjb25zdCBhbGxBdmFpbGFibGVDb3Vyc2VzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cblxuXG4gICAgc3dpdGNoICh0YWJJbmRleCkge1xuICAgICAgY2FzZSAwOiAvLyBBbGxcbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IGFsbEF2YWlsYWJsZUNvdXJzZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOiAvLyBCZWhhdmlvcmFsXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmJlaGF2aW9yYWxGaWx0ZXIoYWxsQXZhaWxhYmxlQ291cnNlcyk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gdGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUZpbHRlcih0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOiAvLyBGdW5jdGlvbmFsXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZ1bmN0aW9uYWxGaWx0ZXIoYWxsQXZhaWxhYmxlQ291cnNlcyk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5ID0gdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUZpbHRlcih0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOiAvLyBEb21haW5cbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IHRoaXMuZG9tYWluRmlsdGVyKGFsbEF2YWlsYWJsZUNvdXJzZXMpO1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeSA9IHRoaXMuZG9tYWluQ29tcGV0ZW5jeUZpbHRlcih0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygndGhpcy5maWx0ZXJkQ291cnNlcycsIHRoaXMuZmlsdGVyZENvdXJzZXMpXG4gICAgY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jeU1hdGNoZWRCeUNhdGVnb3J5JywgdGhpcy5jb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnkpXG4gIH1cblxuICBnZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCkge1xuICAgIC8vIFN0YXJ0IHdpdGggb3JpZ2luYWwgZGF0YSAoQUkgcmVjb21tZW5kZWQgY291cnNlcylcbiAgICBjb25zdCBhbGxDb3Vyc2VzID0gWy4uLnRoaXMub3JpZ2luYWxEYXRhXTtcbiAgICBjb25zdCBzZWVuSWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBUcmFjayBvcmlnaW5hbCBjb3Vyc2UgaWRlbnRpZmllcnNcbiAgICB0aGlzLm9yaWdpbmFsRGF0YS5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICBpZiAoY291cnNlLmlkZW50aWZpZXIpIHNlZW5JZGVudGlmaWVycy5hZGQoY291cnNlLmlkZW50aWZpZXIpO1xuICAgICAgaWYgKGNvdXJzZS5pZCkgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2UuaWQpO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIHN1Z2dlc3RlZCBjb3Vyc2VzIChpR09UIHBsYXRmb3JtIGNvdXJzZXMpXG4gICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIGNvbnN0IGNvdXJzZUlkID0gY291cnNlLmlkZW50aWZpZXIgfHwgY291cnNlLmlkO1xuICAgICAgaWYgKGNvdXJzZUlkICYmICFzZWVuSWRlbnRpZmllcnMuaGFzKGNvdXJzZUlkKSkge1xuICAgICAgICBhbGxDb3Vyc2VzLnB1c2goY291cnNlKTtcbiAgICAgICAgc2VlbklkZW50aWZpZXJzLmFkZChjb3Vyc2VJZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdXNlci1hZGRlZCBjb3Vyc2VzXG4gICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzLmZvckVhY2goY291cnNlID0+IHtcbiAgICAgIGNvbnN0IGNvdXJzZUlkID0gY291cnNlLmlkZW50aWZpZXIgfHwgY291cnNlLmlkO1xuICAgICAgaWYgKGNvdXJzZUlkICYmICFzZWVuSWRlbnRpZmllcnMuaGFzKGNvdXJzZUlkKSkge1xuICAgICAgICAvLyBFbnN1cmUgdXNlci1hZGRlZCBjb3Vyc2VzIGhhdmUgcHJvcGVyIHN0cnVjdHVyZVxuICAgICAgICBpZiAoIWNvdXJzZS5jb3Vyc2VfdHlwZSkge1xuICAgICAgICAgIGNvdXJzZS5jb3Vyc2VfdHlwZSA9ICdVc2VyIEFkZGVkJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvdXJzZS5pZGVudGlmaWVyICYmIGNvdXJzZS5pZCkge1xuICAgICAgICAgIGNvdXJzZS5pZGVudGlmaWVyID0gY291cnNlLmlkO1xuICAgICAgICB9XG4gICAgICAgIGFsbENvdXJzZXMucHVzaChjb3Vyc2UpO1xuICAgICAgICBzZWVuSWRlbnRpZmllcnMuYWRkKGNvdXJzZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdnZXRBbGxBdmFpbGFibGVDb3Vyc2VzIGJyZWFrZG93bjonLCB7XG4gICAgICBvcmlnaW5hbERhdGE6IHRoaXMub3JpZ2luYWxEYXRhLmxlbmd0aCxcbiAgICAgIHN1Z2dlc3RlZENvdXJzZXM6IHRoaXMuc3VnZ2VzdGVkQ291cnNlcy5sZW5ndGgsXG4gICAgICB1c2VyQWRkZWRDb3Vyc2VzOiB0aGlzLnVzZXJBZGRlZENvdXJzZXMubGVuZ3RoLFxuICAgICAgdG90YWxBdmFpbGFibGU6IGFsbENvdXJzZXMubGVuZ3RoXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnYWxsQ291cnNlcy0tJywgYWxsQ291cnNlcylcbiAgICBhbGxDb3Vyc2VzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0ub3JnYW5pc2F0aW9uICYmIGl0ZW0ub3JnYW5pc2F0aW9uLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZFByb3ZpZGVycy5pbmRleE9mKGl0ZW0ub3JnYW5pc2F0aW9uWzBdKSA8IDApIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLnB1c2goaXRlbS5vcmdhbmlzYXRpb25bMF0pXG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5mdWxsQ291cnNlTGlzdCA9IGFsbENvdXJzZXNcbiAgICBsZXQgaWRlbnRpZmllcnNBcnIgPSBbXVxuICAgIHRoaXMuZnVsbENvdXJzZUxpc3QubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZGVudGlmaWVyc0Fyci5wdXNoKGl0ZW0/LmlkZW50aWZpZXIpXG4gICAgfSlcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0QWRkaXRpb25hbFBhcmFtZXRlcmZvclN1Z2dlc3RlZENvdXJzZXMoaWRlbnRpZmllcnNBcnIpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzcG9uc2UucmVzdWx0LmNvbnRlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZnVsbENvdXJzZUxpc3QubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZ1bGxDb3Vyc2VMaXN0W2pdWydpZGVudGlmaWVyJ10gPT09IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydpZGVudGlmaWVyJ10pIHtcbiAgICAgICAgICAgICAgdGhpcy5mdWxsQ291cnNlTGlzdFtqXVsnbGFuZ3VhZ2UnXSA9IHJlc3BvbnNlLnJlc3VsdC5jb250ZW50W2ldWydsYW5ndWFnZSddXG4gICAgICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2F2Z1JhdGluZyddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ2F2Z1JhdGluZyddXG4gICAgICAgICAgICAgIHRoaXMuZnVsbENvdXJzZUxpc3Rbal1bJ2NvdXJzZSddID0gcmVzcG9uc2UucmVzdWx0LmNvbnRlbnRbaV1bJ25hbWUnXVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfSlcbiAgICByZXR1cm4gYWxsQ291cnNlcztcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgZmlsdGVyZENvdXJzZXMgYXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIGNvdXJzZSB0eXBlc1xuICAgKiBUaGlzIGVuc3VyZXMgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBhcHBsaWNhdGlvblxuICAgKi9cbiAgcmVidWlsZEZpbHRlcmVkQ291cnNlcygpIHtcbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cbiAgICBjb25zb2xlLmxvZygnUmVidWlsdCBmaWx0ZXJkQ291cnNlcyB3aXRoIGFsbCBjb3Vyc2UgdHlwZXM6Jywge1xuICAgICAgdG90YWw6IHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoLFxuICAgICAgYnJlYWtkb3duOiB7XG4gICAgICAgIG9yaWdpbmFsOiB0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGgsXG4gICAgICAgIHN1Z2dlc3RlZDogdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgICAgdXNlckFkZGVkOiB0aGlzLnVzZXJBZGRlZENvdXJzZXMubGVuZ3RoXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBiZWhhdmlvcmFsRmlsdGVyKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICAgIGlmIChpdGVtLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBpdGVtLmNvbXBldGVuY2llcztcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5jb21wZXRlbmNpZXNfdjYgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXMuc29tZShjID0+IGMgJiYgKChjPy5jb21wZXRlbmN5QXJlYU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWhhdmlvcmFsJykgfHwgYz8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3VyYWwnKSk7XG4gICAgfSk7XG4gIH1cblxuICBiZWhhdmlvcmFsQ29tcGV0ZW5jeUZpbHRlcihkYXRhOiBhbnlbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zb2xlLmxvZygnZGF0YS0tJywgZGF0YSlcbiAgICBjb25zdCBiZWhhdmlvcmFsVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydiZWhhdmlvcmFsJywgJ2JlaGF2aW91cmFsJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gdGhpcy5mb3JtYXRUaGVtZVdpdGhTdWJUaGVtZShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKSlcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlQmVoYXZpb3JhbFRoZW1lcyA9IEFycmF5LmZyb20obmV3IFNldChiZWhhdmlvcmFsVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVCZWhhdmlvcmFsVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlQmVoYXZpb3JhbFRoZW1lcztcbiAgfVxuXG4gIGZ1bmN0aW9uYWxDb21wZXRlbmN5RmlsdGVyKGRhdGE6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBmdW5jdGlvbmFsVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydmdW5jdGlvbmFsJ10uaW5jbHVkZXMoaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICAubWFwKGl0ZW0gPT4gdGhpcy5mb3JtYXRUaGVtZVdpdGhTdWJUaGVtZShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKSlcbiAgICAgIC5maWx0ZXIoKHRoZW1lKTogdGhlbWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odGhlbWUpKTsgLy8gRW5zdXJlcyB0eXBlIHNhZmV0eVxuXG4gICAgY29uc3QgdW5pcXVlRnVuY3Rpb25hbFRoZW1lcyA9IEFycmF5LmZyb20obmV3IFNldChmdW5jdGlvbmFsVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVGdW5jdGlvbmFsVGhlbWVzKTtcbiAgICByZXR1cm4gdW5pcXVlRnVuY3Rpb25hbFRoZW1lcztcblxuICAgIC8vIGNvbnNvbGUubG9nKHVuaXF1ZUNvbXBldGVuY3lBcmVhTmFtZXMpO1xuICB9XG5cbiAgZG9tYWluQ29tcGV0ZW5jeUZpbHRlcihkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgZG9tYWluVGhlbWVzID0gZGF0YVxuICAgICAgLmZpbHRlcihpdGVtID0+XG4gICAgICAgIGl0ZW0/LnR5cGUgJiZcbiAgICAgICAgWydkb21haW4nXS5pbmNsdWRlcyhpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmZvcm1hdFRoZW1lV2l0aFN1YlRoZW1lKGl0ZW0/LnRoZW1lLCBpdGVtPy5zdWJfdGhlbWUpKVxuICAgICAgLmZpbHRlcigodGhlbWUpOiB0aGVtZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih0aGVtZSkpOyAvLyBFbnN1cmVzIHR5cGUgc2FmZXR5XG5cbiAgICBjb25zdCB1bmlxdWVEb21haW5UaGVtZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoZG9tYWluVGhlbWVzKSk7XG5cbiAgICBjb25zb2xlLmxvZyh1bmlxdWVEb21haW5UaGVtZXMpO1xuICAgIHJldHVybiB1bmlxdWVEb21haW5UaGVtZXM7XG5cbiAgICAvLyBjb25zb2xlLmxvZyh1bmlxdWVDb21wZXRlbmN5QXJlYU5hbWVzKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb25hbEZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmIGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2Z1bmN0aW9uYWwnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvbWFpbkZpbHRlcihkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoaXRlbS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShpdGVtLmNvbXBldGVuY2llcykpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gaXRlbS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoaXRlbS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGl0ZW0uY29tcGV0ZW5jaWVzX3Y2O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzLnNvbWUoYyA9PiBjICYmIGM/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ2RvbWFpbicpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2FwQW5hbHlzaXNTdGF0cygpIHtcbiAgICBjb25zb2xlLmxvZygndGhpcy5wbGFuRGF0YScsIHRoaXMucGxhbkRhdGEpXG5cbiAgICAvLyBBbHdheXMgdXNlIEFMTCBjb21wZXRlbmNpZXMgZm9yIGNhbGN1bGF0aW5nIG92ZXJhbGwgc3RhdHNcbiAgICBjb25zdCBhbGxDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcztcblxuICAgIC8vIEZpbHRlciBmb3IgY2F0ZWdvcnktc3BlY2lmaWMgY2FsY3VsYXRpb25zXG4gICAgbGV0IGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXM6IGFueSA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICBjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCcpIHtcbiAgICAgIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMgPSB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSk7XG4gICAgfVxuXG4gICAgLy8gQ291bnQgQUxMIGNvbXBldGVuY2llcyBieSBjYXRlZ29yeSAobm90IGp1c3QgZmlsdGVyZWQgb25lcylcbiAgICBjb25zdCBtYXN0ZXJMaXN0QnlDYXRlZ29yeSA9IHsgdG90YWw6IGFsbENvbXBldGVuY2llcy5sZW5ndGgsIGJlaGF2aW91cmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBVc2UgYWxsIGF2YWlsYWJsZSBjb3Vyc2VzIGZvciBjb25zaXN0ZW50IGNvdmVyYWdlIGNhbGN1bGF0aW9uXG4gICAgLy8gVGhpcyBzaG91bGQgbWF0Y2ggd2hhdCdzIGF2YWlsYWJsZSBpbiB0aGUgRmlsdGVyIEJ5IENvbXBldGVuY3kgc2VjdGlvblxuICAgIGNvbnN0IGFsbENvdXJzZUNvbXBldGVuY2llcyA9IFtdXG4gICAgY29uc3QgYWxsQXZhaWxhYmxlQ291cnNlc0ZvclN0YXRzID0gdGhpcy5nZXRBbGxBdmFpbGFibGVDb3Vyc2VzKCk7XG5cbiAgICBhbGxBdmFpbGFibGVDb3Vyc2VzRm9yU3RhdHMuZm9yRWFjaChjb3Vyc2UgPT4ge1xuICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb21wZXRlbmN5IHByb3BlcnR5IG5hbWVzXG4gICAgICBsZXQgY29tcGV0ZW5jaWVzID0gW107XG4gICAgICBpZiAoY291cnNlICYmIGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChjb3Vyc2UgJiYgY291cnNlLmNvbXBldGVuY2llc192NiAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXNfdjYpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgICB9XG5cbiAgICAgIGNvbXBldGVuY2llcy5mb3JFYWNoKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgYWxsQ291cnNlQ29tcGV0ZW5jaWVzLnB1c2gobGlzdClcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ2FsbENvbXBldGVuY2llcycsIGFsbENvbXBldGVuY2llcylcbiAgICBjb25zb2xlLmxvZygnY2F0ZWdvcnlTcGVjaWZpY0NvbXBldGVuY2llcycsIGNhdGVnb3J5U3BlY2lmaWNDb21wZXRlbmNpZXMpXG4gICAgY29uc29sZS5sb2coJ2FsbENvdXJzZUNvbXBldGVuY2llcycsIGFsbENvdXJzZUNvbXBldGVuY2llcylcblxuICAgIC8vIENvdW50IGFsbCBjb21wZXRlbmNpZXMgYnkgdHlwZSBmb3IgcHJvcGVyIHRvdGFsc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsQ29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjb21wZXRlbmN5VHlwZSA9IGFsbENvbXBldGVuY2llc1tpXVsndHlwZSddPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc29sZS5sb2coYENvbXBldGVuY3kgJHtpfTogdHlwZT1cIiR7Y29tcGV0ZW5jeVR5cGV9XCIsIGRhdGE6YCwgYWxsQ29tcGV0ZW5jaWVzW2ldKTtcbiAgICAgIGlmIChjb21wZXRlbmN5VHlwZSA9PT0gJ2JlaGF2aW91cmFsJyB8fCBjb21wZXRlbmN5VHlwZSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICAgIG1hc3Rlckxpc3RCeUNhdGVnb3J5WydiZWhhdmlvdXJhbCddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2JlaGF2aW91cmFsJ10gKyAxXG4gICAgICB9XG4gICAgICBpZiAoY29tcGV0ZW5jeVR5cGUgPT09ICdmdW5jdGlvbmFsJykge1xuICAgICAgICBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnZnVuY3Rpb25hbCddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXSArIDFcbiAgICAgIH1cbiAgICAgIGlmIChjb21wZXRlbmN5VHlwZSA9PT0gJ2RvbWFpbicpIHtcbiAgICAgICAgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2RvbWFpbiddICsgMVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkgYWZ0ZXIgY291bnRpbmc6JywgbWFzdGVyTGlzdEJ5Q2F0ZWdvcnkpXG5cbiAgICAvLyBHZXQgbWF0Y2hpbmcgcmVzdWx0cyBmb3IgQUxMIGNvbXBldGVuY2llcyAoZm9yIG92ZXJhbGwgY292ZXJhZ2UpXG4gICAgY29uc3Qgb3ZlcmFsbFJlc3VsdCA9IHRoaXMuZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhhbGxDb21wZXRlbmNpZXMsIGFsbENvdXJzZUNvbXBldGVuY2llcyk7XG5cbiAgICAvLyBHZXQgbWF0Y2hpbmcgcmVzdWx0cyBmb3IgY2F0ZWdvcnktc3BlY2lmaWMgY29tcGV0ZW5jaWVzIChmb3IgZmlsdGVyZWQgdmlldylcbiAgICBjb25zdCBjYXRlZ29yeVJlc3VsdCA9IHRoaXMuZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyhjYXRlZ29yeVNwZWNpZmljQ29tcGV0ZW5jaWVzLCBhbGxDb3Vyc2VDb21wZXRlbmNpZXMpO1xuXG4gICAgLy8gU2V0IGNvbXBldGVuY3lDb3ZlcmVkQ291bnQgYmFzZWQgb24gc2VsZWN0ZWQgY2F0ZWdvcnkgKGZvciB0aGUgZmlsdGVyZWQgbnVtYmVycylcbiAgICBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gb3ZlcmFsbFJlc3VsdFsndG90YWwnXTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2JlaGF2aW9yYWwnKSB7XG4gICAgICB0aGlzLmNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBjYXRlZ29yeVJlc3VsdFsnYmVoYXZpb3JhbCddIHx8IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2Z1bmN0aW9uYWwnXSB8fCAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJykge1xuICAgICAgdGhpcy5jb21wZXRlbmN5Q292ZXJlZENvdW50ID0gY2F0ZWdvcnlSZXN1bHRbJ2RvbWFpbiddIHx8IDA7XG4gICAgfVxuXG4gICAgLy8gSU1QT1JUQU5UOiBPdmVyYWxsIENvdmVyYWdlIHNob3VsZCBBTFdBWVMgYmUgYmFzZWQgb24gQUxMIGNvbXBldGVuY2llcywgbm90IGZpbHRlcmVkXG4gICAgbGV0IHRvdGFsQ29tcGV0ZW5jaWVzID0gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubGVuZ3RoOyAvLyBBbHdheXMgdXNlIHRvdGFsIGNvdW50XG4gICAgbGV0IG92ZXJhbGxDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0Wyd0b3RhbCddOyAvLyBBbHdheXMgdXNlIG92ZXJhbGwgcmVzdWx0c1xuICAgIGxldCBtYXRoUm91bmQgPSBNYXRoLnJvdW5kKChvdmVyYWxsQ292ZXJlZENvdW50IC8gdG90YWxDb21wZXRlbmNpZXMpICogMTAwKVxuICAgIHRoaXMub3ZlcmFsbENvdmVyYWdlID0gYCR7bWF0aFJvdW5kfSVgXG5cbiAgICBjb25zb2xlLmxvZygnT3ZlcmFsbCBDb3ZlcmFnZSBDYWxjdWxhdGlvbjonLCB7XG4gICAgICB0b3RhbENvbXBldGVuY2llczogdG90YWxDb21wZXRlbmNpZXMsXG4gICAgICBvdmVyYWxsQ292ZXJlZENvdW50OiBvdmVyYWxsQ292ZXJlZENvdW50LFxuICAgICAgb3ZlcmFsbENvdmVyYWdlOiB0aGlzLm92ZXJhbGxDb3ZlcmFnZSxcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSxcbiAgICAgIGNvbXBldGVuY3lDb3ZlcmVkQ291bnQ6IHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudFxuICAgIH0pO1xuXG4gICAgLy8gQWx3YXlzIGNhbGN1bGF0ZSBhbGwgY2F0ZWdvcnktc3BlY2lmaWMgbWV0cmljcyByZWdhcmRsZXNzIG9mIHNlbGVjdGVkIGNhdGVnb3J5XG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBkYXRhIGlzIGF2YWlsYWJsZSB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGNhdGVnb3JpZXNcbiAgICAvLyBVc2Ugb3ZlcmFsbFJlc3VsdCBmb3IgY29uc2lzdGVudCBjYWxjdWxhdGlvbnMgYWNyb3NzIGFsbCBjYXRlZ29yaWVzXG4gICAgdGhpcy5iZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ2JlaGF2aW9yYWwnXSB8fCAwO1xuICAgIHRoaXMuYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2JlaGF2aW91cmFsJ107XG4gICAgbGV0IGJlaGF2aW9yYWxNYXRoUm91bmQgPSB0aGlzLmJlaGF2aW9yYWxUb3RhbENvbXBldGVuY2llcyA+IDAgPyBNYXRoLnJvdW5kKCh0aGlzLmJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMpICogMTAwKSA6IDA7XG4gICAgdGhpcy5iZWhhdmlvcmFsQ292ZXJhZ2UgPSBgJHtiZWhhdmlvcmFsTWF0aFJvdW5kfSVgO1xuXG4gICAgdGhpcy5mdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCA9IG92ZXJhbGxSZXN1bHRbJ2Z1bmN0aW9uYWwnXSB8fCAwO1xuICAgIHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzID0gbWFzdGVyTGlzdEJ5Q2F0ZWdvcnlbJ2Z1bmN0aW9uYWwnXTtcbiAgICBsZXQgZnVuY3Rpb25hbE1hdGhSb3VuZCA9IHRoaXMuZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzID4gMCA/IE1hdGgucm91bmQoKHRoaXMuZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgLyB0aGlzLmZ1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llcykgKiAxMDApIDogMDtcbiAgICB0aGlzLmZ1bmN0aW9uYWxDb3ZlcmFnZSA9IGAke2Z1bmN0aW9uYWxNYXRoUm91bmR9JWA7XG5cbiAgICB0aGlzLmRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQgPSBvdmVyYWxsUmVzdWx0Wydkb21haW4nXSB8fCAwO1xuICAgIHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMgPSBtYXN0ZXJMaXN0QnlDYXRlZ29yeVsnZG9tYWluJ107XG4gICAgbGV0IGRvbWFpbk1hdGhSb3VuZCA9IHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMgPiAwID8gTWF0aC5yb3VuZCgodGhpcy5kb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50IC8gdGhpcy5kb21haW5Ub3RhbENvbXBldGVuY2llcykgKiAxMDApIDogMDtcbiAgICB0aGlzLmRvbWFpbkNvdmVyYWdlID0gYCR7ZG9tYWluTWF0aFJvdW5kfSVgO1xuXG4gICAgY29uc29sZS5sb2coJ0FsbCBjYXRlZ29yeSBtZXRyaWNzIGNhbGN1bGF0ZWQ6Jywge1xuICAgICAgYmVoYXZpb3JhbDogeyBjb3ZlcmVkOiB0aGlzLmJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50LCB0b3RhbDogdGhpcy5iZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmJlaGF2aW9yYWxDb3ZlcmFnZSB9LFxuICAgICAgZnVuY3Rpb25hbDogeyBjb3ZlcmVkOiB0aGlzLmZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50LCB0b3RhbDogdGhpcy5mdW5jdGlvbmFsVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmZ1bmN0aW9uYWxDb3ZlcmFnZSB9LFxuICAgICAgZG9tYWluOiB7IGNvdmVyZWQ6IHRoaXMuZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCwgdG90YWw6IHRoaXMuZG9tYWluVG90YWxDb21wZXRlbmNpZXMsIGNvdmVyYWdlOiB0aGlzLmRvbWFpbkNvdmVyYWdlIH0sXG4gICAgICBvdmVyYWxsOiB7IGNvdmVyZWQ6IG92ZXJhbGxDb3ZlcmVkQ291bnQsIHRvdGFsOiB0b3RhbENvbXBldGVuY2llcywgY292ZXJhZ2U6IHRoaXMub3ZlcmFsbENvdmVyYWdlIH0sXG4gICAgICBzZWxlY3RlZENhdGVnb3J5OiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnksXG4gICAgICBjb21wZXRlbmN5Q292ZXJlZENvdW50Rm9yQ2F0ZWdvcnk6IHRoaXMuY29tcGV0ZW5jeUNvdmVyZWRDb3VudFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdPdmVyYWxsIFJlc3VsdDonLCBvdmVyYWxsUmVzdWx0KTtcbiAgICBjb25zb2xlLmxvZygnQ2F0ZWdvcnkgUmVzdWx0OicsIGNhdGVnb3J5UmVzdWx0KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnknLCB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeSlcbiAgICB0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnYmVoYXZpb3JhbCcpXG4gICAgdGhpcy5mdW5jdGlvbmFsTm90TWF0Y2hlZCA9IHRoaXMuZ2V0Q29tcGV0ZW5jeUJ5Q2F0ZWdvcnlOb3RNYXRjaGluZygnZnVuY3Rpb25hbCcpXG4gICAgdGhpcy5kb21haW5Ob3RNYXRjaGVkID0gdGhpcy5nZXRDb21wZXRlbmN5QnlDYXRlZ29yeU5vdE1hdGNoaW5nKCdkb21haW4nKVxuXG4gICAgdGhpcy5nZXRCZWhhdmlvdXJhbE1hdGNoZWQoKVxuICAgIHRoaXMuZ2V0RnVuY3Rpb25hbE1hdGNoZWQoKVxuICAgIHRoaXMuZ2V0RG9tYWluTWF0Y2hlZCgpXG4gIH1cblxuICBnZXRNYXRjaGVkQ29tcGV0ZW5jeVN0YXRzKHByaW1hcnlBcnJheTogYW55W10sIHNlY29uZGFyeUFycmF5OiBhbnlbXSkge1xuICAgIC8vIENvbnZlcnQgYm90aCBhcnJheXMgdG8gZW5zdXJlIGNvbnNpc3RlbnQgY2FzaW5nXG4gICAgY29uc3QgY291bnRzOiBhbnkgPSB7XG4gICAgICBiZWhhdmlvcmFsOiAwLFxuICAgICAgZnVuY3Rpb25hbDogMCxcbiAgICAgIGRvbWFpbjogMCxcbiAgICAgIHRvdGFsOiAwXG4gICAgfTtcblxuICAgIC8vIENsZWFyIHRoZSBjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgYXJyYXkgZm9yIGZyZXNoIGNhbGN1bGF0aW9uXG4gICAgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkgPSBbXTtcblxuICAgIC8vIFNldCB0byBrZWVwIHRyYWNrIG9mIHVuaXF1ZSBtYXRjaGVzXG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IG1hdGNoZWRDb21wZXRlbmNpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgcHJpbWFyeSBvZiBwcmltYXJ5QXJyYXkpIHtcbiAgICAgIGNvbnN0IHR5cGVLZXkgPSBwcmltYXJ5LnR5cGU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdGhlbWVLZXkgPSBwcmltYXJ5LnRoZW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHN1YlRoZW1lS2V5ID0gcHJpbWFyeS5zdWJfdGhlbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICBsZXQgaXNNYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5IG9mIHNlY29uZGFyeUFycmF5KSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBzZWNvbmRhcnkga2V5c1xuICAgICAgICBsZXQgc2VjVHlwZSA9IHNlY29uZGFyeT8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgbGV0IHNlY1RoZW1lID0gc2Vjb25kYXJ5Py5jb21wZXRlbmN5VGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgbGV0IHNlY1N1YlRoZW1lID0gc2Vjb25kYXJ5Py5jb21wZXRlbmN5U3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgICAvLyBGaXggZm9yIGRhdGEgaW5jb25zaXN0ZW5jeVxuICAgICAgICBpZiAoc2VjVHlwZSA9PT0gJ2JlaGF2aW91cmFsJykgc2VjVHlwZSA9ICdiZWhhdmlvcmFsJztcblxuICAgICAgICAvLyBDcmVhdGUgdW5pcXVlIG1hdGNoIGtleSBmb3IgcHJpbWFyeSBjb21wZXRlbmN5XG4gICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gYCR7dHlwZUtleX18JHt0aGVtZUtleX18JHtzdWJUaGVtZUtleX1gO1xuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNyb3NzLW1hdGNoaW5nIGxvZ2ljIGFzIHJlcXVlc3RlZDpcbiAgICAgICAgLy8gMS4gUm9sZSBtYXBwaW5nIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICAvLyAyLiBSb2xlIG1hcHBpbmcgU3ViIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWUgIFxuICAgICAgICAvLyAzLiBSb2xlIG1hcHBpbmcgVGhlbWUgdnMgQ291cnNlIFN1YiBUaGVtZVxuICAgICAgICAvLyA0LiBSb2xlIG1hcHBpbmcgU3ViIFRoZW1lIHZzIENvdXJzZSBUaGVtZVxuICAgICAgICBjb25zdCB0aGVtZVRvVGhlbWVNYXRjaCA9IHRoZW1lS2V5ID09PSBzZWNUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2ggPSBzdWJUaGVtZUtleSA9PT0gc2VjU3ViVGhlbWU7XG4gICAgICAgIGNvbnN0IHRoZW1lVG9TdWJUaGVtZU1hdGNoID0gdGhlbWVLZXkgPT09IHNlY1N1YlRoZW1lO1xuICAgICAgICBjb25zdCBzdWJUaGVtZVRvVGhlbWVNYXRjaCA9IHN1YlRoZW1lS2V5ID09PSBzZWNUaGVtZTtcblxuICAgICAgICBsZXQgbWF0Y2hUeXBlID0gJyc7XG4gICAgICAgIGxldCBpc01hdGNoID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHR5cGVLZXkgPT09IHNlY1R5cGUgJiYgIXNlZW4uaGFzKG1hdGNoS2V5KSkge1xuICAgICAgICAgIGlmICh0aGVtZVRvVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1RoZW1lLXRvLVRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3ViVGhlbWVUb1N1YlRoZW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIG1hdGNoVHlwZSA9ICdTdWJUaGVtZS10by1TdWJUaGVtZSc7XG4gICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW1lVG9TdWJUaGVtZU1hdGNoKSB7XG4gICAgICAgICAgICBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgICAgaXNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdWJUaGVtZVRvVGhlbWVNYXRjaCkge1xuICAgICAgICAgICAgbWF0Y2hUeXBlID0gJ1N1YlRoZW1lLXRvLVRoZW1lJztcbiAgICAgICAgICAgIGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYOKchSBNQVRDSCBGT1VORCBbJHttYXRjaFR5cGV9XTpgLCB7XG4gICAgICAgICAgICByb2xlTWFwcGluZzogeyB0eXBlOiB0eXBlS2V5LCB0aGVtZTogdGhlbWVLZXksIHN1YlRoZW1lOiBzdWJUaGVtZUtleSB9LFxuICAgICAgICAgICAgY291cnNlOiB7IHR5cGU6IHNlY1R5cGUsIHRoZW1lOiBzZWNUaGVtZSwgc3ViVGhlbWU6IHNlY1N1YlRoZW1lIH0sXG4gICAgICAgICAgICBtYXRjaFR5cGU6IG1hdGNoVHlwZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gU3RvcmUgbWF0Y2hlZCBjb21wZXRlbmN5IGluZm8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgICBvYmpbdHlwZUtleV0gPSBbdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KHRoZW1lS2V5LCBzdWJUaGVtZUtleSldO1xuICAgICAgICAgIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5LnB1c2gob2JqKTtcbiAgICAgICAgICBzZWVuLmFkZChtYXRjaEtleSk7XG4gICAgICAgICAgbWF0Y2hlZENvbXBldGVuY2llcy5hZGQodGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KHRoZW1lS2V5LCBzdWJUaGVtZUtleSkpO1xuICAgICAgICAgIGlzTWF0Y2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoY291bnRzLmhhc093blByb3BlcnR5KHR5cGVLZXkpKSB7XG4gICAgICAgICAgICBjb3VudHNbdHlwZUtleV0rKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY291bnRzW3R5cGVLZXldID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb3VudHMudG90YWwrKztcbiAgICAgICAgICBicmVhazsgLy8gU3RvcCBsb29raW5nIGZvciBtYXRjaGVzIGZvciB0aGlzIHByaW1hcnkgY29tcGV0ZW5jeVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50cztcbiAgfVxuICBnZXRDb21wZXRlbmN5QnlDYXRlZ29yeU5vdE1hdGNoaW5nKGNhdGVnb3J5VHlwZSkge1xuICAgIC8vIEdldCBhbGwgY29tcGV0ZW5jaWVzIGZvciB0aGUgZ2l2ZW4gY2F0ZWdvcnkgZnJvbSByb2xlIG1hcHBpbmdcbiAgICBsZXQgYWxsQ2F0ZWdvcnlDb21wZXRlbmNpZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3R5cGUnXT8udG9Mb3dlckNhc2UoKSA9PT0gY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLnB1c2goXG4gICAgICAgICAgdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KFxuICAgICAgICAgICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXNbaV1bJ3RoZW1lJ10sXG4gICAgICAgICAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llc1tpXVsnc3ViX3RoZW1lJ11cbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IG1hdGNoZWQgY29tcGV0ZW5jaWVzIGZvciB0aGlzIGNhdGVnb3J5IGZyb20gY291cnNlc1xuICAgIGxldCBtYXRjaGVkQ29tcGV0ZW5jaWVzID0gW107XG4gICAgY29uc29sZS5sb2coJ2NvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeScsIHRoaXMuY29tcGV0ZW5jeU5vdE1hdGNoZWRCeUNhdGVnb3J5KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeVtpXVtjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdjb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV0nLCB0aGlzLmNvbXBldGVuY3lOb3RNYXRjaGVkQnlDYXRlZ29yeVtpXSlcbiAgICAgICAgLy8gRXh0cmFjdCBtYXRjaGVkIHRoZW1lcyBmcm9tIGNvdXJzZSBjb21wZXRlbmNpZXNcbiAgICAgICAgdGhpcy5jb21wZXRlbmN5Tm90TWF0Y2hlZEJ5Q2F0ZWdvcnlbaV1bY2F0ZWdvcnlUeXBlPy50b0xvd2VyQ2FzZSgpXS5mb3JFYWNoKHRoZW1lID0+IHtcbiAgICAgICAgICBpZiAodGhlbWUpIHtcbiAgICAgICAgICAgIG1hdGNoZWRDb21wZXRlbmNpZXMucHVzaCh0aGVtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFbmhhbmNlZCBtYXRjaGluZzogY2hlY2sgYm90aCB0aGVtZSBhbmQgc3VidGhlbWUgZnJvbSBjb3Vyc2VzIGFnYWluc3QgRlJBQyBjb21wZXRlbmNpZXNcbiAgICAvLyBJTVBPUlRBTlQ6IFVzZSBhbGwgYXZhaWxhYmxlIGNvdXJzZXMgZm9yIGNvbnNpc3RlbnQgY292ZXJhZ2UgY2FsY3VsYXRpb25cbiAgICBjb25zdCBhbGxDb3Vyc2VzRm9yTWF0Y2hpbmcgPSB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKTtcblxuICAgIGFsbENvdXJzZXNGb3JNYXRjaGluZy5mb3JFYWNoKGNvdXJzZSA9PiB7XG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbXBldGVuY3kgcHJvcGVydHkgbmFtZXNcbiAgICAgIGxldCBjb21wZXRlbmNpZXMgPSBbXTtcbiAgICAgIGlmIChjb3Vyc2UgJiYgY291cnNlLmNvbXBldGVuY2llcyAmJiBBcnJheS5pc0FycmF5KGNvdXJzZS5jb21wZXRlbmNpZXMpKSB7XG4gICAgICAgIGNvbXBldGVuY2llcyA9IGNvdXJzZS5jb21wZXRlbmNpZXM7XG4gICAgICB9IGVsc2UgaWYgKGNvdXJzZSAmJiBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgY29tcGV0ZW5jaWVzLmZvckVhY2goKGNvbXA6IGFueSkgPT4ge1xuICAgICAgICBsZXQgc2VjVHlwZSA9IGNvbXA/LmNvbXBldGVuY3lBcmVhTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgIGlmIChzZWNUeXBlID09PSAnYmVoYXZpb3VyYWwnKSBzZWNUeXBlID0gJ2JlaGF2aW9yYWwnO1xuXG4gICAgICAgIGlmIChzZWNUeXBlID09PSBjYXRlZ29yeVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjb25zdCBjb3Vyc2VUaGVtZSA9IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgY29uc3QgY291cnNlU3ViVGhlbWUgPSBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgYW55IEZSQUMgY29tcGV0ZW5jeSBtYXRjaGVzIHRoaXMgY291cnNlIGNvbXBldGVuY3lcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFjQ29tcCA9IHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzW2ldO1xuICAgICAgICAgICAgaWYgKGZyYWNDb21wWyd0eXBlJ10/LnRvTG93ZXJDYXNlKCkgPT09IGNhdGVnb3J5VHlwZT8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICBjb25zdCBmcmFjVGhlbWUgPSBmcmFjQ29tcFsndGhlbWUnXT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGZyYWNTdWJUaGVtZSA9IGZyYWNDb21wWydzdWJfdGhlbWUnXT8udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgICAgICAgLy8gRW5oYW5jZWQgY3Jvc3MtbWF0Y2hpbmcgbG9naWMgKHNhbWUgYXMgaW4gZ2V0TWF0Y2hlZENvbXBldGVuY3lTdGF0cyk6XG4gICAgICAgICAgICAgIC8vIDEuIENvdXJzZSBUaGVtZSB2cyBGUkFDIFRoZW1lXG4gICAgICAgICAgICAgIC8vIDIuIENvdXJzZSBTdWIgVGhlbWUgdnMgRlJBQyBTdWIgVGhlbWUgIFxuICAgICAgICAgICAgICAvLyAzLiBDb3Vyc2UgVGhlbWUgdnMgRlJBQyBTdWIgVGhlbWVcbiAgICAgICAgICAgICAgLy8gNC4gQ291cnNlIFN1YiBUaGVtZSB2cyBGUkFDIFRoZW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVRoZW1lVG9GcmFjVGhlbWUgPSBjb3Vyc2VUaGVtZSA9PT0gZnJhY1RoZW1lO1xuICAgICAgICAgICAgICBjb25zdCBjb3Vyc2VTdWJUaGVtZVRvRnJhY1N1YlRoZW1lID0gY291cnNlU3ViVGhlbWUgPT09IGZyYWNTdWJUaGVtZTtcbiAgICAgICAgICAgICAgY29uc3QgY291cnNlVGhlbWVUb0ZyYWNTdWJUaGVtZSA9IGNvdXJzZVRoZW1lID09PSBmcmFjU3ViVGhlbWU7XG4gICAgICAgICAgICAgIGNvbnN0IGNvdXJzZVN1YlRoZW1lVG9GcmFjVGhlbWUgPSBjb3Vyc2VTdWJUaGVtZSA9PT0gZnJhY1RoZW1lO1xuXG4gICAgICAgICAgICAgIGlmIChjb3Vyc2VUaGVtZVRvRnJhY1RoZW1lIHx8IGNvdXJzZVN1YlRoZW1lVG9GcmFjU3ViVGhlbWUgfHxcbiAgICAgICAgICAgICAgICBjb3Vyc2VUaGVtZVRvRnJhY1N1YlRoZW1lIHx8IGNvdXJzZVN1YlRoZW1lVG9GcmFjVGhlbWUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtYXRjaFR5cGUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoY291cnNlVGhlbWVUb0ZyYWNUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVRoZW1lLXRvLUZSQUNUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlU3ViVGhlbWVUb0ZyYWNTdWJUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVN1YlRoZW1lLXRvLUZSQUNTdWJUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlVGhlbWVUb0ZyYWNTdWJUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVRoZW1lLXRvLUZSQUNTdWJUaGVtZSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY291cnNlU3ViVGhlbWVUb0ZyYWNUaGVtZSkgbWF0Y2hUeXBlID0gJ0NvdXJzZVN1YlRoZW1lLXRvLUZSQUNUaGVtZSc7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyFIENPTVBFVEVOQ1kgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV0gZm9yICR7Y2F0ZWdvcnlUeXBlfTpgLCB7XG4gICAgICAgICAgICAgICAgICBjb3Vyc2U6IHsgdGhlbWU6IGNvdXJzZVRoZW1lLCBzdWJUaGVtZTogY291cnNlU3ViVGhlbWUgfSxcbiAgICAgICAgICAgICAgICAgIGZyYWM6IHsgdGhlbWU6IGZyYWNUaGVtZSwgc3ViVGhlbWU6IGZyYWNTdWJUaGVtZSB9LFxuICAgICAgICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1hdGNoZWRDb21wZXRlbmNpZXMucHVzaCh0aGlzLmdldFRoZW1lU3ViVGhlbWVLZXkoZnJhY1RoZW1lLCBmcmFjU3ViVGhlbWUpKTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gRm91bmQgYSBtYXRjaCwgbW92ZSB0byBuZXh0IGNvdXJzZSBjb21wZXRlbmN5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSBtYXRjaGVkIGNvbXBldGVuY2llc1xuICAgIG1hdGNoZWRDb21wZXRlbmNpZXMgPSBbLi4ubmV3IFNldChtYXRjaGVkQ29tcGV0ZW5jaWVzKV07XG5cbiAgICBjb25zb2xlLmxvZyhgXFxuPT09ICR7Y2F0ZWdvcnlUeXBlLnRvVXBwZXJDYXNlKCl9IENPTVBFVEVOQ1kgTUFUQ0hJTkcgPT09YCk7XG4gICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnlUeXBlfSAtIEFsbCBGUkFDIGNvbXBldGVuY2llczpgLCBhbGxDYXRlZ29yeUNvbXBldGVuY2llcyk7XG4gICAgY29uc29sZS5sb2coYCR7Y2F0ZWdvcnlUeXBlfSAtIE1hdGNoZWQgZnJvbSBjb3Vyc2VzOmAsIG1hdGNoZWRDb21wZXRlbmNpZXMpO1xuICAgIGNvbnNvbGUubG9nKGAke2NhdGVnb3J5VHlwZX0gLSBNYXRjaCByYXRlOiAke21hdGNoZWRDb21wZXRlbmNpZXMubGVuZ3RofS8ke2FsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLmxlbmd0aH0gKCR7TWF0aC5yb3VuZCgobWF0Y2hlZENvbXBldGVuY2llcy5sZW5ndGggLyBhbGxDYXRlZ29yeUNvbXBldGVuY2llcy5sZW5ndGgpICogMTAwKX0lKWApO1xuXG4gICAgLy8gUmV0dXJuIHVubWF0Y2hlZCBjb21wZXRlbmNpZXMgKHRob3NlIGluIHJvbGUgbWFwcGluZyBidXQgbm90IGNvdmVyZWQgYnkgY291cnNlcylcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlU3RyaW5nQXJyYXlzKGFsbENhdGVnb3J5Q29tcGV0ZW5jaWVzLCBtYXRjaGVkQ29tcGV0ZW5jaWVzKTtcbiAgfVxuXG4gIGNvbXBhcmVTdHJpbmdBcnJheXMoYXJyMTogc3RyaW5nW10sIGFycjI6IHN0cmluZ1tdKSB7XG4gICAgY29uc29sZS5sb2coJ0FsbCBjb21wZXRlbmNpZXMgaW4gY2F0ZWdvcnk6JywgYXJyMSk7XG4gICAgY29uc29sZS5sb2coJ01hdGNoZWQgY29tcGV0ZW5jaWVzIGZyb20gY291cnNlczonLCBhcnIyKTtcblxuICAgIC8vIFJldHVybiBpdGVtcyBpbiBhcnIxIHRoYXQgYXJlIE5PVCBpbiBhcnIyICh1bm1hdGNoZWQgY29tcGV0ZW5jaWVzKVxuICAgIGNvbnN0IHVubWF0Y2hlZCA9IGFycjEuZmlsdGVyKGl0ZW0gPT4gIWFycjIuaW5jbHVkZXMoaXRlbSkpO1xuICAgIGNvbnNvbGUubG9nKCdVbm1hdGNoZWQgY29tcGV0ZW5jaWVzOicsIHVubWF0Y2hlZCk7XG5cbiAgICByZXR1cm4gdW5tYXRjaGVkO1xuICB9XG5cbiAgYWRkQ291cnNlKG1pc3NpbmdDb21wZXRlbmN5Pzogc3RyaW5nLCBjb21wZXRlbmN5VHlwZT86IHN0cmluZykge1xuICAgIGxldCBkaWFsb2dEYXRhID0geyAuLi50aGlzLnBsYW5EYXRhIH07XG5cbiAgICAvLyBJZiBjb21wZXRlbmN5IHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLCBhZGQgdGhlbSB0byB0aGUgZGlhbG9nIGRhdGFcbiAgICBpZiAobWlzc2luZ0NvbXBldGVuY3kgJiYgY29tcGV0ZW5jeVR5cGUpIHtcbiAgICAgIGNvbnN0IHsgdGhlbWUsIHN1YlRoZW1lIH0gPSB0aGlzLnBhcnNlVGhlbWVBbmRTdWJUaGVtZShtaXNzaW5nQ29tcGV0ZW5jeSk7XG5cbiAgICAgIGRpYWxvZ0RhdGEucHJlZmlsbENvbXBldGVuY3kgPSB7XG4gICAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgICB0aGVtZTogdGhlbWUsXG4gICAgICAgIHN1YlRoZW1lOiBzdWJUaGVtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZENvdXJzZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICcxMDAwcHgnLFxuICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgIHBhbmVsQ2xhc3M6ICd2aWV3LWNicC1wbGFuLXBvcHVwJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JywgICAgICAgICAgLy8gU2V0IG1pbmltdW0gaGVpZ2h0XG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJywgICAgICAgICAgIC8vIFByZXZlbnQgaXQgZnJvbSBnb2luZyBiZXlvbmQgdmlld3BvcnRcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSAvLyBPcHRpb25hbDogcHJldmVudCBjbG9zaW5nIHdpdGggb3V0c2lkZSBjbGlja1xuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc2F2ZWQnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgYWRkZWQgc3VjY2Vzc2Z1bGx5ISBSZWZyZXNoaW5nIGRhdGEuLi4nKTtcblxuICAgICAgICAvLyBSZWZyZXNoIHVzZXIgY291cnNlcyB0byBpbmNsdWRlIHRoZSBuZXdseSBhZGRlZCBjb3Vyc2VcbiAgICAgICAgdGhpcy5nZXRVc2VyQ291cnNlKCk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBnYXAgYW5hbHlzaXMgd2l0aCB0aGUgbGF0ZXN0IGRhdGFcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVHYXBBbmFseXNpc0FmdGVyQ291cnNlc1VwZGF0ZSgpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHYXAgYW5hbHlzaXMgcmVmcmVzaGVkIGFmdGVyIGNvdXJzZSBhZGRpdGlvbicpO1xuICAgICAgICB9LCA1MDApOyAvLyBTbWFsbCBkZWxheSB0byBlbnN1cmUgZGF0YSBpcyBsb2FkZWRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZpbHRlck9uQ29tcGV0ZW5jeVRoZW1lKHRoZW1lSXRlbSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9IHRoZW1lSXRlbTtcbiAgICBjb25zdCB7IHRoZW1lLCBzdWJUaGVtZSB9ID0gdGhpcy5wYXJzZVRoZW1lQW5kU3ViVGhlbWUodGhlbWVJdGVtIHx8ICcnKTtcbiAgICBsZXQgdGhlbWVOYW1lID0gdGhlbWU7XG4gICAgbGV0IHN1YlRoZW1lTmFtZSA9IHN1YlRoZW1lO1xuXG4gICAgY29uc29sZS5sb2coJ0ZpbHRlcmluZyBieSB0aGVtZTonLCB0aGVtZU5hbWUsICdzdWJUaGVtZTonLCBzdWJUaGVtZU5hbWUsICdUYWIgaW5kZXg6JywgdGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4KTtcblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb21wZXRlbmN5IHR5cGUgYmFzZWQgb24gdGhlIGFjdGl2ZSB0YWJcbiAgICBsZXQgY29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICBpZiAodGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID09PSAxKSB7XG4gICAgICBjb21wZXRlbmN5VHlwZSA9ICdiZWhhdmlvcmFsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMikge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnZnVuY3Rpb25hbCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDMpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ2RvbWFpbic7XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCBhdmFpbGFibGUgY291cnNlcyB1c2luZyB0aGUgaGVscGVyIG1ldGhvZFxuICAgIGNvbnN0IGFsbEF2YWlsYWJsZUNvdXJzZXMgPSB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKTtcbiAgICBjb25zb2xlLmxvZygnVG90YWwgY291cnNlcyB0byBmaWx0ZXIgZnJvbTonLCBhbGxBdmFpbGFibGVDb3Vyc2VzLmxlbmd0aCk7XG5cbiAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQXZhaWxhYmxlQ291cnNlcy5maWx0ZXIoY291cnNlID0+IHtcbiAgICAgIGlmICghY291cnNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29tcGV0ZW5jeSBwcm9wZXJ0eSBuYW1lc1xuICAgICAgbGV0IGNvbXBldGVuY2llcyA9IFtdO1xuICAgICAgaWYgKGNvdXJzZS5jb21wZXRlbmNpZXMgJiYgQXJyYXkuaXNBcnJheShjb3Vyc2UuY29tcGV0ZW5jaWVzKSkge1xuICAgICAgICBjb21wZXRlbmNpZXMgPSBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgICAgfSBlbHNlIGlmIChjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2ICYmIEFycmF5LmlzQXJyYXkoY291cnNlLmNvbXBldGVuY2llc192NikpIHtcbiAgICAgICAgY29tcGV0ZW5jaWVzID0gY291cnNlLmNvbXBldGVuY2llc192NjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBldGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gRmlsdGVyIGJ5IGNvbXBldGVuY3kgdHlwZSBhbmQgdGhlbWUvc3VidGhlbWVcbiAgICAgIHJldHVybiBjb21wZXRlbmNpZXMuc29tZShjb21wID0+IHtcbiAgICAgICAgaWYgKCFjb21wKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGV0ZW5jeSB0eXBlIG1hdGNoZXMgY3VycmVudCB0YWJcbiAgICAgICAgbGV0IGNvbXBUeXBlID0gY29tcD8uY29tcGV0ZW5jeUFyZWFOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoY29tcFR5cGUgPT09ICdiZWhhdmlvdXJhbCcpIGNvbXBUeXBlID0gJ2JlaGF2aW9yYWwnOyAvLyBOb3JtYWxpemUgc3BlbGxpbmdcblxuICAgICAgICBpZiAoY29tcFR5cGUgIT09IGNvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgY3Jvc3MtbWF0Y2hpbmcgbGlrZSBnYXAgYW5hbHlzaXM6IHRoZW1lIHZzIHN1YnRoZW1lIGFuZCBzdWJ0aGVtZSB2cyB0aGVtZVxuICAgICAgICBjb25zdCBjb21wVGhlbWUgPSBjb21wPy5jb21wZXRlbmN5VGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpPy50cmltKCk7XG4gICAgICAgIGNvbnN0IGNvbXBTdWJUaGVtZSA9IGNvbXA/LmNvbXBldGVuY3lTdWJUaGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoVGhlbWUgPSB0aGVtZU5hbWU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHNlYXJjaFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIC8vIEVuaGFuY2VkIGNyb3NzLW1hdGNoaW5nIGxvZ2ljIGxpa2UgZ2FwIGFuYWx5c2lzOlxuICAgICAgICAvLyAxLiBTZWxlY3RlZCBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgLy8gMi4gU2VsZWN0ZWQgU3ViIFRoZW1lIHZzIENvdXJzZSBTdWIgVGhlbWUgIFxuICAgICAgICAvLyAzLiBTZWxlY3RlZCBUaGVtZSB2cyBDb3Vyc2UgU3ViIFRoZW1lXG4gICAgICAgIC8vIDQuIFNlbGVjdGVkIFN1YiBUaGVtZSB2cyBDb3Vyc2UgVGhlbWVcbiAgICAgICAgY29uc3QgdGhlbWVUb1RoZW1lTWF0Y2ggPSBzZWFyY2hUaGVtZSAmJiBjb21wVGhlbWUgPT09IHNlYXJjaFRoZW1lO1xuICAgICAgICBjb25zdCBzdWJUaGVtZVRvU3ViVGhlbWVNYXRjaCA9IHNlYXJjaFN1YlRoZW1lICYmIGNvbXBTdWJUaGVtZSA9PT0gc2VhcmNoU3ViVGhlbWU7XG4gICAgICAgIGNvbnN0IHRoZW1lVG9TdWJUaGVtZU1hdGNoID0gc2VhcmNoVGhlbWUgJiYgY29tcFN1YlRoZW1lID09PSBzZWFyY2hUaGVtZTtcbiAgICAgICAgY29uc3Qgc3ViVGhlbWVUb1RoZW1lTWF0Y2ggPSBzZWFyY2hTdWJUaGVtZSAmJiBjb21wVGhlbWUgPT09IHNlYXJjaFN1YlRoZW1lO1xuXG4gICAgICAgIGNvbnN0IGlzTWF0Y2ggPSB0aGVtZVRvVGhlbWVNYXRjaCB8fCBzdWJUaGVtZVRvU3ViVGhlbWVNYXRjaCB8fCB0aGVtZVRvU3ViVGhlbWVNYXRjaCB8fCBzdWJUaGVtZVRvVGhlbWVNYXRjaDtcblxuICAgICAgICAvLyBMb2cgbWF0Y2hlcyBmb3IgZGVidWdnaW5nIChzaW1pbGFyIHRvIGdhcCBhbmFseXNpcylcbiAgICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgICBsZXQgbWF0Y2hUeXBlID0gJyc7XG4gICAgICAgICAgaWYgKHRoZW1lVG9UaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHN1YlRoZW1lVG9TdWJUaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHRoZW1lVG9TdWJUaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnVGhlbWUtdG8tU3ViVGhlbWUnO1xuICAgICAgICAgIGVsc2UgaWYgKHN1YlRoZW1lVG9UaGVtZU1hdGNoKSBtYXRjaFR5cGUgPSAnU3ViVGhlbWUtdG8tVGhlbWUnO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coYOKchSBGSUxURVIgTUFUQ0ggRk9VTkQgWyR7bWF0Y2hUeXBlfV06YCwge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHsgdGhlbWU6IHNlYXJjaFRoZW1lLCBzdWJUaGVtZTogc2VhcmNoU3ViVGhlbWUgfSxcbiAgICAgICAgICAgIGNvdXJzZTogeyB0eXBlOiBjb21wVHlwZSwgdGhlbWU6IGNvbXBUaGVtZSwgc3ViVGhlbWU6IGNvbXBTdWJUaGVtZSB9LFxuICAgICAgICAgICAgbWF0Y2hUeXBlOiBtYXRjaFR5cGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hdGNoIGlmIGFueSBvZiB0aGUgY3Jvc3MtbWF0Y2hpbmcgY29uZGl0aW9ucyBhcmUgbWV0XG4gICAgICAgIHJldHVybiBpc01hdGNoO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnRmlsdGVyZWQgY291cnNlcyBmb3IgdGhlbWU6JywgdGhlbWVOYW1lLCAnQ291bnQ6JywgdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGgpO1xuICAgIGNvbnNvbGUubG9nKCdGaWx0ZXJlZCBjb3Vyc2VzOicsIHRoaXMuZmlsdGVyZENvdXJzZXMubWFwKGMgPT4gYy5uYW1lIHx8IGMuY291cnNlKSk7XG4gIH1cblxuICBjbGVhclRoZW1lRmlsdGVyKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnO1xuICAgIC8vIFJlc2V0IHRvIGNhdGVnb3J5IGZpbHRlcmVkIGNvdXJzZXMgYnkgY2FsbGluZyB0aGUgdGFiIGNoYW5nZSBtZXRob2RcbiAgICB0aGlzLm9uSW5uZXJUYWJDaGFuZ2Uoe1xuICAgICAgaW5kZXg6IHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCxcbiAgICAgIHRhYjogeyB0ZXh0TGFiZWw6IHRoaXMuaW5uZXJUYWJBY3RpdmVUZXh0IH1cbiAgICB9IGFzIGFueSk7XG4gICAgY29uc29sZS5sb2coJ1RoZW1lIGZpbHRlciBjbGVhcmVkLCBzaG93aW5nIGFsbCBjb3Vyc2VzIGZvciBjYXRlZ29yeTonLCB0aGlzLmlubmVyVGFiQWN0aXZlVGV4dCk7XG4gIH1cblxuICBpc1RoZW1lU2VsZWN0ZWQodGhlbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIgPT09IHRoZW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjb3Vyc2UgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGhlbWUgZmlsdGVyIHdpdGggcHJlZmlsbGVkIGNvbXBldGVuY3kgZGF0YVxuICAgKi9cbiAgYWRkQ291cnNlRm9yU2VsZWN0ZWRUaGVtZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0aGVtZSBzZWxlY3RlZCBmb3IgYWRkaW5nIGNvdXJzZScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgdGhlbWUsIHN1YlRoZW1lIH0gPSB0aGlzLnBhcnNlVGhlbWVBbmRTdWJUaGVtZSh0aGlzLnNlbGVjdGVkVGhlbWVGaWx0ZXIpO1xuXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGNvbXBldGVuY3kgdHlwZSBiYXNlZCBvbiB0aGUgYWN0aXZlIHRhYlxuICAgIC8vIE1hcCB0aGUgdGFiIGxhYmVscyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IEFkZENvdXJzZUNvbXBvbmVudFxuICAgIGxldCBjb21wZXRlbmN5VHlwZSA9ICcnO1xuICAgIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDEpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0JlaGF2aW9yYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJiZWhhdmlvdXJhbFwiXG4gICAgfSBlbHNlIGlmICh0aGlzLmlubmVyVGFiQWN0aXZlSW5kZXggPT09IDIpIHtcbiAgICAgIGNvbXBldGVuY3lUeXBlID0gJ0Z1bmN0aW9uYWwnOyAvLyBUYWIgbGFiZWwgaXMgXCJmdW5jdGlvbmFsXCJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMykge1xuICAgICAgY29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJzsgLy8gVGFiIGxhYmVsIGlzIFwiZG9tYWluXCJcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnVGFiIG1hcHBpbmcgLSBpbm5lclRhYkFjdGl2ZUluZGV4OicsIHRoaXMuaW5uZXJUYWJBY3RpdmVJbmRleCxcbiAgICAgICdpbm5lclRhYkFjdGl2ZVRleHQ6JywgdGhpcy5pbm5lclRhYkFjdGl2ZVRleHQsXG4gICAgICAnbWFwcGVkIGNvbXBldGVuY3lUeXBlOicsIGNvbXBldGVuY3lUeXBlKTtcblxuICAgIGNvbnNvbGUubG9nKCdBZGRpbmcgY291cnNlIGZvciBtaXNzaW5nIGNvbXBldGVuY3k6Jywge1xuICAgICAgY29tcGV0ZW5jeVR5cGUsXG4gICAgICB0aGVtZSxcbiAgICAgIHN1YlRoZW1lLFxuICAgICAgc2VsZWN0ZWRUaGVtZUZpbHRlcjogdGhpcy5zZWxlY3RlZFRoZW1lRmlsdGVyXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGRhdGEgd2l0aCBwcmVmaWxsZWQgY29tcGV0ZW5jeSBpbmZvcm1hdGlvblxuICAgIGxldCBkaWFsb2dEYXRhID0geyAuLi50aGlzLnBsYW5EYXRhIH07XG4gICAgZGlhbG9nRGF0YS5wcmVmaWxsQ29tcGV0ZW5jeSA9IHtcbiAgICAgIHR5cGU6IGNvbXBldGVuY3lUeXBlLFxuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgc3ViVGhlbWU6IHN1YlRoZW1lIHx8ICcnIC8vIEluY2x1ZGUgc3ViLXRoZW1lIGlmIGF2YWlsYWJsZVxuICAgIH07XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFkZENvdXJzZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgcGFuZWxDbGFzczogJ3ZpZXctY2JwLXBsYW4tcG9wdXAnLFxuICAgICAgbWluSGVpZ2h0OiAnNDAwcHgnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3NhdmVkJykge1xuICAgICAgICBjb25zb2xlLmxvZygnQ291cnNlIGFkZGVkIHN1Y2Nlc3NmdWxseSBmb3IgY29tcGV0ZW5jeSEgUmVmcmVzaGluZyBkYXRhLi4uJyk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCB1c2VyIGNvdXJzZXMgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgY291cnNlXG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBnYXAgYW5hbHlzaXMgYWZ0ZXIgY291cnNlIGFkZGl0aW9uXG4gICAgICAgIHRoaXMudXBkYXRlR2FwQW5hbHlzaXNBZnRlckNvdXJzZXNVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldER1cmF0aW9uKHRpbWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuY29udmVydCh0aW1lKTtcbiAgfVxuXG5cbiAgZ2V0QmVoYXZpb3VyYWxNYXRjaGVkKCkge1xuICAgIHRoaXMuYmVoYXZpb3VyYWxNYXRjaGVkID0gW11cbiAgICBjb25zb2xlLmxvZygndGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMnLCB0aGlzLnBsYW5EYXRhKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZCcsIHRoaXMuYmVoYXZpb3VyYWxOb3RNYXRjaGVkKVxuICAgIHRoaXMucGxhbkRhdGEuY29tcGV0ZW5jaWVzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgY29tcGV0ZW5jeUtleSA9IHRoaXMuZ2V0VGhlbWVTdWJUaGVtZUtleShpdGVtPy50aGVtZSwgaXRlbT8uc3ViX3RoZW1lKTtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0/LnR5cGUgPT09ICdCZWhhdmlvcmFsJyAmJiB0aGlzLmJlaGF2aW91cmFsTm90TWF0Y2hlZC5pbmRleE9mKGNvbXBldGVuY3lLZXkpIDwgMCkge1xuICAgICAgICB0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmJlaGF2aW91cmFsTWF0Y2hlZC0tJywgdGhpcy5iZWhhdmlvdXJhbE1hdGNoZWQpXG4gIH1cblxuICBnZXRGdW5jdGlvbmFsTWF0Y2hlZCgpIHtcbiAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkID0gW11cbiAgICB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGNvbXBldGVuY3lLZXkgPSB0aGlzLmdldFRoZW1lU3ViVGhlbWVLZXkoaXRlbT8udGhlbWUsIGl0ZW0/LnN1Yl90aGVtZSk7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtPy50eXBlID09PSAnRnVuY3Rpb25hbCcgJiYgdGhpcy5mdW5jdGlvbmFsTm90TWF0Y2hlZC5pbmRleE9mKGNvbXBldGVuY3lLZXkpIDwgMCkge1xuICAgICAgICB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uYWxNYXRjaGVkXG4gIH1cblxuICBnZXREb21haW5NYXRjaGVkKCkge1xuICAgIHRoaXMuZG9tYWluTWF0Y2hlZCA9IFtdXG4gICAgdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBjb21wZXRlbmN5S2V5ID0gdGhpcy5nZXRUaGVtZVN1YlRoZW1lS2V5KGl0ZW0/LnRoZW1lLCBpdGVtPy5zdWJfdGhlbWUpO1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbT8udHlwZSA9PT0gJ0RvbWFpbicgJiYgdGhpcy5kb21haW5Ob3RNYXRjaGVkLmluZGV4T2YoY29tcGV0ZW5jeUtleSkgPCAwKSB7XG4gICAgICAgIHRoaXMuZG9tYWluTWF0Y2hlZC5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zb2xlLmxvZygndGhpcy5kb21haW5NYXRjaGVkLS0nLCB0aGlzLmRvbWFpbk1hdGNoZWQpXG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRoZW1lV2l0aFN1YlRoZW1lKHRoZW1lOiBhbnksIHN1YlRoZW1lOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRUaGVtZSA9ICh0aGVtZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFN1YlRoZW1lID0gKHN1YlRoZW1lIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblxuICAgIGlmIChub3JtYWxpemVkVGhlbWUgJiYgbm9ybWFsaXplZFN1YlRoZW1lKSB7XG4gICAgICByZXR1cm4gYCR7bm9ybWFsaXplZFRoZW1lfSAtICR7bm9ybWFsaXplZFN1YlRoZW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRUaGVtZSB8fCBub3JtYWxpemVkU3ViVGhlbWU7XG4gIH1cblxuICBwcml2YXRlIGdldFRoZW1lU3ViVGhlbWVLZXkodGhlbWU6IGFueSwgc3ViVGhlbWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGhlbWVXaXRoU3ViVGhlbWUodGhlbWUsIHN1YlRoZW1lKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaGVtZUFuZFN1YlRoZW1lKHZhbHVlOiBzdHJpbmcpOiB7IHRoZW1lOiBzdHJpbmc7IHN1YlRoZW1lOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdGV4dCA9ICh2YWx1ZSB8fCAnJykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICByZXR1cm4geyB0aGVtZTogJycsIHN1YlRoZW1lOiAnJyB9O1xuICAgIH1cblxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCcgLSAnKSkge1xuICAgICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KCcgLSAnKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRoZW1lOiAocGFydHMuc2hpZnQoKSB8fCAnJykudHJpbSgpLFxuICAgICAgICBzdWJUaGVtZTogcGFydHMuam9pbignIC0gJykudHJpbSgpXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0ZXh0LmluY2x1ZGVzKCctJykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRoZW1lOiBwYXJ0c1swXS50cmltKCksXG4gICAgICAgICAgc3ViVGhlbWU6IHBhcnRzWzFdLnRyaW0oKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHRoZW1lOiB0ZXh0LCBzdWJUaGVtZTogJycgfTtcbiAgfVxuXG4gIGRvd25sb2FkUERGKCkge1xuICAgIHRoaXMuaXNQREZEb3dubG9hZCA9IHRydWVcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGRmQ29udGVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gV2FpdCBmb3IgaW1hZ2VzIHRvIGxvYWRcbiAgICBjb25zdCBpbWFnZXMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgIGNvbnN0IHByb21pc2VzID0gQXJyYXkuZnJvbShpbWFnZXMpLm1hcCgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaW1nLmNvbXBsZXRlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBpbWcub25sb2FkID0gcmVzb2x2ZSk7XG4gICAgfSk7XG5cbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBtYXJnaW46IDAuMjAsXG4gICAgICAgIGZpbGVuYW1lOiAnR2FwIEFuYWx5c2lzLnBkZicsXG4gICAgICAgIGltYWdlOiB7IHR5cGU6ICdqcGVnJywgcXVhbGl0eTogMC45OCB9LFxuICAgICAgICBodG1sMmNhbnZhczoge1xuICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgIHVzZUNPUlM6IHRydWUsXG4gICAgICAgICAgc2Nyb2xsWTogMCxcbiAgICAgICAgfSxcbiAgICAgICAganNQREY6IHtcbiAgICAgICAgICB1bml0OiAnaW4nLFxuICAgICAgICAgIGZvcm1hdDogJ2E0JyxcbiAgICAgICAgICBvcmllbnRhdGlvbjogJ3BvcnRyYWl0J1xuICAgICAgICB9LFxuICAgICAgICBwYWdlYnJlYWs6IHtcbiAgICAgICAgICBtb2RlOiBbJ2NzcycsICdsZWdhY3knXSxcbiAgICAgICAgICBiZWZvcmU6ICcucGFnZS1icmVhaycsXG4gICAgICAgICAgYXZvaWQ6IFsnLm5vLWJyZWFrJ11cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaHRtbDJwZGYoKS5mcm9tKGVsZW1lbnQpLnNldChvcHRpb25zKS5zYXZlKClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzUERGRG93bmxvYWQgPSBmYWxzZVxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sIDMwMDApO1xuICAgIH0pO1xuICB9XG5cblxuICByZWRpcmVjdFRvVG9jKGl0ZW0pIHtcbiAgICBpZiAoaXRlbT8ucHVibGljX2xpbmspIHtcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0/LnB1YmxpY19saW5rLCAnX2JsYW5rJylcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHVybCA9IGBodHRwczovL3BvcnRhbC5pZ290a2FybWF5b2dpLmdvdi5pbi9hcHAvdG9jLyR7aXRlbT8uaWRlbnRpZmllcn0vb3ZlcnZpZXc/YFxuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJylcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGdhcCBhbmFseXNpcyBzdGF0cyBhZnRlciBpbml0aWFsIGRhdGEgbG9hZFxuICAgKi9cbiAgaW5pdGlhbGl6ZUdhcEFuYWx5c2lzU3RhdHMoKSB7XG4gICAgLy8gU2V0IGEgc21hbGwgdGltZW91dCB0byBlbnN1cmUgYWxsIGFzeW5jIG9wZXJhdGlvbnMgY29tcGxldGVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZpbHRlcmRDb3Vyc2VzICYmIHRoaXMuZmlsdGVyZENvdXJzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdhcEFuYWx5c2lzU3RhdHMoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgY291cnNlcyBhcmUgdXBkYXRlZCAobGlrZSBzdWdnZXN0ZWQgY291cnNlcyBhZGRlZClcbiAgICovXG4gIHVwZGF0ZUdhcEFuYWx5c2lzQWZ0ZXJDb3Vyc2VzVXBkYXRlKCkge1xuICAgIC8vIERvbid0IG1vZGlmeSBvcmlnaW5hbERhdGEgLSBpdCBzaG91bGQgcmVtYWluIGFzIEFJIHJlY29tbWVuZGVkIGNvdXJzZXMgb25seVxuICAgIC8vIFRoZSBnYXAgYW5hbHlzaXMgYWxyZWFkeSBwcm9wZXJseSBpbmNsdWRlcyBhbGwgY291cnNlIHR5cGVzXG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBnYXAgYW5hbHlzaXMgc3RhdHNcbiAgICB0aGlzLmdhcEFuYWx5c2lzU3RhdHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgYnkgZGVsZXRpbmcgZXhpc3RpbmcgcmVjb21tZW5kYXRpb25zIGFuZCBnZW5lcmF0aW5nIG5ldyBvbmVzXG4gICAqL1xuICBhc3luYyByZWdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCkge1xuICAgIGlmICh0aGlzLmlzUmVnZW5lcmF0aW5nKSB7XG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgbXVsdGlwbGUgc2ltdWx0YW5lb3VzIHJlZ2VuZXJhdGlvbnNcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZyA9IHRydWU7XG5cbiAgICAgIC8vIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5zaG93Q29uZmlybWF0aW9uRGlhbG9nKCk7XG5cbiAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTZXQgcmVnZW5lcmF0aW9uIHByb2dyZXNzIHN0YXRlXG4gICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IGZhbHNlOyAvLyBIaWRlIG1haW4gY29udGVudCBkdXJpbmcgcmVnZW5lcmF0aW9uXG5cbiAgICAgIC8vIFN0ZXAgMTogRGVsZXRlIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnNcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKCk7XG5cbiAgICAgIC8vIFN0ZXAgMjogR2VuZXJhdGUgbmV3IGNvdXJzZSByZWNvbW1lbmRhdGlvbnNcbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVOZXdDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTtcblxuICAgICAgLy8gU3RlcCAzOiBSZWZyZXNoIHRoZSBjdXJyZW50IGRhdGFcbiAgICAgIHRoaXMucmVmcmVzaENvbXBvbmVudCgpO1xuXG4gICAgICBjb25zb2xlLmxvZygnQ291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgIC8vIFNob3cgc3VjY2VzcyBtZXNzYWdlXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgcmVnZW5lcmF0ZWQgc3VjY2Vzc2Z1bGx5IScsICdDbG9zZScsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnc3VjY2Vzcy1zbmFja2JhciddXG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uIHJlZ2VuZXJhdGlvbjonLCBlcnJvcik7XG5cbiAgICAgIC8vIFNob3cgZXJyb3IgbWVzc2FnZVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gcmVnZW5lcmF0ZSBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLiBQbGVhc2UgdHJ5IGFnYWluLicsICdDbG9zZScsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMDAsXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnZXJyb3Itc25hY2tiYXInXVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YUxvYWRlZCA9IHRydWU7IC8vIEVuc3VyZSBtYWluIGNvbnRlbnQgaXMgc2hvd24gYWZ0ZXIgcmVnZW5lcmF0aW9uXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZyBmb3IgcmVnZW5lcmF0ZSBhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2hvd0NvbmZpcm1hdGlvbkRpYWxvZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlZ2VuZXJhdGVDb25maXJtYXRpb25EaWFsb2csIHtcbiAgICAgICAgd2lkdGg6ICc0NTBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdyZWdlbmVyYXRlLWNvbmZpcm1hdGlvbi1kaWFsb2cnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQgPT09IHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZm9yIHRoZSBjdXJyZW50IHJvbGUgbWFwcGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBkZWxldGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgcm9sZU1hcElkID0gdGhpcy5wbGFuRGF0YT8uaWQ7XG5cbiAgICAgIGlmICghcm9sZU1hcElkKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1JvbGUgbWFwcGluZyBJRCBub3QgZm91bmQnKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ0RlbGV0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZm9yIHJvbGUgbWFwcGluZzonLCByb2xlTWFwSWQpO1xuXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZGVsZXRlQ291cnNlUmVjb21tZW5kYXRpb25zKHJvbGVNYXBJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvdXJzZSByZWNvbW1lbmRhdGlvbnMgZGVsZXRlZCBzdWNjZXNzZnVsbHk6JywgcmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZGVsZXRpbmcgY291cnNlIHJlY29tbWVuZGF0aW9uczonLCBlcnJvcik7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgbmV3IGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgZHVyaW5nIHJlZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld0NvdXJzZVJlY29tbWVuZGF0aW9ucygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnNvbGUubG9nKCdHZW5lcmF0aW5nIG5ldyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VGb3JSZWdlbmVyYXRpb24odGhpcy5wbGFuRGF0YS5pZCk7XG4gIH1cblxuICAvKipcbiAgICogRW5oYW5jZWQgY291cnNlIGdlbmVyYXRpb24gc3BlY2lmaWNhbGx5IGZvciByZWdlbmVyYXRpb24gd2l0aCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIGdldFJlY29tbWVuZGVkQ291cnNlRm9yUmVnZW5lcmF0aW9uKHJvbGVfbWFwcGluZ19pZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gU3RhcnQgdGhlIHByb2dyZXNzaXZlIGxvYWRpbmcgc2ltdWxhdGlvbiBmb3IgcmVnZW5lcmF0aW9uXG4gICAgICB0aGlzLnN0YXJ0UmVnZW5lcmF0aXZlUHJvZ3Jlc3NpdmVMb2FkaW5nKCk7XG5cbiAgICAgIC8vIE1ha2UgdGhlIGFjdHVhbCBBUEkgY2FsbFxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIC8vICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyAgICAgLy8gU3RvcCBwcm9ncmVzc2l2ZSBsb2FkaW5nIGFuZCBzaG93IGNvbXBsZXRpb25cbiAgICAgIC8vICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7IC8vIFRoaXMgd2lsbCBzdG9wIHRoZSBpbnRlcnZhbFxuICAgICAgLy8gICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgLy8gICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIHJlZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAvLyAgICAgLy8gQ2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgYWZ0ZXIgc2hvd2luZyBjb21wbGV0aW9uXG4gICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgIC8vICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgIC8vICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgLy8gICAgIH0sIDIwMDApO1xuICAgICAgLy8gICB9LFxuICAgICAgLy8gICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAvLyAgICAgLy8gU3RvcCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gICAgICAvLyAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgLy8gICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgICAgLy8gICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBlcnJvciBjYXNlc1xuICAgICAgLy8gICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwOSB8fCBlcnJvci5lcnJvcj8uZGV0YWlsPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuICAgICAgLy8gICAgICAgLy8gQ291cnNlIHJlY29tbWVuZGF0aW9ucyBhbHJlYWR5IGV4aXN0IC0gdGhpcyBpcyBub3JtYWxcbiAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGFscmVhZHkgZXhpc3QsIGxvYWRpbmcgZXhpc3RpbmcgZGF0YS4uLicpO1xuXG4gICAgICAvLyAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGluZyBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcblxuICAgICAgLy8gICAgICAgLy8gVHJ5IHRvIGdldCBleGlzdGluZyBkYXRhXG4gICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgLy8gICAgICAgICBuZXh0OiAoZXhpc3RpbmdSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgbG9hZGVkIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMnKTtcbiAgICAgIC8vICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgIC8vICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnTG9hZGVkIGV4aXN0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgc3VjY2Vzc2Z1bGx5ISc7XG5cbiAgICAgIC8vICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgLy8gICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgLy8gICAgICAgICAgICAgcmVzb2x2ZShleGlzdGluZ1Jlc3BvbnNlKTtcbiAgICAgIC8vICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgIC8vICAgICAgICAgfSxcbiAgICAgIC8vICAgICAgICAgZXJyb3I6IChsb2FkRXJyb3IpID0+IHtcbiAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zOicsIGxvYWRFcnJvcik7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJyc7XG4gICAgICAvLyAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgLy8gICAgICAgICAgIHJlamVjdChsb2FkRXJyb3IpO1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICB9KTtcbiAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbiByZWdlbmVyYXRpb246JywgZXJyb3IpO1xuICAgICAgLy8gICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pO1xuICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IHRydWU7XG4gICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnR2VuZXJhdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcblxuICAgICAgaW50ZXJ2YWwoNTAwMClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5waXBlKFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAvLyBQYXNzIGVycm9yIHRocm91Z2ggb2JzZXJ2YWJsZSBzbyBwb2xsaW5nIGxvZ2ljIGNhbiBpbnNwZWN0IGl0XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHsgZXJyb3IgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIHRhcChyZXMgPT4gY29uc29sZS5sb2coXCJQb2xsaW5nIHJlc3VsdDpcIiwgcmVzKSksXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiDirIfvuI8gU1RPUCBQT0xMSU5HIG9ubHkgd2hlbjpcbiAgICAgICAgICAgKiAtIFNVQ0NFU1Mg4oaSIHJlcy5zdGF0dXMgPT09IENPTVBMRVRFRFxuICAgICAgICAgICAqIC0gRVJST1Ig4oaSIGNvbmZsaWN0IC8gYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgKi9cbiAgICAgICAgICB0YWtlV2hpbGUocmVzID0+IHtcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHJldHVybiBmYWxzZTsgICAgICAgLy8gU3RvcFxuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3I/LnN0YXR1cyA9PT0gNDA5KSByZXR1cm4gZmFsc2U7ICAgICAgICAvLyBTdG9wXG4gICAgICAgICAgICBpZiAocmVzPy5lcnJvcj8uZXJyb3I/LmRldGFpbD8uaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHJldHVybiBmYWxzZTsgLy8gU3RvcFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEtlZXAgcG9sbGluZ1xuICAgICAgICAgIH0sIHRydWUpIC8vIGluY2x1ZGUgZmluYWwgZW1pc3Npb25cbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgICAgICAvKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICogIFNVQ0NFU1MgQ0FTRSAoc3RhdHVzIENPTVBMRVRFRClcbiAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnQ09NUExFVEVEJykge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMTAwO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnQ291cnNlIHJlY29tbWVuZGF0aW9ucyByZWdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICB9LCAyMDAwKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgICAgICogIEVSUk9SIENBU0UgKDQwOSAvIGFscmVhZHkgZXhpc3RzKVxuICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgaWYgKHJlcz8uZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXMuZXJyb3I7XG5cbiAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA5IHx8IGVycm9yPy5lcnJvcj8uZGV0YWlsPy5pbmNsdWRlcygnYWxyZWFkeSBleGlzdHMnKSkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRpbmcgZXhpc3RpbmcgY291cnNlIHJlY29tbWVuZGF0aW9ucy4uLic7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0UmVjb21tZW5kZWRDb3Vyc2Uocm9sZV9tYXBwaW5nX2lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgbmV4dDogKGV4aXN0aW5nRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gJ0xvYWRlZCBleGlzdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zIHN1Y2Nlc3NmdWxseSEnO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGV4aXN0aW5nRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGVycm9yOiBsb2FkRXJyb3IgPT4gcmVqZWN0KGxvYWRFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8qKiBBbnkgb3RoZXIgZXJyb3Ig4oaSIHN0b3AgJiByZWplY3QgKi9cbiAgICAgICAgICAgICAgdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICAgICAqICBTVElMTCBQUk9DRVNTSU5HIChrZWVwIHBvbGxpbmcpXG4gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSBNYXRoLm1pbih0aGlzLnByb2dyZXNzUGVyY2VudGFnZSArIDEwLCA5NSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnU3RpbGwgcHJvY2Vzc2luZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJztcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiByZWplY3QoZXJyKVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cblxuICAvLyBQcm9ncmVzc2l2ZSBsb2FkaW5nIG1ldGhvZHMgZm9yIHJlZ2VuZXJhdGlvblxuICBzdGFydFJlZ2VuZXJhdGl2ZVByb2dyZXNzaXZlTG9hZGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuc2ltdWxhdGVSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZVN0YWdlcygpO1xuICB9XG5cbiAgc2ltdWxhdGVSZWdlbmVyYXRpdmVQcm9ncmVzc2l2ZVN0YWdlcygpIHtcbiAgICBsZXQgY3VycmVudFN0YWdlSW5kZXggPSAwO1xuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSA2MDAwMDsgLy8gNjAgc2Vjb25kcyBlc3RpbWF0ZWQgZHVyYXRpb25cbiAgICBjb25zdCBzdGFnZUludGVydmFsID0gdG90YWxEdXJhdGlvbiAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGg7XG5cbiAgICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgLy8gU3RvcCBpZiByZWdlbmVyYXRpb24gaXMgY29tcGxldGVcbiAgICAgIGlmICghdGhpcy5pc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzcykge1xuICAgICAgICBjbGVhckludGVydmFsKHByb2dyZXNzSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gdGhpcy5zdGFnZVN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGFnZVByb2dyZXNzID0gKGVsYXBzZWQgJSBzdGFnZUludGVydmFsKSAvIHN0YWdlSW50ZXJ2YWw7XG4gICAgICBjb25zdCBzdGFnZUluZGV4ID0gTWF0aC5taW4oTWF0aC5mbG9vcihlbGFwc2VkIC8gc3RhZ2VJbnRlcnZhbCksIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGggLSAxKTtcblxuICAgICAgLy8gVXBkYXRlIHN0YWdlIGlmIG5lZWRlZFxuICAgICAgaWYgKHN0YWdlSW5kZXggIT09IGN1cnJlbnRTdGFnZUluZGV4ICYmIHN0YWdlSW5kZXggPCB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSB7XG4gICAgICAgIGN1cnJlbnRTdGFnZUluZGV4ID0gc3RhZ2VJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50UHJvY2Vzc2luZ1N0YWdlID0gdGhpcy5wcm9jZXNzaW5nU3RhZ2VzW3N0YWdlSW5kZXhdO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgb3ZlcmFsbCBwcm9ncmVzcyAoZWFjaCBzdGFnZSBpcyB3b3J0aCB+MTYuNjclKVxuICAgICAgY29uc3QgYmFzZVByb2dyZXNzID0gKHN0YWdlSW5kZXggLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIGNvbnN0IHN0YWdlUHJvZ3Jlc3MgPSAoY3VycmVudFN0YWdlUHJvZ3Jlc3MgLyB0aGlzLnByb2Nlc3NpbmdTdGFnZXMubGVuZ3RoKSAqIDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gTWF0aC5taW4oTWF0aC5yb3VuZChiYXNlUHJvZ3Jlc3MgKyBzdGFnZVByb2dyZXNzKSwgOTUpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGNvbXBvbmVudCBkYXRhIGFmdGVyIHJlZ2VuZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoQ29tcG9uZW50KCkge1xuICAgIGNvbnNvbGUubG9nKCdSZWZyZXNoaW5nIGNvbXBvbmVudCBkYXRhLi4uJyk7XG5cbiAgICAvLyBSZXNldCBhbGwgZmlsdGVycyBhbmQgc2VsZWN0aW9uc1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZUZpbHRlciA9ICcnO1xuICAgIHRoaXMuc2VsZWN0RmlsdGVyQ291cnNlcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBbXTtcbiAgICB0aGlzLm9yaWdpbmFsRmlsdGVyZWRDb3Vyc2VzID0gW107XG4gICAgdGhpcy5zdWdnZXN0ZWRDb3Vyc2VzID0gW107XG4gICAgdGhpcy51c2VyQWRkZWRDb3Vyc2VzID0gW107XG5cbiAgICAvLyBSZXNldCB0YWIgc3RhdGVzXG4gICAgdGhpcy5pbm5lclRhYkFjdGl2ZUluZGV4ID0gMDtcbiAgICB0aGlzLm91dGVyVGFiQWN0aXZlSW5kZXggPSAwO1xuXG4gICAgLy8gQ2FsbCB0aGUgZGF0YSBsb2FkaW5nIG1ldGhvZHMgZGlyZWN0bHkgdG8gYXZvaWQgcmVzZXR0aW5nIGRhdGFMb2FkZWRcbiAgICB0aGlzLmxvYWRDb21wb25lbnREYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjb21wb25lbnQgZGF0YSAoc2VwYXJhdGVkIGZyb20gbmdPbkluaXQgZm9yIHJldXNlKVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkQ29tcG9uZW50RGF0YSgpIHtcbiAgICB0aGlzLmdldFJlY29tbWVuZGVkQ291cnNlV2l0aFByb2dyZXNzKHRoaXMucGxhbkRhdGEuaWQpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3JlcycsIHJlcylcbiAgICAgIHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkID0gcmVzLmlkXG4gICAgICBsZXQgYWxsQ291cmVzID0gW11cbiAgICAgIGlmIChyZXMgJiYgcmVzLmZpbHRlcmVkX2NvdXJzZXMgJiYgcmVzLmZpbHRlcmVkX2NvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlcz8uZmlsdGVyZWRfY291cnNlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0/LnJlbGV2YW5jeSA+PSA3NSkge1xuICAgICAgICAgICAgYWxsQ291cmVzLnB1c2goaXRlbSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gYWxsQ291cmVzXG4gICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSBhbGxDb3VyZXNcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuZmlsdGVyZENvdXJzZXMnLCB0aGlzLmZpbHRlcmRDb3Vyc2VzKVxuICAgICAgdGhpcy5nZXRDb3Vyc2VzKClcbiAgICAgIHRoaXMuZ2V0U3VnZ2VzdGVkQ291cnNlKClcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBnYXAgYW5hbHlzaXMgc3RhdHMgYWZ0ZXIgY291cnNlcyBhcmUgbG9hZGVkXG4gICAgICB0aGlzLmluaXRpYWxpemVHYXBBbmFseXNpc1N0YXRzKClcbiAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpXG5cbiAgICAgIC8vIE1hcmsgZGF0YSBhcyBsb2FkZWQgYWZ0ZXIgYWxsIGluaXRpYWwgb3BlcmF0aW9uc1xuICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgcmVjb21tZW5kZWQgY291cnNlczonLCBlcnJvcik7XG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1VuYXV0aG9yaXplZCBhY2Nlc3MgLSB1c2VyIHdpbGwgYmUgcmVkaXJlY3RlZCB0byBsb2dpbicpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkge1xuICAgICAgICAvLyBEb24ndCBsb2cgZXJyb3IgZm9yIDQwOSAoYWxyZWFkeSBleGlzdHMpIGFzIGl0J3MgaGFuZGxlZCBpbiB0aGUgbWV0aG9kXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMnKTtcbiAgICAgIH1cbiAgICAgIC8vIE1hcmsgZGF0YSBhcyBsb2FkZWQgZXZlbiBpZiB0aGVyZSdzIGFuIGVycm9yIHRvIHNob3cgdGhlIGRpYWxvZyBjb250ZW50XG4gICAgICB0aGlzLmRhdGFMb2FkZWQgPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUHJvZ3Jlc3NpdmUgbG9hZGluZyBtZXRob2RzIGZvciBjb3Vyc2UgZ2VuZXJhdGlvblxuICBzdGFydFByb2dyZXNzaXZlTG9hZGluZygpIHtcbiAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbMF07XG4gICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAwO1xuICAgIHRoaXMuc3RhZ2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuc2ltdWxhdGVQcm9ncmVzc2l2ZVN0YWdlcygpO1xuICB9XG5cbiAgc2ltdWxhdGVQcm9ncmVzc2l2ZVN0YWdlcygpIHtcbiAgICBsZXQgY3VycmVudFN0YWdlSW5kZXggPSAwO1xuICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSA2MDAwMDsgLy8gNjAgc2Vjb25kcyBlc3RpbWF0ZWQgZHVyYXRpb25cbiAgICBjb25zdCBzdGFnZUludGVydmFsID0gdG90YWxEdXJhdGlvbiAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGg7XG5cbiAgICBjb25zdCBwcm9ncmVzc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxhcHNlZCA9IERhdGUubm93KCkgLSB0aGlzLnN0YWdlU3RhcnRUaW1lO1xuICAgICAgY29uc3QgY3VycmVudFN0YWdlUHJvZ3Jlc3MgPSAoZWxhcHNlZCAlIHN0YWdlSW50ZXJ2YWwpIC8gc3RhZ2VJbnRlcnZhbDtcbiAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSBNYXRoLm1pbihNYXRoLmZsb29yKGVsYXBzZWQgLyBzdGFnZUludGVydmFsKSwgdGhpcy5wcm9jZXNzaW5nU3RhZ2VzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAvLyBVcGRhdGUgc3RhZ2UgaWYgbmVlZGVkXG4gICAgICBpZiAoc3RhZ2VJbmRleCAhPT0gY3VycmVudFN0YWdlSW5kZXggJiYgc3RhZ2VJbmRleCA8IHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpIHtcbiAgICAgICAgY3VycmVudFN0YWdlSW5kZXggPSBzdGFnZUluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSB0aGlzLnByb2Nlc3NpbmdTdGFnZXNbc3RhZ2VJbmRleF07XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBvdmVyYWxsIHByb2dyZXNzIChlYWNoIHN0YWdlIGlzIHdvcnRoIH4xNi42NyUpXG4gICAgICBjb25zdCBiYXNlUHJvZ3Jlc3MgPSAoc3RhZ2VJbmRleCAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpICogMTAwO1xuICAgICAgY29uc3Qgc3RhZ2VQcm9ncmVzcyA9IChjdXJyZW50U3RhZ2VQcm9ncmVzcyAvIHRoaXMucHJvY2Vzc2luZ1N0YWdlcy5sZW5ndGgpICogMTAwO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSBNYXRoLm1pbihNYXRoLnJvdW5kKGJhc2VQcm9ncmVzcyArIHN0YWdlUHJvZ3Jlc3MpLCA5NSk7XG5cbiAgICAgIC8vIENsZWFyIGludGVydmFsIHdoZW4gbG9hZGluZyBzdG9wc1xuICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwcm9ncmVzc0ludGVydmFsKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAxMDA7XG4gICAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIC8vIEVuaGFuY2VkIGNvdXJzZSBnZW5lcmF0aW9uIHdpdGggcHJvZ3Jlc3NpdmUgbG9hZGluZ1xuICBnZXRSZWNvbW1lbmRlZENvdXJzZVdpdGhQcm9ncmVzcyhyb2xlX21hcHBpbmdfaWQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3VycmVudFByb2Nlc3NpbmdTdGFnZSA9ICdHZW5lcmF0aW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nO1xuICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnRhZ2UgPSAzMDtcblxuICAgICAgdGhpcy5zdGFydFByb2dyZXNzaXZlTG9hZGluZygpO1xuXG4gICAgICB0aGlzLmZpcnN0QXBpUmVzcG9uc2UgPSBudWxsO1xuXG4gICAgICBjb25jYXQoXG4gICAgICAgIG9mKG51bGwpLCAgICAgICAgICAvLyBpbW1lZGlhdGUgY2FsbFxuICAgICAgICBpbnRlcnZhbCg1MDAwKSAgICAgLy8gcG9sbCBldmVyeSA1IHNlY1xuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZShyb2xlX21hcHBpbmdfaWQpXG4gICAgICAgICAgKSxcblxuICAgICAgICAgIHRhcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RBcGlSZXNwb25zZSAmJiAhdGhpcy5leGlzdGluZ1JlY29tbWVuZGF0aW9uRm91bmQpIHtcbiAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNfZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4aXN0aW5nUmVjb21tZW5kYXRpb25Gb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ0ZpcnN0IHJlY29tbWVuZGF0aW9uIHJlc3BvbnNlOicsXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9KSxcblxuICAgICAgICAgIHRha2VXaGlsZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAvLyBzdG9wIHBvbGxpbmcgaWYgZXhpc3RpbmcgcmVjb21tZW5kYXRpb25zIGZvdW5kXG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdEFwaVJlc3BvbnNlPy5pc19leGlzdGluZykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzICE9PSAnQ09NUExFVEVEJztcblxuICAgICAgICAgIH0sIHRydWUpLFxuXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcblxuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG5cbiAgICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgICAgLy8gRVhJU1RJTkcgUkVDT01NRU5EQVRJT05TXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0QXBpUmVzcG9uc2U/LmlzX2V4aXN0aW5nICYmIHRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kKSB7XG5cbiAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihcbiAgICAgICAgICAgICAgICBEZWxldGVSb2xlTWFwcGluZ1BvcHVwQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogJ2dlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zJyAgICAgICAgICAgICAgICAgLy8gaW5kZXggZm9yIFVJIHJlbW92YWxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdzYXZlZCcpIHtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5kZWxldGVDb3Vyc2VSZWNvbW1lbmRhdGlvbnMocm9sZV9tYXBwaW5nX2lkKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcblxuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdSZWNvbW1lbmRhdGlvbkZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RBcGlSZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VXaXRoUHJvZ3Jlc3Mocm9sZV9tYXBwaW5nX2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcj8uZXJyb3I/LmRldGFpbCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGRlbGV0ZSByZWNvbW1lbmRhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnWCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZmlyc3RBcGlSZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8vIENPTVBMRVRFRFxuICAgICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICBpZiAocmVzcG9uc2U/LnN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHtcblxuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDEwMDtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPVxuICAgICAgICAgICAgICAgICdDb3Vyc2UgcmVjb21tZW5kYXRpb25zIGdlbmVyYXRlZCBzdWNjZXNzZnVsbHkhJztcblxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG4gICAgICAgICAgICAgIH0sIDIwMDApO1xuXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICAgICAgICAnUmVjb21tZW5kYXRpb25zIHJlYWR5IScsXG4gICAgICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcblxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgPSAnJztcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NQZXJjZW50YWdlID0gMDtcblxuICAgICAgICAgICAgdGhpcy5maXJzdEFwaVJlc3BvbnNlID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGdlbmVyYXRlIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuJyxcbiAgICAgICAgICAgICAgJ1gnLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0RmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoe1xuICAgICAgY29tcGV0ZW5jeTogW10sXG4gICAgICByYXRpbmc6IFtdLFxuICAgICAgbGFuZ3VhZ2U6IFtdLFxuICAgICAgZHVyYXRpb246IFtdLFxuICAgICAgcHJvdmlkZXI6IFtdXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBmaWx0ZXJlZCBkcm9wZG93biBsaXN0c1xuICAgIHRoaXMuZmlsdGVyZWRDb21wZXRlbmN5ID0gWy4uLnRoaXMuY29tcGV0ZW5jaWVzVHlwZV07XG4gICAgdGhpcy5maWx0ZXJlZFJhdGluZ3MgPSBbLi4udGhpcy5yYXRpbmdzXTtcbiAgICB0aGlzLmZpbHRlcmVkTGFuZ3VhZ2VzID0gWy4uLnRoaXMubGFuZ3VhZ2VzXTtcbiAgICB0aGlzLmZpbHRlcmVkRHVyYXRpb25zID0gWy4uLnRoaXMuZHVyYXRpb25zXTtcbiAgICB0aGlzLmZpbHRlcmVkUHJvdmlkZXJzID0gWy4uLnRoaXMucHJvdmlkZXJzXTtcblxuICAgIC8vIFJlc2V0IGNvdXJzZSBsaXN0XG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IFsuLi50aGlzLmZ1bGxDb3Vyc2VMaXN0XTtcbiAgICAvLyB0aGlzLmZ1bGxDb3Vyc2VMaXN0LmZvckVhY2goKGl0ZW0pPT57XG4gICAgLy8gICBpZihpdGVtICYmIGl0ZW0ub3JnYW5pc2F0aW9uICYmIGl0ZW0ub3JnYW5pc2F0aW9uLmxlbmd0aCkge1xuICAgIC8vICAgICBpZih0aGlzLmZpbHRlcmVkUHJvdmlkZXJzLmluZGV4T2YoaXRlbS5vcmdhbmlzYXRpb25bMF0pIDwgMCkge1xuICAgIC8vICAgICAgIHRoaXMuZmlsdGVyZWRQcm92aWRlcnMucHVzaChpdGVtLm9yZ2FuaXNhdGlvblswXSlcbiAgICAvLyAgICAgfVxuXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgICB0aGlzLmdldEFsbEF2YWlsYWJsZUNvdXJzZXMoKVxuICB9XG5cbiAgZmlsdGVyTGlzdCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2ggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjb21wZXRlbmN5JzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZENvbXBldGVuY3kgPSB0aGlzLmNvbXBldGVuY2llc1R5cGUuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhdGluZyc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRSYXRpbmdzID0gdGhpcy5yYXRpbmdzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYW5ndWFnZSc6XG4gICAgICAgIHRoaXMuZmlsdGVyZWRMYW5ndWFnZXMgPSB0aGlzLmxhbmd1YWdlcy5maWx0ZXIodiA9PiB2LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZHVyYXRpb24nOlxuICAgICAgICB0aGlzLmZpbHRlcmVkRHVyYXRpb25zID0gdGhpcy5kdXJhdGlvbnMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Byb3ZpZGVyJzpcbiAgICAgICAgdGhpcy5maWx0ZXJlZFByb3ZpZGVycyA9IHRoaXMucHJvdmlkZXJzLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplQ29tcGV0ZW5jeSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdiA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodiA9PT0gJ2FsbCcpIHJldHVybiAnYWxsJztcbiAgICBpZiAodi5pbmNsdWRlcygnYmVoYXZpb3VyYWwnKSB8fCB2LmluY2x1ZGVzKCdiZWhhdmlvcmFsJykpIHJldHVybiAnYmVoYXZpb3JhbCc7XG4gICAgaWYgKHYuaW5jbHVkZXMoJ2Z1bmN0aW9uYWwnKSkgcmV0dXJuICdmdW5jdGlvbmFsJztcbiAgICBpZiAodi5pbmNsdWRlcygnZG9tYWluJykpIHJldHVybiAnZG9tYWluJztcblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBjb21wZXRlbmN5ID0gW10sXG4gICAgICByYXRpbmcgPSBbXSxcbiAgICAgIGxhbmd1YWdlID0gW10sXG4gICAgICBkdXJhdGlvbiA9IFtdLFxuICAgICAgcHJvdmlkZXIgPSBbXVxuICAgIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG5cbiAgICBjb25zb2xlLmxvZygndGhpcy5mdWxsQ291cnNlTGlzdC0tJywgdGhpcy5mdWxsQ291cnNlTGlzdClcblxuICAgIHRoaXMuZmlsdGVyZENvdXJzZXMgPSB0aGlzLmZ1bGxDb3Vyc2VMaXN0LmZpbHRlcihjb3Vyc2UgPT4ge1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIENvbXBldGVuY3kgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgY291cnNlQ29tcGV0ZW5jaWVzID0gW1xuICAgICAgICAuLi4oY291cnNlLmNvbXBldGVuY2llcyB8fCBbXSksXG4gICAgICAgIC4uLihjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2IHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRDb21wZXRlbmNpZXMgPSBjb21wZXRlbmN5XG4gICAgICAgIC5tYXAoKGM6IHN0cmluZykgPT4gdGhpcy5ub3JtYWxpemVDb21wZXRlbmN5KGMpKVxuICAgICAgICAuZmlsdGVyKGMgPT4gYyAhPT0gJycpO1xuXG4gICAgICBjb25zdCBjb21wZXRlbmN5TWF0Y2ggPVxuICAgICAgICBzZWxlY3RlZENvbXBldGVuY2llcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgc2VsZWN0ZWRDb21wZXRlbmNpZXMuaW5jbHVkZXMoJ2FsbCcpIHx8XG4gICAgICAgIGNvdXJzZUNvbXBldGVuY2llcy5zb21lKChjOiBhbnkpID0+XG4gICAgICAgICAgc2VsZWN0ZWRDb21wZXRlbmNpZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUNvbXBldGVuY3koYy5jb21wZXRlbmN5QXJlYU5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tIFJhdGluZyAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCByYXRpbmdNYXRjaCA9XG4gICAgICAgIHJhdGluZy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgdGhpcy5tYXRjaFJhdGluZyhjb3Vyc2UsIHJhdGluZyk7XG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgY29uc3QgbGFuZ3VhZ2VNYXRjaCA9XG4gICAgICAgIGxhbmd1YWdlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBsYW5ndWFnZS5zb21lKChsOiBzdHJpbmcpID0+XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlID09PSBsIHx8XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlPy5pbmNsdWRlcz8uKGwpIHx8XG4gICAgICAgICAgY291cnNlLmxhbmd1YWdlPy5bMF0/LmluY2x1ZGVzPy4obClcbiAgICAgICAgKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBEdXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBkdXJhdGlvbk1hdGNoID1cbiAgICAgICAgZHVyYXRpb24ubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHRoaXMubWF0Y2hEdXJhdGlvbihjb3Vyc2UuZHVyYXRpb24sIGR1cmF0aW9uKTtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLSBQcm92aWRlciAtLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICBjb25zdCBwcm92aWRlck1hdGNoID1cbiAgICAgICAgcHJvdmlkZXIubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIHByb3ZpZGVyLnNvbWUoKHA6IHN0cmluZykgPT5cbiAgICAgICAgICBjb3Vyc2Uub3JnYW5pc2F0aW9uPy5pbmNsdWRlcyhwKVxuICAgICAgICApO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBjb21wZXRlbmN5TWF0Y2ggJiZcbiAgICAgICAgcmF0aW5nTWF0Y2ggJiZcbiAgICAgICAgbGFuZ3VhZ2VNYXRjaCAmJlxuICAgICAgICBkdXJhdGlvbk1hdGNoICYmXG4gICAgICAgIHByb3ZpZGVyTWF0Y2hcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBtYXRjaFJhdGluZyhjb3Vyc2U6IGFueSwgc2VsZWN0ZWRSYXRpbmdzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghc2VsZWN0ZWRSYXRpbmdzIHx8IHNlbGVjdGVkUmF0aW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBubyBmaWx0ZXIgc2VsZWN0ZWQg4oaSIG1hdGNoIGV2ZXJ5dGhpbmdcbiAgICB9XG5cbiAgICBsZXQgcmF0aW5nID0gbnVsbDtcblxuICAgIC8vIDHvuI/ig6MgVXNlIGF2Z1JhdGluZyBpZiBhdmFpbGFibGVcbiAgICBpZiAoY291cnNlLmF2Z1JhdGluZyAhPSBudWxsICYmICFpc05hTihjb3Vyc2UuYXZnUmF0aW5nKSkge1xuICAgICAgcmF0aW5nID0gTnVtYmVyKGNvdXJzZS5hdmdSYXRpbmcpO1xuICAgIH1cbiAgICAvLyAy77iP4oOjIE1hcCByZWxldmFuY3kgaWYgYXZnUmF0aW5nIG1pc3NpbmdcbiAgICBlbHNlIGlmIChjb3Vyc2UucmVsZXZhbmN5ICE9IG51bGwgJiYgIWlzTmFOKGNvdXJzZS5yZWxldmFuY3kpKSB7XG4gICAgICBjb25zdCByZWwgPSBOdW1iZXIoY291cnNlLnJlbGV2YW5jeSk7XG4gICAgICBpZiAocmVsID49IDkwKSByYXRpbmcgPSA0LjU7XG4gICAgICBlbHNlIGlmIChyZWwgPj0gODApIHJhdGluZyA9IDQuMDtcbiAgICAgIGVsc2UgaWYgKHJlbCA+PSA3MCkgcmF0aW5nID0gMy41O1xuICAgICAgZWxzZSBpZiAocmVsID49IDUwKSByYXRpbmcgPSAyLjU7XG4gICAgICBlbHNlIHJhdGluZyA9IDEuMDtcbiAgICB9XG5cbiAgICAvLyAz77iP4oOjIE5vIHVzYWJsZSByYXRpbmcg4oaSIGV4Y2x1ZGVcbiAgICBpZiAocmF0aW5nID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyA077iP4oOjIE1hdGNoIHNlbGVjdGVkIHJhdGluZyByYW5nZXNcbiAgICByZXR1cm4gc2VsZWN0ZWRSYXRpbmdzLnNvbWUociA9PiB7XG4gICAgICBzd2l0Y2ggKHIpIHtcbiAgICAgICAgY2FzZSAnNC41IGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gNC41O1xuICAgICAgICBjYXNlICc0LjAgYW5kIGFib3ZlJzogcmV0dXJuIHJhdGluZyA+PSA0LjA7XG4gICAgICAgIGNhc2UgJzMuNSBhbmQgYWJvdmUnOiByZXR1cm4gcmF0aW5nID49IDMuNTtcbiAgICAgICAgY2FzZSAnMi41IGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gMi41O1xuICAgICAgICBjYXNlICcxIGFuZCBhYm92ZSc6IHJldHVybiByYXRpbmcgPj0gMS4wO1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG1hdGNoRHVyYXRpb24oZHVyYXRpb25JblNlY29uZHM6IG51bWJlciB8IHN0cmluZywgc2VsZWN0ZWRSYW5nZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaG91cnMgPSBOdW1iZXIoZHVyYXRpb25JblNlY29uZHMpIC8gMzYwMDtcblxuICAgIHJldHVybiBzZWxlY3RlZFJhbmdlcy5zb21lKHJhbmdlID0+IHtcbiAgICAgIHN3aXRjaCAocmFuZ2UpIHtcbiAgICAgICAgY2FzZSAnPCAxIEhvdXInOlxuICAgICAgICAgIHJldHVybiBob3VycyA8IDE7XG4gICAgICAgIGNhc2UgJzEtNSBIb3Vycyc6XG4gICAgICAgICAgcmV0dXJuIGhvdXJzID49IDEgJiYgaG91cnMgPD0gNTtcbiAgICAgICAgY2FzZSAnNSsgSG91cnMnOlxuICAgICAgICAgIHJldHVybiBob3VycyA+IDU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gQ29uZmlybWF0aW9uIERpYWxvZyBDb21wb25lbnRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JlZ2VuZXJhdGUtY29uZmlybWF0aW9uLWRpYWxvZycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm1hdGlvbi1kaWFsb2ctY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3YXJuaW5nLWljb25cIj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmVnZW5lcmF0ZSBDb3Vyc2UgUmVjb21tZW5kYXRpb25zPC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJtYWluLW1lc3NhZ2VcIj5cbiAgICAgICAgICBUaGlzIHdpbGwgZGVsZXRlIGFsbCBjdXJyZW50IGNvdXJzZSByZWNvbW1lbmRhdGlvbnMgYW5kIGdlbmVyYXRlIG5ldyBvbmVzIGJhc2VkIG9uIHRoZSBsYXRlc3Qgcm9sZSBtYXBwaW5nLlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzPVwic3ViLW1lc3NhZ2VcIj5cbiAgICAgICAgICBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/XG4gICAgICAgIDwvcD5cbiAgICAgIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgXG4gICAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwiZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJvbkNhbmNlbCgpXCIgY2xhc3M9XCJjYW5jZWwtYnRuXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiIGNsYXNzPVwiY29uZmlybS1idG5cIj5cbiAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAgWWVzLCBSZWdlbmVyYXRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAuY29uZmlybWF0aW9uLWRpYWxvZy1jb250YWluZXIge1xuICAgICAgcGFkZGluZzogMDtcbiAgICB9XG4gICAgXG4gICAgLmRpYWxvZy1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgICBwYWRkaW5nOiAyNHB4IDI0cHggMTZweCAyNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XG4gICAgfVxuICAgIFxuICAgIC53YXJuaW5nLWljb24ge1xuICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBjb2xvcjogI2ZmOTgwMDtcbiAgICB9XG4gICAgXG4gICAgaDIge1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMzMzO1xuICAgIH1cbiAgICBcbiAgICAuZGlhbG9nLWNvbnRlbnQge1xuICAgICAgcGFkZGluZzogMjRweDtcbiAgICB9XG4gICAgXG4gICAgLm1haW4tbWVzc2FnZSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBjb2xvcjogIzMzMztcbiAgICAgIG1hcmdpbjogMCAwIDEycHggMDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgfVxuICAgIFxuICAgIC5zdWItbWVzc2FnZSB7XG4gICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICBjb2xvcjogIzY2NjtcbiAgICAgIG1hcmdpbjogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuICAgIFxuICAgIC5kaWFsb2ctYWN0aW9ucyB7XG4gICAgICBwYWRkaW5nOiAxNnB4IDI0cHggMjRweCAyNHB4O1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICB9XG4gICAgXG4gICAgLmNhbmNlbC1idG4ge1xuICAgICAgY29sb3I6ICM2NjY7XG4gICAgfVxuICAgIFxuICAgIC5jb25maXJtLWJ0biB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgXG4gICAgICAubWF0LWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgICBoZWlnaHQ6IDE4cHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2VuZXJhdGVDb25maXJtYXRpb25EaWFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UmVnZW5lcmF0ZUNvbmZpcm1hdGlvbkRpYWxvZz5cbiAgKSB7IH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XG4gIH1cblxuICBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSk7XG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250YWluZXJcIj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gSW5pdGlhbCBMb2FkaW5nIFNjcmVlbiAoZm9yIGluaXRpYWwgbG9hZCBhbmQgcmVnZW5lcmF0aW9uKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtbG9hZGluZy1jb250YWluZXJcIiAqbmdJZj1cIiFkYXRhTG9hZGVkIHx8IGlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHQgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgKGlzUmVnZW5lcmF0aW5nV2l0aFByb2dyZXNzID8gJ1JlZ2VuZXJhdGluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb25zLi4uJyA6ICdMb2FkaW5nIGNvdXJzZSByZWNvbW1lbmRhdGlvbnMuLi4nKSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWRldGFpbHNcIiAqbmdJZj1cInByb2dyZXNzUGVyY2VudGFnZSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwicHJvZ3Jlc3NQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBwcm9ncmVzc1BlcmNlbnRhZ2UgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGltZS1lc3RpbWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBjb3Vyc2UgZ2VuZXJhdGlvbiBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAxLTIgbWludXRlcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTWFpbiBDb250ZW50IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCIgKm5nSWY9XCJkYXRhTG9hZGVkICYmICFpc1JlZ2VuZXJhdGluZ1dpdGhQcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtaGVhZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlNhdmUgQ291cnNlcyAoPHNwYW4+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5vcmdOYW1lfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIFwiPi8ge3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19PC9zcGFuPjwvc3Bhbj4pPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWdlbmVyYXRlLWJ0blwiIChjbGljayk9XCJyZWdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVnZW5lcmF0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhaXNSZWdlbmVyYXRpbmdcIj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNSZWdlbmVyYXRpbmdcIiBkaWFtZXRlcj1cIjIwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpc1JlZ2VuZXJhdGluZyA/ICdSZWdlbmVyYXRpbmcuLi4nIDogJ1JlZ2VuZXJhdGUgUmVjb21tZW5kYXRpb25zJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXIgbXQtNFwiPlxuICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uT3V0ZXJUYWJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRmlyc3QgTWFpbiBUYWIgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJjb3Vyc2UgcmVjb21tZW5kYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBOZXN0ZWQgVGFicyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LXRhYi1ncm91cCAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25Jbm5lclRhYkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImFsbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImJlaGF2aW91cmFsXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiZnVuY3Rpb25hbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cImRvbWFpblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD4gLS0+XG4gICAgICAgICAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTZWNvbmQgTWFpbiBUYWIgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJnYXAgYW5hbHlzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8cD5HYXAgYW5hbHlzaXMgY29udGVudCBnb2VzIGhlcmU8L3A+IC0tPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiIGNsYXNzPVwiZmlsdGVycy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLW1hcHBpbmctY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm91dGVyVGFiQWN0aXZlSW5kZXggPT09IDAgJiYgKGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDAgfHwgaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMSB8fCBpbm5lclRhYkFjdGl2ZUluZGV4ID09PSAyIHx8IGlubmVyVGFiQWN0aXZlSW5kZXggPT09IDMgKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLWltcHJvdmVkIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlYXJjaCBDb3Vyc2VzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXItY29tcGFjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VhcmNoLWljb25cIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2lucHV0LWNvbXBhY3RcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJhcHBseUZpbHRlcigkZXZlbnQudGFyZ2V0LnZhbHVlKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvdXJzZXNcIiB0eXBlPVwidGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IENvbXBldGVuY3k8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmNvbXBldGVuY3k/Lmxlbmd0aCA/ICcnIDogJ0NvbXBldGVuY3knIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvbXBldGVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2NvbXBldGVuY3knKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkQ29tcGV0ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IFJhdGluZzwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLnJhdGluZz8ubGVuZ3RoID8gJycgOiAnUmF0aW5nJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhdGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFJlYXRpbmdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdyYXRpbmcnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkUmF0aW5nc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1pbXByb3ZlZC1zZWMtMiBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBMYW5ndWFnZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLmxhbmd1YWdlPy5sZW5ndGggPyAnJyA6ICdMYW5ndWFnZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYW5ndWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIExhbmd1YWdlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiZmlsdGVyTGlzdCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlLCAnbGFuZ3VhZ2UnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmFsdWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByIG9mIGZpbHRlcmVkTGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYW5kLWJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U2VsZWN0IER1cmF0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlckZvcm0udmFsdWUuZHVyYXRpb24/Lmxlbmd0aCA/ICcnIDogJ0R1cmF0aW9uJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImR1cmF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzcz1cInNlbGVjdC1zZWFyY2gtcGFuZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGJveCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJib3JkZXI6MXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDt3aWR0aDogOTIlO21hcmdpbjogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cImZpbHRlckxpc3QoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSwgJ2R1cmF0aW9uJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZhbHVlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgciBvZiBmaWx0ZXJlZER1cmF0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFuZC1idXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBQcm92aWRlcjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXJGb3JtLnZhbHVlLnByb3ZpZGVyPy5sZW5ndGggPyAnJyA6ICdQcm92aWRlcicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWxlY3Qtc2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJhcHBseUZpbHRlcnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBib3ggLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwiYm9yZGVyOjFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7d2lkdGg6IDkyJTttYXJnaW46IDVweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJmaWx0ZXJMaXN0KCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUsICdwcm92aWRlcicpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWYWx1ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHIgb2YgZmlsdGVyZWRQcm92aWRlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDQ1cHg7bWFyZ2luLWxlZnQ6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIlJlc2V0IEFsbCBGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVycygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTZweDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMwMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJlZCBDb3Vyc2UgQ291bnQgOiB7e2ZpbHRlcmRDb3Vyc2VzPy5sZW5ndGh9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNSBzdWItaGVhZGluZyBzZWxlY3QtYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiZmFsc2VcIiAoY2hhbmdlKT1cInNlbGVjdEFsbENvdXJzZXMoJGV2ZW50KVwiPlNlbGVjdCBBbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291cnNlczwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwLWNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQWRkIE1vcmUgQ291cnNlIEZyb20gaUdPVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VnZ2VzdE1vcmVDb3Vyc2VzKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwic2VsZWN0RmlsdGVyQ291cnNlcz8ubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RGaWx0ZXJDb3Vyc2VzPy5sZW5ndGggPiAwID8gJ2J0bi1hY3RpdmUnIDogJ2J0bi1kaXNhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgW3ZhbHVlXT1cIm1vZGUgPT09ICdhZGQnID8gJ1NhdmUgQ291cnNlcycgOiAnVXBkYXRlIENvdXJzZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlQ291cnNlcygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXItY29udGFpbmVyIG10LTJcIiAqbmdJZj1cImZpbHRlcmRDb3Vyc2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyLW1lc3NhZ2UgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGlzY2xhaW1lcjo8L3N0cm9uZz4gUGxlYXNlIHZlcmlmeSB0aGUgcHVibGljIGNvdXJzZSBVUkwgYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgcGxhbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA+IDAgPyAnY291cnNlLWxpc3QtY29udGFpbmVyLWZsZXgnOidjb3Vyc2UtbGlzdC1jb250YWluZXItcmlnaHQtZmxleCcgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMCA/ICdsZWZ0LXBhbmVsJzonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPT09IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIGluIEJlaGF2aW91cmFsPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aGVtZS1maWx0ZXItY29udHJvbHMgbWItMlwiICpuZ0lmPVwic2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2xlYXItZmlsdGVyLWJ0blwiIChjbGljayk9XCJjbGVhclRoZW1lRmlsdGVyKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+IENsZWFyIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJmaWx0ZXJPbkNvbXBldGVuY3lUaGVtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWxpc3QtaXRlbSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtdGhlbWUnOiBpc1RoZW1lU2VsZWN0ZWQoaXRlbSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbXBldGVuY3lNYXRjaGVkQnlDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW5uZXJUYWJBY3RpdmVJbmRleCA9PT0gMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgaW4gRnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlbWUtZmlsdGVyLWNvbnRyb2xzIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFyLWZpbHRlci1idG5cIiAoY2xpY2spPVwiY2xlYXJUaGVtZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPiBDbGVhciBGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZmlsdGVyT25Db21wZXRlbmN5VGhlbWUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS1saXN0LWl0ZW0gY3Vyc29yLXBvaW50ZXIgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLXRoZW1lJzogaXNUaGVtZVNlbGVjdGVkKGl0ZW0pfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlubmVyVGFiQWN0aXZlSW5kZXggPT09IDNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Q29tcGV0ZW5jaWVzIGluIERvbWFpbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhlbWUtZmlsdGVyLWNvbnRyb2xzIG1iLTJcIiAqbmdJZj1cInNlbGVjdGVkVGhlbWVGaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsZWFyLWZpbHRlci1idG5cIiAoY2xpY2spPVwiY2xlYXJUaGVtZUZpbHRlcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPiBDbGVhciBGaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZmlsdGVyT25Db21wZXRlbmN5VGhlbWUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWxpc3QtaXRlbSBjdXJzb3ItcG9pbnRlciBtdC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC10aGVtZSc6IGlzVGhlbWVTZWxlY3RlZChpdGVtKX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5TWF0Y2hlZEJ5Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpbm5lclRhYkFjdGl2ZUluZGV4ID4gMCA/ICdyaWdodC1wYW5lbCc6J3JpZ2h0LXBhbmVsLWZsZXgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIENvdXJzZSBGb3VuZCBNZXNzYWdlIGluIFJpZ2h0IFBhbmVsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1mb3VuZC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFRoZW1lRmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1jb3Vyc2UtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaF9vZmY8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNvdXJzZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Tm8gQ291cnNlcyBGb3VuZDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBjb3Vyc2VzIGZvdW5kIGZvciB0aGUgc2VsZWN0ZWQgdGhlbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e3NlbGVjdGVkVGhlbWVGaWx0ZXJ9fTwvc3Ryb25nPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPldvdWxkIHlvdSBsaWtlIHRvIGFkZCBhIGNvdXJzZSBmb3IgdGhpcyBjb21wZXRlbmN5PzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzdWdnZXN0LWNvdXJzZS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb3Vyc2VGb3JTZWxlY3RlZFRoZW1lKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvdXJzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ291cnNlcyBMaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJkQ291cnNlcztsZXQgaT1pbmRleFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY2hlY2tlZF09XCJjaGVja0lmQ291cnNlRXhpc3RzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0ZWRGaWx0ZXJDb3Vyc2VzKCRldmVudCwgaXRlbSlcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLXBpbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2NvdXJzZS5zdmdcIj48L3NwYW4+Jm5ic3A7PHNwYW4+Q291cnNlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtPy5yYXRpb25hbGVcIj5BSSBSZWNvbW1lbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uaXNfcHVibGljXCI+IC0gUHVibGljPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0/LmlzX3B1YmxpY1wiPiAtIGlHT1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtPy5yYXRpb25hbGVcIj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiAhaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyZWVuLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LnJhdGlvbmFsZSAmJiBpdGVtPy5pc19wdWJsaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpYy10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj48c3Bhbj5QbGF0Zm9ybSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtPy5yYXRpb25hbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmF5LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlByb3ZpZGVyIC0ge3tpdGVtPy5vcmdhbmlzYXRpb25bMF19fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS10aXRsZSBtdC0zIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9Ub2MoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8uY291cnNlXCI+e3tpdGVtPy5jb3Vyc2V9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJpdGVtPy5uYW1lXCI+e3tpdGVtPy5uYW1lfX0qKioqPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MTBweDtcIiAoY2xpY2spPVwicmVkaXJlY3RUb1RvYyhpdGVtKVwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMThweFwiIHdpZHRoPVwiMThweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9yZWRpcmVjdC5wbmdcIiAvPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtZGVzYyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiaXRlbT8ucmF0aW9uYWxlXCI+e3tpdGVtPy5yYXRpb25hbGV9fTwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0/LmRlc2NyaXB0aW9uXCI+e3tpdGVtPy5kZXNjcmlwdGlvbn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3VyYWwnLGkpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+QmVoYXZpb3VyYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImJlaGF2aW91cmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXAuY29tcGV0ZW5jeVN1YlRoZW1lTmFtZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnQmVoYXZpb3VyYWwnLGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnQmVoYXZpb3VyYWwnLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nQ291bnQoJ0JlaGF2aW91cmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnRnVuY3Rpb25hbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5GdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJmdW5jdGlvbmFsLXBpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXMoJ0Z1bmN0aW9uYWwnLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdGdW5jdGlvbmFsJyxpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tcGV0ZW5jaWVzKCdGdW5jdGlvbmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRnVuY3Rpb25hbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc3ViLWhlYWRpbmdcIj5Eb21haW4gQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjb21wZXRlbmN5LWxpc3QgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0XCI+IHt7IGNvbXAuY29tcGV0ZW5jeVRoZW1lTmFtZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdEb21haW4nLGkpXCIgY2xhc3M9XCJzaG93LW1vcmUtY29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0RvbWFpbicsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzRXhwYW5kZWQoJ0RvbWFpbicsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRG9tYWluJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlbGV2YW5jeSBhbmQgRHVyYXRpb24gc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWZvb3RlclwiICpuZ0lmPVwiaXRlbT8ucmVsZXZhbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj57e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5LXBpbGwtZ3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeVwiPkR1cmF0aW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbT8uZHVyYXRpb25cIj57e2dldER1cmF0aW9uKGl0ZW0/LmR1cmF0aW9uKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEoaXRlbT8uZHVyYXRpb24pXCI+Ti9BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBHZW5lcmFsIE5vIERhdGEgTWVzc2FnZSAob25seSB3aGVuIG5vIHRoZW1lIGZpbHRlciBpcyBhY3RpdmUpIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzdWItaGVhZGluZ1wiICpuZ0lmPVwiZmlsdGVyZENvdXJzZXM/Lmxlbmd0aCA9PT0gMCAmJiAhc2VsZWN0ZWRUaGVtZUZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+Tm8gRGF0YSBGb3VuZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtbWFwcGluZy1jb250YWluZXJcIiAqbmdJZj1cIm91dGVyVGFiQWN0aXZlSW5kZXggPT09IDFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZ2FwLWFuYWx5c2lzLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bmxvYWQtcGRmIG10LTQgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiRG93bmxvYWRcIiAoY2xpY2spPVwiZG93bmxvYWRQREYoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJpc1BERkRvd25sb2FkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBkZi1oZWFkaW5nXCI+e3tzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5uYW1lfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgXCI+X3t7cGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWV9fV9HYXBfQW5hbHlzaXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHZoLTEwMFwiIFtuZ0NsYXNzXT1cImlzUERGRG93bmxvYWQgPyAnbXQtNCc6JydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNpZGViYXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBwLTMgYmctbGlnaHQgYm9yZGVyLWVuZFwiIHN0eWxlPVwid2lkdGg6IDI1MHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi00XCI+QW5hbHl6ZSBieSBDYXRlZ29yeTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMiB0ZXh0LXN0YXJ0IG1lbnUtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gaXRlbS5rZXlcIiAoY2xpY2spPVwic2VsZWN0Q2F0ZWdvcnkoaXRlbS5rZXkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYWluIENvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0zIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBncmF5LWJnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sYWJlbCBzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5Db21wZXRlbmNpZXMgQ292ZXJlZDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCI+e3tjb21wZXRlbmN5Q292ZXJlZENvdW50fX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMyBncmF5LWJnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1sYWJlbCBzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdhbGwnXCI+VG90YWwgQ29tcGV0ZW5jaWVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlRvdGFsIEJlaGF2aW91cmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+VG90YWwgRnVuY3Rpb25hbCBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+VG90YWwgRG9tYWluIENvbXBldGVuY2llczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tiZWhhdmlvcmFsVG90YWxDb21wZXRlbmNpZXN9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Z1bmN0aW9uYWxUb3RhbENvbXBldGVuY2llc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2RvbWFpbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkb21haW5Ub3RhbENvbXBldGVuY2llc319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTMgZ3JlZW4tYmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYWxsJ1wiPk92ZXJhbGwgQ292ZXJhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnYmVoYXZpb3JhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVoYXZpb3VyYWwgQ292ZXJhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsXCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZnVuY3Rpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25hbCBDb3ZlcmFnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tbGFiZWxcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdkb21haW4nXCI+RG9tYWluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdmVyYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2FsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvdmVyYWxsQ292ZXJhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXYtZ3JlZW4tY291bnRcIiAqbmdJZj1cInNlbGVjdGVkQ2F0ZWdvcnkgPT09ICdiZWhhdmlvcmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2JlaGF2aW9yYWxDb3ZlcmFnZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdi1ncmVlbi1jb3VudFwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeSA9PT0gJ2Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZnVuY3Rpb25hbENvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWNvdW50XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5ID09PSAnZG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RvbWFpbkNvdmVyYWdlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWxsLWNhdGVnb3J5LWxpc3RcIiBbbmdTd2l0Y2hdPVwic2VsZWN0ZWRDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2FsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+QWxsIENhdGVnb3JpZXM8L2g0PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IEJlaGF2aW91cmFsIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGJlaGF2aW91cmFsIGNvbXBldGVuY2llcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmVoYXZpb3VyYWxOb3RNYXRjaGVkICYmIGJlaGF2aW91cmFsTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmVoYXZpb3VyYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdCZWhhdmlvcmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdXJzZTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBGdW5jdGlvbmFsIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGZ1bmN0aW9uYWwgY29tcGV0ZW5jaWVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmdW5jdGlvbmFsTm90TWF0Y2hlZCAmJiBmdW5jdGlvbmFsTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtIHwgdGl0bGVjYXNlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnRnVuY3Rpb25hbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2U8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgRG9tYWluIHNlY3Rpb24gb25seSBpZiB0aGVyZSBhcmUgdW5tYXRjaGVkIGRvbWFpbiBjb21wZXRlbmNpZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbk5vdE1hdGNoZWQgJiYgZG9tYWluTm90TWF0Y2hlZC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RG9tYWluPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRkLWJ0blwiPjxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPiBBZGQgTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vyc2U8L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgbWVzc2FnZSB3aGVuIGFsbCBjb21wZXRlbmNpZXMgYXJlIGNvdmVyZWQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIighYmVoYXZpb3VyYWxOb3RNYXRjaGVkIHx8IGJlaGF2aW91cmFsTm90TWF0Y2hlZC5sZW5ndGggPT09IDApICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFmdW5jdGlvbmFsTm90TWF0Y2hlZCB8fCBmdW5jdGlvbmFsTm90TWF0Y2hlZC5sZW5ndGggPT09IDApICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFkb21haW5Ob3RNYXRjaGVkIHx8IGRvbWFpbk5vdE1hdGNoZWQubGVuZ3RoID09PSAwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tZ2Fwcy1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzdWNjZXNzLWljb25cIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkV4Y2VsbGVudCEgQWxsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5BbGwgcmVxdWlyZWQgY29tcGV0ZW5jaWVzIGhhdmUgYmVlbiBhZGRyZXNzZWQgYnkgdGhlIHNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cnNlcy48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2JlaGF2aW9yYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkJlaGF2aW91cmFsPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiYmVoYXZpb3JhbENvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+QmVoYXZpb3VyYWw8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JheS1iZy1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxOb3RNYXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48c3Bhbj57e2l0ZW19fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRDb3Vyc2UoaXRlbSwgJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZC1idG5cIj48bWF0LWljb24+YWRkPC9tYXQtaWNvbj4gQWRkIE5ldyBDb3Vyc2UgPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiYmVoYXZpb3JhbENvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBiZWhhdmlvcmFsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjb3Vyc2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmdW5jdGlvbmFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5GdW5jdGlvbmFsPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZnVuY3Rpb25hbENvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RnVuY3Rpb25hbDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmF5LWJnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHNwYW4+e3tpdGVtfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkQ291cnNlKGl0ZW0sICdGdW5jdGlvbmFsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXcgQ291cnNlPC9zcGFuPjwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwiZnVuY3Rpb25hbENvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBmdW5jdGlvbmFsIGNvbXBldGVuY2llcyBhcmUgY292ZXJlZCBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjb3Vyc2VzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PkRvbWFpbjwvaDQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbkNvdmVyYWdlICE9PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RG9tYWluPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyYXktYmctaXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRvbWFpbk5vdE1hdGNoZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxzcGFuPnt7aXRlbX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFkZENvdXJzZShpdGVtLCAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtYnRuXCI+PG1hdC1pY29uPmFkZDwvbWF0LWljb24+IEFkZCBOZXcgQ291cnNlIDwvc3Bhbj48L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIiAqbmdJZj1cImRvbWFpbkNvdmVyYWdlID09PSAnMTAwJSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTg7IGJvcmRlcjogMXB4IHNvbGlkICM0Y2FmNTA7IGJvcmRlci1yYWRpdXM6IDhweDsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiAjMmU3ZDMyOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg8J+OiSBFeGNlbGxlbnQhIEFsbCBkb21haW4gY29tcGV0ZW5jaWVzIGFyZSBjb3ZlcmVkIGJ5IHRoZSBzZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXJzZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlBsZWFzZSBzZWxlY3QgYSBjYXRlZ29yeS48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IDwhLS0gQ2xvc2UgbWFpbi1jb250ZW50IGRpdiAtLT5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuPGRpdiBbaGlkZGVuXT1cIiFpc1BERkRvd25sb2FkXCIgY2xhc3M9XCJnYXAtYW5hbHlzaXMtcGRmLWNvbnRhaW5lclwiICNwZGZDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJnYXAtYW5hbHlzaXMtcGRmLWhlYWRlclwiPlxuICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMva2FybWF5b2dpTG9nby1taW4ucG5nXCIgYWx0PVwiS2FybWF5b2dpIEJoYXJhdCBMb2dvXCIgY2xhc3M9XCJsb2dvXCIgLz5cbiAgICAgIDxoMT48c3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzaGFyZWRTZXJ2aWNlPy5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZSdcIj57e3NoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8uZGVwYXJ0bWVudF9uYW1lPy5uYW1lfX08L3NwYW4+IFxuICAgICAgICA8c3BhbiAqbmdJZj1cInNoYXJlZFNlcnZpY2U/LmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5J1wiPnt7c2hhcmVkU2VydmljZT8uY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8ubmFtZX19PC9zcGFuPiAgIFxuICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lIFwiPi8ge3twbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZX19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+PC9oMT5cbiAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj5BIGRldGFpbGVkIGJyZWFrZG93biBvZiBjb21wZXRlbmNpZXMgR2FwIEFuYWx5c2lzPC9wPlxuICAgICBcbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktc25hcHNob3RcIj5cbiAgICAgIDxoMj5Db21wZXRlbmN5IFNuYXBzaG90PC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzbmFwc2hvdC1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaXJjbGUtd3JhcHBlclwiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJwcm9ncmVzcy1yaW5nXCIgd2lkdGg9XCIxMjBcIiBoZWlnaHQ9XCIxMjBcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwcm9ncmVzcy1yaW5nLWJnXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNTJcIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInByb2dyZXNzLXJpbmctY2lyY2xlXCIgY3g9XCI2MFwiIGN5PVwiNjBcIiByPVwiNTJcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlLXRleHRcIj57e292ZXJhbGxDb3ZlcmFnZX19PGJyIC8+PHNwYW4+T3ZlcmFsbCBDb3ZlcmFnZTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDwhLS0gVG90YWwgQ29tcGV0ZW5jaWVzIEJveCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1ib3hcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+VG90YWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGh9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8IS0tIFByb2dyZXNzIEJhcnMgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10ZXh0IGJlaGF2aW9yYWxcIj5CZWhhdmlvdXJhbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdmVyZWQtdGV4dFwiPnt7YmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7YmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzfX0gQ292ZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbCBiZWhhdmlvcmFsXCIgW3N0eWxlLndpZHRoLiVdPVwiKGJlaGF2aW9yYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gYmVoYXZpb3JhbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dCBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvdmVyZWQtdGV4dFwiPnt7ZnVuY3Rpb25hbENvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7ZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzfX0gQ292ZXJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZmlsbCBmdW5jdGlvbmFsXCIgW3N0eWxlLndpZHRoLiVdPVwiKGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50IC8gZnVuY3Rpb25hbFRvdGFsQ29tcGV0ZW5jaWVzKSAqIDEwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGV4dCBkb21haW5cIj5Eb21haW48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3ZlcmVkLXRleHRcIj57e2RvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnR9fSAvIHt7ZG9tYWluVG90YWxDb21wZXRlbmNpZXN9fSBDb3ZlcmVkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1maWxsIGRvbWFpblwiIFtzdHlsZS53aWR0aC4lXT1cIihkb21haW5Db21wZXRlbmN5Q292ZXJlZENvdW50IC8gZG9tYWluVG90YWxDb21wZXRlbmNpZXMpICogMTAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgXG4gICAgPGRpdiBjbGFzcz1cImdhcC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgIDxoMj5EZXRhaWxlZCBDb21wZXRlbmN5IEFuYWx5c2lzPC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnYXAtYm94XCI+XG4gICAgICAgIEJyaWRnZSBZb3VyIENvbXBldGVuY2llcyBHYXBcbiAgICAgICAgPHAgY2xhc3M9XCJzdWJ0aXRsZVwiPkhlcmUgYXJlIHt7dGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQpfX0ga2V5IGFyZWFzIGZvciBkZXZlbG9wbWVudC48L3A+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nIG1iLTRcIj5cbiAgICAgICAgPHA+R2FwIHRvIEFkZHJlc3MgPHNwYW4gKm5nSWY9XCIodGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzPy5sZW5ndGggLSAoYmVoYXZpb3JhbENvbXBldGVuY3lDb3ZlcmVkQ291bnQgKyBmdW5jdGlvbmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGRvbWFpbkNvbXBldGVuY3lDb3ZlcmVkQ291bnQpKSA+IDBcIj4oe3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvcmFsQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCArIGZ1bmN0aW9uYWxDb21wZXRlbmN5Q292ZXJlZENvdW50ICsgZG9tYWluQ29tcGV0ZW5jeUNvdmVyZWRDb3VudCl9fSk8L3NwYW4+PC9wPlxuICAgICAgICBcbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGJlaGF2aW9yYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBiZWhhdmlvdXJhbE5vdE1hdGNoZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tpdGVtIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgJm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBiZWhhdmlvcmFsXCI+QmVoYXZpb3VyYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGZ1bmN0aW9uYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTm90TWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0gfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgJm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBkb21haW5cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5Ob3RNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgIDwhLS0gUHJvamVjdCBNYW5hZ2VtZW50ICAtLT5cbiAgICAgICAgICAmbmJzcDsg4oCiICZuYnNwO1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIGRvbWFpblwiPkRvbWFpbjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZyBtYi00XCI+XG4gICAgICAgIDxwPkNvdmVyZWQgQ29tcGV0ZW5jaWVzIDxzcGFuPih7e3RoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcz8ubGVuZ3RoIC0gKGJlaGF2aW91cmFsTm90TWF0Y2hlZD8ubGVuZ3RoICsgZnVuY3Rpb25hbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGRvbWFpbk5vdE1hdGNoZWQ/Lmxlbmd0aCl9fSk8L3NwYW4+PC9wPiAgICAgICAgXG4gICAgIDwvZGl2PlxuICAgICA8ZGl2IGNsYXNzPVwiZ2FwLXNlY3Rpb24gbWItNFwiPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyZWVuLWJnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2LWdyZWVuLWxhYmVsIG1iLTJcIj5cbiAgICAgICAgICAgICAgICBDb25ncmF0dWxhdGlvbnMhXG4gICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwPllvdSBoYXZlIHN1Y2Nlc3NmdWxseSBjb3ZlcmVkIDwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInN1YnRpdGxlXCI+e3t0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmNpZXM/Lmxlbmd0aCAtIChiZWhhdmlvdXJhbE5vdE1hdGNoZWQ/Lmxlbmd0aCArIGZ1bmN0aW9uYWxOb3RNYXRjaGVkPy5sZW5ndGggKyBkb21haW5Ob3RNYXRjaGVkPy5sZW5ndGgpfX0ga2V5IGNvbXBldGVuY2llcywgZm9ybWluZyBhIHN0cm9uZyBwcm9mZXNzaW9uYWwgZm91bmRhdGlvbi48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBiZWhhdmlvcmFsXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYmVoYXZpb3VyYWxNYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbT8udGhlbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICB7e2l0ZW0/LnN1Yl90aGVtZX19Jm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBiZWhhdmlvcmFsXCI+QmVoYXZpb3VyYWw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jYXJkIGZ1bmN0aW9uYWxcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmdW5jdGlvbmFsTWF0Y2hlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2l0ZW0/LnRoZW1lIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICB7e2l0ZW0/LnN1Yl90aGVtZX19Jm5ic3A7IOKAoiAmbmJzcDtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBmdW5jdGlvbmFsXCI+RnVuY3Rpb25hbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktY2FyZCBkb21haW5cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkb21haW5NYXRjaGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7aXRlbT8udGhlbWUgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICA8IS0tIFByb2plY3QgTWFuYWdlbWVudCAgLS0+XG4gICAgICAgICAge3tpdGVtPy5zdWJfdGhlbWV9fSZuYnNwOyDigKIgJm5ic3A7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWcgZG9tYWluXCI+RG9tYWluPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdhcC1zZWN0aW9uIG1iLTRcIj5cbiAgICAgICAgPGgyPlJlY29tbWVuZGVkIENvdXJzZXM8L2gyPlxuICAgICAgPC9kaXY+XG4gICAgICA8YXBwLWdhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UgW3BsYW5EYXRhXT1cInBsYW5EYXRhXCI+PC9hcHAtZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZT5cbjwvZGl2PlxuICBcblxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmcgJiYgZGF0YUxvYWRlZCAmJiAhaXNSZWdlbmVyYXRpbmdXaXRoUHJvZ3Jlc3NcIj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250ZW50XCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjUwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctdGV4dCBtdC0zXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1haW4tbWVzc2FnZVwiPnt7IGN1cnJlbnRQcm9jZXNzaW5nU3RhZ2UgfHwgJ1ByZXBhcmluZyBjb3Vyc2UgcmVjb21tZW5kYXRpb24gZ2VuZXJhdGlvbi4uLicgfX08L3A+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1pbmRpY2F0b3JcIiAqbmdJZj1cInByb2dyZXNzUGVyY2VudGFnZSA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwicHJvZ3Jlc3NQZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInByb2dyZXNzLXRleHRcIj57eyBwcm9ncmVzc1BlcmNlbnRhZ2UgfX0lIENvbXBsZXRlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0aW1lLWVzdGltYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIFJlYWwtdGltZSBjb3Vyc2UgZ2VuZXJhdGlvbiBpbiBwcm9ncmVzcy4gVGhpcyBtYXkgdGFrZSAxLTIgbWludXRlcy5cbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19