tnx-shared 5.3.328 → 5.3.330

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.
Files changed (21) hide show
  1. package/bundles/tnx-shared.umd.js +169 -109
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
  6. package/components/datetime-picker-range/datetime-picker-range.component.d.ts +2 -0
  7. package/components/datetime-picker-range/datetime-picker-range.component.d.ts.map +1 -1
  8. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
  9. package/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-data/entity-picker-tree-data.component.d.ts.map +1 -1
  10. package/components/entity-picker/entity-picker.component.d.ts.map +1 -1
  11. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +17 -15
  12. package/esm2015/components/datetime-picker-range/datetime-picker-range.component.js +5 -1
  13. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +7 -7
  14. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-tree-data/entity-picker-tree-data.component.js +7 -7
  15. package/esm2015/components/entity-picker/entity-picker.component.js +3 -1
  16. package/esm2015/services/canbo-hoso.service.js +36 -14
  17. package/fesm2015/tnx-shared.js +68 -39
  18. package/fesm2015/tnx-shared.js.map +1 -1
  19. package/package.json +2 -2
  20. package/services/canbo-hoso.service.d.ts.map +1 -1
  21. package/tnx-shared.metadata.json +1 -1
@@ -3,6 +3,7 @@ import { HttpClient, HttpHeaders } from '@angular/common/http';
3
3
  import { Injectable, Injector } from '@angular/core';
4
4
  import { TranslateService } from '@ngx-translate/core';
5
5
  import { EnumControlPickerType } from '../classes/constants';
6
+ import { isArray } from '../classes/environment-schema';
6
7
  import { AutoCompletePickerControlSchema, ColumnSchemaBase, DataType, EntityPickerColumn, ModelSchema, Operator } from '../classes/form-schema';
7
8
  import { CoCauToChucService } from '../components/cocautochuc/services/cocautochuc.service';
8
9
  import { EnumCanBo } from '../enums/common';
@@ -381,6 +382,17 @@ export class CanBoHoSoService extends BaseService {
381
382
  else if (((_a = control.columns) === null || _a === void 0 ? void 0 : _a.length) > 0) {
382
383
  columns.push(...control.columns);
383
384
  }
385
+ if (control.dataType == EnumControlPickerType.DOITAC && !columns.some(item => item.code == 'idDoiTac')) {
386
+ columns.push(new EntityPickerColumn({
387
+ label: 'Đối tác',
388
+ code: 'idDoiTac',
389
+ baseService: this._hoSoDoiTacService,
390
+ multiple: true,
391
+ fullTextSearch: true,
392
+ isArrayField: true,
393
+ width: '200px',
394
+ }));
395
+ }
384
396
  const result = new AutoCompletePickerControlSchema(Object.assign(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
385
397
  let result = item.hoVaTen;
386
398
  if (item.code) {
@@ -390,9 +402,30 @@ export class CanBoHoSoService extends BaseService {
390
402
  result += `- ${item.tenDonVi}`;
391
403
  }
392
404
  return result;
393
- }, required: true, afterGetDataDropdown: (dataSource, element) => {
405
+ }, required: true, afterGetDataDropdown: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
406
+ var _b, _c;
407
+ const { selectedValue } = element;
408
+ if (!selectedValue) {
409
+ const lstIdDoiTac = this._commonService.distinct(dataSource.filter(item => !!item.idDoiTac).flatMap(item => item.idDoiTac.split(',')));
410
+ const lstDoiTac = (_c = (_b = (yield this._hoSoDoiTacService.getAllWithIgnore([this.newFilter('id', Operator.in, lstIdDoiTac)], 'id,ten'))) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : [];
411
+ if (lstDoiTac.length) {
412
+ dataSource.forEach(item => {
413
+ item.tenDoiTac = lstDoiTac.filter(x => item.idDoiTac.includes(x.id)).map(x => x.ten).join(', ');
414
+ });
415
+ }
416
+ }
417
+ else {
418
+ dataSource.forEach((x) => {
419
+ var _a;
420
+ if (typeof selectedValue == 'object' && x.id == (selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.id)) {
421
+ x.tenDoiTac = selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.stridDoiTac;
422
+ }
423
+ else if (isArray(selectedValue) && selectedValue.includes(x.id))
424
+ (x.tenDoiTac = (_a = selectedValue.find(y => y.id == x.id)) === null || _a === void 0 ? void 0 : _a.stridDoiTac);
425
+ });
426
+ }
394
427
  this.getTenDonVi(dataSource);
395
- }, afterGetDataPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
428
+ }), afterGetDataPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
396
429
  yield this.getDataPlus(dataSource);
397
430
  }), afterGetDataUnPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
398
431
  yield this.getDataPlus(dataSource);
@@ -413,17 +446,6 @@ export class CanBoHoSoService extends BaseService {
413
446
  }
414
447
  return filters;
415
448
  } }, control), { columns: columns }));
