@datagrok-libraries/utils 4.6.7 → 4.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # utils changelog
2
2
 
3
+ ## 4.6.9 (2025-10-09)
4
+
5
+ Query builder: converting strings in dates inputs
6
+
7
+ ## 4.6.8 (2025-09-24)
8
+
9
+ Query builder: allow empty values for string input with 'equal' and 'not equat' operators
10
+
11
+ ## 4.6.7 (2025-09-24)
12
+
13
+ Additional parameters for application header renderer
14
+
3
15
  ## 4.6.1 (2025-07-28)
4
16
 
5
17
  Expect support dayjs
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.6.7",
11
+ "version": "4.6.9",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["query-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["query-builder.ts"],"names":[],"mappings":"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"}
@@ -69,11 +69,16 @@ export class BaseConditionEditor {
69
69
  return __awaiter(this, void 0, void 0, function* () {
70
70
  if (Array.isArray(this.condition.value))
71
71
  this.condition.value = undefined;
72
- const initVal = prop.type === DG.TYPE.DATE_TIME && typeof this.condition.value === 'string' ?
73
- dayjs(this.condition.value) : this.condition.value;
72
+ if (prop.type === DG.TYPE.DATE_TIME && typeof this.condition.value === 'string') {
73
+ this.condition.value = dayjs(this.condition.value);
74
+ this.onChanged.next(this.condition);
75
+ }
76
+ //allow null value for '=' and '!=' for string type to create 'is empty', 'is not empty' condition
77
+ const nullable = prop.type === DG.TYPE.STRING &&
78
+ (this.condition.operator === Operators.EQ || this.condition.operator === Operators.NOT_EQ);
74
79
  const input = ui.input.forProperty(prop, undefined, {
75
- value: initVal,
76
- nullable: false,
80
+ value: this.condition.value,
81
+ nullable: nullable,
77
82
  onValueChanged: () => {
78
83
  this.condition.value = input.value;
79
84
  this.onChanged.next(this.condition);
@@ -746,4 +751,4 @@ function suggestionMenuKeyNavigation(inputContainer) {
746
751
  allItems[currentIndex].classList.add('d4-menu-item-hover');
747
752
  });
748
753
  }
749
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFB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QkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgJy4uLy4uL2Nzcy9xdWVyeS1idWlsZGVyLmNzcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuXG5leHBvcnQgY29uc3QgU1VHR0VTVElPTlNfRlVOQ1RJT04gPSAnc3VnZ2VzdGlvbnNGdW5jdGlvbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgT3BlcmF0b3JzIHtcbiAgICBleHBvcnQgY29uc3QgQ09OVEFJTlMgPSAnY29udGFpbnMnO1xuICAgIGV4cG9ydCBjb25zdCBJTiA9ICdpbic7XG4gICAgZXhwb3J0IGNvbnN0IFNUQVJUU19XSVRIID0gJ3N0YXJ0cyB3aXRoJztcbiAgICBleHBvcnQgY29uc3QgRU5EU19XSVRIID0gJ2VuZHMgd2l0aCc7XG4gICAgZXhwb3J0IGNvbnN0IEdUID0gJz4nO1xuICAgIGV4cG9ydCBjb25zdCBHVEUgPSAnPj0nO1xuICAgIGV4cG9ydCBjb25zdCBMVCA9ICc8JztcbiAgICBleHBvcnQgY29uc3QgTFRFID0gJzw9JztcbiAgICBleHBvcnQgY29uc3QgRVEgPSAnPSc7XG4gICAgZXhwb3J0IGNvbnN0IE5PVF9FUSA9ICchPSc7XG4gICAgZXhwb3J0IGNvbnN0IEJFRk9SRSA9ICdiZWZvcmUnO1xuICAgIGV4cG9ydCBjb25zdCBBRlRFUiA9ICdhZnRlcic7XG4gICAgZXhwb3J0IGNvbnN0IE9OID0gJ29uJztcbiAgICBleHBvcnQgY29uc3QgQkVUV0VFTiA9ICdiZXR3ZWVuJztcbiAgICBleHBvcnQgY29uc3QgSVNfU0lNSUxBUiA9ICdpcyBzaW1pbGFyJztcbiAgICBleHBvcnQgY29uc3QgSVNfQ09OVEFJTkVEID0gJ2lzIGNvbnRhaW5lZCc7XG5cbiAgICBleHBvcnQgZW51bSBMb2dpY2FsIHtcbiAgICAgICAgYW5kID0gJ2FuZCcsXG4gICAgICAgIG9yID0gJ29yJyxcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFF1ZXJ5QnVpbGRlckxheW91dCB7XG4gICAgU3RhbmRhcmQgPSAnc3RhbmRhcmQnLFxuICAgIE5hcnJvdyA9ICduYXJyb3cnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlQ29uZGl0aW9uPFQgPSBhbnk+IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiBzdHJpbmc7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxleENvbmRpdGlvbiB7XG4gICAgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbDtcbiAgICBjb25kaXRpb25zOiBFeHByZXNzaW9uW107XG59XG5cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb248VCA9IGFueT4gPSBTaW1wbGVDb25kaXRpb248VD4gfCBDb21wbGV4Q29uZGl0aW9uO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlQ29uZGl0aW9uRWRpdG9yPFQgPSBhbnk+IHtcbiAgICByb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmRpdigpO1xuICAgIGNvbmRpdGlvbjogU2ltcGxlQ29uZGl0aW9uPFQ+O1xuICAgIG9uQ2hhbmdlZDogU3ViamVjdDxTaW1wbGVDb25kaXRpb248VD4+ID0gbmV3IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPFQ+PigpO1xuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBzaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICBzdWdnZXN0aW9uc01lbnVDbGlja2VkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gPz8ge1xuICAgICAgICAgICAgZmllbGQ6IHByb3AubmFtZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQgYXMgVFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmluaXRpYWxpemVFZGl0b3IocHJvcCkudGhlbigoaW5wdXRzKSA9PiB7XG4gICAgICAgICAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25FcnJvci5uZXh0KCFpbnB1dC52YWxpZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYoaW5wdXRzLnNvbWUoKGl0KSA9PiAhaXQudmFsaWRhdGUoKSkpXG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25FcnJvci5uZXh0KHRydWUpOztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gdW5kZWZpbmVkIGFzIFQ7XG4gICAgICAgIGNvbnN0IGluaXRWYWwgPSBwcm9wLnR5cGUgPT09IERHLlRZUEUuREFURV9USU1FICYmIHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgZGF5anModGhpcy5jb25kaXRpb24udmFsdWUgYXMgc3RyaW5nKSA6IHRoaXMuY29uZGl0aW9uLnZhbHVlO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IGluaXRWYWwsXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gaW5wdXQudmFsdWUgYXMgVDtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Z2dlc3Rpb25zKHByb3AsIGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0LmFkZENhcHRpb24oJycpO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdWdnZXN0aW9ucyhwcm9wLCBpbnB1dCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVTdWdnZXN0aW9ucyhwcm9wOiBERy5Qcm9wZXJ0eSwgaW5wdXQ6IERHLklucHV0QmFzZSkge1xuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHByb3AudHlwZSA9PT0gREcuVFlQRS5TVFJJTkcgJiYgcHJvcC5vcHRpb25zW1NVR0dFU1RJT05TX0ZVTkNUSU9OXTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgIHN1Z2dlc3Rpb25NZW51S2V5TmF2aWdhdGlvbih0aGlzLnJvb3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYWRkU3VnZ2VzdGlvbnMocHJvcDogREcuUHJvcGVydHksIGlucHV0OiBERy5JbnB1dEJhc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb25zICYmICF0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IEFycmF5PHN0cmluZz4gPSBhd2FpdCBwcm9wLm9wdGlvbnNbU1VHR0VTVElPTlNfRlVOQ1RJT05dKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPT09IDEgJiYgc3VnZ2VzdGlvbnNbMF0gPT09IGlucHV0LnZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc01lbnUhLml0ZW0ocywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNNZW51Q2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zTWVudS5zaG93KHsgZWxlbWVudDogaW5wdXQucm9vdCwgeTogaW5wdXQucm9vdC5vZmZzZXRIZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbi52YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmNvbmRpdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gW3RoaXMuY29uZGl0aW9uLnZhbHVlLCB1bmRlZmluZWRdO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQxID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWVbMF0sXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlWzBdID0gaW5wdXQxLnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0MS5hZGRDYXB0aW9uKCcnKTtcbiAgICAgICAgY29uc3QgaW5wdXQyID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWVbMV0sXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlWzFdID0gaW5wdXQyLnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0Mi5hZGRDYXB0aW9uKCcnKTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZIKFtpbnB1dDEucm9vdCwgaW5wdXQyLnJvb3RdLCB7IHN0eWxlOiB7IGdhcDogJzEwcHgnIH0gfSkpO1xuICAgICAgICByZXR1cm4gW2lucHV0MSwgaW5wdXQyXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29sZWFuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbJ3RydWUnLCAnZmFsc2UnXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBvcHRpb25zLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgcmV0dXJuIFtpbnB1dF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPHN0cmluZz4ge1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIC8vaWYgd2Ugc3dpdGggZnJvbSBzaW1pbGFyaXR5IGlucHV0IHRvIHN0YW5kYXJkIG1vbGVjdWxlIGlucHV0IC0gbmVlZCB0byBtb2RpZnkgdmFsdWVcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uLnZhbHVlICYmIHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgnbW9sZWN1bGUnIGluIHRoaXMuY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9ICh0aGlzLmNvbmRpdGlvbi52YWx1ZSBhcyBNb2xlY3VsZVNpbWlsYXJpdHkpLm1vbGVjdWxlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5tb2xlY3VsZSgnJywge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgLy90byBhZGp1c3QgdGhlIGZpbHRlciB3aWR0aCBjb25zaWRlcmluZyBtb2xlY3VsZSBpbnB1dFxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUucGFkZGluZ1RvcCA9ICcxNXB4JztcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnMTVweCc7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9sZWN1bGVTaW1pbGFyaXR5ID0ge1xuICAgIG1vbGVjdWxlOiBzdHJpbmcsXG4gICAgdGhyZXNob2xkOiBudW1iZXJcbn1cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPE1vbGVjdWxlU2ltaWxhcml0eT4ge1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIC8vaW4gY2FzZSB3ZSBzd2l0Y2ggZnJvbSBzb21lIG90aGVyIG9wZXJhdG9yLCB3aGVyZSB2YWx1ZSBpcyBhIHN0cmluZyAoY29udGFpbnMsIGlzIGNvbnRhaW5lZClcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbi52YWx1ZSB8fCB0eXBlb2YgdGhpcy5jb25kaXRpb24udmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IHttb2xlY3VsZTogdGhpcy5jb25kaXRpb24udmFsdWUgPz8gJycsIHRocmVzaG9sZDogMC43fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2xlY3VsZUlucHV0ID0gdWkuaW5wdXQubW9sZWN1bGUoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZS5tb2xlY3VsZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUubW9sZWN1bGUgPSBtb2xlY3VsZUlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHJlc2hvbGRJbnB1dCA9IHVpLmlucHV0LmZsb2F0KCcnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWUudGhyZXNob2xkLFxuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgc3RlcDogMC4wMVxuICAgICAgICB9KTtcbiAgICAgICAgREcuZGVib3VuY2UodHJlc2hvbGRJbnB1dC5vbkNoYW5nZWQsIDMwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlLnRocmVzaG9sZCA9IHRyZXNob2xkSW5wdXQudmFsdWUhO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodWkuZGl2VihbbW9sZWN1bGVJbnB1dC5yb290LCB0cmVzaG9sZElucHV0LnJvb3RdKSk7XG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5wYWRkaW5nVG9wID0gJzE1cHgnO1xuICAgICAgICByZXR1cm4gW21vbGVjdWxlSW5wdXQsIHRyZXNob2xkSW5wdXRdO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvclN0cmluZyBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8c3RyaW5nW10+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSEubWFwKChpdCkgPT4gcGFyc2VJbnQoaXQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JGbG9hdCBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8bnVtYmVyW10+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUZsb2F0KGl0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG59XG5cbi8vIFJlZ2lzdHJ5IGZvciBib3RoIG9wZXJhdG9ycyBhbmQgZWRpdG9yc1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJlZ2lzdHJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQ29uZGl0aW9uUmVnaXN0cnk7XG4gICAgcHJpdmF0ZSB0eXBlT3BlcmF0b3JzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzZW1UeXBlT3BlcmF0b3JzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBlZGl0b3JSZWdpc3RyeTogTWFwPHN0cmluZywgbmV3IChwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IGFueSkgPT4gQmFzZUNvbmRpdGlvbkVkaXRvcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0T3BlcmF0b3JzKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRFZGl0b3JzKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCk6IENvbmRpdGlvblJlZ2lzdHJ5IHtcbiAgICAgICAgaWYgKCFDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgQ29uZGl0aW9uUmVnaXN0cnkuaW5zdGFuY2UgPSBuZXcgQ29uZGl0aW9uUmVnaXN0cnkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uUmVnaXN0cnkuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdE9wZXJhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgLy8gVHlwZSBvcGVyYXRvcnNcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5CT09MLCBbT3BlcmF0b3JzLkVRXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuU1RSSU5HLCBbT3BlcmF0b3JzLlNUQVJUU19XSVRILCBPcGVyYXRvcnMuQ09OVEFJTlMsIE9wZXJhdG9ycy5FUSwgT3BlcmF0b3JzLk5PVF9FUSwgT3BlcmF0b3JzLklOXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuSU5ULCBbT3BlcmF0b3JzLkdULCBPcGVyYXRvcnMuTFQsIE9wZXJhdG9ycy5HVEUsIE9wZXJhdG9ycy5MVEUsIE9wZXJhdG9ycy5FUSxcbiAgICAgICAgICAgIE9wZXJhdG9ycy5OT1RfRVEsIE9wZXJhdG9ycy5CRVRXRUVOLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5GTE9BVCwgW09wZXJhdG9ycy5HVCwgT3BlcmF0b3JzLkxULCBPcGVyYXRvcnMuR1RFLCBPcGVyYXRvcnMuTFRFLCBPcGVyYXRvcnMuRVEsXG4gICAgICAgICAgICBPcGVyYXRvcnMuTk9UX0VRLCBPcGVyYXRvcnMuQkVUV0VFTiwgT3BlcmF0b3JzLklOXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuREFURV9USU1FLCBbT3BlcmF0b3JzLkJFRk9SRSwgT3BlcmF0b3JzLkFGVEVSLCBPcGVyYXRvcnMuQkVUV0VFTl0pO1xuXG4gICAgICAgIC8vIFNlbVR5cGUgb3BlcmF0b3JzICh0YWtlIHByZWNlZGVuY2Ugb3ZlciB0eXBlIG9wZXJhdG9ycylcbiAgICAgICAgdGhpcy5yZWdpc3RlclNlbVR5cGVPcGVyYXRvcnMoREcuU0VNVFlQRS5NT0xFQ1VMRSwgW09wZXJhdG9ycy5DT05UQUlOUywgT3BlcmF0b3JzLklTX0NPTlRBSU5FRCwgT3BlcmF0b3JzLkVRLCBPcGVyYXRvcnMuSVNfU0lNSUxBUl0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZURlZmF1bHRFZGl0b3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBSZWdpc3RlciBkZWZhdWx0IGVkaXRvcnMgYnkgcHJvcGVydHkgdHlwZSAod2l0aCBlbXB0eSBzZW1UeXBlIGFuZCBvcGVyYXRvcilcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkZMT0FULCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuREFURV9USU1FLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuQk9PTCwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcblxuICAgICAgICAvLyBSZWdpc3RlciBzcGVjaWFsaXplZCBlZGl0b3JzIGZvciBzcGVjaWZpYyBjb21iaW5hdGlvbnNcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvclN0cmluZyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5JTlQsICcnLCBPcGVyYXRvcnMuSU4sIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuRkxPQVQsICcnLCBPcGVyYXRvcnMuSU4sIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JGbG9hdCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5EQVRFX1RJTUUsICcnLCBPcGVyYXRvcnMuQkVUV0VFTiwgQmV0d2VlbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5JTlQsICcnLCBPcGVyYXRvcnMuQkVUV0VFTiwgQmV0d2VlbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5GTE9BVCwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLkNPTlRBSU5TLCBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5JU19DT05UQUlORUQsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLkVRLCBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5JU19TSU1JTEFSLCBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuQk9PTCwgJycsIE9wZXJhdG9ycy5FUSwgQm9vbGVhbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgfVxuXG4gICAgLy8gT3BlcmF0b3IgcmVnaXN0cmF0aW9uIG1ldGhvZHNcbiAgICByZWdpc3RlclR5cGVPcGVyYXRvcnMocHJvcGVydHlUeXBlOiBzdHJpbmcsIG9wZXJhdG9yczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50eXBlT3BlcmF0b3JzLnNldChwcm9wZXJ0eVR5cGUsIG9wZXJhdG9ycyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJTZW1UeXBlT3BlcmF0b3JzKHNlbVR5cGU6IHN0cmluZywgb3BlcmF0b3JzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbVR5cGVPcGVyYXRvcnMuc2V0KHNlbVR5cGUsIG9wZXJhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IG9wZXJhdG9ycyBmb3IgYSBwcm9wZXJ0eVxuICAgIGdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSk6IHN0cmluZ1tdIHtcbiAgICAgICAgLy8gQ2hlY2sgc2VtVHlwZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdHlwZVxuICAgICAgICBjb25zdCBzZW1UeXBlT3BzID0gdGhpcy5zZW1UeXBlT3BlcmF0b3JzLmdldChwcm9wZXJ0eS5zZW1UeXBlKTtcbiAgICAgICAgaWYgKHNlbVR5cGVPcHMpIHJldHVybiBzZW1UeXBlT3BzO1xuXG4gICAgICAgIGNvbnN0IHR5cGVPcHMgPSB0aGlzLnR5cGVPcGVyYXRvcnMuZ2V0KHByb3BlcnR5LnByb3BlcnR5VHlwZSk7XG4gICAgICAgIHJldHVybiB0eXBlT3BzIHx8IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG9wZXJhdG9yIGlzIHN1cHBvcnRlZFxuICAgIGlzT3BlcmF0b3JTdXBwb3J0ZWQocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JzLmluY2x1ZGVzKG9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvLyBFZGl0b3IgcmVnaXN0cmF0aW9uIG1ldGhvZHNcbiAgICByZWdpc3RlckVkaXRvcjxUPihcbiAgICAgICAgcHJvcGVydHlUeXBlOiBzdHJpbmcsXG4gICAgICAgIHNlbVR5cGU6IHN0cmluZyxcbiAgICAgICAgb3BlcmF0b3I6IHN0cmluZyxcbiAgICAgICAgZWRpdG9yQ2xhc3M6IG5ldyAocHJvcDogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcpID0+IEJhc2VDb25kaXRpb25FZGl0b3I8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHlUeXBlLCBzZW1UeXBlLCBvcGVyYXRvcik7XG4gICAgICAgIHRoaXMuZWRpdG9yUmVnaXN0cnkuc2V0KGtleSwgZWRpdG9yQ2xhc3MpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBlZGl0b3IgZm9yIGEgcHJvcGVydHkgYW5kIG9wZXJhdG9yXG4gICAgY3JlYXRlRWRpdG9yPFQ+KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPik6IEJhc2VDb25kaXRpb25FZGl0b3I8VD4ge1xuICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHNwZWNpYWxpemVkIGVkaXRvciBmaXJzdCAocHJvcGVydHlUeXBlICsgc2VtVHlwZSArIG9wZXJhdG9yKVxuICAgICAgICBjb25zdCBzcGVjaWFsaXplZEtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgcHJvcGVydHkuc2VtVHlwZSwgb3BlcmF0b3IpO1xuICAgICAgICBsZXQgRWRpdG9yQ2xhc3MgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LmdldChzcGVjaWFsaXplZEtleSk7XG5cbiAgICAgICAgLy8gSWYgbm8gc3BlY2lhbGl6ZWQgZWRpdG9yLCB0cnkgd2l0aCBlbXB0eSBzZW1UeXBlIChwcm9wZXJ0eVR5cGUgKyBvcGVyYXRvcilcbiAgICAgICAgaWYgKCFFZGl0b3JDbGFzcykge1xuICAgICAgICAgICAgY29uc3QgdHlwZU9ubHlLZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUsICcnLCBvcGVyYXRvcik7XG4gICAgICAgICAgICBFZGl0b3JDbGFzcyA9IHRoaXMuZWRpdG9yUmVnaXN0cnkuZ2V0KHR5cGVPbmx5S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHN0aWxsIG5vIHNwZWNpYWxpemVkIGVkaXRvciwgdXNlIGRlZmF1bHQgZWRpdG9yIGZvciBwcm9wZXJ0eSB0eXBlIChwcm9wZXJ0eVR5cGUgb25seSlcbiAgICAgICAgaWYgKCFFZGl0b3JDbGFzcykge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgJycsICcnKTtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5nZXQoZGVmYXVsdEtleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayB0byBiYXNlIGVkaXRvclxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBFZGl0b3JDbGFzcyA9IEJhc2VDb25kaXRpb25FZGl0b3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEVkaXRvckNsYXNzKHByb3BlcnR5LCBvcGVyYXRvciwgaW5pdGlhbENvbmRpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNvbmRpdGlvbiBlZGl0b3IgZm9yIGEgcHJvcGVydHkgYW5kIG9wZXJhdG9yICh3aXRoIHZhbGlkYXRpb24pXG4gICAgZ2V0Q29uZGl0aW9uRWRpdG9yPFQgPSBhbnk+KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgY29uZGl0aW9uPzogU2ltcGxlQ29uZGl0aW9uPFQ+KTogQmFzZUNvbmRpdGlvbkVkaXRvcjxUPiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlcmF0b3JTdXBwb3J0ZWQocHJvcGVydHksIG9wZXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRWRpdG9yKHByb3BlcnR5LCBvcGVyYXRvciwgY29uZGl0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBPcGVyYXRvciAnJHtvcGVyYXRvcn0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3BlcnR5IHR5cGUgJyR7cHJvcGVydHkucHJvcGVydHlUeXBlfSdgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5VHlwZTogc3RyaW5nLCBzZW1UeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHlUeXBlfToke3NlbVR5cGV9OiR7b3BlcmF0b3J9YDtcbiAgICB9XG59XG5cblxuZXhwb3J0IHR5cGUgSGlzdG9yeUl0ZW0gPSB7XG4gICAgZGF0ZTogREcuVFlQRS5EQVRFX1RJTUUsXG4gICAgdmFsdWU6IHN0cmluZyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVIaXN0b3J5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGNvbGxlY3Rpb246IEhpc3RvcnlJdGVtW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gJ1tdJyk7XG4gICAgY29uc3QgbmV3SXRlbSA9IHsgZGF0ZTogbmV3IERhdGUoKSwgdmFsdWU6IHZhbHVlIH07XG4gICAgaWYgKCFjb2xsZWN0aW9uLmxlbmd0aClcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbbmV3SXRlbV0pKTtcbiAgICBlbHNlIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZmlsdGVyKChpdCkgPT4gaXQudmFsdWUgIT09IHZhbHVlKVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KFtuZXdJdGVtLCAuLi5jb2xsZWN0aW9uLnNsaWNlKDAsIDkpXSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpc3Rvcnkoa2V5OiBzdHJpbmcpOiBIaXN0b3J5SXRlbVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/ICdbXScpO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyIHtcbiAgICByb290OiBIVE1MRWxlbWVudDtcbiAgICBjb25kaXRpb246IENvbXBsZXhDb25kaXRpb247XG4gICAgcHJvcGVydGllczogREcuUHJvcGVydHlbXTtcbiAgICBzdHJ1Y3R1cmVDaGFuZ2VkOiBTdWJqZWN0PENvbXBsZXhDb25kaXRpb24+ID0gbmV3IFN1YmplY3Q8Q29tcGxleENvbmRpdGlvbj4oKTtcbiAgICBmaWx0ZXJWYWx1ZUNoYW5nZWQ6IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPiA9IG5ldyBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbj4oKTtcbiAgICB2YWxpZGF0aW9uRXJyb3I6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIGludmFsaWQgPSBmYWxzZTtcbiAgICBsYXlvdXQ6IFF1ZXJ5QnVpbGRlckxheW91dDtcbiAgICBwcml2YXRlIF9oaXN0b3J5Q2FjaGVLZXk6IHN0cmluZztcbiAgICBwcml2YXRlIGhpc3RvcnlJY29uOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgaGlzdG9yeUljb25PblRvcCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogREcuUHJvcGVydHlbXSwgaW5pdGlhbENvbmRpdGlvbj86IENvbXBsZXhDb25kaXRpb24sIGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0ID0gUXVlcnlCdWlsZGVyTGF5b3V0LlN0YW5kYXJkLFxuICAgICAgICBoaXN0b3J5Q2FjaGVLZXk6IHN0cmluZyA9ICcnLCBoaXN0b3J5SWNvbk9uVG9wID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlDYWNoZUtleSA9IGhpc3RvcnlDYWNoZUtleTtcbiAgICAgICAgdGhpcy5oaXN0b3J5SWNvbk9uVG9wID0gaGlzdG9yeUljb25PblRvcDtcbiAgICAgICAgXG4gICAgICAgIGlmIChpbml0aWFsQ29uZGl0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29uZGl0aW9uID0gdGhpcy5jcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtkZWZhdWx0Q29uZGl0aW9uXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMuYnVpbGRVSSh0aGlzLmNvbmRpdGlvbiwgdW5kZWZpbmVkLCAwKTtcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7XG4gICAgfVxuXG4gICAgc2V0IGhpc3RvcnlDYWNoZShrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9oaXN0b3J5Q2FjaGVLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuc2V0dXBIaXN0b3J5SWNvbigpOyAvLyBUaGlzIHdpbGwgY29udHJvbCB2aXNpYmlsaXR5XG4gICAgfVxuXG4gICAgc2F2ZUNvbmRpdGlvblRvSGlzdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2hpc3RvcnlDYWNoZUtleSlcbiAgICAgICAgICAgIHNhdmVIaXN0b3J5KHRoaXMuX2hpc3RvcnlDYWNoZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25kaXRpb24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSGlzdG9yeUljb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oaXN0b3J5SWNvbikge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5SWNvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dIaXN0b3J5TWVudSgpO1xuICAgICAgICAgICAgfSwgJ1F1ZXJ5IEhpc3RvcnknKTtcblxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5SWNvbi5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLWhpc3RvcnktaWNvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGlzdG9yeUljb25PblRvcClcbiAgICAgICAgICAgIHRoaXMucm9vdC5wcmVwZW5kKHRoaXMuaGlzdG9yeUljb24pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5oaXN0b3J5SWNvbik7XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgZGF0YSBhdHRyaWJ1dGUgZm9yIENTUyB0byBjb250cm9sIHZpc2liaWxpdHlcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnNldEF0dHJpYnV0ZSgnZGF0YS1oaXN0b3J5JywgdGhpcy5faGlzdG9yeUNhY2hlS2V5ICA9PT0gJycgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0hpc3RvcnlNZW51KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtczogSGlzdG9yeUl0ZW1bXSA9IGdldEhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5KTtcbiAgICAgICAgY29uc3QgbWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgbWVudS5pdGVtcyhpdGVtcy5tYXAoKGl0KSA9PiB1aS50b29scy5jbGljayhcbiAgICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQoaXQuZGF0ZS50b1N0cmluZygpLCB7c3R5bGU6IHtjb2xvcjogJyM3OTkwQTUnfX0pLFxuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQodGhpcy5jb25kaXRpb25Ub1N0cmluZyhKU09OLnBhcnNlKGl0LnZhbHVlKSBhcyBDb21wbGV4Q29uZGl0aW9uKSksXG4gICAgICAgICAgICBdLCB7c3R5bGU6IHtnYXA6ICc1cHgnfX0pLFxuICAgICAgICAoKSA9PiB7dGhpcy5sb2FkQ29uZGl0aW9uKEpTT04ucGFyc2UoaXQudmFsdWUpKX0pKSwgKCkgPT4ge30pO1xuICAgICAgICBtZW51LnNob3coKTtcbiAgICB9XG5cbiAgICBsb2FkQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9uKSk7XG4gICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICB9XG5cbiAgICBjb25kaXRpb25Ub1N0cmluZyhjb25kaXRpb246IENvbXBsZXhDb25kaXRpb24pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uZGl0aW9uLmNvbmRpdGlvbnMgfHwgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ05vIGNvbmRpdGlvbnMnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBjb25kaXRpb24sIGRvbid0IHdyYXAgaXQgaW4gbG9naWNhbCBvcGVyYXRvclxuICAgICAgICBpZiAoY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVG9TdHJpbmcoY29uZGl0aW9uLmNvbmRpdGlvbnNbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIG11bHRpcGxlIGNvbmRpdGlvbnMsIHdyYXAgdGhlbSBpbiBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcCA9IGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPT09IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA/ICdBTkQnIDogJ09SJztcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3RyaW5ncyA9IGNvbmRpdGlvbi5jb25kaXRpb25zLm1hcChjb25kID0+IHRoaXMuZXhwcmVzc2lvblRvU3RyaW5nKGNvbmQpKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBgKCR7Y29uZGl0aW9uU3RyaW5ncy5qb2luKGAgJHtsb2dpY2FsT3B9IGApfSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwcmVzc2lvblRvU3RyaW5nKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgICAgICBpZiAoJ2ZpZWxkJyBpbiBleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgU2ltcGxlQ29uZGl0aW9uXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW1wbGVDb25kaXRpb25Ub1N0cmluZyhleHByZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBDb21wbGV4Q29uZGl0aW9uIChyZWN1cnNpdmUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyhleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2ltcGxlQ29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBTaW1wbGVDb25kaXRpb24pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbmRpdGlvbi5maWVsZCB8fCAnVW5rbm93biBmaWVsZCc7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yID0gY29uZGl0aW9uLm9wZXJhdG9yIHx8ICdVbmtub3duIG9wZXJhdG9yJztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25kaXRpb24udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjb25kaXRpb24udmFsdWUgIT09IG51bGwgPyBcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGNvbmRpdGlvbi52YWx1ZSkgPyBgWyR7Y29uZGl0aW9uLnZhbHVlLmpvaW4oJywgJyl9XWAgOiBTdHJpbmcoY29uZGl0aW9uLnZhbHVlKSkgOiBcbiAgICAgICAgICAgICdObyB2YWx1ZSc7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYCR7ZmllbGR9ICR7b3BlcmF0b3J9ICR7dmFsdWV9YDtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk6IFNpbXBsZUNvbmRpdGlvbiB7XG4gICAgICAgIGNvbnN0IGZpcnN0UHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNbMF07XG4gICAgICAgIGlmIChmaXJzdFByb3BlcnR5KSB7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSByZWdpc3RyeS5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShmaXJzdFByb3BlcnR5KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0T3BlcmF0b3IgPSBvcGVyYXRvcnNbMF07XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IGZpcnN0UHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogZmlyc3RPcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJydcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICByZWJ1aWxkVUkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1Jvb3QgPSB0aGlzLmJ1aWxkVUkodGhpcy5jb25kaXRpb24sIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgIHRoaXMucm9vdC5yZXBsYWNlV2l0aChuZXdSb290KTtcbiAgICAgICAgdGhpcy5yb290ID0gbmV3Um9vdDtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlY3JlYXRlIGhpc3RvcnkgaWNvbiBhZnRlciByZWJ1aWxkaW5nIFVJXG4gICAgICAgIHRoaXMuc2V0dXBIaXN0b3J5SWNvbigpO1xuICAgIH1cblxuICAgIHNldExheW91dChsYXlvdXQ6IFF1ZXJ5QnVpbGRlckxheW91dCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93KVxuICAgICAgICAgICAgdGhpcy5yb290LmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItbmFycm93Jyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucm9vdC5jbGFzc0xpc3QucmVtb3ZlKCdxdWVyeS1idWlsZGVyLW5hcnJvdycpO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCBhbGwgZmlsdGVyIGNvbnRhaW5lcnMgYW5kIGFwcGx5L3JlbW92ZSBsYXlvdXQgY2xhc3Nlc1xuICAgICAgICBjb25zdCBmaWx0ZXJDb250YWluZXJzID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMsIC5xdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMtbmFycm93Jyk7XG4gICAgICAgIFxuICAgICAgICBmaWx0ZXJDb250YWluZXJzLmZvckVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGlmIChsYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldExheW91dCgpOiBRdWVyeUJ1aWxkZXJMYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XG4gICAgfVxuXG4gICAgYnVpbGRVSShcbiAgICAgICAgY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICBwYXJlbnRDb25kaXRpb24/OiBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICBuZXN0aW5nTGV2ZWw6IG51bWJlciA9IDBcbiAgICApOiBIVE1MRWxlbWVudCB7XG5cbiAgICAgICAgLy9yZXNldCB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLmludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IubmV4dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbiA9IChjb25kVG9SZW1vdmU6IEV4cHJlc3Npb24sIGNvbmRBcnJheT86IEV4cHJlc3Npb25bXSwgcmVwbGFjZUNvbmQ/OiBDb21wbGV4Q29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZEFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZElkeCA9IGNvbmRBcnJheS5pbmRleE9mKGNvbmRUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRJZHggIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlQ29uZCA/IGNvbmRBcnJheVtjb25kSWR4XSA9IHJlcGxhY2VDb25kIDogY29uZEFycmF5LnNwbGljZShjb25kSWR4LCAxKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVByb3BlcnR5RmlsdGVyQ29udGFpbmVyID0gKGNvbmQ6IFNpbXBsZUNvbmRpdGlvbiwgcGFyZW50Q29uZGl0aW9uPzogQ29tcGxleENvbmRpdGlvbikgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkob3BlcmF0b3JJbnB1dERpdik7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBnZXRQcm9wQnlGcmllbmRseU5hbWUoZmllbGRDaG9pY2VJbnB1dC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAvL2luIGNhc2Ugb2YgYm9vbGVhbiBpbnB1dCB3ZSBuZWVkIHRvIGhpZGUgb3BlcmF0b3JzIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09PSBERy5UWVBFLkJPT0wpXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYm9vbGVhbi1pbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnYm9vbGVhbi1pbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHJlZ2lzdHJ5LmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kLm9wZXJhdG9yIHx8IGNvbmQub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gb3BlcmF0b3JzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoY29uZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb25kLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IG9wZXJhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciA9IG9wZXJhdG9yc0lucHV0LnZhbHVlITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9ySW5wdXREaXYuYXBwZW5kKG9wZXJhdG9yc0lucHV0LnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFZGl0b3IocHJvcGVydHksIGNvbmQub3BlcmF0b3IsIGNvbmQpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUVkaXRvciA9IChwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGNvbmRpdGlvbjogU2ltcGxlQ29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkoY3JpdGVyaWFEaXYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSByZWdpc3RyeS5nZXRDb25kaXRpb25FZGl0b3IocHJvcGVydHksIG9wZXJhdG9yLCBjb25kaXRpb24pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChlZGl0b3IuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub25WYWxpZGF0aW9uRXJyb3Iuc3Vic2NyaWJlKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IubmV4dChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3JpdGVyaWFEaXYuYXBwZW5kKGVkaXRvci5yb290KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2V0UHJvcEJ5TmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdldFByb3BCeUZyaWVuZGx5TmFtZSA9IChmcmllbmRseU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5mcmllbmRseU5hbWUgPT09IGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AubmFtZSA9PT0gZnJpZW5kbHlOYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdldEZpZWxkQ2hvaWNlSW5wdXRWYWwgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGdldFByb3BCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A/LmZyaWVuZGx5TmFtZSA/PyBwcm9wPy5uYW1lID8/ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRQcm9wTmFtZUJ5Q2hvaWNlSW5wdXRWYWwgPSAoZnJpZW5kbHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gZ2V0UHJvcEJ5RnJpZW5kbHlOYW1lKGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A/Lm5hbWUgPz8gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmQuZmllbGQgPz89IHRoaXMucHJvcGVydGllc1swXT8ubmFtZSB8fCAnJztcblxuICAgICAgICAgICAgY29uc3QgZmllbGRDaG9pY2VJbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnByb3BlcnRpZXMubWFwKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5mcmllbmRseU5hbWUgPz8gcHJvcC5uYW1lKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZ2V0RmllbGRDaG9pY2VJbnB1dFZhbChjb25kLmZpZWxkKSxcbiAgICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZC5maWVsZCA9IGdldFByb3BOYW1lQnlDaG9pY2VJbnB1dFZhbChmaWVsZENob2ljZUlucHV0LnZhbHVlISk7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoY29uZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUZpZWxkSWNvbiA9IHVpLmljb25zLmRlbGV0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGZpbHRlckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uKGNvbmQsIHBhcmVudENvbmRpdGlvbiA/IHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zIDogY29uZGl0aW9uLmNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfSwgJ1JlbW92ZSBjdXJyZW50IGNvbmRpdGlvbicpO1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXN0ZWRDb25kaXRpb25JY29uID0gdWkuaWNvbnMuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb25kID0geyBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCwgY29uZGl0aW9uczogW2NvbmRdIH07XG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uKGNvbmQsIHBhcmVudENvbmRpdGlvbiA/IHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zIDogY29uZGl0aW9uLmNvbmRpdGlvbnMsIHBhcmVudENvbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuXG4gICAgICAgICAgICB9LCAnQWRkIG5lc3RlZCBjb25kaXRpb24nKTtcblxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JJbnB1dERpdiA9IHVpLmRpdignJywgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLW9wZXJhdG9yJyk7XG4gICAgICAgICAgICBjb25zdCBjcml0ZXJpYURpdiA9IHVpLmRpdigpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJDb250YWluZXIgPSB1aS5kaXYoW1xuICAgICAgICAgICAgICAgIHVpLmRpdihbZmllbGRDaG9pY2VJbnB1dC5yb290XSwgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWZpZWxkJyksXG4gICAgICAgICAgICAgICAgdWkuZGl2KFtvcGVyYXRvcklucHV0RGl2XSwgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLW9wZXJhdG9yJyksXG4gICAgICAgICAgICAgICAgdWkuZGl2KFtjcml0ZXJpYURpdl0sICdxdWVyeS1idWlsZGVyLWZpbHRlci12YWx1ZScpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbYWRkTmVzdGVkQ29uZGl0aW9uSWNvbiwgZGVsZXRlRmllbGRJY29uXSwgJ2FkZC1kZWxldGUtaWNvbnMnKVxuICAgICAgICAgICAgXSwgdGhpcy5sYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cgPyAncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycgOiAncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmaWx0ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgY3JlYXRlRmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkaW5nIGZpbHRlciBmaWVsZFxuICAgICAgICBjb25zdCBhZGRGaWVsZEljb24gPSB1aS5pY29ucy5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uRm9yRmlsdGVyOiBTaW1wbGVDb25kaXRpb24gPSB0aGlzLmNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTtcbiAgICAgICAgICAgIGNvbmRpdGlvbi5jb25kaXRpb25zPy5wdXNoKGNvbmRpdGlvbkZvckZpbHRlcik7XG4gICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPCAyID8gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJykgOlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpO1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgfSwgJ0FkZCBmaWVsZCB0byB0aGUgY29uZGl0aW9uJyk7XG5cbiAgICAgICAgLy8gQU5EL09SIG9wZXJhdG9ycyBoYW5kbGluZ1xuICAgICAgICBjb25kaXRpb24ubG9naWNhbE9wZXJhdG9yID8/PSBPcGVyYXRvcnMuTG9naWNhbC5hbmQ7XG5cbiAgICAgICAgY29uc3QgbG9naWNhbE9wZXJhdG9yQ2hvaWNlID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7XG4gICAgICAgICAgICB2YWx1ZTogY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9PT0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kID8gJ2FsbCcgOiAnYW55JyxcbiAgICAgICAgICAgIGl0ZW1zOiBbJ2FsbCcsICdhbnknXSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9IGxvZ2ljYWxPcGVyYXRvckNob2ljZS52YWx1ZSEgPT09ICdhbGwnID8gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kIDogT3BlcmF0b3JzLkxvZ2ljYWwub3I7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgbG9naWNhbE9wZXJhdG9yRGl2ID0gdWkuZGl2SChbdWkuZGl2VGV4dCgnTWF0Y2gnKSwgbG9naWNhbE9wZXJhdG9yQ2hvaWNlLnJvb3RdLCAncXVlcnktYnVpbGRlci1tYXRjaC1kaXYnKTtcblxuICAgICAgICBjb25zdCBhZGREZWxldGVJY29uc0RpdiA9IHVpLmRpdkgoW2FkZEZpZWxkSWNvbl0sICduZXN0ZWQtYWRkLWRlbGV0ZS1pY29ucycpO1xuICAgICAgICBjb25zdCBpY29uc0RpdiA9IHVpLmRpdkgoW2xvZ2ljYWxPcGVyYXRvckRpdiwgYWRkRGVsZXRlSWNvbnNEaXZdLCAncXVlcnktYnVpbGRlci1uZXN0ZWQtY29uZGl0aW9uLW9wZXJhdG9ycycpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB1aS5kaXZWKFtpY29uc0Rpdl0sICdxdWVyeS1idWlsZGVyLXNlYXJjaC1xdWVyeS1vcGVyYXRvcicpO1xuXG5cbiAgICAgICAgaWYgKG5lc3RpbmdMZXZlbCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbmVzdGluZy1sZXZlbCcsIG5lc3RpbmdMZXZlbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZW5lcmF0ZU5lc3RpbmdDb2xvcihuZXN0aW5nTGV2ZWwpO1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCctLW5lc3RpbmctY29sb3InLCBjb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2RlbGV0ZSBpY29uIGZvciBuZXN0ZWQgY29uZGl0aW9ucyB0byByZW1vdmUgdGhlIHdob2xlIG5lc3RlZCBjb25kaXRpb24gYXQgb25jZVxuICAgICAgICBpZiAocGFyZW50Q29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVDb25kaXRpb24gPSB1aS5pY29ucy5kZWxldGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kaXRpb24sIHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWRkRGVsZXRlSWNvbnNEaXYuYXBwZW5kKGRlbGV0ZUNvbmRpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZENvbmRpdGlvbiBvZiBjb25kaXRpb24uY29uZGl0aW9ucyEpIHtcbiAgICAgICAgICAgIGlmICgnZmllbGQnIGluIG5lc3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eUZpbHRlckNvbnRhaW5lcihuZXN0ZWRDb25kaXRpb24pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkQ29udGFpbmVyID0gdGhpcy5idWlsZFVJKG5lc3RlZENvbmRpdGlvbiBhcyBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24sIG5lc3RpbmdMZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobmVzdGVkQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmRpdGlvbi5jb25kaXRpb25zLmxlbmd0aCA8IDIgPyBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKSA6XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKTtcblxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH1cblxuICAgIGdlbmVyYXRlTmVzdGluZ0NvbG9yKGxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiYXNlQ29sb3IgPSB7IHI6IDE4NywgZzogMjIyLCBiOiAyNTEgfTtcblxuICAgICAgICBjb25zdCBkYXJrZW5pbmdGYWN0b3IgPSBNYXRoLm1pbigwLjEgKyAobGV2ZWwgLSAxKSAqIDAuMDgsIDAuOSk7XG5cbiAgICAgICAgY29uc3QgciA9IE1hdGgucm91bmQoYmFzZUNvbG9yLnIgKiAoMSAtIGRhcmtlbmluZ0ZhY3RvcikpO1xuICAgICAgICBjb25zdCBnID0gTWF0aC5yb3VuZChiYXNlQ29sb3IuZyAqICgxIC0gZGFya2VuaW5nRmFjdG9yKSk7XG4gICAgICAgIGNvbnN0IGIgPSBNYXRoLnJvdW5kKGJhc2VDb2xvci5iICogKDEgLSBkYXJrZW5pbmdGYWN0b3IpKTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIGhleFxuICAgICAgICByZXR1cm4gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBzdWdnZXN0aW9uTWVudUtleU5hdmlnYXRpb24oaW5wdXRDb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gIGlucHV0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ0Fycm93RG93bicgJiYgZS5rZXkgIT09ICdBcnJvd1VwJyAmJiBlLmtleSAhPT0gJ0VudGVyJylcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZDogSFRNTEVsZW1lbnQgfCBudWxsID0gaW5wdXRDb250YWluZXIucXVlcnlTZWxlY3RvcignLmQ0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICAgIGNvbnN0IGFsbEl0ZW1zOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShpbnB1dENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZDQtbWVudS1pdGVtJykgPz8gW10pO1xuICAgIGlmICghYWxsSXRlbXMgfHwgYWxsSXRlbXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIGFsbEl0ZW1zLnNvcnQoKGEsIGIpID0+IGEub2Zmc2V0VG9wIC0gYi5vZmZzZXRUb3ApOyAvLyBzb3J0IGJ5IHZlcnRpY2FsIHBvc2l0aW9uXG5cbiAgICBsZXQgY3VycmVudEluZGV4ID0gY3VycmVudGx5U2VsZWN0ZWQgPyBhbGxJdGVtcy5pbmRleE9mKGN1cnJlbnRseVNlbGVjdGVkKSA6IC0xO1xuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpXG4gICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBhbGxJdGVtcy5sZW5ndGg7XG4gICAgZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJylcbiAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggLSAxICsgYWxsSXRlbXMubGVuZ3RoKSAlIGFsbEl0ZW1zLmxlbmd0aDtcbiAgICBlbHNlIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBjdXJyZW50bHlTZWxlY3RlZCkge1xuICAgICAgY3VycmVudGx5U2VsZWN0ZWQuY2xpY2soKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudGx5U2VsZWN0ZWQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICAgIGFsbEl0ZW1zW2N1cnJlbnRJbmRleF0uY2xhc3NMaXN0LmFkZCgnZDQtbWVudS1pdGVtLWhvdmVyJyk7XG4gIH0pO1xufVxuXG4iXX0=
754
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFBR2xCO0FBQ0wsQ0FBQyxFQXRCZ0IsU0FBUyxLQUFULFNBQVMsUUFzQnpCO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUMxQiwyQ0FBcUIsQ0FBQTtJQUNyQix1Q0FBaUIsQ0FBQTtBQUNyQixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQWdCRCxNQUFNLE9BQU8sbUJBQW1CO0lBUTVCLFlBQVksSUFBaUIsRUFBRSxRQUFnQixFQUFFLGdCQUFxQztRQVB0RixTQUFJLEdBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVoQyxjQUFTLEdBQWdDLElBQUksT0FBTyxFQUFzQixDQUFDO1FBQzNFLHNCQUFpQixHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzdELG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUczQixJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixhQUFoQixnQkFBZ0IsY0FBaEIsZ0JBQWdCLEdBQUk7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLEtBQUssRUFBRSxTQUFjO1NBQ3hCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNyQixLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVlLGdCQUFnQixDQUFDLElBQWlCOztZQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQWMsQ0FBQztZQUMxQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQWUsQ0FBTSxDQUFDO2dCQUNsRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDdkM7WUFDRCxrR0FBa0c7WUFDbEcsTUFBTSxRQUFRLEdBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQzFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0YsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDaEQsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDM0IsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFVLENBQUM7b0JBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFFRCxxQkFBcUIsQ0FBQyxJQUFpQixFQUFFLEtBQW1CO1FBQ3hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDMUYsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFSyxjQUFjLENBQUMsSUFBaUIsRUFBRSxLQUFtQjs7WUFDdkQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUN0RCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLE1BQU0sV0FBVyxHQUFrQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pGLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLO3dCQUMxRCxPQUFPO29CQUNYLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3hDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDdEIsZUFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTs0QkFDMUIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7NEJBQ2hCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7d0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUMsQ0FBQyxDQUFDO29CQUNILGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RTthQUNBO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztRQUN4QyxDQUFDO0tBQUE7Q0FDSjtBQUVELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxtQkFBbUI7SUFDNUMsZ0JBQWdCLENBQUMsSUFBaUI7O1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDakQsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsY0FBYyxFQUFFLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQU0sQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUNqRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixjQUFjLEVBQUUsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBTSxDQUFDO29CQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRixPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7S0FBQTtDQUNKO0FBRUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLG1CQUFtQjtJQUM1QyxnQkFBZ0IsQ0FBQyxJQUFpQjs7WUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTO2dCQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDaEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO2dCQUM5QixLQUFLLEVBQUUsT0FBTztnQkFDZCxRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTztnQkFDOUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUM7b0JBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEMsQ0FBQzthQUNKLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQztLQUFBO0NBQ0o7QUFFRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQTJCO0lBQ3JELGdCQUFnQixDQUFDLElBQWlCOztZQUM3QyxxRkFBcUY7WUFDckYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDbEUsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO29CQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQTRCLENBQUMsUUFBUSxDQUFDOztvQkFFOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUMzQixjQUFjLEVBQUUsR0FBRyxFQUFFO29CQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQztLQUFBO0NBQ0o7QUFNRCxNQUFNLE9BQU8saUNBQWtDLFNBQVEsbUJBQXVDO0lBQzNFLGdCQUFnQixDQUFDLElBQWlCOzs7WUFDN0MsOEZBQThGO1lBQzlGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBQyxRQUFRLEVBQUUsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssbUNBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsQ0FBQzthQUNqRjtZQUNELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQ3BDLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDO29CQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUNyQyxHQUFHLEVBQUUsQ0FBQztnQkFDTixHQUFHLEVBQUUsQ0FBQztnQkFDTixJQUFJLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQU0sQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7O0tBQ3pDO0NBQ0o7QUFHRCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsbUJBQTZCO0lBQy9ELGdCQUFnQixDQUFDLElBQWlCOztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDN0I7WUFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQzNCLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFNLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEMsQ0FBQzthQUNKLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQztLQUFBO0NBQ0o7QUFFRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsbUJBQTZCO0lBQzVELGdCQUFnQixDQUFDLElBQWlCOztZQUM3QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDN0I7WUFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7Z0JBQzNCLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO0tBQUE7Q0FDSjtBQUVELE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxtQkFBNkI7SUFDOUQsZ0JBQWdCLENBQUMsSUFBaUI7O1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzthQUM3QjtZQUNELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDM0IsY0FBYyxFQUFFLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7YUFDSixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLENBQUM7S0FBQTtDQUNKO0FBRUQsMENBQTBDO0FBQzFDLE1BQU0sT0FBTyxpQkFBaUI7SUFNMUI7UUFKUSxrQkFBYSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELHFCQUFnQixHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BELG1CQUFjLEdBQTBHLElBQUksR0FBRyxFQUFFLENBQUM7UUFHdEksSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtZQUM3QixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1NBQ3hEO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVPLDBCQUEwQjtRQUM5QixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0SSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzNHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzdHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFdEcsMERBQTBEO1FBQzFELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pJLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBRS9ELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxxQkFBcUIsQ0FBQyxZQUFvQixFQUFFLFNBQW1CO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsT0FBZSxFQUFFLFNBQW1CO1FBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsdUJBQXVCLENBQUMsUUFBcUI7UUFDekMsOENBQThDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELElBQUksVUFBVTtZQUFFLE9BQU8sVUFBVSxDQUFDO1FBRWxDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxPQUFPLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxtQkFBbUIsQ0FBQyxRQUFxQixFQUFFLFFBQWdCO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixjQUFjLENBQ1YsWUFBb0IsRUFDcEIsT0FBZSxFQUNmLFFBQWdCLEVBQ2hCLFdBQWdGO1FBRWhGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxZQUFZLENBQUksUUFBcUIsRUFBRSxRQUFnQixFQUFFLGdCQUFxQztRQUMxRiw2RUFBNkU7UUFDN0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUQsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RDtRQUVELDJGQUEyRjtRQUMzRixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckQ7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztTQUNyQztRQUVELE9BQU8sSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsa0JBQWtCLENBQVUsUUFBcUIsRUFBRSxRQUFnQixFQUFFLFNBQThCO1FBQy9GLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUM5QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0gsTUFBTSxLQUFLLENBQUMsYUFBYSxRQUFRLHlDQUF5QyxRQUFRLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztTQUN2RztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsWUFBb0IsRUFBRSxPQUFlLEVBQUUsUUFBZ0I7UUFDM0UsT0FBTyxHQUFHLFlBQVksSUFBSSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQztDQUNKO0FBUUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFXLEVBQUUsS0FBYTs7SUFDbEQsSUFBSSxVQUFVLEdBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBSSxJQUFJLENBQUMsQ0FBQztJQUM5RSxNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07UUFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUNELFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFBO1FBQzFELFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuRjtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEdBQVc7O0lBQ2xDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFBLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxNQUFNLE9BQU8sWUFBWTtJQWFyQixZQUFZLFVBQXlCLEVBQUUsZ0JBQW1DLEVBQUUsU0FBNkIsa0JBQWtCLENBQUMsUUFBUSxFQUNoSSxrQkFBMEIsRUFBRSxFQUFFLGdCQUFnQixHQUFHLEtBQUs7UUFWMUQscUJBQWdCLEdBQThCLElBQUksT0FBTyxFQUFvQixDQUFDO1FBQzlFLHVCQUFrQixHQUE2QixJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUM5RSxvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzNELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHUixnQkFBVyxHQUF1QixJQUFJLENBQUM7UUFDdkMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBSTdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRXpDLElBQUksZ0JBQWdCLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztTQUNyQzthQUFNO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsU0FBUyxHQUFHO2dCQUNULGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3RDLFVBQVUsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2FBQ3JDLENBQUM7U0FDTDtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsK0JBQStCO0lBQzVELENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLG1EQUFtRDtRQUNuRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixLQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1RjtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sS0FBSyxHQUFrQixVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUN2QyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ0osRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxFQUFDLENBQUM7WUFDM0QsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFxQixDQUFDLENBQUM7U0FDL0UsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUMsRUFBQyxDQUFDLEVBQzdCLEdBQUcsRUFBRSxHQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBMkI7UUFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQTJCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxRSxPQUFPLGVBQWUsQ0FBQztTQUMxQjtRQUVELG1FQUFtRTtRQUNuRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFFRCx5REFBeUQ7UUFDekQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpGLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUM7SUFDMUQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFVBQXNCO1FBQzdDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUN2Qiw0QkFBNEI7WUFDNUIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNILHlDQUF5QztZQUN6QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUM3QztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxTQUEwQjtRQUN0RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQztRQUNqRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLGtCQUFrQixDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDckUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRyxVQUFVLENBQUM7UUFFZixPQUFPLEdBQUcsS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNEJBQTRCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxhQUFhLEVBQUU7WUFDZixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEUsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRW5DLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJO2dCQUN6QixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsS0FBSyxFQUFFLFNBQVM7YUFDbkIsQ0FBQTtTQUNKOztZQUNHLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFFBQVEsRUFBRSxFQUFFO2FBQ2YsQ0FBQTtJQUNULENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUVwQiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUEwQjtRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLE1BQU0sS0FBSyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOztZQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUV2RCw2REFBNkQ7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1FQUFtRSxDQUFDLENBQUM7UUFFekgsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pDLElBQUksTUFBTSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtnQkFDdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztnQkFDMUQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQzthQUNqRTtpQkFBTTtnQkFDSCxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUNqRSxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO2FBQzFEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUNILFNBQTJCLEVBQzNCLGVBQWtDLEVBQ2xDLGVBQXVCLENBQUM7O1FBR3hCLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ1osU0FBUyxHQUFHO2dCQUNSLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3RDLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLENBQUM7U0FDTDtRQUVELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxZQUF3QixFQUFFLFNBQXdCLEVBQUUsV0FBOEIsRUFBRSxFQUFFO1lBQ3BILElBQUksU0FBUyxFQUFFO2dCQUNYLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hELElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQztvQkFDZCxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO2FBQ3BGO1lBQUEsQ0FBQztRQUNOLENBQUMsQ0FBQTtRQUVELE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxJQUFxQixFQUFFLGVBQWtDLEVBQUUsRUFBRTs7WUFFaEcsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFO2dCQUN0QixFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNCLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLEtBQU0sQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLFFBQVEsRUFBRTtvQkFDViwwREFBMEQ7b0JBQzFELElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUk7d0JBQzlCLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDOzt3QkFFL0MsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNqRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3RDO29CQUNELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTt3QkFDdkMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUNwQixLQUFLLEVBQUUsU0FBUzt3QkFDaEIsY0FBYyxFQUFFLEdBQUcsRUFBRTs0QkFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBTSxDQUFDOzRCQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7NEJBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUMvQyxDQUFDO3dCQUNELFFBQVEsRUFBRSxLQUFLO3FCQUNsQixDQUFDLENBQUM7b0JBQ0gsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0MsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUUvQztZQUNMLENBQUMsQ0FBQTtZQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBcUIsRUFBRSxRQUFnQixFQUFFLFNBQTBCLEVBQUUsRUFBRTtnQkFDekYsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEIsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFBO1lBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNqRixPQUFPLFFBQVEsQ0FBQztZQUNwQixDQUFDLENBQUE7WUFFRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsWUFBb0IsRUFBRSxFQUFFO2dCQUNuRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQy9GLElBQUksQ0FBQyxRQUFRO29CQUNULFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQ3ZGLE9BQU8sUUFBUSxDQUFDO1lBQ3BCLENBQUMsQ0FBQTtZQUVELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTs7Z0JBQzVDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsT0FBTyxNQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksbUNBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksbUNBQUksRUFBRSxDQUFDO1lBQ2xELENBQUMsQ0FBQTtZQUVELE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxZQUFvQixFQUFFLEVBQUU7O2dCQUN6RCxNQUFNLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDakQsT0FBTyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxJQUFJLG1DQUFJLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUE7WUFFRCxNQUFBLElBQUksQ0FBQyxLQUFLLG9DQUFWLElBQUksQ0FBQyxLQUFLLEdBQUssQ0FBQSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksS0FBSSxFQUFFLEVBQUM7WUFFOUMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWlCLEVBQUUsRUFBRSxXQUFDLE9BQUEsTUFBQSxJQUFJLENBQUMsWUFBWSxtQ0FBSSxJQUFJLENBQUMsSUFBSSxDQUFBLEVBQUEsQ0FBQztnQkFDakYsS0FBSyxFQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3pDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGNBQWMsRUFBRSxHQUFHLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsMkJBQTJCLENBQUMsZ0JBQWdCLENBQUMsS0FBTSxDQUFDLENBQUM7b0JBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO29CQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsWUFBWSxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsQ0FBQzthQUNKLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDekMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdkMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLENBQUMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBRS9CLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUM3QyxNQUFNLFVBQVUsR0FBRyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsRix3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRS9DLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBRTNCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsK0JBQStCLENBQUMsQ0FBQztZQUNyRSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFN0IsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztnQkFDM0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLDRCQUE0QixDQUFDO2dCQUM3RCxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSwrQkFBK0IsQ0FBQztnQkFDM0QsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLDRCQUE0QixDQUFDO2dCQUNuRCxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxDQUFDLEVBQUUsa0JBQWtCLENBQUM7YUFDeEUsRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFFckgsU0FBUyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2QyxZQUFZLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTs7WUFDbkMsTUFBTSxrQkFBa0IsR0FBb0IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDaEYsTUFBQSxTQUFTLENBQUMsVUFBVSwwQ0FBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMvQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztnQkFDcEcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFFakMsNEJBQTRCO1FBQzVCLE1BQUEsU0FBUyxDQUFDLGVBQWUsb0NBQXpCLFNBQVMsQ0FBQyxlQUFlLEdBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUM7UUFFcEQsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDOUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMxRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsY0FBYyxFQUFFLEdBQUcsRUFBRTtnQkFDakIsU0FBUyxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2xILElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsQ0FBQztTQUNKLENBQUMsQ0FBQTtRQUVGLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUVqSCxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLDBDQUEwQyxDQUFDLENBQUM7UUFDOUcsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7UUFHN0UsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLFNBQVMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsZ0ZBQWdGO1FBQ2hGLElBQUksZUFBZSxFQUFFO1lBQ2pCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDekMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztZQUNILGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM3QztRQUVELEtBQUssTUFBTSxlQUFlLElBQUksU0FBUyxDQUFDLFVBQVcsRUFBRTtZQUNqRCxJQUFJLE9BQU8sSUFBSSxlQUFlO2dCQUMxQiw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDOUM7Z0JBQ0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFtQyxFQUNwRSxTQUFTLEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7UUFFRCxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztZQUNwRyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBRXRFLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhO1FBQzlCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUU3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFaEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFMUQsaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3JILENBQUM7Q0FDSjtBQUdELFNBQVMsMkJBQTJCLENBQUMsY0FBMkI7SUFDOUQsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFOztRQUMvQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTztZQUNuRSxPQUFPO1FBQ1QsTUFBTSxpQkFBaUIsR0FBdUIsY0FBYyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xHLE1BQU0sUUFBUSxHQUFrQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQUEsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxtQ0FBSSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNwQyxPQUFPO1FBQ1QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBRWhGLElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxXQUFXO1lBQ3ZCLFlBQVksR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2pELElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTO1lBQzFCLFlBQVksR0FBRyxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDbkUsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAnLi4vLi4vY3NzL3F1ZXJ5LWJ1aWxkZXIuY3NzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5cbmV4cG9ydCBjb25zdCBTVUdHRVNUSU9OU19GVU5DVElPTiA9ICdzdWdnZXN0aW9uc0Z1bmN0aW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBPcGVyYXRvcnMge1xuICAgIGV4cG9ydCBjb25zdCBDT05UQUlOUyA9ICdjb250YWlucyc7XG4gICAgZXhwb3J0IGNvbnN0IElOID0gJ2luJztcbiAgICBleHBvcnQgY29uc3QgU1RBUlRTX1dJVEggPSAnc3RhcnRzIHdpdGgnO1xuICAgIGV4cG9ydCBjb25zdCBFTkRTX1dJVEggPSAnZW5kcyB3aXRoJztcbiAgICBleHBvcnQgY29uc3QgR1QgPSAnPic7XG4gICAgZXhwb3J0IGNvbnN0IEdURSA9ICc+PSc7XG4gICAgZXhwb3J0IGNvbnN0IExUID0gJzwnO1xuICAgIGV4cG9ydCBjb25zdCBMVEUgPSAnPD0nO1xuICAgIGV4cG9ydCBjb25zdCBFUSA9ICc9JztcbiAgICBleHBvcnQgY29uc3QgTk9UX0VRID0gJyE9JztcbiAgICBleHBvcnQgY29uc3QgQkVGT1JFID0gJ2JlZm9yZSc7XG4gICAgZXhwb3J0IGNvbnN0IEFGVEVSID0gJ2FmdGVyJztcbiAgICBleHBvcnQgY29uc3QgT04gPSAnb24nO1xuICAgIGV4cG9ydCBjb25zdCBCRVRXRUVOID0gJ2JldHdlZW4nO1xuICAgIGV4cG9ydCBjb25zdCBJU19TSU1JTEFSID0gJ2lzIHNpbWlsYXInO1xuICAgIGV4cG9ydCBjb25zdCBJU19DT05UQUlORUQgPSAnaXMgY29udGFpbmVkJztcblxuICAgIGV4cG9ydCBlbnVtIExvZ2ljYWwge1xuICAgICAgICBhbmQgPSAnYW5kJyxcbiAgICAgICAgb3IgPSAnb3InLFxuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gUXVlcnlCdWlsZGVyTGF5b3V0IHtcbiAgICBTdGFuZGFyZCA9ICdzdGFuZGFyZCcsXG4gICAgTmFycm93ID0gJ25hcnJvdydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVDb25kaXRpb248VCA9IGFueT4ge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHN0cmluZztcbiAgICB2YWx1ZTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGV4Q29uZGl0aW9uIHtcbiAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsO1xuICAgIGNvbmRpdGlvbnM6IEV4cHJlc3Npb25bXTtcbn1cblxuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbjxUID0gYW55PiA9IFNpbXBsZUNvbmRpdGlvbjxUPiB8IENvbXBsZXhDb25kaXRpb247XG5cblxuZXhwb3J0IGNsYXNzIEJhc2VDb25kaXRpb25FZGl0b3I8VCA9IGFueT4ge1xuICAgIHJvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuZGl2KCk7XG4gICAgY29uZGl0aW9uOiBTaW1wbGVDb25kaXRpb248VD47XG4gICAgb25DaGFuZ2VkOiBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbjxUPj4gPSBuZXcgU3ViamVjdDxTaW1wbGVDb25kaXRpb248VD4+KCk7XG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgIHN1Z2dlc3Rpb25zTWVudUNsaWNrZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3A6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBpbml0aWFsQ29uZGl0aW9uPzogU2ltcGxlQ29uZGl0aW9uPFQ+KSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiA/PyB7XG4gICAgICAgICAgICBmaWVsZDogcHJvcC5uYW1lLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCBhcyBUXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuaW5pdGlhbGl6ZUVkaXRvcihwcm9wKS50aGVuKChpbnB1dHMpID0+IHtcbiAgICAgICAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkVycm9yLm5leHQoIWlucHV0LnZhbGlkYXRlKCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZihpbnB1dHMuc29tZSgoaXQpID0+ICFpdC52YWxpZGF0ZSgpKSlcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkVycm9yLm5leHQodHJ1ZSk7O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKVxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB1bmRlZmluZWQgYXMgVDtcbiAgICAgICAgaWYgKHByb3AudHlwZSA9PT0gREcuVFlQRS5EQVRFX1RJTUUgJiYgdHlwZW9mIHRoaXMuY29uZGl0aW9uLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBkYXlqcyh0aGlzLmNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcpIGFzIFQ7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvL2FsbG93IG51bGwgdmFsdWUgZm9yICc9JyBhbmQgJyE9JyBmb3Igc3RyaW5nIHR5cGUgdG8gY3JlYXRlICdpcyBlbXB0eScsICdpcyBub3QgZW1wdHknIGNvbmRpdGlvblxuICAgICAgICBjb25zdCBudWxsYWJsZSA9ICBwcm9wLnR5cGUgPT09IERHLlRZUEUuU1RSSU5HICYmXG4gICAgICAgICAgICAodGhpcy5jb25kaXRpb24ub3BlcmF0b3IgPT09IE9wZXJhdG9ycy5FUSB8fCB0aGlzLmNvbmRpdGlvbi5vcGVyYXRvciA9PT0gT3BlcmF0b3JzLk5PVF9FUSk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWUsXG4gICAgICAgICAgICBudWxsYWJsZTogbnVsbGFibGUsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gaW5wdXQudmFsdWUgYXMgVDtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFN1Z2dlc3Rpb25zKHByb3AsIGlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0LmFkZENhcHRpb24oJycpO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVTdWdnZXN0aW9ucyhwcm9wLCBpbnB1dCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVTdWdnZXN0aW9ucyhwcm9wOiBERy5Qcm9wZXJ0eSwgaW5wdXQ6IERHLklucHV0QmFzZSkge1xuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHByb3AudHlwZSA9PT0gREcuVFlQRS5TVFJJTkcgJiYgcHJvcC5vcHRpb25zW1NVR0dFU1RJT05TX0ZVTkNUSU9OXTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgIHN1Z2dlc3Rpb25NZW51S2V5TmF2aWdhdGlvbih0aGlzLnJvb3QpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYWRkU3VnZ2VzdGlvbnMocHJvcDogREcuUHJvcGVydHksIGlucHV0OiBERy5JbnB1dEJhc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb25zICYmICF0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IEFycmF5PHN0cmluZz4gPSBhd2FpdCBwcm9wLm9wdGlvbnNbU1VHR0VTVElPTlNfRlVOQ1RJT05dKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPT09IDEgJiYgc3VnZ2VzdGlvbnNbMF0gPT09IGlucHV0LnZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc01lbnUhLml0ZW0ocywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbnNNZW51Q2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zTWVudS5zaG93KHsgZWxlbWVudDogaW5wdXQucm9vdCwgeTogaW5wdXQucm9vdC5vZmZzZXRIZWlnaHQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbi52YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmNvbmRpdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gW3RoaXMuY29uZGl0aW9uLnZhbHVlLCB1bmRlZmluZWRdO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQxID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWVbMF0sXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlWzBdID0gaW5wdXQxLnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0MS5hZGRDYXB0aW9uKCcnKTtcbiAgICAgICAgY29uc3QgaW5wdXQyID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWVbMV0sXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlWzFdID0gaW5wdXQyLnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlucHV0Mi5hZGRDYXB0aW9uKCcnKTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZIKFtpbnB1dDEucm9vdCwgaW5wdXQyLnJvb3RdLCB7IHN0eWxlOiB7IGdhcDogJzEwcHgnIH0gfSkpO1xuICAgICAgICByZXR1cm4gW2lucHV0MSwgaW5wdXQyXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb29sZWFuQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvciB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uLnZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbJ3RydWUnLCAnZmFsc2UnXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBvcHRpb25zLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgcmV0dXJuIFtpbnB1dF07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPHN0cmluZz4ge1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIC8vaWYgd2Ugc3dpdGggZnJvbSBzaW1pbGFyaXR5IGlucHV0IHRvIHN0YW5kYXJkIG1vbGVjdWxlIGlucHV0IC0gbmVlZCB0byBtb2RpZnkgdmFsdWVcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uLnZhbHVlICYmIHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgnbW9sZWN1bGUnIGluIHRoaXMuY29uZGl0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9ICh0aGlzLmNvbmRpdGlvbi52YWx1ZSBhcyBNb2xlY3VsZVNpbWlsYXJpdHkpLm1vbGVjdWxlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5tb2xlY3VsZSgnJywge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgLy90byBhZGp1c3QgdGhlIGZpbHRlciB3aWR0aCBjb25zaWRlcmluZyBtb2xlY3VsZSBpbnB1dFxuICAgICAgICB0aGlzLnJvb3Quc3R5bGUucGFkZGluZ1RvcCA9ICcxNXB4JztcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnMTVweCc7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9sZWN1bGVTaW1pbGFyaXR5ID0ge1xuICAgIG1vbGVjdWxlOiBzdHJpbmcsXG4gICAgdGhyZXNob2xkOiBudW1iZXJcbn1cbmV4cG9ydCBjbGFzcyBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPE1vbGVjdWxlU2ltaWxhcml0eT4ge1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIC8vaW4gY2FzZSB3ZSBzd2l0Y2ggZnJvbSBzb21lIG90aGVyIG9wZXJhdG9yLCB3aGVyZSB2YWx1ZSBpcyBhIHN0cmluZyAoY29udGFpbnMsIGlzIGNvbnRhaW5lZClcbiAgICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbi52YWx1ZSB8fCB0eXBlb2YgdGhpcy5jb25kaXRpb24udmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IHttb2xlY3VsZTogdGhpcy5jb25kaXRpb24udmFsdWUgPz8gJycsIHRocmVzaG9sZDogMC43fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2xlY3VsZUlucHV0ID0gdWkuaW5wdXQubW9sZWN1bGUoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZS5tb2xlY3VsZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUubW9sZWN1bGUgPSBtb2xlY3VsZUlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdHJlc2hvbGRJbnB1dCA9IHVpLmlucHV0LmZsb2F0KCcnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWUudGhyZXNob2xkLFxuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbWF4OiAxLFxuICAgICAgICAgICAgc3RlcDogMC4wMVxuICAgICAgICB9KTtcbiAgICAgICAgREcuZGVib3VuY2UodHJlc2hvbGRJbnB1dC5vbkNoYW5nZWQsIDMwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlLnRocmVzaG9sZCA9IHRyZXNob2xkSW5wdXQudmFsdWUhO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodWkuZGl2VihbbW9sZWN1bGVJbnB1dC5yb290LCB0cmVzaG9sZElucHV0LnJvb3RdKSk7XG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5wYWRkaW5nVG9wID0gJzE1cHgnO1xuICAgICAgICByZXR1cm4gW21vbGVjdWxlSW5wdXQsIHRyZXNob2xkSW5wdXRdO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvclN0cmluZyBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8c3RyaW5nW10+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlITtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSEubWFwKChpdCkgPT4gcGFyc2VJbnQoaXQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JGbG9hdCBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3I8bnVtYmVyW10+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubGlzdCgnJywge1xuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIS5tYXAoKGl0KSA9PiBwYXJzZUZsb2F0KGl0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG59XG5cbi8vIFJlZ2lzdHJ5IGZvciBib3RoIG9wZXJhdG9ycyBhbmQgZWRpdG9yc1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvblJlZ2lzdHJ5IHtcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQ29uZGl0aW9uUmVnaXN0cnk7XG4gICAgcHJpdmF0ZSB0eXBlT3BlcmF0b3JzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzZW1UeXBlT3BlcmF0b3JzOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBlZGl0b3JSZWdpc3RyeTogTWFwPHN0cmluZywgbmV3IChwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IGFueSkgPT4gQmFzZUNvbmRpdGlvbkVkaXRvcj4gPSBuZXcgTWFwKCk7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0T3BlcmF0b3JzKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURlZmF1bHRFZGl0b3JzKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEluc3RhbmNlKCk6IENvbmRpdGlvblJlZ2lzdHJ5IHtcbiAgICAgICAgaWYgKCFDb25kaXRpb25SZWdpc3RyeS5pbnN0YW5jZSkge1xuICAgICAgICAgICAgQ29uZGl0aW9uUmVnaXN0cnkuaW5zdGFuY2UgPSBuZXcgQ29uZGl0aW9uUmVnaXN0cnkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uUmVnaXN0cnkuaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRGVmYXVsdE9wZXJhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgLy8gVHlwZSBvcGVyYXRvcnNcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5CT09MLCBbT3BlcmF0b3JzLkVRXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuU1RSSU5HLCBbT3BlcmF0b3JzLlNUQVJUU19XSVRILCBPcGVyYXRvcnMuQ09OVEFJTlMsIE9wZXJhdG9ycy5FUSwgT3BlcmF0b3JzLk5PVF9FUSwgT3BlcmF0b3JzLklOXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuSU5ULCBbT3BlcmF0b3JzLkdULCBPcGVyYXRvcnMuTFQsIE9wZXJhdG9ycy5HVEUsIE9wZXJhdG9ycy5MVEUsIE9wZXJhdG9ycy5FUSxcbiAgICAgICAgICAgIE9wZXJhdG9ycy5OT1RfRVEsIE9wZXJhdG9ycy5CRVRXRUVOLCBPcGVyYXRvcnMuSU5dKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclR5cGVPcGVyYXRvcnMoREcuVFlQRS5GTE9BVCwgW09wZXJhdG9ycy5HVCwgT3BlcmF0b3JzLkxULCBPcGVyYXRvcnMuR1RFLCBPcGVyYXRvcnMuTFRFLCBPcGVyYXRvcnMuRVEsXG4gICAgICAgICAgICBPcGVyYXRvcnMuTk9UX0VRLCBPcGVyYXRvcnMuQkVUV0VFTiwgT3BlcmF0b3JzLklOXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuREFURV9USU1FLCBbT3BlcmF0b3JzLkJFRk9SRSwgT3BlcmF0b3JzLkFGVEVSLCBPcGVyYXRvcnMuQkVUV0VFTl0pO1xuXG4gICAgICAgIC8vIFNlbVR5cGUgb3BlcmF0b3JzICh0YWtlIHByZWNlZGVuY2Ugb3ZlciB0eXBlIG9wZXJhdG9ycylcbiAgICAgICAgdGhpcy5yZWdpc3RlclNlbVR5cGVPcGVyYXRvcnMoREcuU0VNVFlQRS5NT0xFQ1VMRSwgW09wZXJhdG9ycy5DT05UQUlOUywgT3BlcmF0b3JzLklTX0NPTlRBSU5FRCwgT3BlcmF0b3JzLkVRLCBPcGVyYXRvcnMuSVNfU0lNSUxBUl0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZURlZmF1bHRFZGl0b3JzKCk6IHZvaWQge1xuICAgICAgICAvLyBSZWdpc3RlciBkZWZhdWx0IGVkaXRvcnMgYnkgcHJvcGVydHkgdHlwZSAod2l0aCBlbXB0eSBzZW1UeXBlIGFuZCBvcGVyYXRvcilcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLklOVCwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkZMT0FULCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuREFURV9USU1FLCAnJywgJycsIEJhc2VDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuQk9PTCwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcblxuICAgICAgICAvLyBSZWdpc3RlciBzcGVjaWFsaXplZCBlZGl0b3JzIGZvciBzcGVjaWZpYyBjb21iaW5hdGlvbnNcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgJycsIE9wZXJhdG9ycy5JTiwgTXVsdGlWYWx1ZUNvbmRpdGlvbkVkaXRvclN0cmluZyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5JTlQsICcnLCBPcGVyYXRvcnMuSU4sIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JJbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuRkxPQVQsICcnLCBPcGVyYXRvcnMuSU4sIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JGbG9hdCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5EQVRFX1RJTUUsICcnLCBPcGVyYXRvcnMuQkVUV0VFTiwgQmV0d2VlbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5JTlQsICcnLCBPcGVyYXRvcnMuQkVUV0VFTiwgQmV0d2VlbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5GTE9BVCwgJycsIE9wZXJhdG9ycy5CRVRXRUVOLCBCZXR3ZWVuQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLkNPTlRBSU5TLCBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5JU19DT05UQUlORUQsIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLlNUUklORywgREcuU0VNVFlQRS5NT0xFQ1VMRSwgT3BlcmF0b3JzLkVRLCBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5JU19TSU1JTEFSLCBNb2xlY3VsZVNpbWlsYXJpdHlDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuQk9PTCwgJycsIE9wZXJhdG9ycy5FUSwgQm9vbGVhbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgfVxuXG4gICAgLy8gT3BlcmF0b3IgcmVnaXN0cmF0aW9uIG1ldGhvZHNcbiAgICByZWdpc3RlclR5cGVPcGVyYXRvcnMocHJvcGVydHlUeXBlOiBzdHJpbmcsIG9wZXJhdG9yczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50eXBlT3BlcmF0b3JzLnNldChwcm9wZXJ0eVR5cGUsIG9wZXJhdG9ycyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJTZW1UeXBlT3BlcmF0b3JzKHNlbVR5cGU6IHN0cmluZywgb3BlcmF0b3JzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbVR5cGVPcGVyYXRvcnMuc2V0KHNlbVR5cGUsIG9wZXJhdG9ycyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IG9wZXJhdG9ycyBmb3IgYSBwcm9wZXJ0eVxuICAgIGdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSk6IHN0cmluZ1tdIHtcbiAgICAgICAgLy8gQ2hlY2sgc2VtVHlwZSBmaXJzdCwgdGhlbiBmYWxsIGJhY2sgdG8gdHlwZVxuICAgICAgICBjb25zdCBzZW1UeXBlT3BzID0gdGhpcy5zZW1UeXBlT3BlcmF0b3JzLmdldChwcm9wZXJ0eS5zZW1UeXBlKTtcbiAgICAgICAgaWYgKHNlbVR5cGVPcHMpIHJldHVybiBzZW1UeXBlT3BzO1xuXG4gICAgICAgIGNvbnN0IHR5cGVPcHMgPSB0aGlzLnR5cGVPcGVyYXRvcnMuZ2V0KHByb3BlcnR5LnByb3BlcnR5VHlwZSk7XG4gICAgICAgIHJldHVybiB0eXBlT3BzIHx8IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIG9wZXJhdG9yIGlzIHN1cHBvcnRlZFxuICAgIGlzT3BlcmF0b3JTdXBwb3J0ZWQocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHRoaXMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkocHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JzLmluY2x1ZGVzKG9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICAvLyBFZGl0b3IgcmVnaXN0cmF0aW9uIG1ldGhvZHNcbiAgICByZWdpc3RlckVkaXRvcjxUPihcbiAgICAgICAgcHJvcGVydHlUeXBlOiBzdHJpbmcsXG4gICAgICAgIHNlbVR5cGU6IHN0cmluZyxcbiAgICAgICAgb3BlcmF0b3I6IHN0cmluZyxcbiAgICAgICAgZWRpdG9yQ2xhc3M6IG5ldyAocHJvcDogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcpID0+IEJhc2VDb25kaXRpb25FZGl0b3I8VD5cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHlUeXBlLCBzZW1UeXBlLCBvcGVyYXRvcik7XG4gICAgICAgIHRoaXMuZWRpdG9yUmVnaXN0cnkuc2V0KGtleSwgZWRpdG9yQ2xhc3MpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBlZGl0b3IgZm9yIGEgcHJvcGVydHkgYW5kIG9wZXJhdG9yXG4gICAgY3JlYXRlRWRpdG9yPFQ+KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPik6IEJhc2VDb25kaXRpb25FZGl0b3I8VD4ge1xuICAgICAgICAvLyBUcnkgdG8gZmluZCBhIHNwZWNpYWxpemVkIGVkaXRvciBmaXJzdCAocHJvcGVydHlUeXBlICsgc2VtVHlwZSArIG9wZXJhdG9yKVxuICAgICAgICBjb25zdCBzcGVjaWFsaXplZEtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgcHJvcGVydHkuc2VtVHlwZSwgb3BlcmF0b3IpO1xuICAgICAgICBsZXQgRWRpdG9yQ2xhc3MgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LmdldChzcGVjaWFsaXplZEtleSk7XG5cbiAgICAgICAgLy8gSWYgbm8gc3BlY2lhbGl6ZWQgZWRpdG9yLCB0cnkgd2l0aCBlbXB0eSBzZW1UeXBlIChwcm9wZXJ0eVR5cGUgKyBvcGVyYXRvcilcbiAgICAgICAgaWYgKCFFZGl0b3JDbGFzcykge1xuICAgICAgICAgICAgY29uc3QgdHlwZU9ubHlLZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUsICcnLCBvcGVyYXRvcik7XG4gICAgICAgICAgICBFZGl0b3JDbGFzcyA9IHRoaXMuZWRpdG9yUmVnaXN0cnkuZ2V0KHR5cGVPbmx5S2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHN0aWxsIG5vIHNwZWNpYWxpemVkIGVkaXRvciwgdXNlIGRlZmF1bHQgZWRpdG9yIGZvciBwcm9wZXJ0eSB0eXBlIChwcm9wZXJ0eVR5cGUgb25seSlcbiAgICAgICAgaWYgKCFFZGl0b3JDbGFzcykge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5LnByb3BlcnR5VHlwZSwgJycsICcnKTtcbiAgICAgICAgICAgIEVkaXRvckNsYXNzID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5nZXQoZGVmYXVsdEtleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayB0byBiYXNlIGVkaXRvclxuICAgICAgICBpZiAoIUVkaXRvckNsYXNzKSB7XG4gICAgICAgICAgICBFZGl0b3JDbGFzcyA9IEJhc2VDb25kaXRpb25FZGl0b3I7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEVkaXRvckNsYXNzKHByb3BlcnR5LCBvcGVyYXRvciwgaW5pdGlhbENvbmRpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gR2V0IGNvbmRpdGlvbiBlZGl0b3IgZm9yIGEgcHJvcGVydHkgYW5kIG9wZXJhdG9yICh3aXRoIHZhbGlkYXRpb24pXG4gICAgZ2V0Q29uZGl0aW9uRWRpdG9yPFQgPSBhbnk+KHByb3BlcnR5OiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgY29uZGl0aW9uPzogU2ltcGxlQ29uZGl0aW9uPFQ+KTogQmFzZUNvbmRpdGlvbkVkaXRvcjxUPiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3BlcmF0b3JTdXBwb3J0ZWQocHJvcGVydHksIG9wZXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRWRpdG9yKHByb3BlcnR5LCBvcGVyYXRvciwgY29uZGl0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBPcGVyYXRvciAnJHtvcGVyYXRvcn0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHByb3BlcnR5IHR5cGUgJyR7cHJvcGVydHkucHJvcGVydHlUeXBlfSdgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5VHlwZTogc3RyaW5nLCBzZW1UeXBlOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHlUeXBlfToke3NlbVR5cGV9OiR7b3BlcmF0b3J9YDtcbiAgICB9XG59XG5cblxuZXhwb3J0IHR5cGUgSGlzdG9yeUl0ZW0gPSB7XG4gICAgZGF0ZTogREcuVFlQRS5EQVRFX1RJTUUsXG4gICAgdmFsdWU6IHN0cmluZyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVIaXN0b3J5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgbGV0IGNvbGxlY3Rpb246IEhpc3RvcnlJdGVtW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gJ1tdJyk7XG4gICAgY29uc3QgbmV3SXRlbSA9IHsgZGF0ZTogbmV3IERhdGUoKSwgdmFsdWU6IHZhbHVlIH07XG4gICAgaWYgKCFjb2xsZWN0aW9uLmxlbmd0aClcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbbmV3SXRlbV0pKTtcbiAgICBlbHNlIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZmlsdGVyKChpdCkgPT4gaXQudmFsdWUgIT09IHZhbHVlKVxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KFtuZXdJdGVtLCAuLi5jb2xsZWN0aW9uLnNsaWNlKDAsIDkpXSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpc3Rvcnkoa2V5OiBzdHJpbmcpOiBIaXN0b3J5SXRlbVtdIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/ICdbXScpO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyIHtcbiAgICByb290OiBIVE1MRWxlbWVudDtcbiAgICBjb25kaXRpb246IENvbXBsZXhDb25kaXRpb247XG4gICAgcHJvcGVydGllczogREcuUHJvcGVydHlbXTtcbiAgICBzdHJ1Y3R1cmVDaGFuZ2VkOiBTdWJqZWN0PENvbXBsZXhDb25kaXRpb24+ID0gbmV3IFN1YmplY3Q8Q29tcGxleENvbmRpdGlvbj4oKTtcbiAgICBmaWx0ZXJWYWx1ZUNoYW5nZWQ6IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPiA9IG5ldyBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbj4oKTtcbiAgICB2YWxpZGF0aW9uRXJyb3I6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIGludmFsaWQgPSBmYWxzZTtcbiAgICBsYXlvdXQ6IFF1ZXJ5QnVpbGRlckxheW91dDtcbiAgICBwcml2YXRlIF9oaXN0b3J5Q2FjaGVLZXk6IHN0cmluZztcbiAgICBwcml2YXRlIGhpc3RvcnlJY29uOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgaGlzdG9yeUljb25PblRvcCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogREcuUHJvcGVydHlbXSwgaW5pdGlhbENvbmRpdGlvbj86IENvbXBsZXhDb25kaXRpb24sIGxheW91dDogUXVlcnlCdWlsZGVyTGF5b3V0ID0gUXVlcnlCdWlsZGVyTGF5b3V0LlN0YW5kYXJkLFxuICAgICAgICBoaXN0b3J5Q2FjaGVLZXk6IHN0cmluZyA9ICcnLCBoaXN0b3J5SWNvbk9uVG9wID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlDYWNoZUtleSA9IGhpc3RvcnlDYWNoZUtleTtcbiAgICAgICAgdGhpcy5oaXN0b3J5SWNvbk9uVG9wID0gaGlzdG9yeUljb25PblRvcDtcbiAgICAgICAgXG4gICAgICAgIGlmIChpbml0aWFsQ29uZGl0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0Q29uZGl0aW9uID0gdGhpcy5jcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnM6IFtkZWZhdWx0Q29uZGl0aW9uXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMuYnVpbGRVSSh0aGlzLmNvbmRpdGlvbiwgdW5kZWZpbmVkLCAwKTtcbiAgICAgICAgdGhpcy5zZXR1cEhpc3RvcnlJY29uKCk7XG4gICAgfVxuXG4gICAgc2V0IGhpc3RvcnlDYWNoZShrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9oaXN0b3J5Q2FjaGVLZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuc2V0dXBIaXN0b3J5SWNvbigpOyAvLyBUaGlzIHdpbGwgY29udHJvbCB2aXNpYmlsaXR5XG4gICAgfVxuXG4gICAgc2F2ZUNvbmRpdGlvblRvSGlzdG9yeSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2hpc3RvcnlDYWNoZUtleSlcbiAgICAgICAgICAgIHNhdmVIaXN0b3J5KHRoaXMuX2hpc3RvcnlDYWNoZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25kaXRpb24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwSGlzdG9yeUljb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oaXN0b3J5SWNvbikge1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5SWNvbiA9IHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dIaXN0b3J5TWVudSgpO1xuICAgICAgICAgICAgfSwgJ1F1ZXJ5IEhpc3RvcnknKTtcblxuICAgICAgICAgICAgdGhpcy5oaXN0b3J5SWNvbi5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLWhpc3RvcnktaWNvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGlzdG9yeUljb25PblRvcClcbiAgICAgICAgICAgIHRoaXMucm9vdC5wcmVwZW5kKHRoaXMuaGlzdG9yeUljb24pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5oaXN0b3J5SWNvbik7XG4gICAgICAgIFxuICAgICAgICAvLyBTZXQgZGF0YSBhdHRyaWJ1dGUgZm9yIENTUyB0byBjb250cm9sIHZpc2liaWxpdHlcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LnNldEF0dHJpYnV0ZSgnZGF0YS1oaXN0b3J5JywgdGhpcy5faGlzdG9yeUNhY2hlS2V5ICA9PT0gJycgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0hpc3RvcnlNZW51KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtczogSGlzdG9yeUl0ZW1bXSA9IGdldEhpc3RvcnkodGhpcy5faGlzdG9yeUNhY2hlS2V5KTtcbiAgICAgICAgY29uc3QgbWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgbWVudS5pdGVtcyhpdGVtcy5tYXAoKGl0KSA9PiB1aS50b29scy5jbGljayhcbiAgICAgICAgICAgIHVpLmRpdkgoW1xuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQoaXQuZGF0ZS50b1N0cmluZygpLCB7c3R5bGU6IHtjb2xvcjogJyM3OTkwQTUnfX0pLFxuICAgICAgICAgICAgICAgIHVpLmRpdlRleHQodGhpcy5jb25kaXRpb25Ub1N0cmluZyhKU09OLnBhcnNlKGl0LnZhbHVlKSBhcyBDb21wbGV4Q29uZGl0aW9uKSksXG4gICAgICAgICAgICBdLCB7c3R5bGU6IHtnYXA6ICc1cHgnfX0pLFxuICAgICAgICAoKSA9PiB7dGhpcy5sb2FkQ29uZGl0aW9uKEpTT04ucGFyc2UoaXQudmFsdWUpKX0pKSwgKCkgPT4ge30pO1xuICAgICAgICBtZW51LnNob3coKTtcbiAgICB9XG5cbiAgICBsb2FkQ29uZGl0aW9uKGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29uZGl0aW9uKSk7XG4gICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICB9XG5cbiAgICBjb25kaXRpb25Ub1N0cmluZyhjb25kaXRpb246IENvbXBsZXhDb25kaXRpb24pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbiB8fCAhY29uZGl0aW9uLmNvbmRpdGlvbnMgfHwgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ05vIGNvbmRpdGlvbnMnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBjb25kaXRpb24sIGRvbid0IHdyYXAgaXQgaW4gbG9naWNhbCBvcGVyYXRvclxuICAgICAgICBpZiAoY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uVG9TdHJpbmcoY29uZGl0aW9uLmNvbmRpdGlvbnNbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIG11bHRpcGxlIGNvbmRpdGlvbnMsIHdyYXAgdGhlbSBpbiBsb2dpY2FsIG9wZXJhdG9yXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcCA9IGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPT09IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA/ICdBTkQnIDogJ09SJztcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3RyaW5ncyA9IGNvbmRpdGlvbi5jb25kaXRpb25zLm1hcChjb25kID0+IHRoaXMuZXhwcmVzc2lvblRvU3RyaW5nKGNvbmQpKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBgKCR7Y29uZGl0aW9uU3RyaW5ncy5qb2luKGAgJHtsb2dpY2FsT3B9IGApfSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwcmVzc2lvblRvU3RyaW5nKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiBzdHJpbmcge1xuICAgICAgICBpZiAoJ2ZpZWxkJyBpbiBleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgU2ltcGxlQ29uZGl0aW9uXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW1wbGVDb25kaXRpb25Ub1N0cmluZyhleHByZXNzaW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBDb21wbGV4Q29uZGl0aW9uIChyZWN1cnNpdmUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25Ub1N0cmluZyhleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2ltcGxlQ29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBTaW1wbGVDb25kaXRpb24pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbmRpdGlvbi5maWVsZCB8fCAnVW5rbm93biBmaWVsZCc7XG4gICAgICAgIGNvbnN0IG9wZXJhdG9yID0gY29uZGl0aW9uLm9wZXJhdG9yIHx8ICdVbmtub3duIG9wZXJhdG9yJztcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25kaXRpb24udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjb25kaXRpb24udmFsdWUgIT09IG51bGwgPyBcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGNvbmRpdGlvbi52YWx1ZSkgPyBgWyR7Y29uZGl0aW9uLnZhbHVlLmpvaW4oJywgJyl9XWAgOiBTdHJpbmcoY29uZGl0aW9uLnZhbHVlKSkgOiBcbiAgICAgICAgICAgICdObyB2YWx1ZSc7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYCR7ZmllbGR9ICR7b3BlcmF0b3J9ICR7dmFsdWV9YDtcbiAgICB9XG5cbiAgICBjcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk6IFNpbXBsZUNvbmRpdGlvbiB7XG4gICAgICAgIGNvbnN0IGZpcnN0UHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNbMF07XG4gICAgICAgIGlmIChmaXJzdFByb3BlcnR5KSB7XG4gICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSByZWdpc3RyeS5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShmaXJzdFByb3BlcnR5KTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0T3BlcmF0b3IgPSBvcGVyYXRvcnNbMF07XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IGZpcnN0UHJvcGVydHkubmFtZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogZmlyc3RPcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJycsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJydcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICByZWJ1aWxkVUkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1Jvb3QgPSB0aGlzLmJ1aWxkVUkodGhpcy5jb25kaXRpb24sIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgIHRoaXMucm9vdC5yZXBsYWNlV2l0aChuZXdSb290KTtcbiAgICAgICAgdGhpcy5yb290ID0gbmV3Um9vdDtcbiAgICAgICAgXG4gICAgICAgIC8vIFJlY3JlYXRlIGhpc3RvcnkgaWNvbiBhZnRlciByZWJ1aWxkaW5nIFVJXG4gICAgICAgIHRoaXMuc2V0dXBIaXN0b3J5SWNvbigpO1xuICAgIH1cblxuICAgIHNldExheW91dChsYXlvdXQ6IFF1ZXJ5QnVpbGRlckxheW91dCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxheW91dCA9IGxheW91dDtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93KVxuICAgICAgICAgICAgdGhpcy5yb290LmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItbmFycm93Jyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucm9vdC5jbGFzc0xpc3QucmVtb3ZlKCdxdWVyeS1idWlsZGVyLW5hcnJvdycpO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCBhbGwgZmlsdGVyIGNvbnRhaW5lcnMgYW5kIGFwcGx5L3JlbW92ZSBsYXlvdXQgY2xhc3Nlc1xuICAgICAgICBjb25zdCBmaWx0ZXJDb250YWluZXJzID0gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMsIC5xdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMtbmFycm93Jyk7XG4gICAgICAgIFxuICAgICAgICBmaWx0ZXJDb250YWluZXJzLmZvckVhY2goY29udGFpbmVyID0+IHtcbiAgICAgICAgICAgIGlmIChsYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldExheW91dCgpOiBRdWVyeUJ1aWxkZXJMYXlvdXQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQ7XG4gICAgfVxuXG4gICAgYnVpbGRVSShcbiAgICAgICAgY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICBwYXJlbnRDb25kaXRpb24/OiBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICBuZXN0aW5nTGV2ZWw6IG51bWJlciA9IDBcbiAgICApOiBIVE1MRWxlbWVudCB7XG5cbiAgICAgICAgLy9yZXNldCB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICB0aGlzLmludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IubmV4dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbiA9IChjb25kVG9SZW1vdmU6IEV4cHJlc3Npb24sIGNvbmRBcnJheT86IEV4cHJlc3Npb25bXSwgcmVwbGFjZUNvbmQ/OiBDb21wbGV4Q29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZEFycmF5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZElkeCA9IGNvbmRBcnJheS5pbmRleE9mKGNvbmRUb1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRJZHggIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlQ29uZCA/IGNvbmRBcnJheVtjb25kSWR4XSA9IHJlcGxhY2VDb25kIDogY29uZEFycmF5LnNwbGljZShjb25kSWR4LCAxKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNyZWF0ZVByb3BlcnR5RmlsdGVyQ29udGFpbmVyID0gKGNvbmQ6IFNpbXBsZUNvbmRpdGlvbiwgcGFyZW50Q29uZGl0aW9uPzogQ29tcGxleENvbmRpdGlvbikgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkob3BlcmF0b3JJbnB1dERpdik7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBnZXRQcm9wQnlGcmllbmRseU5hbWUoZmllbGRDaG9pY2VJbnB1dC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAvL2luIGNhc2Ugb2YgYm9vbGVhbiBpbnB1dCB3ZSBuZWVkIHRvIGhpZGUgb3BlcmF0b3JzIGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS50eXBlID09PSBERy5UWVBFLkJPT0wpXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYm9vbGVhbi1pbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnYm9vbGVhbi1pbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ycyA9IHJlZ2lzdHJ5LmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kLm9wZXJhdG9yIHx8IGNvbmQub3BlcmF0b3IgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gb3BlcmF0b3JzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoY29uZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb25kLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IG9wZXJhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciA9IG9wZXJhdG9yc0lucHV0LnZhbHVlITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9ySW5wdXREaXYuYXBwZW5kKG9wZXJhdG9yc0lucHV0LnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVFZGl0b3IocHJvcGVydHksIGNvbmQub3BlcmF0b3IsIGNvbmQpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZUVkaXRvciA9IChwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGNvbmRpdGlvbjogU2ltcGxlQ29uZGl0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkoY3JpdGVyaWFEaXYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gQ29uZGl0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSByZWdpc3RyeS5nZXRDb25kaXRpb25FZGl0b3IocHJvcGVydHksIG9wZXJhdG9yLCBjb25kaXRpb24pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChlZGl0b3IuY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub25WYWxpZGF0aW9uRXJyb3Iuc3Vic2NyaWJlKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3IubmV4dChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3JpdGVyaWFEaXYuYXBwZW5kKGVkaXRvci5yb290KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2V0UHJvcEJ5TmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5uYW1lID09PSBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdldFByb3BCeUZyaWVuZGx5TmFtZSA9IChmcmllbmRseU5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllcy5maW5kKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5mcmllbmRseU5hbWUgPT09IGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AubmFtZSA9PT0gZnJpZW5kbHlOYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdldEZpZWxkQ2hvaWNlSW5wdXRWYWwgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGdldFByb3BCeU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A/LmZyaWVuZGx5TmFtZSA/PyBwcm9wPy5uYW1lID8/ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRQcm9wTmFtZUJ5Q2hvaWNlSW5wdXRWYWwgPSAoZnJpZW5kbHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wID0gZ2V0UHJvcEJ5RnJpZW5kbHlOYW1lKGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A/Lm5hbWUgPz8gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmQuZmllbGQgPz89IHRoaXMucHJvcGVydGllc1swXT8ubmFtZSB8fCAnJztcblxuICAgICAgICAgICAgY29uc3QgZmllbGRDaG9pY2VJbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnByb3BlcnRpZXMubWFwKChwcm9wOiBERy5Qcm9wZXJ0eSkgPT4gcHJvcC5mcmllbmRseU5hbWUgPz8gcHJvcC5uYW1lKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZ2V0RmllbGRDaG9pY2VJbnB1dFZhbChjb25kLmZpZWxkKSxcbiAgICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZC5maWVsZCA9IGdldFByb3BOYW1lQnlDaG9pY2VJbnB1dFZhbChmaWVsZENob2ljZUlucHV0LnZhbHVlISk7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoY29uZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZUZpZWxkSWNvbiA9IHVpLmljb25zLmRlbGV0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGZpbHRlckNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uKGNvbmQsIHBhcmVudENvbmRpdGlvbiA/IHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zIDogY29uZGl0aW9uLmNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfSwgJ1JlbW92ZSBjdXJyZW50IGNvbmRpdGlvbicpO1xuXG4gICAgICAgICAgICBjb25zdCBhZGROZXN0ZWRDb25kaXRpb25JY29uID0gdWkuaWNvbnMuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb25kID0geyBsb2dpY2FsT3BlcmF0b3I6IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCwgY29uZGl0aW9uczogW2NvbmRdIH07XG4gICAgICAgICAgICAgICAgcmVtb3ZlT3JSZXBsYWNlQ29uZGl0aW9uKGNvbmQsIHBhcmVudENvbmRpdGlvbiA/IHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zIDogY29uZGl0aW9uLmNvbmRpdGlvbnMsIHBhcmVudENvbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuXG4gICAgICAgICAgICB9LCAnQWRkIG5lc3RlZCBjb25kaXRpb24nKTtcblxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JJbnB1dERpdiA9IHVpLmRpdignJywgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLW9wZXJhdG9yJyk7XG4gICAgICAgICAgICBjb25zdCBjcml0ZXJpYURpdiA9IHVpLmRpdigpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJDb250YWluZXIgPSB1aS5kaXYoW1xuICAgICAgICAgICAgICAgIHVpLmRpdihbZmllbGRDaG9pY2VJbnB1dC5yb290XSwgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWZpZWxkJyksXG4gICAgICAgICAgICAgICAgdWkuZGl2KFtvcGVyYXRvcklucHV0RGl2XSwgJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLW9wZXJhdG9yJyksXG4gICAgICAgICAgICAgICAgdWkuZGl2KFtjcml0ZXJpYURpdl0sICdxdWVyeS1idWlsZGVyLWZpbHRlci12YWx1ZScpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbYWRkTmVzdGVkQ29uZGl0aW9uSWNvbiwgZGVsZXRlRmllbGRJY29uXSwgJ2FkZC1kZWxldGUtaWNvbnMnKVxuICAgICAgICAgICAgXSwgdGhpcy5sYXlvdXQgPT09IFF1ZXJ5QnVpbGRlckxheW91dC5OYXJyb3cgPyAncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycgOiAncXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzJyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChmaWx0ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgY3JlYXRlRmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkaW5nIGZpbHRlciBmaWVsZFxuICAgICAgICBjb25zdCBhZGRGaWVsZEljb24gPSB1aS5pY29ucy5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uRm9yRmlsdGVyOiBTaW1wbGVDb25kaXRpb24gPSB0aGlzLmNyZWF0ZURlZmF1bHRTaW1wbGVDb25kaXRpb24oKTtcbiAgICAgICAgICAgIGNvbmRpdGlvbi5jb25kaXRpb25zPy5wdXNoKGNvbmRpdGlvbkZvckZpbHRlcik7XG4gICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucy5sZW5ndGggPCAyID8gY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3Byb3BlcnR5LXF1ZXJ5LWJ1aWxkZXItbXVsdGlwZS1maWxlbGRzJykgOlxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpO1xuICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgfSwgJ0FkZCBmaWVsZCB0byB0aGUgY29uZGl0aW9uJyk7XG5cbiAgICAgICAgLy8gQU5EL09SIG9wZXJhdG9ycyBoYW5kbGluZ1xuICAgICAgICBjb25kaXRpb24ubG9naWNhbE9wZXJhdG9yID8/PSBPcGVyYXRvcnMuTG9naWNhbC5hbmQ7XG5cbiAgICAgICAgY29uc3QgbG9naWNhbE9wZXJhdG9yQ2hvaWNlID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7XG4gICAgICAgICAgICB2YWx1ZTogY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9PT0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kID8gJ2FsbCcgOiAnYW55JyxcbiAgICAgICAgICAgIGl0ZW1zOiBbJ2FsbCcsICdhbnknXSxcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA9IGxvZ2ljYWxPcGVyYXRvckNob2ljZS52YWx1ZSEgPT09ICdhbGwnID8gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kIDogT3BlcmF0b3JzLkxvZ2ljYWwub3I7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgbG9naWNhbE9wZXJhdG9yRGl2ID0gdWkuZGl2SChbdWkuZGl2VGV4dCgnTWF0Y2gnKSwgbG9naWNhbE9wZXJhdG9yQ2hvaWNlLnJvb3RdLCAncXVlcnktYnVpbGRlci1tYXRjaC1kaXYnKTtcblxuICAgICAgICBjb25zdCBhZGREZWxldGVJY29uc0RpdiA9IHVpLmRpdkgoW2FkZEZpZWxkSWNvbl0sICduZXN0ZWQtYWRkLWRlbGV0ZS1pY29ucycpO1xuICAgICAgICBjb25zdCBpY29uc0RpdiA9IHVpLmRpdkgoW2xvZ2ljYWxPcGVyYXRvckRpdiwgYWRkRGVsZXRlSWNvbnNEaXZdLCAncXVlcnktYnVpbGRlci1uZXN0ZWQtY29uZGl0aW9uLW9wZXJhdG9ycycpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB1aS5kaXZWKFtpY29uc0Rpdl0sICdxdWVyeS1idWlsZGVyLXNlYXJjaC1xdWVyeS1vcGVyYXRvcicpO1xuXG5cbiAgICAgICAgaWYgKG5lc3RpbmdMZXZlbCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2RhdGEtbmVzdGluZy1sZXZlbCcsIG5lc3RpbmdMZXZlbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5nZW5lcmF0ZU5lc3RpbmdDb2xvcihuZXN0aW5nTGV2ZWwpO1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KCctLW5lc3RpbmctY29sb3InLCBjb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2RlbGV0ZSBpY29uIGZvciBuZXN0ZWQgY29uZGl0aW9ucyB0byByZW1vdmUgdGhlIHdob2xlIG5lc3RlZCBjb25kaXRpb24gYXQgb25jZVxuICAgICAgICBpZiAocGFyZW50Q29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVDb25kaXRpb24gPSB1aS5pY29ucy5kZWxldGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kaXRpb24sIHBhcmVudENvbmRpdGlvbi5jb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWRkRGVsZXRlSWNvbnNEaXYuYXBwZW5kKGRlbGV0ZUNvbmRpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZENvbmRpdGlvbiBvZiBjb25kaXRpb24uY29uZGl0aW9ucyEpIHtcbiAgICAgICAgICAgIGlmICgnZmllbGQnIGluIG5lc3RlZENvbmRpdGlvbilcbiAgICAgICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eUZpbHRlckNvbnRhaW5lcihuZXN0ZWRDb25kaXRpb24pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkQ29udGFpbmVyID0gdGhpcy5idWlsZFVJKG5lc3RlZENvbmRpdGlvbiBhcyBDb21wbGV4Q29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24sIG5lc3RpbmdMZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobmVzdGVkQ29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmRpdGlvbi5jb25kaXRpb25zLmxlbmd0aCA8IDIgPyBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKSA6XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKTtcblxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH1cblxuICAgIGdlbmVyYXRlTmVzdGluZ0NvbG9yKGxldmVsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiYXNlQ29sb3IgPSB7IHI6IDE4NywgZzogMjIyLCBiOiAyNTEgfTtcblxuICAgICAgICBjb25zdCBkYXJrZW5pbmdGYWN0b3IgPSBNYXRoLm1pbigwLjEgKyAobGV2ZWwgLSAxKSAqIDAuMDgsIDAuOSk7XG5cbiAgICAgICAgY29uc3QgciA9IE1hdGgucm91bmQoYmFzZUNvbG9yLnIgKiAoMSAtIGRhcmtlbmluZ0ZhY3RvcikpO1xuICAgICAgICBjb25zdCBnID0gTWF0aC5yb3VuZChiYXNlQ29sb3IuZyAqICgxIC0gZGFya2VuaW5nRmFjdG9yKSk7XG4gICAgICAgIGNvbnN0IGIgPSBNYXRoLnJvdW5kKGJhc2VDb2xvci5iICogKDEgLSBkYXJrZW5pbmdGYWN0b3IpKTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIGhleFxuICAgICAgICByZXR1cm4gYCMke3IudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtnLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfSR7Yi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBzdWdnZXN0aW9uTWVudUtleU5hdmlnYXRpb24oaW5wdXRDb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gIGlucHV0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgIGlmIChlLmtleSAhPT0gJ0Fycm93RG93bicgJiYgZS5rZXkgIT09ICdBcnJvd1VwJyAmJiBlLmtleSAhPT0gJ0VudGVyJylcbiAgICAgIHJldHVybjtcbiAgICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZDogSFRNTEVsZW1lbnQgfCBudWxsID0gaW5wdXRDb250YWluZXIucXVlcnlTZWxlY3RvcignLmQ0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICAgIGNvbnN0IGFsbEl0ZW1zOiBIVE1MRWxlbWVudFtdID0gQXJyYXkuZnJvbShpbnB1dENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZDQtbWVudS1pdGVtJykgPz8gW10pO1xuICAgIGlmICghYWxsSXRlbXMgfHwgYWxsSXRlbXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIGFsbEl0ZW1zLnNvcnQoKGEsIGIpID0+IGEub2Zmc2V0VG9wIC0gYi5vZmZzZXRUb3ApOyAvLyBzb3J0IGJ5IHZlcnRpY2FsIHBvc2l0aW9uXG5cbiAgICBsZXQgY3VycmVudEluZGV4ID0gY3VycmVudGx5U2VsZWN0ZWQgPyBhbGxJdGVtcy5pbmRleE9mKGN1cnJlbnRseVNlbGVjdGVkKSA6IC0xO1xuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93RG93bicpXG4gICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBhbGxJdGVtcy5sZW5ndGg7XG4gICAgZWxzZSBpZiAoZS5rZXkgPT09ICdBcnJvd1VwJylcbiAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggLSAxICsgYWxsSXRlbXMubGVuZ3RoKSAlIGFsbEl0ZW1zLmxlbmd0aDtcbiAgICBlbHNlIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiBjdXJyZW50bHlTZWxlY3RlZCkge1xuICAgICAgY3VycmVudGx5U2VsZWN0ZWQuY2xpY2soKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3VycmVudGx5U2VsZWN0ZWQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LW1lbnUtaXRlbS1ob3ZlcicpO1xuICAgIGFsbEl0ZW1zW2N1cnJlbnRJbmRleF0uY2xhc3NMaXN0LmFkZCgnZDQtbWVudS1pdGVtLWhvdmVyJyk7XG4gIH0pO1xufVxuXG4iXX0=
package/src/u2.css CHANGED
@@ -10,4 +10,32 @@
10
10
 
11
11
  .u2-panel {
12
12
  gap: 10px;
13
+ }
14
+
15
+ .u2-app-header-bottom-line {
16
+ border-bottom: solid 1px lightgrey;
17
+ }
18
+
19
+ .u2-app-header-with-name {
20
+ gap: 60px;
21
+ }
22
+
23
+ .u2-app-header-with-name .ui-app-header-icon{
24
+ width: 90px;
25
+ height: 90px;
26
+ }
27
+
28
+ .u2-app-header-app-name-and-slogan-div {
29
+ gap: 10px;
30
+ margin-top: 10px;
31
+ }
32
+
33
+ .u2-app-header-app-name-div {
34
+ font-size: 20px;
35
+ font-weight: bold;
36
+ }
37
+
38
+ .u2-app-header-description {
39
+ margin-top: 10px;
40
+ margin-bottom: 10px;
13
41
  }
package/src/u2.d.ts CHANGED
@@ -11,6 +11,9 @@ export declare namespace u2 {
11
11
  iconPath: string;
12
12
  description: string;
13
13
  learnMoreUrl?: string;
14
+ appTitle?: string;
15
+ appSubTitle?: string;
16
+ bottomLine?: boolean;
14
17
  }
15
18
  function appHeader(header: IAppInfo): HTMLElement;
16
19
  namespace tools {
package/src/u2.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"u2.d.ts","sourceRoot":"","sources":["u2.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,CAAC;AAGlB,yBAAiB,EAAE,CAAC;IAElB,MAAM;IACN,UAAiB,MAAM,CAAC;QAEtB,kCAAkC;QAClC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,CAE9C;QAED,oCAAoC;QACpC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,CAE9C;KAEF;IAED,UAAiB,QAAQ;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAED,SAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CAWvD;IAGD,UAAiB,KAAK,CAAC;QAErB;0CACkC;QAClC,SAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,0BAW1E;KACF;CACF"}
1
+ {"version":3,"file":"u2.d.ts","sourceRoot":"","sources":["u2.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,CAAC;AAGlB,yBAAiB,EAAE,CAAC;IAElB,MAAM;IACN,UAAiB,MAAM,CAAC;QAEtB,kCAAkC;QAClC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,CAE9C;QAED,oCAAoC;QACpC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,CAE9C;KAEF;IAED,UAAiB,QAAQ;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB;IAED,SAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CAwBvD;IAGD,UAAiB,KAAK,CAAC;QAErB;0CACkC;QAClC,SAAsB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,0BAW1E;KACF;CACF"}
package/src/u2.js CHANGED
@@ -30,13 +30,26 @@ export var u2;
30
30
  function appHeader(header) {
31
31
  const icon = ui.iconImage('', header.iconPath);
32
32
  $(icon).addClass('ui-app-header-icon').css('margin-right', '20px');
33
- return panels.horz([
34
- icon,
35
- panels.vert([
36
- ui.markdown(header.description),
37
- header.learnMoreUrl ? ui.link('Learn more', header.learnMoreUrl) : null
38
- ])
33
+ const appHeaderDiv = panels.horz([]);
34
+ if (header.appTitle) {
35
+ appHeaderDiv.classList.add('u2-app-header-with-name');
36
+ const nameDiv = ui.divV([ui.divText(header.appTitle, 'u2-app-header-app-name-div')], 'u2-app-header-app-name-and-slogan-div');
37
+ if (header.appSubTitle)
38
+ nameDiv.append(ui.divText(header.appSubTitle));
39
+ const iconDiv = ui.div(icon);
40
+ appHeaderDiv.append(ui.divH([iconDiv, nameDiv]));
41
+ }
42
+ else
43
+ appHeaderDiv.append(icon);
44
+ const description = panels.vert([
45
+ ui.markdown(header.description),
46
+ header.learnMoreUrl ? ui.link('Learn more', header.learnMoreUrl, undefined, { style: { marginLeft: '15px' } }) : null
39
47
  ]);
48
+ description.classList.add('u2-app-header-description');
49
+ appHeaderDiv.append(description);
50
+ if (header.bottomLine)
51
+ appHeaderDiv.classList.add('u2-app-header-bottom-line');
52
+ return appHeaderDiv;
40
53
  }
41
54
  u2.appHeader = appHeader;
42
55
  let tools;
@@ -60,4 +73,4 @@ export var u2;
60
73
  tools.runAsync = runAsync;
61
74
  })(tools = u2.tools || (u2.tools = {}));
62
75
  })(u2 || (u2 = {}));
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sVUFBVSxDQUFDO0FBR2xCLE1BQU0sS0FBVyxFQUFFLENBc0RsQjtBQXRERCxXQUFpQixFQUFFO0lBRWpCLE1BQU07SUFDTixJQUFpQixNQUFNLENBWXRCO0lBWkQsV0FBaUIsTUFBTTtRQUVyQixrQ0FBa0M7UUFDbEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7UUFFRCxvQ0FBb0M7UUFDcEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7SUFFSCxDQUFDLEVBWmdCLE1BQU0sR0FBTixTQUFNLEtBQU4sU0FBTSxRQVl0QjtJQVFELFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtRQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbkUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2pCLElBQUk7WUFDSixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNWLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDL0IsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQ3hFLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBWGUsWUFBUyxZQVd4QixDQUFBO0lBR0QsSUFBaUIsS0FBSyxDQWdCckI7SUFoQkQsV0FBaUIsS0FBSztRQUVwQjswQ0FDa0M7UUFDbEMsU0FBc0IsUUFBUSxDQUFJLElBQWlCLEVBQUUsSUFBc0I7O2dCQUN6RSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxJQUFJO29CQUNGLE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztpQkFDckI7Z0JBQ0QsT0FBTyxDQUFDLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBVyxDQUFDLENBQUM7aUJBQzdCO3dCQUNPO29CQUNOLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3BDO1lBQ0gsQ0FBQztTQUFBO1FBWHFCLGNBQVEsV0FXN0IsQ0FBQTtJQUNILENBQUMsRUFoQmdCLEtBQUssR0FBTCxRQUFLLEtBQUwsUUFBSyxRQWdCckI7QUFDSCxDQUFDLEVBdERnQixFQUFFLEtBQUYsRUFBRSxRQXNEbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQgJy4vdTIuY3NzJztcblxuXG5leHBvcnQgbmFtZXNwYWNlIHUyIHtcblxuICAvKiogKi9cbiAgZXhwb3J0IG5hbWVzcGFjZSBwYW5lbHMge1xuXG4gICAgLyoqIFZlcnRpY2FsbHkgcG9zaXRpb25lZCBpdGVtcyAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiB2ZXJ0KGl0ZW1zOiBhbnlbXSk6IEhUTUxFbGVtZW50IHtcbiAgICAgIHJldHVybiB1aS5kaXZWKGl0ZW1zLm1hcCgoaXRlbSkgPT4gdWkucmVuZGVyKGl0ZW0pKSwgeyBjbGFzc2VzOiAndTItcGFuZWwnfSk7XG4gICAgfVxuXG4gICAgLyoqIEhvcml6b250YWxseSBwb3NpdGlvbmVkIGl0ZW1zICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIGhvcnooaXRlbXM6IGFueVtdKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIHVpLmRpdkgoaXRlbXMubWFwKChpdGVtKSA9PiB1aS5yZW5kZXIoaXRlbSkpLCB7IGNsYXNzZXM6ICd1Mi1wYW5lbCd9KTtcbiAgICB9XG5cbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSUFwcEluZm8ge1xuICAgIGljb25QYXRoOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBsZWFybk1vcmVVcmw/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXBwSGVhZGVyKGhlYWRlcjogSUFwcEluZm8pOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgaWNvbiA9IHVpLmljb25JbWFnZSgnJywgaGVhZGVyLmljb25QYXRoKTtcbiAgICAkKGljb24pLmFkZENsYXNzKCd1aS1hcHAtaGVhZGVyLWljb24nKS5jc3MoJ21hcmdpbi1yaWdodCcsICcyMHB4Jyk7XG5cbiAgICByZXR1cm4gcGFuZWxzLmhvcnooW1xuICAgICAgaWNvbixcbiAgICAgIHBhbmVscy52ZXJ0KFtcbiAgICAgICAgdWkubWFya2Rvd24oaGVhZGVyLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgaGVhZGVyLmxlYXJuTW9yZVVybCA/IHVpLmxpbmsoJ0xlYXJuIG1vcmUnLCBoZWFkZXIubGVhcm5Nb3JlVXJsKSA6IG51bGxcbiAgICAgIF0pXG4gICAgXSk7XG4gIH1cblxuXG4gIGV4cG9ydCBuYW1lc3BhY2UgdG9vbHMge1xuXG4gICAgLyoqIEV4ZWN1dGVzIHtAbGluayBmdW5jfSB3aGlsZSBzaG93aW5nIHRoZSBcInJ1bm5pbmdcIiBpbmRpY2F0b3Igb24ge0BsaW5rIHJvb3R9LlxuICAgICAqIEhhbmRsZXMgYW5kIGxvZ3MgZXhjZXB0aW9ucy4gKi9cbiAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQXN5bmM8VD4ocm9vdDogSFRNTEVsZW1lbnQsIGZ1bmM6ICgpID0+IFByb21pc2U8VD4pIHtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihyb290LCB0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmdW5jKCk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZSkge1xuICAgICAgICBncm9rLmxvZy5lcnJvcihlIGFzIHN0cmluZyk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHJvb3QsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXX0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sVUFBVSxDQUFDO0FBR2xCLE1BQU0sS0FBVyxFQUFFLENBc0VsQjtBQXRFRCxXQUFpQixFQUFFO0lBRWpCLE1BQU07SUFDTixJQUFpQixNQUFNLENBWXRCO0lBWkQsV0FBaUIsTUFBTTtRQUVyQixrQ0FBa0M7UUFDbEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7UUFFRCxvQ0FBb0M7UUFDcEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7SUFFSCxDQUFDLEVBWmdCLE1BQU0sR0FBTixTQUFNLEtBQU4sU0FBTSxRQVl0QjtJQVdELFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtRQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLDRCQUE0QixDQUFDLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzlILElBQUksTUFBTSxDQUFDLFdBQVc7Z0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7O1lBRUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUMvQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDbEgsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN2RCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksTUFBTSxDQUFDLFVBQVU7WUFDbkIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBeEJlLFlBQVMsWUF3QnhCLENBQUE7SUFHRCxJQUFpQixLQUFLLENBZ0JyQjtJQWhCRCxXQUFpQixLQUFLO1FBRXBCOzBDQUNrQztRQUNsQyxTQUFzQixRQUFRLENBQUksSUFBaUIsRUFBRSxJQUFzQjs7Z0JBQ3pFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLElBQUksRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxPQUFPLENBQUMsRUFBRTtvQkFDUixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFXLENBQUMsQ0FBQztpQkFDN0I7d0JBQ087b0JBQ04sRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDO1NBQUE7UUFYcUIsY0FBUSxXQVc3QixDQUFBO0lBQ0gsQ0FBQyxFQWhCZ0IsS0FBSyxHQUFMLFFBQUssS0FBTCxRQUFLLFFBZ0JyQjtBQUNILENBQUMsRUF0RWdCLEVBQUUsS0FBRixFQUFFLFFBc0VsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAkIGZyb20gJ2Nhc2gtZG9tJztcbmltcG9ydCAnLi91Mi5jc3MnO1xuXG5cbmV4cG9ydCBuYW1lc3BhY2UgdTIge1xuXG4gIC8qKiAqL1xuICBleHBvcnQgbmFtZXNwYWNlIHBhbmVscyB7XG5cbiAgICAvKiogVmVydGljYWxseSBwb3NpdGlvbmVkIGl0ZW1zICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZlcnQoaXRlbXM6IGFueVtdKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIHVpLmRpdlYoaXRlbXMubWFwKChpdGVtKSA9PiB1aS5yZW5kZXIoaXRlbSkpLCB7IGNsYXNzZXM6ICd1Mi1wYW5lbCd9KTtcbiAgICB9XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IHBvc2l0aW9uZWQgaXRlbXMgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaG9yeihpdGVtczogYW55W10pOiBIVE1MRWxlbWVudCB7XG4gICAgICByZXR1cm4gdWkuZGl2SChpdGVtcy5tYXAoKGl0ZW0pID0+IHVpLnJlbmRlcihpdGVtKSksIHsgY2xhc3NlczogJ3UyLXBhbmVsJ30pO1xuICAgIH1cblxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJQXBwSW5mbyB7XG4gICAgaWNvblBhdGg6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGxlYXJuTW9yZVVybD86IHN0cmluZztcbiAgICBhcHBUaXRsZT86IHN0cmluZztcbiAgICBhcHBTdWJUaXRsZT86IHN0cmluZztcbiAgICBib3R0b21MaW5lPzogYm9vbGVhbjsgXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXBwSGVhZGVyKGhlYWRlcjogSUFwcEluZm8pOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgaWNvbiA9IHVpLmljb25JbWFnZSgnJywgaGVhZGVyLmljb25QYXRoKTtcbiAgICAkKGljb24pLmFkZENsYXNzKCd1aS1hcHAtaGVhZGVyLWljb24nKS5jc3MoJ21hcmdpbi1yaWdodCcsICcyMHB4Jyk7XG4gICAgY29uc3QgYXBwSGVhZGVyRGl2ID0gcGFuZWxzLmhvcnooW10pO1xuICAgIGlmIChoZWFkZXIuYXBwVGl0bGUpIHtcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLXdpdGgtbmFtZScpO1xuICAgICAgY29uc3QgbmFtZURpdiA9IHVpLmRpdlYoW3VpLmRpdlRleHQoaGVhZGVyLmFwcFRpdGxlLCAndTItYXBwLWhlYWRlci1hcHAtbmFtZS1kaXYnKV0sICd1Mi1hcHAtaGVhZGVyLWFwcC1uYW1lLWFuZC1zbG9nYW4tZGl2Jyk7XG4gICAgICBpZiAoaGVhZGVyLmFwcFN1YlRpdGxlKVxuICAgICAgICBuYW1lRGl2LmFwcGVuZCh1aS5kaXZUZXh0KGhlYWRlci5hcHBTdWJUaXRsZSkpO1xuICAgICAgY29uc3QgaWNvbkRpdiA9IHVpLmRpdihpY29uKTtcbiAgICAgIGFwcEhlYWRlckRpdi5hcHBlbmQodWkuZGl2SChbaWNvbkRpdiwgbmFtZURpdl0pKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgYXBwSGVhZGVyRGl2LmFwcGVuZChpY29uKTtcblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcGFuZWxzLnZlcnQoW1xuICAgICAgdWkubWFya2Rvd24oaGVhZGVyLmRlc2NyaXB0aW9uKSxcbiAgICAgIGhlYWRlci5sZWFybk1vcmVVcmwgPyB1aS5saW5rKCdMZWFybiBtb3JlJywgaGVhZGVyLmxlYXJuTW9yZVVybCwgdW5kZWZpbmVkLCB7c3R5bGU6IHttYXJnaW5MZWZ0OiAnMTVweCd9fSkgOiBudWxsXG4gICAgXSk7XG4gICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZCgndTItYXBwLWhlYWRlci1kZXNjcmlwdGlvbicpO1xuICAgIGFwcEhlYWRlckRpdi5hcHBlbmQoZGVzY3JpcHRpb24pO1xuICAgIGlmIChoZWFkZXIuYm90dG9tTGluZSlcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLWJvdHRvbS1saW5lJyk7XG4gICAgcmV0dXJuIGFwcEhlYWRlckRpdjtcbiAgfVxuXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSB0b29scyB7XG5cbiAgICAvKiogRXhlY3V0ZXMge0BsaW5rIGZ1bmN9IHdoaWxlIHNob3dpbmcgdGhlIFwicnVubmluZ1wiIGluZGljYXRvciBvbiB7QGxpbmsgcm9vdH0uXG4gICAgICogSGFuZGxlcyBhbmQgbG9ncyBleGNlcHRpb25zLiAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Bc3luYzxUPihyb290OiBIVE1MRWxlbWVudCwgZnVuYzogKCkgPT4gUHJvbWlzZTxUPikge1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHJvb3QsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGdyb2subG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Iocm9vdCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==