imm-element-ui 2.5.2 → 2.5.3

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.
@@ -1136,14 +1136,12 @@ export class PageFormComponent extends AmComponent {
1136
1136
  }
1137
1137
  disabledChild(disabled) {
1138
1138
  this.resolvedGridList().forEach((v, index) => {
1139
- console.log('v-----', v);
1140
1139
  if (v.hasOwnProperty('gridCustomDisabled') && typeof v.gridCustomDisabled === 'function') {
1141
1140
  v.gridDisabled = v.gridCustomDisabled(this.getPrm.data);
1142
1141
  }
1143
1142
  else {
1144
1143
  v.gridDisabled = disabled;
1145
1144
  }
1146
- console.log('v.gridDisabled-----', v.gridDisabled);
1147
1145
  if (v.type == 'grid') {
1148
1146
  v.gridOptions.columnDefs.forEach((item) => {
1149
1147
  if (v.gridDisabled && item.hasOwnProperty('editable')) {
@@ -1487,4 +1485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1487
1485
  type: HostListener,
1488
1486
  args: ['window:resize']
1489
1487
  }] } });
1490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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O3FCQUNWLGFBR1UsRUFBRTt3REFHTyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1UsVUFBVTtzQkFBckMsWUFBWTt1QkFBQyxZQUFZO2dCQUNELE9BQU87c0JBQS9CLFlBQVk7dUJBQUMsU0FBUztnQkFDVSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDZ0MsYUFBYTtzQkFBM0UsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBOEo3RCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0ZWZmZWN0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRRdWVyeUxpc3QsXG5cdHNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsIEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJvd1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9nL2xvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDcnVtYkFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXAsIFN0ZXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMvc3RlcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQsIEdyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xuaW1wb3J0IHsgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCBTZWFyY2ggfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0Zm9ybVR5cGVUb1Byb3BzLFxuXHRHcmlkTGlzdCxcblx0SHJlZkJ0bkxpc3QsXG5cdFBhZ2VGb3JtU2xvdENvbnRleHQsXG5cdFBhZ2VMZWZ0UGFuZWxDb25maWcsXG5cdFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlLFxuXHRQYXlsb2FkVXBzZXJ0LFxuXHRQZXJtaXNzaW9uQnRuLFxuXHRDdXN0b21MaXN0RGlhbG9nLFxuXHRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQsXG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC1saXN0Ym94L3NpbmdsZS1zZWxlY3QtbGlzdGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0TG9nQ29tcG9uZW50LFxuXHRcdENydW1iQWN0aW9uQ29tcG9uZW50LFxuXHRcdFN0ZXBzQ29tcG9uZW50LFxuXHRcdEdyaWRDb21wb25lbnQsXG5cdFx0VGFic01vZHVsZSxcblx0XHRSb3dTZWxlY3RvckNvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVQaXBlLFxuXHRcdEhyZWZCdG5MaXN0Q29tcG9uZW50LFxuXHRcdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnQsXG5cdFx0VHJlZU1vZHVsZSxcblx0XSxcblx0dGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuXHRwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlRm9ybUNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXHRAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudDtcblx0QFZpZXdDaGlsZHJlbignY3VzdG9tR3JpZCcpIGN1c3RvbUdyaWQhOiBRdWVyeUxpc3Q8R3JpZENvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGRyZW4oJ3RhYkZvcm0nKSB0YWJGb3JtITogUXVlcnlMaXN0PEZvcm1Db21wb25lbnQ+O1xuXHRAVmlld0NoaWxkKFJvd1NlbGVjdG9yQ29tcG9uZW50KSByb3dTZWxlY3Rvcj86IFJvd1NlbGVjdG9yQ29tcG9uZW50O1xuXHRAQ29udGVudENoaWxkcmVuKFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwYWdlRm9ybVNsb3RzITogUXVlcnlMaXN0PFBhZ2VGb3JtU2xvdERpcmVjdGl2ZT47XG5cdHNob3dMb2cgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxMb2coKSAmJiB0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdyaWdodCc7XG5cdH0pO1xuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblx0Z3JpZExpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xuXHRmb3JtID0gaW5wdXQucmVxdWlyZWQ8Rm9ybU9wdGlvbnM+KHt9KTtcblx0Z2V0UHJtSW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxHZXQ+KHt9KTtcblx0c3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKTtcblx0c3RhdHVzS2V5ID0gaW5wdXQoJ3N0YXR1cycpO1xuXHRocmVmQnRuTGlzdCA9IGlucHV0PEhyZWZCdG5MaXN0W10+KFtdKTtcblx0c2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxQZXJtaXNzaW9uQnRuW10+KFtdKTtcblx0bW9kZWxMb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHNpZGViYXJNb2RlID0gc2lnbmFsPCdsZWZ0JyB8ICdyaWdodCc+KCdyaWdodCcpO1xuXHRmb3JtRGlzYWJsZWQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcblx0c3RhdHVzQ29uZiA9IGlucHV0PGFueT4oKTtcblx0Zm9ybURldGFpbCA9IGlucHV0PGFueT4oKTtcblx0c2F2ZUZ1bmMgPSBpbnB1dDxhbnk+KCk7XG5cdHNob3dNYWluU2F2ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRjb25maWdOZXdQYXRoID0gaW5wdXQ8YW55PigpO1xuXHRydW50aW1lQ29udGV4dElucHV0ID0gaW5wdXQ8YW55Pih7fSk7XG5cdGN1c3RvbUxlZnRQYW5lbCA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1UZW1wbGF0ZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0Pj4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1JbnN0YW5jZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIEN1c3RvbUxpc3REaWFsb2cgfCB1bmRlZmluZWQ+IHwgbnVsbD4obnVsbCk7XG5cdGxlZnRQYW5lbCA9IGlucHV0PFBhZ2VMZWZ0UGFuZWxDb25maWcgfCBudWxsPihudWxsKTtcblx0cGFuZWxTZWxlY3RlZERhdGEgPSBpbnB1dDxhbnk+KHt9KTtcblx0cnVudGltZUNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuXHRwcml2YXRlIGN1cnJlbnRJZEFuZE1vZGVsTmFtZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHt9O1xuXG5cdHVzZXJIaXN0b3J5U2VydmljZSA9IGluamVjdChVc2VySGlzdG9yeVNlcnZpY2UpO1xuXHRwYWdlRm9ybVNlcnZpY2UgPSBpbmplY3QoUGFnZUZvcm1TZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIF9pbmRleFZhbHVlID0gMDtcblx0cHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEdyaWRMaXN0ID0gc2lnbmFsPGFueVtdPihbXSk7XG5cdHByaXZhdGUgZ3JpZExpc3RPdmVycmlkZGVuID0gZmFsc2U7XG5cdHZpc2libGUgPSBmYWxzZTtcblx0ZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoO1xuXHRzZWxlY3RPcHRpb25zITogR3JpZE9wdGlvbnM7XG5cdHNlbGVjdERhdGE6IGFueVtdID0gW107XG5cdHBhZ2VVcmwgPSAnJztcblx0bmV3VXJsID0gJyc7XG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xuXHRocmVmczogYW55W10gPSBbXTtcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xuXHRzdWJGb3JtTW9kZWw6IGFueSA9IHt9O1xuXHRzYXZlQnRuRGlzYWJsZSA9IGZhbHNlO1xuXHRncmlkRGlzYWJsZSA9IGZhbHNlO1xuXHRzZWxlY3Rpb25LZXlzOiBhbnlbXSA9IFtdO1xuXHRzdWJEZWxldGVJZHM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRsZWZ0UGFuZWxUcmVlTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcblx0bGVmdFBhbmVsU2VsZWN0ZWROb2RlOiBUcmVlTm9kZSB8IG51bGwgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbEV4cGFuZGVkS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0bGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBsZWZ0UGFuZWxJbml0aWFsaXplZE1vZGU6ICdsaXN0JyB8ICd0cmVlJyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGJhc2VHcmlkTGlzdFNuYXBzaG90OiBhbnlbXSA9IFtdO1xuXG5cdHN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90RGlyZWN0aXZlPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RDb250ZXh0TWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VGb3JtU2xvdENvbnRleHQ+KCk7XG5cdGN1cnJlbnRTZWxlY3RNb2RlbENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRzbG90UmVuZGVyU3RhdGVzOiBBcnJheTx7XG5cdFx0c2xvdD86IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZTtcblx0XHRjb250ZXh0OiBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHR9PiA9IFtdO1xuXG5cdGdldCBpbmRleFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmRleFZhbHVlO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRTZWxlY3RNb2RlbENvZGUgPSB0aGlzLmN1cnJlbnRTZWxlY3RNb2RlbENvZGU7XG5cdFx0aWYgKCFjdXJyZW50U2VsZWN0TW9kZWxDb2RlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwKCk/LltjdXJyZW50U2VsZWN0TW9kZWxDb2RlXSA/PyBudWxsO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHQoKTogQ3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQge1xuXHRcdHJldHVybiB7IHBhZ2VGb3JtOiB0aGlzIH07XG5cdH1cblxuXHRnZXREaWFsb2dTZWxlY3RlZFJlc3VsdCgpIHtcblx0XHRjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLnJvd1NlbGVjdG9yPy5nZXRTZWxlY3RlZERhdGEoKSA/PyBbXTtcblx0XHRyZXR1cm4gc2VsZWN0ZWREYXRhLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucz8uY29sdW1uRGVmcz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcblx0XHRcdFx0cmVzdWx0W2NvbC5maWVsZF0gPSBpdGVtW2NvbC5maWVsZF07XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRzZXRSdW50aW1lQ29udGV4dChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHR0aGlzLnJ1bnRpbWVDb250ZXh0ID0ge1xuXHRcdFx0Li4uKHRoaXMucnVudGltZUNvbnRleHQgfHwge30pLFxuXHRcdFx0Li4uZGF0YSxcblx0XHR9O1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmdldExlZnRQYW5lbE1vZGUoKTtcblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgJiYgdGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZE1vZGUgPT09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAhPT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldExlZnRQYW5lbFN0YXRlKCkge1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IFtdO1xuXHRcdHRoaXMubGVmdFBhbmVsVHJlZU5vZGVzID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0ge307XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSB0aGlzLmdyaWRMaXN0KCkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0pO1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSW5pdCcpO1xuXHRcdGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5sb2FkTGVmdFBhbmVsSXRlbXMoZGF0YVNvdXJjZSk7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IGl0ZW1zO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSXRlbXNMb2FkZWQnLCB7IGl0ZW1zIH0pO1xuXHRcdGlmICh0aGlzLmdldExlZnRQYW5lbE1vZGUoKSA9PT0gJ3RyZWUnKSB7XG5cdFx0XHR0aGlzLmluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplTGVmdFBhbmVsTGlzdChpdGVtcywgZGF0YVNvdXJjZSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGluaXRpYWxpemVMZWZ0UGFuZWxMaXN0KGl0ZW1zOiBhbnlbXSwgZGF0YVNvdXJjZT86IFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlKSB7XG5cdFx0bGV0IGRlZmF1bHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMoXG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZT8uZGVmYXVsdFNlbGVjdCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UuZGVmYXVsdFNlbGVjdCh0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCh7IGl0ZW1zIH0pKVxuXHRcdFx0XHQ6IGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QsXG5cdFx0KTtcblx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGRlZmF1bHRWYWx1ZSk7XG5cdFx0fVxuXHRcdGlmICgoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHwgZGVmYXVsdFZhbHVlID09PSBudWxsKSAmJiB0aGlzLmdldFBhbmVsQWxsb3dEZXNlbGVjdCgpID09PSBmYWxzZSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW1zWzBdKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihkZWZhdWx0VmFsdWUsIGl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSkgPT09IGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgbG9hZExlZnRQYW5lbEl0ZW1zKGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSkge1xuXHRcdGlmICghZGF0YVNvdXJjZSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgcmVzdWx0ID1cblx0XHRcdHR5cGVvZiBkYXRhU291cmNlLmxvYWRlciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UubG9hZGVyKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpXG5cdFx0XHRcdDogKGRhdGFTb3VyY2UubG9hZGVyID8/IGRhdGFTb3VyY2Uub3B0aW9ucyA/PyBbXSk7XG5cdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhyZXN1bHQpO1xuXHRcdGlmIChkYXRhU291cmNlLnJlc3VsdFBhdGgpIHtcblx0XHRcdHJlc3VsdCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwocmVzdWx0LCBkYXRhU291cmNlLnJlc3VsdFBhdGgpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGFTb3VyY2UudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKGRhdGFTb3VyY2UudHJhbnNmb3JtKHJlc3VsdCwgdGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogcmVzdWx0IH0pKSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiBbXTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0TGVmdFBhbmVsTW9kZSgpOiAnbGlzdCcgfCAndHJlZScge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5tb2RlID09PSAndHJlZScgPyAndHJlZScgOiAnbGlzdCc7XG5cdH1cblxuXHRnZXRQYW5lbE9wdGlvbkxhYmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5ub2RlTGFiZWwgfHwgJ2xhYmVsJztcblx0fVxuXG5cdGdldFBhbmVsT3B0aW9uVmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/Lm5vZGVWYWx1ZSB8fCAndmFsdWUnO1xuXHR9XG5cblx0Z2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5hbGxvd0Rlc2VsZWN0ID8/IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmFsbG93RGVzZWxlY3QgPz8gdHJ1ZTtcblx0fVxuXG5cdGdldFBhbmVsRW1wdHlNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5lbXB0eU1lc3NhZ2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8uZW1wdHlNZXNzYWdlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmVtcHR5TWVzc2FnZSB8fCAn5pqC5peg5pWw5o2uJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0UGFuZWxEYXRhU291cmNlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5kYXRhU291cmNlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmRhdGFTb3VyY2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGF0YVNvdXJjZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUNoaWxkcmVuRmllbGQoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmNoaWxkcmVuRmllbGQgfHwgJ2NoaWxkcmVuJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LnBhcmVudFNlbGVjdGFibGUgPz8gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUV4cGFuZGVkS2V5c1N0YXRlS2V5KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5leHBhbmRlZEtleXNTdGF0ZUtleTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUZpZWxkVmFsdWUoaXRlbTogYW55LCBmaWVsZD86IHN0cmluZykge1xuXHRcdGlmICghZmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKGl0ZW0sIGZpZWxkKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZU1heWJlQXN5bmModmFsdWU6IGFueSkge1xuXHRcdGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20odmFsdWUpO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFnZUZvcm06IHRoaXMsXG5cdFx0XHRtb2RlOiB0aGlzLmdldExlZnRQYW5lbE1vZGUoKSxcblx0XHRcdHNlbGVjdGVkSXRlbTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUsXG5cdFx0XHRpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyxcblx0XHRcdGdldFBybTogdGhpcy5nZXRQcm0sXG5cdFx0XHRncmlkTGlzdDogdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCksXG5cdFx0XHRiYXNlR3JpZExpc3Q6IHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QsXG5cdFx0XHRwYW5lbFNlbGVjdGVkRGF0YTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRydW50aW1lQ29udGV4dDogdGhpcy5ydW50aW1lQ29udGV4dCxcblx0XHRcdHNldFN0YXRlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0Li4uZXh0cmEsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcnVuTGVmdFBhbmVsRXZlbnQoZXZlbnROYW1lOiBrZXlvZiBOb25OdWxsYWJsZTxQYWdlTGVmdFBhbmVsQ29uZmlnWydldmVudHMnXT4sIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gdGhpcy5sZWZ0UGFuZWwoKT8uZXZlbnRzPy5bZXZlbnROYW1lXTtcblx0XHRpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIGhhbmRsZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmEpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUob3B0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0UGFuZWxPcHRpb25WYWx1ZSgpO1xuXHRcdGlmICghb3B0aW9uVmFsdWUpIHtcblx0XHRcdHJldHVybiBvcHRpb247XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKG9wdGlvbiwgb3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCkge1xuXHRcdGlmIChldmVudC52YWx1ZSA9PSBudWxsICYmIHRoaXMuZ2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihldmVudC52YWx1ZSwgZXZlbnQub3B0aW9uKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24odmFsdWU6IGFueSwgb3B0aW9uPzogYW55KSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb24gPz8gdGhpcy5sZWZ0UGFuZWxJdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW0pID09PSB2YWx1ZSkgPz8gbnVsbDtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZSh2YWx1ZSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZTogdmFsdWUsXG5cdFx0XHRub2RlOiBudWxsLFxuXHRcdFx0cmF3Tm9kZTogbnVsbCxcblx0XHRcdGlzUGFyZW50OiBmYWxzZSxcblx0XHRcdGlzTGVhZjogdHJ1ZSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKSB7XG5cdFx0Y29uc3QgZml0ZXJQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gKEFycmF5LmlzQXJyYXkoaXRlbT8uZml0ZXJQcmVsb2FkcykgPyBpdGVtLmZpdGVyUHJlbG9hZHMgOiBbXSkpO1xuXHRcdHRoaXMuZ2V0UHJtLmZpdGVyUHJlbG9hZHMgPSBmaXRlclByZWxvYWRzO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jR2V0UHJtRm9yQ3VycmVudFZpZXcoKSB7XG5cdFx0aWYgKCF0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LnN1YkRhdGFLZXkpXG5cdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+ICEhaXRlbSk7XG5cdFx0aWYgKGN1cnJlbnRQcmVsb2Fkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmdldFBybS5wcmVsb2FkcyA9IGN1cnJlbnRQcmVsb2Fkcztcblx0XHR9XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jTGVmdFBhbmVsU2VsZWN0aW9uU3RhdGUodmFsdWU6IGFueSwgc2VsZWN0ZWRJdGVtOiBhbnkpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuZ2V0UHJtLmRhdGEpIHtcblx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKHBhbmVsLnN0YXRlS2V5KSB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHBhbmVsLnN0YXRlS2V5LCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zOiBhbnlbXSkge1xuXHRcdGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLnJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cyA9IGV4cGFuZGVkU3RhdGUgfHwge307XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSB0aGlzLmJ1aWxkVHJlZU5vZGVzKGl0ZW1zKTtcblx0XHR2b2lkIHRoaXMuYXBwbHlUcmVlRGVmYXVsdFNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlcyhpdGVtczogYW55W10sIHBhcmVudEtleSA9ICdyb290Jyk6IFRyZWVOb2RlW10ge1xuXHRcdGNvbnN0IGNoaWxkcmVuRmllbGQgPSB0aGlzLmdldFRyZWVDaGlsZHJlbkZpZWxkKCk7XG5cdFx0Y29uc3QgaWNvbkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uaWNvbkZpZWxkO1xuXHRcdGNvbnN0IGxlYWZGaWVsZCA9IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmxlYWZGaWVsZDtcblx0XHRjb25zdCBkaXNhYmxlZEZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGlzYWJsZWRGaWVsZDtcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5idWlsZFRyZWVOb2RlS2V5KGl0ZW0sIHBhcmVudEtleSwgaW5kZXgpO1xuXHRcdFx0Y29uc3QgY2hpbGRJdGVtcyA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgY2hpbGRyZW5GaWVsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtcykgPyB0aGlzLmJ1aWxkVHJlZU5vZGVzKGNoaWxkSXRlbXMsIGtleSkgOiBbXTtcblx0XHRcdGNvbnN0IGlzTGVhZiA9IGxlYWZGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBsZWFmRmllbGQpIDogY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0Y29uc3QgaXNQYXJlbnQgPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xuXHRcdFx0Y29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB8fCAhaXNQYXJlbnQ7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW0pLFxuXHRcdFx0XHRkYXRhOiBpdGVtLFxuXHRcdFx0XHRjaGlsZHJlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsZWFmOiBpc0xlYWYsXG5cdFx0XHRcdGV4cGFuZGVkOiB0aGlzLnNob3VsZEV4cGFuZFRyZWVOb2RlKGtleSwgaXNQYXJlbnQpLFxuXHRcdFx0XHRzZWxlY3RhYmxlLFxuXHRcdFx0XHRkaXNhYmxlZDogZGlzYWJsZWRGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBkaXNhYmxlZEZpZWxkKSA6IGZhbHNlLFxuXHRcdFx0XHRpY29uOiBpY29uRmllbGQgPyB0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGljb25GaWVsZCkgOiB1bmRlZmluZWQsXG5cdFx0XHR9IGFzIFRyZWVOb2RlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlS2V5KGl0ZW06IGFueSwgcGFyZW50S2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSk7XG5cdFx0cmV0dXJuIGAke3BhcmVudEtleX0tJHt2YWx1ZSA/PyBpbmRleH1gO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJlZU5vZGVMYWJlbChpdGVtOiBhbnkpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgdGhpcy5nZXRQYW5lbE9wdGlvbkxhYmVsKCkpO1xuXHRcdHJldHVybiBsYWJlbCA9PSBudWxsID8gJycgOiBTdHJpbmcobGFiZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRFeHBhbmRUcmVlTm9kZShrZXk6IHN0cmluZywgaXNQYXJlbnQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWlzUGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRlZmF1bHRFeHBhbmQgPz8gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXkpIHx8IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVHJlZUV4cGFuZGVkS2V5c1N0YXRlKCkge1xuXHRcdGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5nZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKTtcblx0XHRpZiAoIXN0YXRlS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHN0YXRlS2V5LCB7IC4uLnRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0JyAmJiAhKCdrZXknIGluIGRlZmF1bHRWYWx1ZSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpPy5rZXkgPz8gbnVsbDtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc29sdmVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oZGVmYXVsdFZhbHVlKTtcblx0XHRjb25zdCBuZXh0Tm9kZSA9IHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUocmVzb2x2ZWROb2RlKVxuXHRcdFx0PyByZXNvbHZlZE5vZGVcblx0XHRcdDogdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpO1xuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obmV4dE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmICh0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUJ5U2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRpZiAoc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmICdrZXknIGluIHNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlLZXkodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbi5rZXkpID8/IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZXM6IFRyZWVOb2RlW10sIHZhbHVlOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0Y29uc3Qgbm9kZVZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShub2RlLmRhdGEpO1xuXHRcdFx0aWYgKG5vZGVWYWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4sIHZhbHVlKTtcblx0XHRcdFx0aWYgKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBmaW5kVHJlZU5vZGVCeUtleShub2RlczogVHJlZU5vZGVbXSwga2V5OiBzdHJpbmcpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUua2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzVHJlZVBhcmVudE5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0cmV0dXJuICEhbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0aWYgKCFub2RlIHx8IChub2RlIGFzIGFueSkuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxUcmVlTm9kZVNlbGVjdChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qgbm9kZSA9IGV2ZW50Py5ub2RlID8/IG51bGw7XG5cdFx0aWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldID0gdHJ1ZTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdG9uTGVmdFBhbmVsVHJlZU5vZGVDb2xsYXBzZShldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxUcmVlU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICd0cmVlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByYXdOb2RlID0gbm9kZS5kYXRhO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKHJhd05vZGUpO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gbm9kZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gcmF3Tm9kZTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFZhbHVlLCByYXdOb2RlKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtOiByYXdOb2RlLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZSxcblx0XHRcdG5vZGUsXG5cdFx0XHRyYXdOb2RlLFxuXHRcdFx0aXNQYXJlbnQ6IHRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHRcdGlzTGVhZjogIXRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VVcHNlcnQodmFsdWUgYXMgUGF5bG9hZFVwc2VydCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKGdyaWQpID0+IHtcblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdGNvbnN0IGZvcm1EYXRhID0gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1EYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YVswXSA/PyB7fTtcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtRGF0YSAmJiB0eXBlb2YgZm9ybURhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdncmlkJyAmJiAhdGhpcy5nZXRQcm0uZGF0YT8uaGFzT3duUHJvcGVydHkoZ3JpZC5zdWJEYXRhS2V5KSkge1xuXHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW2dyaWQuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyDmj5Lmp73nu4Tku7Yg5pu05pawdXBzZXJ0XG5cdHByaXZhdGUgbWVyZ2VVcHNlcnQocGF5bG9hZDogUGF5bG9hZFVwc2VydCkge1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBmaWVsZCwgaGVhZGVyTmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlLCByZWNvcmRJbmRleCwgaW5kZXgsIGRhdGEsIHNlbGVjdE5hbWUgfSA9IHBheWxvYWQ7XG5cdFx0bGV0IHN1YiA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQhW2luZGV4XTtcblx0XHRpZiAoYWN0aW9uID09ICdhZGQnKSB7XG5cdFx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbaW5kZXhdWydncmlkT3B0aW9ucyddWydtYWluRmllbGQnXTtcblx0XHRcdHN1YlsnbWFwdG1wJ10/LnNldChyZWNvcmRJbmRleCwgeyAuLi5kYXRhIH0pO1xuXHRcdFx0aWYgKGZpZWxkID09IG1haW5GaWVsZCkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAoc3ViWydtYXB0bXAnXT8uaGFzKHJlY29yZEluZGV4ISkpIHtcblx0XHRcdFx0byA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogZGF0YVsnaWQnXSwgW2ZpZWxkXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3ROYW1lKSB7XG5cdFx0XHRcdG9bc2VsZWN0TmFtZV0gPSBkYXRhW3NlbGVjdE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4ISwgbyk7XG5cdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRpZDogZGF0YVsnaWQnXSxcblx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRsZXQgZGF0YSA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRkYXRhW2ZpZWxkXSAmJiBkZWxldGUgZGF0YVtmaWVsZF07XG5cdFx0XHRcdGxldCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0XHRrZXlzLmxlbmd0aCA9PSAwICYmIHN1YlsnbWFwdG1wJ10/LmRlbGV0ZShyZWNvcmRJbmRleCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViWydsb2d0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISArIGZpZWxkISkpIHtcblx0XHRcdFx0c3ViWydsb2d0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4ISArIGZpZWxkISk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHRzdWJbJ21hcHRtcCddPy5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0Y29uc3Qgc3ViVGFibGUgPSBncmlkVGFiLmdyaWRPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGUpID8gZSA6IFtlXTtcblxuXHRcdGxldCBwcm0gPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHN1YlRhYmxlLFxuXHRcdFx0aWRzLFxuXHRcdH07XG5cdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGlkcyB9KTtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUocHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRkb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhID0gW107XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdFx0aWYgKCEhZ3JpZC5zbG90S2V5KSB7XG5cdFx0XHRjb25zdCB7IHN1YkRhdGFLZXkgfSA9IGdyaWQ7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGdyaWQuc2VsZWN0RGF0YSk7XG5cdFx0XHQvLyB0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DYW5jZWxTZWxlY3RlZChlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc29sZS5sb2coYGdldERldGFpbDogJHtpbmRleH1gKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8g6I635Y+W6K+m5oOF5Zue6LCDXG5cdGRldGFpbENiKHJlczogYW55KSB7XG5cdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHJlcztcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdC8vIGN1c3RvbVN0ZXBzLnJlZnJlc2hTdGVwcygpXG5cdFx0fVxuXHR9XG5cblx0Zm9ybURpc0Z1bmMoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmZvcm1EaXNhYmxlZCgpISh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zYXZlQnRuRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGF0YSk7XG5cdFx0XHR0aGlzLmRpc2FibGVkQ2hpbGQoZGF0YSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IGRpc2FiZWxkID0gZGF0YS5kaXNhYmxlZDtcblx0XHRcdGNvbnN0IGZpbHRlcnMgPSBkYXRhLmZpbHRlcnMgfHwgW107XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2Zvcm0nKSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZ3JpZCcpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkaXNhYmVsZDtcblx0XHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZGlzYWJsZUZvcm0oZGlzYWJsZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHR2Lmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKGRpc2FibGUpIHtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0ZGlzYWJsZWRDaGlsZChkaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGNvbnNvbGUubG9nKCd2LS0tLS0nLHYpXG5cdFx0XHRpZih2Lmhhc093blByb3BlcnR5KCdncmlkQ3VzdG9tRGlzYWJsZWQnKSAmJiB0eXBlb2Ygdi5ncmlkQ3VzdG9tRGlzYWJsZWQgPT09ICdmdW5jdGlvbicpe1xuXHRcdFx0XHRcdHYuZ3JpZERpc2FibGVkID0gdi5ncmlkQ3VzdG9tRGlzYWJsZWQodGhpcy5nZXRQcm0uZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0di5ncmlkRGlzYWJsZWQgPSBkaXNhYmxlZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zb2xlLmxvZygndi5ncmlkRGlzYWJsZWQtLS0tLScsdi5ncmlkRGlzYWJsZWQpXG5cdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHR2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8g5ZCM5LiA5Liq6aG16Z2iZGlzYWJsZWQgZmFsc2UgID0+IHRydWVcblx0XHRcdFx0XHRpZiAoIXYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgIWl0ZW0uZWRpdGFibGUgJiYgdHlwZW9mIGl0ZW0uZWRpdGFibGUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dHlwZW9mIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCA9PSdmdW5jdGlvbicgJiYgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkKCkuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMpO1xuXHRcdFx0fSBlbHNlIGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAodi5ncmlkRGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRzZXREaXNhYmxlZCgpIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR0YWJDbGljaygpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSAmJiB0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnJlQ2FsY0xhYmVsU2l6ZSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSwgMCk7XG5cdH1cblx0dG9nZ2xlTG9nKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG5cdH1cblxuXHRwcml2YXRlIHJlYnVpbGRTbG90TWFwKCkge1xuXHRcdHRoaXMuc2xvdE1hcC5jbGVhcigpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB0aGlzLnBhZ2VGb3JtU2xvdHM/LnRvQXJyYXkoKSA/PyBbXSkge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHNsb3Quc2xvdEtleSgpO1xuXHRcdFx0aWYgKCF0aGlzLnNsb3RNYXAuaGFzKHNsb3RLZXkpKSB7XG5cdFx0XHRcdHRoaXMuc2xvdE1hcC5zZXQoc2xvdEtleSwgc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpIHtcblx0XHR0aGlzLnNsb3RSZW5kZXJTdGF0ZXMgPSAodGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkgPz8gW10pLm1hcCgoZ3JpZCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSB0aGlzLnJlc29sdmVTbG90S2V5KGdyaWQpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2xvdDogc2xvdEtleSA/IHRoaXMuc2xvdE1hcC5nZXQoc2xvdEtleSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRleHQ6IHRoaXMuZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQsIGluZGV4LCBzbG90S2V5KSxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlciwgc2xvdEtleTogc3RyaW5nKTogUGFnZUZvcm1TbG90Q29udGV4dCB7XG5cdFx0Y29uc3QgcmVuZGVyS2V5ID0gdGhpcy5nZXRHcmlkUmVuZGVyS2V5KGdyaWQsIGluZGV4KTtcblx0XHRsZXQgY29udGV4dCA9IHRoaXMuc2xvdENvbnRleHRNYXAuZ2V0KHJlbmRlcktleSk7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHRjb250ZXh0ID0ge30gYXMgUGFnZUZvcm1TbG90Q29udGV4dDtcblx0XHRcdHRoaXMuc2xvdENvbnRleHRNYXAuc2V0KHJlbmRlcktleSwgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQuc2xvdEtleSA9IHNsb3RLZXk7XG5cdFx0Y29udGV4dC5ncmlkID0gZ3JpZDtcblx0XHRjb250ZXh0LmluZGV4ID0gaW5kZXg7XG5cdFx0Y29udGV4dC5wYWdlRm9ybSA9IHRoaXM7XG5cdFx0Y29udGV4dC5kYXRhID0gKHRoaXMuZ2V0UHJtLmRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnRleHQubW9kZWwgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9O1xuXHRcdGNvbnRleHQudXBzZXJ0ID0gdGhpcy51cHNlcnRQcm07XG5cdFx0Y29udGV4dC5hY3RpdmUgPSB0aGlzLmluZGV4VmFsdWUgPT09IGluZGV4O1xuXHRcdGNvbnRleHQuZ3JpZERpc2FibGUgPSB0aGlzLmdyaWREaXNhYmxlO1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlU2xvdEtleShncmlkOiBHcmlkTGlzdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuc2xvdEtleSB8fCBncmlkLnN1YkRhdGFLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldEdyaWRSZW5kZXJLZXkoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgZ3JpZC5zdWJEYXRhS2V5IHx8IGdyaWQuc2xvdEtleSB8fCBgJHtpbmRleH1gO1xuXHR9XG5cblx0Z2V0Q3VycmVudEdyaWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpPy5bdGhpcy5pbmRleFZhbHVlXSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50U3ViTW9kZWxOYW1lKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJyA/IGN1cnJlbnRHcmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgJycgOiBjdXJyZW50R3JpZC5tb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRwcml2YXRlIGdldFN1YnNlcnRCeUdyaWQoZ3JpZDogR3JpZExpc3QgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFncmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3ViTW9kZWxOYW1lID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgOiBncmlkWydtb2RlbE5hbWUnXTtcblx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnVwc2VydFBybS5zdWJzZXJ0Py5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uc3ViTW9kZWxOYW1lID09PSBzdWJNb2RlbE5hbWUpID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGNsb25lU3Vic2VydChzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3Vic2VydCxcblx0XHRcdHN1YkRhdGE6IEFycmF5LmlzQXJyYXkoc3Vic2VydC5zdWJEYXRhKSA/IHN1YnNlcnQuc3ViRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiBbXSxcblx0XHRcdG1hcHRtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5tYXB0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0Lm1hcHRtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0XHRsb2d0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubG9ndG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5sb2d0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybUluZGV4ID1cblx0XHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHRcdC5zbGljZSgwLCB0aGlzLmluZGV4VmFsdWUgKyAxKVxuXHRcdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSAhPT0gJ2dyaWQnKS5sZW5ndGggLSAxO1xuXHRcdHJldHVybiBmb3JtSW5kZXggPj0gMCA/ICh0aGlzLnRhYkZvcm0uZ2V0KGZvcm1JbmRleCkgPz8gbnVsbCkgOiBudWxsO1xuXHR9XG5cblx0Y2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXV0aExldmVsKCkgPj0gMyAmJiBjdXJyZW50R3JpZCA9PT0gdGhpcy5nZXRDdXJyZW50R3JpZCgpICYmIGN1cnJlbnRHcmlkLnN1YlNhdmU/LmVuYWJsZWQgPT09IHRydWU7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KSxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHsgbW9kZWxOYW1lOiBncmlkLmdyaWRPcHRpb25zLm1vZGVsTmFtZSwgaWRzIH0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2V0UGFuZWxPcHRpb25WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdldFBhbmVsT3B0aW9uTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImdldFBhbmVsQWxsb3dEZXNlbGVjdCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbCBwYWdlLWZvcm0tdHJlZS1wYW5lbFwiPlxuICAgICAgICAgICAgQGlmIChsZWZ0UGFuZWxUcmVlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8cC10cmVlXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxlZnRQYW5lbFRyZWVOb2Rlc1wiXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cImxlZnRQYW5lbFNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFnZS1mb3JtLWxlZnQtdHJlZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmQpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlQ29sbGFwc2UpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbC1lbXB0eVwiPnt7IGdldFBhbmVsRW1wdHlNZXNzYWdlKCkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiPjwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChncmlkcyAmJiBncmlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxuICAgICAgICAgICAgICA8cC10YWJzIFsodmFsdWUpXT1cImluZGV4VmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsaXN0PlxuICAgICAgICAgICAgICAgICAgQGZvciAoZmNoaWxkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZmNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFiQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wLXRhYj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3AtdGFibGlzdD5cbiAgICAgICAgICAgICAgPC9wLXRhYnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoZ3JpZCBvZiBncmlkczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGdyaWQpIHtcbiAgICAgICAgICAgIEBsZXQgc2xvdFN0YXRlID0gc2xvdFJlbmRlclN0YXRlc1tpXTtcbiAgICAgICAgICAgIEBsZXQgc2xvdCA9IHNsb3RTdGF0ZT8uc2xvdDtcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIiBbc3R5bGUuaGVpZ2h0XT1cInNsb3QgPyBncmlkLmdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgQGlmIChzbG90KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNsb3QudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHNsb3RTdGF0ZS5jb250ZXh0XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSAhPSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc2hvd0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgI2N1c3RvbUdyaWQ+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC50eXBlID09ICdncmlkJykge1xuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1ncmlkXG4gICAgICAgICAgICAgICAgICAgICNjdXN0b21HcmlkXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV1cIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkRW1pdCk9XCJkYXRhU291cmNlU2hvdygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZERpc2FibGVdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiZ3JpZC5zaG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVWaXNpYmxlXT1cImNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlTGFiZWxdPVwiZ2V0Q3VycmVudFRhYlNhdmVMYWJlbChncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlRGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYWRkU29ydF09XCJncmlkLmFkZFNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAoc3ViU2F2ZUVtaXQpPVwic2F2ZUN1cnJlbnRUYWIoKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZ3JpZD5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB4LTIgcHQtMiBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAgICAgI3RhYkZvcm1cbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ3JpZFwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cInN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd0xvZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgIDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2cgPz8gW11cIj48L2N1c3RvbS1sb2c+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxyb3ctc2VsZWN0b3Jcblx0Wyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcblx0W3NlYXJjaFBybV09XCJkaWFsb2dTZWFyY2hQcm1cIlxuXHRbZ3JpZE9wdGlvbnNdPVwic2VsZWN0T3B0aW9uc1wiXG5cdFtzZWxlY3Rpb25LZXlzXT1cInNlbGVjdGlvbktleXNcIlxuXHRbc2VsZWN0TW9kZWxDb2RlXT1cImN1cnJlbnRTZWxlY3RNb2RlbENvZGUgfHwgdW5kZWZpbmVkXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2ddPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVcIlxuXHRbY3VzdG9tTGlzdEZvcm1CeURpYWxvZ0NvbnRleHRdPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dFwiXG5cdFtjdXN0b21MaXN0RGlhbG9nTWFwXT1cImN1c3RvbUxpc3RGb3JtSW5zdGFuY2VNYXAoKVwiXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiXG5cdChjYW5jZWxTZWxlY3QpPVwib25DYW5jZWxTZWxlY3RlZCgkZXZlbnQpXCI+XG48L3Jvdy1zZWxlY3Rvcj5cbiJdfQ==
1488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvcGFnZS1mb3JtL3BhZ2UtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL3BhZ2UtZm9ybS9wYWdlLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUlOLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFlLE1BQU0sNkJBQTZCLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQVEsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMs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U0FBUztnQkFDVSxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDZ0MsYUFBYTtzQkFBM0UsZUFBZTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBOEo3RCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvdXNlckhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQge1xuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENvbnRlbnRDaGlsZHJlbixcblx0ZWZmZWN0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdGluamVjdCxcblx0aW5wdXQsXG5cdE9uRGVzdHJveSxcblx0T25Jbml0LFxuXHRRdWVyeUxpc3QsXG5cdHNpZ25hbCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1Db21wb25lbnQsIEZvcm1PcHRpb25zIH0gZnJvbSAnLi4vZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFJvd1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93LXNlbGVjdG9yL3Jvdy1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9nL2xvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDcnVtYkFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFN0ZXAsIFN0ZXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RlcHMvc3RlcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQsIEdyaWRPcHRpb25zIH0gZnJvbSAnLi4vZ3JpZC9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYnNNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYnMnO1xuaW1wb3J0IHsgVHJlZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZSc7XG5pbXBvcnQgeyBBbUNvbXBvbmVudCwgR2V0LCBTZWFyY2ggfSBmcm9tICcuLi9hbS9hbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcblx0Zm9ybVR5cGVUb1Byb3BzLFxuXHRHcmlkTGlzdCxcblx0SHJlZkJ0bkxpc3QsXG5cdFBhZ2VGb3JtU2xvdENvbnRleHQsXG5cdFBhZ2VMZWZ0UGFuZWxDb25maWcsXG5cdFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlLFxuXHRQYXlsb2FkVXBzZXJ0LFxuXHRQZXJtaXNzaW9uQnRuLFxuXHRDdXN0b21MaXN0RGlhbG9nLFxuXHRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlQ29udGV4dCxcbn0gZnJvbSAnLi9wYWdlLWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEhyZWZCdG5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vaHJlZi1idG4tbGlzdC9ocmVmLWJ0bi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUgfSBmcm9tICcuLi9zaGFyZS91dGlscyc7XG5pbXBvcnQgeyBQYWdlRm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3BhZ2UtZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSB9IGZyb20gJy4vcGFnZS1mb3JtLXNsb3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IGZpbmFsaXplLCBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuXHRTaW5nbGVTZWxlY3RMaXN0Ym94Q2hhbmdlRXZlbnQsXG5cdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnRcbn0gZnJvbSAnLi4vc2luZ2xlLXNlbGVjdC1saXN0Ym94L3NpbmdsZS1zZWxlY3QtbGlzdGJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1wYWdlLWZvcm0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbXG5cdFx0Q29tbW9uTW9kdWxlLFxuXHRcdEJ1dHRvbk1vZHVsZSxcblx0XHRGb3Jtc01vZHVsZSxcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXHRcdEZvcm1Db21wb25lbnQsXG5cdFx0TG9nQ29tcG9uZW50LFxuXHRcdENydW1iQWN0aW9uQ29tcG9uZW50LFxuXHRcdFN0ZXBzQ29tcG9uZW50LFxuXHRcdEdyaWRDb21wb25lbnQsXG5cdFx0VGFic01vZHVsZSxcblx0XHRSb3dTZWxlY3RvckNvbXBvbmVudCxcblx0XHRUcmFuc2xhdGVQaXBlLFxuXHRcdEhyZWZCdG5MaXN0Q29tcG9uZW50LFxuXHRcdFNpbmdsZVNlbGVjdExpc3Rib3hDb21wb25lbnQsXG5cdFx0VHJlZU1vZHVsZSxcblx0XSxcblx0dGVtcGxhdGVVcmw6ICcuL3BhZ2UtZm9ybS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9wYWdlLWZvcm0uY29tcG9uZW50LnNjc3MnLFxuXHRwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBQYWdlRm9ybUNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXHRAVmlld0NoaWxkKCdjRm9ybScpIGNGb3JtITogRm9ybUNvbXBvbmVudDtcblx0QFZpZXdDaGlsZHJlbignY3VzdG9tR3JpZCcpIGN1c3RvbUdyaWQhOiBRdWVyeUxpc3Q8R3JpZENvbXBvbmVudD47XG5cdEBWaWV3Q2hpbGRyZW4oJ3RhYkZvcm0nKSB0YWJGb3JtITogUXVlcnlMaXN0PEZvcm1Db21wb25lbnQ+O1xuXHRAVmlld0NoaWxkKFJvd1NlbGVjdG9yQ29tcG9uZW50KSByb3dTZWxlY3Rvcj86IFJvd1NlbGVjdG9yQ29tcG9uZW50O1xuXHRAQ29udGVudENoaWxkcmVuKFBhZ2VGb3JtU2xvdERpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwYWdlRm9ybVNsb3RzITogUXVlcnlMaXN0PFBhZ2VGb3JtU2xvdERpcmVjdGl2ZT47XG5cdHNob3dMb2cgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxMb2coKSAmJiB0aGlzLnNpZGViYXJNb2RlKCkgPT09ICdyaWdodCc7XG5cdH0pO1xuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblx0Z3JpZExpc3QgPSBpbnB1dDxhbnlbXT4oW10pO1xuXHRmb3JtID0gaW5wdXQucmVxdWlyZWQ8Rm9ybU9wdGlvbnM+KHt9KTtcblx0Z2V0UHJtSW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxHZXQ+KHt9KTtcblx0c3RhdHVzU3RlcHMgPSBpbnB1dDxTdGVwW10+KFtdKTtcblx0c3RhdHVzS2V5ID0gaW5wdXQoJ3N0YXR1cycpO1xuXHRocmVmQnRuTGlzdCA9IGlucHV0PEhyZWZCdG5MaXN0W10+KFtdKTtcblx0c2V0VGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxQZXJtaXNzaW9uQnRuW10+KFtdKTtcblx0bW9kZWxMb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cdHNpZGViYXJNb2RlID0gc2lnbmFsPCdsZWZ0JyB8ICdyaWdodCc+KCdyaWdodCcpO1xuXHRmb3JtRGlzYWJsZWQgPSBpbnB1dDxGdW5jdGlvbj4oKTtcblx0c3RhdHVzQ29uZiA9IGlucHV0PGFueT4oKTtcblx0Zm9ybURldGFpbCA9IGlucHV0PGFueT4oKTtcblx0c2F2ZUZ1bmMgPSBpbnB1dDxhbnk+KCk7XG5cdHNob3dNYWluU2F2ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXHRjb25maWdOZXdQYXRoID0gaW5wdXQ8YW55PigpO1xuXHRydW50aW1lQ29udGV4dElucHV0ID0gaW5wdXQ8YW55Pih7fSk7XG5cdGN1c3RvbUxlZnRQYW5lbCA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1UZW1wbGF0ZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVDb250ZXh0Pj4gfCBudWxsPihudWxsKTtcblx0Y3VzdG9tTGlzdEZvcm1JbnN0YW5jZU1hcCA9IGlucHV0PFJlY29yZDxzdHJpbmcsIEN1c3RvbUxpc3REaWFsb2cgfCB1bmRlZmluZWQ+IHwgbnVsbD4obnVsbCk7XG5cdGxlZnRQYW5lbCA9IGlucHV0PFBhZ2VMZWZ0UGFuZWxDb25maWcgfCBudWxsPihudWxsKTtcblx0cGFuZWxTZWxlY3RlZERhdGEgPSBpbnB1dDxhbnk+KHt9KTtcblx0cnVudGltZUNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuXHRwcml2YXRlIGN1cnJlbnRJZEFuZE1vZGVsTmFtZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHt9O1xuXG5cdHVzZXJIaXN0b3J5U2VydmljZSA9IGluamVjdChVc2VySGlzdG9yeVNlcnZpY2UpO1xuXHRwYWdlRm9ybVNlcnZpY2UgPSBpbmplY3QoUGFnZUZvcm1TZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIF9pbmRleFZhbHVlID0gMDtcblx0cHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEdyaWRMaXN0ID0gc2lnbmFsPGFueVtdPihbXSk7XG5cdHByaXZhdGUgZ3JpZExpc3RPdmVycmlkZGVuID0gZmFsc2U7XG5cdHZpc2libGUgPSBmYWxzZTtcblx0ZGlhbG9nU2VhcmNoUHJtITogU2VhcmNoO1xuXHRzZWxlY3RPcHRpb25zITogR3JpZE9wdGlvbnM7XG5cdHNlbGVjdERhdGE6IGFueVtdID0gW107XG5cdHBhZ2VVcmwgPSAnJztcblx0bmV3VXJsID0gJyc7XG5cdGF1dGhMZXZlbCA9IGlucHV0PG51bWJlcj4oLTEpO1xuXHRocmVmczogYW55W10gPSBbXTtcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xuXHRzdWJGb3JtTW9kZWw6IGFueSA9IHt9O1xuXHRzYXZlQnRuRGlzYWJsZSA9IGZhbHNlO1xuXHRncmlkRGlzYWJsZSA9IGZhbHNlO1xuXHRzZWxlY3Rpb25LZXlzOiBhbnlbXSA9IFtdO1xuXHRzdWJEZWxldGVJZHM6IGFueVtdID0gW107XG5cdGxlZnRQYW5lbEl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRsZWZ0UGFuZWxUcmVlTm9kZXM6IFRyZWVOb2RlW10gPSBbXTtcblx0bGVmdFBhbmVsU2VsZWN0ZWROb2RlOiBUcmVlTm9kZSB8IG51bGwgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xuXHRsZWZ0UGFuZWxTZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG5cdGxlZnRQYW5lbEV4cGFuZGVkS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0bGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBsZWZ0UGFuZWxJbml0aWFsaXplZE1vZGU6ICdsaXN0JyB8ICd0cmVlJyB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGJhc2VHcmlkTGlzdFNuYXBzaG90OiBhbnlbXSA9IFtdO1xuXG5cdHN0ZXBzVmlzaWJsZSA9IHRydWU7XG5cdHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RNYXAgPSBuZXcgTWFwPHN0cmluZywgUGFnZUZvcm1TbG90RGlyZWN0aXZlPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IHNsb3RDb250ZXh0TWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhZ2VGb3JtU2xvdENvbnRleHQ+KCk7XG5cdGN1cnJlbnRTZWxlY3RNb2RlbENvZGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRzbG90UmVuZGVyU3RhdGVzOiBBcnJheTx7XG5cdFx0c2xvdD86IFBhZ2VGb3JtU2xvdERpcmVjdGl2ZTtcblx0XHRjb250ZXh0OiBQYWdlRm9ybVNsb3RDb250ZXh0O1xuXHR9PiA9IFtdO1xuXG5cdGdldCBpbmRleFZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbmRleFZhbHVlO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybVRlbXBsYXRlKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRTZWxlY3RNb2RlbENvZGUgPSB0aGlzLmN1cnJlbnRTZWxlY3RNb2RlbENvZGU7XG5cdFx0aWYgKCFjdXJyZW50U2VsZWN0TW9kZWxDb2RlKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5jdXN0b21MaXN0Rm9ybVRlbXBsYXRlTWFwKCk/LltjdXJyZW50U2VsZWN0TW9kZWxDb2RlXSA/PyBudWxsO1xuXHR9XG5cblx0Z2V0IGN1cnJlbnRDdXN0b21MaXN0Rm9ybUNvbnRleHQoKTogQ3VzdG9tTGlzdEZvcm1UZW1wbGF0ZUNvbnRleHQge1xuXHRcdHJldHVybiB7IHBhZ2VGb3JtOiB0aGlzIH07XG5cdH1cblxuXHRnZXREaWFsb2dTZWxlY3RlZFJlc3VsdCgpIHtcblx0XHRjb25zdCBzZWxlY3RlZERhdGEgPSB0aGlzLnJvd1NlbGVjdG9yPy5nZXRTZWxlY3RlZERhdGEoKSA/PyBbXTtcblx0XHRyZXR1cm4gc2VsZWN0ZWREYXRhLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucz8uY29sdW1uRGVmcz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcblx0XHRcdFx0cmVzdWx0W2NvbC5maWVsZF0gPSBpdGVtW2NvbC5maWVsZF07XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSk7XG5cdH1cblxuXHRzZXRSdW50aW1lQ29udGV4dChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHR0aGlzLnJ1bnRpbWVDb250ZXh0ID0ge1xuXHRcdFx0Li4uKHRoaXMucnVudGltZUNvbnRleHQgfHwge30pLFxuXHRcdFx0Li4uZGF0YSxcblx0XHR9O1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0c2V0IGluZGV4VmFsdWUodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMuX2luZGV4VmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5zZXRTZWxlY3RlZFJvd3MoW10pO1xuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0fVxuXG5cdGdldCBncmlkcygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCk7XG5cdH1cblxuXHRzZXQgZ3JpZHModmFsdWU6IGFueVtdKSB7XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSB0cnVlO1xuXHRcdHRoaXMuaW50ZXJuYWxHcmlkTGlzdC5zZXQodmFsdWUgPz8gW10pO1xuXHRcdHRoaXMuc3luY1Vwc2VydFN1YnNlcnRzKCk7XG5cdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlZEdyaWRMaXN0KCkge1xuXHRcdGlmICh0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnRlcm5hbEdyaWRMaXN0KCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmdyaWRMaXN0T3ZlcnJpZGRlbiA/IHRoaXMuaW50ZXJuYWxHcmlkTGlzdCgpIDogdGhpcy5ncmlkTGlzdCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVXBzZXJ0U3Vic2VydHMoKSB7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnRzID0gdGhpcy51cHNlcnRQcm0uc3Vic2VydCB8fCBbXTtcblx0XHRjb25zdCBzdWJzZXJ0TWFwID0gbmV3IE1hcChjdXJyZW50U3Vic2VydHMubWFwKChpdGVtKSA9PiBbaXRlbS5zdWJNb2RlbE5hbWUsIGl0ZW1dKSk7XG5cdFx0Y29uc3QgbmV4dFN1YnNlcnRzID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzdWJNb2RlbE5hbWUgPSBpdGVtLnR5cGUgPT09ICdncmlkJyA/IGl0ZW0uZ3JpZE9wdGlvbnM/Lm1vZGVsTmFtZSA6IGl0ZW1bJ21vZGVsTmFtZSddO1xuXHRcdFx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnQgPSBzdWJzZXJ0TWFwLmdldChzdWJNb2RlbE5hbWUpO1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGN1cnJlbnQgfHwge1xuXHRcdFx0XHRcdFx0c3ViTW9kZWxOYW1lLFxuXHRcdFx0XHRcdFx0Zms6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8uZmsgfHwgaXRlbS5mayA6IGl0ZW0uZmssXG5cdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcblx0XHRcdFx0XHRcdG1hcHRtcDogbmV3IE1hcCgpLFxuXHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXG5cdFx0XHRcdFx0XHRyZWZlcmVuY2U6IGl0ZW0udHlwZSA9PT0gJ2dyaWQnID8gaXRlbS5ncmlkT3B0aW9ucz8ucmVmZXJlbmNlIHx8IGl0ZW0ucmVmZXJlbmNlIDogaXRlbS5yZWZlcmVuY2UsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgYW55W107XG5cdFx0dGhpcy51cHNlcnRQcm0uc3Vic2VydCA9IG5leHRTdWJzZXJ0cztcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRvblJlc2l6ZSgpIHtcblx0XHR0aGlzLnNpZGViYXJNb2RlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQgPyAnbGVmdCcgOiAncmlnaHQnKTtcblx0fVxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuaWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJykpO1xuXHRcdHRoaXMucGFnZVVybCA9IHRoaXMucm91dGUuc25hcHNob3QudXJsXG5cdFx0XHQubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnBhdGgpXG5cdFx0XHQuam9pbignLycpXG5cdFx0XHQucmVwbGFjZSgvKFteXFwvXSopJC8sICcnKTtcblx0XHR0aGlzLm5ld1VybCA9IGAke3RoaXMucGFnZVVybH1uZXdgO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0dGhpcy5tb2RlbE5hbWUgPSB0aGlzLmdldFBybUlucHV0KCkubW9kZWxOYW1lITtcblx0XHRcdFx0dGhpcy5nZXRQcm0gPSB7IC4uLnRoaXMuZ2V0UHJtSW5wdXQoKSB9O1xuXHRcdFx0XHR0aGlzLmlkICYmICh0aGlzLmdldFBybS5pZCA9IHRoaXMuaWQpO1xuXHRcdFx0XHRpZiAodGhpcy5pZCAmJiB0aGlzLm1vZGVsTmFtZSAmJiAhdGhpcy5sZWZ0UGFuZWwoKT8uZW5hYmxlZCkge1xuXHRcdFx0XHRcdHR5cGVvZiB0aGlzLmZvcm1EZXRhaWwoKSA9PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtRGV0YWlsKCkodGhpcy5pZCkgOiB0aGlzLmdldERldGFpbCgxKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmdldFBybS5kYXRhID0ge307XG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHYudHlwZSA9PSAnZ3JpZCcpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YVt2LnN1YkRhdGFLZXldID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHR0aGlzLmZvcm1PcHRpb25zID0gdGhpcy5idWlsZEZvcm1PcHRpb25zKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVDb250ZXh0SW5wdXQoKSB8fCB7fTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNMb2cgPSB0aGlzLm1vZGVsTG9nKCk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuc3RhdHVzU3RlcHMoKS5sZW5ndGggPiAwICYmICF0aGlzLmlkKSB7XG5cdFx0XHRcdFx0dGhpcy51cHNlcnRQcm0uYWRkRGF0YSFbdGhpcy5zdGF0dXNLZXkoKV0gPSB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ107XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5nZXRQcm0uZGF0YSB8fCB7fSwge1xuXHRcdFx0XHRcdFx0W3RoaXMuc3RhdHVzS2V5KCldOiB0aGlzLnN0YXR1c1N0ZXBzKClbMF1bJ3ZhbHVlJ10sXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0dGhpcy5yZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpO1xuXHRcdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRoTGV2ZWwoKSA8IDMpIHtcblx0XHRcdFx0XHR0aGlzLnNldERpc2FibGVkKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0XHRlZmZlY3QoXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlucHV0R3JpZExpc3QgPSB0aGlzLmdyaWRMaXN0KCk7XG5cdFx0XHRcdGlmICghdGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4pIHtcblx0XHRcdFx0XHQvLyB0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KFtdKTtcblx0XHRcdFx0XHR0aGlzLnN5bmNVcHNlcnRTdWJzZXJ0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSBkZWVwQ2xvbmUoaW5wdXRHcmlkTGlzdCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LFxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdCk7XG5cdFx0ZWZmZWN0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0XHRcdGlmICghcGFuZWw/LmVuYWJsZWQpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgY3VycmVudE1vZGUgPSB0aGlzLmdldExlZnRQYW5lbE1vZGUoKTtcblx0XHRcdFx0aWYgKHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgJiYgdGhpcy5sZWZ0UGFuZWxJbml0aWFsaXplZE1vZGUgPT09IGN1cnJlbnRNb2RlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAmJiB0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSAhPT0gY3VycmVudE1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLnJlc2V0TGVmdFBhbmVsU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsaXplTGVmdFBhbmVsKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXHR9XG5cblx0bmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHR0aGlzLnBhZ2VGb3JtU2xvdHMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMucmVidWlsZFNsb3RNYXAoKTtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy51cENiID0gdGhpcy51cENiLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHRcdHRoaXMuYmluZFBhZ2VGb3JtU2VydmljZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldExlZnRQYW5lbFN0YXRlKCkge1xuXHRcdHRoaXMubGVmdFBhbmVsSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IFtdO1xuXHRcdHRoaXMubGVmdFBhbmVsVHJlZU5vZGVzID0gW107XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZE5vZGUgPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gPSBudWxsO1xuXHRcdHRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzID0ge307XG5cdFx0dGhpcy5ncmlkTGlzdE92ZXJyaWRkZW4gPSBmYWxzZTtcblx0XHR0aGlzLmludGVybmFsR3JpZExpc3Quc2V0KHRoaXMuZ3JpZExpc3QoKSk7XG5cdFx0dGhpcy5zeW5jVXBzZXJ0U3Vic2VydHMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZUxlZnRQYW5lbCgpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbD8uZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkID0gdHJ1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbEluaXRpYWxpemVkTW9kZSA9IHRoaXMuZ2V0TGVmdFBhbmVsTW9kZSgpO1xuXHRcdHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QgPSB0aGlzLmdyaWRMaXN0KCkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0pO1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSW5pdCcpO1xuXHRcdGNvbnN0IGl0ZW1zID0gYXdhaXQgdGhpcy5sb2FkTGVmdFBhbmVsSXRlbXMoZGF0YVNvdXJjZSk7XG5cdFx0dGhpcy5sZWZ0UGFuZWxJdGVtcyA9IGl0ZW1zO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uSXRlbXNMb2FkZWQnLCB7IGl0ZW1zIH0pO1xuXHRcdGlmICh0aGlzLmdldExlZnRQYW5lbE1vZGUoKSA9PT0gJ3RyZWUnKSB7XG5cdFx0XHR0aGlzLmluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5pbml0aWFsaXplTGVmdFBhbmVsTGlzdChpdGVtcywgZGF0YVNvdXJjZSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGluaXRpYWxpemVMZWZ0UGFuZWxMaXN0KGl0ZW1zOiBhbnlbXSwgZGF0YVNvdXJjZT86IFBhZ2VMZWZ0UGFuZWxEYXRhU291cmNlKSB7XG5cdFx0bGV0IGRlZmF1bHRWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZU1heWJlQXN5bmMoXG5cdFx0XHR0eXBlb2YgZGF0YVNvdXJjZT8uZGVmYXVsdFNlbGVjdCA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UuZGVmYXVsdFNlbGVjdCh0aGlzLmNyZWF0ZUxlZnRQYW5lbEV2ZW50Q29udGV4dCh7IGl0ZW1zIH0pKVxuXHRcdFx0XHQ6IGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QsXG5cdFx0KTtcblx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGRlZmF1bHRWYWx1ZSk7XG5cdFx0fVxuXHRcdGlmICgoZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgfHwgZGVmYXVsdFZhbHVlID09PSBudWxsKSAmJiB0aGlzLmdldFBhbmVsQWxsb3dEZXNlbGVjdCgpID09PSBmYWxzZSAmJiBpdGVtcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW1zWzBdKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihkZWZhdWx0VmFsdWUsIGl0ZW1zLmZpbmQoKGl0ZW0pID0+IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSkgPT09IGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgbG9hZExlZnRQYW5lbEl0ZW1zKGRhdGFTb3VyY2U/OiBQYWdlTGVmdFBhbmVsRGF0YVNvdXJjZSkge1xuXHRcdGlmICghZGF0YVNvdXJjZSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRsZXQgcmVzdWx0ID1cblx0XHRcdHR5cGVvZiBkYXRhU291cmNlLmxvYWRlciA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHQ/IGRhdGFTb3VyY2UubG9hZGVyKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpXG5cdFx0XHRcdDogKGRhdGFTb3VyY2UubG9hZGVyID8/IGRhdGFTb3VyY2Uub3B0aW9ucyA/PyBbXSk7XG5cdFx0cmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlTWF5YmVBc3luYyhyZXN1bHQpO1xuXHRcdGlmIChkYXRhU291cmNlLnJlc3VsdFBhdGgpIHtcblx0XHRcdHJlc3VsdCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwocmVzdWx0LCBkYXRhU291cmNlLnJlc3VsdFBhdGgpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIGRhdGFTb3VyY2UudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRyZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKGRhdGFTb3VyY2UudHJhbnNmb3JtKHJlc3VsdCwgdGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogcmVzdWx0IH0pKSk7XG5cdFx0fVxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiBbXTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0TGVmdFBhbmVsTW9kZSgpOiAnbGlzdCcgfCAndHJlZScge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5tb2RlID09PSAndHJlZScgPyAndHJlZScgOiAnbGlzdCc7XG5cdH1cblxuXHRnZXRQYW5lbE9wdGlvbkxhYmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy5saXN0Py5vcHRpb25MYWJlbCB8fCB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5ub2RlTGFiZWwgfHwgJ2xhYmVsJztcblx0fVxuXG5cdGdldFBhbmVsT3B0aW9uVmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/Lm9wdGlvblZhbHVlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/Lm5vZGVWYWx1ZSB8fCAndmFsdWUnO1xuXHR9XG5cblx0Z2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5hbGxvd0Rlc2VsZWN0ID8/IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmFsbG93RGVzZWxlY3QgPz8gdHJ1ZTtcblx0fVxuXG5cdGdldFBhbmVsRW1wdHlNZXNzYWdlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5lbXB0eU1lc3NhZ2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8ubGlzdD8uZW1wdHlNZXNzYWdlIHx8IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmVtcHR5TWVzc2FnZSB8fCAn5pqC5peg5pWw5o2uJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0UGFuZWxEYXRhU291cmNlKCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy5kYXRhU291cmNlIHx8IHRoaXMubGVmdFBhbmVsKCk/Lmxpc3Q/LmRhdGFTb3VyY2UgfHwgdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGF0YVNvdXJjZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUNoaWxkcmVuRmllbGQoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmNoaWxkcmVuRmllbGQgfHwgJ2NoaWxkcmVuJztcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LnBhcmVudFNlbGVjdGFibGUgPz8gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUV4cGFuZGVkS2V5c1N0YXRlS2V5KCkge1xuXHRcdHJldHVybiB0aGlzLmxlZnRQYW5lbCgpPy50cmVlPy5leHBhbmRlZEtleXNTdGF0ZUtleTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VHJlZUZpZWxkVmFsdWUoaXRlbTogYW55LCBmaWVsZD86IHN0cmluZykge1xuXHRcdGlmICghZmllbGQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKGl0ZW0sIGZpZWxkKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZU1heWJlQXN5bmModmFsdWU6IGFueSkge1xuXHRcdGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20odmFsdWUpO1xuXHRcdH1cblx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmFsdWU7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGFnZUZvcm06IHRoaXMsXG5cdFx0XHRtb2RlOiB0aGlzLmdldExlZnRQYW5lbE1vZGUoKSxcblx0XHRcdHNlbGVjdGVkSXRlbTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRzZWxlY3RlZFZhbHVlOiB0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUsXG5cdFx0XHRpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyxcblx0XHRcdGdldFBybTogdGhpcy5nZXRQcm0sXG5cdFx0XHRncmlkTGlzdDogdGhpcy5yZXNvbHZlZEdyaWRMaXN0KCksXG5cdFx0XHRiYXNlR3JpZExpc3Q6IHRoaXMuYmFzZUdyaWRMaXN0U25hcHNob3QsXG5cdFx0XHRwYW5lbFNlbGVjdGVkRGF0YTogdGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0sXG5cdFx0XHRydW50aW1lQ29udGV4dDogdGhpcy5ydW50aW1lQ29udGV4dCxcblx0XHRcdHNldFN0YXRlOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmdldFBybS5kYXRhKSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZpZWxkVXRpbHMuc2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9LFxuXHRcdFx0Li4uZXh0cmEsXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgcnVuTGVmdFBhbmVsRXZlbnQoZXZlbnROYW1lOiBrZXlvZiBOb25OdWxsYWJsZTxQYWdlTGVmdFBhbmVsQ29uZmlnWydldmVudHMnXT4sIGV4dHJhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pIHtcblx0XHRjb25zdCBoYW5kbGVyID0gdGhpcy5sZWZ0UGFuZWwoKT8uZXZlbnRzPy5bZXZlbnROYW1lXTtcblx0XHRpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmV0dXJuIGhhbmRsZXIodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoZXh0cmEpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUob3B0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0UGFuZWxPcHRpb25WYWx1ZSgpO1xuXHRcdGlmICghb3B0aW9uVmFsdWUpIHtcblx0XHRcdHJldHVybiBvcHRpb247XG5cdFx0fVxuXHRcdHJldHVybiBmaWVsZFV0aWxzLmdldE1vZGVsKG9wdGlvbiwgb3B0aW9uVmFsdWUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFNpbmdsZVNlbGVjdExpc3Rib3hDaGFuZ2VFdmVudCkge1xuXHRcdGlmIChldmVudC52YWx1ZSA9PSBudWxsICYmIHRoaXMuZ2V0UGFuZWxBbGxvd0Rlc2VsZWN0KCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFNlbGVjdGlvbihldmVudC52YWx1ZSwgZXZlbnQub3B0aW9uKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxTZWxlY3Rpb24odmFsdWU6IGFueSwgb3B0aW9uPzogYW55KSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICdsaXN0Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb24gPz8gdGhpcy5sZWZ0UGFuZWxJdGVtcy5maW5kKChpdGVtKSA9PiB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKGl0ZW0pID09PSB2YWx1ZSkgPz8gbnVsbDtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkSXRlbSA9IHNlbGVjdGVkSXRlbTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZSh2YWx1ZSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZTogdmFsdWUsXG5cdFx0XHRub2RlOiBudWxsLFxuXHRcdFx0cmF3Tm9kZTogbnVsbCxcblx0XHRcdGlzUGFyZW50OiBmYWxzZSxcblx0XHRcdGlzTGVhZjogdHJ1ZSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgc3luY0dldFBybUZpdGVyUHJlbG9hZHMoKSB7XG5cdFx0Y29uc3QgZml0ZXJQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZsYXRNYXAoKGl0ZW06IGFueSkgPT4gKEFycmF5LmlzQXJyYXkoaXRlbT8uZml0ZXJQcmVsb2FkcykgPyBpdGVtLmZpdGVyUHJlbG9hZHMgOiBbXSkpO1xuXHRcdHRoaXMuZ2V0UHJtLmZpdGVyUHJlbG9hZHMgPSBmaXRlclByZWxvYWRzO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jR2V0UHJtRm9yQ3VycmVudFZpZXcoKSB7XG5cdFx0aWYgKCF0aGlzLmxlZnRQYW5lbCgpPy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRQcmVsb2FkcyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LnN1YkRhdGFLZXkpXG5cdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+ICEhaXRlbSk7XG5cdFx0aWYgKGN1cnJlbnRQcmVsb2Fkcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLmdldFBybS5wcmVsb2FkcyA9IGN1cnJlbnRQcmVsb2Fkcztcblx0XHR9XG5cdFx0dGhpcy5zeW5jR2V0UHJtRml0ZXJQcmVsb2FkcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jTGVmdFBhbmVsU2VsZWN0aW9uU3RhdGUodmFsdWU6IGFueSwgc2VsZWN0ZWRJdGVtOiBhbnkpIHtcblx0XHRjb25zdCBwYW5lbCA9IHRoaXMubGVmdFBhbmVsKCk7XG5cdFx0aWYgKCFwYW5lbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoIXRoaXMuZ2V0UHJtLmRhdGEpIHtcblx0XHRcdHRoaXMuZ2V0UHJtLmRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKHBhbmVsLnN0YXRlS2V5KSB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHBhbmVsLnN0YXRlS2V5LCB2YWx1ZSk7XG5cdFx0fVxuXHRcdGlmIChwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSkge1xuXHRcdFx0ZmllbGRVdGlscy5zZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBwYW5lbC5wYW5lbFNlbGVjdGVkRGF0YUtleSwgc2VsZWN0ZWRJdGVtKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGluaXRpYWxpemVMZWZ0UGFuZWxUcmVlKGl0ZW1zOiBhbnlbXSkge1xuXHRcdGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLnJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cyA9IGV4cGFuZGVkU3RhdGUgfHwge307XG5cdFx0dGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMgPSB0aGlzLmJ1aWxkVHJlZU5vZGVzKGl0ZW1zKTtcblx0XHR2b2lkIHRoaXMuYXBwbHlUcmVlRGVmYXVsdFNlbGVjdGlvbigpO1xuXHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlcyhpdGVtczogYW55W10sIHBhcmVudEtleSA9ICdyb290Jyk6IFRyZWVOb2RlW10ge1xuXHRcdGNvbnN0IGNoaWxkcmVuRmllbGQgPSB0aGlzLmdldFRyZWVDaGlsZHJlbkZpZWxkKCk7XG5cdFx0Y29uc3QgaWNvbkZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uaWNvbkZpZWxkO1xuXHRcdGNvbnN0IGxlYWZGaWVsZCA9IHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmxlYWZGaWVsZDtcblx0XHRjb25zdCBkaXNhYmxlZEZpZWxkID0gdGhpcy5sZWZ0UGFuZWwoKT8udHJlZT8uZGlzYWJsZWRGaWVsZDtcblx0XHRyZXR1cm4gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5idWlsZFRyZWVOb2RlS2V5KGl0ZW0sIHBhcmVudEtleSwgaW5kZXgpO1xuXHRcdFx0Y29uc3QgY2hpbGRJdGVtcyA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgY2hpbGRyZW5GaWVsZCk7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRJdGVtcykgPyB0aGlzLmJ1aWxkVHJlZU5vZGVzKGNoaWxkSXRlbXMsIGtleSkgOiBbXTtcblx0XHRcdGNvbnN0IGlzTGVhZiA9IGxlYWZGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBsZWFmRmllbGQpIDogY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xuXHRcdFx0Y29uc3QgaXNQYXJlbnQgPSBjaGlsZHJlbi5sZW5ndGggPiAwO1xuXHRcdFx0Y29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSB8fCAhaXNQYXJlbnQ7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRrZXksXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnJlc29sdmVUcmVlTm9kZUxhYmVsKGl0ZW0pLFxuXHRcdFx0XHRkYXRhOiBpdGVtLFxuXHRcdFx0XHRjaGlsZHJlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCA/IGNoaWxkcmVuIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsZWFmOiBpc0xlYWYsXG5cdFx0XHRcdGV4cGFuZGVkOiB0aGlzLnNob3VsZEV4cGFuZFRyZWVOb2RlKGtleSwgaXNQYXJlbnQpLFxuXHRcdFx0XHRzZWxlY3RhYmxlLFxuXHRcdFx0XHRkaXNhYmxlZDogZGlzYWJsZWRGaWVsZCA/ICEhdGhpcy5nZXRUcmVlRmllbGRWYWx1ZShpdGVtLCBkaXNhYmxlZEZpZWxkKSA6IGZhbHNlLFxuXHRcdFx0XHRpY29uOiBpY29uRmllbGQgPyB0aGlzLmdldFRyZWVGaWVsZFZhbHVlKGl0ZW0sIGljb25GaWVsZCkgOiB1bmRlZmluZWQsXG5cdFx0XHR9IGFzIFRyZWVOb2RlO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFRyZWVOb2RlS2V5KGl0ZW06IGFueSwgcGFyZW50S2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoaXRlbSk7XG5cdFx0cmV0dXJuIGAke3BhcmVudEtleX0tJHt2YWx1ZSA/PyBpbmRleH1gO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlVHJlZU5vZGVMYWJlbChpdGVtOiBhbnkpIHtcblx0XHRjb25zdCBsYWJlbCA9IGZpZWxkVXRpbHMuZ2V0TW9kZWwoaXRlbSwgdGhpcy5nZXRQYW5lbE9wdGlvbkxhYmVsKCkpO1xuXHRcdHJldHVybiBsYWJlbCA9PSBudWxsID8gJycgOiBTdHJpbmcobGFiZWwpO1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRFeHBhbmRUcmVlTm9kZShrZXk6IHN0cmluZywgaXNQYXJlbnQ6IGJvb2xlYW4pIHtcblx0XHRpZiAoIWlzUGFyZW50KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChPYmplY3Qua2V5cyh0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5cykubGVuZ3RoID4gMCkge1xuXHRcdFx0cmV0dXJuICEhdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGVmdFBhbmVsKCk/LnRyZWU/LmRlZmF1bHRFeHBhbmQgPz8gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHJlYWRUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKSB7XG5cdFx0Y29uc3Qgc3RhdGVLZXkgPSB0aGlzLmdldFRyZWVFeHBhbmRlZEtleXNTdGF0ZUtleSgpO1xuXHRcdGlmICghc3RhdGVLZXkpIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdFx0cmV0dXJuIGZpZWxkVXRpbHMuZ2V0TW9kZWwodGhpcy5nZXRQcm0uZGF0YSwgc3RhdGVLZXkpIHx8IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBzeW5jVHJlZUV4cGFuZGVkS2V5c1N0YXRlKCkge1xuXHRcdGNvbnN0IHN0YXRlS2V5ID0gdGhpcy5nZXRUcmVlRXhwYW5kZWRLZXlzU3RhdGVLZXkoKTtcblx0XHRpZiAoIXN0YXRlS2V5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICghdGhpcy5nZXRQcm0uZGF0YSkge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIHN0YXRlS2V5LCB7IC4uLnRoaXMubGVmdFBhbmVsRXhwYW5kZWRLZXlzIH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBhcHBseVRyZWVEZWZhdWx0U2VsZWN0aW9uKCkge1xuXHRcdGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLmdldFBhbmVsRGF0YVNvdXJjZSgpO1xuXHRcdGxldCBkZWZhdWx0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVNYXliZUFzeW5jKFxuXHRcdFx0dHlwZW9mIGRhdGFTb3VyY2U/LmRlZmF1bHRTZWxlY3QgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0PyBkYXRhU291cmNlLmRlZmF1bHRTZWxlY3QodGhpcy5jcmVhdGVMZWZ0UGFuZWxFdmVudENvbnRleHQoeyBpdGVtczogdGhpcy5sZWZ0UGFuZWxJdGVtcyB9KSlcblx0XHRcdFx0OiBkYXRhU291cmNlPy5kZWZhdWx0U2VsZWN0LFxuXHRcdCk7XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSAmJiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSAnb2JqZWN0JyAmJiAhKCdrZXknIGluIGRlZmF1bHRWYWx1ZSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZVBhbmVsT3B0aW9uVmFsdWUoZGVmYXVsdFZhbHVlKTtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRWYWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpPy5rZXkgPz8gbnVsbDtcblx0XHR9XG5cdFx0aWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlc29sdmVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24oZGVmYXVsdFZhbHVlKTtcblx0XHRjb25zdCBuZXh0Tm9kZSA9IHRoaXMuaXNTZWxlY3RhYmxlVHJlZU5vZGUocmVzb2x2ZWROb2RlKVxuXHRcdFx0PyByZXNvbHZlZE5vZGVcblx0XHRcdDogdGhpcy5maW5kRmlyc3RTZWxlY3RhYmxlVHJlZU5vZGUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMpO1xuXHRcdGlmIChuZXh0Tm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obmV4dE5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGVzOiBUcmVlTm9kZVtdKTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcblx0XHRcdGlmICh0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMuZmluZEZpcnN0U2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUuY2hpbGRyZW4pO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVUcmVlTm9kZUJ5U2VsZWN0aW9uKHNlbGVjdGlvbjogYW55KTogVHJlZU5vZGUgfCBudWxsIHtcblx0XHRpZiAoc2VsZWN0aW9uICYmIHR5cGVvZiBzZWxlY3Rpb24gPT09ICdvYmplY3QnICYmICdrZXknIGluIHNlbGVjdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZmluZFRyZWVOb2RlQnlLZXkodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbi5rZXkpID8/IG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmZpbmRUcmVlTm9kZUJ5VmFsdWUodGhpcy5sZWZ0UGFuZWxUcmVlTm9kZXMsIHNlbGVjdGlvbik7XG5cdH1cblxuXHRwcml2YXRlIGZpbmRUcmVlTm9kZUJ5VmFsdWUobm9kZXM6IFRyZWVOb2RlW10sIHZhbHVlOiBhbnkpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0Y29uc3Qgbm9kZVZhbHVlID0gdGhpcy5yZXNvbHZlUGFuZWxPcHRpb25WYWx1ZShub2RlLmRhdGEpO1xuXHRcdFx0aWYgKG5vZGVWYWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeVZhbHVlKG5vZGUuY2hpbGRyZW4sIHZhbHVlKTtcblx0XHRcdFx0aWYgKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBmaW5kVHJlZU5vZGVCeUtleShub2RlczogVHJlZU5vZGVbXSwga2V5OiBzdHJpbmcpOiBUcmVlTm9kZSB8IG51bGwge1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUua2V5ID09PSBrZXkpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5maW5kVHJlZU5vZGVCeUtleShub2RlLmNoaWxkcmVuLCBrZXkpO1xuXHRcdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGlzVHJlZVBhcmVudE5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0cmV0dXJuICEhbm9kZT8uY2hpbGRyZW4/Lmxlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgaXNTZWxlY3RhYmxlVHJlZU5vZGUobm9kZTogVHJlZU5vZGUgfCBudWxsKSB7XG5cdFx0aWYgKCFub2RlIHx8IChub2RlIGFzIGFueSkuZGlzYWJsZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZ2V0VHJlZVBhcmVudFNlbGVjdGFibGUoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhdGhpcy5pc1RyZWVQYXJlbnROb2RlKG5vZGUpO1xuXHR9XG5cblx0YXN5bmMgb25MZWZ0UGFuZWxUcmVlTm9kZVNlbGVjdChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qgbm9kZSA9IGV2ZW50Py5ub2RlID8/IG51bGw7XG5cdFx0aWYgKCF0aGlzLmlzU2VsZWN0YWJsZVRyZWVOb2RlKG5vZGUpKSB7XG5cdFx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkTm9kZSA9IHRoaXMucmVzb2x2ZVRyZWVOb2RlQnlTZWxlY3Rpb24odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZFZhbHVlKTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0YXdhaXQgdGhpcy5hcHBseUxlZnRQYW5lbFRyZWVTZWxlY3Rpb24obm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0b25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZChldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmxlZnRQYW5lbEV4cGFuZGVkS2V5c1trZXldID0gdHJ1ZTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdG9uTGVmdFBhbmVsVHJlZU5vZGVDb2xsYXBzZShldmVudDogeyBub2RlOiBUcmVlTm9kZSB9KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQ/Lm5vZGU/LmtleTtcblx0XHRpZiAoIWtleSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5sZWZ0UGFuZWxFeHBhbmRlZEtleXNba2V5XTtcblx0XHR0aGlzLnN5bmNUcmVlRXhwYW5kZWRLZXlzU3RhdGUoKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYXBwbHlMZWZ0UGFuZWxUcmVlU2VsZWN0aW9uKG5vZGU6IFRyZWVOb2RlKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLmxlZnRQYW5lbCgpO1xuXHRcdGlmICghcGFuZWw/LmVuYWJsZWQgfHwgdGhpcy5nZXRMZWZ0UGFuZWxNb2RlKCkgIT09ICd0cmVlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByYXdOb2RlID0gbm9kZS5kYXRhO1xuXHRcdGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJlc29sdmVQYW5lbE9wdGlvblZhbHVlKHJhd05vZGUpO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWROb2RlID0gbm9kZTtcblx0XHR0aGlzLmxlZnRQYW5lbFNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xuXHRcdHRoaXMubGVmdFBhbmVsU2VsZWN0ZWRJdGVtID0gcmF3Tm9kZTtcblx0XHR0aGlzLnN5bmNMZWZ0UGFuZWxTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFZhbHVlLCByYXdOb2RlKTtcblx0XHR0aGlzLmluZGV4VmFsdWUgPSAwO1xuXHRcdHRoaXMucnVuTGVmdFBhbmVsRXZlbnQoJ29uU2VsZWN0aW9uQ2hhbmdlJywge1xuXHRcdFx0c2VsZWN0ZWRJdGVtOiByYXdOb2RlLFxuXHRcdFx0c2VsZWN0ZWRWYWx1ZSxcblx0XHRcdG5vZGUsXG5cdFx0XHRyYXdOb2RlLFxuXHRcdFx0aXNQYXJlbnQ6IHRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHRcdGlzTGVhZjogIXRoaXMuaXNUcmVlUGFyZW50Tm9kZShub2RlKSxcblx0XHR9KTtcblx0XHR0aGlzLnN5bmNHZXRQcm1GaXRlclByZWxvYWRzKCk7XG5cdFx0dGhpcy5mb3JtT3B0aW9ucyA9IHRoaXMuYnVpbGRGb3JtT3B0aW9ucygpO1xuXHRcdGlmICh0aGlzLmlkICYmIHRoaXMubW9kZWxOYW1lKSB7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoMik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRGb3JtT3B0aW9ucygpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc291cmNlRm9ybSA9IHRoaXMuZm9ybSgpO1xuXHRcdFx0Y29uc3QgZm9ybUZpZWxkcyA9IHNvdXJjZUZvcm0/LmZpZWxkcyA/IFsuLi5zb3VyY2VGb3JtLmZpZWxkc10gOiBbXTtcblx0XHRcdGNvbnN0IGZpcnN0RmllbGQgPSBmb3JtRmllbGRzWzBdXG5cdFx0XHRcdD8geyAuLi5mb3JtRmllbGRzWzBdLCBncm91cDogQXJyYXkuaXNBcnJheShmb3JtRmllbGRzWzBdLmdyb3VwKSA/IFsuLi5mb3JtRmllbGRzWzBdLmdyb3VwXSA6IFtdIH1cblx0XHRcdFx0OiB7IGdyb3VwQ2xhc3M6ICdmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCcsIGdyb3VwOiBbXSB9O1xuXHRcdFx0Zm9ybUZpZWxkc1swXSA9IGZpcnN0RmllbGQgYXMgYW55O1xuXHRcdFx0Y29uc3QgZm9ybU9wdGlvbnMgPSB7XG5cdFx0XHRcdC4uLnNvdXJjZUZvcm0sXG5cdFx0XHRcdGZpZWxkczogZm9ybUZpZWxkcyxcblx0XHRcdH07XG5cdFx0XHRjb25zdCBhcHBlbmRHcm91cHMgPSB0aGlzLnJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKTtcblx0XHRcdGNvbnN0IG1haW5Hcm91cCA9IGZvcm1PcHRpb25zPy5maWVsZHM/LlswXT8uZ3JvdXA7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShtYWluR3JvdXApICYmIGFwcGVuZEdyb3Vwcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvcm1PcHRpb25zLmZpZWxkc1swXS5ncm91cCA9IFsuLi5tYWluR3JvdXAsIC4uLmFwcGVuZEdyb3Vwc107XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybU9wdGlvbnM7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ2J1aWxkRm9ybU9wdGlvbnMg5omn6KGM5aSx6LSl77yM5Zue6YCA5Yiw5Y6f5aeL6KGo5Y2V6YWN572uOicsIGVycm9yKTtcblx0XHRcdHJldHVybiB0aGlzLmZvcm0oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlc29sdmVMZWZ0UGFuZWxBcHBlbmRHcm91cHMoKSB7XG5cdFx0Y29uc3QgYXBwZW5kR3JvdXBzID0gdGhpcy5sZWZ0UGFuZWwoKT8uYXBwZW5kR3JvdXBzO1xuXHRcdGlmICghYXBwZW5kR3JvdXBzKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0eXBlb2YgYXBwZW5kR3JvdXBzID09PSAnZnVuY3Rpb24nID8gYXBwZW5kR3JvdXBzKHRoaXMuY3JlYXRlTGVmdFBhbmVsRXZlbnRDb250ZXh0KCkpIDogYXBwZW5kR3JvdXBzO1xuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKVxuXHRcdFx0XHQ/IGRlZXBDbG9uZShwYXJzZWQsIHRoaXMpLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuXHRcdFx0XHRcdFx0Li4uaXRlbSxcblx0XHRcdFx0XHRcdGV4dHJhOiB7XG5cdFx0XHRcdFx0XHRcdC4uLihpdGVtPy5leHRyYSB8fCB7fSksXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXlPbmx5OiB0cnVlLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0OiBbXTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc29sZS5lcnJvcignbGVmdFBhbmVsLmFwcGVuZEdyb3VwcyDmiafooYzlpLHotKU6JywgZXJyb3IpO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbWVyZ2VEZXRhaWxXaXRoTGVmdFBhbmVsKGRldGFpbDogYW55KSB7XG5cdFx0Y29uc3QgbWVyZ2VkRGV0YWlsID0ge1xuXHRcdFx0Li4uZGV0YWlsLFxuXHRcdFx0Li4uKHRoaXMucGFuZWxTZWxlY3RlZERhdGEoKSB8fCB7fSksXG5cdFx0XHQuLi4odGhpcy5sZWZ0UGFuZWxTZWxlY3RlZEl0ZW0gfHwge30pLFxuXHRcdH07XG5cdFx0Y29uc3QgbWVyZ2VkUmVzdWx0ID0gdGhpcy5ydW5MZWZ0UGFuZWxFdmVudCgnb25EZXRhaWxNZXJnZScsIHsgZGV0YWlsLCBtZXJnZWREZXRhaWwgfSk7XG5cdFx0cmV0dXJuIG1lcmdlZFJlc3VsdCA9PT0gdW5kZWZpbmVkID8gbWVyZ2VkRGV0YWlsIDogbWVyZ2VkUmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBiaW5kUGFnZUZvcm1TZXJ2aWNlKCkge1xuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGEkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblx0XHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnVwZGF0ZURhdGFCeUtleSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoeyBrZXksIHZhbHVlIH0pID0+IHtcblx0XHRcdHRoaXMubWVyZ2VVcHNlcnQodmFsdWUgYXMgUGF5bG9hZFVwc2VydCk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc3luY1N1YkZvcm1Nb2RlbEZyb21EYXRhKCkge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKGdyaWQpID0+IHtcblx0XHRcdGlmIChncmlkLnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdGNvbnN0IGZvcm1EYXRhID0gdGhpcy5nZXRQcm0uZGF0YT8uW2dyaWQuc3ViRGF0YUtleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGZvcm1EYXRhKSkge1xuXHRcdFx0XHRcdHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gPSBmb3JtRGF0YVswXSA/PyB7fTtcblx0XHRcdFx0fSBlbHNlIGlmIChmb3JtRGF0YSAmJiB0eXBlb2YgZm9ybURhdGEgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0dGhpcy5zdWJGb3JtTW9kZWxbZ3JpZC5zdWJEYXRhS2V5XSA9IGZvcm1EYXRhO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JpZC50eXBlID09ICdncmlkJyAmJiAhdGhpcy5nZXRQcm0uZGF0YT8uaGFzT3duUHJvcGVydHkoZ3JpZC5zdWJEYXRhS2V5KSkge1xuXHRcdFx0XHR0aGlzLmdldFBybS5kYXRhW2dyaWQuc3ViRGF0YUtleV0gPSBbXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHQvLyDmj5Lmp73nu4Tku7Yg5pu05pawdXBzZXJ0XG5cdHByaXZhdGUgbWVyZ2VVcHNlcnQocGF5bG9hZDogUGF5bG9hZFVwc2VydCkge1xuXHRcdGNvbnN0IHsgYWN0aW9uLCBmaWVsZCwgaGVhZGVyTmFtZSwgbmV3VmFsdWUsIG9sZFZhbHVlLCByZWNvcmRJbmRleCwgaW5kZXgsIGRhdGEsIHNlbGVjdE5hbWUgfSA9IHBheWxvYWQ7XG5cdFx0bGV0IHN1YiA9IHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQhW2luZGV4XTtcblx0XHRpZiAoYWN0aW9uID09ICdhZGQnKSB7XG5cdFx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbaW5kZXhdWydncmlkT3B0aW9ucyddWydtYWluRmllbGQnXTtcblx0XHRcdHN1YlsnbWFwdG1wJ10/LnNldChyZWNvcmRJbmRleCwgeyAuLi5kYXRhIH0pO1xuXHRcdFx0aWYgKGZpZWxkID09IG1haW5GaWVsZCkge1xuXHRcdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7IG5ld1ZhbHVlOiBuZXdWYWx1ZSwgaWQ6IDAsIGxhYmVsOiBoZWFkZXJOYW1lIH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZWRpdCcpIHtcblx0XHRcdGxldCBvOiBhbnk7XG5cdFx0XHRpZiAoc3ViWydtYXB0bXAnXT8uaGFzKHJlY29yZEluZGV4ISkpIHtcblx0XHRcdFx0byA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRPYmplY3QuYXNzaWduKG8sIHsgW2ZpZWxkXTogbmV3VmFsdWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvID0geyBpZDogZGF0YVsnaWQnXSwgW2ZpZWxkXTogbmV3VmFsdWUgfTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3ROYW1lKSB7XG5cdFx0XHRcdG9bc2VsZWN0TmFtZV0gPSBkYXRhW3NlbGVjdE5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0c3ViWydtYXB0bXAnXT8uc2V0KHJlY29yZEluZGV4ISwgbyk7XG5cdFx0XHRzdWJbJ2xvZ3RtcCddPy5zZXQocmVjb3JkSW5kZXghICsgZmllbGQhLCB7XG5cdFx0XHRcdG5ld1ZhbHVlOiBuZXdWYWx1ZSxcblx0XHRcdFx0b2xkVmFsdWU6IG9sZFZhbHVlLFxuXHRcdFx0XHRpZDogZGF0YVsnaWQnXSxcblx0XHRcdFx0bGFiZWw6IGhlYWRlck5hbWUsXG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcblx0XHRcdGlmIChzdWJbJ21hcHRtcCddPy5oYXMocmVjb3JkSW5kZXghKSkge1xuXHRcdFx0XHRsZXQgZGF0YSA9IHN1YlsnbWFwdG1wJ10/LmdldChyZWNvcmRJbmRleCEpO1xuXHRcdFx0XHRkYXRhW2ZpZWxkXSAmJiBkZWxldGUgZGF0YVtmaWVsZF07XG5cdFx0XHRcdGxldCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0XHRrZXlzLmxlbmd0aCA9PSAwICYmIHN1YlsnbWFwdG1wJ10/LmRlbGV0ZShyZWNvcmRJbmRleCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViWydsb2d0bXAnXT8uZ2V0KHJlY29yZEluZGV4ISArIGZpZWxkISkpIHtcblx0XHRcdFx0c3ViWydsb2d0bXAnXT8uZGVsZXRlKHJlY29yZEluZGV4ISArIGZpZWxkISk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBkdDogYW55W10gPSBbXTtcblx0XHRzdWJbJ21hcHRtcCddPy5mb3JFYWNoKCh2YWx1ZTogYW55LCBrZXk6IGFueSkgPT4ge1xuXHRcdFx0ZHQucHVzaCh2YWx1ZSk7XG5cdFx0fSk7XG5cdFx0c3ViWydzdWJEYXRhJ10gPSBkdDtcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0fVxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pMThuLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0dGhpcy5zdGVwc1Zpc2libGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuc3RlcHNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9LCAxMDApO1xuXHRcdH0pO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpOiBhbnkge1xuXHRcdGxldCBzdWJGb3JtID0gdHJ1ZTtcblx0XHRpZiAodGhpcy50YWJGb3JtLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMudGFiRm9ybS5mb3JFYWNoKChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmICghaXRlbS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdFx0c3ViRm9ybSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuY0Zvcm0udmFsaWRhdGUoKSAmJiBzdWJGb3JtKSB7XG5cdFx0XHRsZXQgY2I6IGFueSA9IHRoaXMuaWQgPT09IDAgPyBudWxsIDogdGhpcy51cENiO1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0eXBlb2YgdGhpcy5zYXZlRnVuYygpID09ICdmdW5jdGlvbicgPyB0aGlzLnNhdmVGdW5jKCkodGhpcy51cHNlcnRQcm0sIHRoaXMuaWQsIGNiKSA6IHRoaXMudXBzZXJ0KG51bGwsIGNiKTtcblx0XHR9XG5cdH1cblxuXHRkZWxSb3dzKGU6IGFueSkge1xuXHRcdGNvbnN0IGdyaWRUYWIgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdGNvbnN0IGRlbGV0ZUZ1bmMgPSBncmlkVGFiLmRlbGV0ZUZ1bmM7XG5cdFx0Y29uc3Qgc3ViVGFibGUgPSBncmlkVGFiLmdyaWRPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRjb25zdCBpZHMgPSBBcnJheS5pc0FycmF5KGUpID8gZSA6IFtlXTtcblxuXHRcdGxldCBwcm0gPSB7XG5cdFx0XHRtb2RlbE5hbWU6IHN1YlRhYmxlLFxuXHRcdFx0aWRzLFxuXHRcdH07XG5cdFx0bGV0IGRvbmVDYWxsZWQgPSBmYWxzZTtcblx0XHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdFx0aWYgKGRvbmVDYWxsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZG9uZUNhbGxlZCA9IHRydWU7XG5cdFx0XHR0eXBlb2YgdGhpcy5mb3JtRGV0YWlsKCkgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZm9ybURldGFpbCgpKHRoaXMuaWQpIDogdGhpcy5nZXREZXRhaWwoNCk7XG5cdFx0XHR0aGlzLmFjdGlvbi51cGRhdGVHcmlkQWN0aW9uKHsgdHlwZTogJ2RlbGV0ZScsIGRhdGE6IGlkcyB9KTtcblx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHR9O1xuXHRcdGlmICghZGVsZXRlRnVuYykge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHR0aGlzLndlYl9yZW1vdmUocHJtKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRkb25lKCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hY3Rpb24ubG9hZGluZy5zZXQodHJ1ZSk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBkZWxldGVGdW5jKGlkcywgZ3JpZFRhYiwgZG9uZSk7XG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVzdWx0LnN1YnNjcmliZSgoKSA9PiBkb25lKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR1cENiKHJlcz86IGFueSkge1xuXHRcdGlmIChyZXMuaWQgPT0gMCkge1xuXHRcdFx0dHlwZW9mIHRoaXMuZm9ybURldGFpbCgpID09ICdmdW5jdGlvbicgPyB0aGlzLmZvcm1EZXRhaWwoKSh0aGlzLmlkKSA6IHRoaXMuZ2V0RGV0YWlsKDUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0bGV0IGVkaXRVcmwgPSBgJHt0aGlzLnBhZ2VVcmx9JHtyZXMuaWR9YDtcblx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2VkaXRVcmxdKTtcblx0XHRcdH0sIDE1MDApO1xuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSk7XG5cdFx0dGhpcy5jRm9ybS5maW5hbGl6ZSgpO1xuXHR9XG5cdC8vIFRPRE8g5piv5ZCm6ZyA6KaB5pWw5o2u6L2s5o2i5Zue6LCD5Ye95pWwXG5cdG9uT2soZTogYW55KSB7XG5cdFx0Y29uc3QgZ3JpZCA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV07XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXS5zZWxlY3REYXRhID0gW107XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRsZXQgdW5pcXVlS2V5cyA9IFtdO1xuXHRcdFx0aWYgKGdyaWQudW5pcXVlRmllbGQpIHtcblx0XHRcdFx0Y29uc3Qgcm93RGF0YSA9IHRoaXMuY3VzdG9tR3JpZFxuXHRcdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdFx0LmFwaS5nZXRSZW5kZXJlZE5vZGVzKClcblx0XHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZygncm93RGF0YS0tLS0tJyxyb3dEYXRhKVxuXHRcdFx0XHR1bmlxdWVLZXlzID0gcm93RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtncmlkLnVuaXF1ZUZpZWxkIV0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY29uc29sZS5sb2coJ3VuaXF1ZUtleXMtLS0tLScsdW5pcXVlS2V5cywpXG5cdFx0XHRlLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb2JqID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyBncmlkLnNlbGVjdERhdGFDYihpdGVtKSA6IHsgLi4uaXRlbSB9O1xuXHRcdFx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCAmJiB1bmlxdWVLZXlzLmluY2x1ZGVzKG9ialtncmlkLnVuaXF1ZUZpZWxkIV0gfHwgJycpKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdyaWQuc2VsZWN0RGF0YSEucHVzaChvYmopO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldCh0cnVlKTtcblx0XHR9XG5cdFx0dGhpcy5hY3Rpb24udXBkYXRlR3JpZEFjdGlvbih7IHR5cGU6ICdhZGQnLCBkYXRhOiBncmlkLnNlbGVjdERhdGEgfSk7XG5cdFx0aWYgKCEhZ3JpZC5zbG90S2V5KSB7XG5cdFx0XHRjb25zdCB7IHN1YkRhdGFLZXkgfSA9IGdyaWQ7XG5cdFx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIGdyaWQuc2VsZWN0RGF0YSk7XG5cdFx0XHQvLyB0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0fVxuXHR9XG5cblx0b25DYW5jZWxTZWxlY3RlZChlOiBhbnkpIHtcblx0XHRjb25zdCBncmlkID0gdGhpcy5yZXNvbHZlZEdyaWRMaXN0KClbdGhpcy5pbmRleFZhbHVlXTtcblx0XHRsZXQgZGF0YXM6IGFueSA9IFtdO1xuXHRcdGUuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0gZ3JpZC5zZWxlY3REYXRhQ2IgPyB7IC4uLmdyaWQuc2VsZWN0RGF0YUNiKGl0ZW0pIH0gOiBpdGVtO1xuXHRcdFx0ZGF0YXMucHVzaChkYXRhKTtcblx0XHR9KTtcblx0XHRpZiAoZ3JpZC51bmlxdWVGaWVsZCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IGRhdGFzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2dyaWQudW5pcXVlRmllbGRdKTtcblx0XHRcdGNvbnN0IHJvd0RhdGEgPSB0aGlzLmN1c3RvbUdyaWRcblx0XHRcdFx0LmdldCh0aGlzLmluZGV4VmFsdWUpIVxuXHRcdFx0XHQuZ2V0R3JpZCgpXG5cdFx0XHRcdC5hcGkuZ2V0UmVuZGVyZWROb2RlcygpXG5cdFx0XHRcdC5tYXAoKG5vZGUpID0+IG5vZGUuZGF0YSk7XG5cdFx0XHRsZXQgZGVsZXRlZFJvd3MgPSByb3dEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PiBrZXlzLmluY2x1ZGVzKGl0ZW1bZ3JpZC51bmlxdWVGaWVsZF0pKTtcblx0XHRcdHRoaXMuc3ViRGVsZXRlSWRzID0gZGVsZXRlZFJvd3MubWFwKCh2OiBhbnkpID0+IHYuaWQpLmZpbHRlcigodjogYW55KSA9PiB2KTtcblx0XHRcdGNvbnN0IGlkTm90Um93cyA9IGRlbGV0ZWRSb3dzLmZpbHRlcigodjogYW55KSA9PiAhdi5pZCk7XG5cdFx0XHQvLyBjb25zb2xlLmxvZygnaWROb3RSb3dzLS0tLScsaWROb3RSb3dzKVxuXHRcdFx0Y29uc3QgZGVsZXRlTm9kZXM6IGFueSA9IFtdO1xuXHRcdFx0dGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmZvckVhY2hOb2RlKChub2RlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRsZXQgbWFpbiA9IG5vZGUuZGF0YVtncmlkLnVuaXF1ZUZpZWxkXTtcblx0XHRcdFx0XHRsZXQgaXNFeGl0ID0gaWROb3RSb3dzLmZpbmRJbmRleCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IG1haW4pO1xuXHRcdFx0XHRcdGlmIChpc0V4aXQgPiAtMSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlTm9kZXMucHVzaChub2RlLmRhdGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHQvLyBpZihkZWxldGVkSWRzLmxlbmd0aCA+IDApe1xuXHRcdFx0Ly8gXHR0aGlzLmRlbFJvd3MoZGVsZXRlZElkcylcblx0XHRcdC8vIH0gZWxzZSB7XG5cdFx0XHR0aGlzLmN1c3RvbUdyaWQuZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnNlbGVjdFJvd3NEZWxldGVkKGRlbGV0ZU5vZGVzKTtcblx0XHRcdC8vIH1cblx0XHR9XG5cdH1cblx0Z2V0RGV0YWlsKGluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc29sZS5sb2coYGdldERldGFpbDogJHtpbmRleH1gKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0fSk7XG5cdH1cblx0Ly8g6I635Y+W6K+m5oOF5Zue6LCDXG5cdGRldGFpbENiKHJlczogYW55KSB7XG5cdFx0dGhpcy5nZXRQcm0uZGF0YSA9IHJlcztcblx0XHR0aGlzLnVwZGF0ZVRpdGxlKHJlcyk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHRpZiAodHlwZW9mIHRoaXMuZm9ybURpc2FibGVkKCkgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0dGhpcy5mb3JtRGlzRnVuYygpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ocmVmQnRuTGlzdCgpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0SHJlZlZhbHVlKCk7XG5cdFx0fVxuXHRcdHRoaXMucmVmcmVzaFNsb3RSZW5kZXJTdGF0ZXMoKTtcblx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0fVxuXHRzZXRIcmVmVmFsdWUoKSB7XG5cdFx0dGhpcy5ocmVmQnRuTGlzdCgpLm1hcCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoQ291bnQnKSAmJiB0eXBlb2YgaXRlbS5zZWFyY2hDb3VudCA9PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRpdGVtLnNlYXJjaENvdW50LmNvbHVtbkZpbHRlcnMuZm9yRWFjaCgodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB2LmZpdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHR2LmZpdGVyID0gdi5maXRlcih0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLndlYl9zZWFyY2hDb3VudChpdGVtLnNlYXJjaENvdW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXHRcdFx0XHRcdGl0ZW0udmFsdWUgPSByZXMudG90YWxOdW0gfHwgMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0dXBkYXRlVGl0bGUocmVzOiBhbnkpIHtcblx0XHRsZXQgbWFpbkZpZWxkID0gdGhpcy5mb3JtKCkubWFpbkZpZWxkO1xuXHRcdGxldCB0aXRsZSA9IHJlc1ttYWluRmllbGQhXTtcblx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5zZXRMYXN0VGl0bGUodGl0bGUpO1xuXHR9XG5cdGRhdGFTb3VyY2VTaG93KCkge1xuXHRcdGNvbnN0IGdyaWQgPSB0aGlzLnJlc29sdmVkR3JpZExpc3QoKVt0aGlzLmluZGV4VmFsdWVdO1xuXHRcdHRoaXMuY3VycmVudFNlbGVjdE1vZGVsQ29kZSA9IGdyaWQ/LnNlbGVjdE1vZGVsQ29kZSB8fCBudWxsO1xuXHRcdGNvbnNvbGUubG9nKGBkYXRhU291cmNlU2hvd2AsIHRoaXMuZ3JpZExpc3QoKSx0aGlzLnJlc29sdmVkR3JpZExpc3QoKSlcblx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHt9O1xuXHRcdHRoaXMuc2VsZWN0T3B0aW9ucyA9IHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpW3RoaXMuaW5kZXhWYWx1ZV1bJ3NlbGVjdE9wdGlvbnMnXSE7XG5cdFx0aWYgKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KT8uc2VhcmNoUHJtKSB7XG5cdFx0XHRsZXQgc2VhcmNoUHJtID0gZGVlcENsb25lKCh0aGlzLnNlbGVjdE9wdGlvbnMgYXMgYW55KS5zZWFyY2hQcm0sIHRoaXMpO1xuXHRcdFx0c2VhcmNoUHJtLmNvbHVtbkZpbHRlcnM/LmZvckVhY2goKHY6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIHYuZml0ZXIgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHYuZml0ZXIgPSB2LmZpdGVyKG51bGwsIHRoaXMuZ2V0UHJtLmRhdGEgfHwgdGhpcy5jRm9ybS5tb2RlbCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmRpYWxvZ1NlYXJjaFBybSA9IHNlYXJjaFBybTtcblx0XHR9XG5cdFx0dGhpcy5kaWFsb2dTZWFyY2hQcm0ubW9kZWxOYW1lID0gdGhpcy5zZWxlY3RPcHRpb25zLm1vZGVsTmFtZTtcblx0XHRpZiAodGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGUpIHtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zdXBwcmVzc1Jvd0Rlc2VsZWN0aW9uID0gdHJ1ZTtcblx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbk1vZGU7XG5cdFx0XHRjb25zdCBpc1Jvd1NlbGVjdGFibGUgPSB0aGlzLnNlbGVjdE9wdGlvbnMuaXNSb3dTZWxlY3RhYmxlO1xuXHRcdFx0aWYgKHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlICE9ICdub25lJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uID0ge1xuXHRcdFx0XHRcdG1vZGU6IHRoaXMuc2VsZWN0T3B0aW9ucy5zZWxlY3Rpb25Nb2RlID09ICdzaW5nbGUnID8gJ3NpbmdsZVJvdycgOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGlzUm93U2VsZWN0YWJsZTogaXNSb3dTZWxlY3RhYmxlID8gaXNSb3dTZWxlY3RhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY29uc29sZS5sb2coJyF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uLS0tLS0nLCF0aGlzLnNlbGVjdE9wdGlvbnMucm93U2VsZWN0aW9uKVxuXHRcdGlmIChncmlkLnVuaXF1ZUZpZWxkKSB7XG5cdFx0XHRjb25zdCByb3dEYXRhID0gdGhpcy5jdXN0b21HcmlkXG5cdFx0XHRcdC5nZXQodGhpcy5pbmRleFZhbHVlKSFcblx0XHRcdFx0LmdldEdyaWQoKVxuXHRcdFx0XHQuYXBpLmdldFJlbmRlcmVkTm9kZXMoKVxuXHRcdFx0XHQubWFwKChub2RlKSA9PiBub2RlLmRhdGEpO1xuXHRcdFx0dGhpcy5zZWxlY3Rpb25LZXlzID0gcm93RGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bZ3JpZC51bmlxdWVGaWVsZCFdKSB8fCBbXTtcblx0XHRcdC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGlvbktleXMtLS0tJyx0aGlzLnNlbGVjdGlvbktleXMpXG5cdFx0XHRpZiAodHlwZW9mIHRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24gPT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbi5jaGVja2JveGVzID0gKHBhcmFtcykgPT4ge1xuXHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5ICE9ICcnXG5cdFx0XHRcdFx0XHRcdD8gcm93RGF0YS5maW5kKCh2OiBhbnkpID0+IHZbZ3JpZC51bmlxdWVGaWVsZF0gPT0gcGFyYW1zLmRhdGFbdGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkhXSlcblx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucy5yb3dTZWxlY3Rpb24pIHtcblx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLnJvd1NlbGVjdGlvbiA9IHtcblx0XHRcdFx0XHRtb2RlOiAnbXVsdGlSb3cnLFxuXHRcdFx0XHRcdGNoZWNrYm94ZXM6IChwYXJhbXMpID0+IHtcblx0XHRcdFx0XHRcdGxldCBpdGVtID1cblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RPcHRpb25zLmRhdGFLZXkgIT0gJydcblx0XHRcdFx0XHRcdFx0XHQ/IHJvd0RhdGEuZmluZCgodjogYW55KSA9PiB2W2dyaWQudW5pcXVlRmllbGRdID09IHBhcmFtcy5kYXRhW3RoaXMuc2VsZWN0T3B0aW9ucy5kYXRhS2V5IV0pXG5cdFx0XHRcdFx0XHRcdFx0OiByb3dEYXRhLmZpbmQoKHY6IGFueSkgPT4gdltncmlkLnVuaXF1ZUZpZWxkXSA9PSBwYXJhbXMuZGF0YS5pZCk7XG5cdFx0XHRcdFx0XHRpZiAoaXRlbSAmJiBpdGVtLmlkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0aW9uS2V5cyA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXHR9XG5cblx0Z29SdW4oZGF0YTogYW55KSB7XG5cdFx0aWYgKHR5cGVvZiBkYXRhLnVybCA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IHVybCA9IGRhdGEudXJsKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnd2FybicsIHN1bW1hcnk6ICdXYXJuJywgZGV0YWlsOiAn6K+36YWN572u6Lez6L2s6ZO+5o6lJyB9KTtcblx0XHR9XG5cdH1cblxuXHRhdXRoQ2xpY2soYnRuOiBhbnkpIHtcblx0XHRpZiAoYnRuLmhhc093blByb3BlcnR5KCdvbkNsaWNrJykpIHtcblx0XHRcdGJ0bi5vbkNsaWNrKHRoaXMuZ2V0UHJtLmRhdGEpO1xuXHRcdH1cblx0fVxuXHRzdGF0dXNDaGFuZ2UodmFsdWU6IGFueSwgY3VzdG9tU3RlcHM6IFN0ZXBzQ29tcG9uZW50KSB7XG5cdFx0aWYgKHRoaXMuYXV0aExldmVsKCkgPCA0IHx8ICF0aGlzLnN0YXR1c0NvbmYoKS5pc0NsaWNrKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGxldCBwYXJhbTogYW55ID0ge1xuXHRcdFx0XHRtb2RlbE5hbWU6IHRoaXMubW9kZWxOYW1lLFxuXHRcdFx0XHRkYXRhOiB7IGlkOiB0aGlzLmlkLCBbdGhpcy5zdGF0dXNLZXkoKV06IHZhbHVlIH0sXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRoaXMuaXNMb2cpIHtcblx0XHRcdFx0cGFyYW0ubG9nTW9kZWwgPSBgJHt0aGlzLm1vZGVsTmFtZX1Mb2dgO1xuXHRcdFx0XHRwYXJhbS5sb2cgPSB7XG5cdFx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGBb54q25oCBXSAke3RoaXMuZ2V0UHJtLmRhdGEhW3RoaXMuc3RhdHVzS2V5KCldfSAtPiAke3ZhbHVlfWAsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0aGlzLndlYl93cml0ZShwYXJhbSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0dGhpcy5nZXREZXRhaWwoKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdldFBybS5kYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLmdldFBybS5kYXRhIHx8IHt9LCB7XG5cdFx0XHRcdFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUsXG5cdFx0XHR9KTtcblx0XHRcdHRoaXMudXBzZXJ0UHJtLmFkZERhdGEhW3RoaXMuc3RhdHVzS2V5KCldID0gdmFsdWU7XG5cdFx0XHR0aGlzLmNGb3JtLnRyaWdnZXJNb2RlbEVmZmVjdCh7IFt0aGlzLnN0YXR1c0tleSgpXTogdmFsdWUgfSk7XG5cdFx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0XHR0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHRcdC8vIGN1c3RvbVN0ZXBzLnJlZnJlc2hTdGVwcygpXG5cdFx0fVxuXHR9XG5cblx0Zm9ybURpc0Z1bmMoKSB7XG5cdFx0bGV0IGRhdGEgPSB0aGlzLmZvcm1EaXNhYmxlZCgpISh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zYXZlQnRuRGlzYWJsZSA9IGRhdGE7XG5cdFx0XHR0aGlzLmdyaWREaXNhYmxlID0gZGF0YTtcblx0XHRcdHRoaXMuZGlzYWJsZUZvcm0oZGF0YSk7XG5cdFx0XHR0aGlzLmRpc2FibGVkQ2hpbGQoZGF0YSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGNvbnN0IGRpc2FiZWxkID0gZGF0YS5kaXNhYmxlZDtcblx0XHRcdGNvbnN0IGZpbHRlcnMgPSBkYXRhLmZpbHRlcnMgfHwgW107XG5cdFx0XHRpZiAoIWZpbHRlcnMuaW5jbHVkZXMoJ2Zvcm0nKSkge1xuXHRcdFx0XHR0aGlzLmRpc2FibGVGb3JtKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHRcdGlmICghZmlsdGVycy5pbmNsdWRlcygnZ3JpZCcpKSB7XG5cdFx0XHRcdHRoaXMuZ3JpZERpc2FibGUgPSBkaXNhYmVsZDtcblx0XHRcdFx0dGhpcy5kaXNhYmxlZENoaWxkKGRpc2FiZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0ZGlzYWJsZUZvcm0oZGlzYWJsZTogYm9vbGVhbikge1xuXHRcdHRoaXMuZm9ybU9wdGlvbnMuZmllbGRzPy5mb3JFYWNoKCh2KSA9PiB7XG5cdFx0XHR2Lmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IGZpZWxkRGlzYWJsZWQgPSBnW2Zvcm1UeXBlVG9Qcm9wc1tnLnR5cGVdXS5kaXNhYmxlZCB8fCBmYWxzZTtcblx0XHRcdFx0aWYgKGRpc2FibGUpIHtcblx0XHRcdFx0XHR0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0dGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0IWZpZWxkRGlzYWJsZWQgJiYgdGhpcy5jRm9ybS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0ZGlzYWJsZWRDaGlsZChkaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpLmZvckVhY2goKHYsIGluZGV4OiBhbnkpID0+IHtcblx0XHRcdGlmKHYuaGFzT3duUHJvcGVydHkoJ2dyaWRDdXN0b21EaXNhYmxlZCcpICYmIHR5cGVvZiB2LmdyaWRDdXN0b21EaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyl7XG5cdFx0XHRcdFx0di5ncmlkRGlzYWJsZWQgPSB2LmdyaWRDdXN0b21EaXNhYmxlZCh0aGlzLmdldFBybS5kYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2LmdyaWREaXNhYmxlZCA9IGRpc2FibGVkO1xuXHRcdFx0XHR9XG5cdFx0XHRpZiAodi50eXBlID09ICdncmlkJykge1xuXHRcdFx0XHR2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykpIHtcblx0XHRcdFx0XHRcdGl0ZW0uZWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8g5ZCM5LiA5Liq6aG16Z2iZGlzYWJsZWQgZmFsc2UgID0+IHRydWVcblx0XHRcdFx0XHRpZiAoIXYuZ3JpZERpc2FibGVkICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ2VkaXRhYmxlJykgJiYgIWl0ZW0uZWRpdGFibGUgJiYgdHlwZW9mIGl0ZW0uZWRpdGFibGUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0aXRlbS5lZGl0YWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0dHlwZW9mIHRoaXMuY3VzdG9tR3JpZD8uZ2V0KGluZGV4KSEuZ2V0R3JpZCA9PSdmdW5jdGlvbicgJiYgdGhpcy5jdXN0b21HcmlkPy5nZXQoaW5kZXgpIS5nZXRHcmlkKCkuYXBpLnNldEdyaWRPcHRpb24oJ2NvbHVtbkRlZnMnLCB2LmdyaWRPcHRpb25zLmNvbHVtbkRlZnMpO1xuXHRcdFx0fSBlbHNlIGlmICh2LnR5cGUgPT0gJ2Zvcm0nKSB7XG5cdFx0XHRcdHYuZmllbGRzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcblx0XHRcdFx0XHRpdGVtLmdyb3VwPy5mb3JFYWNoKChnOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZERpc2FibGVkID0gZ1tmb3JtVHlwZVRvUHJvcHNbZy50eXBlXV0uZGlzYWJsZWQgfHwgZmFsc2U7XG5cdFx0XHRcdFx0XHRpZiAodi5ncmlkRGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy50YWJGb3JtLmdldChpbmRleCkhLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5tYXJrQXNQcmlzdGluZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMudGFiRm9ybS5nZXQoaW5kZXgpIS5nZXRGaWVsZChnLmtleSk/LmZpZWxkQ29udHJvbCEuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQhZmllbGREaXNhYmxlZCAmJiB0aGlzLmNGb3JtLmdldEZpZWxkKGcua2V5KT8uZmllbGRDb250cm9sIS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRzZXREaXNhYmxlZCgpIHtcblx0XHR0aGlzLnJlc29sdmVkR3JpZExpc3QoKS5mb3JFYWNoKCh2LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRpZiAodi50eXBlID09ICdmb3JtJykge1xuXHRcdFx0XHR2LmZpZWxkcz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG5cdFx0XHRcdFx0aXRlbS5ncm91cD8uZm9yRWFjaCgoZzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnRhYkZvcm0uZ2V0KGluZGV4KSEuZ2V0RmllbGQoZy5rZXkpPy5maWVsZENvbnRyb2whLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR0YWJDbGljaygpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMudGFiRm9ybS5nZXQodGhpcy5pbmRleFZhbHVlKSAmJiB0aGlzLnRhYkZvcm0uZ2V0KHRoaXMuaW5kZXhWYWx1ZSkhLnJlQ2FsY0xhYmVsU2l6ZSgpO1xuXHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSwgMCk7XG5cdH1cblx0dG9nZ2xlTG9nKCkge1xuXHRcdHRoaXMuc2lkZWJhck1vZGUuc2V0KHRoaXMuc2lkZWJhck1vZGUoKSA9PT0gJ2xlZnQnID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG5cdH1cblxuXHRwcml2YXRlIHJlYnVpbGRTbG90TWFwKCkge1xuXHRcdHRoaXMuc2xvdE1hcC5jbGVhcigpO1xuXHRcdGZvciAoY29uc3Qgc2xvdCBvZiB0aGlzLnBhZ2VGb3JtU2xvdHM/LnRvQXJyYXkoKSA/PyBbXSkge1xuXHRcdFx0Y29uc3Qgc2xvdEtleSA9IHNsb3Quc2xvdEtleSgpO1xuXHRcdFx0aWYgKCF0aGlzLnNsb3RNYXAuaGFzKHNsb3RLZXkpKSB7XG5cdFx0XHRcdHRoaXMuc2xvdE1hcC5zZXQoc2xvdEtleSwgc2xvdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZWZyZXNoU2xvdFJlbmRlclN0YXRlcygpIHtcblx0XHR0aGlzLnNsb3RSZW5kZXJTdGF0ZXMgPSAodGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkgPz8gW10pLm1hcCgoZ3JpZCwgaW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IHNsb3RLZXkgPSB0aGlzLnJlc29sdmVTbG90S2V5KGdyaWQpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2xvdDogc2xvdEtleSA/IHRoaXMuc2xvdE1hcC5nZXQoc2xvdEtleSkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdGNvbnRleHQ6IHRoaXMuZ2V0T3JDcmVhdGVQYWdlRm9ybVNsb3RDb250ZXh0KGdyaWQsIGluZGV4LCBzbG90S2V5KSxcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGdldE9yQ3JlYXRlUGFnZUZvcm1TbG90Q29udGV4dChncmlkOiBHcmlkTGlzdCwgaW5kZXg6IG51bWJlciwgc2xvdEtleTogc3RyaW5nKTogUGFnZUZvcm1TbG90Q29udGV4dCB7XG5cdFx0Y29uc3QgcmVuZGVyS2V5ID0gdGhpcy5nZXRHcmlkUmVuZGVyS2V5KGdyaWQsIGluZGV4KTtcblx0XHRsZXQgY29udGV4dCA9IHRoaXMuc2xvdENvbnRleHRNYXAuZ2V0KHJlbmRlcktleSk7XG5cdFx0aWYgKCFjb250ZXh0KSB7XG5cdFx0XHRjb250ZXh0ID0ge30gYXMgUGFnZUZvcm1TbG90Q29udGV4dDtcblx0XHRcdHRoaXMuc2xvdENvbnRleHRNYXAuc2V0KHJlbmRlcktleSwgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0Y29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQuc2xvdEtleSA9IHNsb3RLZXk7XG5cdFx0Y29udGV4dC5ncmlkID0gZ3JpZDtcblx0XHRjb250ZXh0LmluZGV4ID0gaW5kZXg7XG5cdFx0Y29udGV4dC5wYWdlRm9ybSA9IHRoaXM7XG5cdFx0Y29udGV4dC5kYXRhID0gKHRoaXMuZ2V0UHJtLmRhdGEgPz8ge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnRleHQubW9kZWwgPSBncmlkLnR5cGUgPT09ICdncmlkJyA/IHRoaXMuZ2V0UHJtLmRhdGE/LltncmlkLnN1YkRhdGFLZXkhXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleSFdIHx8IHt9O1xuXHRcdGNvbnRleHQudXBzZXJ0ID0gdGhpcy51cHNlcnRQcm07XG5cdFx0Y29udGV4dC5hY3RpdmUgPSB0aGlzLmluZGV4VmFsdWUgPT09IGluZGV4O1xuXHRcdGNvbnRleHQuZ3JpZERpc2FibGUgPSB0aGlzLmdyaWREaXNhYmxlO1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlU2xvdEtleShncmlkOiBHcmlkTGlzdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGdyaWQuc2xvdEtleSB8fCBncmlkLnN1YkRhdGFLZXk7XG5cdH1cblxuXHRwcml2YXRlIGdldEdyaWRSZW5kZXJLZXkoZ3JpZDogR3JpZExpc3QsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgZ3JpZC5zdWJEYXRhS2V5IHx8IGdyaWQuc2xvdEtleSB8fCBgJHtpbmRleH1gO1xuXHR9XG5cblx0Z2V0Q3VycmVudEdyaWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpPy5bdGhpcy5pbmRleFZhbHVlXSA/PyBudWxsO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDdXJyZW50U3ViTW9kZWxOYW1lKCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRHcmlkLnR5cGUgPT09ICdncmlkJyA/IGN1cnJlbnRHcmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgfHwgJycgOiBjdXJyZW50R3JpZC5tb2RlbE5hbWUgfHwgJyc7XG5cdH1cblxuXHRwcml2YXRlIGdldFN1YnNlcnRCeUdyaWQoZ3JpZDogR3JpZExpc3QgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0aWYgKCFncmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3Qgc3ViTW9kZWxOYW1lID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyBncmlkLmdyaWRPcHRpb25zPy5tb2RlbE5hbWUgOiBncmlkWydtb2RlbE5hbWUnXTtcblx0XHRpZiAoIXN1Yk1vZGVsTmFtZSkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnVwc2VydFBybS5zdWJzZXJ0Py5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uc3ViTW9kZWxOYW1lID09PSBzdWJNb2RlbE5hbWUpID8/IG51bGw7XG5cdH1cblxuXHRwcml2YXRlIGNsb25lU3Vic2VydChzdWJzZXJ0OiBhbnkpIHtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uc3Vic2VydCxcblx0XHRcdHN1YkRhdGE6IEFycmF5LmlzQXJyYXkoc3Vic2VydC5zdWJEYXRhKSA/IHN1YnNlcnQuc3ViRGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiBbXSxcblx0XHRcdG1hcHRtcDogbmV3IE1hcDxhbnksIGFueT4oc3Vic2VydC5tYXB0bXAgPyAoQXJyYXkuZnJvbShzdWJzZXJ0Lm1hcHRtcC5lbnRyaWVzKCkpIGFzIFthbnksIGFueV1bXSkgOiBbXSksXG5cdFx0XHRsb2d0bXA6IG5ldyBNYXA8YW55LCBhbnk+KHN1YnNlcnQubG9ndG1wID8gKEFycmF5LmZyb20oc3Vic2VydC5sb2d0bXAuZW50cmllcygpKSBhcyBbYW55LCBhbnldW10pIDogW10pLFxuXHRcdH07XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCkge1xuXHRcdGNvbnN0IGN1cnJlbnRHcmlkID0gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgY3VycmVudEdyaWQudHlwZSA9PT0gJ2dyaWQnKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybUluZGV4ID1cblx0XHRcdHRoaXMucmVzb2x2ZWRHcmlkTGlzdCgpXG5cdFx0XHRcdC5zbGljZSgwLCB0aGlzLmluZGV4VmFsdWUgKyAxKVxuXHRcdFx0XHQuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSAhPT0gJ2dyaWQnKS5sZW5ndGggLSAxO1xuXHRcdHJldHVybiBmb3JtSW5kZXggPj0gMCA/ICh0aGlzLnRhYkZvcm0uZ2V0KGZvcm1JbmRleCkgPz8gbnVsbCkgOiBudWxsO1xuXHR9XG5cblx0Y2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdGlmICghY3VycmVudEdyaWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXV0aExldmVsKCkgPj0gMyAmJiBjdXJyZW50R3JpZCA9PT0gdGhpcy5nZXRDdXJyZW50R3JpZCgpICYmIGN1cnJlbnRHcmlkLnN1YlNhdmU/LmVuYWJsZWQgPT09IHRydWU7XG5cdH1cblxuXHRnZXRDdXJyZW50VGFiU2F2ZUxhYmVsKGdyaWQ/OiBHcmlkTGlzdCB8IG51bGwpIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IGdyaWQgPz8gdGhpcy5nZXRDdXJyZW50R3JpZCgpO1xuXHRcdHJldHVybiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8ubGFiZWwgfHwgJ+S/neWtmCc7XG5cdH1cblxuXHRwcml2YXRlIGhhc01haW5QZW5kaW5nQ2hhbmdlcygpIHtcblx0XHRjb25zdCBhZGREYXRhID0gdGhpcy51cHNlcnRQcm0uYWRkRGF0YSB8fCB7fTtcblx0XHRjb25zdCB1cGREYXRhID0gdGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fTtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoYWRkRGF0YSkubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyh1cGREYXRhKS5sZW5ndGggPiAwO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydDogYW55KSB7XG5cdFx0aWYgKCFzdWJzZXJ0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiAhIShcblx0XHRcdChzdWJzZXJ0LnN1YkRhdGEgJiYgc3Vic2VydC5zdWJEYXRhLmxlbmd0aCA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5tYXB0bXAgJiYgc3Vic2VydC5tYXB0bXAuc2l6ZSA+IDApIHx8XG5cdFx0XHQoc3Vic2VydC5sb2d0bXAgJiYgc3Vic2VydC5sb2d0bXAuc2l6ZSA+IDApXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpIHtcblx0XHRjb25zdCBkaXJ0eVBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5PYmplY3Qua2V5cyh0aGlzLnVwc2VydFBybS5hZGREYXRhIHx8IHt9KSwgLi4uT2JqZWN0LmtleXModGhpcy51cHNlcnRQcm0udXBkRGF0YSB8fCB7fSldKTtcblx0XHRjb25zdCBzbmFwc2hvdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGRpcnR5UGF0aHMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRzbmFwc2hvdFtrZXldID0gZmllbGRVdGlscy5nZXRNb2RlbCh0aGlzLmdldFBybS5kYXRhLCBrZXkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdDtcblx0fVxuXG5cdHByaXZhdGUgY29sbGVjdE90aGVyRGlydHlTdWJEYXRhU25hcHNob3QoY3VycmVudEdyaWQ6IEdyaWRMaXN0IHwgbnVsbCkge1xuXHRcdGNvbnN0IHNuYXBzaG90cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cdFx0dGhpcy5yZXNvbHZlZEdyaWRMaXN0KCkuZm9yRWFjaCgoZ3JpZCkgPT4ge1xuXHRcdFx0aWYgKCFncmlkIHx8IGdyaWQgPT09IGN1cnJlbnRHcmlkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoZ3JpZCk7XG5cdFx0XHRpZiAoIXRoaXMuaGFzU3Vic2VydFBlbmRpbmdDaGFuZ2VzKHN1YnNlcnQpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGN1cnJlbnREYXRhID0gZ3JpZC50eXBlID09PSAnZ3JpZCcgPyB0aGlzLmdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5XSB8fCBbXSA6IHRoaXMuc3ViRm9ybU1vZGVsW2dyaWQuc3ViRGF0YUtleV0gfHwge307XG5cdFx0XHRzbmFwc2hvdHMuc2V0KGdyaWQuc3ViRGF0YUtleSwgQXJyYXkuaXNBcnJheShjdXJyZW50RGF0YSkgPyBjdXJyZW50RGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLmN1cnJlbnREYXRhIH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzbmFwc2hvdHM7XG5cdH1cblxuXHRwcml2YXRlIHJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdWJEYXRhU25hcHNob3RzOiBNYXA8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmVudHJpZXMobWFpbkRhdGFTbmFwc2hvdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRmaWVsZFV0aWxzLnNldE1vZGVsKHRoaXMuZ2V0UHJtLmRhdGEsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHRcdHN1YkRhdGFTbmFwc2hvdHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuXHRcdFx0dGhpcy5nZXRQcm0uZGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKGl0ZW06IGFueSkgPT4gKHsgLi4uaXRlbSB9KSkgOiB7IC4uLnZhbHVlIH07XG5cdFx0fSk7XG5cdFx0dGhpcy5zeW5jU3ViRm9ybU1vZGVsRnJvbURhdGEoKTtcblx0XHR0aGlzLnJlZnJlc2hTbG90UmVuZGVyU3RhdGVzKCk7XG5cdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdH1cblxuXHRwcml2YXRlIHJlZnJlc2hDdXJyZW50VGFiRGF0YShjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0aWYgKCFjdXJyZW50R3JpZCB8fCAhdGhpcy5pZCB8fCAhdGhpcy5tb2RlbE5hbWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgbWFpbkRhdGFTbmFwc2hvdCA9IHRoaXMuY29sbGVjdERpcnR5TWFpbkRhdGFTbmFwc2hvdCgpO1xuXHRcdGNvbnN0IG90aGVyRGlydHlTbmFwc2hvdHMgPSB0aGlzLmNvbGxlY3RPdGhlckRpcnR5U3ViRGF0YVNuYXBzaG90KGN1cnJlbnRHcmlkKTtcblx0XHR0aGlzLnN5bmNHZXRQcm1Gb3JDdXJyZW50VmlldygpO1xuXHRcdHRoaXMud2ViX2dldCh0aGlzLmdldFBybSkuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdHRoaXMuZGV0YWlsQ2IodGhpcy5tZXJnZURldGFpbFdpdGhMZWZ0UGFuZWwocmVzKSk7XG5cdFx0XHR0aGlzLnJlc3RvcmVEaXJ0eVNuYXBzaG90cyhtYWluRGF0YVNuYXBzaG90LCBvdGhlckRpcnR5U25hcHNob3RzKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzZXRDdXJyZW50VGFiVXBzZXJ0U3RhdGUoZ3JpZDogR3JpZExpc3QgfCBudWxsKSB7XG5cdFx0Y29uc3Qgc3Vic2VydCA9IHRoaXMuZ2V0U3Vic2VydEJ5R3JpZChncmlkKTtcblx0XHRpZiAoIXN1YnNlcnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3Vic2VydC5tYXB0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5sb2d0bXAgPSBuZXcgTWFwKCk7XG5cdFx0c3Vic2VydC5zdWJEYXRhID0gW107XG5cdH1cblxuXHRwcml2YXRlIHJlY2FsY3VsYXRlU2F2ZVNpZ25hbCgpIHtcblx0XHRjb25zdCBoYXNEaXJ0eVN1YnNlcnRzID0gKHRoaXMudXBzZXJ0UHJtLnN1YnNlcnQgfHwgW10pLnNvbWUoKHN1YnNlcnQ6IGFueSkgPT4gdGhpcy5oYXNTdWJzZXJ0UGVuZGluZ0NoYW5nZXMoc3Vic2VydCkpO1xuXHRcdHRoaXMuYWN0aW9uLnNhdmVTaWduYWwuc2V0KHRoaXMuaGFzTWFpblBlbmRpbmdDaGFuZ2VzKCkgfHwgaGFzRGlydHlTdWJzZXJ0cyk7XG5cdH1cblxuXHRidWlsZEN1cnJlbnRUYWJVcHNlcnQoKSB7XG5cdFx0Y29uc3QgY3VycmVudEdyaWQgPSB0aGlzLmdldEN1cnJlbnRHcmlkKCk7XG5cdFx0Y29uc3QgY3VycmVudFN1YnNlcnQgPSB0aGlzLmdldFN1YnNlcnRCeUdyaWQoY3VycmVudEdyaWQpO1xuXHRcdGlmICghY3VycmVudEdyaWQgfHwgIWN1cnJlbnRTdWJzZXJ0IHx8ICF0aGlzLmlkKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0Y29uc3QgcGF5bG9hZDogYW55ID0ge1xuXHRcdFx0bW9kZWxOYW1lOiB0aGlzLm1vZGVsTmFtZSxcblx0XHRcdHVwZERhdGE6IHtcblx0XHRcdFx0aWQ6IHRoaXMuaWQsXG5cdFx0XHRcdC4uLih0aGlzLnVwc2VydFBybS51cGREYXRhIHx8IHt9KSxcblx0XHRcdH0sXG5cdFx0XHRzdWJzZXJ0OiBbdGhpcy5jbG9uZVN1YnNlcnQoY3VycmVudFN1YnNlcnQpXSxcblx0XHR9O1xuXHRcdGlmICh0aGlzLmlzTG9nKSB7XG5cdFx0XHRwYXlsb2FkLmxvZ01vZGVsID0gYCR7dGhpcy5tb2RlbE5hbWV9TG9nYDtcblx0XHRcdHBheWxvYWQubG9nID0ge1xuXHRcdFx0XHQuLi4odGhpcy51cHNlcnRQcm0ubG9nIHx8IHt9KSxcblx0XHRcdFx0cGlkOiB0aGlzLmlkLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHRwcml2YXRlIGhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZDogR3JpZExpc3QgfCBudWxsLCBjYj86IEZ1bmN0aW9uLCByZXM/OiBhbnkpIHtcblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldChmYWxzZSk7XG5cdFx0dGhpcy5yZXNldEN1cnJlbnRUYWJVcHNlcnRTdGF0ZShjdXJyZW50R3JpZCk7XG5cdFx0dGhpcy5yZWZyZXNoQ3VycmVudFRhYkRhdGEoY3VycmVudEdyaWQpO1xuXHRcdHRoaXMucmVjYWxjdWxhdGVTYXZlU2lnbmFsKCk7XG5cdFx0Y2IgJiYgY2IocmVzKTtcblx0fVxuXG5cdHNhdmVDdXJyZW50VGFiKGNiPzogRnVuY3Rpb24pIHtcblx0XHRjb25zdCBjdXJyZW50R3JpZCA9IHRoaXMuZ2V0Q3VycmVudEdyaWQoKTtcblx0XHRjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZEN1cnJlbnRUYWJVcHNlcnQoKTtcblx0XHRpZiAoIXBheWxvYWQpIHtcblx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICd3YXJuJywgc3VtbWFyeTogJ1dhcm4nLCBkZXRhaWw6ICfor7flhYjkv53lrZjkuLvooagnIH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudEdyaWQ/LnR5cGUgIT09ICdncmlkJykge1xuXHRcdFx0Y29uc3QgY3VycmVudEZvcm0gPSB0aGlzLmdldEN1cnJlbnRGb3JtQ29tcG9uZW50KCk7XG5cdFx0XHRpZiAoY3VycmVudEZvcm0gJiYgIWN1cnJlbnRGb3JtLnZhbGlkYXRlKCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmFjdGlvbi5sb2FkaW5nLnNldCh0cnVlKTtcblx0XHRjb25zdCBmaW5hbGl6ZVNhdmUgPSAocmVzPzogYW55KSA9PiB0aGlzLmhhbmRsZUN1cnJlbnRUYWJTYXZlU3VjY2VzcyhjdXJyZW50R3JpZCwgY2IsIHJlcyk7XG5cdFx0aWYgKHR5cGVvZiBjdXJyZW50R3JpZD8uc3ViU2F2ZT8uc2F2ZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGN1cnJlbnRHcmlkLnN1YlNhdmUuc2F2ZUZ1bmMocGF5bG9hZCwgdGhpcy5pZCwgZmluYWxpemVTYXZlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy53ZWJfdXBzZXJ0KHBheWxvYWQpXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWN0aW9uLmxvYWRpbmcuc2V0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKChyZXMpID0+IHtcblx0XHRcdFx0ZmluYWxpemVTYXZlKHJlcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdGFkZFJvd0NsaWNrSGFuZGxlcihncmlkOiBHcmlkTGlzdCkge1xuXHRcdGNvbnN0IHN1YkRhdGFLZXkgPSBncmlkLnN1YkRhdGFLZXk7XG5cblx0XHRpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSA9PT0gJ2hhbmRsZScpIHtcblx0XHRcdGNvbnN0IGFkZEl0ZW0gPSBncmlkLmdyaWRPcHRpb25zPy5hZGREYXRhQ2I/LigpID8/IHt9O1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UuYWRkRGF0YShzdWJEYXRhS2V5LCBhZGRJdGVtLCBncmlkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VGb3JtU2VydmljZS5hZGREYXRhKHN1YkRhdGFLZXksIHVuZGVmaW5lZCwgZ3JpZCk7XG5cdFx0dGhpcy5kYXRhU291cmNlU2hvdygpO1xuXHR9XG5cblx0ZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQ6IEdyaWRMaXN0KSB7XG5cdFx0Y29uc3Qgc2VsZWN0SXRlbTogYW55ID0gdGhpcy5wYWdlRm9ybVNlcnZpY2UuZ2V0U2VsZWN0ZWRSb3dzKCkgfHwgW107XG5cdFx0bGV0IGlkczogbnVtYmVyW10gPSBbXTtcblx0XHRpZiAoZ3JpZC5zbG90S2V5ID09PSAnZ2FudHQnKSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkICYmIHR5cGVvZiB2LmlkID09PSAnbnVtYmVyJykubWFwKCh2OiBhbnkpID0+IHYuaWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZHMgPSBzZWxlY3RJdGVtLmZpbHRlcigodjogYW55KSA9PiB2LmlkKS5tYXAoKHY6IGFueSkgPT4gdi5pZCk7XG5cdFx0fVxuXHRcdGlmIChpZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0dGhpcy53ZWJfcmVtb3ZlKHsgbW9kZWxOYW1lOiBncmlkLmdyaWRPcHRpb25zLm1vZGVsTmFtZSwgaWRzIH0pLnN1YnNjcmliZSgocmVzKSA9PiB7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnJlbW92ZURhdGEoZ3JpZC5zdWJEYXRhS2V5LCB0aGlzLnBhZ2VGb3JtU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKSwgZ3JpZCk7XG5cdFx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wYWdlRm9ybVNlcnZpY2UucmVtb3ZlRGF0YShncmlkLnN1YkRhdGFLZXksIHRoaXMucGFnZUZvcm1TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpLCBncmlkKTtcblx0XHRcdHRoaXMucGFnZUZvcm1TZXJ2aWNlLnNldFNlbGVjdGVkUm93cyhbXSk7XG5cdFx0fVxuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWQ6b3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDwhLS0g5L+d5a2Y5paw5bu65pON5L2c5Yy6IC0tPlxuXHQ8ZGl2IGNsYXNzPVwiZmxleCBtZDpmbGV4LXdyYXAgbGc6ZmxleC1ub3dyYXAgaXRlbXMtY2VudGVyIG1kOmp1c3RpZnktYmV0d2VlbiBweS0xIHB4LTEgYm9yZGVyLWItWzFweF0gYm9yZGVyLVsjZGJkYmRiXSBiZy13aGl0ZVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJsZzpiYXNpcy0xLzMgb3JkZXItMVwiPlxuXHRcdFx0PGFwcC1jcnVtYi1hY3Rpb25cblx0XHRcdFx0W2FkZFZpc2libGVdPVwiYWRkVmlzaWJsZSgpXCJcblx0XHRcdFx0W25ld1VybF09XCJuZXdVcmxcIlxuXHRcdFx0XHRbaXNTaG93Q29nXT1cInRydWVcIlxuXHRcdFx0XHRbb3V0bGluZWRdPVwidHJ1ZVwiXG5cdFx0XHRcdFthdXRoTGV2ZWxdPVwiYXV0aExldmVsKClcIlxuXHRcdFx0XHRbYWN0aW9uTGlzdF09XCJhY3Rpb25MaXN0KClcIlxuXHRcdFx0XHRbY29uZmlnTmV3UGF0aF09XCJjb25maWdOZXdQYXRoKClcIlxuXHRcdFx0XHRbZGF0YV09XCJnZXRQcm0uZGF0YSA/PyB7fVwiXG5cdFx0XHRcdFtzYXZlQnRuRGlzYWJsZV09XCJzYXZlQnRuRGlzYWJsZVwiXG5cdFx0XHRcdFtzaG93U2F2ZUJ1dHRvbl09XCJzaG93TWFpblNhdmVCdXR0b24oKVwiXG5cdFx0XHRcdChhY3Rpb25FdmVudCk9XCJhdXRoQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdChzYXZlRXZlbnQpPVwic3VibWl0Rm9ybSgpXCI+XG5cdFx0XHQ8L2FwcC1jcnVtYi1hY3Rpb24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8ZGl2IGNsYXNzPVwiYmFzaXMtMS81IGxnOmJhc2lzLTIvMyBvcmRlci0yIGxnOm9yZGVyLTIgbWQ6b3JkZXItbGFzdCBtZDpiYXNpcy1mdWxsIG1kOm10LVs2cHhdXCI+XG5cdFx0XHQ8aHJlZi1idG4tbGlzdFxuXHRcdFx0XHRbaHJlZnNdPVwiaHJlZkJ0bkxpc3QoKVwiXG5cdFx0XHRcdChocmVmQ2xpY2spPVwiZ29SdW4oJGV2ZW50KVwiPjwvaHJlZi1idG4tbGlzdD5cblx0XHRcdDwhLS0gQGlmIChpZCkge1xuXHRcdFx0XHRAZm9yIChidG4gb2YgaHJlZkJ0bkxpc3QoKTsgdHJhY2sgYnRuKSB7XG5cdFx0XHRcdFx0PHAtYnV0dG9uXG5cdFx0XHRcdFx0XHRbdmFyaWFudF09XCJidG4/LnZhcmlhbnRcIlxuXHRcdFx0XHRcdFx0W3NldmVyaXR5XT1cImJ0bj8uc2V2ZXJpdHlcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJtci1bNnB4XVwiXG5cdFx0XHRcdFx0XHRzaXplPVwic21hbGxcIlxuXHRcdFx0XHRcdFx0W2ljb25dPVwiYnRuPy5pY29uXCJcblx0XHRcdFx0XHRcdGxhYmVsPVwie3sgYnRuLmkxOG5LZXkgPyBpMThuLmZhbnlpKGJ0bi5pMThuS2V5KSA6IGJ0bi5sYWJlbCB9fVwiXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiZ29SdW4oYnRuKVwiPlxuXHRcdFx0XHRcdDwvcC1idXR0b24+XG5cdFx0XHRcdH1cblx0XHRcdH0gLS0+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cImJhc2lzLTEvMyBvcmRlci0zIGZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuXHRcdFx0QGlmIChtb2RlbExvZygpKSB7XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2tcIj5cblx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0W2NsYXNzXT1cIidpY29uZm9udCBpY29uLXNpZGViYXIgaWNvbi1zaWRlYmFyLScgKyBzaWRlYmFyTW9kZSgpXCJcblx0XHRcdFx0XHRcdChjbGljayk9XCJ0b2dnbGVMb2coKVwiPjwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiZmxleFwiPlxuXHRcdDxkaXYgY2xhc3M9XCJweC0yIGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBmbGV4LTFcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmFzaXMtMS8zIHB5LTEgYmFzaXMtZnVsbCBtZDpmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LXJvdyBvcmRlci0xXCI+XG5cdFx0XHRcdEBmb3IgKGFjdGlvbiBvZiBhY3Rpb25MaXN0KCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBhY3Rpb24pIHtcblx0XHRcdFx0XHQ8cC1idXR0b25cblx0XHRcdFx0XHRcdHNpemU9XCJzbWFsbFwiXG5cdFx0XHRcdFx0XHRbaWNvbl09XCJnZXRQcm0uZGF0YT8uaWNvblwiXG5cdFx0XHRcdFx0XHRbbG9hZGluZ109XCJhY3Rpb24ubG9hZGluZ1wiXG5cdFx0XHRcdFx0XHRbbGFiZWxdPVwiYWN0aW9uLmkxOG5LZXkgPyAoYWN0aW9uLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogYWN0aW9uLmxhYmVsXCJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJhY3Rpb24uYnRuRGlzYWJsZWQgPyBhY3Rpb24uYnRuRGlzYWJsZWQoZ2V0UHJtLmRhdGEpIDogZmFsc2VcIlxuXHRcdFx0XHRcdFx0W3N0eWxlQ2xhc3NdPVwiXG5cdFx0XHRcdFx0XHRcdChhY3Rpb24uYXV0aCB8fCAwKSA+IChhdXRoTGV2ZWwoKSB8fCAwKSB8fCAhIWFjdGlvbi5idG5IaWRkZW4/LihnZXRQcm0uZGF0YSlcblx0XHRcdFx0XHRcdFx0XHQ/ICdmb3JtLWFjdGlvbiBoaWRkZW4nXG5cdFx0XHRcdFx0XHRcdFx0OiAnZm9ybS1hY3Rpb24gYmxvY2sgbXItWy41cmVtXSdcblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHQob25DbGljayk9XCJhY3Rpb24ub25DbGljayAhPSAnJyAmJiBhY3Rpb24ub25DbGljaz8uKGdldFBybS5kYXRhLCBhY3Rpb24pXCI+XG5cdFx0XHRcdFx0PC9wLWJ1dHRvbj5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibWQ6YmFzaXMtMi8zIGJhc2lzLWZ1bGwgZmxleCBtZDpmbGV4LXJvdy1yZXZlcnNlIGZsZXgtcm93IG1kOm9yZGVyLTIgb3JkZXItZmlyc3Qgdy1mdWxsXCI+XG5cdFx0XHRcdEBpZiAoc3RlcHNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0PGN1c3RvbS1zdGVwc1xuXHRcdFx0XHRcdFx0I2N1c3RvbVN0ZXBzXG5cdFx0XHRcdFx0XHRjbGFzcz1cInctZnVsbFwiXG5cdFx0XHRcdFx0XHRbc3RlcHNdPVwic3RhdHVzU3RlcHMoKVwiXG5cdFx0XHRcdFx0XHRbbW9kZWxMb2ddPVwic2hvd0xvZygpXCJcblx0XHRcdFx0XHRcdFtjdXJyZW50XT1cImdldFBybS5kYXRhICYmIGdldFBybS5kYXRhW3N0YXR1c0tleSgpXSAhPT0gdW5kZWZpbmVkID8gZ2V0UHJtLmRhdGFbc3RhdHVzS2V5KCldIDogMFwiXG5cdFx0XHRcdFx0XHRbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcblx0XHRcdFx0XHRcdFtpc0NsaWNrXT1cInRoaXMuc3RhdHVzQ29uZigpLmlzQ2xpY2tcIlxuXHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzdGF0dXNDaGFuZ2UoJGV2ZW50LCBjdXN0b21TdGVwcylcIj5cblx0XHRcdFx0XHQ8L2N1c3RvbS1zdGVwcz5cblx0XHRcdFx0fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChzaG93TG9nKCkpIHtcblx0XHRcdDxkaXYgY2xhc3M9XCJsZzp3LVs0MDBweF0gbWQ6dy1bMzAwcHhdIGhpZGRlbiBtZDpibG9ja1wiPjwvZGl2PlxuXHRcdH1cblx0PC9kaXY+XG4gIDwhLS0gIGZvcm0g5Li75Yy65Z+fLS0+XG4gIEBpZih0aGlzLmZvcm0oKS5mb3JtKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1haW4gZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgIEBpZiAoY3VzdG9tTGVmdFBhbmVsKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpibG9jayBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIG1kOmZsZXgtbm9uZSBtZDp3LWZpdCBtZDptYXgtdy1mdWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxlZnRQYW5lbCgpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobGVmdFBhbmVsKCk/LmVuYWJsZWQgJiYgbGVmdFBhbmVsKCk/Lm1vZGUgPT09ICdsaXN0Jykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG8gbWQ6ZmxleC1ub25lIG1kOnctWzIyMHB4XSBtZDptYXgtdy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1mb3JtLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgIDxhbS1zaW5nbGUtc2VsZWN0LWxpc3Rib3hcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwibGVmdFBhbmVsSXRlbXNcIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsZWZ0UGFuZWxTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTGVmdFBhbmVsU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiZ2V0UGFuZWxPcHRpb25WYWx1ZSgpXCJcbiAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImdldFBhbmVsT3B0aW9uTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtlbXB0eU1lc3NhZ2VdPVwiZ2V0UGFuZWxFbXB0eU1lc3NhZ2UoKVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rlc2VsZWN0XT1cImdldFBhbmVsQWxsb3dEZXNlbGVjdCgpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsZWZ0UGFuZWwoKT8uZW5hYmxlZCAmJiBsZWZ0UGFuZWwoKT8ubW9kZSA9PT0gJ3RyZWUnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6YmxvY2sgbWQ6aC1mdWxsIG1kOm92ZXJmbG93LXktYXV0byBtZDpmbGV4LW5vbmUgbWQ6dy1bMjIwcHhdIG1kOm1heC13LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbCBwYWdlLWZvcm0tdHJlZS1wYW5lbFwiPlxuICAgICAgICAgICAgQGlmIChsZWZ0UGFuZWxUcmVlTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8cC10cmVlXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxlZnRQYW5lbFRyZWVOb2Rlc1wiXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICAgICAgWyhzZWxlY3Rpb24pXT1cImxlZnRQYW5lbFNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICAgICAgW2VtcHR5TWVzc2FnZV09XCJnZXRQYW5lbEVtcHR5TWVzc2FnZSgpXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicGFnZS1mb3JtLWxlZnQtdHJlZVwiXG4gICAgICAgICAgICAgICAgKG9uTm9kZVNlbGVjdCk9XCJvbkxlZnRQYW5lbFRyZWVOb2RlU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbk5vZGVFeHBhbmQpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUV4cGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25Ob2RlQ29sbGFwc2UpPVwib25MZWZ0UGFuZWxUcmVlTm9kZUNvbGxhcHNlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLWZvcm0tbGVmdC1wYW5lbC1lbXB0eVwiPnt7IGdldFBhbmVsRW1wdHlNZXNzYWdlKCkgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1kOm1pbi13LTAgbWQ6ZmxleC0xIG1kOmgtZnVsbCBtZDpvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIG14LTIgZm9ybS1wYW5lbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgZmxleC0xXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm0oKS5mb3JtIVwiPlxuICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAjY0Zvcm1cbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJmb3JtT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3Vwc2VydF09XCJ1cHNlcnRQcm1cIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJnZXRQcm0uZGF0YSA/PyB7fVwiPjwvY3VzdG9tLWZvcm0+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChncmlkcyAmJiBncmlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgbWItMlwiPlxuICAgICAgICAgICAgICA8cC10YWJzIFsodmFsdWUpXT1cImluZGV4VmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8cC10YWJsaXN0PlxuICAgICAgICAgICAgICAgICAgQGZvciAoZmNoaWxkIG9mIGdyaWRzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgZmNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFiQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZjaGlsZC5pMThuS2V5ID8gaTE4bi5mYW55aShmY2hpbGQuaTE4bktleSkgOiBmY2hpbGQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wLXRhYj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3AtdGFibGlzdD5cbiAgICAgICAgICAgICAgPC9wLXRhYnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGZvciAoZ3JpZCBvZiBncmlkczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGdyaWQpIHtcbiAgICAgICAgICAgIEBsZXQgc2xvdFN0YXRlID0gc2xvdFJlbmRlclN0YXRlc1tpXTtcbiAgICAgICAgICAgIEBsZXQgc2xvdCA9IHNsb3RTdGF0ZT8uc2xvdDtcbiAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJpbmRleFZhbHVlICE9IGlcIiBbc3R5bGUuaGVpZ2h0XT1cInNsb3QgPyBncmlkLmdyaWRPcHRpb25zLnNjcm9sbEhlaWdodCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgQGlmIChzbG90KSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNsb3QudGVtcGxhdGVSZWY7IGNvbnRleHQ6IHNsb3RTdGF0ZS5jb250ZXh0XCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB5LVs1cHhdIHByLVs4cHhdIGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2xvdWQtdXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJncmlkLmdyaWREaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC5zdWJUYWJsZVNvdXJjZSAhPSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdyaWQuZ3JpZERpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvd0NsaWNrSGFuZGxlcihncmlkKVwiIC8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGdyaWQuc2hvd0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZGVsUm93Q2xpY2tIYW5kbGVyKGdyaWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgI2N1c3RvbUdyaWQ+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoZ3JpZC50eXBlID09ICdncmlkJykge1xuICAgICAgICAgICAgICAgICAgPGN1c3RvbS1ncmlkXG4gICAgICAgICAgICAgICAgICAgICNjdXN0b21HcmlkXG4gICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImdldFBybS5kYXRhPy5bZ3JpZC5zdWJEYXRhS2V5IV1cIlxuICAgICAgICAgICAgICAgICAgICBbdXBzZXJ0XT1cInVwc2VydFBybVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVFbWl0KT1cImRlbFJvd3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFthZGRUeXBlXT1cImdyaWQuc3ViVGFibGVTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkRW1pdCk9XCJkYXRhU291cmNlU2hvdygpXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWQuZ3JpZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JpZERpc2FibGVdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0aExldmVsXT1cImF1dGhMZXZlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiZ3JpZC5zaG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YlNhdmVWaXNpYmxlXT1cImNhblNob3dDdXJyZW50VGFiU2F2ZShncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlTGFiZWxdPVwiZ2V0Q3VycmVudFRhYlNhdmVMYWJlbChncmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJTYXZlRGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0RGF0YV09XCJncmlkLnNlbGVjdERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYWRkU29ydF09XCJncmlkLmFkZFNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAoc3ViU2F2ZUVtaXQpPVwic2F2ZUN1cnJlbnRUYWIoKVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZ3JpZD5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuU2hvd0N1cnJlbnRUYWJTYXZlKGdyaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIHB4LTIgcHQtMiBiZy13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb3VkLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ3JpZC5ncmlkRGlzYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQ3VycmVudFRhYigpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8Y3VzdG9tLWZvcm1cbiAgICAgICAgICAgICAgICAgICAgI3RhYkZvcm1cbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ3JpZFwiXG4gICAgICAgICAgICAgICAgICAgIFt1cHNlcnRdPVwidXBzZXJ0UHJtXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cInN1YkZvcm1Nb2RlbFtncmlkLnN1YkRhdGFLZXkhXSB8fCB7fVwiPlxuICAgICAgICAgICAgICAgICAgPC9jdXN0b20tZm9ybT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoc2hvd0xvZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbGc6dy1bNDAwcHhdIG1kOnctWzMwMHB4XSBtZDpoLWZ1bGwgbWQ6b3ZlcmZsb3cteS1hdXRvIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgIDxjdXN0b20tbG9nIFtsb2dzXT1cImdldFBybS5kYXRhPy5sb2cgPz8gW11cIj48L2N1c3RvbS1sb2c+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbjxyb3ctc2VsZWN0b3Jcblx0Wyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcblx0W3NlYXJjaFBybV09XCJkaWFsb2dTZWFyY2hQcm1cIlxuXHRbZ3JpZE9wdGlvbnNdPVwic2VsZWN0T3B0aW9uc1wiXG5cdFtzZWxlY3Rpb25LZXlzXT1cInNlbGVjdGlvbktleXNcIlxuXHRbc2VsZWN0TW9kZWxDb2RlXT1cImN1cnJlbnRTZWxlY3RNb2RlbENvZGUgfHwgdW5kZWZpbmVkXCJcblx0W2N1c3RvbUxpc3RGb3JtQnlEaWFsb2ddPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtVGVtcGxhdGVcIlxuXHRbY3VzdG9tTGlzdEZvcm1CeURpYWxvZ0NvbnRleHRdPVwiY3VycmVudEN1c3RvbUxpc3RGb3JtQ29udGV4dFwiXG5cdFtjdXN0b21MaXN0RGlhbG9nTWFwXT1cImN1c3RvbUxpc3RGb3JtSW5zdGFuY2VNYXAoKVwiXG5cdChvbk9rKT1cIm9uT2soJGV2ZW50KVwiXG5cdChjYW5jZWxTZWxlY3QpPVwib25DYW5jZWxTZWxlY3RlZCgkZXZlbnQpXCI+XG48L3Jvdy1zZWxlY3Rvcj5cbiJdfQ==