416
- if (control.dataType == EnumControlPickerType.DOITAC && !this.lstEntityPickerColumn.some(item => item.code == 'idDoiTac')) {
417
- this.lstEntityPickerColumn.push(new EntityPickerColumn({
418
- label: 'Đối tác',
419
- code: 'idDoiTac',
420
- baseService: this._hoSoDoiTacService,
421
- multiple: true,
422
- fullTextSearch: true,
423
- isArrayField: true,
424
- width: '200px',
425
- }));
426
- }
427
449
  if (result.fieldPlus) {
428
450
  if (result.fieldPlus
429
451
  .split(',')
@@ -689,4 +711,4 @@ CanBoHoSoService.ctorParameters = () => [
689
711
  { type: HoSoDoiTacService },
690
712
  { type: CrudService }
691
713
  ];
692
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFD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O0lBRUQsc0JBQXNCLENBQUMsUUFBUTtRQUMzQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHlCQUF5QixDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7OztZQXR2QkosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFsQlEsVUFBVTtZQUNFLFFBQVE7WUFZcEIsbUJBQW1CO1lBQ25CLFdBQVc7WUFMWCw2QkFBNkI7WUFKN0Isa0JBQWtCO1lBTWxCLGlCQUFpQjtZQURqQixXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRW51bUNvbnRyb2xQaWNrZXJUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sdW1uU2NoZW1hQmFzZSwgRGF0YVR5cGUsIEVudGl0eVBpY2tlckNvbHVtbiwgTW9kZWxTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb0NhdVRvQ2h1Y1NlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2NvY2F1dG9jaHVjL3NlcnZpY2VzL2NvY2F1dG9jaHVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW51bUNhbkJvIH0gZnJvbSAnLi4vZW51bXMvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSB9IGZyb20gJy4vY2FuYm8taG9zby1jb2NhdXRvY2h1Yy5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSG9Tb0RvaVRhY1NlcnZpY2UgfSBmcm9tICcuL2hvc29kb2l0YWMuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2FuQm9Ib1NvU2VydmljZSBleHRlbmRzIEJhc2VTZXJ2aWNlIHtcbiAgICBlbnZpcm9ubWVudDogYW55O1xuICAgIHZlcnNpb246IGFueTtcbiAgICBsc3RFbnRpdHlQaWNrZXJDb2x1bW46IEVudGl0eVBpY2tlckNvbHVtbltdO1xuICAgIGRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0ID0ge1xuICAgICAgICB2MTogdGhpcy5nZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5WMSgpXG4gICAgfTtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlOiBDYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29DYXVUb0NodWNTZXJ2aWNlOiBDb0NhdVRvQ2h1Y1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2hvU29Eb2lUYWNTZXJ2aWNlOiBIb1NvRG9pVGFjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludH0vJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlWZXJzaW9ufS9DYW5Cb19Ib1NvYCk7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gdGhpcy5lbnZpcm9ubWVudC5hcGlEb21haW4uY2FuYm9FbmRwb2ludDtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC5jYXVIaW5oTmdoaWVwVnU/LnZlcnNpb25Db2x1bW5QaWNrZXJDYW5CbztcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmRlZmF1bHRFbnRpdHlDb2x1bW5EaWN0W2B2JHt0aGlzLnZlcnNpb259YF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4gPSB0aGlzLmdlbmVyYXRlTGlzdEVudGl0eUNvbHVtbkRlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpSGllblRhaUNhbkJvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlIaWVuVGFpLyR7aWRDYW5Cb31gKTtcbiAgICB9XG5cbiAgICBnZXRDYW5Cb0NhcFRyZW4odXNlcklkTGFzdHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9DYXBUcmVuYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogdXNlcklkTGFzdHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0TGlzdFRyZWVEb25WaVF1YW5MeUJ5VXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldExpc3RUcmVlRG9uVmlRdWFuTHlCeVVzZXJgKTtcbiAgICB9XG5cbiAgICBnZXRNb2RlbFNjaGVtYXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTcOjJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnaWQnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU+G7kSDEkWnhu4duIHRob+G6oWknLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFbWFpbCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0Q29sdW1uU2NoZW1hQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkSG9jVmllbicsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZGF0ZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZGllblRob2FpRGlEb25nJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIGlzT3ZlcnJpZGVGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxODBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDaHVjVnVTdHInLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzI1MHB4J1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0RGF0YUV4cG9ydDJDKGdyaWRJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0U2lnbmFsUihcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydDJDYCxcbiAgICAgICAgICAgIGdyaWRJbmZvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW5Tb1lldUx5TGljaChpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5Tb1lldUx5TGljaD9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvaUhvYW4oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9pSG9hbj9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbkx5TGljaEJvTmhpZW0oaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luTHlMaWNoQm9OaGllbT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0KHVybCwgaWRDYW5Cbywge1xuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYicsXG4gICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZScsXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YW9UYWlLaG9hbihpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9UYW9UYWlLaG9hbi8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0Q2FuQm9JbmZvKGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvSW5mby8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbFdpdGhDaHVjRGFuaENodWNWdShpZENhbkJvOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGV0YWlsV2l0aENodWNEYW5oQ2h1Y1Z1LyR7aWRDYW5Cb31gXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FwIG5oYXQgdHJhbmcgdGhhaSBjYW5ib19ob3NvIHRoZW8gaWQgY2FuQm9cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWRDYW5Cb1xuICAgICAqIEBwYXJhbSB7YW55fSBpZFRyYW5nVGhhaVxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIHVwZGF0ZVRyYW5nVGhhaUNhbkJvSG9TbyhpZENhbkJvOiBzdHJpbmcsIGlkVHJhbmdUaGFpOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVUcmFuZ1RoYWlDYW5Cb0hvU28/aWRDYW5Cbz0ke2lkQ2FuQm99JiZpZFRyYW5nVGhhaT0ke2lkVHJhbmdUaGFpfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge30pO1xuICAgIH1cblxuICAgIEdldFRob25nVGluQ2FuQm9JZChpZENhbkJvOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRUaG9uZ1RpbkNhbkJvSWQvJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBjaGVja0NhbkJvSW5QaG9uZ0RvaU5nb2FpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tDYW5Cb0luUGhvbmdEb2lOZ29haWApO1xuICAgIH1cblxuICAgIEdldERhbmhTYWNoQ2FuQm9UaGVvRG9uVmkobHN0SWRPcmdSZXEsIGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGFuaFNhY2hDYW5Cb1RoZW9Eb25WaS8ke2xzdElkT3JnUmVxfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldERhdGFFeHBvcnRLZXRRdWFEYW5oR2lhKGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGF0YUV4cG9ydEtldFF1YURhbmhHaWFgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBM4bqleSBkYW5oIHPDoWNoIGPDoW4gYuG7mSB2w6AgY+G6pXAgZMaw4bubaSBob+G6t2MgbMOgIG5ow6JuIHZpw6puIG5nxrDhu51pIGTDuW5nIHF14bqjbiBsw70gdHLhu7FjIHRp4bq/cFxuICAgICAqIE7hur91IHRyb25nIGPDuW5nIDEgxJHGoW4gduG7iyB0aMOsIG5nxrDhu51pIGPDsyBjaOG7qWMgduG7pSBj4bqlcCB0csaw4bufbmcgc+G6vSBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqblxuICAgICAqIEPDsm4gbmfGsOG7nWkgY8OzIGNo4bupYyB24bulIGPhuqVwIHBow7MgdGjDrCBjw7MgY+G6pXAgZMaw4bubaSBsw6AgdG/DoG4gYuG7mSBuaMOibiB2acOqbiB0cuG7qyBj4bqlcCB0csaw4bufbmcsIC4uLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8UmVzcG9uc2VSZXN1bHQ+fVxuICAgICAqL1xuICAgIGdldENhbkJvQ2FwRHVvaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvQ2FwRHVvaWApO1xuICAgIH1cblxuICAgIGNoZWNrSXNDYW5Cb1Bob25nVGNjYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrSXNDYW5Cb1Bob25nVGNjYmApO1xuICAgIH1cblxuICAgIGdldElkc0RvblZpRHVvY1BoZXBRdWFuTHkoaWREb25WaSkge1xuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaUR1b2NQaGVwUXVhbkx5YDtcbiAgICAgICAgaWYgKGlkRG9uVmkpIHtcbiAgICAgICAgICAgIHVybCArPSBgP2lkRG9uVmk9JHtpZERvblZpfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldFBoYW1WaURvblZpUXVhbkx5KGlzR2V0VHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGhhbVZpRG9uVmlRdWFuTHk/aXNHZXRUcmVlPSR7aXNHZXRUcmVlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG4gICAgZ2V0SWRzRG9uVmlRdWFuTHkoYWxsQ2hpbGQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlRdWFuTHk/YWxsQ2hpbGQ9JHthbGxDaGlsZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SWRzQ2FuQm9DdW5nRG9uVmkoKSB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVJbmZvID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgbGV0IGlkc0NhbkJvID0gW107XG4gICAgICAgIGlmIChwcm9maWxlSW5mbz8uaWRDYW5Cbykge1xuICAgICAgICAgICAgY29uc3QgY29tbW9uID0gW3RoaXMubmV3RmlsdGVyKCdjb25IaWV1THVjJywgT3BlcmF0b3IuZXF1YWwsIHRydWUpXTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZENhbkJvJywgT3BlcmF0b3IuZXF1YWwsIHByb2ZpbGVJbmZvLmlkQ2FuQm8pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGxldCBpZHNEb25WaUNhbkJvTG9naW4gPSBbXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChmaWx0ZXJzKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWREb25WaSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlkc0RvblZpQ2FuQm9Mb2dpbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlkc0RvblZpID0gW107XG4gICAgICAgICAgICBjb25zdCBjb0NhdVRvQ2h1Y0ZpbHRlcnMgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICAgICAgaWRzRG9uVmlDYW5Cb0xvZ2luLmZvckVhY2goKGlkRG9uVmkpID0+IHtcbiAgICAgICAgICAgICAgICBjb0NhdVRvQ2h1Y0ZpbHRlcnMuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZER1b25nRGFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBgOyR7aWREb25WaX07YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChbY29DYXVUb0NodWNGaWx0ZXJzXSwgJ2lkJylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0RvblZpID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpZHNEb25WaS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3ZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jb21tb24sXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkRG9uVmknLCBPcGVyYXRvci5pbiwgaWRzRG9uVmkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFsbChuZXdmaWx0ZXJzLCAnaWRDYW5CbycpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNDYW5CbyA9IHJzLmRhdGEubWFwKCh4KSA9PiB4LmlkQ2FuQm8pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaWRzQ2FuQm87XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGdlbmVyYXRlQ29sdW1uRG9uVmkoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNhcDJzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RvblZpVGhlb0NhcCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnS2hvYSB2aeG7h24vIMSRxqFuIHbhu4snKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2FwM3MnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZG9uVmlUaGVvQ2FwJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdC4buZIG3DtG4vIHbEg24gcGjDsm5nIGtob2EnKSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRJbmZvQ2FuQm9XaXRoRG9uVmlDaHVjVnUobHN0SWRDYW5Cbzogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgbHN0SWRDYW5CbyldO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhQ3VzdG9tUm91dGUoXG4gICAgICAgICAgICBgRmlsdGVyQnlPcmcvJHt0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpfWAsXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIDEwMDAwMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFRob25nVGluRG9uVmlDYW5CbyhpdGVtQ2FuQm86IGFueSwgbHN0Q2FuQm9Eb25WaTogYW55W10pIHtcbiAgICAgICAgY29uc3QgaG9Tb0RvblZpID0gbHN0Q2FuQm9Eb25WaS5maW5kKCh4KSA9PiB4LmlkID09IGl0ZW1DYW5Cby5pZENhbkJvKTtcbiAgICAgICAgaWYgKGhvU29Eb25WaSkge1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2FwMnMgPSBob1NvRG9uVmkuZG9uVmlDYXAycztcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNhcDNzID0gaG9Tb0RvblZpLmRvblZpQ2FwM3M7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDaHVjVnVzID0gaG9Tb0RvblZpLmRvblZpQ2h1Y1Z1cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERvblZpRnVsbHNCeUNhbkJvQXBpKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUZ1bGxzQnlDYW5Cb0FwaT9pZENhbkJvPSR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0SW5mb0FmdGVyR2V0RGF0YShkYXRhU291cmNlKSB7XG4gICAgICAgIGNvbnN0IGd1aWRFbXB0eSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgICAgIGNvbnN0IGlkc0NhbkJvID0gdGhpcy5fY29tbW9uU2VydmljZS5kaXN0aW5jdEFycmF5KFxuICAgICAgICAgICAgZGF0YVNvdXJjZVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaWRDYW5CbyAhPSBndWlkRW1wdHkpXG4gICAgICAgICAgICAgICAgLm1hcCgoeCkgPT4geC5pZENhbkJvKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBsc3RDYW5CbyA9IChcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5pbiwgaWRzQ2FuQm8pXSxcbiAgICAgICAgICAgICAgICAnaWQsY29kZSxob1ZhVGVuLG5nYXlTaW5oLGdpb2lUaW5oJ1xuICAgICAgICAgICAgKVxuICAgICAgICApLmRhdGE7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWRDYW5CbyAhPSBndWlkRW1wdHkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5CbyA9IGxzdENhbkJvLmZpbmQoKHgpID0+IHguaWQgPT0gZWxlbWVudC5pZENhbkJvKTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5tYUNhbkJvID0gY2FuQm8uY29kZTtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5ob1ZhVGVuID0gY2FuQm8uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50ZW5DYW5CbyA9IGNhbkJvLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubmdheVNpbmggPSBjYW5Cby5uZ2F5U2luaDtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5naW9pVGluaCA9IGNhbkJvLmdpb2lUaW5oO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWRVc2VyQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkVXNlckJ5RG9uVmlgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBsc3RJZERvblZpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJZENhbkJvQnlEb25WaShsc3RJZERvblZpOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L2dldElkQ2FuQm9CeURvblZpYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogbHN0SWREb25WaSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQodXNlcklkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlVc2VySWQvJHt1c2VySWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5TGlzdFVzZXJJZChsc3RVc2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeUxpc3RVc2VySWRgO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdFVzZXJJZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29DYXVUb0NodWNSb290RG9uVmkoZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBbGxCeUZpbHRlci9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdlbmVyYXRlUGlja2VyQ29udHJvbFNjaGVtYShjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCBlbnVtQ2FuQm86IGFueSA9IEVudW1DYW5Cby5UUk9OR19ET05fVkkpIHtcbiAgICAgICAgbGV0IGNvbHVtbnMgPSBbLi4udGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW5dO1xuICAgICAgICBpZihjb250cm9sLmlzT3ZlcnJpZGVDb2x1bW5zKXtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29udHJvbC5jb2x1bW5zXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb250cm9sLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaCguLi5jb250cm9sLmNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDYW5CbycsXG4gICAgICAgICAgICBsYWJlbDogJ0PDoW4gYuG7mScsXG4gICAgICAgICAgICB0aXRsZTogJ0No4buNbiBjw6FuIGLhu5knLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMsXG4gICAgICAgICAgICBwbHVzVXJsOiAnV2l0aENodWNEYW5oQ2h1Y1Z1JyxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgZmllbGRQbHVzOiAnY29kZScsXG4gICAgICAgICAgICBmaWVsZFNlYXJjaFRleHQ6IFsnZW1haWwnLCAnY29kZSddLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVtLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtpdGVtLmNvZGV9IC0gJHtyZXN1bHR9IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRlbkRvblZpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLSAke2l0ZW0udGVuRG9uVml9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YURyb3Bkb3duOiAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhUGlja2VkOiBhc3luYyAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREYXRhUGx1cyhkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RmlsdGVyczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0NhY2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc0NhY2hpbmcnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbnVtQ2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ2FuQm8uTkdPQUlfRE9OX1ZJOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc05nb2FpRG9uVmknLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNhbkJvLlRST05HX0RPTl9WSTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNOZ29haURvblZpJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5jb250cm9sLFxuICAgICAgICAgICAgY29sdW1uczogY29sdW1ucywgICAgICAgICAgICBcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb250cm9sLmRhdGFUeXBlID09IEVudW1Db250cm9sUGlja2VyVHlwZS5ET0lUQUMgJiYgIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnNvbWUoaXRlbSA9PiBpdGVtLmNvZGUgPT0gJ2lkRG9pVGFjJykpIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5maWVsZFBsdXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHEpID0+IHEudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZignaWROZ2FjaFZpZW5DaHVjJykgPT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1cyA9ICdpZE5nYWNoVmllbkNodWMsbmdheVNpbmgsbmdheVNpbmgyLGNodWNEYW5ocyxpZEhvY0hhbSxpZEhvY1ZpLGRpZW5UaG9haURpRG9uZyxjb2RlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIC8vIELhu5Ugc3VuZyBt4buZdCBz4buRIHRow7RuZyB0aW4gxJHhu4MgaGnhu4NuIHRo4buLIGxhYmVsIHRyw6puIGF1dG9jb21wbGV0ZSBwaWNrZXIgZOG6oW5nIGRyb3Bkb3duXG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXMgJiYgaXRlbS5kb25WaUNodWNWdXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChxKSA9PiBxLmlzRG9uVmlDaGluaFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtRG9uVmlDaGluaCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnRlbkRvblZpID0gaXRlbURvblZpQ2hpbmguY2h1Y1Z1XG4gICAgICAgICAgICAgICAgICAgID8gYCR7aXRlbURvblZpQ2hpbmguY2h1Y1Z1fSAke2l0ZW1Eb25WaUNoaW5oLmRvblZpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtRG9uVmlDaGluaC5kb25WaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGFQbHVzKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSBpdGVtLmNodWNEYW5ocy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjRGFuaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgKz0gaS5jaHVjRGFuaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzID0gJyc7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmRvblZpQ2h1Y1Z1cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjVnUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuY2h1Y1Z1fSAtICR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuZG9uVml9PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWl0ZW0ubmdheVNpbmggJiYgaXRlbS5uZ2F5U2luaDIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLm5nYXlTaW5oID0gbmV3IERhdGUoaXRlbS5uZ2F5U2luaDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5ob2NIYW1Ib2NWaVxuICAgICAgICAgICAgICAgID0gaXRlbS5pZEhvY0hhbSAmJiBpdGVtLmlkSG9jVmlcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtLmlkSG9jSGFtfS4gJHtpdGVtLmlkSG9jVml9YFxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW0uaWRIb2NIYW0gfHwgaXRlbS5pZEhvY1ZpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQ2FuQm9Ub0dpYW5nVmllbihtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlQ2FuQm9Ub0dpYW5nVmllbmAsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNyZWF0ZUdpYW5nVmllbkRvaVRhYyhtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vQ3JlYXRlR2lhbmdWaWVuRG9pVGFjYCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RG9uVmlQaGFuQ2FwQnlJZHMobW9kZWwsIGlzVXNlciA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0RG9uVmlQaGFuQ2FwQnlJZHMvJHtpc1VzZXJ9YCwgbW9kZWwpO1xuICAgIH1cblxuICAgIHVwZGF0ZUdpYW5nVmllbk5vaUJvKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQdXQoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUdpYW5nVmllbk5vaUJvLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXBkYXRlR2lhbmdWaWVuRG9pVGFjKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQdXQoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUdpYW5nVmllbkRvaVRhYy8ke21vZGVsLmlkfWAsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEx5TGljaEtob2FIb2NDYW5CbyhpZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEx5TGljaEtob2FIb2NDYW5Cby8ke2lkfWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBHZXREb25WaUNodWNWdShpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RG9uVmlDaHVjVnUvJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlTGlzdEVudGl0eUNvbHVtbkRlZmF1bHQoKSB7XG4gICAgICAgIGNvbnN0IF9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu41jIGjDoG0sIGjhu41jIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob2NIYW1Ib2NWaScsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IERhdGFUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdHaeG7m2kgdMOtbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdnaW9pVGluaCcsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IF9tYXN0ZXJEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBncm91cENvZGU6ICdHSU9JX1RJTkgnLFxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIGRhbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJDaHVjRGFuaHMnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgduG7pSAtIMSQxqFuIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJEb25WaUNodWNWdXMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGVGaWx0ZXI6IHRlbXBsYXRlLmZpbHRlckRvblZpUmVmLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcjogJ2lkRG9uVmlzJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgaXNPdmVycmlkZUZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE3MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICfEkOG7kWkgdMOhYycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2lkRG9pVGFjJyxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0FycmF5RmllbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2hvU29Eb2lUYWNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRob25nS2VDYW5CbyhwbHVzVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3RoaXMuYXBpR2V0RGF0YX0vJHtwbHVzVXJsfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlTGlzdEVudGl0eUNvbHVtblYxKCkge1xuICAgICAgICBjb25zdCBfbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc4MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaG9WYVRlbicsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBEYXRhVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdHaeG7m2kgdMOtbmgnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdnaW9pVGluaCcsXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IF9tYXN0ZXJEYXRhU2VydmljZSxcbiAgICAgICAgICAgICAgICBncm91cENvZGU6ICdHSU9JX1RJTkgnLFxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIHbhu6UgLSDEkMahbiB24buLJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyRG9uVmlDaHVjVnVzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlRmlsdGVyOiB0ZW1wbGF0ZS5maWx0ZXJEb25WaVJlZixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmllbGRGaWx0ZXI6ICdpZERvblZpcycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgIGlzT3ZlcnJpZGVGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNzBweCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldFF1YW5MeUNhcFRyZW5CeVVzZXJJZChpZFVzZXI6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2FuQm9RdWFuTHlCeVVzZXJJZC8ke2lkVXNlcn1gKTtcbiAgICB9XG5cbiAgICBnZXREYW5oU2FjaFVzZXJDYXBUcmVuKGlkc0RvblZpKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGFuaFNhY2hVc2VyQ2FwVHJlbmA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgaWRzRG9uVmkpO1xuICAgIH1cblxuXG59XG5cbiJdfQ==
714
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLCtCQUErQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFD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QUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxLQUFLO2dCQUNYLDJDQUEyQztnQkFDM0MsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLFdBQVcsRUFBRSxVQUFVO2FBQzFCLENBQUM7WUFDRixJQUFJLGtCQUFrQixDQUFDO2dCQUNuQixLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsT0FBTztnQkFDYixRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3hCLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLEtBQUssRUFBRSxPQUFPO2FBQ2pCLENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQWM7UUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsd0JBQXdCLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELHNCQUFzQixDQUFDLFFBQVE7UUFDM0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSx5QkFBeUIsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Ozs7WUF6d0JKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBbkJRLFVBQVU7WUFDRSxRQUFRO1lBYXBCLG1CQUFtQjtZQUNuQixXQUFXO1lBTFgsNkJBQTZCO1lBSjdCLGtCQUFrQjtZQU1sQixpQkFBaUI7WUFEakIsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEVudW1Db250cm9sUGlja2VyVHlwZSB9IGZyb20gJy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCBDb2x1bW5TY2hlbWFCYXNlLCBEYXRhVHlwZSwgRW50aXR5UGlja2VyQ29sdW1uLCBNb2RlbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvQ2F1VG9DaHVjU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29jYXV0b2NodWMvc2VydmljZXMvY29jYXV0b2NodWMuc2VydmljZSc7XG5pbXBvcnQgeyBFbnVtQ2FuQm8gfSBmcm9tICcuLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlIH0gZnJvbSAnLi9jYW5iby1ob3NvLWNvY2F1dG9jaHVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIb1NvRG9pVGFjU2VydmljZSB9IGZyb20gJy4vaG9zb2RvaXRhYy5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYW5Cb0hvU29TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuICAgIGVudmlyb25tZW50OiBhbnk7XG4gICAgdmVyc2lvbjogYW55O1xuICAgIGxzdEVudGl0eVBpY2tlckNvbHVtbjogRW50aXR5UGlja2VyQ29sdW1uW107XG4gICAgZGVmYXVsdEVudGl0eUNvbHVtbkRpY3QgPSB7XG4gICAgICAgIHYxOiB0aGlzLmdlbmVyYXRlTGlzdEVudGl0eUNvbHVtblYxKClcbiAgICB9O1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2U6IENhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb0NhdVRvQ2h1Y1NlcnZpY2U6IENvQ2F1VG9DaHVjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfaG9Tb0RvaVRhY1NlcnZpY2U6IEhvU29Eb2lUYWNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L0NhbkJvX0hvU29gKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50O1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSB0aGlzLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50O1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LmNhdUhpbmhOZ2hpZXBWdT8udmVyc2lvbkNvbHVtblBpY2tlckNhbkJvO1xuICAgICAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbiA9IHRoaXMuZGVmYXVsdEVudGl0eUNvbHVtbkRpY3RbYHYke3RoaXMudmVyc2lvbn1gXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbiA9IHRoaXMuZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uRGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgZ2V0SWRzRG9uVmlIaWVuVGFpQ2FuQm8oaWRDYW5Cbzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaUhpZW5UYWkvJHtpZENhbkJvfWApO1xuICAgIH1cblxuICAgIGdldENhbkJvQ2FwVHJlbih1c2VySWRMYXN0czogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDYW5Cb0NhcFRyZW5gLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiB1c2VySWRMYXN0c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRMaXN0VHJlZURvblZpUXVhbkx5QnlVc2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0TGlzdFRyZWVEb25WaVF1YW5MeUJ5VXNlcmApO1xuICAgIH1cblxuICAgIGdldE1vZGVsU2NoZW1hcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNw6MnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpZCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZEhvY1ZpZW4nLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpZCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkaWVuVGhvYWlEaURvbmcnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2h1Y1Z1U3RyJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRDb2x1bW5TY2hlbWFCYXNlKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkaWVuVGhvYWlEaURvbmcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTEwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgaXNPdmVycmlkZUZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE4MHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjUwcHgnXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cbiAgICBnZXREYXRhRXhwb3J0MkMoZ3JpZEluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3RTaWduYWxSKFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYXRhRXhwb3J0MkNgLFxuICAgICAgICAgICAgZ3JpZEluZm9cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpblNvWWV1THlMaWNoKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9JblNvWWV1THlMaWNoP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluTHlMaWNoQm9pSG9hbihpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5MeUxpY2hCb2lIb2FuP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluTHlMaWNoQm9OaGllbShpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5MeUxpY2hCb05oaWVtP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRhb1RhaUtob2FuKGlkQ2FuQm86IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1Rhb1RhaUtob2FuLyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRDYW5Cb0luZm8oaWRDYW5Cbzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9JbmZvLyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsV2l0aENodWNEYW5oQ2h1Y1Z1KGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREZXRhaWxXaXRoQ2h1Y0RhbmhDaHVjVnUvJHtpZENhbkJvfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXAgbmhhdCB0cmFuZyB0aGFpIGNhbmJvX2hvc28gdGhlbyBpZCBjYW5Cb1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZENhbkJvXG4gICAgICogQHBhcmFtIHthbnl9IGlkVHJhbmdUaGFpXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxSZXNwb25zZVJlc3VsdD59XG4gICAgICovXG4gICAgdXBkYXRlVHJhbmdUaGFpQ2FuQm9Ib1NvKGlkQ2FuQm86IHN0cmluZywgaWRUcmFuZ1RoYWk6IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZVRyYW5nVGhhaUNhbkJvSG9Tbz9pZENhbkJvPSR7aWRDYW5Cb30mJmlkVHJhbmdUaGFpPSR7aWRUcmFuZ1RoYWl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7fSk7XG4gICAgfVxuXG4gICAgR2V0VGhvbmdUaW5DYW5Cb0lkKGlkQ2FuQm86IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFRob25nVGluQ2FuQm9JZC8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGNoZWNrQ2FuQm9JblBob25nRG9pTmdvYWkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0NhbkJvSW5QaG9uZ0RvaU5nb2FpYCk7XG4gICAgfVxuXG4gICAgR2V0RGFuaFNhY2hDYW5Cb1RoZW9Eb25WaShsc3RJZE9yZ1JlcSwgZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYW5oU2FjaENhbkJvVGhlb0RvblZpLyR7bHN0SWRPcmdSZXF9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YUV4cG9ydEtldFF1YURhbmhHaWEoZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYXRhRXhwb3J0S2V0UXVhRGFuaEdpYWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEzhuqV5IGRhbmggc8OhY2ggY8OhbiBi4buZIHbDoCBj4bqlcCBkxrDhu5tpIGhv4bq3YyBsw6AgbmjDom4gdmnDqm4gbmfGsOG7nWkgZMO5bmcgcXXhuqNuIGzDvSB0cuG7sWMgdGnhur9wXG4gICAgICogTuG6v3UgdHJvbmcgY8O5bmcgMSDEkcahbiB24buLIHRow6wgbmfGsOG7nWkgY8OzIGNo4bupYyB24bulIGPhuqVwIHRyxrDhu59uZyBz4bq9IGPDsyBj4bqlcCBkxrDhu5tpIGzDoCB0b8OgbiBi4buZIG5ow6JuIHZpw6puXG4gICAgICogQ8OybiBuZ8aw4budaSBjw7MgY2jhu6ljIHbhu6UgY+G6pXAgcGjDsyB0aMOsIGPDsyBj4bqlcCBkxrDhu5tpIGzDoCB0b8OgbiBi4buZIG5ow6JuIHZpw6puIHRy4burIGPhuqVwIHRyxrDhu59uZywgLi4uXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxSZXNwb25zZVJlc3VsdD59XG4gICAgICovXG4gICAgZ2V0Q2FuQm9DYXBEdW9pKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9DYXBEdW9pYCk7XG4gICAgfVxuXG4gICAgY2hlY2tJc0NhbkJvUGhvbmdUY2NiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tJc0NhbkJvUGhvbmdUY2NiYCk7XG4gICAgfVxuXG4gICAgZ2V0SWRzRG9uVmlEdW9jUGhlcFF1YW5MeShpZERvblZpKSB7XG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkc0RvblZpRHVvY1BoZXBRdWFuTHlgO1xuICAgICAgICBpZiAoaWREb25WaSkge1xuICAgICAgICAgICAgdXJsICs9IGA/aWREb25WaT0ke2lkRG9uVml9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0UGhhbVZpRG9uVmlRdWFuTHkoaXNHZXRUcmVlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQaGFtVmlEb25WaVF1YW5MeT9pc0dldFRyZWU9JHtpc0dldFRyZWV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cbiAgICBnZXRJZHNEb25WaVF1YW5MeShhbGxDaGlsZCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaVF1YW5MeT9hbGxDaGlsZD0ke2FsbENoaWxkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJZHNDYW5Cb0N1bmdEb25WaSgpIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZUluZm8gPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBsZXQgaWRzQ2FuQm8gPSBbXTtcbiAgICAgICAgaWYgKHByb2ZpbGVJbmZvPy5pZENhbkJvKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tb24gPSBbdGhpcy5uZXdGaWx0ZXIoJ2NvbkhpZXVMdWMnLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSldO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jb21tb24sXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkQ2FuQm8nLCBPcGVyYXRvci5lcXVhbCwgcHJvZmlsZUluZm8uaWRDYW5CbyksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbGV0IGlkc0RvblZpQ2FuQm9Mb2dpbiA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKGZpbHRlcnMpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNEb25WaUNhbkJvTG9naW4gPSBycy5kYXRhLm1hcCgoeCkgPT4geC5pZERvblZpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaWRzRG9uVmlDYW5Cb0xvZ2luLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWRzRG9uVmkgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNvQ2F1VG9DaHVjRmlsdGVycyA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XG4gICAgICAgICAgICBpZHNEb25WaUNhbkJvTG9naW4uZm9yRWFjaCgoaWREb25WaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvQ2F1VG9DaHVjRmlsdGVycy5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkRHVvbmdEYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGA7JHtpZERvblZpfTtgXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKFtjb0NhdVRvQ2h1Y0ZpbHRlcnNdLCAnaWQnKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzRG9uVmkgPSBycy5kYXRhLm1hcCgoeCkgPT4geC5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlkc0RvblZpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdmaWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbixcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWREb25WaScsIE9wZXJhdG9yLmluLCBpZHNEb25WaSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKG5ld2ZpbHRlcnMsICdpZENhbkJvJylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0NhbkJvID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWRDYW5Cbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBpZHNDYW5CbztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVDb2x1bW5Eb25WaSgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2FwMnMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZG9uVmlUaGVvQ2FwJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdLaG9hIHZp4buHbi8gxJHGoW4gduG7iycpLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDYXAzcycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkb25WaVRoZW9DYXAnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Lhu5kgbcO0bi8gdsSDbiBwaMOybmcga2hvYScpLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldEluZm9DYW5Cb1dpdGhEb25WaUNodWNWdShsc3RJZENhbkJvOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBsc3RJZENhbkJvKV07XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFDdXN0b21Sb3V0ZShcbiAgICAgICAgICAgIGBGaWx0ZXJCeU9yZy8ke3RoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCl9YCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgMTAwMDAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGhvbmdUaW5Eb25WaUNhbkJvKGl0ZW1DYW5CbzogYW55LCBsc3RDYW5Cb0RvblZpOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBob1NvRG9uVmkgPSBsc3RDYW5Cb0RvblZpLmZpbmQoKHgpID0+IHguaWQgPT0gaXRlbUNhbkJvLmlkQ2FuQm8pO1xuICAgICAgICBpZiAoaG9Tb0RvblZpKSB7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDYXAycyA9IGhvU29Eb25WaS5kb25WaUNhcDJzO1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2FwM3MgPSBob1NvRG9uVmkuZG9uVmlDYXAzcztcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNodWNWdXMgPSBob1NvRG9uVmkuZG9uVmlDaHVjVnVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RG9uVmlGdWxsc0J5Q2FuQm9BcGkoaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERvblZpRnVsbHNCeUNhbkJvQXBpP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmZvQWZ0ZXJHZXREYXRhKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZ3VpZEVtcHR5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcbiAgICAgICAgY29uc3QgaWRzQ2FuQm8gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmRpc3RpbmN0QXJyYXkoXG4gICAgICAgICAgICBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pZENhbkJvICE9IGd1aWRFbXB0eSlcbiAgICAgICAgICAgICAgICAubWFwKCh4KSA9PiB4LmlkQ2FuQm8pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxzdENhbkJvID0gKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRBbGwoXG4gICAgICAgICAgICAgICAgW3RoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBpZHNDYW5CbyldLFxuICAgICAgICAgICAgICAgICdpZCxjb2RlLGhvVmFUZW4sbmdheVNpbmgsZ2lvaVRpbmgnXG4gICAgICAgICAgICApXG4gICAgICAgICkuZGF0YTtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pZENhbkJvICE9IGd1aWRFbXB0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbkJvID0gbHN0Q2FuQm8uZmluZCgoeCkgPT4geC5pZCA9PSBlbGVtZW50LmlkQ2FuQm8pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Cbykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1hQ2FuQm8gPSBjYW5Cby5jb2RlO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmhvVmFUZW4gPSBjYW5Cby5ob1ZhVGVuO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRlbkNhbkJvID0gY2FuQm8uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5uZ2F5U2luaCA9IGNhbkJvLm5nYXlTaW5oO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lmdpb2lUaW5oID0gY2FuQm8uZ2lvaVRpbmg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJZFVzZXJCeURvblZpKGxzdElkRG9uVmk6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vZ2V0SWRVc2VyQnlEb25WaWAsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGxzdElkRG9uVmksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldElkQ2FuQm9CeURvblZpKGxzdElkRG9uVmk6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vZ2V0SWRDYW5Cb0J5RG9uVmlgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBsc3RJZERvblZpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeVVzZXJJZCh1c2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeVVzZXJJZC8ke3VzZXJJZH1gO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlMaXN0VXNlcklkKGxzdFVzZXJJZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5TGlzdFVzZXJJZGA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbHN0VXNlcklkKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaShncmlkSW5mbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFsbEJ5RmlsdGVyL0dldENvQ2F1VG9DaHVjUm9vdERvblZpYDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVQaWNrZXJDb250cm9sU2NoZW1hKGNvbnRyb2w6IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsIGVudW1DYW5CbzogYW55ID0gRW51bUNhbkJvLlRST05HX0RPTl9WSSkge1xuICAgICAgICBsZXQgY29sdW1ucyA9IFsuLi50aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbl07XG4gICAgICAgIGlmKGNvbnRyb2wuaXNPdmVycmlkZUNvbHVtbnMpe1xuICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb250cm9sLmNvbHVtbnNdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKC4uLmNvbnRyb2wuY29sdW1ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2wuZGF0YVR5cGUgPT0gRW51bUNvbnRyb2xQaWNrZXJUeXBlLkRPSVRBQyAmJiAhY29sdW1ucy5zb21lKGl0ZW0gPT4gaXRlbS5jb2RlID09ICdpZERvaVRhYycpKSB7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgZmllbGQ6ICdpZENhbkJvJyxcbiAgICAgICAgICAgIGxhYmVsOiAnQ8OhbiBi4buZJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIGPDoW4gYuG7mScsXG4gICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcyxcbiAgICAgICAgICAgIHBsdXNVcmw6ICdXaXRoQ2h1Y0RhbmhDaHVjVnUnLFxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAnaG9WYVRlbicsXG4gICAgICAgICAgICBmaWVsZFBsdXM6ICdjb2RlJyxcbiAgICAgICAgICAgIGZpZWxkU2VhcmNoVGV4dDogWydlbWFpbCcsICdjb2RlJ10sXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGl0ZW0uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke2l0ZW0uY29kZX0gLSAke3Jlc3VsdH0gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udGVuRG9uVmkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAtICR7aXRlbS50ZW5Eb25WaX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhRHJvcGRvd246IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZWxlY3RlZFZhbHVlIH0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsc3RJZERvaVRhYyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZGlzdGluY3QoZGF0YVNvdXJjZS5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0uaWREb2lUYWMpLmZsYXRNYXAoaXRlbSA9PiBpdGVtLmlkRG9pVGFjLnNwbGl0KCcsJykpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbHN0RG9pVGFjID0gKGF3YWl0IHRoaXMuX2hvU29Eb2lUYWNTZXJ2aWNlLmdldEFsbFdpdGhJZ25vcmUoW3RoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBsc3RJZERvaVRhYyldLCAnaWQsdGVuJykpPy5kYXRhID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobHN0RG9pVGFjLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGVuRG9pVGFjID0gbHN0RG9pVGFjLmZpbHRlcih4ID0+IGl0ZW0uaWREb2lUYWMuaW5jbHVkZXMoeC5pZCkpLm1hcCh4ID0+IHgudGVuKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZFZhbHVlID09ICdvYmplY3QnICYmIHguaWQgPT0gc2VsZWN0ZWRWYWx1ZT8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LnRlbkRvaVRhYyA9IHNlbGVjdGVkVmFsdWU/LnN0cmlkRG9pVGFjXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoc2VsZWN0ZWRWYWx1ZSkgJiYgc2VsZWN0ZWRWYWx1ZS5pbmNsdWRlcyh4LmlkKSkgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgudGVuRG9pVGFjID0gc2VsZWN0ZWRWYWx1ZS5maW5kKHkgPT4geS5pZCA9PSB4LmlkKT8uc3RyaWREb2lUYWNcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUZW5Eb25WaShkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckdldERhdGFQaWNrZWQ6IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREYXRhUGx1cyhkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckdldERhdGFVblBpY2tlZDogYXN5bmMgKGRhdGFTb3VyY2UsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldERhdGFQbHVzKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmlzQ2FjaGluZykge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lzQ2FjaGluZycsIE9wZXJhdG9yLmVxdWFsLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudW1DYW5Cbykge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1DYW5Cby5OR09BSV9ET05fVkk6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lzTmdvYWlEb25WaScsIE9wZXJhdG9yLmVxdWFsLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ2FuQm8uVFJPTkdfRE9OX1ZJOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc05nb2FpRG9uVmknLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmNvbnRyb2wsXG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLCAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzdWx0LmZpZWxkUGx1cykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXNcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgocSkgPT4gcS50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKCdpZE5nYWNoVmllbkNodWMnKSA9PSAtMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1cyArPSAnLGlkTmdhY2hWaWVuQ2h1Yyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzID0gJ2lkTmdhY2hWaWVuQ2h1YyxuZ2F5U2luaCxuZ2F5U2luaDIsY2h1Y0RhbmhzLGlkSG9jSGFtLGlkSG9jVmksZGllblRob2FpRGlEb25nLGNvZGUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUZW5Eb25WaShkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2U/Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gQuG7lSBzdW5nIG3hu5l0IHPhu5EgdGjDtG5nIHRpbiDEkeG7gyBoaeG7g24gdGjhu4sgbGFiZWwgdHLDqm4gYXV0b2NvbXBsZXRlIHBpY2tlciBk4bqhbmcgZHJvcGRvd25cbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cyAmJiBpdGVtLmRvblZpQ2h1Y1Z1cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHEpID0+IHEuaXNEb25WaUNoaW5oXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1Eb25WaUNoaW5oKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0udGVuRG9uVmkgPSBpdGVtRG9uVmlDaGluaC5jaHVjVnVcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtRG9uVmlDaGluaC5jaHVjVnV9ICR7aXRlbURvblZpQ2hpbmguZG9uVml9YFxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW1Eb25WaUNoaW5oLmRvblZpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZTogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaHVjRGFuaHMpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9IGl0ZW0uY2h1Y0RhbmhzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9ICcnO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNEYW5oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyArPSBpLmNodWNEYW5oO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uZG9uVmlDaHVjVnVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNWdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5jaHVjVnV9IC0gJHtpLmRvblZpfTwvcD5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXRlbS5uZ2F5U2luaCAmJiBpdGVtLm5nYXlTaW5oMikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmdheVNpbmggPSBuZXcgRGF0ZShpdGVtLm5nYXlTaW5oMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmhvY0hhbUhvY1ZpXG4gICAgICAgICAgICAgICAgPSBpdGVtLmlkSG9jSGFtICYmIGl0ZW0uaWRIb2NWaVxuICAgICAgICAgICAgICAgICAgICA/IGAke2l0ZW0uaWRIb2NIYW19LiAke2l0ZW0uaWRIb2NWaX1gXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbS5pZEhvY0hhbSB8fCBpdGVtLmlkSG9jVmk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDYW5Cb1RvR2lhbmdWaWVuKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVDYW5Cb1RvR2lhbmdWaWVuYCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY3JlYXRlR2lhbmdWaWVuRG9pVGFjKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9DcmVhdGVHaWFuZ1ZpZW5Eb2lUYWNgLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb25WaVBoYW5DYXBCeUlkcyhtb2RlbCwgaXNVc2VyID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaVBoYW5DYXBCeUlkcy8ke2lzVXNlcn1gLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgdXBkYXRlR2lhbmdWaWVuTm9pQm8obW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuTm9pQm8vJHttb2RlbC5pZH1gLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVHaWFuZ1ZpZW5Eb2lUYWMobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuRG9pVGFjLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0THlMaWNoS2hvYUhvY0NhbkJvKGlkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0THlMaWNoS2hvYUhvY0NhbkJvLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldERvblZpQ2h1Y1Z1KGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUNodWNWdS8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uRGVmYXVsdCgpIHtcbiAgICAgICAgY29uc3QgX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnODBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jWMgaMOgbSwgaOG7jWMgduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2hvY0hhbUhvY1ZpJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogRGF0YVR5cGUuZGF0ZSxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgZGFuaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckNodWNEYW5ocycsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCcsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulIC0gxJDGoW4gduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckRvblZpQ2h1Y1Z1cycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB0ZW1wbGF0ZUZpbHRlcjogdGVtcGxhdGUuZmlsdGVyRG9uVmlSZWYsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyOiAnaWREb25WaXMnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICBpc092ZXJyaWRlRmlsdGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTcwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buRaSB0w6FjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQXJyYXlGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGhvbmdLZUNhbkJvKHBsdXNVcmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREYXRhfS8ke3BsdXNVcmx9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uVjEoKSB7XG4gICAgICAgIGNvbnN0IF9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IERhdGFUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgduG7pSAtIMSQxqFuIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJEb25WaUNodWNWdXMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGVGaWx0ZXI6IHRlbXBsYXRlLmZpbHRlckRvblZpUmVmLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcjogJ2lkRG9uVmlzJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgaXNPdmVycmlkZUZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE3MHB4JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0UXVhbkx5Q2FwVHJlbkJ5VXNlcklkKGlkVXNlcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DYW5Cb1F1YW5MeUJ5VXNlcklkLyR7aWRVc2VyfWApO1xuICAgIH1cblxuICAgIGdldERhbmhTYWNoVXNlckNhcFRyZW4oaWRzRG9uVmkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYW5oU2FjaFVzZXJDYXBUcmVuYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBpZHNEb25WaSk7XG4gICAgfVxuXG5cbn1cblxuIl19
@@ -17655,6 +17655,17 @@ class CanBoHoSoService extends BaseService {
17655
17655
  else if (((_a = control.columns) === null || _a === void 0 ? void 0 : _a.length) > 0) {
17656
17656
  columns.push(...control.columns);
17657
17657
  }
17658
+ if (control.dataType == EnumControlPickerType.DOITAC && !columns.some(item => item.code == 'idDoiTac')) {
17659
+ columns.push(new EntityPickerColumn({
17660
+ label: 'Đối tác',
17661
+ code: 'idDoiTac',
17662
+ baseService: this._hoSoDoiTacService,
17663
+ multiple: true,
17664
+ fullTextSearch: true,
17665
+ isArrayField: true,
17666
+ width: '200px',
17667
+ }));
17668
+ }
17658
17669
  const result = new AutoCompletePickerControlSchema(Object.assign(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
17659
17670
  let result = item.hoVaTen;
17660
17671
  if (item.code) {
@@ -17664,9 +17675,30 @@ class CanBoHoSoService extends BaseService {
17664
17675
  result += `- ${item.tenDonVi}`;
17665
17676
  }
17666
17677
  return result;
17667
- }, required: true, afterGetDataDropdown: (dataSource, element) => {
17678
+ }, required: true, afterGetDataDropdown: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
17679
+ var _b, _c;
17680
+ const { selectedValue } = element;
17681
+ if (!selectedValue) {
17682
+ const lstIdDoiTac = this._commonService.distinct(dataSource.filter(item => !!item.idDoiTac).flatMap(item => item.idDoiTac.split(',')));
17683
+ const lstDoiTac = (_c = (_b = (yield this._hoSoDoiTacService.getAllWithIgnore([this.newFilter('id', Operator.in, lstIdDoiTac)], 'id,ten'))) === null || _b === void 0 ? void 0 : _b.data) !== null && _c !== void 0 ? _c : [];
17684
+ if (lstDoiTac.length) {
17685
+ dataSource.forEach(item => {
17686
+ item.tenDoiTac = lstDoiTac.filter(x => item.idDoiTac.includes(x.id)).map(x => x.ten).join(', ');
17687
+ });
17688
+ }
17689
+ }
17690
+ else {
17691
+ dataSource.forEach((x) => {
17692
+ var _a;
17693
+ if (typeof selectedValue == 'object' && x.id == (selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.id)) {
17694
+ x.tenDoiTac = selectedValue === null || selectedValue === void 0 ? void 0 : selectedValue.stridDoiTac;
17695
+ }
17696
+ else if (isArray(selectedValue) && selectedValue.includes(x.id))
17697
+ (x.tenDoiTac = (_a = selectedValue.find(y => y.id == x.id)) === null || _a === void 0 ? void 0 : _a.stridDoiTac);
17698
+ });
17699
+ }
17668
17700
  this.getTenDonVi(dataSource);
17669
- }, afterGetDataPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
17701
+ }), afterGetDataPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
17670
17702
  yield this.getDataPlus(dataSource);
17671
17703
  }), afterGetDataUnPicked: (dataSource, element) => __awaiter(this, void 0, void 0, function* () {
17672
17704
  yield this.getDataPlus(dataSource);
@@ -17687,17 +17719,6 @@ class CanBoHoSoService extends BaseService {
17687
17719
  }
17688
17720
  return filters;
17689
17721
  } }, control), { columns: columns }));
17690
- if (control.dataType == EnumControlPickerType.DOITAC && !this.lstEntityPickerColumn.some(item => item.code == 'idDoiTac')) {
17691
- this.lstEntityPickerColumn.push(new EntityPickerColumn({
17692
- label: 'Đối tác',
17693
- code: 'idDoiTac',
17694
- baseService: this._hoSoDoiTacService,
17695
- multiple: true,
17696
- fullTextSearch: true,
17697
- isArrayField: true,
17698
- width: '200px',
17699
- }));
17700
- }
17701
17722
  if (result.fieldPlus) {
17702
17723
  if (result.fieldPlus
17703
17724
  .split(',')
@@ -38629,12 +38650,12 @@ class EntityPickerDataComponent extends DataListBase {
38629
38650
  if (this.control.filterWhileProcess) {
38630
38651
  yield appendDefaultFilter(gridInfo.filters, this.control.filterWhileProcess);
38631
38652
  }
38632
- if (this.setting.columnSetting.sortField) {
38633
- gridInfo.sorts.push({
38634
- field: this.setting.columnSetting.sortField,
38635
- dir: this.setting.columnSetting.sortDir ? 1 : -1
38636
- });
38637
- }
38653
+ // if (this.setting.columnSetting.sortField) {
38654
+ // gridInfo.sorts.push(<Sort>{
38655
+ // field: this.setting.columnSetting.sortField,
38656
+ // dir: this.setting.columnSetting.sortDir ? 1 : -1
38657
+ // });
38658
+ // }
38638
38659
  if (this.searchData && Array.isArray(this.searchData.lstData)) {
38639
38660
  gridInfo.filters.push(this.newFilter(this.searchData.fieldFilter, Operator.in, this.searchData.lstData));
38640
38661
  }
@@ -39236,9 +39257,9 @@ class AutoCompletePickerComponent extends ComponentBase {
39236
39257
  displayField: this.control.displayField,
39237
39258
  valueField: this.control.valueField,
39238
39259
  fieldPlus: this.control.fieldPlus,
39239
- funcGetLabel: this.control.funcGetLabel,
39240
- plusUrl: this.control.plusUrl,
39241
39260
  sorts: this.control.sorts,
39261
+ funcGetLabel: this.control.funcGetLabel,
39262
+ plusUrl: this.control.plusUrl
39242
39263
  });
39243
39264
  if (pageSize) {
39244
39265
  result.pageSize = pageSize;
@@ -39279,7 +39300,7 @@ class AutoCompletePickerComponent extends ComponentBase {
39279
39300
  }
39280
39301
  }
39281
39302
  const dataSource = yield this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions());
39282
- this.fireEventAfterGetDataDropDown(dataSource);
39303
+ yield this.fireEventAfterGetDataDropDown(dataSource);
39283
39304
  this.reStructureDataSource(dataSource);
39284
39305
  this.results = this.dataSource;
39285
39306
  // Return để một số nơi khác dùng, k remove
@@ -39287,9 +39308,11 @@ class AutoCompletePickerComponent extends ComponentBase {
39287
39308
  });
