@universis/ngx-tables 0.7.4 → 0.7.5

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.
@@ -626,6 +626,7 @@ var AdvancedTableComponent = /** @class */ (function () {
626
626
  }, 0);
627
627
  }
628
628
  });
629
+ var drawIndex_1 = 1;
629
630
  tableElement_1.on('order.dt', function (event) {
630
631
  if (_this.dataTable) {
631
632
  var order = _this.dataTable.order();
@@ -639,8 +640,11 @@ var AdvancedTableComponent = /** @class */ (function () {
639
640
  if (_this.dataTable) {
640
641
  var info = _this.dataTable.page.info();
641
642
  _this.page.emit(info);
643
+ if (drawIndex_1 > 1)
644
+ return;
642
645
  try {
643
- _this.dataTable.columns.adjust();
646
+ drawIndex_1++;
647
+ setTimeout(function () { _this.dataTable.columns.adjust(); }, 1);
644
648
  }
645
649
  catch (err) {
646
650
  console.error('ERROR', 'An error occurred while adjusting table columns');
@@ -1222,4 +1226,4 @@ var AdvancedTableComponent = /** @class */ (function () {
1222
1226
  }());
1223
1227
  export { AdvancedTableComponent };
1224
1228
 
1225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0csTUFBTSxFQUNkLFNBQVMsRUFDVCxpQkFBaUIsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQWUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFL0Qsb0ZBQW9GO0FBQ3BGLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCwwRUFBMEU7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YztnQkFEQyxnQkFBZ0I7Z0JBVHJDLFFBQVE7Z0JBZUYsMkJBQTJCO2dCQWxCakMsVUFBVTtnQkFvQkosWUFBWTtnQkFBRSxjQUFjO2dCQU8zQixVQUFVOzs7d0JBOEdoQixTQUFTLFNBQUMsT0FBTzs2QkFDakIsU0FBUyxTQUFDLFlBQVk7K0JBQ3RCLFNBQVMsU0FBQyxjQUFjO3lCQUN4QixLQUFLOzhCQUNMLEtBQUs7MkJBQ0wsS0FBSzt1QkFDTCxNQUFNLFNBQUMsTUFBTTt1QkFDYixNQUFNLFNBQUMsTUFBTTt5QkFDYixLQUFLLFNBQUMsUUFBUTt5QkFDZCxNQUFNLFNBQUMsUUFBUTt1QkFDZixNQUFNLFNBQUMsTUFBTTt1QkFDYixNQUFNLFNBQUMsTUFBTTt3QkFDYixNQUFNLFNBQUMsT0FBTzt5QkFDZCxNQUFNLFNBQUMsUUFBUTtnQ0FDZixNQUFNLFNBQUMsZUFBZTs2QkFFdEIsS0FBSzs2QkFDTCxLQUFLOzZCQUNMLEtBQUs7eUJBQ0wsS0FBSzs2QkFDTCxLQUFLOzRCQUNMLEtBQUs7b0NBQ0wsS0FBSztvQ0FDTCxLQUFLOzBCQUVMLEtBQUs7MEJBQ0wsS0FBSzs2QkFJTCxLQUFLO2lDQUlMLEtBQUs7K0JBSUwsS0FBSzsyQkFDTCxLQUFLOzRCQUtMLEtBQUs7eUJBS0wsS0FBSyxTQUFDLFFBQVE7NkJBY2QsS0FBSyxTQUFDLFlBQVk7NkJBeUJqQixLQUFLLFNBQUMsWUFBWTs2QkE4Qm5CLEtBQUssU0FBQyxZQUFZO3dCQXlCbEIsS0FBSyxTQUFDLE9BQU87O0lBczdCaEIsNkJBQUM7Q0FBQSxBQXRtQ0QsSUFzbUNDO1NBamxDWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBPbkluaXQsIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiwgVGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge0lBZHZhbmNlZFRhYmxlRm9ybWF0dGVyc30gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG4vLyBpbXBvcnRhbnQgbm90ZTogdXNlIHRoaXMgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmltcG9ydCAqIGFzIGpRdWVyeV8gZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQnO1xuaW1wb3J0IHt0ZW1wbGF0ZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtc2Nyb2xsZXInO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbi8vIHJlc3RvcmUganF1ZXJ5IGltcG9ydCB0byBhdm9pZCBDYW5ub3QgY2FsbCBhIG5hbWVzcGFjZSAoJ2pxdWVyeScpIGVycm9yXG5jb25zdCBqUXVlcnkgPSBqUXVlcnlfO1xuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRmlsdGVyZWQ6IG51bWJlcjtcbiAgZGF0YTogQXJyYXk8YW55Pjtcbn1cblxuY29uc3QgRGF0YVRhYmxlc0FwaTogYW55ID0galF1ZXJ5LmZuLmRhdGFUYWJsZS5BcGk7XG5EYXRhVGFibGVzQXBpLnJlZ2lzdGVyKCAncHJvY2Vzc2luZygpJywgZnVuY3Rpb24oIHNob3c6IGFueSApIHtcbiAgICByZXR1cm4gdGhpcy5pdGVyYXRvcigndGFibGUnLCAoIGN0eDogYW55ICkgPT4ge1xuICAgICAgICBjdHgub0FwaS5fZm5Qcm9jZXNzaW5nRGlzcGxheSggY3R4LCBzaG93ICk7XG4gICAgfSApO1xufSk7XG5cbmNsYXNzIFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvciBleHRlbmRzIENoYW5nZURldGVjdG9yUmVmIHtcbiAgcHVibGljIGNoZWNrTm9DaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIG1hcmtGb3JDaGVjaygpOiB2b2lkIHtcbiAgfVxuXG4gIHB1YmxpYyByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbmV4cG9ydCBsZXQgQ09MVU1OX0ZPUk1BVFRFUlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbHVtbi5mb3JtYXR0ZXJzJyk7XG5cbmNsYXNzIENvbHVtbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xhc3M6IHN0cmluZztcbiAgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ6IHN0cmluZztcbiAgcHVibGljIGZvcm1hdFN0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcjogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk6IHN0cmluZztcbiAgcHVibGljIHNvcnRhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcblxuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogYW55LCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgLy9cbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZUNhc3Q8VD4oaW5wdXQ6IGFueSk6IFQge1xuICByZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgY2FzdChpbnB1dDogYW55LCBjbG9uZT86IGJvb2xlYW4pOiBUYWJsZUNvbmZpZ3VyYXRpb24ge1xuICAgIGlmIChjbG9uZSkge1xuICAgICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQpKSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JjZUNhc3Q8VGFibGVDb25maWd1cmF0aW9uPihpbnB1dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UmFuZG9tSWRlbnRpZmllcigpIHtcbiAgcmV0dXJuIChcbiAgICBOdW1iZXIoU3RyaW5nKE1hdGgucmFuZG9tKCkpLnNsaWNlKDIpKVxuICApLnRvU3RyaW5nKDM2KTtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dGFibGUgI3RhYmxlIGNsYXNzPVwiZGF0YVRhYmxlXCI+XG4gICAgPC90YWJsZT5cbiAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZU1lc3NhZ2UnXCI+PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgcHJpdmF0ZSBfcXVlcnk6IENsaWVudERhdGFRdWVyeWFibGU7XG4gIHByaXZhdGUgX2NvbmZpZzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd0hlYWRlciA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dQYWdpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaWQgPSBnZXRSYW5kb21JZGVudGlmaWVyKCk7XG4gIHB1YmxpYyBzbWFydFNlbGVjdCA9IGZhbHNlO1xuICBwdWJsaWMgY29uZmlnQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBAVmlld0NoaWxkKCd0YWJsZScpIHB1YmxpYyB0YWJsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW1wdHlUYWJsZScpIHB1YmxpYyBlbXB0eVRhYmxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlOiBFbGVtZW50UmVmO1xuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0ID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0FjdGlvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQgPSB0cnVlO1xuICBAT3V0cHV0KCdsb2FkJykgcHVibGljIGxvYWQ6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PigpO1xuICBAT3V0cHV0KCdpbml0JykgcHVibGljIGluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgncmVsb2FkJykgcHVibGljIHJlbG9hZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0JykgcHVibGljIHNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnZHJhdycpIHB1YmxpYyBkcmF3OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdwYWdlJykgcHVibGljIHBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ29yZGVyJykgcHVibGljIG9yZGVyOiBFdmVudEVtaXR0ZXI8YW55W11bXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdW10+KCk7XG4gIEBPdXRwdXQoJ3Njcm9sbCcpIHB1YmxpYyBzY3JvbGw6IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCdzZWxlY3RlZEl0ZW1zJykgcHVibGljIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmUgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlTG9hZENhbGxiYWNrOiAoc2V0dGluZ3M6IGFueSwgY2FsbGJhY2s6IChzdGF0ZTogYW55KSA9PiB2b2lkKSA9PiB2b2lkO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlQ2FsbGJhY2s6IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3QgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkID0gW107XG4gIHB1YmxpYyB1bnNlbGVjdGVkID0gW107XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBVUkwgdG8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIGZyb21cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWdTcmM6IHN0cmluZztcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IFRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICAgIC8vIHJhaXNlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY29uZmlnQ2hhbmdlcy5uZXh0KHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5O1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0ZVBpcGU7XG4gIHB1YmxpYyBkYXRhVGFibGU6IGFueTtcbiAgcHVibGljIGR0T3B0aW9uczogYW55O1xuICBwcml2YXRlIGxhc3RRdWVyeVBhcmFtczogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSByZWxvYWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGVcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCBuZXcgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yKCkpO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b24gPSAnYnRuJztcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlID0gJ2J0biBidG4tbGlnaHQnO1xuICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaW1wbGUgc2VhcmNoXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgaWYgKHNlYXJjaFRleHQgJiYgdGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbikge1xuICAgICAgICAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJyxcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uLCB7XG4gICAgICAgICAgICAgIHRleHQ6IHNlYXJjaFRleHQucmVwbGFjZSgvXlwifFwiJC9nLCAnJyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiB3b3JkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuam9pbignIGFuZCAnKTtcbiAgICAgICAgICAvLyBzZXQgZmlsdGVyXG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIGVtcHR5IHRhYmxlIGxheW91dFxuICAgICAgdGhpcy5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgIC8vIHNlYXJjaCBsb2NhbGx5XG4gICAgICB0aGlzLmRhdGFUYWJsZS5zZWFyY2goc2VhcmNoVGV4dC50cmltKCkpLmRyYXcoKTtcbiAgICAgIC8vIGdldCBpbmRleGVzIG9mIGZpbHRlcmVkIHJvd3NcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KTtcbiAgICAgIC8vIHNldCByZWNvcmRzRmlsdGVyZWRcbiAgICAgIGNvbnN0IHJlY29yZHNGaWx0ZXJlZCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gc2V0IHJlY29yZHNUb3RhbFxuICAgICAgY29uc3QgcmVjb3Jkc1RvdGFsID0gaW5kZXhlcy5sZW5ndGg7XG4gICAgICAvLyByZXRyaWV2ZSBkYXRhIGZyb20gaW5kZXhlc1xuICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgICBjb25zdCBkYXRhID0gaW5kZXhlcy5tYXAoaW5kZXggPT4gcm93c1s8bnVtYmVyPmluZGV4XSk7XG4gICAgICAvLyBlbWl0IHJlc3VsdHMgdG8gbG9hZCBvdXRwdXRcbiAgICAgIHRoaXMubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiByZWNvcmRzRmlsdGVyZWQsXG4gICAgICAgIHJlY29yZHNUb3RhbDogcmVjb3Jkc1RvdGFsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmV0Y2goY2xlYXJTZWxlY3RlZD86IGJvb2xlYW4pIHtcbiAgICAvLyBpZiBkYXRhIHRhYmxlIGlzIG51bGxcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICByZXR1cm4gdGhpcy5uZ09uSW5pdCgpO1xuICAgIH1cbiAgICAvLyBjbGVhciBzZWxlY3Rpb24gaWYgcGFyYW1ldGVyIGlzIG5vdCBkZWNsYXJlZCBvciBpdCdzIHRydWVcbiAgICBpZiAoY2xlYXJTZWxlY3RlZCA9PSBudWxsIHx8IGNsZWFyU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIGxvYWQgZGF0YSBvbmx5XG4gICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSB0cnVlO1xuICAgICAgalF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuZW1wdHkoKTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gbnVsbDtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHJvdy5ub2RlKCk7XG4gICAgICAvLyBpZiBtdWx0aXBsZSBzZWxlY3QgaXMgZmFsc2VcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZW51bWVyYXRlIHJvd1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygnLnNlbGVjdGVkJykubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3dOb2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCByb3cgZGF0YVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIHNlYXJjaCBzZWxlY3RlZCBpdGVtc1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgLy8gdmFsaWRhdGUgdW5zZWxlY3RlZCBkYXRhXG4gICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvdyBpZiBpdCdzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgdW5TZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWU7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAvLyBhZGQgdGhpcyByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbnkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdE5vbmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RSb3cocm93OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIC8vIGdldCBpZFxuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICAvLyBmaW5kIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyB1bnNlbGVjdFxuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBEYXRhdGFibGVzIGNvbHVtbiByZW5kZXJlciBmb3Igc2VsZWN0IGNoZWNrYm94XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG1ldGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclNlbGVjdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmICh0eXBlb2YgY29sdW1uLnNlbGVjdFRlbXBsYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwge1xuICAgICAgICBzZWxlY3RUZW1wbGF0ZTogdGVtcGxhdGUoYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lIHMtcm93XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIiBkYXRhLWlkPVwiXFwke2RhdGF9XCIgLz48bGFiZWwgZm9yPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgYCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSh7XG4gICAgICBtZXRhLFxuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGhpcy5jb25maWcuc2VsZWN0YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdtdWx0aXBsZVNlbGVjdCcpKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3QgPSB0aGlzLmNvbmZpZy5tdWx0aXBsZVNlbGVjdDtcbiAgICAgIH1cbiAgICAgIC8vIHByZXBhcmUgY29uZmlndXJhdGlvbiBmb3IgY29sdW1uc1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uc1xuICAgICAgICAvLyBmaWx0ZXIgYWN0aW9uIGxpbmsgY29sdW1uXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdBY3Rpb25MaW5rRm9ybWF0dGVyJyAmJiB0aGlzLnNob3dBY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byBhZHZhbmNlIHRhYmxlIGNvbHVtblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBDb2x1bW5Gb3JtYXR0ZXIodGhpcy5faW5qZWN0b3IpLCBjb2x1bW4pO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudDogY29sdW1uLmhhc093blByb3BlcnR5KCdkZWZhdWx0Q29udGVudCcpID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdHRlcnMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0U3RyaW5nID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdE9wdGlvbnMgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pKHJlc3VsdCwgdHlwZSwgcm93LCBtZXRhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdFN0cmluZztcbiAgICAgICAgICAgICAgICBkZWxldGUgY29sdW1uLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIGZvcm1hdHRlcnMgZXhwb3J0IGNyZWF0ZWRDZWxsIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IGNvbHVtbi5mb3JtYXR0ZXJzLmZpbHRlcigoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5Gb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKShjZWxsLCBjZWxsRGF0YSwgcm93RGF0YSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbi5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGw6IGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBnZXQgdGFibGUgZWxlbWVudFxuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0galF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICB0YWJsZUVsZW1lbnQub24oJ3Byb2Nlc3NpbmcuZHQnLCAoZXZlbnQsIHNldHRpbmdzLCBwcm9jZXNzaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzaW5nKSB7XG4gICAgICAgICAgLy8gY2xlYXIgZW1wdHkgdGFibGUgZWxlbWVudFxuICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCcuZGF0YVRhYmxlc19lbXB0eScpLmh0bWwoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LmFkZENsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRhYmxlRWxlbWVudC5vbignb3JkZXIuZHQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZGF0YVRhYmxlLm9yZGVyKCk7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlQ29sdW1ucztcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyLmVtaXQob3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkub24oJ2RyYXcuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5kcmF3LmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgaW5mbzogeyBwYWdlOiBudW1iZXI7IHBhZ2VzOiBudW1iZXIgfSA9IHRoaXMuZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgICAgIHRoaXMucGFnZS5lbWl0KGluZm8pO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYWRqdXN0aW5nIHRhYmxlIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBhbGxvdyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiAoYXMgcm93IHByaW1hcnkga2V5KVxuICAgICAgICAvLyB0b2RvOjphbGxvdyByb3cgcHJpbWFyeSBrZXkgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBmaXJzdENvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF07XG4gICAgICAgIC8vIGFkZCBzZWxlY3QgY29sdW1uXG4gICAgICAgIGNvbnN0IHNlbGVjdENvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXIgcGwtNCBwci0wJyxcbiAgICAgICAgICBkYXRhOiBmaXJzdENvbHVtbi5wcm9wZXJ0eSB8fCBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICAgIGRlZmF1bHRDb250ZW50OiAnJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZpc2libGU6ICF0aGlzLmN1c3RvbVNlbGVjdCxcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICAvLyBhc3NpZ24gcmVuZGVyZXJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RDb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgcmVuZGVyOiB0aGlzLl9yZW5kZXJTZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGFkZCBjb2x1bW5cbiAgICAgICAgdGFibGVDb2x1bW5zLnVuc2hpZnQoc2VsZWN0Q29sdW1uRGVmaW5pdGlvbik7XG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBoYW5kbGUgcGFnZSBjaGFuZ2UgZXZlbnQgKGEgdHJpY2sgZm9yIGZpcmluZyBkcmF3LmR0IGV2ZW50cylcbiAgICAgICAgdGFibGVFbGVtZW50XG4gICAgICAgICAgLy8gaGFuZGxlIGRyYXcgZXZlbnRzXG4gICAgICAgICAgLm9uKCdkcmF3LmR0JywgKCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ3Rib2R5Jykub24oJ2NsaWNrJywgJ3RyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHNlbGYuZGF0YVRhYmxlLnJvdyh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcm93XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QuZW1pdChyb3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jyk7XG4gICAgICAgICAgICBlbGVtZW50cy5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHtcbiAgICAgICAgLy8gc2V0IGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aE1lbnU6IFs1LCAxMCwgNTAsIDEwMCwgMjAwLCA1MDBdLFxuICAgICAgICAvLyBoaWRlIGxlbmd0aCBtZW51XG4gICAgICAgIGxlbmd0aENoYW5nZTogZmFsc2UsXG4gICAgICAgIC8vIGVuYWJsZSBzZWFyY2ggYnV0IGhpZGUgc2VhcmNoIGJveCAoY3NzKVxuICAgICAgICBzZWFyY2hpbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBkYXRhIHByb2Nlc3NpbmdcbiAgICAgICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGdldHRpbmcgc2VydmVyIHNpZGUgZGF0YVxuICAgICAgICBzZXJ2ZXJTaWRlOiB0aGlzLnNlcnZlclNpZGUsXG4gICAgICAgIC8vIGVudW1lcmF0ZSB0YWJsZSBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnM6IHRhYmxlQ29sdW1ucyxcbiAgICAgICAgb3JkZXI6IFtdLFxuICAgICAgICAvLyBzZXQgc2Nyb2xsIHhcbiAgICAgICAgc2Nyb2xsWDogdGhpcy5zY3JvbGxYLFxuICAgICAgICBkb206ICdCZnJ0aXAnLFxuICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXh0ZW5kOiAnZXhjZWwnLFxuICAgICAgICAgICAgZmlsZW5hbWU6IHRoaXMuY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgY2xhc3NOYW1lOiAnZC1ub25lJyxcbiAgICAgICAgICAgIGV4cG9ydE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgY29sdW1uczogJ3RoOm5vdCg6Zmlyc3QtY2hpbGQpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gZGVmaW5lIHNlcnZlciBkYXRhIGNhbGxiYWNrXG4gICAgICAgIGZuU2VydmVyRGF0YShzU291cmNlOiBhbnksIGFvRGF0YTogYW55LCBmbkNhbGxiYWNrOiBhbnksIG9TZXR0aW5nczogYW55KSB7XG4gICAgICAgICAgLy8gaWYgbWV0aG9kIGlzIGludm9rZWQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgaWYgKHNlbGYuX2ZpcnN0TG9hZCkge1xuICAgICAgICAgICAgLy8gZGlzYWJsZWQgZmlyc3QgbG9hZCBmbGFnXG4gICAgICAgICAgICBzZWxmLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGlmIGF1dG8gbG9hZCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKHNlbGYuYXV0b0xvYWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5RGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IDAsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiAwLFxuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGNvbnN0IG9yZGVyID0gYW9EYXRhWzJdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBza2lwIHJlY29yZHMgcGFyYW1cbiAgICAgICAgICBsZXQgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgbGV0IHRvcCA9IGFvRGF0YVs0XS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2VhcmNoIHZhbHVlXG4gICAgICAgICAgY29uc3Qgc2VhcmNoID0gYW9EYXRhWzVdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBkYXRhIHF1ZXJ5YWJsZVxuICAgICAgICAgIGNvbnN0IHEgPSBzZWxmLl9xdWVyeSBpbnN0YW5jZW9mIENsaWVudERhdGFRdWVyeWFibGUgPyBzZWxmLl9xdWVyeSA6IHNlbGYuX2NvbnRleHQubW9kZWwoc2VsZi5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgICAgLy8gYXBwbHkgcGFnaW5nIHBhcmFtc1xuICAgICAgICAgIGlmICh0b3ApIHtcbiAgICAgICAgICAgIHEudGFrZSh0b3ApLnNraXAoc2tpcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGx5IG9yZGVyIHBhcmFtc1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGdldCBvcmRlciBxdWVyeSBleHByZXNzaW9uXG4gICAgICAgICAgICBjb25zdCBvcmRlckJ5U3RyID0gb3JkZXIubWFwKChleHByOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uc1tleHByLmNvbHVtbl0ubmFtZSArICcgJyArIGV4cHIuZGlyIHx8ICdhc2MnO1xuICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgLy8gc2V0IG9yZGVyXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIG9yZGVyQnlTdHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICBjb25zdCBzZWxlY3QgPSBzZWxmLmNvbmZpZy5jb2x1bW5zLmZpbHRlciggKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKCBjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHEuc2VsZWN0LmFwcGx5KHEsIHNlbGVjdCk7XG4gICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICBpZiAocXVlcnlQYXJhbXMuJGZpbHRlciAmJiBxdWVyeVBhcmFtcy4kZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gc2V0IHJvdXRlIGZpbHRlclxuICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IFsgcXVlcnlQYXJhbXMuJGZpbHRlciBdO1xuICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZXhwYW5kICYmIHF1ZXJ5UGFyYW1zLiRleHBhbmQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgJGV4cGFuZFxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgc2VsZi5jb25maWcuZGVmYXVsdHMuZXhwYW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFxLmdldFBhcmFtcygpWyckb3JkZXJieSddICYmIHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KSB7XG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZ3JvdXBieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBlbmQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICBpZiAoc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChkZWZhdWx0RmlsdGVyU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBkZWZhdWx0RmlsdGVyU3RyaW5nIF07XG4gICAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VsZi5sYXN0UXVlcnlQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsYW5ndWFnZTogT2JqZWN0LmFzc2lnbih7IH0sIHNlbGYudHJhbnNsYXRvci50cmFuc2Zvcm0oJ1RhYmxlcy5EYXRhVGFibGUnKSxcbiAgICAgICAgICB7ZW1wdHlUYWJsZTogJyAnIH0pLFxuICAgICAgfTtcblxuICAgICAgY29uc3Qgc3RhdGVTZXR0aW5ncyA9IHtcbiAgICAgICAgc3RhdGVTYXZlOiB0aGlzLnN0YXRlU2F2ZVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnN0YXRlTG9hZENhbGxiYWNrKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVTZXR0aW5ncywge1xuICAgICAgICAgIHN0YXRlTG9hZENhbGxiYWNrOiB0aGlzLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVTYXZlQ2FsbGJhY2s6IHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCBzdGF0ZVNldHRpbmdzKTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHBhZ2luZzogdGhpcy5wYWdpbmcsXG4gICAgICAgICAgcGFnZUxlbmd0aDogdGhpcy5wYWdlTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcblxuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGluaXQuZHQgZXZlbnQgYW5kIGVtaXQgbG9jYWwgZXZlbnRcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gdGFibGVFbGVtZW50Lm9uKCdpbml0LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0galF1ZXJ5KGV2ZW50LnRhcmdldCkucGFyZW50KCk7XG4gICAgICAgIC8vIGhhbmRsZSBzY3JvbGxpbmdcbiAgICAgICAgc2Nyb2xsZXIub24oJ3Njcm9sbCcsIChzY3JvbGxFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGpRdWVyeShzY3JvbGxFdmVudC50YXJnZXQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IHRhcmdldC5zY3JvbGxUb3AoKTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmVtaXQoe1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGxlZnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS5EYXRhVGFibGUoc2V0dGluZ3MpO1xuICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgIC8vIHNob3cgb3IgaGlkZSBoZWFkZXJcbiAgICAgIGlmICghdGhpcy5zaG93SGVhZGVyKSB7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJykuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJykuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0Zvb3Rlcikge1xuICAgICAgICAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbFRvcCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxMZWZ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBxID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxhc3RRdWVyeVBhcmFtcykuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgcS5zZXRQYXJhbShrZXksIHRoaXMubGFzdFF1ZXJ5UGFyYW1zW2tleV0pO1xuICAgIH0pO1xuICAgIC8vIHJldHVybiBxdWVyeVxuICAgIHJldHVybiBxO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYW5kIHVwZGF0ZXMgYSBzaW5nbGUgcm93XG4gICAqIEBwYXJhbSBmaW5kIC0gQW55IG9iamVjdCB3aGljaCBpcyBiZWluZyBjb252ZXJ0ZWQgdG8gYSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGZldGNoT25lKGZpbmQ6IGFueSkge1xuICAgIGlmIChmaW5kID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBnZXQgcm93c1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoKSB7XG4gICAgICAvLyBmaW5kIHJlc3VsdFxuICAgICAgY29uc3QgZmluZEtleXMgPSBPYmplY3Qua2V5cyhmaW5kKTtcbiAgICAgIGlmIChmaW5kS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaW5kIHJvdyBpbmRleCBieSBzZWFyY2hpbmcgZWFjaCBwcm9wZXJ0eVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbmRLZXlzLm1hcCggKGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3dba2V5XSA9PT0gZmluZFtrZXldO1xuICAgICAgICB9KS5maWx0ZXIoIChyZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzID09PSBmYWxzZTtcbiAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaGFzIGJlZW4gZm91bmRcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgLy8gc2VsZWN0IGF0dHJpYnV0ZXNcbiAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRzZWxlY3QnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kc2VsZWN0KTtcbiAgICAgICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpIHtcbiAgICAgICAgICAvLyBhcHBseSBleHBhbmQgYXR0cmlidXRlc1xuICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckZXhwYW5kJywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIGZvciByb3dcbiAgICAgICAgZmluZEtleXMuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZCggKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5wcm9wZXJ0eSA9PT0ga2V5IHx8IGNvbC5uYW1lID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gZ2V0IHByb3BlcnR5IG9yIG5hbWVcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgcXVlcnkuYW5kKHByb3BlcnR5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gaWYgcm93IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlXG4gICAqIEBwYXJhbSAkZXZlbnRcbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9ICAkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgLy8gZ2V0IHJvdyBmcm9tIGlkXG4gICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludCgvLShcXGQrKSQvZy5leGVjKGlucHV0LmlkKVsxXSwgMTApO1xuICAgIC8vIGdldCByb3dcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpLmRhdGEoKTtcbiAgICAvLyBnZXQgcm93IGlkZW50aWZpZXJcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5O1xuICAgICAgY29uc3QgaWQgPSByb3dba2V5XTtcbiAgICAgIGxldCBmaW5kSXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIGFkZCByb3cgdG8gc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHNlbGVjdGVkIGl0ZW1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSXRlbUluZGV4LCAxKTtcbiAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgLy8gYWRkIHJvdyB0byB1bnNlbGVjdGVkIHJvd3NcbiAgICAgICAgICAgIGZpbmRJdGVtSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVtcHR5VGFibGUoKSB7XG4gICAgLy8gdGhpcyBvcGVyYXRpb24gaXMgaW1wb3J0YW50XG4gICAgLy8gZHVlIHRvIG5nIGRhdGEgYmluZGluZ1xuICAgIC8vIGVtcHR5IHRhYmxlIHRlbXBsYXRlIGhhcyBubyB0cmFuc2xhdGVkIHRleHQgZHVyaW5nIG5nT25Jbml0KClcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIl19
1229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQUUsWUFBWSxFQUN4QixNQUFNLEVBQ04sY0FBYyxFQUNkLFFBQVEsRUFDUixLQUFLLEVBQ0csTUFBTSxFQUNkLFNBQVMsRUFDVCxpQkFBaUIsRUFHbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQWUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFL0Qsb0ZBQW9GO0FBQ3BGLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCwwRUFBMEU7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bnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb2x1bW5Db25maWd1cmF0aW9uLCBUYWJsZUNvbmZpZ3VyYXRpb259IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQge0RhdGFTZXJ2aWNlUXVlcnlQYXJhbXN9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQge0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXJ9IGZyb20gJy4vYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZSwgTG9hZGluZ1NlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuY2xhc3MgQ29sdW1uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGFzczogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkZWZhdWx0Q29udGVudDogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nOiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI6IHN0cmluZztcbiAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIG9yZGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBwcm9wZXJ0eTogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBwcml2YXRlIF9xdWVyeTogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgX2ZpcnN0TG9hZCA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dGb290ZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93SGVhZGVyID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd1BhZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIF9pZCA9IGdldFJhbmRvbUlkZW50aWZpZXIoKTtcbiAgcHVibGljIHNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gIHB1YmxpYyBjb25maWdDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgcHVibGljIHRhYmxlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xvYWRpbmdUYWJsZScpIHB1YmxpYyBsb2FkaW5nVGFibGU6IEVsZW1lbnRSZWY7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQgPSA4MDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93QWN0aW9ucyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvTG9hZCA9IHRydWU7XG4gIEBPdXRwdXQoJ2xvYWQnKSBwdWJsaWMgbG9hZDogRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoJ2luaXQnKSBwdWJsaWMgaW5pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCdyZWxvYWQnKSBwdWJsaWMgcmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdzZWxlY3QnKSBwdWJsaWMgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdkcmF3JykgcHVibGljIGRyYXc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3BhZ2UnKSBwdWJsaWMgcGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnb3JkZXInKSBwdWJsaWMgb3JkZXI6IEV2ZW50RW1pdHRlcjxhbnlbXVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W11bXT4oKTtcbiAgQE91dHB1dCgnc2Nyb2xsJykgcHVibGljIHNjcm9sbDogRXZlbnRFbWl0dGVyPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdGVkSXRlbXMnKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2ZXJTaWRlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGxlbmd0aE1lbnUgPSBbNTAsIDEwMCwgMjAwLCA1MDBdO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2VMZW5ndGggPSAyNTtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlU2F2ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVMb2FkQ2FsbGJhY2s6IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjazogKHNldHRpbmdzOiBhbnksIHN0YXRlOiBhbnkpID0+IHZvaWQ7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFkgPSA4MDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxYID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcm93IHNlbGVjdGlvbi4gVGhlIGRlZmF1bHIgdmFsdWUgaXMgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGUgbXVsdGlwbGUgc2VsZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZVNlbGVjdCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIGN1c3RvbSBzZWxlY3Rpb24gYW5kIGhpZGVzIHNlbGVjdCBjb2x1bW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzICBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQgPSBbXTtcbiAgcHVibGljIHVuc2VsZWN0ZWQgPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGFibGUgZm9vdGVyIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd0Zvb3RlcicpXG4gIHB1YmxpYyBzZXQgc2hvd0Zvb3Rlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dGb290ZXIgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJyk7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dGb290ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dGb290ZXI7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGFibGUgZm9vdGVyIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gICBASW5wdXQoJ3Nob3dIZWFkZXInKVxuICAgcHVibGljIHNldCBzaG93SGVhZGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgIHRoaXMuX3Nob3dIZWFkZXIgPSB2YWx1ZTtcbiAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZT50aGVhZCcpO1xuICAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgY29uc3QgZGF0YVRhYmxlID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKTtcbiAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICAgICAvLyBhZGQgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ210LTInKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgIC8vIHJlbW92ZSB0b3AgbWFyZ2luXG4gICAgICAgICBkYXRhVGFibGUuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuXG4gICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKSB7XG4gICAgIHJldHVybiB0aGlzLl9zaG93SGVhZGVyO1xuICAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBwYWdpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCdzaG93UGFnaW5nJylcbiAgcHVibGljIHNldCBzaG93UGFnaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd1BhZ2luZyA9IHZhbHVlO1xuICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX3BhZ2luYXRlJyk7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBqUXVlcnkoZWxlbWVudCkuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dQYWdpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dQYWdpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGFuIGFjdGl2ZSBxdWVyeSBmb3IgdGhpcyB0YWJsZVxuICAgKi9cbiAgQElucHV0KCdxdWVyeScpXG4gIHB1YmxpYyBzZXQgcXVlcnkodmFsdWU6IENsaWVudERhdGFRdWVyeWFibGUpIHtcbiAgICB0aGlzLl9xdWVyeSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zOiBEYXRhU2VydmljZVF1ZXJ5UGFyYW1zO1xuICBwcml2YXRlIHJlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgQEluamVjdChDT0xVTU5fRk9STUFUVEVSUykgcHJpdmF0ZSBfY29sdW1uRm9ybWF0dGVyczogSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRpbmc6IExvYWRpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgLy8gaW5pdGlhbGl6ZSB0cmFuc2xhdGUgcGlwZVxuICAgIHRoaXMudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdGVQaXBlKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsIG5ldyBUYWJsZVRyYW5zbGF0aW9uQ2hhbmdlRGV0ZWN0b3IoKSk7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbiA9ICdidG4nO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b25BY3RpdmUgPSAnYnRuIGJ0bi1saWdodCc7XG4gICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbG9hZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuZmV0Y2goKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNpbXBsZSBzZWFyY2hcbiAgcHVibGljIHNlYXJjaChzZWFyY2hUZXh0KSB7XG4gICAgdGhpcy5xdWVyeSA9IHRoaXMucXVlcnkgfHwgdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKSB7XG4gICAgICBpZiAoc2VhcmNoVGV4dCAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSB7XG4gICAgICAgIC8vIHZhbGlkYXRlIHNlYXJjaCB0ZXh0IGluIGRvdWJsZSBxdW90ZXNcbiAgICAgICAgaWYgKC9eXCIoLio/KVwiJC8udGVzdChzZWFyY2hUZXh0KSkge1xuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24sIHtcbiAgICAgICAgICAgICAgdGV4dDogc2VhcmNoVGV4dC5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0cnkgdG8gc3BsaXQgd29yZHNcbiAgICAgICAgICBjb25zdCB3b3JkcyA9IHNlYXJjaFRleHQuc3BsaXQoJyAnKTtcbiAgICAgICAgICAvLyBqb2luIHdvcmRzIHRvIGEgc2luZ2xlIGZpbHRlclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHdvcmRzLm1hcCgod29yZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uLCB7XG4gICAgICAgICAgICAgIHRleHQ6IHdvcmQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KS5qb2luKCcgYW5kICcpO1xuICAgICAgICAgIC8vIHNldCBmaWx0ZXJcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbnN1cmUgZW1wdHkgdGFibGUgbGF5b3V0XG4gICAgICB0aGlzLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgLy8gc2VhcmNoIGxvY2FsbHlcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnNlYXJjaChzZWFyY2hUZXh0LnRyaW0oKSkuZHJhdygpO1xuICAgICAgLy8gZ2V0IGluZGV4ZXMgb2YgZmlsdGVyZWQgcm93c1xuICAgICAgY29uc3QgaW5kZXhlcyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5haURpc3BsYXkpO1xuICAgICAgLy8gc2V0IHJlY29yZHNGaWx0ZXJlZFxuICAgICAgY29uc3QgcmVjb3Jkc0ZpbHRlcmVkID0gaW5kZXhlcy5sZW5ndGg7XG4gICAgICAvLyBzZXQgcmVjb3Jkc1RvdGFsXG4gICAgICBjb25zdCByZWNvcmRzVG90YWwgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHJldHJpZXZlIGRhdGEgZnJvbSBpbmRleGVzXG4gICAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBpbmRleGVzLm1hcChpbmRleCA9PiByb3dzWzxudW1iZXI+aW5kZXhdKTtcbiAgICAgIC8vIGVtaXQgcmVzdWx0cyB0byBsb2FkIG91dHB1dFxuICAgICAgdGhpcy5sb2FkLmVtaXQoe1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IHJlY29yZHNGaWx0ZXJlZCxcbiAgICAgICAgcmVjb3Jkc1RvdGFsOiByZWNvcmRzVG90YWxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaChjbGVhclNlbGVjdGVkPzogYm9vbGVhbikge1xuICAgIC8vIGlmIGRhdGEgdGFibGUgaXMgbnVsbFxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIHJldHVybiB0aGlzLm5nT25Jbml0KCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHNlbGVjdGlvbiBpZiBwYXJhbWV0ZXIgaXMgbm90IGRlY2xhcmVkIG9yIGl0J3MgdHJ1ZVxuICAgIGlmIChjbGVhclNlbGVjdGVkID09IG51bGwgfHwgY2xlYXJTZWxlY3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCB0byBmYWxzZVxuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBjbGVhciB1bnNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgbG9hZCBkYXRhIG9ubHlcbiAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2ZpcnN0TG9hZCA9IHRydWU7XG4gICAgICBqUXVlcnkodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KS5lbXB0eSgpO1xuICAgICAgdGhpcy5kYXRhVGFibGUgPSBudWxsO1xuICAgICAgLy8gY2xlYXIgc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBjbGVhciB1bnNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCB0byBmYWxzZVxuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3dcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBnZXQgcm93XG4gICAgICBjb25zdCByb3dOb2RlID0gcm93Lm5vZGUoKTtcbiAgICAgIC8vIGlmIG11bHRpcGxlIHNlbGVjdCBpcyBmYWxzZVxuICAgICAgaWYgKHRoaXMubXVsdGlwbGVTZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBlbnVtZXJhdGUgcm93XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCcuc2VsZWN0ZWQnKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsZWFyIHNlbGVjdGVkXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIGN1c3RvbSBzZWxlY3QgbW9kZSBpcyBvZmZcbiAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgalF1ZXJ5KHJvd05vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHJvdyBkYXRhXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgLy8gc2VhcmNoIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBsZXQgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm93XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkLnB1c2goZGF0YSk7XG4gICAgICAvLyB2YWxpZGF0ZSB1bnNlbGVjdGVkIGRhdGFcbiAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gZGF0YVtrZXldO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzbHkgc2VsZWN0ZWQgcm93XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93IGlmIGl0J3Mgc2VsZWN0ZWRcbiAgICovXG4gIHB1YmxpYyB1blNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGlmIGN1c3RvbSBzZWxlY3QgbW9kZSBpcyBvZmZcbiAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICBsZXQgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgIC8vIGFkZCB0aGlzIHJvdyB0byB1bnNlbGVjdGVkIHJvd3NcbiAgICAgICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoZmluZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkLnB1c2goZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdEFueSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IGZsYWdcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSB0cnVlO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0Tm9uZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IGZsYWdcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZVNlbGVjdFJvdyhyb3c6IGFueSkge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSByb3cuZGF0YSgpO1xuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgICAgLy8gZ2V0IGlkXG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIC8vIGZpbmQgaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmQoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHVuc2VsZWN0XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gbm9pbnNwZWN0aW9uIEpTTWV0aG9kQ2FuQmVTdGF0aWNcbiAgLyoqXG4gICAqIERhdGF0YWJsZXMgY29sdW1uIHJlbmRlcmVyIGZvciBzZWxlY3QgY2hlY2tib3hcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHR5cGVcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcGFyYW0gbWV0YVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyU2VsZWN0KGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uLCB7XG4gICAgICAgIHNlbGVjdFRlbXBsYXRlOiB0ZW1wbGF0ZShgPGlucHV0IGNsYXNzPVwiY2hlY2tib3ggY2hlY2tib3gtdGhlbWUgcy1yb3dcIiB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiIGRhdGEtaWQ9XCJcXCR7ZGF0YX1cIiAvPjxsYWJlbCBmb3I9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIj4mbmJzcDs8L2xhYmVsPlxuICAgICAgICBgKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZW5kZXIgdGVtcGxhdGVcbiAgICByZXR1cm4gY29sdW1uLnNlbGVjdFRlbXBsYXRlKHtcbiAgICAgIG1ldGEsXG4gICAgICBkYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgLy8gcGFyc2UgcHJvcGVydGllc1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZywgJ3NlbGVjdGFibGUnKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGFibGUgPSB0aGlzLmNvbmZpZy5zZWxlY3RhYmxlO1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZywgJ211bHRpcGxlU2VsZWN0JykpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZVNlbGVjdCA9IHRoaXMuY29uZmlnLm11bHRpcGxlU2VsZWN0O1xuICAgICAgfVxuICAgICAgLy8gcHJlcGFyZSBjb25maWd1cmF0aW9uIGZvciBjb2x1bW5zXG4gICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5zXG4gICAgICAgIC8vIGZpbHRlciBhY3Rpb24gbGluayBjb2x1bW5cbiAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLmZvcm1hdHRlciA9PT0gJ0FjdGlvbkxpbmtGb3JtYXR0ZXInICYmIHRoaXMuc2hvd0FjdGlvbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIC8vIGNvbnZlcnQgY29sdW1uIHRvIGFkdmFuY2UgdGFibGUgY29sdW1uXG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IENvbHVtbkZvcm1hdHRlcih0aGlzLl9pbmplY3RvciksIGNvbHVtbik7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIGRhdGE6IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIGRlZmF1bHRDb250ZW50OiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRDb250ZW50JykgPyBjb2x1bW4uZGVmYXVsdENvbnRlbnQgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0b3IudHJhbnNmb3JtKGNvbHVtbi50aXRsZSksXG4gICAgICAgICAgICBzb3J0YWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdzb3J0YWJsZScpID8gY29sdW1uLnNvcnRhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnaGlkZGVuJykgPyAhY29sdW1uLmhpZGRlbiA6IHRydWUsXG4gICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGNvbHVtbi5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5jbGFzc05hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0dGVycy5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbDogZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW5EZWZpbml0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIC8vIGdldCB0YWJsZSBlbGVtZW50XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSBqUXVlcnkodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIHRhYmxlRWxlbWVudC5vbigncHJvY2Vzc2luZy5kdCcsIChldmVudCwgc2V0dGluZ3MsIHByb2Nlc3NpbmcpID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NpbmcpIHtcbiAgICAgICAgICAvLyBjbGVhciBlbXB0eSB0YWJsZSBlbGVtZW50XG4gICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJy5kYXRhVGFibGVzX2VtcHR5JykuaHRtbCgnJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQuYWRkQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5yZW1vdmVDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBkcmF3SW5kZXggPSAxO1xuICAgICAgdGFibGVFbGVtZW50Lm9uKCdvcmRlci5kdCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5kYXRhVGFibGUub3JkZXIoKTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGVDb2x1bW5zO1xuICAgICAgICAgIGlmIChvcmRlciAmJiBvcmRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXIuZW1pdChvcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KS5vbignZHJhdy5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICB0aGlzLmRyYXcuZW1pdCgpO1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBpbmZvOiB7IHBhZ2U6IG51bWJlcjsgcGFnZXM6IG51bWJlciB9ID0gdGhpcy5kYXRhVGFibGUucGFnZS5pbmZvKCk7XG4gICAgICAgICAgdGhpcy5wYWdlLmVtaXQoaW5mbyk7XG4gICAgICAgICAgaWYoZHJhd0luZGV4ID4gMSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkcmF3SW5kZXgrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7fSwgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhZGp1c3RpbmcgdGFibGUgY29sdW1ucycpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGFsbG93IHNlbGVjdGlvblxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIChhcyByb3cgcHJpbWFyeSBrZXkpXG4gICAgICAgIC8vIHRvZG86OmFsbG93IHJvdyBwcmltYXJ5IGtleSBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgLy8gYWRkIHNlbGVjdCBjb2x1bW5cbiAgICAgICAgY29uc3Qgc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjbGFzc05hbWU6ICd0ZXh0LWNlbnRlciBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIC8vIGFzc2lnbiByZW5kZXJlclxuICAgICAgICBPYmplY3QuYXNzaWduKHNlbGVjdENvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICByZW5kZXI6IHRoaXMuX3JlbmRlclNlbGVjdC5iaW5kKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzZWxlY3RDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgLy8gdXNlciBpbnRlcmZhY2UgYWRkaXRpb25zXG4gICAgICAgIC8vIGhhbmRsZSBwYWdlIGNoYW5nZSBldmVudCAoYSB0cmljayBmb3IgZmlyaW5nIGRyYXcuZHQgZXZlbnRzKVxuICAgICAgICB0YWJsZUVsZW1lbnRcbiAgICAgICAgICAvLyBoYW5kbGUgZHJhdyBldmVudHNcbiAgICAgICAgICAub24oJ2RyYXcuZHQnLCAoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBlbmFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgndGJvZHknKS5vbignY2xpY2snLCAndHInLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gc2VsZi5kYXRhVGFibGUucm93KHRoaXMpO1xuICAgICAgICAgICAgICAgIC8vIGFkZCByb3dcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdC5lbWl0KHJvdyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXQucy1yb3cnKTtcbiAgICAgICAgICAgIGVsZW1lbnRzLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gbWFrZSBzZWxlY3Rpb24gb24gY3VycmVudCBwYWdlXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBlbnVtZXJhdGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZmluZCByb3cgaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgIC8vIGlmIGlkZW50aWZpZXIgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBjaGVjayBlbGVtZW50IHdpdGggdGhpcyBpZGVudGlmaWVyIGluIGF0dHJpYnV0ZSBkYXRhLWlkXG4gICAgICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZChgaW5wdXRbZGF0YS1pZD0nJHtpZH0nXWApLnByb3AoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3MgdGhhdCBhcmUgbm90IHNlbGVjdGVkXG4gICAgICAgICAgICAgIC8vIGFuZCBkbyBub3QgaW5jbHVkZWQgaW4gdW5zZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRhdGEgaWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT0galF1ZXJ5KGVsZW1lbnQpLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgICAgICB9KSA8IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dFtkYXRhLWlkXScpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBpbml0aWFsaXplIGRhdGEgdGFibGVcbiAgICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgICAvLyBzZXQgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoTWVudTogWzUsIDEwLCA1MCwgMTAwLCAyMDAsIDUwMF0sXG4gICAgICAgIC8vIGhpZGUgbGVuZ3RoIG1lbnVcbiAgICAgICAgbGVuZ3RoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgLy8gZW5hYmxlIHNlYXJjaCBidXQgaGlkZSBzZWFyY2ggYm94IChjc3MpXG4gICAgICAgIHNlYXJjaGluZzogdHJ1ZSxcbiAgICAgICAgLy8gZW5hYmxlIGRhdGEgcHJvY2Vzc2luZ1xuICAgICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZ2V0dGluZyBzZXJ2ZXIgc2lkZSBkYXRhXG4gICAgICAgIHNlcnZlclNpZGU6IHRoaXMuc2VydmVyU2lkZSxcbiAgICAgICAgLy8gZW51bWVyYXRlIHRhYmxlIGNvbHVtbnNcbiAgICAgICAgY29sdW1uczogdGFibGVDb2x1bW5zLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIC8vIGVtaXQgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChlbXB0eURhdGFTZXQpO1xuICAgICAgICAgICAgICAvLyByZXR1cm4gZW1wdHkgZGF0YVxuICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhlbXB0eURhdGFTZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBnZXQgYWN0aXZhdGVkIHJvdXRlIHBhcmFtc1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc2VsZi5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgLy8gZ2V0IGNvbHVtbnNcbiAgICAgICAgICBjb25zdCBjb2x1bW5zID0gYW9EYXRhWzFdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBvcmRlciBleHByZXNzaW9uXG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSBhb0RhdGFbMl0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IHNraXAgcmVjb3JkcyBwYXJhbVxuICAgICAgICAgIGxldCBza2lwID0gYW9EYXRhWzNdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBwYWdlIHNpemUgcGFyYW1cbiAgICAgICAgICBsZXQgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gYXBwbHkgb3JkZXIgcGFyYW1zXG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZ2V0IG9yZGVyIHF1ZXJ5IGV4cHJlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBvcmRlci5tYXAoKGV4cHI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGFibGVDb2x1bW5zW2V4cHIuY29sdW1uXS5uYW1lICsgJyAnICsgZXhwci5kaXIgfHwgJ2FzYyc7XG4gICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAvLyBzZXQgb3JkZXJcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRvcmRlcmJ5Jywgb3JkZXJCeVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGNvbmZpZ3VyZSAkc2VsZWN0IHBhcmFtZXRlclxuICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIGNvbHVtbi52aXJ0dWFsID09PSB0cnVlICkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWUgKyAnIGFzICcgKyBjb2x1bW4ucHJvcGVydHk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5zZWxlY3QuYXBwbHkocSwgc2VsZWN0KTtcbiAgICAgICAgICAvLyBjb25maWd1cmUgJGZpbHRlclxuICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzZXQgcm91dGUgZmlsdGVyXG4gICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gWyBxdWVyeVBhcmFtcy4kZmlsdGVyIF07XG4gICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjaGVjayBpZiBxdWVyeSBwYXJhbWV0ZXJzIGNvbnRhaW4gZmlsdGVyXG4gICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHNldCByb3V0ZSAkZXhwYW5kXG4gICAgICAgICAgICBxLnNldFBhcmFtKCckZXhwYW5kJywgcXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRleHBhbmQnLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5vcmRlckJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRncm91cGJ5Jywgc2VsZi5jb25maWcuZGVmYXVsdHMuZ3JvdXBCeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuYXN5bmNCdWlsZEZpbHRlcihzZWxmLmNvbmZpZy5kZWZhdWx0cy5maWx0ZXIpLnRoZW4oKGRlZmF1bHRGaWx0ZXJTdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBxUGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICBxLnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICBpZiAocVBhcmFtcy4kZmlsdGVyKSB7IGV4cHJlc3Npb25zLnB1c2goJygnICsgcVBhcmFtcy4kZmlsdGVyICsgJyknICk7IH1cbiAgICAgICAgICAgICAgICBxLmZpbHRlcihleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuZ2V0TGlzdCgpLnRoZW4oKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdCgpO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgbGVmdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLkRhdGFUYWJsZShzZXR0aW5ncyk7XG4gICAgICB0aGlzLmluaXQuZW1pdCgpO1xuICAgICAgLy8gc2hvdyBvciBoaWRlIGhlYWRlclxuICAgICAgaWYgKCF0aGlzLnNob3dIZWFkZXIpIHtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKS5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSB7XG4gICAgICAgICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJykuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsVG9wKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbExlZnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXN0UXVlcnkoKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgaWYgKHRoaXMuY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChrZXkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgZ2V0IGl0ZW1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldEl0ZW0oKS50aGVuKCAoaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIGlmIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0galF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gcmVkcmF3IHJvd1xuICAgICAgICAgICAgcm93LmRhdGEoaXRlbSk7XG4gICAgICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94Jykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KC8tKFxcZCspJC9nLmV4ZWMoaW5wdXQuaWQpWzFdLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHk7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5VGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kdC1idXR0b25zIC5idXR0b25zLWV4Y2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbHVtbnMoY29sdW1uc1RvU2hvdykge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kYXRhVGFibGU7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5zbGljZSgxKS5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xuICAgICAgICBpZiAoY29sdW1uc1RvU2hvdy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbmZpZ1NyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMgIT0gbnVsbCkge1xuICAgICAgICAvLyBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gb24gY2hhbmdlXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICYmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jb25maWdTcmMucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICAvLyBmZXRjaCBhbmQgcmVkcmF3XG4gICAgICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG4iXX0=
@@ -1049,6 +1049,7 @@ class AdvancedTableComponent {
1049
1049
  }, 0);
1050
1050
  }
1051
1051
  });
1052
+ let drawIndex = 1;
1052
1053
  tableElement.on('order.dt', (event) => {
1053
1054
  if (this.dataTable) {
1054
1055
  const order = this.dataTable.order();
@@ -1061,8 +1062,11 @@ class AdvancedTableComponent {
1061
1062
  if (this.dataTable) {
1062
1063
  const info = this.dataTable.page.info();
1063
1064
  this.page.emit(info);
1065
+ if (drawIndex > 1)
1066
+ return;
1064
1067
  try {
1065
- this.dataTable.columns.adjust();
1068
+ drawIndex++;
1069
+ setTimeout(() => { this.dataTable.columns.adjust(); }, 1);
1066
1070
  }
1067
1071
  catch (err) {
1068
1072
  console.error('ERROR', 'An error occurred while adjusting table columns');