@rivet-health/design-system 40.32.0 → 40.34.0

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.
@@ -64,6 +64,7 @@ export var RivTable;
64
64
  included: new Set(),
65
65
  },
66
66
  collapseState: {
67
+ defaultTo: 'expanded',
67
68
  collapsedRows: new Set(),
68
69
  collapsedHeaders: new Set(),
69
70
  },
@@ -456,6 +457,12 @@ export var RivTable;
456
457
  selectedCount: TableSelectionHelpers.selectedCount(coreState),
457
458
  };
458
459
  }
460
+ /**
461
+ * What a nested table's page size and total count count: every bottom-level
462
+ * row, which can split a row's subrows across pages, or each top-level row
463
+ * together with all of its subrows.
464
+ */
465
+ RivTable.NestedPaginateByOptions = ['bottomRows', 'topRows'];
459
466
  function createInMemoryManager(fetchDataset, columns, pluralEntityName, options) {
460
467
  let data;
461
468
  let fuse;
@@ -624,7 +631,7 @@ export var RivTable;
624
631
  const nestedRowsToDisplay = didRestrictDisplayedRows
625
632
  ? TableNestingHelpers.findNestedRowsWithHeadersToKeep(data, rowsMatchingFilters)
626
633
  : data;
627
- const bottomLevelRowCount = TableNestingHelpers.countBottomLevelNestedHeaderRows(nestedRowsToDisplay);
634
+ const matchingRowCount = TableNestingHelpers.countNestedRows(nestedRowsToDisplay, options?.paginateBy ?? 'bottomRows');
628
635
  let sortedNestedRows;
629
636
  if (hasExplicitSort && query.order) {
630
637
  // Explicit sort override has priority over everything else
@@ -644,11 +651,11 @@ export var RivTable;
644
651
  // Don't sort if we have no information to use to sort
645
652
  sortedNestedRows = nestedRowsToDisplay;
646
653
  }
647
- const paginatedHeaderRows = TablePaginationHelpers.paginateNestedHeaderRows(sortedNestedRows, query.pagination.page, query.pagination.pageSize);
654
+ const paginatedHeaderRows = TablePaginationHelpers.paginateNestedHeaderRows(sortedNestedRows, query.pagination.page, query.pagination.pageSize, options?.paginateBy ?? 'bottomRows');
648
655
  const hasHeaders = paginatedHeaderRows.some(header => header.headerText != null);
649
656
  return {
650
657
  currentPageNestedHeaders: paginatedHeaderRows,
651
- totalMatchingRowCount: bottomLevelRowCount,
658
+ totalMatchingRowCount: matchingRowCount,
652
659
  hasHeaders: hasHeaders,
653
660
  };
654
661
  };
@@ -696,6 +703,9 @@ function stableState(target, source) {
696
703
  if (!isEqual(target.selection, source.selection)) {
697
704
  target.selection = source.selection;
698
705
  }
706
+ if (!isEqual(target.collapseState, source.collapseState)) {
707
+ target.collapseState = source.collapseState;
708
+ }
699
709
  return target;
700
710
  }
701
711
  async function* refreshResultWith(state, source, mostRecentAction) {
@@ -758,10 +768,6 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
758
768
  mode: 'include',
759
769
  included: new Set(),
760
770
  },
761
- collapseState: {
762
- collapsedHeaders: new Set(),
763
- collapsedRows: new Set(),
764
- },
765
771
  }, source, action);
766
772
  break;
767
773
  case 'orderColumnToggle':
@@ -784,6 +790,7 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
784
790
  included: new Set(),
785
791
  },
786
792
  collapseState: {
793
+ defaultTo: 'expanded',
787
794
  collapsedHeaders: new Set(),
788
795
  collapsedRows: new Set(),
789
796
  },
@@ -809,6 +816,7 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
809
816
  included: new Set(),
810
817
  },
811
818
  collapseState: {
819
+ defaultTo: 'expanded',
812
820
  collapsedHeaders: new Set(),
813
821
  collapsedRows: new Set(),
814
822
  },
@@ -842,10 +850,6 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
842
850
  page: TablePaginationHelpers.getPreviousPage(state) ?? 0,
843
851
  },
844
852
  },
845
- collapseState: {
846
- collapsedHeaders: new Set(),
847
- collapsedRows: new Set(),
848
- },
849
853
  }, source, action);
850
854
  break;
851
855
  case 'nextPageNavigate':
@@ -859,10 +863,6 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
859
863
  TablePaginationHelpers.getPageCount(state) - 1,
860
864
  },
861
865
  },
862
- collapseState: {
863
- collapsedHeaders: new Set(),
864
- collapsedRows: new Set(),
865
- },
866
866
  }, source, action);
867
867
  break;
868
868
  case 'pageChange':
@@ -875,10 +875,6 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
875
875
  page: action.page,
876
876
  },
877
877
  },
878
- collapseState: {
879
- collapsedHeaders: new Set(),
880
- collapsedRows: new Set(),
881
- },
882
878
  }, source, action);
883
879
  break;
884
880
  case 'pageSizeChange':
@@ -892,10 +888,6 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
892
888
  page: 0,
893
889
  },
894
890
  },
895
- collapseState: {
896
- collapsedHeaders: new Set(),
897
- collapsedRows: new Set(),
898
- },
899
891
  }, source, action);
900
892
  break;
901
893
  case 'filtersChange':
@@ -915,6 +907,7 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
915
907
  included: new Set(),
916
908
  },
917
909
  collapseState: {
910
+ defaultTo: 'expanded',
918
911
  collapsedHeaders: new Set(),
919
912
  collapsedRows: new Set(),
920
913
  },
@@ -1075,6 +1068,12 @@ async function* reduce(state, action, columns, source, columnNameMap, defaultCol
1075
1068
  effect: null,
1076
1069
  };
1077
1070
  break;
1071
+ case 'toggleAllCollapsed':
1072
+ yield {
1073
+ state: TableCollapseHelpers.toggleAllCollapsed(state),
1074
+ effect: null,
1075
+ };
1076
+ break;
1078
1077
  }
1079
1078
  }