39288
39309
  }
39289
39310
  fireEventAfterGetDataDropDown(dataSource) {
39290
- if (this.control.afterGetDataDropdown) {
39291
- this.control.afterGetDataDropdown(dataSource, this);
39292
- }
39311
+ return __awaiter(this, void 0, void 0, function* () {
39312
+ if (this.control.afterGetDataDropdown) {
39313
+ yield this.control.afterGetDataDropdown(dataSource, this);
39314
+ }
39315
+ });
39293
39316
  }
39294
39317
  resetControl() {
39295
39318
  // if (this._value != null) {
@@ -39471,7 +39494,7 @@ class AutoCompletePickerComponent extends ComponentBase {
39471
39494
  dataSource = yield this.control.baseService.getDataDropdownByFilter([
39472
39495
  this.newFilter(this.control.valueField, Operator.in, this.value)
39473
39496
  ], this.getDropdownOptions(this.value.length));
39474
- this.fireEventAfterGetDataDropDown(dataSource);
39497
+ yield this.fireEventAfterGetDataDropDown(dataSource);
39475
39498
  }
39476
39499
  this.reStructureDataSource(dataSource);
39477
39500
  this.selectedValueObject = this.dataSource;
@@ -39482,7 +39505,7 @@ class AutoCompletePickerComponent extends ComponentBase {
39482
39505
  dataSource = yield this.control.baseService.getDataDropdownByFilter([
39483
39506
  this.newFilter(this.control.valueField, Operator.equal, this.value)
39484
39507
  ], this.getDropdownOptions(1));
39485
- this.fireEventAfterGetDataDropDown(dataSource);
39508
+ yield this.fireEventAfterGetDataDropDown(dataSource);
39486
39509
  }
39487
39510
  this.reStructureDataSource(dataSource);
39488
39511
  if (this.dataSource.length > 0) {
@@ -39538,13 +39561,13 @@ class AutoCompletePickerComponent extends ComponentBase {
39538
39561
  const filters = [];
39539
39562
  filters.push(this.newFilter(this.control.valueField, Operator.in, obj));
39540
39563
  yield appendDefaultFilter(filters, this.control.defaultFilters);
39541
- this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions(obj.length)).then(res => {
39542
- this.fireEventAfterGetDataDropDown(res);
39564
+ this.control.baseService.getDataDropdownByFilter(filters, this.getDropdownOptions(obj.length)).then((res) => __awaiter(this, void 0, void 0, function* () {
39565
+ yield this.fireEventAfterGetDataDropDown(res);
39543
39566
  this.reStructureDataSource(res);
39544
39567
  this.results = this.dataSource;
39545
39568
  this.selectedValueObject = this.dataSource;
39546
39569
  resolve(this.selectedValueObject);
39547
- });
39570
+ }));
39548
39571
  }
39549
39572
  else {
39550
39573
  this.results = [];
@@ -39554,9 +39577,9 @@ class AutoCompletePickerComponent extends ComponentBase {
39554
39577
  }
39555
39578
  else {
39556
39579
  if (obj != null) {
39557
- this.control.baseService.getDataDropdownByFilter([this.newFilter(this.control.valueField, Operator.equal, obj)], this.getDropdownOptions(1)).then(res => {
39580
+ this.control.baseService.getDataDropdownByFilter([this.newFilter(this.control.valueField, Operator.equal, obj)], this.getDropdownOptions(1)).then((res) => __awaiter(this, void 0, void 0, function* () {
39558
39581
  if ((res === null || res === void 0 ? void 0 : res.length) > 0) {
39559
- this.fireEventAfterGetDataDropDown(res);
39582
+ yield this.fireEventAfterGetDataDropDown(res);
39560
39583
  this.reStructureDataSource(res);
39561
39584
  this.results = this.dataSource;
39562
39585
  this.selectedValueObject = this.dataSource[0];
@@ -39565,7 +39588,7 @@ class AutoCompletePickerComponent extends ComponentBase {
39565
39588
  this.control.callBack.select(this.selectedValue);
39566
39589
  }
39567
39590
  }
39568
- });
39591
+ }));
39569
39592
  }
39570
39593
  else {
39571
39594
  this.results = [];
@@ -40661,8 +40684,10 @@ class DatetimePickerRangeComponent {
40661
40684
  writeValue(value) {
40662
40685
  }
40663
40686
  registerOnChange(fn) {
40687
+ this.onChange = fn;
40664
40688
  }
40665
40689
  registerOnTouched(fn) {
40690
+ this.onTouched = fn;
40666
40691
  }
40667
40692
  clear() {
40668
40693
  const re = (this._controlModelData[0] != null) || (this._controlModelData[1] != null);
@@ -40671,12 +40696,14 @@ class DatetimePickerRangeComponent {
40671
40696
  }
40672
40697
  handleChanged(evt) {
40673
40698
  if (this._controlModelData[0] && this._controlModelData[1] && this._controlModelData[0] > this._controlModelData[1]) {
40699
+ this.onChange([this._controlModelData[1], this._controlModelData[0]]);
40674
40700
  this.onChanged.next({
40675
40701
  childEvent: evt,
40676
40702
  value: [this._controlModelData[1], this._controlModelData[0]]
40677
40703
  });
40678
40704
  return;
40679
40705
  }
40706
+ this.onChange(this._controlModelData);
40680
40707
  this.onChanged.next({
40681
40708
  childEvent: evt,
40682
40709
  value: this._controlModelData
@@ -41279,12 +41306,12 @@ class EntityPickerTreeDataComponent extends TreeListBase {
41279
41306
  if (this.control.filterWhileProcess) {
41280
41307
  yield appendDefaultFilter(gridInfo.filters, this.control.filterWhileProcess);
41281
41308
  }
41282
- if (this.setting.columnSetting.sortField) {
41283
- gridInfo.sorts.push({
41284
- field: this.setting.columnSetting.sortField,
41285
- dir: this.setting.columnSetting.sortDir ? 1 : -1
41286
- });
41287
- }
41309
+ // if (this.setting.columnSetting.sortField) {
41310
+ // gridInfo.sorts.push(<Sort>{
41311
+ // field: this.setting.columnSetting.sortField,
41312
+ // dir: this.setting.columnSetting.sortDir ? 1 : -1
41313
+ // });
41314
+ // }
41288
41315
  });
41289
41316
  }
41290
41317
  beforeRenderDataSource(data) {
@@ -41672,6 +41699,8 @@ class EntityPickerComponent extends DataListBase {
41672
41699
  this.setting.fieldSearchText = this.control.fieldSearchText;
41673
41700
  this.setting.showEditLink = !this.readOnly && this.control.showEditLink;
41674
41701
  this.setting.hiddenPageSetting = this.control.hiddenPageSetting;
41702
+ this.setting.columnSetting.sortField = this.control.sortField;
41703
+ this.setting.columnSetting.sortDir = this.control.sortDir;
41675
41704
  this.plusUrl = this.control.plusUrl;
41676
41705
  // Todo: HieuND
41677
41706
  this.control.columns.forEach(column => {