@datagrok-libraries/utils 4.7.2 → 4.7.4

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/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "email": "aparamonov@datagrok.ai"
9
9
  },
10
10
  "fullName": "Utils",
11
- "version": "4.7.2",
11
+ "version": "4.7.4",
12
12
  "description": "Common utilities",
13
13
  "dependencies": {
14
14
  "cash-dom": "^8.1.1",
@@ -41,4 +41,4 @@
41
41
  "lint-fix": "eslint \"./src/**/*.ts\" --fix",
42
42
  "build-all": "npm --prefix ./../../js-api run build && npm run build"
43
43
  }
44
- }
44
+ }
@@ -702,7 +702,7 @@ export class QueryBuilder {
702
702
  removeOrReplaceCondition(condition, parentCondition.conditions);
703
703
  this.rebuildUI();
704
704
  this.structureChanged.next(this.condition);
705
- });
705
+ }, 'Delete');
706
706
  addDeleteIconsDiv.append(deleteCondition);
707
707
  }
708
708
  for (const nestedCondition of condition.conditions) {
@@ -751,4 +751,4 @@ function suggestionMenuKeyNavigation(inputContainer) {
751
751
  allItems[currentIndex].classList.add('d4-menu-item-hover');
752
752
  });
753
753
  }
754
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFB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SUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxpQkFBaUIsRUFBRTtZQUMvQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTztTQUNSO1FBQ0QsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAnLi4vLi4vY3NzL3F1ZXJ5LWJ1aWxkZXIuY3NzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5cbmV4cG9ydCBjb25zdCBTVUdHRVNUSU9OU19GVU5DVElPTiA9ICdzdWdnZXN0aW9uc0Z1bmN0aW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBPcGVyYXRvcnMge1xuICAgIGV4cG9ydCBjb25zdCBDT05UQUlOUyA9ICdjb250YWlucyc7XG4gICAgZXhwb3J0IGNvbnN0IElOID0gJ2luJztcbiAgICBleHBvcnQgY29uc3QgU1RBUlRTX1dJVEggPSAnc3RhcnRzIHdpdGgnO1xuICAgIGV4cG9ydCBjb25zdCBFTkRTX1dJVEggPSAnZW5kcyB3aXRoJztcbiAgICBleHBvcnQgY29uc3QgR1QgPSAnPic7XG4gICAgZXhwb3J0IGNvbnN0IEdURSA9ICc+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=
754
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInF1ZXJ5LWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFFMUQsTUFBTSxLQUFXLFNBQVMsQ0FzQnpCO0FBdEJELFdBQWlCLFNBQVM7SUFDVCxrQkFBUSxHQUFHLFVBQVUsQ0FBQztJQUN0QixZQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ1YscUJBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsbUJBQVMsR0FBRyxXQUFXLENBQUM7SUFDeEIsWUFBRSxHQUFHLEdBQUcsQ0FBQztJQUNULGFBQUcsR0FBRyxJQUFJLENBQUM7SUFDWCxZQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ1QsYUFBRyxHQUFHLElBQUksQ0FBQztJQUNYLFlBQUUsR0FBRyxHQUFHLENBQUM7SUFDVCxnQkFBTSxHQUFHLElBQUksQ0FBQztJQUNkLGdCQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xCLGVBQUssR0FBRyxPQUFPLENBQUM7SUFDaEIsWUFBRSxHQUFHLElBQUksQ0FBQztJQUNWLGlCQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3BCLG9CQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFCLHNCQUFZLEdBQUcsY0FBYyxDQUFDO0lBRTNDLElBQVksT0FHWDtJQUhELFdBQVksT0FBTztRQUNmLHNCQUFXLENBQUE7UUFDWCxvQkFBUyxDQUFBO0lBQ2IsQ0FBQyxFQUhXLE9BQU8sR0FBUCxpQkFBTyxLQUFQLGlCQUFPLFFB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QUFDO2FBQ25FLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksaUJBQWlCLEVBQUU7WUFDL0MsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUNELGlCQUFpQixhQUFqQixpQkFBaUIsdUJBQWpCLGlCQUFpQixDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMxRCxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgJy4uLy4uL2Nzcy9xdWVyeS1idWlsZGVyLmNzcyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuXG5leHBvcnQgY29uc3QgU1VHR0VTVElPTlNfRlVOQ1RJT04gPSAnc3VnZ2VzdGlvbnNGdW5jdGlvbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgT3BlcmF0b3JzIHtcbiAgICBleHBvcnQgY29uc3QgQ09OVEFJTlMgPSAnY29udGFpbnMnO1xuICAgIGV4cG9ydCBjb25zdCBJTiA9ICdpbic7XG4gICAgZXhwb3J0IGNvbnN0IFNUQVJUU19XSVRIID0gJ3N0YXJ0cyB3aXRoJztcbiAgICBleHBvcnQgY29uc3QgRU5EU19XSVRIID0gJ2VuZHMgd2l0aCc7XG4gICAgZXhwb3J0IGNvbnN0IEdUID0gJz4nO1xuICAgIGV4cG9ydCBjb25zdCBHVEUgPSAnPj0nO1xuICAgIGV4cG9ydCBjb25zdCBMVCA9ICc8JztcbiAgICBleHBvcnQgY29uc3QgTFRFID0gJzw9JztcbiAgICBleHBvcnQgY29uc3QgRVEgPSAnPSc7XG4gICAgZXhwb3J0IGNvbnN0IE5PVF9FUSA9ICchPSc7XG4gICAgZXhwb3J0IGNvbnN0IEJFRk9SRSA9ICdiZWZvcmUnO1xuICAgIGV4cG9ydCBjb25zdCBBRlRFUiA9ICdhZnRlcic7XG4gICAgZXhwb3J0IGNvbnN0IE9OID0gJ29uJztcbiAgICBleHBvcnQgY29uc3QgQkVUV0VFTiA9ICdiZXR3ZWVuJztcbiAgICBleHBvcnQgY29uc3QgSVNfU0lNSUxBUiA9ICdpcyBzaW1pbGFyJztcbiAgICBleHBvcnQgY29uc3QgSVNfQ09OVEFJTkVEID0gJ2lzIGNvbnRhaW5lZCc7XG5cbiAgICBleHBvcnQgZW51bSBMb2dpY2FsIHtcbiAgICAgICAgYW5kID0gJ2FuZCcsXG4gICAgICAgIG9yID0gJ29yJyxcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIFF1ZXJ5QnVpbGRlckxheW91dCB7XG4gICAgU3RhbmRhcmQgPSAnc3RhbmRhcmQnLFxuICAgIE5hcnJvdyA9ICduYXJyb3cnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlQ29uZGl0aW9uPFQgPSBhbnk+IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIG9wZXJhdG9yOiBzdHJpbmc7XG4gICAgdmFsdWU6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxleENvbmRpdGlvbiB7XG4gICAgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbDtcbiAgICBjb25kaXRpb25zOiBFeHByZXNzaW9uW107XG59XG5cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb248VCA9IGFueT4gPSBTaW1wbGVDb25kaXRpb248VD4gfCBDb21wbGV4Q29uZGl0aW9uO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlQ29uZGl0aW9uRWRpdG9yPFQgPSBhbnk+IHtcbiAgICByb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmRpdigpO1xuICAgIGNvbmRpdGlvbjogU2ltcGxlQ29uZGl0aW9uPFQ+O1xuICAgIG9uQ2hhbmdlZDogU3ViamVjdDxTaW1wbGVDb25kaXRpb248VD4+ID0gbmV3IFN1YmplY3Q8U2ltcGxlQ29uZGl0aW9uPFQ+PigpO1xuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBzaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICBzdWdnZXN0aW9uc01lbnVDbGlja2VkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wOiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZywgaW5pdGlhbENvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGluaXRpYWxDb25kaXRpb24gPz8ge1xuICAgICAgICAgICAgZmllbGQ6IHByb3AubmFtZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQgYXMgVFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmluaXRpYWxpemVFZGl0b3IocHJvcCkudGhlbigoaW5wdXRzKSA9PiB7XG4gICAgICAgICAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgICAgICBpbnB1dC5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25FcnJvci5uZXh0KCFpbnB1dC52YWxpZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYoaW5wdXRzLnNvbWUoKGl0KSA9PiAhaXQudmFsaWRhdGUoKSkpXG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25FcnJvci5uZXh0KHRydWUpOztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gdW5kZWZpbmVkIGFzIFQ7XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT09IERHLlRZUEUuREFURV9USU1FICYmIHR5cGVvZiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gZGF5anModGhpcy5jb25kaXRpb24udmFsdWUgYXMgc3RyaW5nKSBhcyBUO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgLy9hbGxvdyBudWxsIHZhbHVlIGZvciAnPScgYW5kICchPScgZm9yIHN0cmluZyB0eXBlIHRvIGNyZWF0ZSAnaXMgZW1wdHknLCAnaXMgbm90IGVtcHR5JyBjb25kaXRpb25cbiAgICAgICAgY29uc3QgbnVsbGFibGUgPSAgcHJvcC50eXBlID09PSBERy5UWVBFLlNUUklORyAmJlxuICAgICAgICAgICAgKHRoaXMuY29uZGl0aW9uLm9wZXJhdG9yID09PSBPcGVyYXRvcnMuRVEgfHwgdGhpcy5jb25kaXRpb24ub3BlcmF0b3IgPT09IE9wZXJhdG9ycy5OT1RfRVEpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLFxuICAgICAgICAgICAgbnVsbGFibGU6IG51bGxhYmxlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IGlucHV0LnZhbHVlIGFzIFQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTdWdnZXN0aW9ucyhwcm9wLCBpbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dC5hZGRDYXB0aW9uKCcnKTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU3VnZ2VzdGlvbnMocHJvcCwgaW5wdXQpO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplU3VnZ2VzdGlvbnMocHJvcDogREcuUHJvcGVydHksIGlucHV0OiBERy5JbnB1dEJhc2UpIHtcbiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBwcm9wLnR5cGUgPT09IERHLlRZUEUuU1RSSU5HICYmIHByb3Aub3B0aW9uc1tTVUdHRVNUSU9OU19GVU5DVElPTl07XG4gICAgICAgIGlmICh0aGlzLnNob3dTdWdnZXN0aW9ucykge1xuICAgICAgICAgICBzdWdnZXN0aW9uTWVudUtleU5hdmlnYXRpb24odGhpcy5yb290KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGFkZFN1Z2dlc3Rpb25zKHByb3A6IERHLlByb3BlcnR5LCBpbnB1dDogREcuSW5wdXRCYXNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dTdWdnZXN0aW9ucyAmJiAhdGhpcy5zdWdnZXN0aW9uc01lbnVDbGlja2VkKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBBcnJheTxzdHJpbmc+ID0gYXdhaXQgcHJvcC5vcHRpb25zW1NVR0dFU1RJT05TX0ZVTkNUSU9OXShpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxICYmIHN1Z2dlc3Rpb25zWzBdID09PSBpbnB1dC52YWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01lbnUgPSBERy5NZW51LnBvcHVwKCk7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNNZW51IS5pdGVtKHMsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSBzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zTWVudUNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdWdnZXN0aW9uc01lbnUuc2hvdyh7IGVsZW1lbnQ6IGlucHV0LnJvb3QsIHk6IGlucHV0LnJvb3Qub2Zmc2V0SGVpZ2h0IH0pO1xuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0aW9uc01lbnVDbGlja2VkID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmV0d2VlbkNvbmRpdGlvbkVkaXRvciBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3Ige1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb24udmFsdWUgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5jb25kaXRpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9IFt0aGlzLmNvbmRpdGlvbi52YWx1ZSwgdW5kZWZpbmVkXTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0MSA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlWzBdLFxuICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZVswXSA9IGlucHV0MS52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dDEuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIGNvbnN0IGlucHV0MiA9IHVpLmlucHV0LmZvclByb3BlcnR5KHByb3AsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlWzFdLFxuICAgICAgICAgICAgb25WYWx1ZUNoYW5nZWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZVsxXSA9IGlucHV0Mi52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpbnB1dDIuYWRkQ2FwdGlvbignJyk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodWkuZGl2SChbaW5wdXQxLnJvb3QsIGlucHV0Mi5yb290XSwgeyBzdHlsZTogeyBnYXA6ICcxMHB4JyB9IH0pKTtcbiAgICAgICAgcmV0dXJuIFtpbnB1dDEsIGlucHV0Ml07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9vbGVhbkNvbmRpdGlvbkVkaXRvciBleHRlbmRzIEJhc2VDb25kaXRpb25FZGl0b3Ige1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB0cnVlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gWyd0cnVlJywgJ2ZhbHNlJ107XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7XG4gICAgICAgICAgICBpdGVtczogb3B0aW9ucyxcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gaW5wdXQudmFsdWUgPT09ICd0cnVlJztcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIHJldHVybiBbaW5wdXRdO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vbGVjdWxlQ29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvcjxzdHJpbmc+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICAvL2lmIHdlIHN3aXRoIGZyb20gc2ltaWxhcml0eSBpbnB1dCB0byBzdGFuZGFyZCBtb2xlY3VsZSBpbnB1dCAtIG5lZWQgdG8gbW9kaWZ5IHZhbHVlXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbi52YWx1ZSAmJiB0eXBlb2YgdGhpcy5jb25kaXRpb24udmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoJ21vbGVjdWxlJyBpbiB0aGlzLmNvbmRpdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSAodGhpcy5jb25kaXRpb24udmFsdWUgYXMgTW9sZWN1bGVTaW1pbGFyaXR5KS5tb2xlY3VsZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQubW9sZWN1bGUoJycsIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIC8vdG8gYWRqdXN0IHRoZSBmaWx0ZXIgd2lkdGggY29uc2lkZXJpbmcgbW9sZWN1bGUgaW5wdXRcbiAgICAgICAgdGhpcy5yb290LnN0eWxlLnBhZGRpbmdUb3AgPSAnMTVweCc7XG4gICAgICAgIHRoaXMucm9vdC5zdHlsZS5wYWRkaW5nQm90dG9tID0gJzE1cHgnO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIE1vbGVjdWxlU2ltaWxhcml0eSA9IHtcbiAgICBtb2xlY3VsZTogc3RyaW5nLFxuICAgIHRocmVzaG9sZDogbnVtYmVyXG59XG5leHBvcnQgY2xhc3MgTW9sZWN1bGVTaW1pbGFyaXR5Q29uZGl0aW9uRWRpdG9yIGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvcjxNb2xlY3VsZVNpbWlsYXJpdHk+IHtcbiAgICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKHByb3A6IERHLlByb3BlcnR5KTogUHJvbWlzZTxERy5JbnB1dEJhc2VbXT4ge1xuICAgICAgICAvL2luIGNhc2Ugd2Ugc3dpdGNoIGZyb20gc29tZSBvdGhlciBvcGVyYXRvciwgd2hlcmUgdmFsdWUgaXMgYSBzdHJpbmcgKGNvbnRhaW5zLCBpcyBjb250YWluZWQpXG4gICAgICAgIGlmICghdGhpcy5jb25kaXRpb24udmFsdWUgfHwgdHlwZW9mIHRoaXMuY29uZGl0aW9uLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSB7bW9sZWN1bGU6IHRoaXMuY29uZGl0aW9uLnZhbHVlID8/ICcnLCB0aHJlc2hvbGQ6IDAuN307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9sZWN1bGVJbnB1dCA9IHVpLmlucHV0Lm1vbGVjdWxlKCcnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWUubW9sZWN1bGUsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlLm1vbGVjdWxlID0gbW9sZWN1bGVJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRyZXNob2xkSW5wdXQgPSB1aS5pbnB1dC5mbG9hdCgnJywge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29uZGl0aW9uLnZhbHVlLnRocmVzaG9sZCxcbiAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgIHN0ZXA6IDAuMDFcbiAgICAgICAgfSk7XG4gICAgICAgIERHLmRlYm91bmNlKHRyZXNob2xkSW5wdXQub25DaGFuZ2VkLCAzMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbi52YWx1ZS50aHJlc2hvbGQgPSB0cmVzaG9sZElucHV0LnZhbHVlITtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKHVpLmRpdlYoW21vbGVjdWxlSW5wdXQucm9vdCwgdHJlc2hvbGRJbnB1dC5yb290XSkpO1xuICAgICAgICB0aGlzLnJvb3Quc3R5bGUucGFkZGluZ1RvcCA9ICcxNXB4JztcbiAgICAgICAgcmV0dXJuIFttb2xlY3VsZUlucHV0LCB0cmVzaG9sZElucHV0XTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JTdHJpbmcgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPHN0cmluZ1tdPiB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9ySW50IGV4dGVuZHMgQmFzZUNvbmRpdGlvbkVkaXRvcjxudW1iZXJbXT4ge1xuICAgIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemVFZGl0b3IocHJvcDogREcuUHJvcGVydHkpOiBQcm9taXNlPERHLklucHV0QmFzZVtdPiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmNvbmRpdGlvbi52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSB1aS5pbnB1dC5saXN0KCcnLCB7XG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb25kaXRpb24udmFsdWUsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uLnZhbHVlID0gaW5wdXQudmFsdWUhLm1hcCgoaXQpID0+IHBhcnNlSW50KGl0KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvb3QuYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICByZXR1cm4gW2lucHV0XTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yRmxvYXQgZXh0ZW5kcyBCYXNlQ29uZGl0aW9uRWRpdG9yPG51bWJlcltdPiB7XG4gICAgb3ZlcnJpZGUgYXN5bmMgaW5pdGlhbGl6ZUVkaXRvcihwcm9wOiBERy5Qcm9wZXJ0eSk6IFByb21pc2U8REcuSW5wdXRCYXNlW10+IHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuY29uZGl0aW9uLnZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0Lmxpc3QoJycsIHtcbiAgICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmRpdGlvbi52YWx1ZSxcbiAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb24udmFsdWUgPSBpbnB1dC52YWx1ZSEubWFwKChpdCkgPT4gcGFyc2VGbG9hdChpdCkpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb290LmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgcmV0dXJuIFtpbnB1dF07XG4gICAgfVxufVxuXG4vLyBSZWdpc3RyeSBmb3IgYm90aCBvcGVyYXRvcnMgYW5kIGVkaXRvcnNcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25SZWdpc3RyeSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IENvbmRpdGlvblJlZ2lzdHJ5O1xuICAgIHByaXZhdGUgdHlwZU9wZXJhdG9yczogTWFwPHN0cmluZywgc3RyaW5nW10+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc2VtVHlwZU9wZXJhdG9yczogTWFwPHN0cmluZywgc3RyaW5nW10+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgZWRpdG9yUmVnaXN0cnk6IE1hcDxzdHJpbmcsIG5ldyAocHJvcDogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGluaXRpYWxDb25kaXRpb24/OiBhbnkpID0+IEJhc2VDb25kaXRpb25FZGl0b3I+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdE9wZXJhdG9ycygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0RWRpdG9ycygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBDb25kaXRpb25SZWdpc3RyeSB7XG4gICAgICAgIGlmICghQ29uZGl0aW9uUmVnaXN0cnkuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIENvbmRpdGlvblJlZ2lzdHJ5Lmluc3RhbmNlID0gbmV3IENvbmRpdGlvblJlZ2lzdHJ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvbmRpdGlvblJlZ2lzdHJ5Lmluc3RhbmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZURlZmF1bHRPcGVyYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFR5cGUgb3BlcmF0b3JzXG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuQk9PTCwgW09wZXJhdG9ycy5FUV0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLlNUUklORywgW09wZXJhdG9ycy5TVEFSVFNfV0lUSCwgT3BlcmF0b3JzLkNPTlRBSU5TLCBPcGVyYXRvcnMuRVEsIE9wZXJhdG9ycy5OT1RfRVEsIE9wZXJhdG9ycy5JTl0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLklOVCwgW09wZXJhdG9ycy5HVCwgT3BlcmF0b3JzLkxULCBPcGVyYXRvcnMuR1RFLCBPcGVyYXRvcnMuTFRFLCBPcGVyYXRvcnMuRVEsXG4gICAgICAgICAgICBPcGVyYXRvcnMuTk9UX0VRLCBPcGVyYXRvcnMuQkVUV0VFTiwgT3BlcmF0b3JzLklOXSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJUeXBlT3BlcmF0b3JzKERHLlRZUEUuRkxPQVQsIFtPcGVyYXRvcnMuR1QsIE9wZXJhdG9ycy5MVCwgT3BlcmF0b3JzLkdURSwgT3BlcmF0b3JzLkxURSwgT3BlcmF0b3JzLkVRLFxuICAgICAgICAgICAgT3BlcmF0b3JzLk5PVF9FUSwgT3BlcmF0b3JzLkJFVFdFRU4sIE9wZXJhdG9ycy5JTl0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVHlwZU9wZXJhdG9ycyhERy5UWVBFLkRBVEVfVElNRSwgW09wZXJhdG9ycy5CRUZPUkUsIE9wZXJhdG9ycy5BRlRFUiwgT3BlcmF0b3JzLkJFVFdFRU5dKTtcblxuICAgICAgICAvLyBTZW1UeXBlIG9wZXJhdG9ycyAodGFrZSBwcmVjZWRlbmNlIG92ZXIgdHlwZSBvcGVyYXRvcnMpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJTZW1UeXBlT3BlcmF0b3JzKERHLlNFTVRZUEUuTU9MRUNVTEUsIFtPcGVyYXRvcnMuQ09OVEFJTlMsIE9wZXJhdG9ycy5JU19DT05UQUlORUQsIE9wZXJhdG9ycy5FUSwgT3BlcmF0b3JzLklTX1NJTUlMQVJdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVEZWZhdWx0RWRpdG9ycygpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgZGVmYXVsdCBlZGl0b3JzIGJ5IHByb3BlcnR5IHR5cGUgKHdpdGggZW1wdHkgc2VtVHlwZSBhbmQgb3BlcmF0b3IpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5JTlQsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5GTE9BVCwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkRBVEVfVElNRSwgJycsICcnLCBCYXNlQ29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkJPT0wsICcnLCAnJywgQmFzZUNvbmRpdGlvbkVkaXRvcik7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgc3BlY2lhbGl6ZWQgZWRpdG9ycyBmb3Igc3BlY2lmaWMgY29tYmluYXRpb25zXG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsICcnLCBPcGVyYXRvcnMuSU4sIE11bHRpVmFsdWVDb25kaXRpb25FZGl0b3JTdHJpbmcpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuSU5ULCAnJywgT3BlcmF0b3JzLklOLCBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9ySW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkZMT0FULCAnJywgT3BlcmF0b3JzLklOLCBNdWx0aVZhbHVlQ29uZGl0aW9uRWRpdG9yRmxvYXQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuREFURV9USU1FLCAnJywgT3BlcmF0b3JzLkJFVFdFRU4sIEJldHdlZW5Db25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuSU5ULCAnJywgT3BlcmF0b3JzLkJFVFdFRU4sIEJldHdlZW5Db25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuRkxPQVQsICcnLCBPcGVyYXRvcnMuQkVUV0VFTiwgQmV0d2VlbkNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5DT05UQUlOUywgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuSVNfQ09OVEFJTkVELCBNb2xlY3VsZUNvbmRpdGlvbkVkaXRvcik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFZGl0b3IoREcuVFlQRS5TVFJJTkcsIERHLlNFTVRZUEUuTU9MRUNVTEUsIE9wZXJhdG9ycy5FUSwgTW9sZWN1bGVDb25kaXRpb25FZGl0b3IpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yKERHLlRZUEUuU1RSSU5HLCBERy5TRU1UWVBFLk1PTEVDVUxFLCBPcGVyYXRvcnMuSVNfU0lNSUxBUiwgTW9sZWN1bGVTaW1pbGFyaXR5Q29uZGl0aW9uRWRpdG9yKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckVkaXRvcihERy5UWVBFLkJPT0wsICcnLCBPcGVyYXRvcnMuRVEsIEJvb2xlYW5Db25kaXRpb25FZGl0b3IpO1xuICAgIH1cblxuICAgIC8vIE9wZXJhdG9yIHJlZ2lzdHJhdGlvbiBtZXRob2RzXG4gICAgcmVnaXN0ZXJUeXBlT3BlcmF0b3JzKHByb3BlcnR5VHlwZTogc3RyaW5nLCBvcGVyYXRvcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHlwZU9wZXJhdG9ycy5zZXQocHJvcGVydHlUeXBlLCBvcGVyYXRvcnMpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyU2VtVHlwZU9wZXJhdG9ycyhzZW1UeXBlOiBzdHJpbmcsIG9wZXJhdG9yczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZW1UeXBlT3BlcmF0b3JzLnNldChzZW1UeXBlLCBvcGVyYXRvcnMpO1xuICAgIH1cblxuICAgIC8vIEdldCBvcGVyYXRvcnMgZm9yIGEgcHJvcGVydHlcbiAgICBnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShwcm9wZXJ0eTogREcuUHJvcGVydHkpOiBzdHJpbmdbXSB7XG4gICAgICAgIC8vIENoZWNrIHNlbVR5cGUgZmlyc3QsIHRoZW4gZmFsbCBiYWNrIHRvIHR5cGVcbiAgICAgICAgY29uc3Qgc2VtVHlwZU9wcyA9IHRoaXMuc2VtVHlwZU9wZXJhdG9ycy5nZXQocHJvcGVydHkuc2VtVHlwZSk7XG4gICAgICAgIGlmIChzZW1UeXBlT3BzKSByZXR1cm4gc2VtVHlwZU9wcztcblxuICAgICAgICBjb25zdCB0eXBlT3BzID0gdGhpcy50eXBlT3BlcmF0b3JzLmdldChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUpO1xuICAgICAgICByZXR1cm4gdHlwZU9wcyB8fCBbXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBvcGVyYXRvciBpcyBzdXBwb3J0ZWRcbiAgICBpc09wZXJhdG9yU3VwcG9ydGVkKHByb3BlcnR5OiBERy5Qcm9wZXJ0eSwgb3BlcmF0b3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSB0aGlzLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9ycy5pbmNsdWRlcyhvcGVyYXRvcik7XG4gICAgfVxuXG4gICAgLy8gRWRpdG9yIHJlZ2lzdHJhdGlvbiBtZXRob2RzXG4gICAgcmVnaXN0ZXJFZGl0b3I8VD4oXG4gICAgICAgIHByb3BlcnR5VHlwZTogc3RyaW5nLFxuICAgICAgICBzZW1UeXBlOiBzdHJpbmcsXG4gICAgICAgIG9wZXJhdG9yOiBzdHJpbmcsXG4gICAgICAgIGVkaXRvckNsYXNzOiBuZXcgKHByb3A6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nKSA9PiBCYXNlQ29uZGl0aW9uRWRpdG9yPFQ+XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY3JlYXRlRWRpdG9yS2V5KHByb3BlcnR5VHlwZSwgc2VtVHlwZSwgb3BlcmF0b3IpO1xuICAgICAgICB0aGlzLmVkaXRvclJlZ2lzdHJ5LnNldChrZXksIGVkaXRvckNsYXNzKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZWRpdG9yIGZvciBhIHByb3BlcnR5IGFuZCBvcGVyYXRvclxuICAgIGNyZWF0ZUVkaXRvcjxUPihwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGluaXRpYWxDb25kaXRpb24/OiBTaW1wbGVDb25kaXRpb248VD4pOiBCYXNlQ29uZGl0aW9uRWRpdG9yPFQ+IHtcbiAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYSBzcGVjaWFsaXplZCBlZGl0b3IgZmlyc3QgKHByb3BlcnR5VHlwZSArIHNlbVR5cGUgKyBvcGVyYXRvcilcbiAgICAgICAgY29uc3Qgc3BlY2lhbGl6ZWRLZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUsIHByb3BlcnR5LnNlbVR5cGUsIG9wZXJhdG9yKTtcbiAgICAgICAgbGV0IEVkaXRvckNsYXNzID0gdGhpcy5lZGl0b3JSZWdpc3RyeS5nZXQoc3BlY2lhbGl6ZWRLZXkpO1xuXG4gICAgICAgIC8vIElmIG5vIHNwZWNpYWxpemVkIGVkaXRvciwgdHJ5IHdpdGggZW1wdHkgc2VtVHlwZSAocHJvcGVydHlUeXBlICsgb3BlcmF0b3IpXG4gICAgICAgIGlmICghRWRpdG9yQ2xhc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVPbmx5S2V5ID0gdGhpcy5jcmVhdGVFZGl0b3JLZXkocHJvcGVydHkucHJvcGVydHlUeXBlLCAnJywgb3BlcmF0b3IpO1xuICAgICAgICAgICAgRWRpdG9yQ2xhc3MgPSB0aGlzLmVkaXRvclJlZ2lzdHJ5LmdldCh0eXBlT25seUtleSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBzdGlsbCBubyBzcGVjaWFsaXplZCBlZGl0b3IsIHVzZSBkZWZhdWx0IGVkaXRvciBmb3IgcHJvcGVydHkgdHlwZSAocHJvcGVydHlUeXBlIG9ubHkpXG4gICAgICAgIGlmICghRWRpdG9yQ2xhc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRLZXkgPSB0aGlzLmNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUsICcnLCAnJyk7XG4gICAgICAgICAgICBFZGl0b3JDbGFzcyA9IHRoaXMuZWRpdG9yUmVnaXN0cnkuZ2V0KGRlZmF1bHRLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gYmFzZSBlZGl0b3JcbiAgICAgICAgaWYgKCFFZGl0b3JDbGFzcykge1xuICAgICAgICAgICAgRWRpdG9yQ2xhc3MgPSBCYXNlQ29uZGl0aW9uRWRpdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFZGl0b3JDbGFzcyhwcm9wZXJ0eSwgb3BlcmF0b3IsIGluaXRpYWxDb25kaXRpb24pO1xuICAgIH1cblxuICAgIC8vIEdldCBjb25kaXRpb24gZWRpdG9yIGZvciBhIHByb3BlcnR5IGFuZCBvcGVyYXRvciAod2l0aCB2YWxpZGF0aW9uKVxuICAgIGdldENvbmRpdGlvbkVkaXRvcjxUID0gYW55Pihwcm9wZXJ0eTogREcuUHJvcGVydHksIG9wZXJhdG9yOiBzdHJpbmcsIGNvbmRpdGlvbj86IFNpbXBsZUNvbmRpdGlvbjxUPik6IEJhc2VDb25kaXRpb25FZGl0b3I8VD4ge1xuICAgICAgICBpZiAodGhpcy5pc09wZXJhdG9yU3VwcG9ydGVkKHByb3BlcnR5LCBvcGVyYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUVkaXRvcihwcm9wZXJ0eSwgb3BlcmF0b3IsIGNvbmRpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgT3BlcmF0b3IgJyR7b3BlcmF0b3J9JyBpcyBub3Qgc3VwcG9ydGVkIGZvciBwcm9wZXJ0eSB0eXBlICcke3Byb3BlcnR5LnByb3BlcnR5VHlwZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUVkaXRvcktleShwcm9wZXJ0eVR5cGU6IHN0cmluZywgc2VtVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3Byb3BlcnR5VHlwZX06JHtzZW1UeXBlfToke29wZXJhdG9yfWA7XG4gICAgfVxufVxuXG5cbmV4cG9ydCB0eXBlIEhpc3RvcnlJdGVtID0ge1xuICAgIGRhdGU6IERHLlRZUEUuREFURV9USU1FLFxuICAgIHZhbHVlOiBzdHJpbmcsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlSGlzdG9yeShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGxldCBjb2xsZWN0aW9uOiBIaXN0b3J5SXRlbVtdID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/ICdbXScpO1xuICAgIGNvbnN0IG5ld0l0ZW0gPSB7IGRhdGU6IG5ldyBEYXRlKCksIHZhbHVlOiB2YWx1ZSB9O1xuICAgIGlmICghY29sbGVjdGlvbi5sZW5ndGgpXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkoW25ld0l0ZW1dKSk7XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLmZpbHRlcigoaXQpID0+IGl0LnZhbHVlICE9PSB2YWx1ZSlcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShbbmV3SXRlbSwgLi4uY29sbGVjdGlvbi5zbGljZSgwLCA5KV0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b3J5KGtleTogc3RyaW5nKTogSGlzdG9yeUl0ZW1bXSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyAnW10nKTtcbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlciB7XG4gICAgcm9vdDogSFRNTEVsZW1lbnQ7XG4gICAgY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uO1xuICAgIHByb3BlcnRpZXM6IERHLlByb3BlcnR5W107XG4gICAgc3RydWN0dXJlQ2hhbmdlZDogU3ViamVjdDxDb21wbGV4Q29uZGl0aW9uPiA9IG5ldyBTdWJqZWN0PENvbXBsZXhDb25kaXRpb24+KCk7XG4gICAgZmlsdGVyVmFsdWVDaGFuZ2VkOiBTdWJqZWN0PFNpbXBsZUNvbmRpdGlvbj4gPSBuZXcgU3ViamVjdDxTaW1wbGVDb25kaXRpb24+KCk7XG4gICAgdmFsaWRhdGlvbkVycm9yOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBpbnZhbGlkID0gZmFsc2U7XG4gICAgbGF5b3V0OiBRdWVyeUJ1aWxkZXJMYXlvdXQ7XG4gICAgcHJpdmF0ZSBfaGlzdG9yeUNhY2hlS2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBoaXN0b3J5SWNvbjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGhpc3RvcnlJY29uT25Ub3AgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IERHLlByb3BlcnR5W10sIGluaXRpYWxDb25kaXRpb24/OiBDb21wbGV4Q29uZGl0aW9uLCBsYXlvdXQ6IFF1ZXJ5QnVpbGRlckxheW91dCA9IFF1ZXJ5QnVpbGRlckxheW91dC5TdGFuZGFyZCxcbiAgICAgICAgaGlzdG9yeUNhY2hlS2V5OiBzdHJpbmcgPSAnJywgaGlzdG9yeUljb25PblRvcCA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgICAgICB0aGlzLl9oaXN0b3J5Q2FjaGVLZXkgPSBoaXN0b3J5Q2FjaGVLZXk7XG4gICAgICAgIHRoaXMuaGlzdG9yeUljb25PblRvcCA9IGhpc3RvcnlJY29uT25Ub3A7XG4gICAgICAgIFxuICAgICAgICBpZiAoaW5pdGlhbENvbmRpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdENvbmRpdGlvbiA9IHRoaXMuY3JlYXRlRGVmYXVsdFNpbXBsZUNvbmRpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jb25kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogT3BlcmF0b3JzLkxvZ2ljYWwuYW5kLFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zOiBbZGVmYXVsdENvbmRpdGlvbl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvb3QgPSB0aGlzLmJ1aWxkVUkodGhpcy5jb25kaXRpb24sIHVuZGVmaW5lZCwgMCk7XG4gICAgICAgIHRoaXMuc2V0dXBIaXN0b3J5SWNvbigpO1xuICAgIH1cblxuICAgIHNldCBoaXN0b3J5Q2FjaGUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faGlzdG9yeUNhY2hlS2V5ID0ga2V5O1xuICAgICAgICB0aGlzLnNldHVwSGlzdG9yeUljb24oKTsgLy8gVGhpcyB3aWxsIGNvbnRyb2wgdmlzaWJpbGl0eVxuICAgIH1cblxuICAgIHNhdmVDb25kaXRpb25Ub0hpc3RvcnkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9oaXN0b3J5Q2FjaGVLZXkpXG4gICAgICAgICAgICBzYXZlSGlzdG9yeSh0aGlzLl9oaXN0b3J5Q2FjaGVLZXksIEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEhpc3RvcnlJY29uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGlzdG9yeUljb24pIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUljb24gPSB1aS5pY29uRkEoJ2hpc3RvcnknLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93SGlzdG9yeU1lbnUoKTtcbiAgICAgICAgICAgIH0sICdRdWVyeSBIaXN0b3J5Jyk7XG5cbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeUljb24uY2xhc3NMaXN0LmFkZCgncXVlcnktYnVpbGRlci1oaXN0b3J5LWljb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhpc3RvcnlJY29uT25Ub3ApXG4gICAgICAgICAgICB0aGlzLnJvb3QucHJlcGVuZCh0aGlzLmhpc3RvcnlJY29uKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuaGlzdG9yeUljb24pO1xuICAgICAgICBcbiAgICAgICAgLy8gU2V0IGRhdGEgYXR0cmlidXRlIGZvciBDU1MgdG8gY29udHJvbCB2aXNpYmlsaXR5XG4gICAgICAgIGlmICh0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaGlzdG9yeScsIHRoaXMuX2hpc3RvcnlDYWNoZUtleSAgPT09ICcnID8gJ2ZhbHNlJyA6ICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dIaXN0b3J5TWVudSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEhpc3RvcnlJdGVtW10gPSBnZXRIaXN0b3J5KHRoaXMuX2hpc3RvcnlDYWNoZUtleSk7XG4gICAgICAgIGNvbnN0IG1lbnUgPSBERy5NZW51LnBvcHVwKCk7XG4gICAgICAgIG1lbnUuaXRlbXMoaXRlbXMubWFwKChpdCkgPT4gdWkudG9vbHMuY2xpY2soXG4gICAgICAgICAgICB1aS5kaXZIKFtcbiAgICAgICAgICAgICAgICB1aS5kaXZUZXh0KGl0LmRhdGUudG9TdHJpbmcoKSwge3N0eWxlOiB7Y29sb3I6ICcjNzk5MEE1J319KSxcbiAgICAgICAgICAgICAgICB1aS5kaXZUZXh0KHRoaXMuY29uZGl0aW9uVG9TdHJpbmcoSlNPTi5wYXJzZShpdC52YWx1ZSkgYXMgQ29tcGxleENvbmRpdGlvbikpLFxuICAgICAgICAgICAgXSwge3N0eWxlOiB7Z2FwOiAnNXB4J319KSxcbiAgICAgICAgKCkgPT4ge3RoaXMubG9hZENvbmRpdGlvbihKU09OLnBhcnNlKGl0LnZhbHVlKSl9KSksICgpID0+IHt9KTtcbiAgICAgICAgbWVudS5zaG93KCk7XG4gICAgfVxuXG4gICAgbG9hZENvbmRpdGlvbihjb25kaXRpb246IENvbXBsZXhDb25kaXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbmRpdGlvbikpO1xuICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgfVxuXG4gICAgY29uZGl0aW9uVG9TdHJpbmcoY29uZGl0aW9uOiBDb21wbGV4Q29uZGl0aW9uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24gfHwgIWNvbmRpdGlvbi5jb25kaXRpb25zIHx8IGNvbmRpdGlvbi5jb25kaXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdObyBjb25kaXRpb25zJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgY29uZGl0aW9uLCBkb24ndCB3cmFwIGl0IGluIGxvZ2ljYWwgb3BlcmF0b3JcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5jb25kaXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblRvU3RyaW5nKGNvbmRpdGlvbi5jb25kaXRpb25zWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBtdWx0aXBsZSBjb25kaXRpb25zLCB3cmFwIHRoZW0gaW4gbG9naWNhbCBvcGVyYXRvclxuICAgICAgICBjb25zdCBsb2dpY2FsT3AgPSBjb25kaXRpb24ubG9naWNhbE9wZXJhdG9yID09PSBPcGVyYXRvcnMuTG9naWNhbC5hbmQgPyAnQU5EJyA6ICdPUic7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN0cmluZ3MgPSBjb25kaXRpb24uY29uZGl0aW9ucy5tYXAoY29uZCA9PiB0aGlzLmV4cHJlc3Npb25Ub1N0cmluZyhjb25kKSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYCgke2NvbmRpdGlvblN0cmluZ3Muam9pbihgICR7bG9naWNhbE9wfSBgKX0pYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cHJlc3Npb25Ub1N0cmluZyhleHByZXNzaW9uOiBFeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCdmaWVsZCcgaW4gZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFNpbXBsZUNvbmRpdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2ltcGxlQ29uZGl0aW9uVG9TdHJpbmcoZXhwcmVzc2lvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgQ29tcGxleENvbmRpdGlvbiAocmVjdXJzaXZlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uVG9TdHJpbmcoZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNpbXBsZUNvbmRpdGlvblRvU3RyaW5nKGNvbmRpdGlvbjogU2ltcGxlQ29uZGl0aW9uKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBjb25kaXRpb24uZmllbGQgfHwgJ1Vua25vd24gZmllbGQnO1xuICAgICAgICBjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbi5vcGVyYXRvciB8fCAnVW5rbm93biBvcGVyYXRvcic7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZGl0aW9uLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgY29uZGl0aW9uLnZhbHVlICE9PSBudWxsID8gXG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjb25kaXRpb24udmFsdWUpID8gYFske2NvbmRpdGlvbi52YWx1ZS5qb2luKCcsICcpfV1gIDogU3RyaW5nKGNvbmRpdGlvbi52YWx1ZSkpIDogXG4gICAgICAgICAgICAnTm8gdmFsdWUnO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGAke2ZpZWxkfSAke29wZXJhdG9yfSAke3ZhbHVlfWA7XG4gICAgfVxuXG4gICAgY3JlYXRlRGVmYXVsdFNpbXBsZUNvbmRpdGlvbigpOiBTaW1wbGVDb25kaXRpb24ge1xuICAgICAgICBjb25zdCBmaXJzdFByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzWzBdO1xuICAgICAgICBpZiAoZmlyc3RQcm9wZXJ0eSkge1xuICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBDb25kaXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JzID0gcmVnaXN0cnkuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoZmlyc3RQcm9wZXJ0eSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdE9wZXJhdG9yID0gb3BlcmF0b3JzWzBdO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBmaXJzdFByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IGZpcnN0T3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICcnXG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVidWlsZFVJKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdSb290ID0gdGhpcy5idWlsZFVJKHRoaXMuY29uZGl0aW9uLCB1bmRlZmluZWQsIDApO1xuICAgICAgICB0aGlzLnJvb3QucmVwbGFjZVdpdGgobmV3Um9vdCk7XG4gICAgICAgIHRoaXMucm9vdCA9IG5ld1Jvb3Q7XG4gICAgICAgIFxuICAgICAgICAvLyBSZWNyZWF0ZSBoaXN0b3J5IGljb24gYWZ0ZXIgcmVidWlsZGluZyBVSVxuICAgICAgICB0aGlzLnNldHVwSGlzdG9yeUljb24oKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXQobGF5b3V0OiBRdWVyeUJ1aWxkZXJMYXlvdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gUXVlcnlCdWlsZGVyTGF5b3V0Lk5hcnJvdylcbiAgICAgICAgICAgIHRoaXMucm9vdC5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLW5hcnJvdycpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LnJlbW92ZSgncXVlcnktYnVpbGRlci1uYXJyb3cnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEZpbmQgYWxsIGZpbHRlciBjb250YWluZXJzIGFuZCBhcHBseS9yZW1vdmUgbGF5b3V0IGNsYXNzZXNcbiAgICAgICAgY29uc3QgZmlsdGVyQ29udGFpbmVycyA9IHRoaXMucm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcucXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLCAucXVlcnktYnVpbGRlci1maWx0ZXItaW5wdXRzLW5hcnJvdycpO1xuICAgICAgICBcbiAgICAgICAgZmlsdGVyQ29udGFpbmVycy5mb3JFYWNoKGNvbnRhaW5lciA9PiB7XG4gICAgICAgICAgICBpZiAobGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93KSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cycpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMtbmFycm93Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdxdWVyeS1idWlsZGVyLWZpbHRlci1pbnB1dHMtbmFycm93Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRMYXlvdXQoKTogUXVlcnlCdWlsZGVyTGF5b3V0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0O1xuICAgIH1cblxuICAgIGJ1aWxkVUkoXG4gICAgICAgIGNvbmRpdGlvbjogQ29tcGxleENvbmRpdGlvbixcbiAgICAgICAgcGFyZW50Q29uZGl0aW9uPzogQ29tcGxleENvbmRpdGlvbixcbiAgICAgICAgbmVzdGluZ0xldmVsOiBudW1iZXIgPSAwXG4gICAgKTogSFRNTEVsZW1lbnQge1xuXG4gICAgICAgIC8vcmVzZXQgdmFsaWRhdGlvbiBzdGF0dXNcbiAgICAgICAgdGhpcy5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLm5leHQoZmFsc2UpO1xuXG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICBjb25kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uczogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1vdmVPclJlcGxhY2VDb25kaXRpb24gPSAoY29uZFRvUmVtb3ZlOiBFeHByZXNzaW9uLCBjb25kQXJyYXk/OiBFeHByZXNzaW9uW10sIHJlcGxhY2VDb25kPzogQ29tcGxleENvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbmRBcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRJZHggPSBjb25kQXJyYXkuaW5kZXhPZihjb25kVG9SZW1vdmUpO1xuICAgICAgICAgICAgICAgIGlmIChjb25kSWR4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUNvbmQgPyBjb25kQXJyYXlbY29uZElkeF0gPSByZXBsYWNlQ29uZCA6IGNvbmRBcnJheS5zcGxpY2UoY29uZElkeCwgMSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjcmVhdGVQcm9wZXJ0eUZpbHRlckNvbnRhaW5lciA9IChjb25kOiBTaW1wbGVDb25kaXRpb24sIHBhcmVudENvbmRpdGlvbj86IENvbXBsZXhDb25kaXRpb24pID0+IHtcblxuICAgICAgICAgICAgY29uc3QgY3JlYXRlRmlsdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHVpLmVtcHR5KG9wZXJhdG9ySW5wdXREaXYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZ2V0UHJvcEJ5RnJpZW5kbHlOYW1lKGZpZWxkQ2hvaWNlSW5wdXQudmFsdWUhKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9pbiBjYXNlIG9mIGJvb2xlYW4gaW5wdXQgd2UgbmVlZCB0byBoaWRlIG9wZXJhdG9ycyBpbnB1dFxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gREcuVFlQRS5CT09MKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2Jvb2xlYW4taW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ2Jvb2xlYW4taW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBDb25kaXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRvcnMgPSByZWdpc3RyeS5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29uZC5vcGVyYXRvciB8fCBjb25kLm9wZXJhdG9yID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciA9IG9wZXJhdG9yc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yc0lucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29uZC5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBvcGVyYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgPSBvcGVyYXRvcnNJbnB1dC52YWx1ZSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcklucHV0RGl2LmFwcGVuZChvcGVyYXRvcnNJbnB1dC5yb290KTtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWRpdG9yKHByb3BlcnR5LCBjb25kLm9wZXJhdG9yLCBjb25kKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVFZGl0b3IgPSAocHJvcGVydHk6IERHLlByb3BlcnR5LCBvcGVyYXRvcjogc3RyaW5nLCBjb25kaXRpb246IFNpbXBsZUNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHVpLmVtcHR5KGNyaXRlcmlhRGl2KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IENvbmRpdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gcmVnaXN0cnkuZ2V0Q29uZGl0aW9uRWRpdG9yKHByb3BlcnR5LCBvcGVyYXRvciwgY29uZGl0aW9uKTtcbiAgICAgICAgICAgICAgICBlZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2VkLm5leHQoZWRpdG9yLmNvbmRpdGlvbik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWRpdG9yLm9uVmFsaWRhdGlvbkVycm9yLnN1YnNjcmliZSgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLm5leHQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNyaXRlcmlhRGl2LmFwcGVuZChlZGl0b3Iucm9vdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdldFByb3BCeU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRQcm9wQnlGcmllbmRseU5hbWUgPSAoZnJpZW5kbHlOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXMuZmluZCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID09PSBmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0aWVzLmZpbmQoKHByb3A6IERHLlByb3BlcnR5KSA9PiBwcm9wLm5hbWUgPT09IGZyaWVuZGx5TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnZXRGaWVsZENob2ljZUlucHV0VmFsID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3AgPSBnZXRQcm9wQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5mcmllbmRseU5hbWUgPz8gcHJvcD8ubmFtZSA/PyAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2V0UHJvcE5hbWVCeUNob2ljZUlucHV0VmFsID0gKGZyaWVuZGx5TmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcCA9IGdldFByb3BCeUZyaWVuZGx5TmFtZShmcmllbmRseU5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wPy5uYW1lID8/ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25kLmZpZWxkID8/PSB0aGlzLnByb3BlcnRpZXNbMF0/Lm5hbWUgfHwgJyc7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkQ2hvaWNlSW5wdXQgPSB1aS5pbnB1dC5jaG9pY2UoJycsIHtcbiAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5wcm9wZXJ0aWVzLm1hcCgocHJvcDogREcuUHJvcGVydHkpID0+IHByb3AuZnJpZW5kbHlOYW1lID8/IHByb3AubmFtZSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGdldEZpZWxkQ2hvaWNlSW5wdXRWYWwoY29uZC5maWVsZCksXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmQuZmllbGQgPSBnZXRQcm9wTmFtZUJ5Q2hvaWNlSW5wdXRWYWwoZmllbGRDaG9pY2VJbnB1dC52YWx1ZSEpO1xuICAgICAgICAgICAgICAgICAgICBjb25kLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlQ2hhbmdlZC5uZXh0KGNvbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVGaWVsZEljb24gPSB1aS5pY29ucy5kZWxldGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChmaWx0ZXJDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0sICdSZW1vdmUgY3VycmVudCBjb25kaXRpb24nKTtcblxuICAgICAgICAgICAgY29uc3QgYWRkTmVzdGVkQ29uZGl0aW9uSWNvbiA9IHVpLmljb25zLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29uZCA9IHsgbG9naWNhbE9wZXJhdG9yOiBPcGVyYXRvcnMuTG9naWNhbC5hbmQsIGNvbmRpdGlvbnM6IFtjb25kXSB9O1xuICAgICAgICAgICAgICAgIHJlbW92ZU9yUmVwbGFjZUNvbmRpdGlvbihjb25kLCBwYXJlbnRDb25kaXRpb24gPyBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyA6IGNvbmRpdGlvbi5jb25kaXRpb25zLCBwYXJlbnRDb25kKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYnVpbGRVSSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RydWN0dXJlQ2hhbmdlZC5uZXh0KHRoaXMuY29uZGl0aW9uKTtcblxuICAgICAgICAgICAgfSwgJ0FkZCBuZXN0ZWQgY29uZGl0aW9uJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9ySW5wdXREaXYgPSB1aS5kaXYoJycsICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpO1xuICAgICAgICAgICAgY29uc3QgY3JpdGVyaWFEaXYgPSB1aS5kaXYoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29udGFpbmVyID0gdWkuZGl2KFtcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2ZpZWxkQ2hvaWNlSW5wdXQucm9vdF0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1maWVsZCcpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbb3BlcmF0b3JJbnB1dERpdl0sICdxdWVyeS1idWlsZGVyLWZpbHRlci1vcGVyYXRvcicpLFxuICAgICAgICAgICAgICAgIHVpLmRpdihbY3JpdGVyaWFEaXZdLCAncXVlcnktYnVpbGRlci1maWx0ZXItdmFsdWUnKSxcbiAgICAgICAgICAgICAgICB1aS5kaXYoW2FkZE5lc3RlZENvbmRpdGlvbkljb24sIGRlbGV0ZUZpZWxkSWNvbl0sICdhZGQtZGVsZXRlLWljb25zJylcbiAgICAgICAgICAgIF0sIHRoaXMubGF5b3V0ID09PSBRdWVyeUJ1aWxkZXJMYXlvdXQuTmFycm93ID8gJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cy1uYXJyb3cnIDogJ3F1ZXJ5LWJ1aWxkZXItZmlsdGVyLWlucHV0cycpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsdGVyQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGNyZWF0ZUZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZWQubmV4dChjb25kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZGluZyBmaWx0ZXIgZmllbGRcbiAgICAgICAgY29uc3QgYWRkRmllbGRJY29uID0gdWkuaWNvbnMuYWRkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkZvckZpbHRlcjogU2ltcGxlQ29uZGl0aW9uID0gdGhpcy5jcmVhdGVEZWZhdWx0U2ltcGxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9ucz8ucHVzaChjb25kaXRpb25Gb3JGaWx0ZXIpO1xuICAgICAgICAgICAgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoIDwgMiA/IGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpIDpcbiAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgncHJvcGVydHktcXVlcnktYnVpbGRlci1tdWx0aXBlLWZpbGVsZHMnKTtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgIH0sICdBZGQgZmllbGQgdG8gdGhlIGNvbmRpdGlvbicpO1xuXG4gICAgICAgIC8vIEFORC9PUiBvcGVyYXRvcnMgaGFuZGxpbmdcbiAgICAgICAgY29uZGl0aW9uLmxvZ2ljYWxPcGVyYXRvciA/Pz0gT3BlcmF0b3JzLkxvZ2ljYWwuYW5kO1xuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckNob2ljZSA9IHVpLmlucHV0LmNob2ljZSgnJywge1xuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPT09IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA/ICdhbGwnIDogJ2FueScsXG4gICAgICAgICAgICBpdGVtczogWydhbGwnLCAnYW55J10sXG4gICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBvblZhbHVlQ2hhbmdlZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5sb2dpY2FsT3BlcmF0b3IgPSBsb2dpY2FsT3BlcmF0b3JDaG9pY2UudmFsdWUhID09PSAnYWxsJyA/IE9wZXJhdG9ycy5Mb2dpY2FsLmFuZCA6IE9wZXJhdG9ycy5Mb2dpY2FsLm9yO1xuICAgICAgICAgICAgICAgIHRoaXMucmVidWlsZFVJKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJ1Y3R1cmVDaGFuZ2VkLm5leHQodGhpcy5jb25kaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcGVyYXRvckRpdiA9IHVpLmRpdkgoW3VpLmRpdlRleHQoJ01hdGNoJyksIGxvZ2ljYWxPcGVyYXRvckNob2ljZS5yb290XSwgJ3F1ZXJ5LWJ1aWxkZXItbWF0Y2gtZGl2Jyk7XG5cbiAgICAgICAgY29uc3QgYWRkRGVsZXRlSWNvbnNEaXYgPSB1aS5kaXZIKFthZGRGaWVsZEljb25dLCAnbmVzdGVkLWFkZC1kZWxldGUtaWNvbnMnKTtcbiAgICAgICAgY29uc3QgaWNvbnNEaXYgPSB1aS5kaXZIKFtsb2dpY2FsT3BlcmF0b3JEaXYsIGFkZERlbGV0ZUljb25zRGl2XSwgJ3F1ZXJ5LWJ1aWxkZXItbmVzdGVkLWNvbmRpdGlvbi1vcGVyYXRvcnMnKTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdWkuZGl2VihbaWNvbnNEaXZdLCAncXVlcnktYnVpbGRlci1zZWFyY2gtcXVlcnktb3BlcmF0b3InKTtcblxuXG4gICAgICAgIGlmIChuZXN0aW5nTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLW5lc3RpbmctbGV2ZWwnLCBuZXN0aW5nTGV2ZWwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuZ2VuZXJhdGVOZXN0aW5nQ29sb3IobmVzdGluZ0xldmVsKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZXN0aW5nLWNvbG9yJywgY29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9kZWxldGUgaWNvbiBmb3IgbmVzdGVkIGNvbmRpdGlvbnMgdG8gcmVtb3ZlIHRoZSB3aG9sZSBuZXN0ZWQgY29uZGl0aW9uIGF0IG9uY2VcbiAgICAgICAgaWYgKHBhcmVudENvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlQ29uZGl0aW9uID0gdWkuaWNvbnMuZGVsZXRlKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZW1vdmVPclJlcGxhY2VDb25kaXRpb24oY29uZGl0aW9uLCBwYXJlbnRDb25kaXRpb24uY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWJ1aWxkVUkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cnVjdHVyZUNoYW5nZWQubmV4dCh0aGlzLmNvbmRpdGlvbik7XG4gICAgICAgICAgICB9LCAnRGVsZXRlJyk7XG4gICAgICAgICAgICBhZGREZWxldGVJY29uc0Rpdi5hcHBlbmQoZGVsZXRlQ29uZGl0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmVzdGVkQ29uZGl0aW9uIG9mIGNvbmRpdGlvbi5jb25kaXRpb25zISkge1xuICAgICAgICAgICAgaWYgKCdmaWVsZCcgaW4gbmVzdGVkQ29uZGl0aW9uKVxuICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5RmlsdGVyQ29udGFpbmVyKG5lc3RlZENvbmRpdGlvbik7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRDb250YWluZXIgPSB0aGlzLmJ1aWxkVUkobmVzdGVkQ29uZGl0aW9uIGFzIENvbXBsZXhDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiwgbmVzdGluZ0xldmVsICsgMSk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChuZXN0ZWRDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uZGl0aW9uLmNvbmRpdGlvbnMubGVuZ3RoIDwgMiA/IGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpIDpcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdwcm9wZXJ0eS1xdWVyeS1idWlsZGVyLW11bHRpcGUtZmlsZWxkcycpO1xuXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVOZXN0aW5nQ29sb3IobGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJhc2VDb2xvciA9IHsgcjogMTg3LCBnOiAyMjIsIGI6IDI1MSB9O1xuXG4gICAgICAgIGNvbnN0IGRhcmtlbmluZ0ZhY3RvciA9IE1hdGgubWluKDAuMSArIChsZXZlbCAtIDEpICogMC4wOCwgMC45KTtcblxuICAgICAgICBjb25zdCByID0gTWF0aC5yb3VuZChiYXNlQ29sb3IuciAqICgxIC0gZGFya2VuaW5nRmFjdG9yKSk7XG4gICAgICAgIGNvbnN0IGcgPSBNYXRoLnJvdW5kKGJhc2VDb2xvci5nICogKDEgLSBkYXJrZW5pbmdGYWN0b3IpKTtcbiAgICAgICAgY29uc3QgYiA9IE1hdGgucm91bmQoYmFzZUNvbG9yLmIgKiAoMSAtIGRhcmtlbmluZ0ZhY3RvcikpO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gaGV4XG4gICAgICAgIHJldHVybiBgIyR7ci50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKX0ke2cudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJyl9JHtiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgfVxufVxuXG5cbmZ1bmN0aW9uIHN1Z2dlc3Rpb25NZW51S2V5TmF2aWdhdGlvbihpbnB1dENvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgaW5wdXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgaWYgKGUua2V5ICE9PSAnQXJyb3dEb3duJyAmJiBlLmtleSAhPT0gJ0Fycm93VXAnICYmIGUua2V5ICE9PSAnRW50ZXInKVxuICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbnRseVNlbGVjdGVkOiBIVE1MRWxlbWVudCB8IG51bGwgPSBpbnB1dENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuZDQtbWVudS1pdGVtLWhvdmVyJyk7XG4gICAgY29uc3QgYWxsSXRlbXM6IEhUTUxFbGVtZW50W10gPSBBcnJheS5mcm9tKGlucHV0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5kNC1tZW51LWl0ZW0nKSA/PyBbXSk7XG4gICAgaWYgKCFhbGxJdGVtcyB8fCBhbGxJdGVtcy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm47XG4gICAgYWxsSXRlbXMuc29ydCgoYSwgYikgPT4gYS5vZmZzZXRUb3AgLSBiLm9mZnNldFRvcCk7IC8vIHNvcnQgYnkgdmVydGljYWwgcG9zaXRpb25cblxuICAgIGxldCBjdXJyZW50SW5kZXggPSBjdXJyZW50bHlTZWxlY3RlZCA/IGFsbEl0ZW1zLmluZGV4T2YoY3VycmVudGx5U2VsZWN0ZWQpIDogLTE7XG4gICAgaWYgKGUua2V5ID09PSAnQXJyb3dEb3duJylcbiAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIGFsbEl0ZW1zLmxlbmd0aDtcbiAgICBlbHNlIGlmIChlLmtleSA9PT0gJ0Fycm93VXAnKVxuICAgICAgY3VycmVudEluZGV4ID0gKGN1cnJlbnRJbmRleCAtIDEgKyBhbGxJdGVtcy5sZW5ndGgpICUgYWxsSXRlbXMubGVuZ3RoO1xuICAgIGVsc2UgaWYgKGUua2V5ID09PSAnRW50ZXInICYmIGN1cnJlbnRseVNlbGVjdGVkKSB7XG4gICAgICBjdXJyZW50bHlTZWxlY3RlZC5jbGljaygpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJyZW50bHlTZWxlY3RlZD8uY2xhc3NMaXN0LnJlbW92ZSgnZDQtbWVudS1pdGVtLWhvdmVyJyk7XG4gICAgYWxsSXRlbXNbY3VycmVudEluZGV4XS5jbGFzc0xpc3QuYWRkKCdkNC1tZW51LWl0ZW0taG92ZXInKTtcbiAgfSk7XG59XG5cbiJdfQ==
@@ -80,13 +80,13 @@ export class PropertyTable extends DG.Widget {
80
80
  this.data.items.splice(this.data.items.indexOf(item) + 1, 0, newItem);
81
81
  this.refresh();
82
82
  this.onItemAdded.next(newItem);
83
- }));
83
+ }, 'Add'));
84
84
  if ((_b = this.data.allowRemove) !== null && _b !== void 0 ? _b : false)
85
85
  elements.push(ui.iconFAB('times', () => {
86
86
  this.data.items.splice(this.data.items.indexOf(item), 1);
87
87
  this.refresh();
88
88
  this.onItemRemoved.next(item);
89
- }));
89
+ }, 'Remove'));
90
90
  return elements;
91
91
  };
92
92
  this.table = ui.table(this.data.items, createRow);
@@ -110,4 +110,4 @@ PropertyValidator.NOT_EMPTY = 'not empty';
110
110
  PropertyValidator.validators = {
111
111
  NOT_EMPTY: (s) => s == null || s === '' ? "Can't be empty" : null
112
112
  };
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjaGVtYS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLElBQUksSUFBSTtRQUNOLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxZQUNFLE9BR0M7O1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQVhwQixpQkFBWSxHQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQVM3QixJQUFJLENBQUMsVUFBVSxHQUFH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QUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJO0NBQ3ZFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHttZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7SVByb3BlcnR5LCBWYWx1ZU1hdGNoZXJ9IGZyb20gXCJkYXRhZ3Jvay1hcGkvZGdcIjtcblxuZnVuY3Rpb24gaXNOdW1lcmljKHR5cGU6IHN0cmluZykge1xuICByZXR1cm4gdHlwZSA9PSBERy5UWVBFLklOVCB8fCB0eXBlID09IERHLlRZUEUuRkxPQVQgfHwgdHlwZSA9PSBERy5UWVBFLkJJR19JTlQgfHwgdHlwZSA9PSBERy5UWVBFLlFOVU07XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFFZGl0b3IgZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnU2NoZW1hRWRpdG9yJztcbiAgfVxuXG4gIHRhYmxlOiBQcm9wZXJ0eVRhYmxlPERHLklQcm9wZXJ0eT47XG4gIGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbREcuVFlQRS5TVFJJTkcsIERHLlRZUEUuSU5ULCBERy5UWVBFLkZMT0FULCBERy5UWVBFLkJPT0wsIERHLlRZUEUuREFURV9USU1FXTtcbiAgcHJvcGVydGllczogREcuSVByb3BlcnR5W10gPSBbXTtcbiAgZXh0cmFQcm9wZXJ0aWVzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgZXh0cmFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLCBleHRyYVByb3BlcnRpZXNEaXY/OiBIVE1MRGl2RWxlbWVudCxcbiAgICAgIGFsbG93UmVtb3ZlPzogYm9vbGVhbiwgZXh0cmFQcm9wZXJ0aWVzPzogc3RyaW5nW11cbiAgICB9XG4gICkge1xuICAgIHN1cGVyKHVpLmRpdihbXSkpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLmV4dHJhUHJvcGVydGllc0RpdiA9IG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzRGl2ID8/IHVpLmRpdihbXSk7XG4gICAgdGhpcy5leHRyYVByb3BlcnRpZXMgPSBvcHRpb25zLmV4dHJhUHJvcGVydGllcyA/PyBbXTtcblxuICAgIGNvbnN0IHR5cGVQcm9wOiBJUHJvcGVydHkgPSB7XG4gICAgICAuLi5ERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ3R5cGUnXSxcbiAgICAgIGNob2ljZXM6IHRoaXMuYWxsb3dlZFR5cGVzXG4gICAgfTtcblxuICAgIHRoaXMudGFibGUgPSBuZXcgUHJvcGVydHlUYWJsZSh7XG4gICAgICBpdGVtczogb3B0aW9ucy5wcm9wZXJ0aWVzLFxuICAgICAgbWFpblByb3BlcnRpZXM6IFtERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ25hbWUnXSEsIHR5cGVQcm9wXSxcbiAgICAgIGFsbG93QWRkOiB0cnVlLFxuICAgICAgYWxsb3dSZW1vdmU6IG9wdGlvbnMuYWxsb3dSZW1vdmUgPz8gdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGUub25TZWxlY3RlZC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHVpLmVtcHR5KHRoaXMuZXh0cmFQcm9wZXJ0aWVzRGl2KTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkS2V5cyA9IFsndHlwZScsICduYW1lJywgJ2RlZmF1bHRWYWx1ZScsICd2YWx1ZVZhbGlkYXRvcnMnXTtcbiAgICAgIGNvbnN0IHByb3BLZXlzID0gdGhpcy5leHRyYVByb3BlcnRpZXMubGVuZ3RoID4gMCBcbiAgICAgICAgPyB0aGlzLmV4dHJhUHJvcGVydGllc1xuICAgICAgICA6IE9iamVjdC5rZXlzKERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9ucykuZmlsdGVyKGtleSA9PiAhZXhjbHVkZWRLZXlzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICBjb25zdCBleHRyYVByb3BlcnRpZXMgPSBwcm9wS2V5c1xuICAgICAgICAubWFwKGsgPT4gREcuUHJvcGVydHkucHJvcGVydHlPcHRpb25zW2sgYXMga2V5b2YgdHlwZW9mIERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9uc10hKVxuICAgICAgICAuZmlsdGVyKHAgPT4gcC5hcHBsaWNhYmxlVG8gPT0gbnVsbCB8fCAocC5hcHBsaWNhYmxlVG8gPT0gREcuVFlQRS5OVU1FUklDQUwgJiYgKGlzTnVtZXJpYyhwLnR5cGUhKSkpKVxuICAgICAgICAubWFwKHAgPT4gREcuUHJvcGVydHkuZnJvbU9wdGlvbnMocCkpO1xuICAgICAgY29uc3QgZm9ybSA9IHVpLmlucHV0LmZvcm0oaXRlbSwgZXh0cmFQcm9wZXJ0aWVzKTtcblxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXNEaXYuYXBwZW5kQ2hpbGQodWkuZGl2VihbXG4gICAgICAgIHVpLmgyKGl0ZW0ubmFtZSEpLFxuICAgICAgICBmb3JtXG4gICAgICBdKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUZyb21Qcm9wZXJ0aWVzT3B0aW9uczxUID0gYW55PiA9IHtcbiAgaXRlbXM6IFRbXSxcbiAgbWFpblByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLFxuICBleHRyYVByb3BlcnRpZXM/OiBERy5JUHJvcGVydHlbXSxcbiAgYWxsb3dBZGQ/OiBib29sZWFuLFxuICBhbGxvd1JlbW92ZT86IGJvb2xlYW4sXG4gIGNyZWF0ZU5ldz86ICgpID0+IFRcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VGFibGU8VCA9IGFueT4gZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUHJvcGVydHlUYWJsZSc7XG4gIH1cblxuICB0YWJsZT86IEhUTUxUYWJsZUVsZW1lbnQ7XG5cbiAgb25TZWxlY3RlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbUNoYW5nZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuICBvbkl0ZW1BZGRlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbVJlbW92ZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBBbnkgY2hhbmdlIChJdGVtQ2hhbmdlZCwgSXRlbUFkZGVkLCBJdGVtUmVtb3ZlZCkgKi9cbiAgZ2V0IG9uQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbWVyZ2UodGhpcy5vbkl0ZW1DaGFuZ2VkLCB0aGlzLm9uSXRlbUFkZGVkLCB0aGlzLm9uSXRlbVJlbW92ZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFRhYmxlRnJvbVByb3BlcnRpZXNPcHRpb25zKSB7XG4gICAgc3VwZXIodWkuZGl2KFtdKSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChpdGVtOiBULCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5kYXRhLm1haW5Qcm9wZXJ0aWVzXG4gICAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JQcm9wZXJ0eShERy5Qcm9wZXJ0eS5mcm9tT3B0aW9ucyhwKSwgaXRlbSk7XG4gICAgICAgICAgZm9yIChjb25zdCB2IG9mIHAudmFsaWRhdG9ycyA/PyBbXSlcbiAgICAgICAgICAgIGlucHV0LmFkZFZhbGlkYXRvcigocykgPT4gVmFsdWVNYXRjaGVyLmZvclR5cGUocC50eXBlISwgdikudmFsaWRhdGUocykpO1xuICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkl0ZW1DaGFuZ2VkLm5leHQoaXRlbSkpO1xuICAgICAgICAgIGlucHV0LmlucHV0Lm9uY2xpY2sgPSAoKSA9PiB0aGlzLm9uU2VsZWN0ZWQubmV4dChpdGVtKTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQuaW5wdXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93QWRkID8/IGZhbHNlKVxuICAgICAgICBlbGVtZW50cy5wdXNoKHVpLmljb25GQUIoJ3BsdXMnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuZGF0YS5jcmVhdGVOZXcgPyB0aGlzLmRhdGEuY3JlYXRlTmV3KCkgOiB7fTtcbiAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pICsgMSwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1BZGRlZC5uZXh0KG5ld0l0ZW0pO1xuICAgICAgICB9KSk7XG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93UmVtb3ZlID8/IGZhbHNlKVxuICAgICAgICBlbGVtZW50cy5wdXNoKHVpLmljb25GQUIoJ3RpbWVzJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YS5pdGVtcy5zcGxpY2UodGhpcy5kYXRhLml0ZW1zLmluZGV4T2YoaXRlbSksIDEpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIHRoaXMub25JdGVtUmVtb3ZlZC5uZXh0KGl0ZW0pO1xuICAgICAgICB9KSk7XG4gICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZSA9IHVpLnRhYmxlKHRoaXMuZGF0YS5pdGVtcywgY3JlYXRlUm93KTtcbiAgICB1aS5lbXB0eSh0aGlzLnJvb3QpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlKTtcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVZhbGlkYXRvciB7XG4gIHN0YXRpYyBOT1RfRU1QVFkgPSAnbm90IGVtcHR5JztcblxuICBzdGF0aWMgdmFsaWRhdG9yczoge1tuYW1lOiBzdHJpbmddOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgbnVsbH0gPSB7XG4gICAgTk9UX0VNUFRZOiAoczogYW55KSA9PiBzID09IG51bGwgfHwgcyA9PT0gJycgPyBcIkNhbid0IGJlIGVtcHR5XCIgOiBudWxsXG4gIH1cblxuICBzdGF0aWMgZ2V0VmFsaWRhdG9yKG9iajogYW55LCBwcm9wOiBERy5JUHJvcGVydHksIGV4cHJlc3Npb246IHN0cmluZyk6ICgodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLnZhbGlkYXRvcnNbZXhwcmVzc2lvbl0gIT09IG51bGwpXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzW2V4cHJlc3Npb25dO1xuXG4gICAgaWYgKFZhbHVlTWF0Y2hlci5zdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhwcm9wLnR5cGUhKSlcbiAgICAgIHJldHVybiBWYWx1ZU1hdGNoZXIuZm9yVHlwZShwcm9wLnR5cGUhLCBleHByZXNzaW9uKS52YWxpZGF0ZTtcblxuICAgIHJldHVybiAoXykgPT4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlclZhbGlkYXRvcihuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogKCh4OiBhbnkpID0+IHN0cmluZyB8IG51bGwpKSB7XG4gICAgdGhpcy52YWxpZGF0b3JzW25hbWVdID0gdmFsaWRhdG9yO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNjaGVtYS1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBWSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxNQUFNO0lBQ3pDLElBQUksSUFBSTtRQUNOLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxZQUNFLE9BR0M7O1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQVhwQixpQkFBWSxHQUFhLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RyxlQUFVLEdBQW1CLEVBQUUsQ0FBQztRQUVoQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQVM3QixJQUFJLENBQUMsVUFBVSxHQUFH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QUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJO0NBQ3ZFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHttZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7SVByb3BlcnR5LCBWYWx1ZU1hdGNoZXJ9IGZyb20gXCJkYXRhZ3Jvay1hcGkvZGdcIjtcblxuZnVuY3Rpb24gaXNOdW1lcmljKHR5cGU6IHN0cmluZykge1xuICByZXR1cm4gdHlwZSA9PSBERy5UWVBFLklOVCB8fCB0eXBlID09IERHLlRZUEUuRkxPQVQgfHwgdHlwZSA9PSBERy5UWVBFLkJJR19JTlQgfHwgdHlwZSA9PSBERy5UWVBFLlFOVU07XG59XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFFZGl0b3IgZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnU2NoZW1hRWRpdG9yJztcbiAgfVxuXG4gIHRhYmxlOiBQcm9wZXJ0eVRhYmxlPERHLklQcm9wZXJ0eT47XG4gIGFsbG93ZWRUeXBlczogc3RyaW5nW10gPSBbREcuVFlQRS5TVFJJTkcsIERHLlRZUEUuSU5ULCBERy5UWVBFLkZMT0FULCBERy5UWVBFLkJPT0wsIERHLlRZUEUuREFURV9USU1FXTtcbiAgcHJvcGVydGllczogREcuSVByb3BlcnR5W10gPSBbXTtcbiAgZXh0cmFQcm9wZXJ0aWVzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgZXh0cmFQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLCBleHRyYVByb3BlcnRpZXNEaXY/OiBIVE1MRGl2RWxlbWVudCxcbiAgICAgIGFsbG93UmVtb3ZlPzogYm9vbGVhbiwgZXh0cmFQcm9wZXJ0aWVzPzogc3RyaW5nW11cbiAgICB9XG4gICkge1xuICAgIHN1cGVyKHVpLmRpdihbXSkpO1xuICAgIHRoaXMucHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB0aGlzLmV4dHJhUHJvcGVydGllc0RpdiA9IG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzRGl2ID8/IHVpLmRpdihbXSk7XG4gICAgdGhpcy5leHRyYVByb3BlcnRpZXMgPSBvcHRpb25zLmV4dHJhUHJvcGVydGllcyA/PyBbXTtcblxuICAgIGNvbnN0IHR5cGVQcm9wOiBJUHJvcGVydHkgPSB7XG4gICAgICAuLi5ERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ3R5cGUnXSxcbiAgICAgIGNob2ljZXM6IHRoaXMuYWxsb3dlZFR5cGVzXG4gICAgfTtcblxuICAgIHRoaXMudGFibGUgPSBuZXcgUHJvcGVydHlUYWJsZSh7XG4gICAgICBpdGVtczogb3B0aW9ucy5wcm9wZXJ0aWVzLFxuICAgICAgbWFpblByb3BlcnRpZXM6IFtERy5Qcm9wZXJ0eS5wcm9wZXJ0eU9wdGlvbnNbJ25hbWUnXSEsIHR5cGVQcm9wXSxcbiAgICAgIGFsbG93QWRkOiB0cnVlLFxuICAgICAgYWxsb3dSZW1vdmU6IG9wdGlvbnMuYWxsb3dSZW1vdmUgPz8gdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGUub25TZWxlY3RlZC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHVpLmVtcHR5KHRoaXMuZXh0cmFQcm9wZXJ0aWVzRGl2KTtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVkS2V5cyA9IFsndHlwZScsICduYW1lJywgJ2RlZmF1bHRWYWx1ZScsICd2YWx1ZVZhbGlkYXRvcnMnXTtcbiAgICAgIGNvbnN0IHByb3BLZXlzID0gdGhpcy5leHRyYVByb3BlcnRpZXMubGVuZ3RoID4gMCBcbiAgICAgICAgPyB0aGlzLmV4dHJhUHJvcGVydGllc1xuICAgICAgICA6IE9iamVjdC5rZXlzKERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9ucykuZmlsdGVyKGtleSA9PiAhZXhjbHVkZWRLZXlzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICBjb25zdCBleHRyYVByb3BlcnRpZXMgPSBwcm9wS2V5c1xuICAgICAgICAubWFwKGsgPT4gREcuUHJvcGVydHkucHJvcGVydHlPcHRpb25zW2sgYXMga2V5b2YgdHlwZW9mIERHLlByb3BlcnR5LnByb3BlcnR5T3B0aW9uc10hKVxuICAgICAgICAuZmlsdGVyKHAgPT4gcC5hcHBsaWNhYmxlVG8gPT0gbnVsbCB8fCAocC5hcHBsaWNhYmxlVG8gPT0gREcuVFlQRS5OVU1FUklDQUwgJiYgKGlzTnVtZXJpYyhwLnR5cGUhKSkpKVxuICAgICAgICAubWFwKHAgPT4gREcuUHJvcGVydHkuZnJvbU9wdGlvbnMocCkpO1xuICAgICAgY29uc3QgZm9ybSA9IHVpLmlucHV0LmZvcm0oaXRlbSwgZXh0cmFQcm9wZXJ0aWVzKTtcblxuICAgICAgdGhpcy5leHRyYVByb3BlcnRpZXNEaXYuYXBwZW5kQ2hpbGQodWkuZGl2VihbXG4gICAgICAgIHVpLmgyKGl0ZW0ubmFtZSEpLFxuICAgICAgICBmb3JtXG4gICAgICBdKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290KTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUYWJsZUZyb21Qcm9wZXJ0aWVzT3B0aW9uczxUID0gYW55PiA9IHtcbiAgaXRlbXM6IFRbXSxcbiAgbWFpblByb3BlcnRpZXM6IERHLklQcm9wZXJ0eVtdLFxuICBleHRyYVByb3BlcnRpZXM/OiBERy5JUHJvcGVydHlbXSxcbiAgYWxsb3dBZGQ/OiBib29sZWFuLFxuICBhbGxvd1JlbW92ZT86IGJvb2xlYW4sXG4gIGNyZWF0ZU5ldz86ICgpID0+IFRcbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VGFibGU8VCA9IGFueT4gZXh0ZW5kcyBERy5XaWRnZXQge1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnUHJvcGVydHlUYWJsZSc7XG4gIH1cblxuICB0YWJsZT86IEhUTUxUYWJsZUVsZW1lbnQ7XG5cbiAgb25TZWxlY3RlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbUNoYW5nZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuICBvbkl0ZW1BZGRlZDogU3ViamVjdDxUPiA9IG5ldyBTdWJqZWN0KCk7XG4gIG9uSXRlbVJlbW92ZWQ6IFN1YmplY3Q8VD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKiBBbnkgY2hhbmdlIChJdGVtQ2hhbmdlZCwgSXRlbUFkZGVkLCBJdGVtUmVtb3ZlZCkgKi9cbiAgZ2V0IG9uQ2hhbmdlZCgpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbWVyZ2UodGhpcy5vbkl0ZW1DaGFuZ2VkLCB0aGlzLm9uSXRlbUFkZGVkLCB0aGlzLm9uSXRlbVJlbW92ZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IFRhYmxlRnJvbVByb3BlcnRpZXNPcHRpb25zKSB7XG4gICAgc3VwZXIodWkuZGl2KFtdKSk7XG4gICAgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IGNyZWF0ZVJvdyA9IChpdGVtOiBULCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5kYXRhLm1haW5Qcm9wZXJ0aWVzXG4gICAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JQcm9wZXJ0eShERy5Qcm9wZXJ0eS5mcm9tT3B0aW9ucyhwKSwgaXRlbSk7XG4gICAgICAgICAgZm9yIChjb25zdCB2IG9mIHAudmFsaWRhdG9ycyA/PyBbXSlcbiAgICAgICAgICAgIGlucHV0LmFkZFZhbGlkYXRvcigocykgPT4gVmFsdWVNYXRjaGVyLmZvclR5cGUocC50eXBlISwgdikudmFsaWRhdGUocykpO1xuICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkl0ZW1DaGFuZ2VkLm5leHQoaXRlbSkpO1xuICAgICAgICAgIGlucHV0LmlucHV0Lm9uY2xpY2sgPSAoKSA9PiB0aGlzLm9uU2VsZWN0ZWQubmV4dChpdGVtKTtcbiAgICAgICAgICByZXR1cm4gaW5wdXQuaW5wdXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLmFsbG93QWRkID8/IGZhbHNlKVxuICAgICAgICBlbGVtZW50cy5wdXNoKHVpLmljb25GQUIoJ3BsdXMnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHRoaXMuZGF0YS5jcmVhdGVOZXcgPyB0aGlzLmRhdGEuY3JlYXRlTmV3KCkgOiB7fTtcbiAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pICsgMSwgMCwgbmV3SXRlbSk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgICAgdGhpcy5vbkl0ZW1BZGRlZC5uZXh0KG5ld0l0ZW0pO1xuICAgICAgICB9LCAnQWRkJykpO1xuICAgICAgaWYgKHRoaXMuZGF0YS5hbGxvd1JlbW92ZSA/PyBmYWxzZSlcbiAgICAgICAgZWxlbWVudHMucHVzaCh1aS5pY29uRkFCKCd0aW1lcycsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGEuaXRlbXMuc3BsaWNlKHRoaXMuZGF0YS5pdGVtcy5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICB0aGlzLm9uSXRlbVJlbW92ZWQubmV4dChpdGVtKTtcbiAgICAgICAgfSwgJ1JlbW92ZScpKTtcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlID0gdWkudGFibGUodGhpcy5kYXRhLml0ZW1zLCBjcmVhdGVSb3cpO1xuICAgIHVpLmVtcHR5KHRoaXMucm9vdCk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMudGFibGUpO1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5VmFsaWRhdG9yIHtcbiAgc3RhdGljIE5PVF9FTVBUWSA9ICdub3QgZW1wdHknO1xuXG4gIHN0YXRpYyB2YWxpZGF0b3JzOiB7W25hbWU6IHN0cmluZ106ICh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsfSA9IHtcbiAgICBOT1RfRU1QVFk6IChzOiBhbnkpID0+IHMgPT0gbnVsbCB8fCBzID09PSAnJyA/IFwiQ2FuJ3QgYmUgZW1wdHlcIiA6IG51bGxcbiAgfVxuXG4gIHN0YXRpYyBnZXRWYWxpZGF0b3Iob2JqOiBhbnksIHByb3A6IERHLklQcm9wZXJ0eSwgZXhwcmVzc2lvbjogc3RyaW5nKTogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yc1tleHByZXNzaW9uXSAhPT0gbnVsbClcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcnNbZXhwcmVzc2lvbl07XG5cbiAgICBpZiAoVmFsdWVNYXRjaGVyLnN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKHByb3AudHlwZSEpKVxuICAgICAgcmV0dXJuIFZhbHVlTWF0Y2hlci5mb3JUeXBlKHByb3AudHlwZSEsIGV4cHJlc3Npb24pLnZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIChfKSA9PiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyVmFsaWRhdG9yKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiAoKHg6IGFueSkgPT4gc3RyaW5nIHwgbnVsbCkpIHtcbiAgICB0aGlzLnZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XG4gIH1cbn1cbiJdfQ==
package/src/u2.d.ts CHANGED
@@ -1,11 +1,12 @@
1
+ import * as DG from 'datagrok-api/dg';
1
2
  import './u2.css';
2
3
  export declare namespace u2 {
3
4
  /** */
4
5
  namespace panels {
5
6
  /** Vertically positioned items */
6
- function vert(items: any[]): HTMLElement;
7
+ function vert(items: any[], options?: DG.ElementOptions): HTMLElement;
7
8
  /** Horizontally positioned items */
8
- function horz(items: any[]): HTMLElement;
9
+ function horz(items: any[], options?: DG.ElementOptions): HTMLElement;
9
10
  }
10
11
  interface IAppInfo {
11
12
  iconPath: string;
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;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAED,SAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CA4BvD;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":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,UAAU,CAAC;AAGlB,yBAAiB,EAAE,CAAC;IAElB,MAAM;IACN,UAAiB,MAAM,CAAC;QAEtB,kCAAkC;QAClC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,cAAc,GAAG,WAAW,CAE3E;QAED,oCAAoC;QACpC,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,cAAc,GAAG,WAAW,CAE3E;KACF;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;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAED,SAAgB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,CA4BvD;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
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import * as ui from 'datagrok-api/ui';
11
11
  import * as grok from 'datagrok-api/grok';
12
+ import * as DG from 'datagrok-api/dg';
12
13
  import $ from 'cash-dom';
13
14
  import './u2.css';
14
15
  export var u2;
@@ -17,13 +18,13 @@ export var u2;
17
18
  let panels;
18
19
  (function (panels) {
19
20
  /** Vertically positioned items */
20
- function vert(items) {
21
- return ui.divV(items.map((item) => ui.render(item)), { classes: 'u2-panel' });
21
+ function vert(items, options) {
22
+ return DG._options(ui.divV(items.map((item) => ui.render(item)), { classes: 'u2-panel' }), options);
22
23
  }
23
24
  panels.vert = vert;
24
25
  /** Horizontally positioned items */
25
- function horz(items) {
26
- return ui.divH(items.map((item) => ui.render(item)), { classes: 'u2-panel' });
26
+ function horz(items, options) {
27
+ return DG._options(ui.divH(items.map((item) => ui.render(item)), { classes: 'u2-panel' }), options);
27
28
  }
28
29
  panels.horz = horz;
29
30
  })(panels = u2.panels || (u2.panels = {}));
@@ -34,7 +35,7 @@ export var u2;
34
35
  icon.style.width = `${header.iconSize}px`;
35
36
  icon.style.height = `${header.iconSize}px`;
36
37
  }
37
- const appHeaderDiv = panels.horz([]);
38
+ const appHeaderDiv = panels.horz([], { classes: 'ui-app-header' });
38
39
  if (header.appTitle) {
39
40
  appHeaderDiv.classList.add('u2-app-header-with-name');
40
41
  const nameDiv = ui.divV([ui.divText(header.appTitle, 'u2-app-header-app-name-div')], 'u2-app-header-app-name-and-slogan-div');
@@ -77,4 +78,4 @@ export var u2;
77
78
  tools.runAsync = runAsync;
78
79
  })(tools = u2.tools || (u2.tools = {}));
79
80
  })(u2 || (u2 = {}));
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sVUFBVSxDQUFDO0FBR2xCLE1BQU0sS0FBVyxFQUFFLENBMkVsQjtBQTNFRCxXQUFpQixFQUFFO0lBRWpCLE1BQU07SUFDTixJQUFpQixNQUFNLENBWXRCO0lBWkQsV0FBaUIsTUFBTTtRQUVyQixrQ0FBa0M7UUFDbEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7UUFFRCxvQ0FBb0M7UUFDcEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVk7WUFDL0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7SUFFSCxDQUFDLEVBWmdCLE1BQU0sR0FBTixTQUFNLEtBQU4sU0FBTSxRQVl0QjtJQVlELFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtRQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDO1NBQzVDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDbkIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLDRCQUE0QixDQUFDLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1lBQzlILElBQUksTUFBTSxDQUFDLFdBQVc7Z0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7O1lBRUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUMvQixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDbEgsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN2RCxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksTUFBTSxDQUFDLFVBQVU7WUFDbkIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMxRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBNUJlLFlBQVMsWUE0QnhCLENBQUE7SUFHRCxJQUFpQixLQUFLLENBZ0JyQjtJQWhCRCxXQUFpQixLQUFLO1FBRXBCOzBDQUNrQztRQUNsQyxTQUFzQixRQUFRLENBQUksSUFBaUIsRUFBRSxJQUFzQjs7Z0JBQ3pFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUk7b0JBQ0YsT0FBTyxNQUFNLElBQUksRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxPQUFPLENBQUMsRUFBRTtvQkFDUixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFXLENBQUMsQ0FBQztpQkFDN0I7d0JBQ087b0JBQ04sRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDO1NBQUE7UUFYcUIsY0FBUSxXQVc3QixDQUFBO0lBQ0gsQ0FBQyxFQWhCZ0IsS0FBSyxHQUFMLFFBQUssS0FBTCxRQUFLLFFBZ0JyQjtBQUNILENBQUMsRUEzRWdCLEVBQUUsS0FBRixFQUFFLFFBMkVsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAkIGZyb20gJ2Nhc2gtZG9tJztcbmltcG9ydCAnLi91Mi5jc3MnO1xuXG5cbmV4cG9ydCBuYW1lc3BhY2UgdTIge1xuXG4gIC8qKiAqL1xuICBleHBvcnQgbmFtZXNwYWNlIHBhbmVscyB7XG5cbiAgICAvKiogVmVydGljYWxseSBwb3NpdGlvbmVkIGl0ZW1zICovXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHZlcnQoaXRlbXM6IGFueVtdKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIHVpLmRpdlYoaXRlbXMubWFwKChpdGVtKSA9PiB1aS5yZW5kZXIoaXRlbSkpLCB7IGNsYXNzZXM6ICd1Mi1wYW5lbCd9KTtcbiAgICB9XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IHBvc2l0aW9uZWQgaXRlbXMgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gaG9yeihpdGVtczogYW55W10pOiBIVE1MRWxlbWVudCB7XG4gICAgICByZXR1cm4gdWkuZGl2SChpdGVtcy5tYXAoKGl0ZW0pID0+IHVpLnJlbmRlcihpdGVtKSksIHsgY2xhc3NlczogJ3UyLXBhbmVsJ30pO1xuICAgIH1cblxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJQXBwSW5mbyB7XG4gICAgaWNvblBhdGg6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGxlYXJuTW9yZVVybD86IHN0cmluZztcbiAgICBhcHBUaXRsZT86IHN0cmluZztcbiAgICBhcHBTdWJUaXRsZT86IHN0cmluZztcbiAgICBib3R0b21MaW5lPzogYm9vbGVhbjtcbiAgICBpY29uU2l6ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcHBIZWFkZXIoaGVhZGVyOiBJQXBwSW5mbyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBpY29uID0gdWkuaWNvbkltYWdlKCcnLCBoZWFkZXIuaWNvblBhdGgpO1xuICAgICQoaWNvbikuYWRkQ2xhc3MoJ3VpLWFwcC1oZWFkZXItaWNvbicpLmNzcygnbWFyZ2luLXJpZ2h0JywgJzIwcHgnKTtcbiAgICBpZiAoaGVhZGVyLmljb25TaXplKSB7XG4gICAgICBpY29uLnN0eWxlLndpZHRoID0gYCR7aGVhZGVyLmljb25TaXplfXB4YDtcbiAgICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gYCR7aGVhZGVyLmljb25TaXplfXB4YDtcbiAgICB9XG4gICAgY29uc3QgYXBwSGVhZGVyRGl2ID0gcGFuZWxzLmhvcnooW10pO1xuICAgIGlmIChoZWFkZXIuYXBwVGl0bGUpIHtcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLXdpdGgtbmFtZScpO1xuICAgICAgY29uc3QgbmFtZURpdiA9IHVpLmRpdlYoW3VpLmRpdlRleHQoaGVhZGVyLmFwcFRpdGxlLCAndTItYXBwLWhlYWRlci1hcHAtbmFtZS1kaXYnKV0sICd1Mi1hcHAtaGVhZGVyLWFwcC1uYW1lLWFuZC1zbG9nYW4tZGl2Jyk7XG4gICAgICBpZiAoaGVhZGVyLmFwcFN1YlRpdGxlKVxuICAgICAgICBuYW1lRGl2LmFwcGVuZCh1aS5kaXZUZXh0KGhlYWRlci5hcHBTdWJUaXRsZSkpO1xuICAgICAgY29uc3QgaWNvbkRpdiA9IHVpLmRpdihpY29uKTtcbiAgICAgIGFwcEhlYWRlckRpdi5hcHBlbmQodWkuZGl2SChbaWNvbkRpdiwgbmFtZURpdl0pKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgYXBwSGVhZGVyRGl2LmFwcGVuZChpY29uKTtcblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcGFuZWxzLnZlcnQoW1xuICAgICAgdWkubWFya2Rvd24oaGVhZGVyLmRlc2NyaXB0aW9uKSxcbiAgICAgIGhlYWRlci5sZWFybk1vcmVVcmwgPyB1aS5saW5rKCdMZWFybiBtb3JlJywgaGVhZGVyLmxlYXJuTW9yZVVybCwgdW5kZWZpbmVkLCB7c3R5bGU6IHttYXJnaW5MZWZ0OiAnMTVweCd9fSkgOiBudWxsXG4gICAgXSk7XG4gICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZCgndTItYXBwLWhlYWRlci1kZXNjcmlwdGlvbicpO1xuICAgIGFwcEhlYWRlckRpdi5hcHBlbmQoZGVzY3JpcHRpb24pO1xuICAgIGlmIChoZWFkZXIuYm90dG9tTGluZSlcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLWJvdHRvbS1saW5lJyk7XG4gICAgcmV0dXJuIGFwcEhlYWRlckRpdjtcbiAgfVxuXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSB0b29scyB7XG5cbiAgICAvKiogRXhlY3V0ZXMge0BsaW5rIGZ1bmN9IHdoaWxlIHNob3dpbmcgdGhlIFwicnVubmluZ1wiIGluZGljYXRvciBvbiB7QGxpbmsgcm9vdH0uXG4gICAgICogSGFuZGxlcyBhbmQgbG9ncyBleGNlcHRpb25zLiAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Bc3luYzxUPihyb290OiBIVE1MRWxlbWVudCwgZnVuYzogKCkgPT4gUHJvbWlzZTxUPikge1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHJvb3QsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGdyb2subG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Iocm9vdCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLENBQUMsTUFBTSxVQUFVLENBQUM7QUFDekIsT0FBTyxVQUFVLENBQUM7QUFHbEIsTUFBTSxLQUFXLEVBQUUsQ0EwRWxCO0FBMUVELFdBQWlCLEVBQUU7SUFFakIsTUFBTTtJQUNOLElBQWlCLE1BQU0sQ0FXdEI7SUFYRCxXQUFpQixNQUFNO1FBRXJCLGtDQUFrQztRQUNsQyxTQUFnQixJQUFJLENBQUMsS0FBWSxFQUFFLE9BQTJCO1lBQzVELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFGZSxXQUFJLE9BRW5CLENBQUE7UUFFRCxvQ0FBb0M7UUFDcEMsU0FBZ0IsSUFBSSxDQUFDLEtBQVksRUFBRSxPQUEyQjtZQUM1RCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRmUsV0FBSSxPQUVuQixDQUFBO0lBQ0gsQ0FB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LEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3BDO1lBQ0gsQ0FBQztTQUFBO1FBWHFCLGNBQVEsV0FXN0IsQ0FBQTtJQUNILENBQUMsRUFoQmdCLEtBQUssR0FBTCxRQUFLLEtBQUwsUUFBSyxRQWdCckI7QUFDSCxDQUFDLEVBMUVnQixFQUFFLEtBQUYsRUFBRSxRQTBFbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuaW1wb3J0ICcuL3UyLmNzcyc7XG5cblxuZXhwb3J0IG5hbWVzcGFjZSB1MiB7XG5cbiAgLyoqICovXG4gIGV4cG9ydCBuYW1lc3BhY2UgcGFuZWxzIHtcblxuICAgIC8qKiBWZXJ0aWNhbGx5IHBvc2l0aW9uZWQgaXRlbXMgKi9cbiAgICBleHBvcnQgZnVuY3Rpb24gdmVydChpdGVtczogYW55W10sIG9wdGlvbnM/OiBERy5FbGVtZW50T3B0aW9ucyk6IEhUTUxFbGVtZW50IHtcbiAgICAgIHJldHVybiBERy5fb3B0aW9ucyh1aS5kaXZWKGl0ZW1zLm1hcCgoaXRlbSkgPT4gdWkucmVuZGVyKGl0ZW0pKSwgeyBjbGFzc2VzOiAndTItcGFuZWwnfSksIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBIb3Jpem9udGFsbHkgcG9zaXRpb25lZCBpdGVtcyAqL1xuICAgIGV4cG9ydCBmdW5jdGlvbiBob3J6KGl0ZW1zOiBhbnlbXSwgb3B0aW9ucz86IERHLkVsZW1lbnRPcHRpb25zKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIERHLl9vcHRpb25zKHVpLmRpdkgoaXRlbXMubWFwKChpdGVtKSA9PiB1aS5yZW5kZXIoaXRlbSkpLCB7IGNsYXNzZXM6ICd1Mi1wYW5lbCd9KSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJQXBwSW5mbyB7XG4gICAgaWNvblBhdGg6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGxlYXJuTW9yZVVybD86IHN0cmluZztcbiAgICBhcHBUaXRsZT86IHN0cmluZztcbiAgICBhcHBTdWJUaXRsZT86IHN0cmluZztcbiAgICBib3R0b21MaW5lPzogYm9vbGVhbjtcbiAgICBpY29uU2l6ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcHBIZWFkZXIoaGVhZGVyOiBJQXBwSW5mbyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBpY29uID0gdWkuaWNvbkltYWdlKCcnLCBoZWFkZXIuaWNvblBhdGgpO1xuICAgICQoaWNvbikuYWRkQ2xhc3MoJ3VpLWFwcC1oZWFkZXItaWNvbicpLmNzcygnbWFyZ2luLXJpZ2h0JywgJzIwcHgnKTtcbiAgICBpZiAoaGVhZGVyLmljb25TaXplKSB7XG4gICAgICBpY29uLnN0eWxlLndpZHRoID0gYCR7aGVhZGVyLmljb25TaXplfXB4YDtcbiAgICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gYCR7aGVhZGVyLmljb25TaXplfXB4YDtcbiAgICB9XG4gICAgY29uc3QgYXBwSGVhZGVyRGl2ID0gcGFuZWxzLmhvcnooW10sIHsgY2xhc3NlczogJ3VpLWFwcC1oZWFkZXInIH0pO1xuICAgIGlmIChoZWFkZXIuYXBwVGl0bGUpIHtcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLXdpdGgtbmFtZScpO1xuICAgICAgY29uc3QgbmFtZURpdiA9IHVpLmRpdlYoW3VpLmRpdlRleHQoaGVhZGVyLmFwcFRpdGxlLCAndTItYXBwLWhlYWRlci1hcHAtbmFtZS1kaXYnKV0sICd1Mi1hcHAtaGVhZGVyLWFwcC1uYW1lLWFuZC1zbG9nYW4tZGl2Jyk7XG4gICAgICBpZiAoaGVhZGVyLmFwcFN1YlRpdGxlKVxuICAgICAgICBuYW1lRGl2LmFwcGVuZCh1aS5kaXZUZXh0KGhlYWRlci5hcHBTdWJUaXRsZSkpO1xuICAgICAgY29uc3QgaWNvbkRpdiA9IHVpLmRpdihpY29uKTtcbiAgICAgIGFwcEhlYWRlckRpdi5hcHBlbmQodWkuZGl2SChbaWNvbkRpdiwgbmFtZURpdl0pKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgYXBwSGVhZGVyRGl2LmFwcGVuZChpY29uKTtcblxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcGFuZWxzLnZlcnQoW1xuICAgICAgdWkubWFya2Rvd24oaGVhZGVyLmRlc2NyaXB0aW9uKSxcbiAgICAgIGhlYWRlci5sZWFybk1vcmVVcmwgPyB1aS5saW5rKCdMZWFybiBtb3JlJywgaGVhZGVyLmxlYXJuTW9yZVVybCwgdW5kZWZpbmVkLCB7c3R5bGU6IHttYXJnaW5MZWZ0OiAnMTVweCd9fSkgOiBudWxsXG4gICAgXSk7XG4gICAgZGVzY3JpcHRpb24uY2xhc3NMaXN0LmFkZCgndTItYXBwLWhlYWRlci1kZXNjcmlwdGlvbicpO1xuICAgIGFwcEhlYWRlckRpdi5hcHBlbmQoZGVzY3JpcHRpb24pO1xuICAgIGlmIChoZWFkZXIuYm90dG9tTGluZSlcbiAgICAgIGFwcEhlYWRlckRpdi5jbGFzc0xpc3QuYWRkKCd1Mi1hcHAtaGVhZGVyLWJvdHRvbS1saW5lJyk7XG4gICAgcmV0dXJuIGFwcEhlYWRlckRpdjtcbiAgfVxuXG5cbiAgZXhwb3J0IG5hbWVzcGFjZSB0b29scyB7XG5cbiAgICAvKiogRXhlY3V0ZXMge0BsaW5rIGZ1bmN9IHdoaWxlIHNob3dpbmcgdGhlIFwicnVubmluZ1wiIGluZGljYXRvciBvbiB7QGxpbmsgcm9vdH0uXG4gICAgICogSGFuZGxlcyBhbmQgbG9ncyBleGNlcHRpb25zLiAqL1xuICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Bc3luYzxUPihyb290OiBIVE1MRWxlbWVudCwgZnVuYzogKCkgPT4gUHJvbWlzZTxUPikge1xuICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHJvb3QsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZ1bmMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGdyb2subG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkge1xuICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Iocm9vdCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
@@ -4,6 +4,7 @@ import '../../css/forms.css';
4
4
  export declare class FormsViewer extends DG.JsViewer {
5
5
  get type(): string;
6
6
  rendererSize: 'small' | 'normal' | 'large';
7
+ font: string;
7
8
  fieldsColumnNames: string[];
8
9
  colorCode: boolean;
9
10
  showCurrentRow: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"forms-viewer.d.ts","sourceRoot":"","sources":["forms-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAa,OAAO,EAAC,MAAM,MAAM,CAAC;AAGzC,OAAO,qBAAqB,CAAC;AAK7B,qBAAa,WAAY,SAAQ,EAAE,CAAC,QAAQ;IAC1C,IAAI,IAAI,IAAI,MAAM,CAA0B;IAE5C,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,UAAS;IACtB,WAAW,UAAQ;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,mBAAmB,iBAAuF;IAC1G,qBAAqB,iBAA0F;IAC/G,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAiB;IAE9C,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAG7B;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAOjC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAG7B;IAED,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK;IAelE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK;;IAyE7B,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM;IAOpC,cAAc,CAAC,EAAE,EAAC,WAAW;IAI7B,eAAe;IAoCf,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE;IAIxC,uBAAuB;IAavB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAO9C,YAAY;IAkDZ,IAAI,aAAa,aAA6C;IAC9D,IAAI,YAAY,iBAA2E;IAE3F,OAAO;IAWP,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAmIxC,gBAAgB,IAAI,MAAM,EAAE;IAU5B,cAAc,IAAI,OAAO,EAAE;IAU3B,MAAM;CAwBP"}
1
+ {"version":3,"file":"forms-viewer.d.ts","sourceRoot":"","sources":["forms-viewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAa,OAAO,EAAC,MAAM,MAAM,CAAC;AAGzC,OAAO,qBAAqB,CAAC;AAK7B,qBAAa,WAAY,SAAQ,EAAE,CAAC,QAAQ;IAC1C,IAAI,IAAI,IAAI,MAAM,CAA0B;IAE5C,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,UAAS;IACtB,WAAW,UAAQ;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IAEvB,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC/B,gBAAgB,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,mBAAmB,iBAAuF;IAC1G,qBAAqB,iBAA0F;IAC/G,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,EAAE,WAAW,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAiB;IAE9C,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAG7B;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAOjC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAG7B;IAED,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,KAAK;IAelE,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK;;IA0E7B,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM;IAOpC,cAAc,CAAC,EAAE,EAAC,WAAW;IAI7B,eAAe;IAoCf,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE;IAIxC,uBAAuB;IAavB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAO9C,YAAY;IAoDZ,IAAI,aAAa,aAA6C;IAC9D,IAAI,YAAY,iBAA2E;IAE3F,OAAO;IAWP,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAoIxC,gBAAgB,IAAI,MAAM,EAAE;IAU5B,cAAc,IAAI,OAAO,EAAE;IAU3B,MAAM;CAwBP"}
@@ -64,6 +64,7 @@ export class FormsViewer extends DG.JsViewer {
64
64
  this.sortByColumnName = this.column('sortBy');
65
65
  this.sortAscending = false;
66
66
  this.rendererSize = this.string('rendererSize', 'small', { choices: ['small', 'normal', 'large'], description: 'Sets the display size of rendered content' });
67
+ this.font = this.string('font', 'normal normal 13px "Roboto"', { editor: 'font', description: 'Font for labels and values' });
67
68
  //fields
68
69
  this.indexes = [];
69
70
  // init
@@ -172,8 +173,10 @@ export class FormsViewer extends DG.JsViewer {
172
173
  const closeIcon = ui.iconFA('times', () => {
173
174
  this.fieldsColumnNames = this.fieldsColumnNames.filter((value) => value !== name);
174
175
  this.render();
175
- });
176
+ }, 'Remove');
176
177
  const columnLabelContainer = ui.div([columnLabel, closeIcon], 'd4-multi-form-column-name d4-flex-row');
178
+ columnLabelContainer.style.font = this.font;
179
+ columnLabelContainer.style.fontWeight = 'bold';
177
180
  const idx = this.getSortByColumns().indexOf(name);
178
181
  if (idx > -1)
179
182
  columnLabelContainer.append(ui.divText(this.getSortByTypes()[idx] ? '↑' : '↓', 'd4-multi-form-column-sort-indicator'));
@@ -262,6 +265,7 @@ export class FormsViewer extends DG.JsViewer {
262
265
  if (this.dataFrame.col(name).semType === DG.SEMTYPE.MOLECULE)
263
266
  input.input.classList.add(`d4-multi-form-molecule-input-${this.rendererSize}`);
264
267
  input.input.setAttribute('column', name);
268
+ input.input.style.font = this.font;
265
269
  input.value = ((_b = this.dataFrame.col(name)) === null || _b === void 0 ? void 0 : _b.isNone(row)) ? null : this.dataFrame.get(name, row);
266
270
  input.readOnly = true;
267
271
  if (this.colorCode) {
@@ -372,4 +376,4 @@ export class FormsViewer extends DG.JsViewer {
372
376
  this.virtualView.setData(this.indexes.length + (this.showCurrentRow ? 1 : 0) + (this.showMouseOverRow ? 1 : 0), (i) => this.renderForm(i));
373
377
  }
374
378
  }
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybXMtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLGFBQWE7QUFDYixPQUFPLHFCQUFxQixDQUFDO0FBRTdCLE1BQU0sMkJBQTJCLEdBQUcsK0RBQStELENBQUM7QUFDcEcsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxPQUFPLFdBQVksU0FBUSxFQUFFLENBQUMsUUFBUTtJQUMxQyxJQUFJLElBQUksS0FBYSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUF1QjVDLElBQUksU0FBUyxDQUFDLEVBQWdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdB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QUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO3FCQUM3RyxJQUFJLElBQUksSUFBSSxDQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGFBQWEsMENBQUUsTUFBTSxJQUFHLENBQUM7b0JBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7O29CQUVyRyxJQUFJLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUQ7U0FDRjtRQUVELEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JGLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0ICcuLi8uLi9jc3MvZm9ybXMuY3NzJztcblxuY29uc3QgQ09MU19MSU1JVF9FWENFRURFRF9XQVJOSU5HID0gYE51bWJlciBvZiBjb2x1bW5zIGlzIG1vcmUgdGhhbiAyMC4gRmlyc3QgMjAgY29sdW1ucyBhcmUgc2hvd25gO1xuY29uc3QgQk9PTEVBTl9JTlBVVF9UT1BfTUFSR0lOID0gMTU7XG5cbmV4cG9ydCBjbGFzcyBGb3Jtc1ZpZXdlciBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgZ2V0IHR5cGUoKTogc3RyaW5nIHsgcmV0dXJuICdGb3Jtc1ZpZXdlcic7IH1cblxuICByZW5kZXJlclNpemU6ICdzbWFsbCcgfCAnbm9ybWFsJyB8ICdsYXJnZSc7XG4gIGZpZWxkc0NvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgY29sb3JDb2RlOiBib29sZWFuO1xuICBzaG93Q3VycmVudFJvdzogYm9vbGVhbjtcbiAgc2hvd01vdXNlT3ZlclJvdzogYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkUm93czogYm9vbGVhbjtcbiAgc2hvd0ZpeGVkUm93cyA9IGZhbHNlO1xuICB1c2VHcmlkU29ydCA9IHRydWU7XG4gIHNvcnRCeUNvbHVtbk5hbWU/OiBzdHJpbmc7XG4gIHNvcnRBc2NlbmRpbmc6IGJvb2xlYW47XG5cbiAgaW5kZXhlczogbnVtYmVyW10gfCBJbnQzMkFycmF5O1xuICBjb2x1bW5IZWFkZXJzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgdmlydHVhbFZpZXc6IERHLlZpcnR1YWxWaWV3O1xuICBjb2x1bW5MYWJlbFdpZHRoOiBudW1iZXIgPSAwO1xuICBjdXJyZW50Um93SW5kaWNhdG9yID0gdWkuZGl2KCcnLCAnZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvciBkNC1tdWx0aS1mb3JtLWZvcm0taW5kaWNhdG9yLWN1cnJlbnQtcm93Jyk7XG4gIG1vdXNlT3ZlclJvd0luZGljYXRvciA9IHVpLmRpdignJywgJ2Q0LW11bHRpLWZvcm0tZm9ybS1pbmRpY2F0b3IgZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvci1tb3VzZS1vdmVyLXJvdycpO1xuICBzcGxpdENvbExlZnQ6IEhUTUxFbGVtZW50O1xuICBzcGxpdENvbFJpZ2h0OiBIVE1MRWxlbWVudDtcbiAgaW5wdXRDbGlja2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHNldCBkYXRhZnJhbWUoZGY6IERHLkRhdGFGcmFtZSkge1xuICAgIHRoaXMuZGF0YUZyYW1lID0gZGY7XG4gICAgdGhpcy5vblRhYmxlQXR0YWNoZWQoKTtcbiAgfVxuXG4gIHNldCBmaXhlZFJvd051bWJlcnMoaWR4czogbnVtYmVyW10pIHtcbiAgICB0aGlzLmluZGV4ZXMgPSBpZHhzO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTZWxlY3RlZFJvd3MgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGaXhlZFJvd3MgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgY29sdW1ucyhjb2xOYW1lczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gY29sTmFtZXM7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlclNpemUocmVuZGVyZXI6IERHLkdyaWRDZWxsUmVuZGVyZXIpOiBERy5Qb2ludCB7XG4gICAgbGV0IHdpZHRoID0gcmVuZGVyZXIuZGVmYXVsdFdpZHRoO1xuICAgIGxldCBoZWlnaHQgPSByZW5kZXJlci5kZWZhdWx0SGVpZ2h0O1xuXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNhc2UgJ2xhcmdlJzogcmV0dXJuIG5ldyBERy5Qb2ludChNYXRoLmZsb29yKHdpZHRoICogMS41KSwgTWF0aC5mbG9vcihoZWlnaHQgKiAxLjUpKTtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBuZXcgREcuUG9pbnQoTWF0aC5mbG9vcih3aWR0aCAqIDAuNjYpLCBNYXRoLmZsb29yKGhlaWdodCAqIDAuNjYpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2l6ZSgpOiBERy5Qb2ludCB7XG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCgyMDAsIDEwMCk7XG4gICAgICBjYXNlICdsYXJnZSc6IHJldHVybiBuZXcgREcuUG9pbnQoMzAwLCAxNTApO1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBERy5Qb2ludCgxMjAsIDYwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5oZWxwVXJsID0gJ2h0dHBzOi8vZGF0YWdyb2suYWkvaGVscC92aXN1YWxpemUvdmlld2Vycy9mb3Jtcyc7XG5cbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9IHRoaXMuYWRkUHJvcGVydHkoJ2ZpZWxkc0NvbHVtbk5hbWVzJywgREcuVFlQRS5DT0xVTU5fTElTVCk7XG4gICAgdGhpcy5jb2xvckNvZGUgPSB0aGlzLmJvb2woJ2NvbG9yQ29kZScsIHRydWUpO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSB0aGlzLmJvb2woJ3Nob3dDdXJyZW50Um93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93TW91c2VPdmVyUm93ID0gdGhpcy5ib29sKCdzaG93TW91c2VPdmVyUm93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93U2VsZWN0ZWRSb3dzID0gdGhpcy5ib29sKCdzaG93U2VsZWN0ZWRSb3dzJywgdHJ1ZSk7XG4gICAgdGhpcy51c2VHcmlkU29ydCA9IHRoaXMuYm9vbCgndXNlR3JpZFNvcnQnLCB0cnVlLCB7ZGVzY3JpcHRpb246ICdTb3J0IHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIHNwcmVhZHNoZWV0J30pO1xuICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHRoaXMuY29sdW1uKCdzb3J0QnknKTtcbiAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9IHRoaXMuc3RyaW5nKCdyZW5kZXJlclNpemUnLCAnc21hbGwnLCB7Y2hvaWNlczogWydzbWFsbCcsICdub3JtYWwnLCAnbGFyZ2UnXSwgZGVzY3JpcHRpb246ICdTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgcmVuZGVyZWQgY29udGVudCd9KSBhcyAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuXG4gICAgLy9maWVsZHNcbiAgICB0aGlzLmluZGV4ZXMgPSBbXTtcblxuICAgIC8vIGluaXRcbiAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LmFkZCgnZDQtbXVsdGktZm9ybScpO1xuICAgIHRoaXMuY29sdW1uSGVhZGVyc0RpdiA9IHVpLmRpdihbXSwgJ2Q0LW11bHRpLWZvcm0taGVhZGVyJyk7XG4gICAgdGhpcy52aXJ0dWFsVmlldyA9IHVpLnZpcnR1YWxWaWV3KDAsIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSwgZmFsc2UsIDEpO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnNCb3ggPSB1aS5kaXYodGhpcy5jb2x1bW5IZWFkZXJzRGl2KTtcbiAgICBjb25zdCBmb3JtV2l0aEhlYWRlckRpdiA9IHVpLnNwbGl0SChbY29sdW1uSGVhZGVyc0JveCwgdGhpcy52aXJ0dWFsVmlldy5yb290XSwgbnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKGZvcm1XaXRoSGVhZGVyRGl2KTtcblxuICAgIHRoaXMuc3BsaXRDb2xMZWZ0ID0gZm9ybVdpdGhIZWFkZXJEaXYuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5zcGxpdENvbFJpZ2h0ID0gZm9ybVdpdGhIZWFkZXJEaXYubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLmN1cnJlbnRSb3dJbmRpY2F0b3IsICdDdXJyZW50IHJvdycpO1xuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLm1vdXNlT3ZlclJvd0luZGljYXRvciwgJ01vdXNlIG92ZXIgcm93Jyk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29sdW1uSGVhZGVyc0Rpdi5zdHlsZSwge1xuICAgICAgICAvLyBvdmVmbG93OidoaWRkZW4gIWltcG9ydGFudCcsXG4gICAgICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgICAgICBmbGV4U2hyaW5rOiAnMCdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNwbGl0Q29sTGVmdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgY29sdW1uSGVhZGVyc0JveC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnc2Nyb2xsJywgJ2ltcG9ydGFudCcpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5IZWFkZXJzQm94LnN0eWxlLCB7XG4gICAgICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAnMTdweCd9KTtcblxuICAgICAgY29sdW1uSGVhZGVyc0JveC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy52aXJ0dWFsVmlldy5yb290LnNjcm9sbFRvcCA9IGNvbHVtbkhlYWRlcnNCb3guc2Nyb2xsVG9wO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudmlydHVhbFZpZXcucm9vdC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29sdW1uSGVhZGVyc0JveC5zY3JvbGxUb3AgPSB0aGlzLnZpcnR1YWxWaWV3LnJvb3Quc2Nyb2xsVG9wO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMudmlydHVhbFZpZXcucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5maXRIZWFkZXJUb0xhYmVsV2lkdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEhlYWRlclRvTGFiZWxXaWR0aCh3aWR0aD86IG51bWJlcikge1xuICAgIGNvbnN0IHcgPSB3aWR0aCA/PyB0aGlzLmNvbHVtbkxhYmVsV2lkdGg7XG4gICAgY29uc3Qgcm9vdFdpZHRoID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIHRoaXMuc3BsaXRDb2xMZWZ0LnN0eWxlLndpZHRoID0gYCR7dyArIDMwfXB4YDtcbiAgICB0aGlzLnNwbGl0Q29sUmlnaHQuc3R5bGUud2lkdGggPSBgJHtyb290V2lkdGggLSB3IC0gMzAgLSA0fXB4YDtcbiAgfVxuXG4gIGdldENvbHVtbldpZHRoKGVsOkhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGVsLnN0eWxlLndpZHRoKTtcbiAgfVxuXG4gIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9PT0gbnVsbClcbiAgICAgIHRoaXMuc2V0RmllbGRzQ29sdW1uTmFtZXModGhpcy5kYXRhRnJhbWUuY29sdW1ucy5uYW1lcygpKTtcbiAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2ZpdCcpICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlclNpemUgPT09ICdzbWFsbCcpXG4gICAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9ICdub3JtYWwnO1xuXG4gICAgY29uc3Qgc3ViID0gKHN0cmVhbTogT2JzZXJ2YWJsZTx1bmtub3duPiwgYWN0aW9uOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5zdWJzLnB1c2goREcuZGVib3VuY2Uoc3RyZWFtLCA1MCkuc3Vic2NyaWJlKChfKSA9PiBhY3Rpb24oKSkpO1xuICAgIH07XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgIHN1Yih0aGlzLmRhdGFGcmFtZS5vbk1ldGFkYXRhQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICAgIGlmIChncmlkKVxuICAgICAgICBzdWIoZ3JpZC5vblJvd3NTb3J0ZWQsICgpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uQ29sdW1uc1JlbW92ZWQsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25DdXJyZW50Um93Q2hhbmdlZC5waXBlKGZpbHRlcigoXykgPT4gdGhpcy5zaG93Q3VycmVudFJvdykpLFxuICAgICAgKCkgPT4gdGhpcy52aXJ0dWFsVmlldy5yZWZyZXNoSXRlbSh0aGlzLmN1cnJlbnRSb3dQb3MhKSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25Nb3VzZU92ZXJSb3dDaGFuZ2VkLnBpcGUoZmlsdGVyKChfKSA9PiB0aGlzLnNob3dNb3VzZU92ZXJSb3cpKSxcbiAgICAgICgpID0+IHRoaXMudmlydHVhbFZpZXcucmVmcmVzaEl0ZW0odGhpcy5tb3VzZU92ZXJQb3MhKSk7XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0RmllbGRzQ29sdW1uTmFtZXMoZGZDb2x1bW5zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSBkZkNvbHVtbnMubGVuZ3RoID4gMjAgPyBkZkNvbHVtbnMuc2xpY2UoMCwgMjApIDogZGZDb2x1bW5zO1xuICB9XG5cbiAgdXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKSB7XG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMubmFtZXMoKTtcbiAgICBsZXQgY291bnRlciA9IHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRlcjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xJZHggPSBuZXdDb2x1bW5zLmluZGV4T2YodGhpcy5maWVsZHNDb2x1bW5OYW1lc1tpXSk7XG4gICAgICBpZiAoY29sSWR4ID09PSAtMSkge1xuICAgICAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKChwcm9wZXJ0eS5uYW1lID09PSAnc2hvd0N1cnJlbnRSb3cnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdzaG93TW91c2VPdmVyUm93JyB8fFxuICAgICAgcHJvcGVydHkubmFtZSA9PT0gJ3Nob3dTZWxlY3RlZFJvd3MnICYmIHByb3BlcnR5LmdldCh0aGlzKSA9PT0gdHJ1ZSkgJiYgdGhpcy5zaG93Rml4ZWRSb3dzKVxuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBDYW5ub3Qgc2V0ICR7cHJvcGVydHkubmFtZX0gdG8gdHJ1ZSBzaW5jZSBmaXhlZCByb3dzIGFyZSBzZXRgKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVySGVhZGVyKCkge1xuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMucmVuZGVyRm9ybSgwLCB0cnVlKTtcbiAgICBmb3JtLmNsYXNzTGlzdC5hZGQoJ3RlbXAnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2NvbHVtbj1cIicgKyBuYW1lICsgJ1wiXScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsID0gdWkuYmluZCh0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSksIHVpLmRpdlRleHQobmFtZSkpO1xuICAgICAgICBjb25zdCBjbG9zZUljb24gPSB1aS5pY29uRkEoJ3RpbWVzJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBuYW1lKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sdW1uTGFiZWxDb250YWluZXIgPSB1aS5kaXYoW2NvbHVtbkxhYmVsLCBjbG9zZUljb25dLCAnZDQtbXVsdGktZm9ybS1jb2x1bW4tbmFtZSBkNC1mbGV4LXJvdycpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmdldFNvcnRCeUNvbHVtbnMoKS5pbmRleE9mKG5hbWUpO1xuICAgICAgICBpZiAoaWR4ID4gLTEpXG4gICAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuYXBwZW5kKHVpLmRpdlRleHQodGhpcy5nZXRTb3J0QnlUeXBlcygpW2lkeF0gPyAn4oaRJyA6ICfihpMnLCAnZDQtbXVsdGktZm9ybS1jb2x1bW4tc29ydC1pbmRpY2F0b3InKSk7XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0VG9wID0gZm9ybUZpZWxkLnR5cGUgPT09ICdjaGVja2JveCcgP1xuICAgICAgICAgIGZvcm1GaWVsZC5vZmZzZXRUb3AgLSBCT09MRUFOX0lOUFVUX1RPUF9NQVJHSU4gOiBmb3JtRmllbGQub2Zmc2V0VG9wO1xuICAgICAgICBjb2x1bW5MYWJlbENvbnRhaW5lci5zdHlsZS50b3AgPSBgJHtvZmZzZXRUb3AgKyAxMH1weGA7XG4gICAgICAgIHRoaXMuY29sdW1uSGVhZGVyc0Rpdi5hcHBlbmRDaGlsZChjb2x1bW5MYWJlbENvbnRhaW5lcik7XG5cbiAgICAgICAgY29sdW1uTGFiZWwub25jbGljayA9IChfOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhRnJhbWUuY3VycmVudENvbCA9IHRoaXMuZGF0YUZyYW1lLmNvbChuYW1lKSE7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29sdW1uTGFiZWwub25kYmxjbGljayA9IChfOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNvcnRCeUNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IG5hbWU7XG4gICAgICAgICAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0QXNjZW5kaW5nKVxuICAgICAgICAgICAgdGhpcy5zb3J0QnlDb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc29ydEFzY2VuZGluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY29sdW1uTGFiZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPiB0aGlzLmNvbHVtbkxhYmVsV2lkdGgpXG4gICAgICAgICAgdGhpcy5jb2x1bW5MYWJlbFdpZHRoID0gY29sdW1uTGFiZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLm9ubW91c2VlbnRlciA9IChlOiBNb3VzZUV2ZW50KSA9PiBjbG9zZUljb24uc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIub25tb3VzZWxlYXZlID0gKGU6IE1vdXNlRXZlbnQpID0+IGNsb3NlSWNvbi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybS5yZW1vdmUoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Um93UG9zKCkgeyByZXR1cm4gdGhpcy5zaG93Q3VycmVudFJvdyA/IDAgOiBudWxsOyB9XG4gIGdldCBtb3VzZU92ZXJQb3MoKSB7IHJldHVybiB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPyAodGhpcy5zaG93Q3VycmVudFJvdyA/IDEgOiAwKSA6IG51bGw7IH1cblxuICBnZXRHcmlkKCkge1xuICAgIGlmICh0aGlzLnZpZXcgJiYgKHRoaXMudmlldyBhcyBERy5UYWJsZVZpZXcpLmdyaWQpXG4gICAgICByZXR1cm4gKHRoaXMudmlldyBhcyBERy5UYWJsZVZpZXcpLmdyaWQ7XG4gICAgaWYgKHRoaXMuZGF0YUZyYW1lICYmIGdyb2suc2hlbGwudHYgJiYgZ3Jvay5zaGVsbC50di5kYXRhRnJhbWUgPT09IHRoaXMuZGF0YUZyYW1lICYmIGdyb2suc2hlbGwudHYuZ3JpZClcbiAgICAgIHJldHVybiBncm9rLnNoZWxsLnR2LmdyaWQ7XG4gICAgY29uc3QgdHYgPSBBcnJheS5mcm9tKGdyb2suc2hlbGwudGFibGVWaWV3cykuZmluZCgodHYpID0+IHR2LmRhdGFGcmFtZSA9PT0gdGhpcy5kYXRhRnJhbWUpO1xuICAgIGlmICh0diAmJiB0di5ncmlkKVxuICAgICAgcmV0dXJuIHR2LmdyaWQ7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXJGb3JtKHJvdzogbnVtYmVyLCBoZWFkZXI/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZ2V0R3JpZCgpO1xuICAgIGNvbnN0IHNhdmVkSWR4ID0gcm93O1xuXG4gICAgaWYgKGhlYWRlcilcbiAgICAgIHJvdyA9IDA7XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5zaG93Q3VycmVudFJvdyAmJiByb3cgPT09IHRoaXMuY3VycmVudFJvd1BvcylcbiAgICAgICAgcm93ID0gdGhpcy5kYXRhRnJhbWUuY3VycmVudFJvd0lkeDtcbiAgICAgIGVsc2UgaWYgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyAmJiByb3cgPT09IHRoaXMubW91c2VPdmVyUG9zKVxuICAgICAgICByb3cgPSB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHg7XG4gICAgICBlbHNlXG4gICAgICAgIHJvdyA9IHRoaXMuaW5kZXhlc1tyb3cgLSAodGhpcy5zaG93Q3VycmVudFJvdyA/IDEgOiAwKSAtICh0aGlzLnNob3dNb3VzZU92ZXJSb3cgPyAxIDogMCldO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm0gPSB1aS5kaXZWKFxuICAgICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgbGV0IHJlc0RpdjogSFRNTEVsZW1lbnQgPSB1aS5kaXYoKTtcbiAgICAgICAgaWYgKHJvdyA9PT0gLTEpXG4gICAgICAgICAgcmV0dXJuIHJlc0RpdjtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGZvciBtb2xlY3VsZXMsIHVzZSB0aGUgZ3JpZENvbCByZW5kZXJlciBpbnN0ZWFkIG9mIGlucHV0QmFzZVxuICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZGF0YUZyYW1lLmNvbChuYW1lKSE7XG4gICAgICAgICAgaWYgKGNvbC5zZW1UeXBlICYmIGNvbC5tZXRhLmNlbGxSZW5kZXJlciAmJiBncmlkPy5jb2wobmFtZSk/LnJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IGdyaWQhLmNvbChuYW1lKSEucmVuZGVyZXIhO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXJTaXplID0gdGhpcy5nZXRSZW5kZXJlclNpemUocmVuZGVyZXIpO1xuICAgICAgICAgICAgY29uc3QgZ3JpZENlbGwgPSBERy5HcmlkQ2VsbC5mcm9tQ29sdW1uUm93KGdyaWQhLCBuYW1lLCBncmlkIS50YWJsZVJvd1RvR3JpZChyb3cpKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHVpLmNhbnZhcyhyZW5kZXJlclNpemUueCwgcmVuZGVyZXJTaXplLnkpO1xuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gcmVuZGVyZXJTaXplLnggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSByZW5kZXJlclNpemUueSAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuICAgICAgICAgICAgLy8gY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICBjdHguc2NhbGUod2luZG93LmRldmljZVBpeGVsUmF0aW8sIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FudmFzLnNldEF0dHJpYnV0ZSgnY29sdW1uJywgbmFtZSk7XG5cbiAgICAgICAgICAgIGdyaWRDZWxsLnJlbmRlcih7Y29udGV4dDogY3R4LCBib3VuZHM6IG5ldyBERy5SZWN0KDAsIDAsIHJlbmRlcmVyU2l6ZS54LCByZW5kZXJlclNpemUueSl9KTtcbiAgICAgICAgICAgIHJlc0RpdiA9IGNhbnZhcztcbiAgICAgICAgICAgIHJlc0Rpdi5zdHlsZS5iYWNrZ3JvdW5kID0gJ3doaXRlJzsgLy8gZml4ZXMgYmVmb3JlIGNoYW5nZXMgb2YgdmllcnR1YWwgdmlldyBub3QgcmVtb3Zpbmcgb2xkIGl0ZW1zXG4gICAgICAgICAgICByZXNEaXYub25jbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRDZWxsID0gdGhpcy5kYXRhRnJhbWUuY2VsbChyb3csIG5hbWUpO1xuICAgICAgICAgICAgICB0aGlzLmlucHV0Q2xpY2tlZC5uZXh0KG5hbWUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChyZXNEaXYsIG5hbWUpO1xuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gREcuSW5wdXRCYXNlLmZvckNvbHVtbihjb2wpO1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSkhLnNlbVR5cGUgPT09IERHLlNFTVRZUEUuTU9MRUNVTEUpXG4gICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZChgZDQtbXVsdGktZm9ybS1tb2xlY3VsZS1pbnB1dC0ke3RoaXMucmVuZGVyZXJTaXplfWApO1xuICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zZXRBdHRyaWJ1dGUoJ2NvbHVtbicsIG5hbWUpO1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMuZGF0YUZyYW1lLmNvbChuYW1lKT8uaXNOb25lKHJvdykgPyBudWxsIDogdGhpcy5kYXRhRnJhbWUuZ2V0KG5hbWUsIHJvdyk7XG4gICAgICAgICAgICAgIGlucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBpZiAodGhpcy5jb2xvckNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZ2MgPSBncmlkLmNvbChuYW1lKTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSk/Lm1ldGEuY29sb3JzLmdldENvbG9yKHJvdyk7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sb3IgJiYgY29sb3IgIT0gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2M/LmlzVGV4dENvbG9yQ29kZWQpXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuY29sb3IgPSBgJHtERy5Db2xvci50b0h0bWwoY29sb3IpfSFpbXBvcnRhbnQ7YDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuY29sb3IgPSBgJHtERy5Db2xvci50b0h0bWwoREcuQ29sb3IuZ2V0Q29udHJhc3RDb2xvcihjb2xvcikpfSFpbXBvcnRhbnQ7YDtcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBERy5Db2xvci50b0h0bWwoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdjPy5jb250ZW50Q2VsbFN0eWxlPy50ZXh0Q29sb3IpXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuY29sb3IgPSBERy5Db2xvci50b0h0bWwoZ2MhLmNvbnRlbnRDZWxsU3R5bGUhLnRleHRDb2xvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdjPy5jb250ZW50Q2VsbFN0eWxlPy5iYWNrQ29sb3IpXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gREcuQ29sb3IudG9IdG1sKGdjIS5jb250ZW50Q2VsbFN0eWxlIS5iYWNrQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoZ2M/LmNvbnRlbnRDZWxsU3R5bGU/LmhvcnpBbGlnbiA9PSBcImNlbnRlclwiIHx8IGdjPy5jb250ZW50Q2VsbFN0eWxlPy5ob3J6QWxpZ24gPT0gXCJyaWdodFwiKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS50ZXh0QWxpZ24gPSBnYyEuY29udGVudENlbGxTdHlsZS5ob3J6QWxpZ24hO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZ2MhLmNvbnRlbnRDZWxsU3R5bGU/LmZvbnQpXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmZvbnQgPSBnYyEuY29udGVudENlbGxTdHlsZS5mb250O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5vbmNsaWNrID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Q2VsbCA9IHRoaXMuZGF0YUZyYW1lLmNlbGwocm93LCBuYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2xpY2tlZC5uZXh0KG5hbWUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoaW5wdXQuaW5wdXQsIG5hbWUpO1xuXG4gICAgICAgICAgICAgIHJlc0RpdiA9IGlucHV0LmlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNEaXY7XG4gICAgICB9XG4gICAgICApLCAnZDQtbXVsdGktZm9ybS1mb3JtJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TW91c2VPdmVyUm93ICYmIHNhdmVkSWR4ID09IHRoaXMubW91c2VPdmVyUG9zKVxuICAgICAgZm9ybS5hcHBlbmQodGhpcy5tb3VzZU92ZXJSb3dJbmRpY2F0b3IpO1xuICAgIGlmICh0aGlzLnNob3dDdXJyZW50Um93ICYmIHNhdmVkSWR4ID09PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICBmb3JtLmFwcGVuZCh0aGlzLmN1cnJlbnRSb3dJbmRpY2F0b3IpO1xuXG4gICAgZm9ybS5vbmNsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSByb3c7IGkrKylcbiAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KGksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0KHJvdyk7XG4gICAgICAgICAgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnNldChyb3csICFjdXJyZW50U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMuZGF0YUZyYW1lLnJvd0NvdW50OyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KGksIGkgPD0gcm93KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd0N1cnJlbnRSb3cgfHwgc2F2ZWRJZHggIT09IHRoaXMuY3VycmVudFJvd1BvcylcbiAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRSb3dJZHggPSByb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICghdGhpcy5zaG93TW91c2VPdmVyUm93IHx8IHNhdmVkSWR4ICE9PSB0aGlzLm1vdXNlT3ZlclBvcykge1xuICAgICAgZm9ybS5vbm1vdXNlZW50ZXIgPSAoKSA9PiB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHggPSByb3c7XG4gICAgICBmb3JtLm9ubW91c2VsZWF2ZSA9ICgpID0+IHRoaXMuZGF0YUZyYW1lLm1vdXNlT3ZlclJvd0lkeCA9IC0xO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIGdldFNvcnRCeUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICBpZiAodGhpcy5zb3J0QnlDb2x1bW5OYW1lICYmIHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMuY29udGFpbnModGhpcy5zb3J0QnlDb2x1bW5OYW1lKSlcbiAgICAgIHJldHVybiBbdGhpcy5zb3J0QnlDb2x1bW5OYW1lXTtcbiAgICBlbHNlIGlmIChncmlkICYmIGdyaWQ/LnNvcnRCeUNvbHVtbnM/Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gZ3JpZC5zb3J0QnlDb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXRTb3J0QnlUeXBlcygpOiBib29sZWFuW10ge1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICBpZiAodGhpcy5zb3J0QnlDb2x1bW5OYW1lICYmIHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMuY29udGFpbnModGhpcy5zb3J0QnlDb2x1bW5OYW1lKSlcbiAgICAgIHJldHVybiBbdGhpcy5zb3J0QXNjZW5kaW5nXTtcbiAgICBlbHNlIGlmIChncmlkICYmIGdyaWQ/LnNvcnRCeUNvbHVtbnM/Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gZ3JpZC5zb3J0VHlwZXM7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcblxuICAgIGlmICghdGhpcy5zaG93Rml4ZWRSb3dzKSB7XG4gICAgICB0aGlzLmluZGV4ZXMgPSBbXTtcbiAgICAgIGlmICh0aGlzLnNob3dTZWxlY3RlZFJvd3MgJiYgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQW5kRmlsdGVyID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmNsb25lKCkuYW5kKHRoaXMuZGF0YUZyYW1lLmZpbHRlcik7XG4gICAgICAgIGlmICh0aGlzLnNvcnRCeUNvbHVtbk5hbWUgJiYgdGhpcy5kYXRhRnJhbWUuY29sdW1ucy5jb250YWlucyh0aGlzLnNvcnRCeUNvbHVtbk5hbWUpKVxuICAgICAgICAgIHRoaXMuaW5kZXhlcyA9IHRoaXMuZGF0YUZyYW1lLmdldFNvcnRlZE9yZGVyKFt0aGlzLnNvcnRCeUNvbHVtbk5hbWVdLCBbdGhpcy5zb3J0QXNjZW5kaW5nXSwgc2VsZWN0aW9uQW5kRmlsdGVyKTtcbiAgICAgICAgZWxzZSBpZiAoZ3JpZCAmJiBncmlkPy5zb3J0QnlDb2x1bW5zPy5sZW5ndGggPiAwKVxuICAgICAgICAgIHRoaXMuaW5kZXhlcyA9IHRoaXMuZGF0YUZyYW1lLmdldFNvcnRlZE9yZGVyKGdyaWQuc29ydEJ5Q29sdW1ucywgZ3JpZC5zb3J0VHlwZXMsIHNlbGVjdGlvbkFuZEZpbHRlcik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmluZGV4ZXMgPSBzZWxlY3Rpb25BbmRGaWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdWkuZW1wdHkodGhpcy5jb2x1bW5IZWFkZXJzRGl2KTtcblxuICAgIHRoaXMucmVuZGVySGVhZGVyKCk7XG5cbiAgICB0aGlzLnZpcnR1YWxWaWV3LnNldERhdGEoXG4gICAgICB0aGlzLmluZGV4ZXMubGVuZ3RoICsgKHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAxIDogMCkgKyAodGhpcy5zaG93TW91c2VPdmVyUm93ID8gMSA6IDApLFxuICAgICAgKGk6IG51bWJlcikgPT4gdGhpcy5yZW5kZXJGb3JtKGkpKTtcbiAgfVxufVxuIl19
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMtdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybXMtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLGFBQWE7QUFDYixPQUFPLHFCQUFxQixDQUFDO0FBRTdCLE1BQU0sMkJBQTJCLEdBQUcsK0RBQStELENBQUM7QUFDcEcsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxPQUFPLFdBQVksU0FBUSxFQUFFLENBQUMsUUFBUTtJQUMxQyxJQUFJLElBQUksS0FBYSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUF3QjVDLElBQUksU0FBUyxDQUFDLEVBQWdCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsSUFBYztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFrQjtRQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRVMsZUFBZSxDQUFDLFFBQTZCO1FBQ3JELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDbEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUVwQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTTtZQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV4QixRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDekIsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEQsS0FBSyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLEtBQUssT0FBTyxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNuRjtJQUNILENBQUM7SUFFUyxPQUFPO1FBQ2YsUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3pCLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLEtBQUssT0FBTyxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEzRFYsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFPbkIscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLHVFQUF1RSxDQUFDLENBQUM7UUFDMUcsMEJBQXFCLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsMEVBQTBFLENBQUMsQ0FBQztRQUcvRyxpQkFBWSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBZ0Q1QyxJQUFJLENBQUMsT0FBTyxHQUFHLGtEQUFrRCxDQUFDO1FBRWxFLGFBQWE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUMsV0FBVyxFQUFFLGdEQUFnRCxFQUFDLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVyxFQUFFLDJDQUEyQyxFQUFDLENBQWlDLENBQUM7UUFDNUwsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFDLENBQUMsQ0FBQztRQUU1SCxRQUFRO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbEIsT0FBTztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRixNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkQsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLGlCQUFnQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsZ0JBQStCLENBQUM7UUFFdkUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTlELEVBQUUsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0UsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO2dCQUN6QywrQkFBK0I7Z0JBQy9CLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixVQUFVLEVBQUUsR0FBRzthQUNoQixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN2RSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDdEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3BDLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixLQUFLLEVBQUUsTUFBTTtnQkFDYixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsWUFBWSxFQUFFLE1BQU07YUFBQyxDQUFDLENBQUM7WUFFekIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDL0QsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFRLEVBQUUsRUFBRTtnQkFDNUQsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWM7UUFDbEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBYztRQUMzQixPQUFPLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSTtZQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxPQUFPO1lBQ2xGLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBRS9CLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBMkIsRUFBRSxNQUFnQixFQUFFLEVBQUU7WUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDO1FBRUYsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM3RCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFELEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJO2dCQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtvQkFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFBO1FBRUYsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUM3RSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUMsQ0FBQztRQUUzRCxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUNqRixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQW1CO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQyxFQUFFLENBQUM7YUFDTDtTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQXFCO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1lBQzdFLFFBQVEsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYTtZQUMxRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLFFBQVEsQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1YsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN6QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFxQixDQUFDO1lBQ3BGLElBQUksU0FBUyxFQUFFO2dCQUNiLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ2xGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNiLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUN2RyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQzVDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztvQkFDVixvQkFBb0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztnQkFFekgsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztvQkFDL0MsU0FBUyxDQUFDLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDdkUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUV4RCxXQUFXLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBYSxFQUFFLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2dCQUN4RCxDQUFDLENBQUM7Z0JBRUYsV0FBVyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQWEsRUFBRSxFQUFFO29CQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO3dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztxQkFDNUI7eUJBQ0ksSUFBSSxJQUFJLENBQUMsYUFBYTt3QkFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQzs7d0JBRWxDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztnQkFFRixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCO29CQUNuRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDOUYsb0JBQW9CLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDOUY7U0FDRjtRQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUzRixPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFLLElBQUksQ0FBQyxJQUFxQixDQUFDLElBQUk7WUFDL0MsT0FBUSxJQUFJLENBQUMsSUFBcUIsQ0FBQyxJQUFJLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUk7WUFDckcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDNUIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0YsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVcsRUFBRSxNQUFnQjtRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBRXJCLElBQUksTUFBTTtZQUNSLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDTDtZQUNILElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGFBQWE7Z0JBQ25ELEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztpQkFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUN6RCxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7O2dCQUVyQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Y7UUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O1lBQ2xDLElBQUksTUFBTSxHQUFnQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUNaLE9BQU8sTUFBTSxDQUFDO1lBRWhCLElBQUk7Z0JBQ0YsK0RBQStEO2dCQUMvRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztnQkFDdEMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFJLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsMENBQUUsUUFBUSxDQUFBLEVBQUU7b0JBQ3JFLE1BQU0sUUFBUSxHQUFHLElBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUMsUUFBUyxDQUFDO29CQUM1QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFLLEVBQUUsSUFBSSxFQUFFLElBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbkYsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekQsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDeEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDekQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUUsQ0FBQztvQkFDckMsbURBQW1EO29CQUNuRCxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFNUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBRXBDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUM7b0JBQzNGLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLCtEQUErRDtvQkFDbEcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQWEsRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQzVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDLENBQUM7b0JBQ0YsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUUvQjtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxLQUFLLEVBQUU7d0JBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFROzRCQUMzRCxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO3dCQUNqRixLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7d0JBQ3pDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNuQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMENBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDM0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBRXRCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTs0QkFDbEIsSUFBSSxJQUFJLEVBQUU7Z0NBQ1IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FFMUIsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsMENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQ2xFLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUU7b0NBQ2hDLElBQUksRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGdCQUFnQjt3Q0FDdEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQzt5Q0FDOUQ7d0NBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUM7d0NBQzVGLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQ0FDNUQ7aUNBQ0Y7cUNBQ0k7b0NBQ0gsSUFBSSxNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxnQkFBZ0IsMENBQUUsU0FBUzt3Q0FDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUcsQ0FBQyxnQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQ0FFN0UsSUFBSSxNQUFBLEVBQUUsYUFBRixFQUFFLHVCQUFGLEVBQUUsQ0FBRSxnQkFBZ0IsMENBQUUsU0FBUzt3Q0FDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUcsQ0FBQyxnQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQ0FDeEY7Z0NBRUQsSUFBSSxDQUFBLE1BQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGdCQUFnQiwwQ0FBRSxTQUFTLEtBQUksUUFBUSxJQUFJLENBQUEsTUFBQSxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsZ0JBQWdCLDBDQUFFLFNBQVMsS0FBSSxPQUFPO29DQUMzRixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRyxDQUFDLGdCQUFnQixDQUFDLFNBQVUsQ0FBQztnQ0FFaEUsSUFBSSxNQUFBLEVBQUcsQ0FBQyxnQkFBZ0IsMENBQUUsSUFBSTtvQ0FDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7NkJBQ3REO3lCQUNGO3dCQUNELEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBYSxFQUFFLEVBQUU7NEJBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9CLENBQUMsQ0FBQzt3QkFDRixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUVuQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztxQkFDdEI7aUJBQ0Y7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakI7WUFDRixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQ0EsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGFBQWE7WUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1lBQ25DLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMxQztpQkFDSTtnQkFDSCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQkFDdEQ7cUJBQ0ksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO29CQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO3dCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztpQkFDN0M7cUJBQ0k7b0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxhQUFhO3dCQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7aUJBQ3RDO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0I7O1FBQ2QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2FBQzVCLElBQUksSUFBSSxJQUFJLENBQUEsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsYUFBYSwwQ0FBRSxNQUFNLElBQUcsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRTdDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWM7O1FBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDakYsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN6QixJQUFJLElBQUksSUFBSSxDQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLGFBQWEsMENBQUUsTUFBTSxJQUFHLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDOztZQUV0QixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNOztRQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO2dCQUNuRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO29CQUNqRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztxQkFDN0csSUFBSSxJQUFJLElBQUksQ0FBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxhQUFhLDBDQUFFLE1BQU0sSUFBRyxDQUFDO29CQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDOztvQkFFckcsSUFBSSxDQUFDLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyRixDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCAnLi4vLi4vY3NzL2Zvcm1zLmNzcyc7XG5cbmNvbnN0IENPTFNfTElNSVRfRVhDRUVERURfV0FSTklORyA9IGBOdW1iZXIgb2YgY29sdW1ucyBpcyBtb3JlIHRoYW4gMjAuIEZpcnN0IDIwIGNvbHVtbnMgYXJlIHNob3duYDtcbmNvbnN0IEJPT0xFQU5fSU5QVVRfVE9QX01BUkdJTiA9IDE1O1xuXG5leHBvcnQgY2xhc3MgRm9ybXNWaWV3ZXIgZXh0ZW5kcyBERy5Kc1ZpZXdlciB7XG4gIGdldCB0eXBlKCk6IHN0cmluZyB7IHJldHVybiAnRm9ybXNWaWV3ZXInOyB9XG5cbiAgcmVuZGVyZXJTaXplOiAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuICBmb250OiBzdHJpbmc7XG4gIGZpZWxkc0NvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgY29sb3JDb2RlOiBib29sZWFuO1xuICBzaG93Q3VycmVudFJvdzogYm9vbGVhbjtcbiAgc2hvd01vdXNlT3ZlclJvdzogYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkUm93czogYm9vbGVhbjtcbiAgc2hvd0ZpeGVkUm93cyA9IGZhbHNlO1xuICB1c2VHcmlkU29ydCA9IHRydWU7XG4gIHNvcnRCeUNvbHVtbk5hbWU/OiBzdHJpbmc7XG4gIHNvcnRBc2NlbmRpbmc6IGJvb2xlYW47XG5cbiAgaW5kZXhlczogbnVtYmVyW10gfCBJbnQzMkFycmF5O1xuICBjb2x1bW5IZWFkZXJzRGl2OiBIVE1MRGl2RWxlbWVudDtcbiAgdmlydHVhbFZpZXc6IERHLlZpcnR1YWxWaWV3O1xuICBjb2x1bW5MYWJlbFdpZHRoOiBudW1iZXIgPSAwO1xuICBjdXJyZW50Um93SW5kaWNhdG9yID0gdWkuZGl2KCcnLCAnZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvciBkNC1tdWx0aS1mb3JtLWZvcm0taW5kaWNhdG9yLWN1cnJlbnQtcm93Jyk7XG4gIG1vdXNlT3ZlclJvd0luZGljYXRvciA9IHVpLmRpdignJywgJ2Q0LW11bHRpLWZvcm0tZm9ybS1pbmRpY2F0b3IgZDQtbXVsdGktZm9ybS1mb3JtLWluZGljYXRvci1tb3VzZS1vdmVyLXJvdycpO1xuICBzcGxpdENvbExlZnQ6IEhUTUxFbGVtZW50O1xuICBzcGxpdENvbFJpZ2h0OiBIVE1MRWxlbWVudDtcbiAgaW5wdXRDbGlja2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHNldCBkYXRhZnJhbWUoZGY6IERHLkRhdGFGcmFtZSkge1xuICAgIHRoaXMuZGF0YUZyYW1lID0gZGY7XG4gICAgdGhpcy5vblRhYmxlQXR0YWNoZWQoKTtcbiAgfVxuXG4gIHNldCBmaXhlZFJvd051bWJlcnMoaWR4czogbnVtYmVyW10pIHtcbiAgICB0aGlzLmluZGV4ZXMgPSBpZHhzO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dNb3VzZU92ZXJSb3cgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTZWxlY3RlZFJvd3MgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGaXhlZFJvd3MgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgY29sdW1ucyhjb2xOYW1lczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzID0gY29sTmFtZXM7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlclNpemUocmVuZGVyZXI6IERHLkdyaWRDZWxsUmVuZGVyZXIpOiBERy5Qb2ludCB7XG4gICAgbGV0IHdpZHRoID0gcmVuZGVyZXIuZGVmYXVsdFdpZHRoO1xuICAgIGxldCBoZWlnaHQgPSByZW5kZXJlci5kZWZhdWx0SGVpZ2h0O1xuXG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2l6ZSgpO1xuXG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNhc2UgJ2xhcmdlJzogcmV0dXJuIG5ldyBERy5Qb2ludChNYXRoLmZsb29yKHdpZHRoICogMS41KSwgTWF0aC5mbG9vcihoZWlnaHQgKiAxLjUpKTtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBuZXcgREcuUG9pbnQoTWF0aC5mbG9vcih3aWR0aCAqIDAuNjYpLCBNYXRoLmZsb29yKGhlaWdodCAqIDAuNjYpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2l6ZSgpOiBERy5Qb2ludCB7XG4gICAgc3dpdGNoICh0aGlzLnJlbmRlcmVyU2l6ZSkge1xuICAgICAgY2FzZSAnbm9ybWFsJzogcmV0dXJuIG5ldyBERy5Qb2ludCgyMDAsIDEwMCk7XG4gICAgICBjYXNlICdsYXJnZSc6IHJldHVybiBuZXcgREcuUG9pbnQoMzAwLCAxNTApO1xuICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgZGVmYXVsdDogcmV0dXJuIG5ldyBERy5Qb2ludCgxMjAsIDYwKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5oZWxwVXJsID0gJ2h0dHBzOi8vZGF0YWdyb2suYWkvaGVscC92aXN1YWxpemUvdmlld2Vycy9mb3Jtcyc7XG5cbiAgICAvLyBwcm9wZXJ0aWVzXG4gICAgdGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9IHRoaXMuYWRkUHJvcGVydHkoJ2ZpZWxkc0NvbHVtbk5hbWVzJywgREcuVFlQRS5DT0xVTU5fTElTVCk7XG4gICAgdGhpcy5jb2xvckNvZGUgPSB0aGlzLmJvb2woJ2NvbG9yQ29kZScsIHRydWUpO1xuICAgIHRoaXMuc2hvd0N1cnJlbnRSb3cgPSB0aGlzLmJvb2woJ3Nob3dDdXJyZW50Um93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93TW91c2VPdmVyUm93ID0gdGhpcy5ib29sKCdzaG93TW91c2VPdmVyUm93JywgdHJ1ZSk7XG4gICAgdGhpcy5zaG93U2VsZWN0ZWRSb3dzID0gdGhpcy5ib29sKCdzaG93U2VsZWN0ZWRSb3dzJywgdHJ1ZSk7XG4gICAgdGhpcy51c2VHcmlkU29ydCA9IHRoaXMuYm9vbCgndXNlR3JpZFNvcnQnLCB0cnVlLCB7ZGVzY3JpcHRpb246ICdTb3J0IHZhbHVlcyB0aGUgc2FtZSB3YXkgYXMgaW4gdGhlIHNwcmVhZHNoZWV0J30pO1xuICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHRoaXMuY29sdW1uKCdzb3J0QnknKTtcbiAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9IHRoaXMuc3RyaW5nKCdyZW5kZXJlclNpemUnLCAnc21hbGwnLCB7Y2hvaWNlczogWydzbWFsbCcsICdub3JtYWwnLCAnbGFyZ2UnXSwgZGVzY3JpcHRpb246ICdTZXRzIHRoZSBkaXNwbGF5IHNpemUgb2YgcmVuZGVyZWQgY29udGVudCd9KSBhcyAnc21hbGwnIHwgJ25vcm1hbCcgfCAnbGFyZ2UnO1xuICAgIHRoaXMuZm9udCA9IHRoaXMuc3RyaW5nKCdmb250JywgJ25vcm1hbCBub3JtYWwgMTNweCBcIlJvYm90b1wiJywge2VkaXRvcjogJ2ZvbnQnLCBkZXNjcmlwdGlvbjogJ0ZvbnQgZm9yIGxhYmVscyBhbmQgdmFsdWVzJ30pO1xuXG4gICAgLy9maWVsZHNcbiAgICB0aGlzLmluZGV4ZXMgPSBbXTtcblxuICAgIC8vIGluaXRcbiAgICB0aGlzLnJvb3QuY2xhc3NMaXN0LmFkZCgnZDQtbXVsdGktZm9ybScpO1xuICAgIHRoaXMuY29sdW1uSGVhZGVyc0RpdiA9IHVpLmRpdihbXSwgJ2Q0LW11bHRpLWZvcm0taGVhZGVyJyk7XG4gICAgdGhpcy52aXJ0dWFsVmlldyA9IHVpLnZpcnR1YWxWaWV3KDAsIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSwgZmFsc2UsIDEpO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnNCb3ggPSB1aS5kaXYodGhpcy5jb2x1bW5IZWFkZXJzRGl2KTtcbiAgICBjb25zdCBmb3JtV2l0aEhlYWRlckRpdiA9IHVpLnNwbGl0SChbY29sdW1uSGVhZGVyc0JveCwgdGhpcy52aXJ0dWFsVmlldy5yb290XSwgbnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5yb290LmFwcGVuZENoaWxkKGZvcm1XaXRoSGVhZGVyRGl2KTtcblxuICAgIHRoaXMuc3BsaXRDb2xMZWZ0ID0gZm9ybVdpdGhIZWFkZXJEaXYuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5zcGxpdENvbFJpZ2h0ID0gZm9ybVdpdGhIZWFkZXJEaXYubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcblxuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLmN1cnJlbnRSb3dJbmRpY2F0b3IsICdDdXJyZW50IHJvdycpO1xuICAgIHVpLnRvb2x0aXAuYmluZCh0aGlzLm1vdXNlT3ZlclJvd0luZGljYXRvciwgJ01vdXNlIG92ZXIgcm93Jyk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzRGl2LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29sdW1uSGVhZGVyc0Rpdi5zdHlsZSwge1xuICAgICAgICAvLyBvdmVmbG93OidoaWRkZW4gIWltcG9ydGFudCcsXG4gICAgICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgICAgICBmbGV4U2hyaW5rOiAnMCdcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNwbGl0Q29sTGVmdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgY29sdW1uSGVhZGVyc0JveC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cnLCAnc2Nyb2xsJywgJ2ltcG9ydGFudCcpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5IZWFkZXJzQm94LnN0eWxlLCB7XG4gICAgICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAnMTdweCd9KTtcblxuICAgICAgY29sdW1uSGVhZGVyc0JveC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy52aXJ0dWFsVmlldy5yb290LnNjcm9sbFRvcCA9IGNvbHVtbkhlYWRlcnNCb3guc2Nyb2xsVG9wO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudmlydHVhbFZpZXcucm9vdC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29sdW1uSGVhZGVyc0JveC5zY3JvbGxUb3AgPSB0aGlzLnZpcnR1YWxWaWV3LnJvb3Quc2Nyb2xsVG9wO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB1aS50b29scy53YWl0Rm9yRWxlbWVudEluRG9tKHRoaXMudmlydHVhbFZpZXcucm9vdCkudGhlbigoXykgPT4ge1xuICAgICAgdGhpcy5maXRIZWFkZXJUb0xhYmVsV2lkdGgoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEhlYWRlclRvTGFiZWxXaWR0aCh3aWR0aD86IG51bWJlcikge1xuICAgIGNvbnN0IHcgPSB3aWR0aCA/PyB0aGlzLmNvbHVtbkxhYmVsV2lkdGg7XG4gICAgY29uc3Qgcm9vdFdpZHRoID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIHRoaXMuc3BsaXRDb2xMZWZ0LnN0eWxlLndpZHRoID0gYCR7dyArIDMwfXB4YDtcbiAgICB0aGlzLnNwbGl0Q29sUmlnaHQuc3R5bGUud2lkdGggPSBgJHtyb290V2lkdGggLSB3IC0gMzAgLSA0fXB4YDtcbiAgfVxuXG4gIGdldENvbHVtbldpZHRoKGVsOkhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGVsLnN0eWxlLndpZHRoKTtcbiAgfVxuXG4gIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5maWVsZHNDb2x1bW5OYW1lcyA9PT0gbnVsbClcbiAgICAgIHRoaXMuc2V0RmllbGRzQ29sdW1uTmFtZXModGhpcy5kYXRhRnJhbWUuY29sdW1ucy5uYW1lcygpKTtcbiAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2ZpdCcpICE9IG51bGwgJiYgdGhpcy5yZW5kZXJlclNpemUgPT09ICdzbWFsbCcpXG4gICAgICB0aGlzLnJlbmRlcmVyU2l6ZSA9ICdub3JtYWwnO1xuXG4gICAgY29uc3Qgc3ViID0gKHN0cmVhbTogT2JzZXJ2YWJsZTx1bmtub3duPiwgYWN0aW9uOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5zdWJzLnB1c2goREcuZGVib3VuY2Uoc3RyZWFtLCA1MCkuc3Vic2NyaWJlKChfKSA9PiBhY3Rpb24oKSkpO1xuICAgIH07XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQsICgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgIHN1Yih0aGlzLmRhdGFGcmFtZS5vbk1ldGFkYXRhQ2hhbmdlZCwgKCkgPT4gdGhpcy5yZW5kZXIoKSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICAgIGlmIChncmlkKVxuICAgICAgICBzdWIoZ3JpZC5vblJvd3NTb3J0ZWQsICgpID0+IHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyKCkpO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgc3ViKHRoaXMuZGF0YUZyYW1lLm9uQ29sdW1uc1JlbW92ZWQsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25DdXJyZW50Um93Q2hhbmdlZC5waXBlKGZpbHRlcigoXykgPT4gdGhpcy5zaG93Q3VycmVudFJvdykpLFxuICAgICAgKCkgPT4gdGhpcy52aXJ0dWFsVmlldy5yZWZyZXNoSXRlbSh0aGlzLmN1cnJlbnRSb3dQb3MhKSk7XG5cbiAgICBzdWIodGhpcy5kYXRhRnJhbWUub25Nb3VzZU92ZXJSb3dDaGFuZ2VkLnBpcGUoZmlsdGVyKChfKSA9PiB0aGlzLnNob3dNb3VzZU92ZXJSb3cpKSxcbiAgICAgICgpID0+IHRoaXMudmlydHVhbFZpZXcucmVmcmVzaEl0ZW0odGhpcy5tb3VzZU92ZXJQb3MhKSk7XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0RmllbGRzQ29sdW1uTmFtZXMoZGZDb2x1bW5zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSBkZkNvbHVtbnMubGVuZ3RoID4gMjAgPyBkZkNvbHVtbnMuc2xpY2UoMCwgMjApIDogZGZDb2x1bW5zO1xuICB9XG5cbiAgdXBkYXRlRmllbGRzQ29sdW1uTmFtZXMoKSB7XG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMubmFtZXMoKTtcbiAgICBsZXQgY291bnRlciA9IHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnRlcjsgaSsrKSB7XG4gICAgICBjb25zdCBjb2xJZHggPSBuZXdDb2x1bW5zLmluZGV4T2YodGhpcy5maWVsZHNDb2x1bW5OYW1lc1tpXSk7XG4gICAgICBpZiAoY29sSWR4ID09PSAtMSkge1xuICAgICAgICB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Qcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IERHLlByb3BlcnR5KTogdm9pZCB7XG4gICAgaWYgKChwcm9wZXJ0eS5uYW1lID09PSAnc2hvd0N1cnJlbnRSb3cnIHx8IHByb3BlcnR5Lm5hbWUgPT09ICdzaG93TW91c2VPdmVyUm93JyB8fFxuICAgICAgcHJvcGVydHkubmFtZSA9PT0gJ3Nob3dTZWxlY3RlZFJvd3MnICYmIHByb3BlcnR5LmdldCh0aGlzKSA9PT0gdHJ1ZSkgJiYgdGhpcy5zaG93Rml4ZWRSb3dzKVxuICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBDYW5ub3Qgc2V0ICR7cHJvcGVydHkubmFtZX0gdG8gdHJ1ZSBzaW5jZSBmaXhlZCByb3dzIGFyZSBzZXRgKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVySGVhZGVyKCkge1xuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMucmVuZGVyRm9ybSgwLCB0cnVlKTtcbiAgICBmb3JtLmNsYXNzTGlzdC5hZGQoJ3RlbXAnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGZvcm1GaWVsZCA9IGZvcm0ucXVlcnlTZWxlY3RvcignW2NvbHVtbj1cIicgKyBuYW1lICsgJ1wiXScpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsID0gdWkuYmluZCh0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSksIHVpLmRpdlRleHQobmFtZSkpO1xuICAgICAgICBjb25zdCBjbG9zZUljb24gPSB1aS5pY29uRkEoJ3RpbWVzJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMgPSB0aGlzLmZpZWxkc0NvbHVtbk5hbWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBuYW1lKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LCAnUmVtb3ZlJyk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxhYmVsQ29udGFpbmVyID0gdWkuZGl2KFtjb2x1bW5MYWJlbCwgY2xvc2VJY29uXSwgJ2Q0LW11bHRpLWZvcm0tY29sdW1uLW5hbWUgZDQtZmxleC1yb3cnKTtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUuZm9udCA9IHRoaXMuZm9udDtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJztcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5nZXRTb3J0QnlDb2x1bW5zKCkuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgaWYgKGlkeCA+IC0xKVxuICAgICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLmFwcGVuZCh1aS5kaXZUZXh0KHRoaXMuZ2V0U29ydEJ5VHlwZXMoKVtpZHhdID8gJ+KGkScgOiAn4oaTJywgJ2Q0LW11bHRpLWZvcm0tY29sdW1uLXNvcnQtaW5kaWNhdG9yJykpO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGZvcm1GaWVsZC50eXBlID09PSAnY2hlY2tib3gnID9cbiAgICAgICAgICBmb3JtRmllbGQub2Zmc2V0VG9wIC0gQk9PTEVBTl9JTlBVVF9UT1BfTUFSR0lOIDogZm9ybUZpZWxkLm9mZnNldFRvcDtcbiAgICAgICAgY29sdW1uTGFiZWxDb250YWluZXIuc3R5bGUudG9wID0gYCR7b2Zmc2V0VG9wICsgMTB9cHhgO1xuICAgICAgICB0aGlzLmNvbHVtbkhlYWRlcnNEaXYuYXBwZW5kQ2hpbGQoY29sdW1uTGFiZWxDb250YWluZXIpO1xuXG4gICAgICAgIGNvbHVtbkxhYmVsLm9uY2xpY2sgPSAoXzogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRDb2wgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSkhO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbHVtbkxhYmVsLm9uZGJsY2xpY2sgPSAoXzogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5zb3J0QnlDb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRCeUNvbHVtbk5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgdGhpcy5zb3J0QXNjZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEFzY2VuZGluZylcbiAgICAgICAgICAgIHRoaXMuc29ydEJ5Q29sdW1uTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNvcnRBc2NlbmRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNvbHVtbkxhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID4gdGhpcy5jb2x1bW5MYWJlbFdpZHRoKVxuICAgICAgICAgIHRoaXMuY29sdW1uTGFiZWxXaWR0aCA9IGNvbHVtbkxhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICBjb2x1bW5MYWJlbENvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSAoZTogTW91c2VFdmVudCkgPT4gY2xvc2VJY29uLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIGNvbHVtbkxhYmVsQ29udGFpbmVyLm9ubW91c2VsZWF2ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiBjbG9zZUljb24uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvcm0ucmVtb3ZlKCk7XG4gIH1cblxuICBnZXQgY3VycmVudFJvd1BvcygpIHsgcmV0dXJuIHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAwIDogbnVsbDsgfVxuICBnZXQgbW91c2VPdmVyUG9zKCkgeyByZXR1cm4gdGhpcy5zaG93TW91c2VPdmVyUm93ID8gKHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAxIDogMCkgOiBudWxsOyB9XG5cbiAgZ2V0R3JpZCgpIHtcbiAgICBpZiAodGhpcy52aWV3ICYmICh0aGlzLnZpZXcgYXMgREcuVGFibGVWaWV3KS5ncmlkKVxuICAgICAgcmV0dXJuICh0aGlzLnZpZXcgYXMgREcuVGFibGVWaWV3KS5ncmlkO1xuICAgIGlmICh0aGlzLmRhdGFGcmFtZSAmJiBncm9rLnNoZWxsLnR2ICYmIGdyb2suc2hlbGwudHYuZGF0YUZyYW1lID09PSB0aGlzLmRhdGFGcmFtZSAmJiBncm9rLnNoZWxsLnR2LmdyaWQpXG4gICAgICByZXR1cm4gZ3Jvay5zaGVsbC50di5ncmlkO1xuICAgIGNvbnN0IHR2ID0gQXJyYXkuZnJvbShncm9rLnNoZWxsLnRhYmxlVmlld3MpLmZpbmQoKHR2KSA9PiB0di5kYXRhRnJhbWUgPT09IHRoaXMuZGF0YUZyYW1lKTtcbiAgICBpZiAodHYgJiYgdHYuZ3JpZClcbiAgICAgIHJldHVybiB0di5ncmlkO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyRm9ybShyb3c6IG51bWJlciwgaGVhZGVyPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdldEdyaWQoKTtcbiAgICBjb25zdCBzYXZlZElkeCA9IHJvdztcblxuICAgIGlmIChoZWFkZXIpXG4gICAgICByb3cgPSAwO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2hvd0N1cnJlbnRSb3cgJiYgcm93ID09PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICAgIHJvdyA9IHRoaXMuZGF0YUZyYW1lLmN1cnJlbnRSb3dJZHg7XG4gICAgICBlbHNlIGlmICh0aGlzLnNob3dNb3VzZU92ZXJSb3cgJiYgcm93ID09PSB0aGlzLm1vdXNlT3ZlclBvcylcbiAgICAgICAgcm93ID0gdGhpcy5kYXRhRnJhbWUubW91c2VPdmVyUm93SWR4O1xuICAgICAgZWxzZVxuICAgICAgICByb3cgPSB0aGlzLmluZGV4ZXNbcm93IC0gKHRoaXMuc2hvd0N1cnJlbnRSb3cgPyAxIDogMCkgLSAodGhpcy5zaG93TW91c2VPdmVyUm93ID8gMSA6IDApXTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtID0gdWkuZGl2VihcbiAgICAgIHRoaXMuZmllbGRzQ29sdW1uTmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgICAgIGxldCByZXNEaXY6IEhUTUxFbGVtZW50ID0gdWkuZGl2KCk7XG4gICAgICAgIGlmIChyb3cgPT09IC0xKVxuICAgICAgICAgIHJldHVybiByZXNEaXY7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBmb3IgbW9sZWN1bGVzLCB1c2UgdGhlIGdyaWRDb2wgcmVuZGVyZXIgaW5zdGVhZCBvZiBpbnB1dEJhc2VcbiAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSkhO1xuICAgICAgICAgIGlmIChjb2wuc2VtVHlwZSAmJiBjb2wubWV0YS5jZWxsUmVuZGVyZXIgJiYgZ3JpZD8uY29sKG5hbWUpPy5yZW5kZXJlcikge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBncmlkIS5jb2wobmFtZSkhLnJlbmRlcmVyITtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyU2l6ZSA9IHRoaXMuZ2V0UmVuZGVyZXJTaXplKHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRDZWxsID0gREcuR3JpZENlbGwuZnJvbUNvbHVtblJvdyhncmlkISwgbmFtZSwgZ3JpZCEudGFibGVSb3dUb0dyaWQocm93KSk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSB1aS5jYW52YXMocmVuZGVyZXJTaXplLngsIHJlbmRlcmVyU2l6ZS55KTtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHJlbmRlcmVyU2l6ZS54ICogd2luZG93LmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gcmVuZGVyZXJTaXplLnkgKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcbiAgICAgICAgICAgIC8vIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgY3R4LnNjYWxlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2NvbHVtbicsIG5hbWUpO1xuXG4gICAgICAgICAgICBncmlkQ2VsbC5yZW5kZXIoe2NvbnRleHQ6IGN0eCwgYm91bmRzOiBuZXcgREcuUmVjdCgwLCAwLCByZW5kZXJlclNpemUueCwgcmVuZGVyZXJTaXplLnkpfSk7XG4gICAgICAgICAgICByZXNEaXYgPSBjYW52YXM7XG4gICAgICAgICAgICByZXNEaXYuc3R5bGUuYmFja2dyb3VuZCA9ICd3aGl0ZSc7IC8vIGZpeGVzIGJlZm9yZSBjaGFuZ2VzIG9mIHZpZXJ0dWFsIHZpZXcgbm90IHJlbW92aW5nIG9sZCBpdGVtc1xuICAgICAgICAgICAgcmVzRGl2Lm9uY2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Q2VsbCA9IHRoaXMuZGF0YUZyYW1lLmNlbGwocm93LCBuYW1lKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dENsaWNrZWQubmV4dChuYW1lKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB1aS50b29sdGlwLmJpbmQocmVzRGl2LCBuYW1lKTtcblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IERHLklucHV0QmFzZS5mb3JDb2x1bW4oY29sKTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpIS5zZW1UeXBlID09PSBERy5TRU1UWVBFLk1PTEVDVUxFKVxuICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LmNsYXNzTGlzdC5hZGQoYGQ0LW11bHRpLWZvcm0tbW9sZWN1bGUtaW5wdXQtJHt0aGlzLnJlbmRlcmVyU2l6ZX1gKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc2V0QXR0cmlidXRlKCdjb2x1bW4nLCBuYW1lKTtcbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuZm9udCA9IHRoaXMuZm9udDtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmRhdGFGcmFtZS5jb2wobmFtZSk/LmlzTm9uZShyb3cpID8gbnVsbCA6IHRoaXMuZGF0YUZyYW1lLmdldChuYW1lLCByb3cpO1xuICAgICAgICAgICAgICBpbnB1dC5yZWFkT25seSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29sb3JDb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGdjID0gZ3JpZC5jb2wobmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5kYXRhRnJhbWUuY29sKG5hbWUpPy5tZXRhLmNvbG9ycy5nZXRDb2xvcihyb3cpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yICYmIGNvbG9yICE9IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdjPy5pc1RleHRDb2xvckNvZGVkKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gYCR7REcuQ29sb3IudG9IdG1sKGNvbG9yKX0haW1wb3J0YW50O2A7XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gYCR7REcuQ29sb3IudG9IdG1sKERHLkNvbG9yLmdldENvbnRyYXN0Q29sb3IoY29sb3IpKX0haW1wb3J0YW50O2A7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gREcuQ29sb3IudG9IdG1sKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnYz8uY29udGVudENlbGxTdHlsZT8udGV4dENvbG9yKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmNvbG9yID0gREcuQ29sb3IudG9IdG1sKGdjIS5jb250ZW50Q2VsbFN0eWxlIS50ZXh0Q29sb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChnYz8uY29udGVudENlbGxTdHlsZT8uYmFja0NvbG9yKVxuICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmlucHV0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IERHLkNvbG9yLnRvSHRtbChnYyEuY29udGVudENlbGxTdHlsZSEuYmFja0NvbG9yKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYgKGdjPy5jb250ZW50Q2VsbFN0eWxlPy5ob3J6QWxpZ24gPT0gXCJjZW50ZXJcIiB8fCBnYz8uY29udGVudENlbGxTdHlsZT8uaG9yekFsaWduID09IFwicmlnaHRcIilcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuaW5wdXQuc3R5bGUudGV4dEFsaWduID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuaG9yekFsaWduITtcblxuICAgICAgICAgICAgICAgICAgaWYgKGdjIS5jb250ZW50Q2VsbFN0eWxlPy5mb250KVxuICAgICAgICAgICAgICAgICAgICBpbnB1dC5pbnB1dC5zdHlsZS5mb250ID0gZ2MhLmNvbnRlbnRDZWxsU3R5bGUuZm9udDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaW5wdXQuaW5wdXQub25jbGljayA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuY3VycmVudENlbGwgPSB0aGlzLmRhdGFGcmFtZS5jZWxsKHJvdywgbmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENsaWNrZWQubmV4dChuYW1lKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0LCBuYW1lKTtcblxuICAgICAgICAgICAgICByZXNEaXYgPSBpbnB1dC5pbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzRGl2O1xuICAgICAgfVxuICAgICAgKSwgJ2Q0LW11bHRpLWZvcm0tZm9ybScpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyAmJiBzYXZlZElkeCA9PSB0aGlzLm1vdXNlT3ZlclBvcylcbiAgICAgIGZvcm0uYXBwZW5kKHRoaXMubW91c2VPdmVyUm93SW5kaWNhdG9yKTtcbiAgICBpZiAodGhpcy5zaG93Q3VycmVudFJvdyAmJiBzYXZlZElkeCA9PT0gdGhpcy5jdXJyZW50Um93UG9zKVxuICAgICAgZm9ybS5hcHBlbmQodGhpcy5jdXJyZW50Um93SW5kaWNhdG9yKTtcblxuICAgIGZvcm0ub25jbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcm93OyBpKyspXG4gICAgICAgICAgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnNldChpLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldChyb3cpO1xuICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5zZXQocm93LCAhY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLmRhdGFGcmFtZS5yb3dDb3VudDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnNldChpLCBpIDw9IHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dDdXJyZW50Um93IHx8IHNhdmVkSWR4ICE9PSB0aGlzLmN1cnJlbnRSb3dQb3MpXG4gICAgICAgICAgICB0aGlzLmRhdGFGcmFtZS5jdXJyZW50Um93SWR4ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoIXRoaXMuc2hvd01vdXNlT3ZlclJvdyB8fCBzYXZlZElkeCAhPT0gdGhpcy5tb3VzZU92ZXJQb3MpIHtcbiAgICAgIGZvcm0ub25tb3VzZWVudGVyID0gKCkgPT4gdGhpcy5kYXRhRnJhbWUubW91c2VPdmVyUm93SWR4ID0gcm93O1xuICAgICAgZm9ybS5vbm1vdXNlbGVhdmUgPSAoKSA9PiB0aGlzLmRhdGFGcmFtZS5tb3VzZU92ZXJSb3dJZHggPSAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICBnZXRTb3J0QnlDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG4gICAgaWYgKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSAmJiB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmNvbnRhaW5zKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSkpXG4gICAgICByZXR1cm4gW3RoaXMuc29ydEJ5Q29sdW1uTmFtZV07XG4gICAgZWxzZSBpZiAoZ3JpZCAmJiBncmlkPy5zb3J0QnlDb2x1bW5zPy5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIGdyaWQuc29ydEJ5Q29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0U29ydEJ5VHlwZXMoKTogYm9vbGVhbltdIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG4gICAgaWYgKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSAmJiB0aGlzLmRhdGFGcmFtZS5jb2x1bW5zLmNvbnRhaW5zKHRoaXMuc29ydEJ5Q29sdW1uTmFtZSkpXG4gICAgICByZXR1cm4gW3RoaXMuc29ydEFzY2VuZGluZ107XG4gICAgZWxzZSBpZiAoZ3JpZCAmJiBncmlkPy5zb3J0QnlDb2x1bW5zPy5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIGdyaWQuc29ydFR5cGVzO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5nZXRHcmlkKCk7XG5cbiAgICBpZiAoIXRoaXMuc2hvd0ZpeGVkUm93cykge1xuICAgICAgdGhpcy5pbmRleGVzID0gW107XG4gICAgICBpZiAodGhpcy5zaG93U2VsZWN0ZWRSb3dzICYmIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi50cnVlQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkFuZEZpbHRlciA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5jbG9uZSgpLmFuZCh0aGlzLmRhdGFGcmFtZS5maWx0ZXIpO1xuICAgICAgICBpZiAodGhpcy5zb3J0QnlDb2x1bW5OYW1lICYmIHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMuY29udGFpbnModGhpcy5zb3J0QnlDb2x1bW5OYW1lKSlcbiAgICAgICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmRhdGFGcmFtZS5nZXRTb3J0ZWRPcmRlcihbdGhpcy5zb3J0QnlDb2x1bW5OYW1lXSwgW3RoaXMuc29ydEFzY2VuZGluZ10sIHNlbGVjdGlvbkFuZEZpbHRlcik7XG4gICAgICAgIGVsc2UgaWYgKGdyaWQgJiYgZ3JpZD8uc29ydEJ5Q29sdW1ucz8ubGVuZ3RoID4gMClcbiAgICAgICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmRhdGFGcmFtZS5nZXRTb3J0ZWRPcmRlcihncmlkLnNvcnRCeUNvbHVtbnMsIGdyaWQuc29ydFR5cGVzLCBzZWxlY3Rpb25BbmRGaWx0ZXIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5pbmRleGVzID0gc2VsZWN0aW9uQW5kRmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uSGVhZGVyc0Rpdik7XG5cbiAgICB0aGlzLnJlbmRlckhlYWRlcigpO1xuXG4gICAgdGhpcy52aXJ0dWFsVmlldy5zZXREYXRhKFxuICAgICAgdGhpcy5pbmRleGVzLmxlbmd0aCArICh0aGlzLnNob3dDdXJyZW50Um93ID8gMSA6IDApICsgKHRoaXMuc2hvd01vdXNlT3ZlclJvdyA/IDEgOiAwKSxcbiAgICAgIChpOiBudW1iZXIpID0+IHRoaXMucmVuZGVyRm9ybShpKSk7XG4gIH1cbn1cbiJdfQ==