1080
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXltRHhCO0FBem1ERCxXQUFpQixRQUFRO0lBMENWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENB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QVEsRUFBRTt3QkFDUixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO3FCQUNoQztpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssd0JBQXdCO1lBQzNCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QixrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFDaEQsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssbUJBQW1CO1lBQ3RCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxzQkFBc0I7WUFDekIsTUFBTTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07S0FDVDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgRnVzZSwgeyBJRnVzZU9wdGlvbnMgfSBmcm9tICdmdXNlLmpzJztcbmltcG9ydCB7IGRlZmF1bHRzRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDb25uZWN0YWJsZSxcbiAgY29ubmVjdGFibGUsXG4gIGZpbHRlcixcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZVNjYW4sXG4gIE9ic2VydmFibGUsXG4gIFJlcGxheVN1YmplY3QsXG4gIHNjYW4sXG4gIHNoYXJlLFxuICBTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSAndXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyB0b1NlbnRlbmNlQ2FzZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zZW50ZW5jZS1jYXNlLnBpcGUnO1xuaW1wb3J0IHsgVGFibGVDb2xsYXBzZUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sbGFwc2UtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvY29sdW1uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVEaXNwbGF5SGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9kaXNwbGF5LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVOZXN0aW5nSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9uZXN0aW5nLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVPcmRlckhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvb3JkZXItaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRpb25IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3BhZ2luYXRpb24taGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVJlc3VsdEhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvcmVzdWx0LWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVTZWFyY2hIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3NlYXJjaC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VsZWN0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWxlY3Rpb24taGVscGVycyc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2VGFibGUge1xuICBleHBvcnQgdHlwZSBSb3cgPSB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uID0gc3RyaW5nO1xuICBleHBvcnQgdHlwZSBGaWx0ZXJzID0gYW55O1xuICBleHBvcnQgdHlwZSBHcm91cCA9IHsga2V5OiBzdHJpbmcgfCBudW1iZXIgfTtcblxuICAvKipcbiAgICogUml2VGFibGUncyBzdGF0ZSBhbmQgdXNlciBhY3Rpb25zIGFyZSBkaXZpZGVkIGludG8gdGhlIGZvbGxvd2luZyBjaHVua3M6XG4gICAqXG4gICAqIC0gUXVlcnkgKGZvciB0aGluZ3MgbGlrZSBmaWx0ZXJzLCBwYWdpbmF0aW9uLCBzZWFyY2gsIGV0Yy4pXG4gICAqIC0gTG9hZGluZyAoZm9yIHdoZXRoZXIgb3Igbm90IHRoZSB0YWJsZSBpcyBsb2FkaW5nIHJvdyBkYXRhKVxuICAgKiAtIFJlc3VsdCAoZm9yIHRoZSByb3cgZGF0YSBpdHNlbGYpXG4gICAqIC0gRGlzcGxheSAoZm9yIHRoaW5ncyBsaWtlIGNvbHVtbiBjb25maWd1cmF0aW9uKVxuICAgKiAtIFNlbGVjdGlvbiAoZm9yIHRyYWNraW5nIHRoZSB1c2VyJ3Mgcm93IHNlbGVjdGlvbnMpXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgZGF0YSBmbG93IGlzIHVuaWRpcmVjdGlvbmFsOiB0aGUgVUkgaXNzdWVzIGFjdGlvbnMsIHdoaWNoXG4gICAqIGFmZmVjdCB0aGUgc3RhdGUsIGFuZCB0aGUgc3RhdGUgZ2V0cyBwYXNzZWQgYmFjayB0byB0aGUgVUkgZm9yIGRpc3BsYXkuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICpcbiAgICogRnJvbSB0aGUgY29yZSBzdGF0ZSwgY2FsY3VsYXRlZCBzdGF0ZSBpcyBkZXJpdmVkIGFuZCBhZGRlZCB0byB0aGUgY29yZVxuICAgKiBzdGF0ZSAoZS5nLiwgZnJvbSB0aGUgcmF3IHNlbGVjdGlvbiBzdGF0ZSB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90XG4gICAqIGFsbCB0aGUgcm93cyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIGFyZSBzZWxlY3RlZCwgZXRjLikuXG4gICAqL1xuXG4gIC8vLy8vLy8vLy8vXG4gIC8vIFF1ZXJ5IC8vXG4gIC8vLy8vLy8vLy8vXG5cbiAgLy8gUXVlcnkgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBPcmRlckRpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnO1xuICBleHBvcnQgY29uc3QgcGFnZVNpemVzID0gWzI1LCA1MCwgMTAwLCAyNTBdIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBRdWVyeTxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPSB7XG4gICAgb3JkZXI6IHtcbiAgICAgIGRpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb247XG4gICAgICBjb2x1bW46IEM7XG4gICAgfSB8IG51bGw7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc2VhcmNoQ29sdW1uczogTWFwPEMsIGJvb2xlYW4+O1xuICAgIGZpbHRlcnM6IEYgfCBudWxsO1xuICAgIHBhZ2luYXRpb246IHtcbiAgICAgIHBhZ2U6IG51bWJlcjtcbiAgICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgfTtcbiAgICBncm91cGluZzoge1xuICAgICAgdmlld01vcmVLZXk6IHN0cmluZyB8IG51bGw7XG4gICAgICBncm91cHNQZXJQYWdlOiBudW1iZXI7XG4gICAgICBjb3VudFBlckdyb3VwOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvLyBRdWVyeSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgUXVlcnlBY3Rpb248QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ29yZGVyQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUXVlcnk8QywgRj5bJ29yZGVyJ107XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JztcbiAgICAgIH1cbiAgICB8IHsgdHlwZTogJ29yZGVyQ29sdW1uVG9nZ2xlJzsgY29sdW1uOiBDIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2gnXSB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaENvbHVtbnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJzQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2ZpbHRlcnMnXSB9XG4gICAgfCB7IHR5cGU6ICdmaWx0ZXJBZGQnOyBjb2x1bW5LZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICdwYWdpbmF0aW9uQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3BhZ2luYXRpb24nXSB9XG4gICAgfCB7IHR5cGU6ICdncm91cGluZ0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+Wydncm91cGluZyddIH1cbiAgICB8IHsgdHlwZTogJ25leHRQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwYWdlQ2hhbmdlJzsgcGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VTaXplQ2hhbmdlJzsgc2l6ZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2dyb3Vwc1BlclBhZ2VDaGFuZ2UnOyBncm91cHNQZXJQYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnY291bnRQZXJHcm91cENoYW5nZSc7IGNvdW50UGVyR3JvdXA6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICd2aWV3TW9yZUtleUNoYW5nZSc7IHZpZXdNb3JlS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucycgfTtcblxuICAvLy8vLy8vLy8vXG4gIC8vIExvYWQgLy9cbiAgLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIExvYWQgPSB7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBlcnJvcjogdW5rbm93biB8IG51bGw7XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vXG4gIC8vIFJlc3VsdCAvL1xuICAvLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIGN1cnJlbnRQYWdlRGF0YTogUltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdWJHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gUmVzdWx0PFI+ICYge1xuICAgIC8qKlxuICAgICAqIEFueSBvdGhlciByZWxldmFudCBncm91cCBkYXRhLCB1c2VkIGZvciB0aGUgc3ViaGVhZGVyXG4gICAgICovXG4gICAgZ3JvdXBEYXRhOiBHO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBzcGxpdCBpbnRvIGdyb3Vwc1xuICAgICAqL1xuICAgIGdyb3VwUmVzdWx0czogU3ViR3JvdXBSZXN1bHQ8UiwgRz5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIGdyb3VwcyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbEdyb3VwQ291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgLypcbiAgICBOZXN0ZWRSZXN1bHRcbiAgICAgIE5lc3RlZEhlYWRlclJvd1xuICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIHN1YnJvd3NcbiAgICAgICAgICBOZXN0ZWRSb3cgLSB3aXRoIG5vIHN1YnJvd3NcbiAgKi9cbiAgZXhwb3J0IHR5cGUgTmVzdGVkSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyBoZWFkZXIgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzOiBOZXN0ZWRSb3c8Uj5bXTtcblxuICAgIC8vIFRoZSB0ZXh0IHRvIHNob3cgbmV4dCB0byB0aGUgdG9nZ2xlYWJsZSBjaGV2cm9uLCBvciBudWxsIGlmIHdlIGRvbid0IHNob3cgdGhlIGhlYWRlclxuICAgIGhlYWRlclRleHQ6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvLyBUaGUgcm93cyB0aGF0IHNob3VsZCBiZSBoaWRkZW4gd2hlbiB0aGUgdG9nZ2xlIG9uIHRoaXMgcm93IGlzIHRvZ2dsZWQuXG4gICAgc3ViUm93cz86IE5lc3RlZFJvdzxSPltdO1xuXG4gICAgLy8gVGhlIHJlbGV2YW50IGRhdGEgdXNlZCB0byBkaXNwbGF5IHRoaXMgcm93LlxuICAgIGRhdGE6IFI7XG4gIH07XG4gIC8qXG4gICAgTmVzdGVkIGhlYWRlciByb3dzIGFyZSB0b2dnbGVhYmxlIGhlYWRlcnMgZm9yIGdyb3VwcyBvZiByb3dzLlxuICAqL1xuICBleHBvcnQgdHlwZSBOZXN0ZWRSZXN1bHQ8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLyoqXG4gICAgICogVGhlIGZ1bGwgcm93IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UsIGFmdGVyIGZpbHRlcnMsIHNlYXJjaCBxdWVyeSwgYW5kXG4gICAgICogcm93IG9yZGVyaW5nIGFyZSBhcHBsaWVkLCBuZXN0ZWQgaW50byBcImhlYWRlcnMgd2l0aCBzdWJyb3dzXCIuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICpcbiAgICAgKiBPbmx5IGNvdW50cyByb3dzIGF0IHRoZSBib3R0b20gbGV2ZWwgb2YgbmVzdGluZy5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICBUaGlzIHR5cGUgYWxzbyBzdXBwb3J0cyBuZXN0ZWQgcm93cyB3aXRob3V0IGhlYWRlciByb3dzLCBzbyB0aGlzIHByb3BlcnR5XG4gICAgICBoZWxwcyB1cyB0ZWxsIHdoZXRoZXIgdG8gc2hvdyB0aGUgaGVhZGVycy5cbiAgICAqL1xuICAgIGhhc0hlYWRlcnM6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU291cmNlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IChcbiAgICBxdWVyeTogUXVlcnk8QywgRj4sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPFIsIEMsIEYsIEc+LFxuICApID0+IFByb21pc2U8UmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz4gfCBOZXN0ZWRSZXN1bHQ8Uj4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gRGlzcGxheSAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLy8gRGlzcGxheSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtblNldHRpbmdzPEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGtleTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIGNlbGxSb3dTcGFuOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBudW1iZXI7XG4gIH07XG5cbiAgLy8gRGlzcGxheSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgRGlzcGxheUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uPiA9XG4gICAgfCB7IHR5cGU6ICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc7IHBheWxvYWQ6IERpc3BsYXk8Qz5bJ2NvbHVtblNldHRpbmdzJ10gfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGZyZWV6ZTogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdmcmVlemVEaXZpZGVyJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgICAgICBuZXdJbmRleDogbnVtYmVyO1xuICAgICAgICBzb3VyY2U/OiAndGFibGVEcmFnJyB8ICdtZW51RHJhZyc7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2RyYWdEcm9wJyB8ICdleWVJY29uJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyZXNldFRvRGVmYXVsdENvbHVtbnMnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gU2VsZWN0aW9uIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbjxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogUlsnaWQnXSB8IG51bGw7XG4gIH0gJiAoXG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJztcbiAgICAgICAgaW5jbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnO1xuICAgICAgICBleGNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICApO1xuXG4gIC8vIFNlbGVjdGlvbiBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQWN0aW9uPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBTZWxlY3Rpb248Uj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdncm91cFNlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGNvbnRpZ3VvdXM6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdwYWdlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYWxsU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2xlYXInO1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZVN0YXRlPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGNvbGxhcHNlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICBjb2xsYXBzZWRIZWFkZXJzOiBTZXQ8c3RyaW5nPjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZUFjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVSb3dDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlSGVhZGVyQ29sbGFwc2UnO1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+IHwgTmVzdGVkUmVzdWx0PFI+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gICAgY29sbGFwc2VTdGF0ZTogQ29sbGFwc2VTdGF0ZTxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9XG4gICAgfCBRdWVyeUFjdGlvbjxDLCBGPlxuICAgIHwgRGlzcGxheUFjdGlvbjxDPlxuICAgIHwgU2VsZWN0aW9uQWN0aW9uPFIsIEc+XG4gICAgfCBDb2xsYXBzZUFjdGlvbjxSPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93cz86IEZ1bGxOZXN0ZWRSb3c8Uj5bXTtcbiAgICBkYXRhOiBSO1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICAgIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcjtcbiAgICBzdWJSb3dzOiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsQ29sdW1uPEMgZXh0ZW5kcyBDb2x1bW4+ID0gQ29sdW1uU2V0dGluZ3M8Qz4gJlxuICAgIENvbHVtbk1ldGFkYXRhICYge1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGxlZnQ6IG51bWJlciB8IG51bGw7XG4gICAgICBhbGlnbm1lbnQ6IENvbHVtbkFsaWdubWVudDtcbiAgICB9O1xuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQ29uZmlndXJhdGlvbiA9IGJvb2xlYW4gfCAnaW5kaXZpZHVhbCc7XG5cbiAgZXhwb3J0IHR5cGUgUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGV4cG9ydCB0eXBlIFZhbGlkUm93U3BhbkdldHRlcjxDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbHVtbjogQyxcbiAgKSA9PiBudW1iZXI7XG5cbiAgZXhwb3J0IHR5cGUgQ3N2Q2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBDIGV4dGVuZHMgQ29sdW1uPiA9IChcbiAgICByb3c6IFIsXG4gICAgY29sdW1uOiBGdWxsQ29sdW1uPEM+LFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2R3JvdXBDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSAoXG4gICAgcm93OiBSLFxuICAgIGdyb3VwOiBHLFxuICApID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgZXhwb3J0IHR5cGUgQ3N2Um93ID0gc3RyaW5nW107XG4gIGV4cG9ydCB0eXBlIENzdiA9IENzdlJvd1tdO1xuICBleHBvcnQgdHlwZSBDc3ZNb2RlID0gJ2Z1bGwnIHwgJ3NlbGVjdGlvbic7XG4gIGV4cG9ydCB0eXBlIENzdk91dHB1dCA9XG4gICAgfCB7IGxvYWRpbmc6IHRydWU7IGRhdGE6IG51bGwgfVxuICAgIHwgeyBsb2FkaW5nOiBmYWxzZTsgZGF0YTogQ3N2IH07XG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uTmFtZU1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBDIHwgc3RyaW5nPjtcblxuICBleHBvcnQgdHlwZSBTZWFyY2hhYmxlQ29sdW1uTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIGJvb2xlYW4+O1xuXG4gIGV4cG9ydCB0eXBlIEZ1bGxTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBDb3JlU3RhdGU8UiwgQywgRiwgRz4gJiB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgcHJldmlvdXM6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VzOiBudW1iZXJbXTtcbiAgICAgICAgbmV4dDogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZUNvdW50OiBudW1iZXI7XG4gICAgICAgIHNob3dDb250cm9sczogYm9vbGVhbjtcbiAgICAgICAgcGFnZVJvd1N0YXJ0OiBudW1iZXI7XG4gICAgICAgIHBhZ2VSb3dFbmQ6IG51bWJlcjtcbiAgICAgIH07XG4gICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICAgIHJlc3VsdDpcbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dzQXNHcm91cDogUm93R3JvdXA8UiwgRz47XG4gICAgICAgICAgaXNHcm91cGVkOiBmYWxzZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgbmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICAgIHJvd3NBcmVHcmF5ZWQ6IGJvb2xlYW47XG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiBib29sZWFuO1xuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGVuYWJsZWRDb3VudDogbnVtYmVyO1xuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6IGJvb2xlYW47XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU/OiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIHJvd3NBcmVHcmF5ZWQ/OiBib29sZWFuO1xuICAgIGN1c3RvbVN1bW1hcnlSb3c/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFwiUmVzdWx0cyBwZXIgcGFnZVwiIGxhYmVsIGFuZCBwYWdlLXNpemUgZHJvcGRvd24gYXJlXG4gICAgICogaGlkZGVuLiBQYWdlIG5hdmlnYXRpb24gYXJyb3dzIGFuZCBwYWdlIG51bWJlcnMgcmVtYWluIHZpc2libGUuXG4gICAgICovXG4gICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhcmVudC1jb250cm9sbGVkIHJvdyBzcGFubmluZy5cbiAgICAgKiBSZXR1cm4gMCB0byBzdXBwcmVzcyB0aGUgY2VsbCwgPj0xIGZvciBhIHJlYWwgcm93c3Bhbi5cbiAgICAgKiBJZiBvbWl0dGVkIG9yIGludmFsaWQsIGRlZmF1bHRzIHRvIDEuXG4gICAgICovXG4gICAgZ2V0Um93U3BhbkZvckNlbGw/OiBSb3dTcGFuR2V0dGVyPEM+O1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IE1hbmFnZXI8UiwgQywgRiwgRz4ge1xuICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCB0YWJsZSBzdGF0ZS5cblxuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz4gPSBuZXcgTWFwPEMsIGJvb2xlYW4+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5zZWFyY2hhYmxlID8/IHRydWUsXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHNlYXJjaGFibGVDb2x1bW5NYXAuZ2V0KGtleSkpXG4gICAgICAgICAgICAubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+ID0gbmV3IE1hcDxDLCBDIHwgc3RyaW5nPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdG9TZW50ZW5jZUNhc2UobWV0YWRhdGEuZGlzcGxheU5hbWUgPz8ga2V5KSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1uU3RhdGUgPVxuICAgICAgb3B0aW9ucz8uZGVmYXVsdENvbHVtblN0YXRlID8/XG4gICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncztcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8e1xuICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICB9PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbjxcbiAgICAgICAgQWN0aW9uPFIsIEMsIEYsIEc+LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgID4oXG4gICAgICAgICh7IHN0YXRlIH0sIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgeyBzdGF0ZTogZGVmYXVsdGVkSW5pdGlhbFN0YXRlLCBlZmZlY3Q6IG51bGwgfSxcbiAgICAgICAgMSxcbiAgICAgICksXG4gICAgICBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25FcnJvcjogZmFsc2UsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNzdkV4cG9ydEFsbG93ZWQgPSAhKFxuICAgICAgb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwgfHwgb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvd1xuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoeyBzdGF0ZTogcyB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihwcm9wczoge1xuICAgIHM6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICBzdGF0ZVJlc3VsdDogR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdID0gc3RhdGVSZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgcm93czogZ3JvdXAuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgPyBvcHRpb25zLnJvd0xpbmsocm93LCBncm91cC5ncm91cERhdGEpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICB9KSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlcikge1xuICAgICAgICBkYXRhWzBdLnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2YgZGF0YVNldC5ncm91cFJlc3VsdHMuZmxhdE1hcChncm91cHMgPT5cbiAgICAgICAgZ3JvdXBzLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGdyb3VwOiBncm91cHMuZ3JvdXBEYXRhLFxuICAgICAgICB9KSksXG4gICAgICApKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJvd0l0ZW0ucm93O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIgJiYgcm93SXRlbS5ncm91cCkge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGdyb3VwQ2VsbEZvcm1hdHRlcihyZWNvcmQsIHJvd0l0ZW0uZ3JvdXApKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucyxcbiAgICAgIHF1ZXJ5OiBkZXJpdmVkRnVsbFN0YXRlUXVlcnkocyksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheSh7XG4gICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgcmVzb2x2ZWRDb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIHNlbGVjdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbihzLCBvcHRpb25zKSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAuLi5zdGF0ZVJlc3VsdCxcbiAgICAgICAgaXNHcm91cGVkOiB0cnVlLFxuICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnLFxuICAgICAgICByb3dHcm91cHMsXG4gICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBOZXN0ZWRSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0YWJsZXMgd2l0aCBuZXN0ZWQgZGF0YS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBuZXN0ZWRSb3cgb2Ygc3RhdGVSZXN1bHQuY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzKSB7XG4gICAgICBjb25zdCBuZXdGdWxsUm93OiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+ID1cbiAgICAgICAgVGFibGVOZXN0aW5nSGVscGVycy5jb252ZXJ0VG9GdWxsTmVzdGVkSGVhZGVyUm93KFxuICAgICAgICAgIG5lc3RlZFJvdyxcbiAgICAgICAgICBzLFxuICAgICAgICAgIG9wdGlvbnM/LnJvd0xpbmssXG4gICAgICAgICk7XG4gICAgICBmdWxsTmVzdGVkSGVhZGVyUm93cy5wdXNoKG5ld0Z1bGxSb3cpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0Jyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGVSZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzUmVndWxhclJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIG5vbi1uZXN0ZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBhIG5lc3RlZCB3aXRoIGhlYWRlciByZXN1bHQgdGFibGUnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgY29uc3QgYWxsUm93czogUltdID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tUmVzdWx0KGRhdGFTZXQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRSb3cgb2YgYWxsUm93cykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgY3VycmVudFJvdy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKGN1cnJlbnRSb3csIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJyxcbiAgICAgICAgbmVzdGVkSGVhZGVyUm93czogZnVsbE5lc3RlZEhlYWRlclJvd3MsXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJvd3MgPSBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgLi4ucm93LFxuICAgICAgcm93TGluazogb3B0aW9ucz8ucm93TGluayA/IG9wdGlvbnMucm93TGluayhyb3cpIDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNlbGxSb3dTcGFuQ2FjaGUgPSBUYWJsZURpc3BsYXlIZWxwZXJzLm1lbW9pemVkQ2VsbFJvd1NwYW4oXG4gICAgICBzLFxuICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgIGNlbGxSb3dTcGFuQ2FjaGU/LmdldChjb2x1bW4pPy5bcm93SW5kZXhdID8/IDE7XG4gICAgY29uc3QgaGFzQW55Um93U3BhbnMgPSBjZWxsUm93U3BhbkNhY2hlXG4gICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgc3BhbnMuc29tZShzcGFuID0+IHNwYW4gPiAxKSxcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uS2V5cyA9IHJlc29sdmVkQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGtleSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDU1YgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByb3cgc3Bhbm5pbmcgb3IgYSBjdXN0b20gc3VtbWFyeSByb3cgaXMgZW5hYmxlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIG5vbi1ncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgbmVzdGVkIENTViBkYXRhIGZvciBub24tbmVzdGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhU2V0LmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzLCB7XG4gICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheShcbiAgICAgICAge1xuICAgICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjZWxsUm93U3BhbjogY2VsbFJvd1NwYW4sXG4gICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgaSA9IHJlc29sdmVkQ29sdW1uS2V5cy5maW5kSW5kZXgoa2V5ID0+IGtleSA9PT0gY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID09PSByZXNvbHZlZENvbHVtbktleXMubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCByaWdodENvbEtleSA9IHJlc29sdmVkQ29sdW1uS2V5c1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBzcGFuT25SaWdodCA9IGNlbGxSb3dTcGFuKHJvd0luZGV4LCByaWdodENvbEtleSk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhbk9uUmlnaHQgPiAxIHx8IHNwYW5PblJpZ2h0ID09PSAwO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnLFxuICAgICAgICByb3dzLFxuICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdXBEYXRhOiB7IGtleTogJycgfSBhcyBHLFxuICAgICAgICB9LFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVRdWVyeTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcGFydGlhbFF1ZXJ5OiBQYXJ0aWFsPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LFxuICAgICAgcGFnaW5hdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb24oY29yZVN0YXRlKSxcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBUYWJsZVNlYXJjaEhlbHBlcnMuZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgJ25vbmUnLFxuICAgICAgKSxcbiAgICAgIC4uLnBhcnRpYWxRdWVyeSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J11bJ3BhZ2luYXRpb24nXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgcHJldmlvdXM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UHJldmlvdXNQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlczogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlcyhjb3JlU3RhdGUpLFxuICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShjb3JlU3RhdGUpLFxuICAgICAgcGFnZUNvdW50OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChjb3JlU3RhdGUpLFxuICAgICAgc2hvd0NvbnRyb2xzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFNob3dQYWdpbmF0aW9uQ29udHJvbHMoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dFbmQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZVJvd0VuZChjb3JlU3RhdGUpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICAgIH0sXG4gICAgcGFydGlhbERpc3BsYXk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10+ID0ge30sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnZGlzcGxheSddIHtcbiAgICBjb25zdCB7XG4gICAgICBjb3JlU3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLmdldEFsbENvbHVtbnMoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IFRhYmxlRGlzcGxheUhlbHBlcnMuZ2V0WmVyb1N0YXRlTWVzc2FnZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlSGlkZWFibGUsXG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IG9wdGlvbnM/LmNvbHVtbnNBcmVSZW9yZGVyYWJsZSA/PyB0cnVlLFxuICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogISFvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93LFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiAhIW9wdGlvbnM/LmhpZGVQYWdlU2l6ZVNlbGVjdG9yLFxuICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAuLi5wYXJ0aWFsRGlzcGxheSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3NlbGVjdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnNlbGVjdGlvbixcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0FsbFNlbGVjdGVkKGNvcmVTdGF0ZSksXG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6XG4gICAgICAgIFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0N1cnJlbnRQYWdlU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIHNlbGVjdGVkQ291bnQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZWxlY3RlZENvdW50KGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBtb3N0IHRhYmxlcyB1c2UgYW5cbiAgICogaW4tbWVtb3J5IHNvdXJjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgICAgICAgIG1hdGNoZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIG9yZGVyZWQgPSBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlck5lc3RlZDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE5lc3RlZEhlYWRlclJvdzxSPltdPiB8IE5lc3RlZEhlYWRlclJvdzxSPltdLFxuICAgIGNvbHVtbnM6IE1hcDxDLCBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8UiwgQywgRj4sXG4gICk6IE1hbmFnZXI8UiwgQywgRj4ge1xuICAgIGxldCBkYXRhOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICBsZXQgcm93c0Zyb21EYXRhOiBSW107XG4gICAgLy8gVGhlIGZ1c2Ugd2lsbCBzZWFyY2ggdGhlIGluZGl2aWR1YWwgcm93c1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8vRm9yIGluTWVtb3J5TWFuYWdlcnMgdGhhdCBkbyBub3QgdXRpbGl6ZSBzZWFyY2hDb2x1bW5zLFxuICAgICAgLy93ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgZnVzZU9wdGlvbnNcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAvL1ByZXZlbnQgc2VhcmNoaW5nIG9uIGNvbHVtbnMgdGhhdCBhcmUgaW4gZnVzZSBvcHRpb25zIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlYXJjaC5cbiAgICAgICAgY29uc3Qgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzID0gb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXNcbiAgICAgICAgICA/IEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLnNlYXJjaGFibGUgPT0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9yZGVyS2V5Py50b1N0cmluZygpIHx8IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmdXNlT3B0aW9ucyA9XG4gICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMgJiYgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBrZXlzOiBvcHRpb25zPy5mdXNlT3B0aW9ucz8ua2V5cz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgayA9PiAhbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzLmluY2x1ZGVzKGsudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcHRpb25zPy5mdXNlT3B0aW9ucztcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCBmdXNlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyBTZWFyY2gsIHRoZW4gZmlsdGVyLCB0aGVuIHNvcnRcbiAgICAgIGxldCBkaWRSZXN0cmljdERpc3BsYXllZFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgbGV0IHJvd3NNYXRjaGluZ1NlYXJjaDogUltdID0gcm93c0Zyb21EYXRhO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICByb3dzTWF0Y2hpbmdTZWFyY2ggPSBmdXNlXG4gICAgICAgICAgLnNlYXJjaChxdWVyeS5zZWFyY2gpXG4gICAgICAgICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0pO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdGaWx0ZXJzOiBSW10gPSByb3dzTWF0Y2hpbmdTZWFyY2g7XG4gICAgICBjb25zdCBmaWx0ZXJUb0FwcGx5ID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgaWYgKGZpbHRlclRvQXBwbHkpIHtcbiAgICAgICAgcm93c01hdGNoaW5nRmlsdGVycyA9IHJvd3NNYXRjaGluZ1NlYXJjaC5maWx0ZXIocm93ID0+XG4gICAgICAgICAgZmlsdGVyVG9BcHBseShxdWVyeS5maWx0ZXJzLCByb3cpLFxuICAgICAgICApO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZFJvd3NUb0Rpc3BsYXk6IE5lc3RlZEhlYWRlclJvdzxSPltdID0gZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzXG4gICAgICAgID8gVGFibGVOZXN0aW5nSGVscGVycy5maW5kTmVzdGVkUm93c1dpdGhIZWFkZXJzVG9LZWVwKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBib3R0b21MZXZlbFJvd0NvdW50OiBudW1iZXIgPVxuICAgICAgICBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvdW50Qm90dG9tTGV2ZWxOZXN0ZWRIZWFkZXJSb3dzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzb3J0ZWROZXN0ZWRSb3dzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAgIGlmIChoYXNFeHBsaWNpdFNvcnQgJiYgcXVlcnkub3JkZXIpIHtcbiAgICAgICAgLy8gRXhwbGljaXQgc29ydCBvdmVycmlkZSBoYXMgcHJpb3JpdHkgb3ZlciBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNvcnRMb3dMZXZlbE5lc3RlZFJvd3NXaXRoSGVhZGVycyhcbiAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgIG9yZGVyQ29sdW1uLFxuICAgICAgICAgIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkuc2VhcmNoKSB7XG4gICAgICAgIC8vIFNvcnQgb24gdGhlIEZ1c2UgcmVsZXZhbmNlIG9yZGVyXG4gICAgICAgIGNvbnN0IGlkVG9TZWFyY2hJbmRleE1hcDogTWFwPHN0cmluZyB8IG51bWJlciwgbnVtYmVyPiA9XG4gICAgICAgICAgVGFibGVPcmRlckhlbHBlcnMuY3JlYXRlSWRUb1NlYXJjaEluZGV4TWFwKHJvd3NNYXRjaGluZ1NlYXJjaCk7XG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPVxuICAgICAgICAgIFRhYmxlT3JkZXJIZWxwZXJzLnNvcnROZXN0ZWRSb3dzV2l0aEhlYWRlcnNCYXNlZE9uU2VhcmNoTWF0Y2hlcyhcbiAgICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgICBpZFRvU2VhcmNoSW5kZXhNYXAsXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkub3JkZXIgPT0gbnVsbCAmJiBkZWZhdWx0U29ydFNwZWMpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IHNvcnQsIGlmIHdlIGhhdmUgb25lXG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBUYWJsZU9yZGVySGVscGVycy5zb3J0TG93TGV2ZWxOZXN0ZWRSb3dzV2l0aEhlYWRlcnMoXG4gICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMua2V5LFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBzb3J0IGlmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24gdG8gdXNlIHRvIHNvcnRcbiAgICAgICAgc29ydGVkTmVzdGVkUm93cyA9IG5lc3RlZFJvd3NUb0Rpc3BsYXk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhZ2luYXRlZEhlYWRlclJvd3M6IE5lc3RlZEhlYWRlclJvdzxSPltdID1cbiAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5wYWdpbmF0ZU5lc3RlZEhlYWRlclJvd3MoXG4gICAgICAgICAgc29ydGVkTmVzdGVkUm93cyxcbiAgICAgICAgICBxdWVyeS5wYWdpbmF0aW9uLnBhZ2UsXG4gICAgICAgICAgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgICAgKTtcbiAgICAgIGNvbnN0IGhhc0hlYWRlcnM6IGJvb2xlYW4gPSBwYWdpbmF0ZWRIZWFkZXJSb3dzLnNvbWUoXG4gICAgICAgIGhlYWRlciA9PiBoZWFkZXIuaGVhZGVyVGV4dCAhPSBudWxsLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzOiBwYWdpbmF0ZWRIZWFkZXJSb3dzLFxuICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGJvdHRvbUxldmVsUm93Q291bnQsXG4gICAgICAgIGhhc0hlYWRlcnM6IGhhc0hlYWRlcnMsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5NZXRhZGF0YTogTWFwPEMsIENvbHVtbk1ldGFkYXRhPiA9XG4gICAgICBUYWJsZUNvbHVtbkhlbHBlcnMuY3JlYXRlQ29sdW1uTWV0YWRhdGFNYXAoY29sdW1ucyk7XG5cbiAgICAvKlxuICAgICAgV2hlbiBhIGRlZmF1bHRTb3J0IGlzIHNwZWNpZmllZCwgc2VlZCB0aGUgaW5pdGlhbCBxdWVyeS5vcmRlciBzbyB0aGVcbiAgICAgIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICAgKi9cbiAgICBvcHRpb25zID0gVGFibGVPcmRlckhlbHBlcnMuc2VlZERlZmF1bHRTb3J0T3B0aW9uKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBjb2x1bW5NZXRhZGF0YSwgcGx1cmFsRW50aXR5TmFtZSwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGtlZXBzIHRoZSBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlcyBhcyBzdGFibGUgYXMgcG9zc2libGUsIHdoaWNoXG4gKiBoZWxwcyBBbmd1bGFyIHJlZHVjZSB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLiBGb3Igbm93LCBzaW1wbGUgaXNFcXVhbCgpXG4gKiBjaGVja3MgYXQgdGhlIHN0YXRlJ3MgdG9wLWxldmVsIGtleXMgYXJlIHN1ZmZpY2llbnQgdG8gZHJhbWF0aWNhbGx5IHNwZWVkIHVwXG4gKiByZW5kZXJpbmcsIGJ1dCBpZiBvdGhlciBwZXJmb3JtYW5jZSBpc3N1ZXMgYXJpc2UsIHdlIGNvdWxkIGltcGxlbWVudCBtb3JlXG4gKiBncmFudWxhciBjaGVja3Mvc3VyZ2ljYWwgdXBkYXRlcyBhcyBuZWVkZWQgKHRoZSBzdGF0ZS5yZXN1bHQgYmVpbmcgdGhlIG1vc3RcbiAqIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIG1hbnkgdHlwZXMgb2Ygc3RhdGUgdXBkYXRlcyBhZmZlY3QgcGFydHMgb2YgdGhlXG4gKiByZXN1bHQgcm93cykuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgdGFyZ2V0OiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuKTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5xdWVyeSwgc291cmNlLnF1ZXJ5KSkge1xuICAgIHRhcmdldC5xdWVyeSA9IHNvdXJjZS5xdWVyeTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmxvYWQsIHNvdXJjZS5sb2FkKSkge1xuICAgIHRhcmdldC5sb2FkID0gc291cmNlLmxvYWQ7XG4gIH1cblxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZEYXRhLCBzb3VyY2UucmVzdWx0LmNzdkRhdGEpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZEYXRhID0gc291cmNlLnJlc3VsdC5jc3ZEYXRhO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lLCBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUgPSBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lO1xuICB9XG4gIGlmIChcbiAgICAhaXNFcXVhbChcbiAgICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKVxuICApIHtcbiAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9IHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LCBzb3VyY2UucmVzdWx0KSkge1xuICAgIHRhcmdldC5yZXN1bHQgPSBzb3VyY2UucmVzdWx0O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuZGlzcGxheSwgc291cmNlLmRpc3BsYXkpKSB7XG4gICAgdGFyZ2V0LmRpc3BsYXkgPSBzb3VyY2UuZGlzcGxheTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnNlbGVjdGlvbiwgc291cmNlLnNlbGVjdGlvbikpIHtcbiAgICB0YXJnZXQuc2VsZWN0aW9uID0gc291cmNlLnNlbGVjdGlvbjtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5hc3luYyBmdW5jdGlvbiogcmVmcmVzaFJlc3VsdFdpdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgbW9zdFJlY2VudEFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHlpZWxkIHtcbiAgICBzdGF0ZToge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVmZmVjdDogbnVsbCxcbiAgfTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzb3VyY2Uoc3RhdGUucXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pO1xuICAgIGlmIChUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmlzUGFnZU91dE9mQm91bmRzKHN0YXRlLCByZXN1bHQpKSB7XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPSAwO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICByZXN1bHQsXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB5aWVsZCB7XG4gICAgICBzdGF0ZToge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVmZmVjdDogbnVsbCxcbiAgICB9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVPcmRlckhlbHBlcnMudG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQcmV2aW91c1BhZ2Uoc3RhdGUpID8/IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25leHRQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOlxuICAgICAgICAgICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlQ291bnQoc3RhdGUpIC0gMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IGFjdGlvbi5wYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2l6ZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBhY3Rpb24uc2l6ZSxcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZmlsdGVyc0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBmaWx0ZXJzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGNvbGxhcHNlZFJvd3M6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJBZGQnOlxuICAgICAgLy8gUGFyZW50IGNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3Igc3Vic2NyaWJpbmcgYW5kIGFkZGluZyB0aGUgZmlsdGVyXG4gICAgICB5aWVsZCB7IHN0YXRlOiB7IC4uLnN0YXRlIH0sIGVmZmVjdDogbnVsbCB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uU2V0dGluZ3NDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nczogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZG8gbm90IG91dHB1dCBjaGFuZ2VzIHdoZW4gdHJpZ2dlcmVkIGZyb20gdGhlIG91dHNpZGUgd29ybGRcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtblBpbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uUGluKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5waW5uZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uc0ZyZWV6ZVVwVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbk9yZGVyKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24ucHJldmlvdXNJbmRleCxcbiAgICAgICAgICBhY3Rpb24ubmV3SW5kZXgsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uTW92ZVRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5tb3ZlQ29sdW1uVG8oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBvc2l0aW9uLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuZW5hYmxlQWxsQ29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLmNoYW5nZUNvbHVtbldpZHRoKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wcmVmZXJyZWRXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyZXNldFRvRGVmYXVsdENvbHVtbnMnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLnJlc2V0VG9EZWZhdWx0Q29sdW1ucyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgZGVmYXVsdENvbHVtblN0YXRlLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgc2VsZWN0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgfSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jvd1NlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVQYWdlU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYWxsU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZUFsbFNlbGVjdGVkKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlbGVjdGlvbkNsZWFyJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5jbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlR3JvdXBTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLnBheWxvYWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgZ3JvdXBzUGVyUGFnZTogYWN0aW9uLmdyb3Vwc1BlclBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkuZ3JvdXBpbmcsXG4gICAgICAgICAgICAgIGNvdW50UGVyR3JvdXA6IGFjdGlvbi5jb3VudFBlckdyb3VwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWV3TW9yZUtleUNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgdmlld01vcmVLZXk6IGFjdGlvbi52aWV3TW9yZUtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucyc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIFRhYmxlU2VhcmNoSGVscGVycy50b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlUm93Q29sbGFwc2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2xsYXBzZUhlbHBlcnMudG9nZ2xlUm93Q29sbGFwc2Uoc3RhdGUsIGFjdGlvbi5pZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVIZWFkZXJDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVIZWFkZXJDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG4iXX0=
1079
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQy9DLE9BQU8sRUFFTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixHQUFHLEVBQ0gsU0FBUyxFQUVULGFBQWEsRUFDYixJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUUxRSxNQUFNLEtBQVcsUUFBUSxDQXVvRHhCO0FBdm9ERCxXQUFpQixRQUFRO0lBMkNWLGtCQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQVUsQ0FBQztJQWdVckQsbURBQW1EO0lBQ3RDLHdCQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLHdCQUFlLEdBQUc7UUFDN0IsVUFBVTtRQUNWLFVBQVU7UUFDVixNQUFNO1FBQ04sTUFBTTtRQUNOLFVBQVU7UUFDVixRQUFRO1FBQ1IsV0FBVztLQUNILENBQUM7SUFrTlgsU0FBZ0IsYUFBYSxDQU0zQixNQUEwQixFQUMxQixPQUErQixFQUMvQixnQkFBd0IsRUFDeEIsT0FBb0M7UUFFcEMsa0NBQWtDO1FBRWxDLE1BQU0sbUJBQW1CLEdBQTJCLElBQUksR0FBRyxDQUN6RCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxHQUFHO1lBQ0gsUUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJO1NBQzVCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQTBCO1lBQzFDLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixhQUFhLEVBQUUsSUFBSSxHQUFHLENBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO3FCQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzNDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQzNCO2dCQUNELFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsQ0FBQztvQkFDUCxRQUFRLEVBQUUsRUFBRTtpQkFDYjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLGFBQWEsRUFBRSxDQUFDO29CQUNoQixhQUFhLEVBQUUsRUFBRTtpQkFDbEI7Z0JBQ0QsT0FBTyxFQUFFLElBQUk7YUFDZDtZQUNELElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtZQUNyQyxNQUFNLEVBQUU7Z0JBQ04sZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLHFCQUFxQixFQUFFLENBQUM7YUFDekI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLFdBQVcsRUFBRSxDQUFDLEVBQVUsRUFBRSxPQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDM0M7WUFDRCxTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO2FBQ3BCO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFNBQVMsRUFBRSxVQUFVO2dCQUNyQixhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUU7Z0JBQ3hCLGdCQUFnQixFQUFFLElBQUksR0FBRyxFQUFFO2FBQzVCO1NBQ0YsQ0FBQztRQUNGLE1BQU0scUJBQXFCLEdBQTBCLFlBQVksQ0FDL0QsRUFBRSxFQUNGLE9BQU8sRUFBRSxZQUFZLEVBQ3JCLFlBQVksQ0FDYixDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQXFCLElBQUksR0FBRyxDQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxHQUFHO1lBQ0gsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDO1NBQzVDLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FDdEIsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixxQkFBcUIsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBRS9DLHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBZ0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FHVixPQUFPLENBQUMsSUFBSSxDQUNmLFNBQVMsQ0FPUCxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDcEIsSUFBSSxDQUNGLE1BQU0sQ0FDSixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixDQUNuQixDQUNGLEVBQ0gsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUM5QyxDQUFDLENBQ0YsRUFDRCxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksRUFBRSxLQUFLO1lBQ25CLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLG1CQUFtQixFQUFFLEtBQUs7U0FDM0IsQ0FBQyxDQUNILENBQUM7UUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FDeEIsT0FBTyxFQUFFLGlCQUFpQixJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsQ0FDeEQsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCxNQUFNLEtBQUssR0FBdUMsV0FBVyxDQUMzRCxTQUFTLENBQUMsSUFBSSxDQUNaLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUF5QixFQUFFO1lBQzFDLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FDdkQsQ0FBQyxFQUNELE9BQU8sRUFDUCxhQUFhLEVBQ2IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQzFCLENBQUM7WUFFRixJQUFJLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzlDLE9BQU8sOEJBQThCLENBQUM7b0JBQ3BDLENBQUM7b0JBQ0QsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO29CQUNyQixNQUFNO29CQUNOLE9BQU87b0JBQ1AsZ0JBQWdCO29CQUNoQixhQUFhO29CQUNiLGVBQWU7b0JBQ2YsbUJBQW1CO29CQUNuQixnQkFBZ0I7b0JBQ2hCLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFBSSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN0RCxPQUFPLCtCQUErQixDQUFDO29CQUNyQyxDQUFDO29CQUNELFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTTtvQkFDckIsTUFBTTtvQkFDTixPQUFPO29CQUNQLGdCQUFnQjtvQkFDaEIsYUFBYTtvQkFDYixlQUFlO29CQUNmLG1CQUFtQjtvQkFDbkIsZ0JBQWdCO29CQUNoQixPQUFPO2lCQUNSLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLE9BQU8sZ0NBQWdDLENBQUM7b0JBQ3RDLENBQUM7b0JBQ0QsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO29CQUNyQixNQUFNO29CQUNOLE9BQU87b0JBQ1AsZ0JBQWdCO29CQUNoQixhQUFhO29CQUNiLGVBQWU7b0JBQ2YsbUJBQW1CO29CQUNuQixnQkFBZ0I7b0JBQ2hCLE9BQU87aUJBQ1IsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQzFELEVBQ0Q7WUFDRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FDRixDQUFDO1FBQ0YsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWhCLE1BQU0sT0FBTyxHQUF3QixXQUFXLENBQzlDLFNBQVMsQ0FBQyxJQUFJLENBQ1osTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxFQUN2QyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFnQixDQUFDLENBQ3RDLEVBQ0Q7WUFDRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLGlCQUFpQixFQUFFLEtBQUs7U0FDekIsQ0FDRixDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWxCLCtCQUErQjtRQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQWhNZSxzQkFBYSxnQkFnTTVCLENBQUE7SUFFRCxTQUFTLDhCQUE4QixDQUtyQyxLQVdEO1FBQ0MsTUFBTSxFQUNKLENBQUMsRUFDRCxXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQztRQUNWLElBQUksT0FBTyxFQUFFLGlCQUFpQixFQUFFO1lBQzlCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLGtFQUFrRSxDQUNuRSxDQUFDO1NBQ0g7UUFDRCxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUM3QixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDVixxRUFBcUUsQ0FDdEUsQ0FBQztTQUNIO1FBRUQsTUFBTSxTQUFTLEdBQXFCLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RSxJQUFJLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN0QyxHQUFHLEdBQUc7Z0JBQ04sT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPO29CQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDLElBQUk7Z0JBQ1IsUUFBUSxFQUFFLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsV0FBVyxFQUFFLEtBQUs7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxFQUFFLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQ3pELHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUI7WUFDbEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUosS0FBSyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBZ0IsTUFBTTtZQUM1QyxNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7WUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLEVBQUUscUJBQXFCLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWE7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztZQUN6RSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQzFCO2dCQUNFLEdBQUcsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1YsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxDQUFDO29CQUNQLFFBQVEsRUFBRSxXQUFXLENBQUMscUJBQXFCO2lCQUM1QzthQUNGLEVBQ0QsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQ2pCLENBQUM7WUFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDcEU7WUFFRCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQ25ELENBQUMsRUFDRCxPQUFPLEVBQ1AsYUFBYSxFQUNiLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUN6QixDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2RSxJQUFJLGtCQUFrQixFQUFFO2dCQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ2xCO1lBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUMxRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLEdBQUc7Z0JBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2FBQ3hCLENBQUMsQ0FBQyxDQUNKLEVBQUU7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDM0IsSUFDRSxJQUFJLEtBQUssV0FBVztvQkFDcEIsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBRWxELFNBQVM7Z0JBQ1gsTUFBTSxHQUFHLEdBQVcsRUFBRSxDQUFDO2dCQUN2QixLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRTtvQkFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsSUFBSSxrQkFBa0IsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO29CQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUMzRDtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQztnQkFDL0IsU0FBUyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGdCQUFnQixFQUFFLGdCQUFnQjtnQkFDbEMsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLGVBQWUsRUFBRSxlQUFlO2dCQUNoQyxtQkFBbUIsRUFBRSxtQkFBbUI7Z0JBQ3hDLGdCQUFnQixFQUFFLGdCQUFnQjtnQkFDbEMsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQztZQUNGLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQ2hELE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsU0FBUztnQkFDVCxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzVDLE9BQU87Z0JBQ1AsV0FBVyxFQUFFLGtCQUFrQixDQUFDLGNBQWMsQ0FDNUMsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FDUjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLCtCQUErQixDQUt0QyxLQVdEO1FBQ0MsTUFBTSxFQUNKLENBQUMsRUFDRCxXQUFXLEVBQ1gsTUFBTSxFQUNOLE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLE9BQU8sR0FDUixHQUFHLEtBQUssQ0FBQztRQUVWLElBQUksT0FBTyxFQUFFLGlCQUFpQixFQUFFO1lBQzlCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLDJFQUEyRSxDQUM1RSxDQUFDO1NBQ0g7UUFDRCxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRTtZQUM3QixzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FDViw4RUFBOEUsQ0FDL0UsQ0FBQztTQUNIO1FBRUQsTUFBTSxvQkFBb0IsR0FBNkIsRUFBRSxDQUFDO1FBQzFELEtBQUssTUFBTSxTQUFTLElBQUksV0FBVyxDQUFDLHdCQUF3QixFQUFFO1lBQzVELE1BQU0sVUFBVSxHQUNkLG1CQUFtQixDQUFDLDRCQUE0QixDQUM5QyxTQUFTLEVBQ1QsQ0FBQyxFQUNELE9BQU8sRUFBRSxPQUFPLENBQ2pCLENBQUM7WUFDSixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkM7UUFFRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTTtZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUZBQW1GLENBQ3BGLENBQUM7YUFDSDtZQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7YUFDeEU7WUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxNQUFNLENBQzFCO2dCQUNFLEdBQUcsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1YsVUFBVSxFQUFFO29CQUNWLElBQUksRUFBRSxDQUFDO29CQUNQLFFBQVEsRUFBRSxXQUFXLENBQUMscUJBQXFCO2lCQUM1QzthQUNGLEVBQ0QsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQ2pCLENBQUM7WUFFRixJQUFJLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDYixvRUFBb0UsQ0FDckUsQ0FBQzthQUNIO1lBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7YUFDSDtZQUVELE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLGNBQWMsQ0FDbkQsQ0FBQyxFQUNELE9BQU8sRUFDUCxhQUFhLEVBQ2IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQ3pCLENBQUM7WUFDRixNQUFNLElBQUksR0FBUSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXZFLE1BQU0sT0FBTyxHQUFRLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXRFLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxFQUFFO2dCQUNoQyxJQUNFLElBQUksS0FBSyxXQUFXO29CQUNwQixDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN0RDtvQkFDQSxPQUFPO2lCQUNSO2dCQUVELE1BQU0sR0FBRyxHQUFXLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUU7b0JBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxhQUFhLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQ25EO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEI7WUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsQ0FBQztZQUNKLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxFQUFFLHVCQUF1QixDQUFDO2dCQUMvQixTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO2dCQUNsQyxhQUFhLEVBQUUsYUFBYTtnQkFDNUIsZUFBZSxFQUFFLGVBQWU7Z0JBQ2hDLG1CQUFtQixFQUFFLG1CQUFtQjtnQkFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO2dCQUNsQyxPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDO1lBQ0YsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7WUFDaEQsTUFBTSxFQUFFO2dCQUNOLEdBQUcsV0FBVztnQkFDZCxJQUFJLEVBQUUsRUFBRTtnQkFDUixTQUFTLEVBQUUsS0FBSztnQkFDaEIsVUFBVSxFQUFFLGFBQWE7Z0JBQ3pCLGdCQUFnQixFQUFFLG9CQUFvQjtnQkFDdEMsT0FBTztnQkFDUCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQUM1QyxnQkFBZ0IsRUFDaEIsT0FBTyxDQUNSO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsZ0NBQWdDLENBS3ZDLEtBV0Q7UUFDQyxNQUFNLEVBQ0osQ0FBQyxFQUNELFdBQVcsRUFDWCxNQUFNLEVBQ04sT0FBTyxFQUNQLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsT0FBTyxHQUNSLEdBQUcsS0FBSyxDQUFDO1FBQ1YsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELEdBQUcsR0FBRztZQUNOLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3ZELFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLG1CQUFtQixDQUM5RCxDQUFDLEVBQ0QsZUFBZSxFQUNmLE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQTBCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQzlELGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0I7WUFDckMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUM3QjtZQUNILENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFVixNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTTtZQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUZBQW1GLENBQ3BGLENBQUM7YUFDSDtZQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQztZQUNoRCxJQUFJLENBQUMsYUFBYTtnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FDMUI7Z0JBQ0UsR0FBRyxDQUFDLENBQUMsS0FBSztnQkFDVixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLENBQUM7b0JBQ1AsUUFBUSxFQUFFLFdBQVcsQ0FBQyxxQkFBcUI7aUJBQzVDO2FBQ0YsRUFDRCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FDakIsQ0FBQztZQUVGLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7YUFDcEU7WUFDRCxJQUFJLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ2xFO1lBRUQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxDQUNuRCxDQUFDLEVBQ0QsT0FBTyxFQUNQLGFBQWEsRUFDYixDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FDekIsQ0FBQztZQUNGLE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFdkUsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUM1QyxJQUNFLElBQUksS0FBSyxXQUFXO29CQUNwQixDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFFbEQsU0FBUztnQkFDWCxNQUFNLEdBQUcsR0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxFQUFFO29CQUNoQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUMvQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzthQUM3QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLHVCQUF1QixDQUM5QjtnQkFDRSxTQUFTLEVBQUUsQ0FBQztnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO2dCQUNsQyxhQUFhLEVBQUUsYUFBYTtnQkFDNUIsZUFBZSxFQUFFLGVBQWU7Z0JBQ2hDLG1CQUFtQixFQUFFLG1CQUFtQjtnQkFDeEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO2dCQUNsQyxPQUFPLEVBQUUsT0FBTzthQUNqQixFQUNEO2dCQUNFLE9BQU8sRUFBRSxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3BDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDMUQ7Z0JBQ0QsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLGdCQUFnQixFQUFFLENBQUMsUUFBZ0IsRUFBRSxNQUFTLEVBQVcsRUFBRTtvQkFDekQsTUFBTSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDO3dCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUUvRCxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO2FBQ0YsQ0FDRjtZQUNELFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQ2hELE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFVBQVUsRUFBRSxhQUFhO2dCQUN6QixJQUFJO2dCQUNKLFdBQVcsRUFBRTtvQkFDWCxJQUFJO29CQUNKLFFBQVEsRUFBRSxLQUFLO29CQUNmLHFCQUFxQixFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNsQyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFPO2lCQUM1QjtnQkFDRCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQUM1QyxnQkFBZ0IsRUFDaEIsT0FBTyxDQUNSO2dCQUNELE9BQU87YUFDUjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxxQkFBcUIsQ0FNNUIsU0FBZ0MsRUFDaEMsZUFBd0QsRUFBRTtRQUUxRCxPQUFPO1lBQ0wsR0FBRyxTQUFTLENBQUMsS0FBSztZQUNsQixVQUFVLEVBQUUsMEJBQTBCLENBQUMsU0FBUyxDQUFDO1lBQ2pELHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLDZCQUE2QixDQUN2RSxTQUFTLEVBQ1QsTUFBTSxDQUNQO1lBQ0QsR0FBRyxZQUFZO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUywwQkFBMEIsQ0FNakMsU0FBZ0M7UUFFaEMsT0FBTztZQUNMLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVO1lBQzdCLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzNELEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQ2pELElBQUksRUFBRSxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1lBQ25ELFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3pELFlBQVksRUFBRSxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUM7WUFDekUsWUFBWSxFQUFFLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDL0QsVUFBVSxFQUFFLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLHVCQUF1QixDQU05QixLQVNDLEVBQ0QsaUJBQTRELEVBQUU7UUFFOUQsTUFBTSxFQUNKLFNBQVMsRUFDVCxPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixPQUFPLEdBQ1IsR0FBRyxLQUFLLENBQUM7UUFFVixPQUFPO1lBQ0wsR0FBRyxTQUFTLENBQUMsT0FBTztZQUNwQixPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxDQUMxQyxTQUFTLEVBQ1QsT0FBTyxFQUNQLGFBQWEsQ0FDZDtZQUNELGFBQWEsRUFBRSxhQUFhO1lBQzVCLG1CQUFtQixFQUFFLG1CQUFtQjtZQUN4QyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FDdkQsU0FBUyxFQUNULGdCQUFnQixDQUNqQjtZQUNELG1CQUFtQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CO1lBQ25ELGtCQUFrQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCO1lBQ2pELHFCQUFxQixFQUFFLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxJQUFJO1lBQzdELGFBQWEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLGFBQWE7WUFDdkMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDN0MsZ0JBQWdCLEVBQUUsZ0JBQWdCO1lBQ2xDLFlBQVksRUFBRSxlQUFlLENBQUMsTUFBTTtZQUNwQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLG9CQUFvQjtZQUNyRCxXQUFXLEVBQUUsQ0FBQyxFQUFVLEVBQUUsT0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7WUFDN0IsR0FBRyxjQUFjO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyx5QkFBeUIsQ0FNaEMsU0FBZ0MsRUFDaEMsT0FBb0M7UUFFcEMsT0FBTztZQUNMLEdBQUcsU0FBUyxDQUFDLFNBQVM7WUFDdEIsY0FBYyxFQUFFLE9BQU8sRUFBRSxjQUFjLElBQUksS0FBSztZQUNoRCxhQUFhLEVBQUUscUJBQXFCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUM3RCxxQkFBcUIsRUFDbkIscUJBQXFCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDO1lBQ3hELGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1NBQzlELENBQUM7SUFDSixDQUFDO0lBNkJEOzs7O09BSUc7SUFDVSxnQ0FBdUIsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQVUsQ0FBQztJQVkxRSxTQUFnQixxQkFBcUIsQ0FLbkMsWUFBc0MsRUFDdEMsT0FBMEMsRUFDMUMsZ0JBQXdCLEVBQ3hCLE9BQXlDO1FBRXpDLElBQUksSUFBUyxDQUFDO1FBQ2QsSUFBSSxJQUFhLENBQUM7UUFFbEIsTUFBTSxNQUFNLEdBQW9CLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtZQUNoRSx5REFBeUQ7WUFDekQsK0NBQStDO1lBQy9DLElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDcEMsb0ZBQW9GO2dCQUNwRixNQUFNLHdCQUF3QixHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSTtvQkFDekQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO3dCQUN4QixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO29CQUNwQyxDQUFDLENBQUM7eUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTt3QkFDckIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDO29CQUNOLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2QsTUFBTSxXQUFXLEdBQ2YsT0FBTyxFQUFFLFdBQVcsSUFBSSx3QkFBd0I7b0JBQzlDLENBQUMsQ0FBQzt3QkFDRSxHQUFHLE9BQU8sRUFBRSxXQUFXO3dCQUN2QixJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUN0RDtxQkFDRjtvQkFDSCxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztnQkFDM0IsSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7Z0JBQzVCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDcEM7WUFDRCxJQUNFLGdCQUFnQixDQUFDLElBQUksS0FBSyxxQkFBcUI7Z0JBQy9DLGdCQUFnQixDQUFDLElBQUksS0FBSyx3QkFBd0IsRUFDbEQ7Z0JBQ0EsSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7Z0JBQzVCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3BCLEdBQUcsT0FBTyxFQUFFLFdBQVc7b0JBQ3ZCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQzVDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3lCQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNoQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNuQyxPQUFRLFNBQVMsRUFBRSxRQUFjLElBQUksR0FBRyxDQUFDO29CQUMzQyxDQUFDLENBQUM7aUJBQ0wsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNLFdBQVcsR0FBd0IsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xELENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUTtnQkFDM0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNkLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSyxTQUFTLENBQUM7WUFDekUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRTtvQkFDeEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQztvQkFDOUQsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO3dCQUNyQixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUMxRDtpQkFDRjtnQkFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNoRCxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQ3BDLENBQUM7Z0JBQ0YsTUFBTSxHQUFHLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QyxPQUFPLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFTCxJQUFJLE9BQVksQ0FBQztZQUNqQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckUsT0FBTztvQkFDTCxlQUFlLElBQUksS0FBSyxDQUFDLEtBQUs7d0JBQzVCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQzlCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3RCO3dCQUNILENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDZjtpQkFBTSxJQUFJLGVBQWUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUN6QyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUN4QyxJQUFJLEVBQ0osV0FBVyxFQUNYLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUN0QixDQUFDO2FBQ0g7aUJBQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxlQUFlLEVBQUU7Z0JBQ2pELE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQ3hDLElBQUksRUFDSixlQUFlLENBQUMsR0FBRyxFQUNuQixlQUFlLENBQUMsU0FBUyxDQUMxQixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNoQjtZQUNELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDL0IsTUFBTSxRQUFRLEdBQUcsTUFBTTtnQkFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNaLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25FLE1BQU0sTUFBTSxHQUFHLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRCxPQUFPO2dCQUNMLGVBQWUsRUFBRSxTQUFTO2dCQUMxQixxQkFBcUIsRUFBRSxRQUFRLENBQUMsTUFBTTthQUN2QyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQ2xCLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXREOzs7VUFHRTtRQUNGLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzRCxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUF6SGUsOEJBQXFCLHdCQXlIcEMsQ0FBQTtJQUVELFNBQWdCLDJCQUEyQixDQUt6QyxZQUF3RSxFQUN4RSxPQUEwQyxFQUMxQyxnQkFBd0IsRUFDeEIsT0FBK0M7UUFFL0MsSUFBSSxJQUEwQixDQUFDO1FBQy9CLElBQUksWUFBaUIsQ0FBQztRQUN0QiwyQ0FBMkM7UUFDM0MsSUFBSSxJQUFhLENBQUM7UUFFbEIsTUFBTSxNQUFNLEdBQW9CLEtBQUssRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtZQUNoRSx5REFBeUQ7WUFDekQsK0NBQStDO1lBQy9DLElBQUksZ0JBQWdCLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtnQkFDcEMsb0ZBQW9GO2dCQUNwRixNQUFNLHdCQUF3QixHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSTtvQkFDekQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUMxQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO3dCQUN4QixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO29CQUNwQyxDQUFDLENBQUM7eUJBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTt3QkFDckIsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdkQsQ0FBQyxDQUFDO29CQUNOLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2QsTUFBTSxXQUFXLEdBQ2YsT0FBTyxFQUFFLFdBQVcsSUFBSSx3QkFBd0I7b0JBQzlDLENBQUMsQ0FBQzt3QkFDRSxHQUFHLE9BQU8sRUFBRSxXQUFXO3dCQUN2QixJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUN0QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUN0RDtxQkFDRjtvQkFDSCxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztnQkFDM0IsSUFBSSxHQUFHLE1BQU0sWUFBWSxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxrQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQzthQUM1QztZQUNELElBQ0UsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLHFCQUFxQjtnQkFDL0MsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLHdCQUF3QixFQUNsRDtnQkFDQSxJQUFJLEdBQUcsTUFBTSxZQUFZLEVBQUUsQ0FBQztnQkFDNUIsWUFBWSxHQUFHLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUM1QixHQUFHLE9BQU8sRUFBRSxXQUFXO29CQUN2QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO3lCQUM1QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt5QkFDL0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDaEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDbkMsT0FBUSxTQUFTLEVBQUUsUUFBYyxJQUFJLEdBQUcsQ0FBQztvQkFDM0MsQ0FBQyxDQUFDO2lCQUNMLENBQUMsQ0FBQzthQUNKO1lBQ0QsTUFBTSxXQUFXLEdBQXdCLEtBQUssQ0FBQyxLQUFLO2dCQUNsRCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7Z0JBQzNDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDZCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDO1lBQ3pFLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUM1QixJQUFJLE9BQU8sRUFBRSxXQUFXLEVBQUU7b0JBQ3hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUM7b0JBQzlELElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTt3QkFDckIsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDMUQ7aUJBQ0Y7Z0JBQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUNwQyxDQUFDO2dCQUNGLE1BQU0sR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDekMsT0FBTyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRUwsaUNBQWlDO1lBQ2pDLElBQUksd0JBQXdCLEdBQVksS0FBSyxDQUFDO1lBRTlDLElBQUksa0JBQWtCLEdBQVEsWUFBWSxDQUFDO1lBQzNDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsa0JBQWtCLEdBQUcsSUFBSTtxQkFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7cUJBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFOUIsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxtQkFBbUIsR0FBUSxrQkFBa0IsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQ3RDLElBQUksYUFBYSxFQUFFO2dCQUNqQixtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDcEQsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQ2xDLENBQUM7Z0JBRUYsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO2FBQ2pDO1lBRUQsTUFBTSxtQkFBbUIsR0FBeUIsd0JBQXdCO2dCQUN4RSxDQUFDLENBQUMsbUJBQW1CLENBQUMsK0JBQStCLENBQ2pELElBQUksRUFDSixtQkFBbUIsQ0FDcEI7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULE1BQU0sZ0JBQWdCLEdBQVcsbUJBQW1CLENBQUMsZUFBZSxDQUNsRSxtQkFBbUIsRUFDbkIsT0FBTyxFQUFFLFVBQVUsSUFBSSxZQUFZLENBQ3BDLENBQUM7WUFFRixJQUFJLGdCQUFzQyxDQUFDO1lBQzNDLElBQUksZUFBZSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLDJEQUEyRDtnQkFDM0QsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsaUNBQWlDLENBQ3BFLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQ3RCLENBQUM7YUFDSDtpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLG1DQUFtQztnQkFDbkMsTUFBTSxrQkFBa0IsR0FDdEIsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDakUsZ0JBQWdCO29CQUNkLGlCQUFpQixDQUFDLDZDQUE2QyxDQUM3RCxtQkFBbUIsRUFDbkIsa0JBQWtCLENBQ25CLENBQUM7YUFDTDtpQkFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLGVBQWUsRUFBRTtnQkFDakQsdUNBQXVDO2dCQUN2QyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FDcEUsbUJBQW1CLEVBQ25CLGVBQWUsQ0FBQyxHQUFHLEVBQ25CLGVBQWUsQ0FBQyxTQUFTLENBQzFCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxzREFBc0Q7Z0JBQ3RELGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO2FBQ3hDO1lBRUQsTUFBTSxtQkFBbUIsR0FDdkIsc0JBQXNCLENBQUMsd0JBQXdCLENBQzdDLGdCQUFnQixFQUNoQixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFDckIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQ3pCLE9BQU8sRUFBRSxVQUFVLElBQUksWUFBWSxDQUNwQyxDQUFDO1lBQ0osTUFBTSxVQUFVLEdBQVksbUJBQW1CLENBQUMsSUFBSSxDQUNsRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUNwQyxDQUFDO1lBRUYsT0FBTztnQkFDTCx3QkFBd0IsRUFBRSxtQkFBbUI7Z0JBQzdDLHFCQUFxQixFQUFFLGdCQUFnQjtnQkFDdkMsVUFBVSxFQUFFLFVBQVU7YUFDdkIsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUNsQixrQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RDs7O1VBR0U7UUFDRixPQUFPLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0QsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBdEtlLG9DQUEyQiw4QkFzSzFDLENBQUE7QUFDSCxDQUFDLEVBdm9EZ0IsUUFBUSxLQUFSLFFBQVEsUUF1b0R4QjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxXQUFXLENBTWxCLE1BQXNDLEVBQ3RDLE1BQXNDO0lBRXRDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0tBQzdCO0lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN0QyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7S0FDM0I7SUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDL0M7SUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDbEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7S0FDdkQ7SUFDRCxJQUNFLENBQUMsT0FBTyxDQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQ3BDLEVBQ0Q7UUFDQSxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUM7S0FDM0U7SUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUMvQjtJQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0tBQ2pDO0lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNoRCxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7S0FDckM7SUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3hELE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztLQUM3QztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLGlCQUFpQixDQU0vQixLQUFxQyxFQUNyQyxNQUFtQyxFQUNuQyxnQkFBNkM7SUFLN0MsTUFBTTtRQUNKLEtBQUssRUFBRTtZQUNMLEdBQUcsS0FBSztZQUNSLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7UUFDRCxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUM7SUFDRixJQUFJO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNELElBQUksc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzNELEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7U0FDakM7UUFDRCxNQUFNO1lBQ0osS0FBSyxFQUFFO2dCQUNMLEdBQUcsS0FBSztnQkFDUixJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0tBQ0g7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLE1BQU07WUFDSixLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsS0FBSztvQkFDZCxLQUFLO2lCQUNOO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7S0FDSDtBQUNILENBQUM7QUFFRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FNcEIsS0FBcUMsRUFDckMsTUFBbUMsRUFDbkMsT0FBd0MsRUFDeEMsTUFBbUMsRUFDbkMsYUFBd0MsRUFDeEMsa0JBQWdEO0lBS2hELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRTtRQUNuQixLQUFLLE1BQU07WUFDVCxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELE1BQU07UUFDUixLQUFLLGFBQWE7WUFDaEIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCO2dCQUNFLEdBQUcsS0FBSztnQkFDUixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLLENBQUMsS0FBSztvQkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU87aUJBQ3RCO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxvQkFBb0IsRUFBRSxJQUFJO29CQUMxQixJQUFJLEVBQUUsU0FBUztvQkFDZixRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7aUJBQ3BCO2FBQ0YsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxtQkFBbUI7WUFDdEIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ3pELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGNBQWM7WUFDakIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCO2dCQUNFLEdBQUcsS0FBSztnQkFDUixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLLENBQUMsS0FBSztvQkFDZCxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3RCLFVBQVUsRUFBRTt3QkFDVixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDekIsSUFBSSxFQUFFLENBQUM7cUJBQ1I7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULG9CQUFvQixFQUFFLElBQUk7b0JBQzFCLElBQUksRUFBRSxTQUFTO29CQUNmLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtpQkFDcEI7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLFNBQVMsRUFBRSxVQUFVO29CQUNyQixnQkFBZ0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtvQkFDM0IsYUFBYSxFQUFFLElBQUksR0FBRyxFQUFFO2lCQUN6QjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUsscUJBQXFCO1lBQ3hCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QjtnQkFDRSxHQUFHLEtBQUs7Z0JBQ1IsS0FBSyxFQUFFO29CQUNMLEdBQUcsS0FBSyxDQUFDLEtBQUs7b0JBQ2QsYUFBYSxFQUFFLElBQUksR0FBRyxDQUFDO3dCQUNyQixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsYUFBYTt3QkFDNUIsR0FBRyxNQUFNLENBQUMsT0FBTztxQkFDbEIsQ0FBQztvQkFDRixVQUFVLEVBQUU7d0JBQ1YsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQ3pCLElBQUksRUFBRSxDQUFDO3FCQUNSO2lCQUNGO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxvQkFBb0IsRUFBRSxJQUFJO29CQUMxQixJQUFJLEVBQUUsU0FBUztvQkFDZixRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7aUJBQ3BCO2dCQUNELGFBQWEsRUFBRTtvQkFDYixTQUFTLEVBQUUsVUFBVTtvQkFDckIsZ0JBQWdCLEVBQUUsSUFBSSxHQUFHLEVBQUU7b0JBQzNCLGFBQWEsRUFBRSxJQUFJLEdBQUcsRUFBRTtpQkFDekI7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGtCQUFrQjtZQUNyQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTztpQkFDM0I7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGdCQUFnQjtZQUNuQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTztpQkFDekI7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHNCQUFzQjtZQUN6QixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFVBQVUsRUFBRTt3QkFDVixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDekIsSUFBSSxFQUFFLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3FCQUN6RDtpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssa0JBQWtCO1lBQ3JCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QjtnQkFDRSxHQUFHLEtBQUs7Z0JBQ1IsS0FBSyxFQUFFO29CQUNMLEdBQUcsS0FBSyxDQUFDLEtBQUs7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUN6QixJQUFJLEVBQ0Ysc0JBQXNCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQzs0QkFDekMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ2pEO2lCQUNGO2FBQ0YsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxZQUFZO1lBQ2YsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCO2dCQUNFLEdBQUcsS0FBSztnQkFDUixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLLENBQUMsS0FBSztvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtxQkFDbEI7aUJBQ0Y7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGdCQUFnQjtZQUNuQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFVBQVUsRUFBRTt3QkFDVixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDekIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJO3dCQUNyQixJQUFJLEVBQUUsQ0FBQztxQkFDUjtpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssZUFBZTtZQUNsQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsVUFBVSxFQUFFO3dCQUNWLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUN6QixJQUFJLEVBQUUsQ0FBQztxQkFDUjtpQkFDRjtnQkFDRCxTQUFTLEVBQUU7b0JBQ1Qsb0JBQW9CLEVBQUUsSUFBSTtvQkFDMUIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO2lCQUNwQjtnQkFDRCxhQUFhLEVBQUU7b0JBQ2IsU0FBUyxFQUFFLFVBQVU7b0JBQ3JCLGdCQUFnQixFQUFFLElBQUksR0FBRyxFQUFFO29CQUMzQixhQUFhLEVBQUUsSUFBSSxHQUFHLEVBQUU7aUJBQ3pCO2FBQ0YsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxXQUFXO1lBQ2Qsd0VBQXdFO1lBQ3hFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxNQUFNO1FBQ1IsS0FBSyxzQkFBc0I7WUFDekIsTUFBTTtnQkFDSixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxHQUFHLEtBQUssQ0FBQyxPQUFPO3dCQUNoQixjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU87cUJBQy9CO2lCQUNGO2dCQUNELDhEQUE4RDtnQkFDOUQsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssaUJBQWlCO1lBQ3BCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLGtCQUFrQixDQUFDLGVBQWUsQ0FDdkMsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxDQUNkO2dCQUNELE1BQU0sRUFBRSx1QkFBdUI7YUFDaEMsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHlCQUF5QjtZQUM1QixNQUFNO2dCQUNKLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FDaEQsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsTUFBTSxDQUFDLEtBQUssRUFDWixNQUFNLENBQUMsTUFBTSxDQUNkO2dCQUNELE1BQU0sRUFBRSx1QkFBdUI7YUFDaEMsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixNQUFNO2dCQUNKLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FDekMsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsTUFBTSxDQUFDLGFBQWEsRUFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FDaEI7Z0JBQ0QsTUFBTSxFQUFFLHVCQUF1QjthQUNoQyxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssb0JBQW9CO1lBQ3ZCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FDcEMsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsUUFBUSxDQUNoQjtnQkFDRCxNQUFNLEVBQUUsdUJBQXVCO2FBQ2hDLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxxQkFBcUI7WUFDeEIsTUFBTTtnQkFDSixLQUFLLEVBQUUsa0JBQWtCLENBQUMsbUJBQW1CLENBQzNDLEtBQUssRUFDTCxPQUFPLEVBQ1AsYUFBYSxFQUNiLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FDZjtnQkFDRCxNQUFNLEVBQUUsdUJBQXVCO2FBQ2hDLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyx3QkFBd0I7WUFDM0IsTUFBTTtnQkFDSixLQUFLLEVBQUUsa0JBQWtCLENBQUMsZ0JBQWdCLENBQ3hDLEtBQUssRUFDTCxPQUFPLEVBQ1AsYUFBYSxFQUNiLE1BQU0sQ0FBQyxPQUFPLENBQ2Y7Z0JBQ0QsTUFBTSxFQUFFLHVCQUF1QjthQUNoQyxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssbUJBQW1CO1lBQ3RCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLGtCQUFrQixDQUFDLGlCQUFpQixDQUN6QyxLQUFLLEVBQ0wsT0FBTyxFQUNQLGFBQWEsRUFDYixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxjQUFjLENBQ3RCO2dCQUNELE1BQU0sRUFBRSx1QkFBdUI7YUFDaEMsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHVCQUF1QjtZQUMxQixNQUFNO2dCQUNKLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FDN0MsS0FBSyxFQUNMLE9BQU8sRUFDUCxhQUFhLEVBQ2Isa0JBQWtCLENBQ25CO2dCQUNELE1BQU0sRUFBRSx1QkFBdUI7YUFDaEMsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGlCQUFpQjtZQUNwQixNQUFNO2dCQUNKLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUs7b0JBQ1IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2lCQUMxQjtnQkFDRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxtQkFBbUI7WUFDdEIsTUFBTTtnQkFDSixLQUFLLEVBQUUscUJBQXFCLENBQUMsY0FBYyxDQUN6QyxLQUFLLEVBQ0wsTUFBTSxDQUFDLEVBQUUsRUFDVCxNQUFNLENBQUMsUUFBUSxFQUNmLE1BQU0sQ0FBQyxVQUFVLENBQ2xCO2dCQUNELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG9CQUFvQjtZQUN2QixNQUFNO2dCQUNKLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixNQUFNO2dCQUNKLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLGdCQUFnQjtZQUNuQixNQUFNO2dCQUNKLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUNsRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxzQkFBc0I7WUFDekIsTUFBTTtnQkFDSixLQUFLLEVBQUUscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3ZFLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHFCQUFxQjtZQUN4QixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEI7Z0JBQ0UsR0FBRyxLQUFLO2dCQUNSLEtBQUssRUFBRTtvQkFDTCxHQUFHLEtBQUssQ0FBQyxLQUFLO29CQUNkLFFBQVEsRUFBRTt3QkFDUixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDdkIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO3FCQUNwQztpQkFDRjthQUNGLEVBQ0QsTUFBTSxFQUNOLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUsscUJBQXFCO1lBQ3hCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUN0QjtnQkFDRSxHQUFHLEtBQUs7Z0JBQ1IsS0FBSyxFQUFFO29CQUNMLEdBQUcsS0FBSyxDQUFDLEtBQUs7b0JBQ2QsUUFBUSxFQUFFO3dCQUNSLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO3dCQUN2QixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7cUJBQ3BDO2lCQUNGO2FBQ0YsRUFDRCxNQUFNLEVBQ04sTUFBTSxDQUNQLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxtQkFBbUI7WUFDdEIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQ3RCO2dCQUNFLEdBQUcsS0FBSztnQkFDUixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxLQUFLLENBQUMsS0FBSztvQkFDZCxRQUFRLEVBQUU7d0JBQ1IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7d0JBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztxQkFDaEM7aUJBQ0Y7YUFDRixFQUNELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLHdCQUF3QjtZQUMzQixLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FDdEIsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQ2hELE1BQU0sRUFDTixNQUFNLENBQ1AsQ0FBQztZQUNGLE1BQU07UUFDUixLQUFLLG1CQUFtQjtZQUN0QixNQUFNO2dCQUNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDL0QsTUFBTSxFQUFFLElBQUk7YUFDYixDQUFDO1lBQ0YsTUFBTTtRQUNSLEtBQUssc0JBQXNCO1lBQ3pCLE1BQU07Z0JBQ0osS0FBSyxFQUFFLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO1FBQ1IsS0FBSyxvQkFBb0I7WUFDdkIsTUFBTTtnQkFDSixLQUFLLEVBQUUsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixNQUFNO0tBQ1Q7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IEZ1c2UsIHsgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGFibGUsXG4gIGNvbm5lY3RhYmxlLFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VTY2FuLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzaGFyZSxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgdG9TZW50ZW5jZUNhc2UgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvc2VudGVuY2UtY2FzZS5waXBlJztcbmltcG9ydCB7IFRhYmxlQ29sbGFwc2VIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL2NvbGxhcHNlLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5IZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL2NvbHVtbi1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlRGlzcGxheUhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvZGlzcGxheS1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlTmVzdGluZ0hlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvbmVzdGluZy1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlT3JkZXJIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL29yZGVyLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVQYWdpbmF0aW9uSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9wYWdpbmF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHsgVGFibGVSZXN1bHRIZWxwZXJzIH0gZnJvbSAnLi9zdGF0ZS1oZWxwZXJzL3Jlc3VsdC1oZWxwZXJzJztcbmltcG9ydCB7IFRhYmxlU2VhcmNoSGVscGVycyB9IGZyb20gJy4vc3RhdGUtaGVscGVycy9zZWFyY2gtaGVscGVycyc7XG5pbXBvcnQgeyBUYWJsZVNlbGVjdGlvbkhlbHBlcnMgfSBmcm9tICcuL3N0YXRlLWhlbHBlcnMvc2VsZWN0aW9uLWhlbHBlcnMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlRhYmxlIHtcbiAgZXhwb3J0IHR5cGUgUm93ID0geyBpZDogc3RyaW5nIHwgbnVtYmVyIH07XG4gIGV4cG9ydCB0eXBlIENvbHVtbiA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgRmlsdGVycyA9IGFueTtcbiAgZXhwb3J0IHR5cGUgR3JvdXAgPSB7IGtleTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbiAgLyoqXG4gICAqIFJpdlRhYmxlJ3Mgc3RhdGUgYW5kIHVzZXIgYWN0aW9ucyBhcmUgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgY2h1bmtzOlxuICAgKlxuICAgKiAtIFF1ZXJ5IChmb3IgdGhpbmdzIGxpa2UgZmlsdGVycywgcGFnaW5hdGlvbiwgc2VhcmNoLCBldGMuKVxuICAgKiAtIExvYWRpbmcgKGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdGFibGUgaXMgbG9hZGluZyByb3cgZGF0YSlcbiAgICogLSBSZXN1bHQgKGZvciB0aGUgcm93IGRhdGEgaXRzZWxmKVxuICAgKiAtIERpc3BsYXkgKGZvciB0aGluZ3MgbGlrZSBjb2x1bW4gY29uZmlndXJhdGlvbilcbiAgICogLSBTZWxlY3Rpb24gKGZvciB0cmFja2luZyB0aGUgdXNlcidzIHJvdyBzZWxlY3Rpb25zKVxuICAgKiAtIENvbGxhcHNlU3RhdGUgKGZvciB0cmFja2luZyB0aGUgcm93cy9oZWFkZXJzIHRoYXQgYXJlIGNvbGxhcHNlZClcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzZWFyY2hDb2x1bW5zOiBNYXA8QywgYm9vbGVhbj47XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICAgIGdyb3VwaW5nOiB7XG4gICAgICB2aWV3TW9yZUtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGdyb3Vwc1BlclBhZ2U6IG51bWJlcjtcbiAgICAgIGNvdW50UGVyR3JvdXA6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnb3JkZXJDaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXTtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDb2x1bW5Ub2dnbGUnOyBjb2x1bW46IEMgfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaCddIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENvbHVtbnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoQ29sdW1ucyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlcnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZmlsdGVycyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlckFkZCc7IGNvbHVtbktleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2luYXRpb25DaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsncGFnaW5hdGlvbiddIH1cbiAgICB8IHsgdHlwZTogJ2dyb3VwaW5nQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2dyb3VwaW5nJ10gfVxuICAgIHwgeyB0eXBlOiAnbmV4dFBhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VDaGFuZ2UnOyBwYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAncGFnZVNpemVDaGFuZ2UnOyBzaXplOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc7IGdyb3Vwc1BlclBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdjb3VudFBlckdyb3VwQ2hhbmdlJzsgY291bnRQZXJHcm91cDogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3ZpZXdNb3JlS2V5Q2hhbmdlJzsgdmlld01vcmVLZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJyB9O1xuXG4gIC8vLy8vLy8vLy9cbiAgLy8gTG9hZCAvL1xuICAvLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTG9hZCA9IHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gUmVzdWx0IC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VEYXRhOiBSW107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN1Ykdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSBSZXN1bHQ8Uj4gJiB7XG4gICAgLyoqXG4gICAgICogQW55IG90aGVyIHJlbGV2YW50IGdyb3VwIGRhdGEsIHVzZWQgZm9yIHRoZSBzdWJoZWFkZXJcbiAgICAgKi9cbiAgICBncm91cERhdGE6IEc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIHNwbGl0IGludG8gZ3JvdXBzXG4gICAgICovXG4gICAgZ3JvdXBSZXN1bHRzOiBTdWJHcm91cFJlc3VsdDxSLCBHPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgZ3JvdXBzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsR3JvdXBDb3VudDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcblxuICAvKlxuICAgIE5lc3RlZFJlc3VsdFxuICAgICAgTmVzdGVkSGVhZGVyUm93XG4gICAgICAgIE5lc3RlZFJvdyAtIHdpdGggc3Vicm93c1xuICAgICAgICAgIE5lc3RlZFJvdyAtIHdpdGggbm8gc3Vicm93c1xuICAqL1xuICBleHBvcnQgdHlwZSBOZXN0ZWRIZWFkZXJSb3c8UiBleHRlbmRzIFJvdz4gPSB7XG4gICAgLy8gVGhlIHJvd3MgdGhhdCBzaG91bGQgYmUgaGlkZGVuIHdoZW4gdGhlIHRvZ2dsZSBvbiB0aGlzIGhlYWRlciBpcyB0b2dnbGVkLlxuICAgIHN1YlJvd3M6IE5lc3RlZFJvdzxSPltdO1xuXG4gICAgLy8gVGhlIHRleHQgdG8gc2hvdyBuZXh0IHRvIHRoZSB0b2dnbGVhYmxlIGNoZXZyb24sIG9yIG51bGwgaWYgd2UgZG9uJ3Qgc2hvdyB0aGUgaGVhZGVyXG4gICAgaGVhZGVyVGV4dDogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgTmVzdGVkUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8vIFRoZSByb3dzIHRoYXQgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHRoZSB0b2dnbGUgb24gdGhpcyByb3cgaXMgdG9nZ2xlZC5cbiAgICBzdWJSb3dzPzogTmVzdGVkUm93PFI+W107XG5cbiAgICAvLyBUaGUgcmVsZXZhbnQgZGF0YSB1c2VkIHRvIGRpc3BsYXkgdGhpcyByb3cuXG4gICAgZGF0YTogUjtcbiAgfTtcbiAgLypcbiAgICBOZXN0ZWQgaGVhZGVyIHJvd3MgYXJlIHRvZ2dsZWFibGUgaGVhZGVycyBmb3IgZ3JvdXBzIG9mIHJvd3MuXG4gICovXG4gIGV4cG9ydCB0eXBlIE5lc3RlZFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIG5lc3RlZCBpbnRvIFwiaGVhZGVycyB3aXRoIHN1YnJvd3NcIi5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZU5lc3RlZEhlYWRlcnM6IE5lc3RlZEhlYWRlclJvdzxSPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKlxuICAgICAqIE9ubHkgY291bnRzIHJvd3MgYXQgdGhlIGJvdHRvbSBsZXZlbCBvZiBuZXN0aW5nLlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuXG4gICAgLypcbiAgICAgIFRoaXMgdHlwZSBhbHNvIHN1cHBvcnRzIG5lc3RlZCByb3dzIHdpdGhvdXQgaGVhZGVyIHJvd3MsIHNvIHRoaXMgcHJvcGVydHlcbiAgICAgIGhlbHBzIHVzIHRlbGwgd2hldGhlciB0byBzaG93IHRoZSBoZWFkZXJzLlxuICAgICovXG4gICAgaGFzSGVhZGVyczogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPiB8IE5lc3RlZFJlc3VsdDxSPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAga2V5OiBDO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIERpc3BsYXk8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgY29sdW1uU2V0dGluZ3M6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgY2VsbFJvd1NwYW46IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpID0+IG51bWJlcjtcbiAgfTtcblxuICAvLyBEaXNwbGF5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBEaXNwbGF5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4+ID1cbiAgICB8IHsgdHlwZTogJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzsgcGF5bG9hZDogRGlzcGxheTxDPlsnY29sdW1uU2V0dGluZ3MnXSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJztcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgZnJlZXplOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2ZyZWV6ZURpdmlkZXInO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnO1xuICAgICAgICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gICAgICAgIG5ld0luZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZT86ICd0YWJsZURyYWcnIHwgJ21lbnVEcmFnJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZHJhZ0Ryb3AnIHwgJ2V5ZUljb24nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vL1xuICAvLyBTZWxlY3Rpb24gLy9cbiAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gU2VsZWN0aW9uIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBSWydpZCddIHwgbnVsbDtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnO1xuICAgICAgICBpbmNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBtb2RlOiAnZXhjbHVkZSc7XG4gICAgICAgIGV4Y2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICk7XG5cbiAgLy8gU2VsZWN0aW9uIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25BY3Rpb248UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFNlbGVjdGlvbjxSPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUm93R3JvdXA8UiwgRz47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyb3dTZWxlY3RlZENoYW5nZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgY29udGlndW91czogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3BhZ2VTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DbGVhcic7XG4gICAgICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbGxhcHNlU3RhdGU8UiBleHRlbmRzIFJvdz4gPVxuICAgIHwge1xuICAgICAgICBkZWZhdWx0VG86ICdjb2xsYXBzZWQnO1xuICAgICAgICBleHBhbmRlZFJvd3M6IFNldDxSWydpZCddPjtcbiAgICAgICAgZXhwYW5kZWRIZWFkZXJzOiBTZXQ8c3RyaW5nPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnO1xuICAgICAgICBjb2xsYXBzZWRSb3dzOiBTZXQ8UlsnaWQnXT47XG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IFNldDxzdHJpbmc+O1xuICAgICAgfTtcblxuICBleHBvcnQgdHlwZSBDb2xsYXBzZUFjdGlvbjxSIGV4dGVuZHMgUm93PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVSb3dDb2xsYXBzZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlSGVhZGVyQ29sbGFwc2UnO1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlQWxsQ29sbGFwc2VkJztcbiAgICAgIH07XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAvLyBDb21iaW5lZCBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgcXVlcnk6IFF1ZXJ5PEMsIEY+O1xuICAgIGxvYWQ6IExvYWQ7XG4gICAgcmVzdWx0OiBSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPiB8IE5lc3RlZFJlc3VsdDxSPjtcbiAgICBkaXNwbGF5OiBEaXNwbGF5PEM+O1xuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uPFI+O1xuICAgIGNvbGxhcHNlU3RhdGU6IENvbGxhcHNlU3RhdGU8Uj47XG4gIH07XG5cbiAgLy8gQ29tYmluZWQgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPVxuICAgIHwgUXVlcnlBY3Rpb248QywgRj5cbiAgICB8IERpc3BsYXlBY3Rpb248Qz5cbiAgICB8IFNlbGVjdGlvbkFjdGlvbjxSLCBHPlxuICAgIHwgQ29sbGFwc2VBY3Rpb248Uj47XG5cbiAgZXhwb3J0IHR5cGUgRWZmZWN0ID0gJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcyc7XG5cbiAgLy8gRnVsbCBzdGF0ZSAoY29yZSBzdGF0ZSBwbHVzIHB1cmUgZGVyaXZhdGlvbnMpIC8vXG4gIGV4cG9ydCBjb25zdCBDb2x1bW5zTWF4U2hvd246IG51bWJlciA9IDUwO1xuICBleHBvcnQgY29uc3QgQ29sdW1uRGF0YVR5cGVzID0gW1xuICAgICdhZHZhbmNlZCcsXG4gICAgJ2N1cnJlbmN5JyxcbiAgICAnZGF0ZScsXG4gICAgJ2ljb24nLFxuICAgICdsb25nVGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Nob3J0VGV4dCcsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIENvbHVtbkRhdGFUeXBlID0gKHR5cGVvZiBDb2x1bW5EYXRhVHlwZXMpW251bWJlcl07XG4gIGV4cG9ydCB0eXBlIENvbHVtbkFsaWdubWVudCA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgZXhwb3J0IHR5cGUgQ29sdW1uTWV0YWRhdGEgPSB7XG4gICAgb3JkZXJhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG4gICAgZGF0YVR5cGU6IENvbHVtbkRhdGFUeXBlO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGRlZmF1bHRQaW5uZWQ/OiBib29sZWFuO1xuICAgIGNsaWNrUHJldmVudERlZmF1bHQ/OiBib29sZWFuO1xuICAgIGNsaWNrU3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRXh0ZXJuYWxSb3dMaW5rID0ge1xuICAgIHR5cGU6ICdleHRlcm5hbCc7XG4gICAgaHJlZjogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbnRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2ludGVybmFsJztcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBSb3dMaW5rID0gRXh0ZXJuYWxSb3dMaW5rIHwgSW50ZXJuYWxSb3dMaW5rO1xuICBleHBvcnQgdHlwZSBGdWxsUm93PFIgZXh0ZW5kcyBSb3c+ID0gUiAmIHtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSb3dHcm91cDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgICBncm91cERhdGE6IEc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE5lc3RlZFJvdzxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHN1YlJvd3M/OiBGdWxsTmVzdGVkUm93PFI+W107XG4gICAgZGF0YTogUjtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsTmVzdGVkSGVhZGVyUm93PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIGlkOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgc3ViUm93czogRnVsbE5lc3RlZFJvdzxSPltdO1xuICAgIGhlYWRlclRleHQ6IHN0cmluZyB8IG51bGw7XG4gICAgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uPiA9IENvbHVtblNldHRpbmdzPEM+ICZcbiAgICBDb2x1bW5NZXRhZGF0YSAmIHtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICBsZWZ0OiBudW1iZXIgfCBudWxsO1xuICAgICAgYWxpZ25tZW50OiBDb2x1bW5BbGlnbm1lbnQ7XG4gICAgfTtcbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkNvbmZpZ3VyYXRpb24gPSBib29sZWFuIHwgJ2luZGl2aWR1YWwnO1xuXG4gIGV4cG9ydCB0eXBlIFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBleHBvcnQgdHlwZSBWYWxpZFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gKFxuICAgIHJvdzogUixcbiAgICBncm91cDogRyxcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2TW9kZSA9ICdmdWxsJyB8ICdzZWxlY3Rpb24nO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtbk5hbWVNYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgQyB8IHN0cmluZz47XG5cbiAgZXhwb3J0IHR5cGUgU2VhcmNoYWJsZUNvbHVtbk1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBib29sZWFuPjtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gQ29yZVN0YXRlPFIsIEMsIEYsIEc+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHByZXZpb3VzOiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlczogbnVtYmVyW107XG4gICAgICAgIG5leHQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VDb3VudDogbnVtYmVyO1xuICAgICAgICBzaG93Q29udHJvbHM6IGJvb2xlYW47XG4gICAgICAgIHBhZ2VSb3dTdGFydDogbnVtYmVyO1xuICAgICAgICBwYWdlUm93RW5kOiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfTtcbiAgICByZXN1bHQ6XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93c0FzR3JvdXA6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ25vcm1hbC1yb3dzJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd0dyb3VwczogUm93R3JvdXA8UiwgRz5bXTtcbiAgICAgICAgICBpc0dyb3VwZWQ6IHRydWU7XG4gICAgICAgICAgcmVzdWx0VHlwZTogJ3RhYmxlLWdyb3VwaW5nJztcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfVxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIG5lc3RlZEhlYWRlclJvd3M6IEZ1bGxOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlO1xuICAgICAgICAgIHJlc3VsdFR5cGU6ICduZXN0ZWQtcm93cyc7XG4gICAgICAgICAgY3N2RGF0YTogKG1vZGU/OiBDc3ZNb2RlKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgICAgIGNzdkZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgY29sdW1uczogRnVsbENvbHVtbjxDPltdO1xuICAgICAgYWxsQ29sdW1uczogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+O1xuICAgICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlSGlkZWFibGU6IGJvb2xlYW47XG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgICByb3dzQXJlR3JheWVkOiBib29sZWFuO1xuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogYm9vbGVhbjtcbiAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgICBlbmFibGVkQ291bnQ6IG51bWJlcjtcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiBib29sZWFuO1xuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQykgPT4gYm9vbGVhbjtcbiAgICB9O1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZ3VyYXRpb247XG4gICAgICBpc0FsbFNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgICAgc2VsZWN0ZWRDb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtYW5hZ2VyIGlzIHdoYXQgc2V0cyB1cCB0aGUgaW5pdGlhbCBzdGF0ZSBhbmQgdHJhbnNsYXRlcyB1c2VyIGFjdGlvbnNcbiAgICogKGxpa2UgcGFnaW5hdGlvbiBvciBmaWx0ZXIgY2hhbmdlcywgZXRjLikgaW50byBuZXcgcm93IGRhdGEgYnkgY2FsbGluZyB0aGVcbiAgICogcmVkdWNlciBmdW5jdGlvbi4gSXQgYWxzbyBhdWdtZW50cyB0aGUgY29yZSBzdGF0ZSB3aXRoIGFkZGl0aW9uYWwgZGVyaXZlZFxuICAgKiBzdGF0ZS5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+O1xuICAgIHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8UiwgQywgRiwgRz4+O1xuICAgIGVmZmVjdHM6IENvbm5lY3RhYmxlPEVmZmVjdD47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgcm93TGluaz86IChyb3c6IFIsIGdyb3VwPzogRykgPT4gUm93TGluaztcbiAgICBjc3ZDZWxsRm9ybWF0dGVyPzogQ3N2Q2VsbEZvcm1hdHRlcjxSLCBDPjtcbiAgICBjc3ZHcm91cENlbGxGb3JtYXR0ZXI/OiBDc3ZHcm91cENlbGxGb3JtYXR0ZXI8UiwgRz47XG4gICAgY3N2RmlsZUJhc2VuYW1lPzogc3RyaW5nO1xuICAgIGFsbG93U2VsZWN0aW9uPzogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICBjb2x1bW5zQXJlRnJlZXphYmxlPzogYm9vbGVhbjtcbiAgICBjb2x1bW5zQXJlSGlkZWFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdENvbHVtblN0YXRlPzogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICByb3dzQXJlR3JheWVkPzogYm9vbGVhbjtcbiAgICBjdXN0b21TdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHRoZSBcIlJlc3VsdHMgcGVyIHBhZ2VcIiBsYWJlbCBhbmQgcGFnZS1zaXplIGRyb3Bkb3duIGFyZVxuICAgICAqIGhpZGRlbi4gUGFnZSBuYXZpZ2F0aW9uIGFycm93cyBhbmQgcGFnZSBudW1iZXJzIHJlbWFpbiB2aXNpYmxlLlxuICAgICAqL1xuICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXJlbnQtY29udHJvbGxlZCByb3cgc3Bhbm5pbmcuXG4gICAgICogUmV0dXJuIDAgdG8gc3VwcHJlc3MgdGhlIGNlbGwsID49MSBmb3IgYSByZWFsIHJvd3NwYW4uXG4gICAgICogSWYgb21pdHRlZCBvciBpbnZhbGlkLCBkZWZhdWx0cyB0byAxLlxuICAgICAqL1xuICAgIGdldFJvd1NwYW5Gb3JDZWxsPzogUm93U3BhbkdldHRlcjxDPjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEYsIEc+IHtcbiAgICAvLyBTZXQgdXAgdGhlIGluaXRpYWwgdGFibGUgc3RhdGUuXG5cbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+ID0gbmV3IE1hcDxDLCBib29sZWFuPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbWV0YWRhdGEuc2VhcmNoYWJsZSA/PyB0cnVlLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIG9yZGVyOiBudWxsLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFxuICAgICAgICAgIEFycmF5LmZyb20oY29sdW1ucy5rZXlzKCkpXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWFyY2hhYmxlQ29sdW1uTWFwLmdldChrZXkpKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4gW2tleSwgdHJ1ZV0pLFxuICAgICAgICApLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgdmlld01vcmVLZXk6IG51bGwsXG4gICAgICAgICAgZ3JvdXBzUGVyUGFnZTogNSxcbiAgICAgICAgICBjb3VudFBlckdyb3VwOiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICAgIGNvbGxhcHNlU3RhdGU6IHtcbiAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgIGNvbGxhcHNlZEhlYWRlcnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBjb2x1bW5OYW1lTWFwOiBDb2x1bW5OYW1lTWFwPEM+ID0gbmV3IE1hcDxDLCBDIHwgc3RyaW5nPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdG9TZW50ZW5jZUNhc2UobWV0YWRhdGEuZGlzcGxheU5hbWUgPz8ga2V5KSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1uU3RhdGUgPVxuICAgICAgb3B0aW9ucz8uZGVmYXVsdENvbHVtblN0YXRlID8/XG4gICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncztcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8e1xuICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICB9PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbjxcbiAgICAgICAgQWN0aW9uPFIsIEMsIEYsIEc+LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgID4oXG4gICAgICAgICh7IHN0YXRlIH0sIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgeyBzdGF0ZTogZGVmYXVsdGVkSW5pdGlhbFN0YXRlLCBlZmZlY3Q6IG51bGwgfSxcbiAgICAgICAgMSxcbiAgICAgICksXG4gICAgICBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25FcnJvcjogZmFsc2UsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNzdkV4cG9ydEFsbG93ZWQgPSAhKFxuICAgICAgb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwgfHwgb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvd1xuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoeyBzdGF0ZTogcyB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSBUYWJsZUNvbHVtbkhlbHBlcnMucmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQocy5yZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0KHtcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgc3RhdGVSZXN1bHQ6IHMucmVzdWx0LFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQoe1xuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICBzdGF0ZVJlc3VsdDogcy5yZXN1bHQsXG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZXJpdmVGdWxsU3RhdGVGcm9tUmVndWxhclJlc3VsdCh7XG4gICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgIHN0YXRlUmVzdWx0OiBzLnJlc3VsdCxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbUdyb3VwUmVzdWx0PFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihwcm9wczoge1xuICAgIHM6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICBzdGF0ZVJlc3VsdDogR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdID0gc3RhdGVSZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgcm93czogZ3JvdXAuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgPyBvcHRpb25zLnJvd0xpbmsocm93LCBncm91cC5ncm91cERhdGEpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBzZWxlY3RlZDogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcm93LmlkKSxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgfSkpLFxuICAgICAgc2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBncm91cC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICB9KSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmICghVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlcikge1xuICAgICAgICBkYXRhWzBdLnB1c2goJycpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvd0l0ZW0gb2YgZGF0YVNldC5ncm91cFJlc3VsdHMuZmxhdE1hcChncm91cHMgPT5cbiAgICAgICAgZ3JvdXBzLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGdyb3VwOiBncm91cHMuZ3JvdXBEYXRhLFxuICAgICAgICB9KSksXG4gICAgICApKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJvd0l0ZW0ucm93O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIgJiYgcm93SXRlbS5ncm91cCkge1xuICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGdyb3VwQ2VsbEZvcm1hdHRlcihyZWNvcmQsIHJvd0l0ZW0uZ3JvdXApKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH1cbiAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucyxcbiAgICAgIHF1ZXJ5OiBkZXJpdmVkRnVsbFN0YXRlUXVlcnkocyksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheSh7XG4gICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgcGx1cmFsRW50aXR5TmFtZTogcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgcmVzb2x2ZWRDb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KSxcbiAgICAgIHNlbGVjdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbihzLCBvcHRpb25zKSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAuLi5zdGF0ZVJlc3VsdCxcbiAgICAgICAgaXNHcm91cGVkOiB0cnVlLFxuICAgICAgICByZXN1bHRUeXBlOiAndGFibGUtZ3JvdXBpbmcnLFxuICAgICAgICByb3dHcm91cHMsXG4gICAgICAgIHJvd3M6IHJvd0dyb3Vwcy5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLnJvd3MpLFxuICAgICAgICBjc3ZEYXRhLFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZUZ1bGxTdGF0ZUZyb21OZXN0ZWRSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBOZXN0ZWRSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlcyB3aXRoIG5lc3RlZCBkYXRhLicsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0YWJsZXMgd2l0aCBuZXN0ZWQgZGF0YS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsTmVzdGVkSGVhZGVyUm93czogRnVsbE5lc3RlZEhlYWRlclJvdzxSPltdID0gW107XG4gICAgZm9yIChjb25zdCBuZXN0ZWRSb3cgb2Ygc3RhdGVSZXN1bHQuY3VycmVudFBhZ2VOZXN0ZWRIZWFkZXJzKSB7XG4gICAgICBjb25zdCBuZXdGdWxsUm93OiBGdWxsTmVzdGVkSGVhZGVyUm93PFI+ID1cbiAgICAgICAgVGFibGVOZXN0aW5nSGVscGVycy5jb252ZXJ0VG9GdWxsTmVzdGVkSGVhZGVyUm93KFxuICAgICAgICAgIG5lc3RlZFJvdyxcbiAgICAgICAgICBzLFxuICAgICAgICAgIG9wdGlvbnM/LnJvd0xpbmssXG4gICAgICAgICk7XG4gICAgICBmdWxsTmVzdGVkSGVhZGVyUm93cy5wdXNoKG5ld0Z1bGxSb3cpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKG1vZGUgPSAnZnVsbCcpOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0NTViBleHBvcnQgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJvdyBzcGFubmluZyBvciBhIGN1c3RvbSBzdW1tYXJ5IHJvdyBpcyBlbmFibGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0Jyk7XG4gICAgICB9XG4gICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBhd2FpdCBzb3VyY2UoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGVSZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzUmVndWxhclJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1JldHVybmVkIG5vbi1uZXN0ZWQgQ1NWIGRhdGEgZm9yIGEgbmVzdGVkIHdpdGggaGVhZGVyIHJlc3VsdCB0YWJsZScsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzR3JvdXBSZXN1bHQoZGF0YVNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdSZXR1cm5lZCBncm91cGVkIENTViBkYXRhIGZvciBhIG5lc3RlZCB3aXRoIGhlYWRlciByZXN1bHQgdGFibGUnLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IFRhYmxlQ29sdW1uSGVscGVycy5yZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgcyxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgZGF0YS5wdXNoKGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpKTtcblxuICAgICAgY29uc3QgYWxsUm93czogUltdID0gVGFibGVSZXN1bHRIZWxwZXJzLmdldEFsbFJvd3NGcm9tUmVzdWx0KGRhdGFTZXQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbnRSb3cgb2YgYWxsUm93cykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgY3VycmVudFJvdy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93OiBDc3ZSb3cgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKGN1cnJlbnRSb3csIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzKSxcbiAgICAgIGRpc3BsYXk6IGRlcml2ZWRGdWxsU3RhdGVEaXNwbGF5KHtcbiAgICAgICAgY29yZVN0YXRlOiBzLFxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lOiBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgcmVzdWx0VHlwZTogJ25lc3RlZC1yb3dzJyxcbiAgICAgICAgbmVzdGVkSGVhZGVyUm93czogZnVsbE5lc3RlZEhlYWRlclJvd3MsXG4gICAgICAgIGNzdkRhdGEsXG4gICAgICAgIGNzdkZpbGVuYW1lOiBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0Q3N2RmlsZW5hbWUoXG4gICAgICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlRnVsbFN0YXRlRnJvbVJlZ3VsYXJSZXN1bHQ8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KHByb3BzOiB7XG4gICAgczogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgIHN0YXRlUmVzdWx0OiBSZXN1bHQ8Uj47XG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz47XG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGJvb2xlYW47XG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgICBjb25zdCB7XG4gICAgICBzLFxuICAgICAgc3RhdGVSZXN1bHQsXG4gICAgICBzb3VyY2UsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHJvd3MgPSBzdGF0ZVJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgLi4ucm93LFxuICAgICAgcm93TGluazogb3B0aW9ucz8ucm93TGluayA/IG9wdGlvbnMucm93TGluayhyb3cpIDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMuaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGNlbGxSb3dTcGFuQ2FjaGUgPSBUYWJsZURpc3BsYXlIZWxwZXJzLm1lbW9pemVkQ2VsbFJvd1NwYW4oXG4gICAgICBzLFxuICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgIGNlbGxSb3dTcGFuQ2FjaGU/LmdldChjb2x1bW4pPy5bcm93SW5kZXhdID8/IDE7XG4gICAgY29uc3QgaGFzQW55Um93U3BhbnMgPSBjZWxsUm93U3BhbkNhY2hlXG4gICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgc3BhbnMuc29tZShzcGFuID0+IHNwYW4gPiAxKSxcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGNvbnN0IHJlc29sdmVkQ29sdW1uS2V5cyA9IHJlc29sdmVkQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGtleSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdDU1YgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByb3cgc3Bhbm5pbmcgb3IgYSBjdXN0b20gc3VtbWFyeSByb3cgaXMgZW5hYmxlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnKTtcbiAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAge1xuICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZVJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChUYWJsZVJlc3VsdEhlbHBlcnMuaXNHcm91cFJlc3VsdChkYXRhU2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIG5vbi1ncm91cGVkIHRhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoVGFibGVSZXN1bHRIZWxwZXJzLmlzTmVzdGVkUmVzdWx0KGRhdGFTZXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmV0dXJuZWQgbmVzdGVkIENTViBkYXRhIGZvciBub24tbmVzdGVkIHRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gVGFibGVDb2x1bW5IZWxwZXJzLnJlc29sdmVDb2x1bW5zKFxuICAgICAgICBzLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICApO1xuICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICBkYXRhLnB1c2goZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSkpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBkYXRhU2V0LmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbW9kZSA9PT0gJ3NlbGVjdGlvbicgJiZcbiAgICAgICAgICAhVGFibGVTZWxlY3Rpb25IZWxwZXJzLmlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKVxuICAgICAgICApXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgcm93LnB1c2goYXdhaXQgY2VsbEZvcm1hdHRlcihyZWNvcmQsIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgfVxuICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcXVlcnk6IGRlcml2ZWRGdWxsU3RhdGVRdWVyeShzLCB7XG4gICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgfSksXG4gICAgICBkaXNwbGF5OiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheShcbiAgICAgICAge1xuICAgICAgICAgIGNvcmVTdGF0ZTogcyxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICByZXNvbHZlZENvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQ6IGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjZWxsUm93U3BhbjogY2VsbFJvd1NwYW4sXG4gICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbjogQyk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgaSA9IHJlc29sdmVkQ29sdW1uS2V5cy5maW5kSW5kZXgoa2V5ID0+IGtleSA9PT0gY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID09PSByZXNvbHZlZENvbHVtbktleXMubGVuZ3RoIC0gMSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCByaWdodENvbEtleSA9IHJlc29sdmVkQ29sdW1uS2V5c1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBzcGFuT25SaWdodCA9IGNlbGxSb3dTcGFuKHJvd0luZGV4LCByaWdodENvbEtleSk7XG4gICAgICAgICAgICByZXR1cm4gc3Bhbk9uUmlnaHQgPiAxIHx8IHNwYW5PblJpZ2h0ID09PSAwO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgc2VsZWN0aW9uOiBkZXJpdmVkRnVsbFN0YXRlU2VsZWN0aW9uKHMsIG9wdGlvbnMpLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIC4uLnN0YXRlUmVzdWx0LFxuICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxuICAgICAgICByZXN1bHRUeXBlOiAnbm9ybWFsLXJvd3MnLFxuICAgICAgICByb3dzLFxuICAgICAgICByb3dzQXNHcm91cDoge1xuICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICAgICAgZ3JvdXBEYXRhOiB7IGtleTogJycgfSBhcyBHLFxuICAgICAgICB9LFxuICAgICAgICBjc3ZGaWxlbmFtZTogVGFibGVSZXN1bHRIZWxwZXJzLmdldENzdkZpbGVuYW1lKFxuICAgICAgICAgIHBsdXJhbEVudGl0eU5hbWUsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICAgY3N2RGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlcml2ZWRGdWxsU3RhdGVRdWVyeTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgcGFydGlhbFF1ZXJ5OiBQYXJ0aWFsPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsncXVlcnknXT4gPSB7fSxcbiAgKTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+WydxdWVyeSddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnF1ZXJ5LFxuICAgICAgcGFnaW5hdGlvbjogZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb24oY29yZVN0YXRlKSxcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBUYWJsZVNlYXJjaEhlbHBlcnMuZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgJ25vbmUnLFxuICAgICAgKSxcbiAgICAgIC4uLnBhcnRpYWxRdWVyeSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVBhZ2luYXRpb248XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+KFxuICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3F1ZXJ5J11bJ3BhZ2luYXRpb24nXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgcHJldmlvdXM6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UHJldmlvdXNQYWdlKGNvcmVTdGF0ZSksXG4gICAgICBwYWdlczogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlcyhjb3JlU3RhdGUpLFxuICAgICAgbmV4dDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShjb3JlU3RhdGUpLFxuICAgICAgcGFnZUNvdW50OiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChjb3JlU3RhdGUpLFxuICAgICAgc2hvd0NvbnRyb2xzOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFNob3dQYWdpbmF0aW9uQ29udHJvbHMoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dTdGFydDogVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXRQYWdlUm93U3RhcnQoY29yZVN0YXRlKSxcbiAgICAgIHBhZ2VSb3dFbmQ6IFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuZ2V0UGFnZVJvd0VuZChjb3JlU3RhdGUpLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkZXJpdmVkRnVsbFN0YXRlRGlzcGxheTxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgcHJvcHM6IHtcbiAgICAgIGNvcmVTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICAgICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPjtcbiAgICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZztcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICByZXNvbHZlZENvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+O1xuICAgIH0sXG4gICAgcGFydGlhbERpc3BsYXk6IFBhcnRpYWw8RnVsbFN0YXRlPFIsIEMsIEYsIEc+WydkaXNwbGF5J10+ID0ge30sXG4gICk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPlsnZGlzcGxheSddIHtcbiAgICBjb25zdCB7XG4gICAgICBjb3JlU3RhdGUsXG4gICAgICBjb2x1bW5zLFxuICAgICAgcGx1cmFsRW50aXR5TmFtZSxcbiAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvcmVTdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgYWxsQ29sdW1uczogVGFibGVDb2x1bW5IZWxwZXJzLmdldEFsbENvbHVtbnMoXG4gICAgICAgIGNvcmVTdGF0ZSxcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IFRhYmxlRGlzcGxheUhlbHBlcnMuZ2V0WmVyb1N0YXRlTWVzc2FnZShcbiAgICAgICAgY29yZVN0YXRlLFxuICAgICAgICBwbHVyYWxFbnRpdHlOYW1lLFxuICAgICAgKSxcbiAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlSGlkZWFibGUsXG4gICAgICBjb2x1bW5zQXJlUmVvcmRlcmFibGU6IG9wdGlvbnM/LmNvbHVtbnNBcmVSZW9yZGVyYWJsZSA/PyB0cnVlLFxuICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgY3VzdG9tU3VtbWFyeVJvdzogISFvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93LFxuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogY3N2RXhwb3J0QWxsb3dlZCxcbiAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgIGhpZGVQYWdlU2l6ZVNlbGVjdG9yOiAhIW9wdGlvbnM/LmhpZGVQYWdlU2l6ZVNlbGVjdG9yLFxuICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAuLi5wYXJ0aWFsRGlzcGxheSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVyaXZlZEZ1bGxTdGF0ZVNlbGVjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgY29yZVN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBGdWxsU3RhdGU8UiwgQywgRiwgRz5bJ3NlbGVjdGlvbiddIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29yZVN0YXRlLnNlbGVjdGlvbixcbiAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0FsbFNlbGVjdGVkKGNvcmVTdGF0ZSksXG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6XG4gICAgICAgIFRhYmxlU2VsZWN0aW9uSGVscGVycy5pc0N1cnJlbnRQYWdlU2VsZWN0ZWQoY29yZVN0YXRlKSxcbiAgICAgIHNlbGVjdGVkQ291bnQ6IFRhYmxlU2VsZWN0aW9uSGVscGVycy5zZWxlY3RlZENvdW50KGNvcmVTdGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb21lIHRhYmxlcyB1c2UgcmVtb3RlIGJhY2tlbmRzIHRvIGZldGNoIGRhdGEgYXN5bmNocm9ub3VzbHksIGJ1dCBtb3N0IHRhYmxlcyB1c2UgYW5cbiAgICogaW4tbWVtb3J5IHNvdXJjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFdoYXQgYSBuZXN0ZWQgdGFibGUncyBwYWdlIHNpemUgYW5kIHRvdGFsIGNvdW50IGNvdW50OiBldmVyeSBib3R0b20tbGV2ZWxcbiAgICogcm93LCB3aGljaCBjYW4gc3BsaXQgYSByb3cncyBzdWJyb3dzIGFjcm9zcyBwYWdlcywgb3IgZWFjaCB0b3AtbGV2ZWwgcm93XG4gICAqIHRvZ2V0aGVyIHdpdGggYWxsIG9mIGl0cyBzdWJyb3dzLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IE5lc3RlZFBhZ2luYXRlQnlPcHRpb25zID0gWydib3R0b21Sb3dzJywgJ3RvcFJvd3MnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgTmVzdGVkUGFnaW5hdGVCeSA9ICh0eXBlb2YgTmVzdGVkUGFnaW5hdGVCeU9wdGlvbnMpW251bWJlcl07XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlOZXN0ZWRNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4gPSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFIsIEMsIEY+ICYge1xuICAgIC8qKiBEZWZhdWx0cyB0byAnYm90dG9tUm93cycuICovXG4gICAgcGFnaW5hdGVCeT86IE5lc3RlZFBhZ2luYXRlQnk7XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IFRhYmxlT3JkZXJIZWxwZXJzLm9yZGVyRW1wdHlMYXN0KFxuICAgICAgICAgICAgICAgIG1hdGNoZXMsXG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgcXVlcnkub3JkZXIuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKGhhc0V4cGxpY2l0U29ydCAmJiBxdWVyeS5vcmRlcikge1xuICAgICAgICBvcmRlcmVkID0gVGFibGVPcmRlckhlbHBlcnMub3JkZXJFbXB0eUxhc3QoXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIG9yZGVyZWQgPSBUYWJsZU9yZGVySGVscGVycy5vcmRlckVtcHR5TGFzdChcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlZmF1bHRTb3J0U3BlYy5rZXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmRpcmVjdGlvbixcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlck5lc3RlZDxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE5lc3RlZEhlYWRlclJvdzxSPltdPiB8IE5lc3RlZEhlYWRlclJvdzxSPltdLFxuICAgIGNvbHVtbnM6IE1hcDxDLCBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFI+PixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TmVzdGVkTWFuYWdlck9wdGlvbnM8UiwgQywgRj4sXG4gICk6IE1hbmFnZXI8UiwgQywgRj4ge1xuICAgIGxldCBkYXRhOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXTtcbiAgICBsZXQgcm93c0Zyb21EYXRhOiBSW107XG4gICAgLy8gVGhlIGZ1c2Ugd2lsbCBzZWFyY2ggdGhlIGluZGl2aWR1YWwgcm93c1xuICAgIGxldCBmdXNlOiBGdXNlPFI+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8UiwgQywgRj4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8vRm9yIGluTWVtb3J5TWFuYWdlcnMgdGhhdCBkbyBub3QgdXRpbGl6ZSBzZWFyY2hDb2x1bW5zLFxuICAgICAgLy93ZSBkbyBub3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlaXIgZnVzZU9wdGlvbnNcbiAgICAgIGlmIChtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAvL1ByZXZlbnQgc2VhcmNoaW5nIG9uIGNvbHVtbnMgdGhhdCBhcmUgaW4gZnVzZSBvcHRpb25zIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHNlYXJjaC5cbiAgICAgICAgY29uc3Qgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzID0gb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXNcbiAgICAgICAgICA/IEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLnNlYXJjaGFibGUgPT0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5tYXAoKFtrZXksIGNvbHVtbl0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm9yZGVyS2V5Py50b1N0cmluZygpIHx8IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBmdXNlT3B0aW9ucyA9XG4gICAgICAgICAgb3B0aW9ucz8uZnVzZU9wdGlvbnMgJiYgbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBrZXlzOiBvcHRpb25zPy5mdXNlT3B0aW9ucz8ua2V5cz8uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgayA9PiAhbm9uU2VhcmNoYWJsZUNvbHVtbnNLZXlzLmluY2x1ZGVzKGsudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBvcHRpb25zPy5mdXNlT3B0aW9ucztcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCBmdXNlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3NlYXJjaENvbHVtbnNDaGFuZ2UnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICByb3dzRnJvbURhdGEgPSBUYWJsZVJlc3VsdEhlbHBlcnMuZ2V0QWxsUm93c0Zyb21OZXN0ZWRIZWFkZXJzKGRhdGEpO1xuICAgICAgICBmdXNlID0gbmV3IEZ1c2Uocm93c0Zyb21EYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyBTZWFyY2gsIHRoZW4gZmlsdGVyLCB0aGVuIHNvcnRcbiAgICAgIGxldCBkaWRSZXN0cmljdERpc3BsYXllZFJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgbGV0IHJvd3NNYXRjaGluZ1NlYXJjaDogUltdID0gcm93c0Zyb21EYXRhO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICByb3dzTWF0Y2hpbmdTZWFyY2ggPSBmdXNlXG4gICAgICAgICAgLnNlYXJjaChxdWVyeS5zZWFyY2gpXG4gICAgICAgICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0pO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3dzTWF0Y2hpbmdGaWx0ZXJzOiBSW10gPSByb3dzTWF0Y2hpbmdTZWFyY2g7XG4gICAgICBjb25zdCBmaWx0ZXJUb0FwcGx5ID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgaWYgKGZpbHRlclRvQXBwbHkpIHtcbiAgICAgICAgcm93c01hdGNoaW5nRmlsdGVycyA9IHJvd3NNYXRjaGluZ1NlYXJjaC5maWx0ZXIocm93ID0+XG4gICAgICAgICAgZmlsdGVyVG9BcHBseShxdWVyeS5maWx0ZXJzLCByb3cpLFxuICAgICAgICApO1xuXG4gICAgICAgIGRpZFJlc3RyaWN0RGlzcGxheWVkUm93cyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZFJvd3NUb0Rpc3BsYXk6IE5lc3RlZEhlYWRlclJvdzxSPltdID0gZGlkUmVzdHJpY3REaXNwbGF5ZWRSb3dzXG4gICAgICAgID8gVGFibGVOZXN0aW5nSGVscGVycy5maW5kTmVzdGVkUm93c1dpdGhIZWFkZXJzVG9LZWVwKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHJvd3NNYXRjaGluZ0ZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICA6IGRhdGE7XG4gICAgICBjb25zdCBtYXRjaGluZ1Jvd0NvdW50OiBudW1iZXIgPSBUYWJsZU5lc3RpbmdIZWxwZXJzLmNvdW50TmVzdGVkUm93cyhcbiAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGVCeSA/PyAnYm90dG9tUm93cycsXG4gICAgICApO1xuXG4gICAgICBsZXQgc29ydGVkTmVzdGVkUm93czogTmVzdGVkSGVhZGVyUm93PFI+W107XG4gICAgICBpZiAoaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyKSB7XG4gICAgICAgIC8vIEV4cGxpY2l0IHNvcnQgb3ZlcnJpZGUgaGFzIHByaW9yaXR5IG92ZXIgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBUYWJsZU9yZGVySGVscGVycy5zb3J0TG93TGV2ZWxOZXN0ZWRSb3dzV2l0aEhlYWRlcnMoXG4gICAgICAgICAgbmVzdGVkUm93c1RvRGlzcGxheSxcbiAgICAgICAgICBvcmRlckNvbHVtbixcbiAgICAgICAgICBxdWVyeS5vcmRlci5kaXJlY3Rpb24sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICAvLyBTb3J0IG9uIHRoZSBGdXNlIHJlbGV2YW5jZSBvcmRlclxuICAgICAgICBjb25zdCBpZFRvU2VhcmNoSW5kZXhNYXA6IE1hcDxzdHJpbmcgfCBudW1iZXIsIG51bWJlcj4gPVxuICAgICAgICAgIFRhYmxlT3JkZXJIZWxwZXJzLmNyZWF0ZUlkVG9TZWFyY2hJbmRleE1hcChyb3dzTWF0Y2hpbmdTZWFyY2gpO1xuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID1cbiAgICAgICAgICBUYWJsZU9yZGVySGVscGVycy5zb3J0TmVzdGVkUm93c1dpdGhIZWFkZXJzQmFzZWRPblNlYXJjaE1hdGNoZXMoXG4gICAgICAgICAgICBuZXN0ZWRSb3dzVG9EaXNwbGF5LFxuICAgICAgICAgICAgaWRUb1NlYXJjaEluZGV4TWFwLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm9yZGVyID09IG51bGwgJiYgZGVmYXVsdFNvcnRTcGVjKSB7XG4gICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBzb3J0LCBpZiB3ZSBoYXZlIG9uZVxuICAgICAgICBzb3J0ZWROZXN0ZWRSb3dzID0gVGFibGVPcmRlckhlbHBlcnMuc29ydExvd0xldmVsTmVzdGVkUm93c1dpdGhIZWFkZXJzKFxuICAgICAgICAgIG5lc3RlZFJvd3NUb0Rpc3BsYXksXG4gICAgICAgICAgZGVmYXVsdFNvcnRTcGVjLmtleSxcbiAgICAgICAgICBkZWZhdWx0U29ydFNwZWMuZGlyZWN0aW9uLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3Qgc29ydCBpZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIHRvIHVzZSB0byBzb3J0XG4gICAgICAgIHNvcnRlZE5lc3RlZFJvd3MgPSBuZXN0ZWRSb3dzVG9EaXNwbGF5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdpbmF0ZWRIZWFkZXJSb3dzOiBOZXN0ZWRIZWFkZXJSb3c8Uj5bXSA9XG4gICAgICAgIFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMucGFnaW5hdGVOZXN0ZWRIZWFkZXJSb3dzKFxuICAgICAgICAgIHNvcnRlZE5lc3RlZFJvd3MsXG4gICAgICAgICAgcXVlcnkucGFnaW5hdGlvbi5wYWdlLFxuICAgICAgICAgIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICAgICAgb3B0aW9ucz8ucGFnaW5hdGVCeSA/PyAnYm90dG9tUm93cycsXG4gICAgICAgICk7XG4gICAgICBjb25zdCBoYXNIZWFkZXJzOiBib29sZWFuID0gcGFnaW5hdGVkSGVhZGVyUm93cy5zb21lKFxuICAgICAgICBoZWFkZXIgPT4gaGVhZGVyLmhlYWRlclRleHQgIT0gbnVsbCxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnRQYWdlTmVzdGVkSGVhZGVyczogcGFnaW5hdGVkSGVhZGVyUm93cyxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBtYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICBoYXNIZWFkZXJzOiBoYXNIZWFkZXJzLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29sdW1uTWV0YWRhdGE6IE1hcDxDLCBDb2x1bW5NZXRhZGF0YT4gPVxuICAgICAgVGFibGVDb2x1bW5IZWxwZXJzLmNyZWF0ZUNvbHVtbk1ldGFkYXRhTWFwKGNvbHVtbnMpO1xuXG4gICAgLypcbiAgICAgIFdoZW4gYSBkZWZhdWx0U29ydCBpcyBzcGVjaWZpZWQsIHNlZWQgdGhlIGluaXRpYWwgcXVlcnkub3JkZXIgc28gdGhlXG4gICAgICB0YWJsZSBoZWFkZXIgc2hvd3MgdGhlIHNvcnQgaW5kaWNhdG9yIGZyb20gdGhlIHN0YXJ0LlxuICAgICovXG4gICAgb3B0aW9ucyA9IFRhYmxlT3JkZXJIZWxwZXJzLnNlZWREZWZhdWx0U29ydE9wdGlvbihvcHRpb25zKTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBrZWVwcyB0aGUgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZXMgYXMgc3RhYmxlIGFzIHBvc3NpYmxlLCB3aGljaFxuICogaGVscHMgQW5ndWxhciByZWR1Y2UgdW5uZWNlc3NhcnkgcmUtcmVuZGVycy4gRm9yIG5vdywgc2ltcGxlIGlzRXF1YWwoKVxuICogY2hlY2tzIGF0IHRoZSBzdGF0ZSdzIHRvcC1sZXZlbCBrZXlzIGFyZSBzdWZmaWNpZW50IHRvIGRyYW1hdGljYWxseSBzcGVlZCB1cFxuICogcmVuZGVyaW5nLCBidXQgaWYgb3RoZXIgcGVyZm9ybWFuY2UgaXNzdWVzIGFyaXNlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgbW9yZVxuICogZ3JhbnVsYXIgY2hlY2tzL3N1cmdpY2FsIHVwZGF0ZXMgYXMgbmVlZGVkICh0aGUgc3RhdGUucmVzdWx0IGJlaW5nIHRoZSBtb3N0XG4gKiBsaWtlbHkgY2FuZGlkYXRlLCBzaW5jZSBtYW55IHR5cGVzIG9mIHN0YXRlIHVwZGF0ZXMgYWZmZWN0IHBhcnRzIG9mIHRoZVxuICogcmVzdWx0IHJvd3MpLlxuICovXG5mdW5jdGlvbiBzdGFibGVTdGF0ZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHRhcmdldDogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuICBzb3VyY2U6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPixcbik6IFJpdlRhYmxlLkZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucXVlcnksIHNvdXJjZS5xdWVyeSkpIHtcbiAgICB0YXJnZXQucXVlcnkgPSBzb3VyY2UucXVlcnk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5sb2FkLCBzb3VyY2UubG9hZCkpIHtcbiAgICB0YXJnZXQubG9hZCA9IHNvdXJjZS5sb2FkO1xuICB9XG5cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5yZXN1bHQuY3N2RGF0YSwgc291cmNlLnJlc3VsdC5jc3ZEYXRhKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RGF0YSA9IHNvdXJjZS5yZXN1bHQuY3N2RGF0YTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZGaWxlbmFtZSwgc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZSkpIHtcbiAgICB0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lID0gc291cmNlLnJlc3VsdC5jc3ZGaWxlbmFtZTtcbiAgfVxuICBpZiAoXG4gICAgIWlzRXF1YWwoXG4gICAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgIHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgIClcbiAgKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPSBzb3VyY2UucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdCwgc291cmNlLnJlc3VsdCkpIHtcbiAgICB0YXJnZXQucmVzdWx0ID0gc291cmNlLnJlc3VsdDtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmRpc3BsYXksIHNvdXJjZS5kaXNwbGF5KSkge1xuICAgIHRhcmdldC5kaXNwbGF5ID0gc291cmNlLmRpc3BsYXk7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5zZWxlY3Rpb24sIHNvdXJjZS5zZWxlY3Rpb24pKSB7XG4gICAgdGFyZ2V0LnNlbGVjdGlvbiA9IHNvdXJjZS5zZWxlY3Rpb247XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5jb2xsYXBzZVN0YXRlLCBzb3VyY2UuY29sbGFwc2VTdGF0ZSkpIHtcbiAgICB0YXJnZXQuY29sbGFwc2VTdGF0ZSA9IHNvdXJjZS5jb2xsYXBzZVN0YXRlO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWZyZXNoUmVzdWx0V2l0aDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuU291cmNlPFIsIEMsIEYsIEc+LFxuICBtb3N0UmVjZW50QWN0aW9uOiBSaXZUYWJsZS5BY3Rpb248UiwgQywgRiwgRz4sXG4pOiBBc3luY0dlbmVyYXRvcjx7XG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz47XG4gIGVmZmVjdDogUml2VGFibGUuRWZmZWN0IHwgbnVsbDtcbn0+IHtcbiAgeWllbGQge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZWZmZWN0OiBudWxsLFxuICB9O1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNvdXJjZShzdGF0ZS5xdWVyeSwgbW9zdFJlY2VudEFjdGlvbik7XG4gICAgaWYgKFRhYmxlUGFnaW5hdGlvbkhlbHBlcnMuaXNQYWdlT3V0T2ZCb3VuZHMoc3RhdGUsIHJlc3VsdCkpIHtcbiAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9IDA7XG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3Q6IG51bGwsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZHVjZTxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGFjdGlvbjogUml2VGFibGUuQWN0aW9uPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBzb3VyY2U6IFJpdlRhYmxlLlNvdXJjZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgZGVmYXVsdENvbHVtblN0YXRlOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuKTogQXN5bmNHZW5lcmF0b3I8e1xuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+O1xuICBlZmZlY3Q6IFJpdlRhYmxlLkVmZmVjdCB8IG51bGw7XG59PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlICdsb2FkJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChzdGF0ZSwgc291cmNlLCBhY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgb3JkZXI6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnb3JkZXJDb2x1bW5Ub2dnbGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICBUYWJsZU9yZGVySGVscGVycy50b2dnbGVDb2x1bW5PcmRlcihzdGF0ZSwgYWN0aW9uLmNvbHVtbiksXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NlYXJjaENvbHVtbnNDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoQ29sdW1uczogbmV3IE1hcChbXG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMsXG4gICAgICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgICAgIG1vZGU6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb2xsYXBzZVN0YXRlOiB7XG4gICAgICAgICAgICBkZWZhdWx0VG86ICdleHBhbmRlZCcsXG4gICAgICAgICAgICBjb2xsYXBzZWRIZWFkZXJzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBjb2xsYXBzZWRSb3dzOiBuZXcgU2V0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnaW5hdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cGluZ0NoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncHJldmlvdXNQYWdlTmF2aWdhdGUnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFByZXZpb3VzUGFnZShzdGF0ZSkgPz8gMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbmV4dFBhZ2VOYXZpZ2F0ZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgIHBhZ2U6XG4gICAgICAgICAgICAgICAgVGFibGVQYWdpbmF0aW9uSGVscGVycy5nZXROZXh0UGFnZShzdGF0ZSkgPz9cbiAgICAgICAgICAgICAgICBUYWJsZVBhZ2luYXRpb25IZWxwZXJzLmdldFBhZ2VDb3VudChzdGF0ZSkgLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogYWN0aW9uLnBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTaXplQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZVNpemU6IGFjdGlvbi5zaXplLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJzQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29sbGFwc2VTdGF0ZToge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgY29sbGFwc2VkSGVhZGVyczogbmV3IFNldCgpLFxuICAgICAgICAgICAgY29sbGFwc2VkUm93czogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlckFkZCc6XG4gICAgICAvLyBQYXJlbnQgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBzdWJzY3JpYmluZyBhbmQgYWRkaW5nIHRoZSBmaWx0ZXJcbiAgICAgIHlpZWxkIHsgc3RhdGU6IHsgLi4uc3RhdGUgfSwgZWZmZWN0OiBudWxsIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmdzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkbyBub3Qgb3V0cHV0IGNoYW5nZXMgd2hlbiB0cmlnZ2VyZWQgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uUGluQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5jaGFuZ2VDb2x1bW5QaW4oXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnBpbm5lZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uaW5kZXgsXG4gICAgICAgICAgYWN0aW9uLmZyZWV6ZSxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5PcmRlckNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5wcmV2aW91c0luZGV4LFxuICAgICAgICAgIGFjdGlvbi5uZXdJbmRleCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVDb2x1bW5IZWxwZXJzLm1vdmVDb2x1bW5UbyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucG9zaXRpb24sXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uRW5hYmxlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uRW5hYmxlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmFibGVBbGxDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sdW1uSGVscGVycy5lbmFibGVBbGxDb2x1bW5zKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uZW5hYmxlZCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5XaWR0aENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMuY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnByZWZlcnJlZFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbHVtbkhlbHBlcnMucmVzZXRUb0RlZmF1bHRDb2x1bW5zKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBkZWZhdWx0Q29sdW1uU3RhdGUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9LFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncm93U2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnNldFJvd1NlbGVjdGVkKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICBhY3Rpb24uc2VsZWN0ZWQsXG4gICAgICAgICAgYWN0aW9uLmNvbnRpZ3VvdXMsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlU2VsZWN0ZWRDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLnRvZ2dsZVBhZ2VTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbGxTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZVNlbGVjdGlvbkhlbHBlcnMudG9nZ2xlQWxsU2VsZWN0ZWQoc3RhdGUpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2VsZWN0aW9uQ2xlYXInOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogVGFibGVTZWxlY3Rpb25IZWxwZXJzLmNsZWFyU2VsZWN0aW9uKHN0YXRlKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlU2VsZWN0aW9uSGVscGVycy50b2dnbGVHcm91cFNlbGVjdGVkKHN0YXRlLCBhY3Rpb24ucGF5bG9hZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cHNQZXJQYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBncm91cHNQZXJQYWdlOiBhY3Rpb24uZ3JvdXBzUGVyUGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY291bnRQZXJHcm91cENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgY291bnRQZXJHcm91cDogYWN0aW9uLmNvdW50UGVyR3JvdXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZXdNb3JlS2V5Q2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICB2aWV3TW9yZUtleTogYWN0aW9uLnZpZXdNb3JlS2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgVGFibGVTZWFyY2hIZWxwZXJzLnRvZ2dsZUFsbFNlYXJjaENvbHVtbnMoc3RhdGUpLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVSb3dDb2xsYXBzZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBUYWJsZUNvbGxhcHNlSGVscGVycy50b2dnbGVSb3dDb2xsYXBzZShzdGF0ZSwgYWN0aW9uLmlkKSxcbiAgICAgICAgZWZmZWN0OiBudWxsLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RvZ2dsZUhlYWRlckNvbGxhcHNlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sbGFwc2VIZWxwZXJzLnRvZ2dsZUhlYWRlckNvbGxhcHNlKHN0YXRlLCBhY3Rpb24uaWQpLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9nZ2xlQWxsQ29sbGFwc2VkJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IFRhYmxlQ29sbGFwc2VIZWxwZXJzLnRvZ2dsZUFsbENvbGxhcHNlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgfVxufVxuIl19