@smarterplan/ngx-smarterplan-core 1.0.48 → 1.0.49

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 (83) hide show
  1. package/esm2020/lib/services/models/equipment.service.mjs +19 -3
  2. package/esm2020/lib/services/models/measurement.service.mjs +22 -5
  3. package/esm2020/lib/services/models/poi.service.mjs +22 -4
  4. package/esm2020/lib/services/models/ticket.service.mjs +35 -3
  5. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +2975 -2891
  6. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  7. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +2829 -2747
  8. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  9. package/lib/components/csv-export/csv-export.component.d.ts.map +1 -0
  10. package/lib/components/loader/loader.component.d.ts.map +1 -0
  11. package/lib/components/menu-bar/avatar/avatar.component.d.ts.map +1 -0
  12. package/lib/components/menu-bar/menu-bar.component.d.ts.map +1 -0
  13. package/lib/components/menu-bar/navigation-bar/navigation-bar.component.d.ts.map +1 -0
  14. package/lib/components/menu-bar/range-date-picker/range-date-picker.component.d.ts.map +1 -0
  15. package/lib/components/modal-switch-visit/modal-switch-visit.component.d.ts.map +1 -0
  16. package/lib/components/search-bar/search-bar.component.d.ts.map +1 -0
  17. package/lib/components/support-modal/support-modal.component.d.ts.map +1 -0
  18. package/lib/config.d.ts.map +1 -0
  19. package/lib/helpers.service.d.ts.map +1 -0
  20. package/lib/mattertagData.d.ts.map +1 -0
  21. package/lib/ngx-smarterplan-core.module.d.ts.map +1 -0
  22. package/lib/ngx-smarterplan-core.service.d.ts.map +1 -0
  23. package/lib/pipes/duration-to-string.pipe.d.ts.map +1 -0
  24. package/lib/pipes/format-date-number-to-digits.pipe.d.ts.map +1 -0
  25. package/lib/pipes/hashtag-from-id.pipe.d.ts.map +1 -0
  26. package/lib/pipes/safe-url.pipe.d.ts.map +1 -0
  27. package/lib/pipes/time-date-to-local-string.pipe.d.ts.map +1 -0
  28. package/lib/pipes/username-from-id.pipe.d.ts.map +1 -0
  29. package/lib/services/amplify-cache.service.d.ts.map +1 -0
  30. package/lib/services/base-tab.service.d.ts.map +1 -0
  31. package/lib/services/baseVisibility.service.d.ts.map +1 -0
  32. package/lib/services/content.service.d.ts.map +1 -0
  33. package/lib/services/filter.service.d.ts.map +1 -0
  34. package/lib/services/intervention.service.d.ts.map +1 -0
  35. package/lib/services/locale.service.d.ts.map +1 -0
  36. package/lib/services/matterport-import.service.d.ts.map +1 -0
  37. package/lib/services/matterport.service.d.ts.map +1 -0
  38. package/lib/services/models/affectation.service.d.ts.map +1 -0
  39. package/lib/services/models/base-object.service.d.ts.map +1 -0
  40. package/lib/services/models/capture.service.d.ts.map +1 -0
  41. package/lib/services/models/comment.service.d.ts.map +1 -0
  42. package/lib/services/models/domain.service.d.ts.map +1 -0
  43. package/lib/services/models/equipment.service.d.ts +2 -1
  44. package/lib/services/models/equipment.service.d.ts.map +1 -0
  45. package/lib/services/models/event.service.d.ts.map +1 -0
  46. package/lib/services/models/feature.service.d.ts.map +1 -0
  47. package/lib/services/models/hashtag.service.d.ts.map +1 -0
  48. package/lib/services/models/layer.service.d.ts.map +1 -0
  49. package/lib/services/models/measurement.service.d.ts +2 -1
  50. package/lib/services/models/measurement.service.d.ts.map +1 -0
  51. package/lib/services/models/mission.service.d.ts.map +1 -0
  52. package/lib/services/models/navigation.service.d.ts.map +1 -0
  53. package/lib/services/models/node.service.d.ts.map +1 -0
  54. package/lib/services/models/operation.service.d.ts.map +1 -0
  55. package/lib/services/models/organisation.service.d.ts.map +1 -0
  56. package/lib/services/models/plan.service.d.ts.map +1 -0
  57. package/lib/services/models/poi.service.d.ts +4 -1
  58. package/lib/services/models/poi.service.d.ts.map +1 -0
  59. package/lib/services/models/profile.service.d.ts.map +1 -0
  60. package/lib/services/models/property.service.d.ts.map +1 -0
  61. package/lib/services/models/space.service.d.ts.map +1 -0
  62. package/lib/services/models/template.service.d.ts.map +1 -0
  63. package/lib/services/models/ticket.service.d.ts +2 -1
  64. package/lib/services/models/ticket.service.d.ts.map +1 -0
  65. package/lib/services/models/visit.service.d.ts.map +1 -0
  66. package/lib/services/models/zone.service.d.ts.map +1 -0
  67. package/lib/services/navigator.service.d.ts.map +1 -0
  68. package/lib/services/s3.service.d.ts.map +1 -0
  69. package/lib/services/search.service.d.ts.map +1 -0
  70. package/lib/services/support.service.d.ts.map +1 -0
  71. package/lib/services/tag.service.d.ts.map +1 -0
  72. package/lib/services/user.service.d.ts.map +1 -0
  73. package/lib/services/validators.service.d.ts.map +1 -0
  74. package/lib/services/viewer.service.d.ts.map +1 -0
  75. package/lib/services/zone-drawer.service.d.ts.map +1 -0
  76. package/lib/types.service.d.ts.map +1 -0
  77. package/lib/validators/email.directive.d.ts.map +1 -0
  78. package/lib/validators/no-empty.directive.d.ts.map +1 -0
  79. package/lib/validators/number.directive.d.ts.map +1 -0
  80. package/lib/validators/text.directive.d.ts.map +1 -0
  81. package/package.json +1 -1
  82. package/public-api.d.ts.map +1 -0
  83. package/smarterplan-ngx-smarterplan-core.d.ts.map +1 -0
@@ -16,7 +16,7 @@ import * as i7 from "../user.service";
16
16
  import * as i8 from "../viewer.service";
17
17
  import * as i9 from "@ng-bootstrap/ng-bootstrap";
18
18
  export class EquipmentService extends BaseObjectService {
19
- constructor(apiInjected, poiService, navigationService, operationService, ticketsService, navigatorService, filterService, userService, viewerService, modalService) {
19
+ constructor(apiInjected, awsKinesisAnalyticsInjected, poiService, navigationService, operationService, ticketsService, navigatorService, filterService, userService, viewerService, modalService) {
20
20
  super(poiService, navigationService);
21
21
  this.operationService = operationService;
22
22
  this.ticketsService = ticketsService;
@@ -49,6 +49,7 @@ export class EquipmentService extends BaseObjectService {
49
49
  this.isMuseumUser = false;
50
50
  this.destroy$ = new Subject();
51
51
  this.API = apiInjected;
52
+ this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;
52
53
  this.isMuseumUser = this.userService.hasOnlyMuseumRole();
53
54
  this.initSubscriptions();
54
55
  this.userService.isChanged.subscribe((isConnected) => {
@@ -90,6 +91,18 @@ export class EquipmentService extends BaseObjectService {
90
91
  }
91
92
  async createEquipment(equip, imageFile, documentFile) {
92
93
  removeNullKeysFromObject(equip);
94
+ this.awsKinesisAnalytics.getInstance().record(
95
+ // @ts-ignore
96
+ {
97
+ data: {
98
+ eventType: "Object Creation",
99
+ poi: equip,
100
+ user: this.userService.cu,
101
+ timestamp: new Date(),
102
+ },
103
+ streamName: "smarterplanKinesis-analytics",
104
+ // partitionKey: "",
105
+ }, "AWSKinesis");
93
106
  return this.API.CreateEquipment(equip).then(async (receivedEquipment) => {
94
107
  let equipment = receivedEquipment;
95
108
  if (equipment) {
@@ -641,7 +654,7 @@ export class EquipmentService extends BaseObjectService {
641
654
  this.destroy$.complete();
642
655
  }
643
656
  }
644
- EquipmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EquipmentService, deps: [{ token: 'currentAPIService' }, { token: i1.PoiService }, { token: i2.NavigationService }, { token: i3.OperationService }, { token: i4.TicketsService }, { token: i5.NavigatorService }, { token: i6.FilterService }, { token: i7.BaseUserService }, { token: i8.ViewerService }, { token: i9.NgbModal }], target: i0.ɵɵFactoryTarget.Injectable });
657
+ EquipmentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EquipmentService, deps: [{ token: 'currentAPIService' }, { token: 'currentAwsKinesisAnalyticsService' }, { token: i1.PoiService }, { token: i2.NavigationService }, { token: i3.OperationService }, { token: i4.TicketsService }, { token: i5.NavigatorService }, { token: i6.FilterService }, { token: i7.BaseUserService }, { token: i8.ViewerService }, { token: i9.NgbModal }], target: i0.ɵɵFactoryTarget.Injectable });
645
658
  EquipmentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EquipmentService, providedIn: 'root' });
646
659
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EquipmentService, decorators: [{
647
660
  type: Injectable,
@@ -651,5 +664,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
651
664
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
652
665
  type: Inject,
653
666
  args: ['currentAPIService']
667
+ }] }, { type: undefined, decorators: [{
668
+ type: Inject,
669
+ args: ['currentAwsKinesisAnalyticsService']
654
670
  }] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.OperationService }, { type: i4.TicketsService }, { type: i5.NavigatorService }, { type: i6.FilterService }, { type: i7.BaseUserService }, { type: i8.ViewerService }, { type: i9.NgbModal }]; } });
655
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsd0JBQXdCLEdBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQU1ILFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUdULE9BQU8sRUFDUCxVQUFVLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBSzNDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFvRG5ELFlBQ2lDLFdBQWdCLEVBQzdDLFVBQXNCLEVBQ3RCLGlCQUFvQyxFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFdBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLFlBQXNCO1FBRTlCLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQVI3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xD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QUFFO2dCQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDckM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVQLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFUCxJQUFJLENBQUMsZ0JBQWdCO2lCQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMzQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7NkdBaHlCUSxnQkFBZ0Isa0JBcURiLG1CQUFtQjtpSEFyRHRCLGdCQUFnQixjQUZiLE1BQU07MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBc0RRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2gsXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LFxufSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uLy4uL21hdHRlcnRhZ0RhdGEnO1xuaW1wb3J0IHtcbiAgICBOb3RlLFxuICAgIFpvbmUsXG4gICAgRXF1aXBtZW50LFxuICAgIEVxdWlwbWVudERvY3VtZW50LFxuICAgIFRpY2tldCxcbiAgICBUeXBlTm90ZSxcbiAgICBNaXNzaW9uLFxuICAgIEV2ZW50U3RhdHVzLFxuICAgIEV2ZW50VHlwZSxcbiAgICBPcGVyYXRpb24sXG4gICAgUE9JLFxuICAgIFBvaVR5cGUsXG4gICAgUm9sZVN0YXR1cyxcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgZGVsZXRlRnJvbVMzLFxuICAgIGdldFNpZ25lZEZpbGUsXG4gICAgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQsXG4gICAgdXBsb2FkRmlsZVRvUzMsXG59IGZyb20gJy4uL3MzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlT2JqZWN0U2VydmljZSB9IGZyb20gJy4vYmFzZS1vYmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL29wZXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tICcuL3BvaS5zZXJ2aWNlJztcbmltcG9ydCB7IFRpY2tldHNTZXJ2aWNlIH0gZnJvbSAnLi90aWNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVxdWlwbWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlT2JqZWN0U2VydmljZSB7XG4gICAgcHJpdmF0ZSBwcmVmaXggPSB7XG4gICAgICAgIHRlY2huaWNhbDogJ2VxdWlwbWVudHMvbm90ZS90ZWNobmljYWwvJyxcbiAgICAgICAgaW1hZ2U6ICdlcXVpcG1lbnRzL25vdGUvaW1hZ2UvJyxcbiAgICAgICAgZmluYW5jaWFsOiAnZXF1aXBtZW50cy9ub3RlL2ZpbmFuY2lhbC8nLFxuICAgICAgICBpbmZvcm1hdGlvbjogJ2VxdWlwbWVudHMvbm90ZS9pbmZvcm1hdGlvbi8nLFxuICAgICAgICBvdGhlcjogJ2VxdWlwbWVudHMvbm90ZS9vdGhlci8nLFxuICAgICAgICBjb250cmFjdHVhbDogJ2VxdWlwbWVudHMvbm90ZS9jb250cmFjdHVhbC8nLFxuICAgIH07XG5cbiAgICBlcXVpcG1lbnRzVXBkYXRlZDogU3ViamVjdDx7XG4gICAgICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcbiAgICAgICAgem9uZTogRXF1aXBtZW50W107XG4gICAgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY3VycmVudEVxdWlwbWVudHM6IHtcbiAgICAgICAgc3BhY2U6IEVxdWlwbWVudFtdO1xuICAgICAgICB6b25lc01hcDogTWFwPHN0cmluZywgRXF1aXBtZW50W10+O1xuICAgIH0gPSB7XG4gICAgICAgICAgICBzcGFjZTogW10sXG4gICAgICAgICAgICB6b25lc01hcDogbmV3IE1hcCgpLFxuICAgICAgICB9O1xuXG4gICAgZXF1aXBtZW50c1RhZ3M6IFN1YmplY3Q8RXF1aXBtZW50W10+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHpvbmVJREZpbHRlcjogc3RyaW5nO1xuXG4gICAgY3VycmVudFpvbmU6IFpvbmU7XG5cbiAgICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xuXG4gICAgLyoqIE51bGwgbWVhbnMgd2UgZG8gbm90IGFwcGx5IGEgZmlsdGVyLCBlbXB0eSBhcnJheSAoW10pLCBtZWFucyB3ZSB0aGF0IHdlIGhpZGUgYWxsIGVxdWlwbWVudCAqL1xuICAgIGVxdWlwbWVudERvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xuXG4gICAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcblxuICAgIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xuXG4gICAgZGVsZXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNyZWF0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICB1cGRhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgQVBJOiBhbnk7IC8vQVdTXG5cbiAgICBpc011c2V1bVVzZXIgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcbiAgICAgICAgcG9pU2VydmljZTogUG9pU2VydmljZSxcbiAgICAgICAgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxuICAgICkge1xuICAgICAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNDaGFuZ2VkLnN1YnNjcmliZSgoaXNDb25uZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkRXF1aXBtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldEVxdWlwbWVudChpZCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVxdWlwOiBFcXVpcG1lbnQ7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZWRFcXVpcCkge1xuICAgICAgICAgICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcbiAgICAgICAgICAgICAgICBlcXVpcCA9IGF3YWl0IHRoaXMuZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChyZWNlaXZlZEVxdWlwKTtcbiAgICAgICAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcXVpcC5kb21haW4ucGFyZW50SUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwLmNoaWxkRG9tYWluID0gZXF1aXAuZG9tYWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXF1aXAuc3ViZXF1aXBtZW50c0lEcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVpcC5zdWJlcXVpcG1lbnRzSURzLm1hcChhc3luYyAoc3ViSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLkdldEVxdWlwbWVudChzdWJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXAuc3ViRXF1aXBtZW50cyA9IHN1YkVxdWlwcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXF1aXA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcbiAgICAgICAgZXF1aXA6IEVxdWlwbWVudCxcbiAgICAgICAgaW1hZ2VGaWxlOiBGaWxlLFxuICAgICAgICBkb2N1bWVudEZpbGU6IEZpbGVcbiAgICApOiBQcm9taXNlPEVxdWlwbWVudCB8IHZvaWQ+IHtcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGVxdWlwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLkNyZWF0ZUVxdWlwbWVudChlcXVpcCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBlcXVpcG1lbnQgPSByZWNlaXZlZEVxdWlwbWVudCBhcyBFcXVpcG1lbnQ7XG4gICAgICAgICAgICBpZiAoZXF1aXBtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCBjcmVhdGVkOicsIGVxdWlwbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50RmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGRvY3VtZW50RmlsZSwgVHlwZU5vdGUuVEVDSE5JQ0FMKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGVxdWlwbWVudCwgaW1hZ2VGaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXF1aXBtZW50O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgICAgICBjb25zdCBlcXVpcG1lbnQgPSB7IC4uLmVxdWlwIH07XG4gICAgICAgIGlmIChlcXVpcG1lbnQubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZG9jcyA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZXF1aXBtZW50Lm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcXVpcG1lbnQuZG9jdW1lbnRhdGlvbkltYWdlVXJsU2lnbmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub3RlLmF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJylbbGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShub3RlLmF0dGFjaG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBub3RlLmF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybFNpZ25lZDogYXR0YWNobWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZUlEOiBub3RlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRXF1aXBtZW50RG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcXVpcG1lbnQuZG9jdW1lbnRzID0gZG9jcztcbiAgICAgICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWlwbWVudDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yVGlja2V0KHRpY2tldDogVGlja2V0KTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25zID0gdGlja2V0Lm9wZXJhdGlvbnMuaXRlbXM7XG4gICAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9wZXJhdGlvbnMuc29ydChcbiAgICAgICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMubWFwKGFzeW5jIChvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmVxdWlwbWVudCA9IGF3YWl0IHRoaXMucmVhZEVxdWlwbWVudChvcGVyYXRpb24uZXF1aXBtZW50SUQpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRvIGtlZXAgdGhlIHNvcnRpbmcgYnkgY3JlYXRlZEF0XG4gICAgICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobykgPT4gby5lcXVpcG1lbnQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XG4gICAgICAgIC8vIHNwbGl0IGJ5IDEwMFxuICAgICAgICBjb25zdCBsaW1pdCA9IDEwMDtcbiAgICAgICAgbGV0IGVxdWlwc1Rva2VuID0geyBlcXVpcHM6IFtdLCBuZXh0VG9rZW46IG51bGwgfTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZXF1aXBzVG9rZW4gPSBhd2FpdCB0aGlzLm1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcbiAgICAgICAgICAgICAgICBzcGFjZUlELFxuICAgICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICAgIGVxdWlwc1Rva2VuXG4gICAgICAgICAgICApO1xuICAgICAgICB9IHdoaWxlIChlcXVpcHNUb2tlbi5uZXh0VG9rZW4pO1xuICAgICAgICByZXR1cm4gZXF1aXBzVG9rZW4uZXF1aXBzO1xuICAgIH1cblxuICAgIGFzeW5jIG1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBsaW1pdDogbnVtYmVyLFxuICAgICAgICBlcXVpcHNUb2tlbjogeyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGw7IH1cbiAgICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsOyB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cbiAgICAgICAgICAgIC5FcXVpcG1lbnRzQnlTcGFjZShcbiAgICAgICAgICAgICAgICBzcGFjZUlELFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgJ0RFU0MnLFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICAgICAgZXF1aXBzVG9rZW4ubmV4dFRva2VuIC8vIG5leHRUb2tlblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXF1aXBzTGltaXQgPSByZXNwb25zZS5pdGVtcztcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcHNPYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwczogWy4uLmVxdWlwc1Rva2VuLmVxdWlwcywgLi4uZXF1aXBzTGltaXRdLFxuICAgICAgICAgICAgICAgICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLm5leHRUb2tlbixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBlcXVpcHNPYmplY3Q7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGxvYWRJbWFnZUZvckFsbEVxdWlwbWVudHMoXG4gICAgICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxuICAgICAgICBpbWFnZUZpbGU6IEZpbGVcbiAgICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XG4gICAgICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsICdCQVRDSCcpLnRoZW4oXG4gICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcXVpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlcXVpcCBvZiBlcXVpcG1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXAuc3BhY2VJRFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVxdWlwLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob3RvOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwcy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVxdWlwcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHVwbG9hZEltYWdlKGVxdWlwbWVudDogRXF1aXBtZW50LCBpbWFnZUZpbGU6IEZpbGUpOiBQcm9taXNlPE5vdGU+IHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcbiAgICAgICAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudC5zcGFjZUlEXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUeXBlTm90ZS5JTUFHRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRXF1aXBtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG90bzogdXJsLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlRXF1aXBtZW50KFxuICAgICAgICBlcXVpcDogYW55LFxuICAgICAgICBmaWxlOiBGaWxlID0gbnVsbCxcbiAgICAgICAgbm90ZVR5cGU6IFR5cGVOb3RlID0gbnVsbFxuICAgICk6IFByb21pc2U8RXF1aXBtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cbiAgICAgICAgICAgIC5VcGRhdGVFcXVpcG1lbnQoZXF1aXApXG4gICAgICAgICAgICAudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlcXVpcG1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCB1cGRhdGVkOicsIGVxdWlwbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub3RlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub3RlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuSU1BR0U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWREb2MoZXF1aXBtZW50LCBmaWxlLCBub3RlVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZ2V0UHJlZml4RG9jKHR5cGU6IFR5cGVOb3RlKSB7XG4gICAgICAgIGxldCBwcmVmaXg7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTkZPUk1BVElPTjpcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbmZvcm1hdGlvbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuRklOQU5DSUFMOlxuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuQ09OVFJBQ1RVQUw6XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguY29udHJhY3R1YWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFR5cGVOb3RlLk9USEVSOlxuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4Lm90aGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXgudGVjaG5pY2FsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcbiAgICAgICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXG4gICAgICAgIGRvY3VtZW50RmlsZTogRmlsZSxcbiAgICAgICAgdHlwZTogVHlwZU5vdGVcbiAgICApIHtcbiAgICAgICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5nZXRQcmVmaXhEb2ModHlwZSk7XG4gICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlTGlzdCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlcXVpcCBvZiBlcXVpcG1lbnRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXAuc3BhY2VJRCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RXF1aXAgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwLmlkLFxuICAgICAgICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUxpc3QucHVzaChuZXdFcXVpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlTGlzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgYXN5bmMgdXBsb2FkRG9jKFxuICAgICAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcbiAgICAgICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxuICAgICAgICB0eXBlOiBUeXBlTm90ZVxuICAgICk6IFByb21pc2U8Tm90ZT4ge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpO1xuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMocHJlZml4LCBkb2N1bWVudEZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcbiAgICAgICAgICAgIGFzeW5jICh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGVFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlRXF1aXBtZW50KHsgaWQ6IGVxdWlwLmlkIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcblxuICAgICAgICAvLyBkZWxldGUgUE9JXG4gICAgICAgIGNvbnN0IFtwb2ldID0gZXF1aXAucG9pcy5pdGVtcztcbiAgICAgICAgaWYgKHBvaSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShwb2kuaWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGV0ZSBub3RlcyByZWxhdGVkXG4gICAgICAgIGlmIChlcXVpcC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBlcXVpcC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGU6IE5vdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGZpbGVzIGZyb20gUzNcbiAgICAgICAgICAgICAgICAgICAgLyoqIE5vdCBzaGFyZWQgd2l0aCBvdGhlciBlcXVpcG1lbnQgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZS5hdHRhY2htZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJykucG9wKCkuc3RhcnRzV2l0aCgnQkFUQ0hfJylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMobm90ZS5hdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTm90ZSh7IGlkOiBub3RlLmlkIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGV0ZSBvcGVyYXRpb25zIChyZW1vdmUgZnJvbSBsaW5rZWQgdGlja2V0cylcbiAgICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmRlbGV0ZU9wZXJhdGlvbnNGb3JFcXVpcG1lbnQoZXF1aXAuaWQpO1xuICAgICAgICByZXR1cm4gZGVsZXRlZDtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVFcXVpcG1lbnRMb2NhdGlvbihcbiAgICAgICAgZXF1aXA6IEVxdWlwbWVudCxcbiAgICAgICAgdGFnRGF0YTogTWF0dGVydGFnRGF0YVxuICAgICk6IFByb21pc2U8UE9JPiB7XG4gICAgICAgIGNvbnN0IHBvaUlucHV0ID0ge1xuICAgICAgICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXG4gICAgICAgICAgICB0eXBlOiBQb2lUeXBlLkVRVUlQTUVOVCxcbiAgICAgICAgICAgIGVsZW1lbnRJRDogZXF1aXAuaWQsXG4gICAgICAgICAgICBtZXRhZGF0YTogdGFnRGF0YS5nZXRNZXRhZGF0YVN0cmluZygpLFxuICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxuICAgICAgICB9IGFzIFBPSTtcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZVBPSUZvclNwYWNlSUQocG9pSW5wdXQpO1xuICAgICAgICByZXR1cm4gcG9pO1xuICAgIH1cblxuICAgIGFzeW5jIHJlbW92ZVRpY2tldEZyb21FcXVpcG1lbnQoXG4gICAgICAgIHRpY2tldDogVGlja2V0LFxuICAgICAgICBlcXVpcDogRXF1aXBtZW50XG4gICAgKTogUHJvbWlzZTxPcGVyYXRpb24+IHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uRXF1aXAgPVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmdldE9wZXJhdGlvbnNCeUVxdWlwbWVudElEKGVxdWlwLmlkKTtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uVG9EZWxldGUgPSBvcGVyYXRpb25FcXVpcC5maW5kKFxuICAgICAgICAgICAgKG9wKSA9PiBvcC50aWNrZXRJRCA9PT0gdGlja2V0LmlkXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5kZWxldGVPcGVyYXRpb24ob3BlcmF0aW9uVG9EZWxldGUuaWQpXG4gICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aWNrZXRzU2VydmljZS5hZGRFdmVudFRvVGlja2V0KHRpY2tldCBhcyBUaWNrZXQsIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdFcXVpcGVtZW50IHJldGlyw6kgZHUgdGlja2V0JyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuVU5MSU5LRURfRlJPTV9FUVVJUE1FTlQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5USUNLRVQsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBlcXVpcG1lbnQ6IGVxdWlwLm5hbWUgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXRFcXVpcHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlVcGRhdGluZyA9IHRydWU7XG5cbiAgICAgICAgbGV0IGVxTGlzdCA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHRoaXMuY3VycmVudFNwYWNlSUQpO1xuICAgICAgICBlcUxpc3QgPSBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQsXG4gICAgICAgICAgICBlcUxpc3RcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZXFMaXN0KTtcbiAgICAgICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgZmlsdGVyZWRFcXVpcHMgPSBlcUxpc3QuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChlcXVpcG1lbnQpID0+ICF0aGlzLmlzQXJjaGl2ZWQoZXF1aXBtZW50KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMubWFwKGFzeW5jIChlcXVpcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQoZXF1aXApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcbiAgICAgICAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRab25lXG4gICAgICAgICAgICAgICAgKSkgYXMgRXF1aXBtZW50W107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xuICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KGZpbHRlcmVkRXF1aXBzKTsgLy8gYWRkaW5nIHRhZ3Mgb25seSBmb3IgdGhlIGN1cnJlbnQgem9uZVxuICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgICAgICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcbiAgICAgICAgICAgICAgICB6b25lOiBmaWx0ZXJlZEVxdWlwcyxcbiAgICAgICAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xuICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvckN1cnJlbnRVc2VyRm9yU3BhY2UoXG4gICAgICAgIHNwYWNlSUQsXG4gICAgICAgIG1pc3Npb25zOiBNaXNzaW9uW11cbiAgICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XG4gICAgICAgIGxldCByZXN1bHRzID0gW107XG5cbiAgICAgICAgY29uc3Qgc3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcigobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlEKTtcbiAgICAgICAgaWYgKHNwYWNlTWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXG4gICAgICAgICAgICAobSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLm1hbmFnZXJzLmluY2x1ZGVzKG0ucm9sZSkgfHxcbiAgICAgICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuU0VSVklDRVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNhblNlZUVxdWlwcykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRvbWFpbnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgbS5kb21haW5zXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9tYWlucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcbiAgICAgICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxuICAgICAgICAvLyAgICAgcmVzdWx0cyxcbiAgICAgICAgLy8gICAgIGRvbWFpbnMsXG4gICAgICAgIC8vICk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcbiAgICAgICAgdGFnSWNvbjogc3RyaW5nLFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXG4gICAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdOyB9PiB7XG4gICAgICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcbiAgICAgICAgaWYgKGRvbWFpbklEKSB7XG4gICAgICAgICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2lzID0gYXdhaXQgdGhpcy51cGRhdGVJY29uRm9yQWxsT2JqZWN0cyhlcXVpcHMsIHRhZ0ljb24pO1xuICAgICAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcbiAgICB9O1xuXG4gICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFyY2hpdmVkIHRoaXMgZXF1aXBtZW50ICovXG4gICAgaXNBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXG4gICAgICAgICAgICA/IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRC5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXRBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCwgYXJjaGl2ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGFyY2hpdmVkTGlzdCA9IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRFxuICAgICAgICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIGNvbnN0IG1pc3Npb25JRCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpLmlkO1xuXG4gICAgICAgIGFyY2hpdmVkTGlzdCA9IGFyY2hpdmVkTGlzdC5maWx0ZXIoKG0pID0+IG0gIT09IG1pc3Npb25JRCk7XG5cbiAgICAgICAgaWYgKGFyY2hpdmVkKSB7XG4gICAgICAgICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRXF1aXBtZW50KHtcbiAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXG4gICAgICAgICAgICBhcmNoaXZlZEZvck1pc3Npb25JRDogYXJjaGl2ZWRMaXN0LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBkZWxldGVGaWxlKGRvY3VtZW50XzogRXF1aXBtZW50RG9jdW1lbnQpIHtcbiAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xuICAgICAgICBhd2FpdCB0aGlzLkFQSS5EZWxldGVOb3RlKHsgaWQ6IGRvY3VtZW50Xy5ub3RlSUQgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXG4gICAgICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxuICAgICAgICBmb3JjZVN3aXRjaFZpc2l0OiBib29sZWFuID0gZmFsc2VcbiAgICApIHtcbiAgICAgICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XG4gICAgICAgIGlmIChmb3JjZVN3aXRjaFZpc2l0KSB7XG4gICAgICAgICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbkdvVG9UYWcgPSBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uX21vdmVfdG9fdGFnKFxuICAgICAgICAgICAgYCR7ZXF1aXBtZW50LmlkfWBcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNhbkdvVG9UYWcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldE1vZGVsM2RBbmRTd2VlcChlcXVpcG1lbnQpO1xuXG4gICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubW9kZWwzRCkge1xuICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9yY2VTd2l0Y2hWaXNpdCkge1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtb2RlbDNEJyk7XG4gICAgICAgICAgICBpZiAoY3VycmVudE1vZGVsICYmIGN1cnJlbnRNb2RlbCA9PT0gcmVzdWx0Lm1vZGVsM0QpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBhZGQgdGFnIHRvIHRoZSB2aXNpdFxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaSA9IGVxdWlwbWVudC5wb2lzLml0ZW1zWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBmb3JjZSBhZGQgYmVjYXVzZSB3ZSBtaWdodCBiZSBpbiBhbiBhbm90aGVyIHpvbmVcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uX21vdmVfdG9fdGFnKGVxdWlwbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXG4gICAgICAgICAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQubW9kZWwzRCxcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXG4gICAgICAgICAgICAgICAgICAgIHsgc3dlZXBUb01vdmU6IHJlc3VsdC5zd2VlcCwgcm90YXRpb246IHJlc3VsdC5yb3RhdGlvbiB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8qKiBTaSBvbiBmb3JjZSBsZSBzd2l0Y2ggZGUgbGEgdmlzaXQgKi9cbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZy5uZXh0KHRydWUpO1xuICAgICAgICBsZXQgZmlsdGVyZWRFcXVpcHMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5oYXModGhpcy56b25lSURGaWx0ZXIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImkgaGF2ZSBlcXVpcHMgZm9yIHRoaXMgem9uZVwiLCBmaWx0ZXJlZEVxdWlwcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcbiAgICAgICAgICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XG4gICAgICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgICAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwidXBkYXRlIGR1ZSB0byBkZWxldGVcIiwgZGVsZXRlZEVxdWlwbWVudCk7XG4gICAgICAgIGNvbnN0IGVxdWlwID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5maW5kKFxuICAgICAgICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSBkZWxldGVkRXF1aXBtZW50LmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlcXVpcCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXF1aXBUb0RlbGV0ZSA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgICAgICAuZ2V0KHpvbmUpXG4gICAgICAgICAgICAgICAgLmZpbmQoKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSBkZWxldGVkRXF1aXBtZW50LmlkKTtcbiAgICAgICAgICAgIGlmIChlcXVpcFRvRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoem9uZSlcbiAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xuICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXG4gICAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gICAgfVxuXG4gICAgdXBkYXRlRHVlVG9DcmVhdGUoY3JlYXRlZEVxdWlwOiBFcXVpcG1lbnQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXG4gICAgICAgICAgICAudW5zaGlmdChjcmVhdGVkRXF1aXApO1xuICAgICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xuICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXG4gICAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gICAgfVxuXG4gICAgdXBkYXRlRHVlVG9FcXVpcFVwZGF0ZWQodXBkYXRlZEVxdWlwOiBFcXVpcG1lbnQpIHtcbiAgICAgICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXG4gICAgICAgICAgICAoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXF1aXApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5pbmRleE9mKGVxdWlwKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgcmVtb3ZlIGFyY2hpdmVkIGVxdWlwbWVudFxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XG4gICAgICAgICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAgICAgICAgIC5nZXQoem9uZSlcbiAgICAgICAgICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XG4gICAgICAgICAgICBpZiAoZXF1aXBUb1VwZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHpvbmUpXG4gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKGVxdWlwVG9VcGQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHpvbmUpLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldCh6b25lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxuICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgIH1cblxuICAgIGluaXRTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNNdXNldW1Vc2VyKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuem9uZUNoYW5nZVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh6b25lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghem9uZSB8fCAhdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBudWxsIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRab25lID0gem9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEID09PSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIHNwYWNlLCAgb25seSB6b25lIHVwZGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBcImdvaW5nIHRvIHVwZGF0ZSBlcXVpcHMgZm9yIHpvbmUgKHNhbWUgc3BhY2UpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHpvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRXF1aXBzRm9yWm9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBcImdvaW5nIHRvIGluaXQgZXF1aXBzIGZvciB6b25lIGZvciBuZXcgc3BhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZGVsZXRlT2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU9ic2VydmFibGVcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGVxdWlwbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVPYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19
671
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsd0JBQXdCLEdBQzNCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQU1ILFFBQVEsRUFFUixXQUFXLEVBQ1gsU0FBUyxFQUdULE9BQU8sRUFDUCxVQUFVLEdBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0gsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBSzNDLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFxRG5ELFlBQ2lDLFdBQWdCLEVBQ0EsMkJBQWdDLEVBQzdFLFVBQXNCLEVBQ3RCLGlCQUFvQyxFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFdBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLFlBQXNCO1FBRTlCLEtBQUssQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQVI3QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQS9EMUIsV0FBTSxHQUFHO1lBQ2IsU0FBUyxFQUFFLDRCQUE0QjtZQUN2QyxLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLFNBQVMsRUFBRSw0QkFBNEI7WUFDdkMsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLFdBQVcsRUFBRSw4QkFBOEI7U0FDOUMsQ0FBQztRQUVGLHNCQUFpQixHQUdaLElBQUksT0FBTyxFQUFFLENBQUM7UUFFbkIsc0JBQWlCLEdBR2I7WUFDSSxLQUFLLEVBQUUsRUFBRTtZQUNULFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUN0QixDQUFDO1FBRU4sbUJBQWMsR0FBeUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVFyRCxpR0FBaUc7UUFDakcsMEJBQXFCLEdBQWEsSUFBSSxDQUFDO1FBRXZDLGFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFJMUIscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFLckQsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFYixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQWlCN0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLDJCQUEyQixDQUFDO1FBRXZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2pELElBQUksV0FBVyxFQUFFO2dCQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtZQUNwRSxJQUFJLEtBQWdCLENBQUM7WUFDckIsSUFBSSxhQUFhLEVBQUU7Z0JBQ2YsS0FBSyxHQUFHLGFBQWEsQ0FBQztnQkFDdEIsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ2QsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTt3QkFDdkIsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO3dCQUNqQyxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO3FCQUM1Qzt5QkFBTTt3QkFDSCxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7cUJBQ3JDO2lCQUNKO2dCQUNELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO29CQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztvQkFDRixLQUFLLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztpQkFDbkM7YUFDSjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ2pCLEtBQWdCLEVBQ2hCLFNBQWUsRUFDZixZQUFrQjtRQUVsQix3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTTtRQUMzQyxhQUFhO1FBQ2I7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osU0FBUyxFQUFFLGlCQUFpQjtnQkFDNUIsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDekIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2FBQ3RCO1lBQ0QsVUFBVSxFQUFFLDhCQUE4QjtZQUMxQyxvQkFBb0I7U0FDckIsRUFDRCxZQUFZLENBQ2IsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFO1lBQ3BFLElBQUksU0FBUyxHQUFHLGlCQUE4QixDQUFDO1lBQy9DLElBQUksU0FBUyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdDLElBQUksWUFBWSxFQUFFO29CQUNkLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDckU7Z0JBQ0QsSUFBSSxTQUFTLEVBQUU7b0JBQ1gsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDaEQ7YUFDSjtZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxLQUFnQjtRQUM1QyxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDckMsU0FBUyxDQUFDLDJCQUEyQjtvQkFDakMsTUFBTSw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNqQixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLFVBQVUsRUFBRTt3QkFDWixJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNOLFFBQVE7NEJBQ1IsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUNwQixTQUFTLEVBQUUsVUFBVTs0QkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO3lCQUNHLENBQUMsQ0FBQztxQkFDM0I7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDM0IsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQWM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QixVQUFVLENBQUMsSUFBSSxDQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ0wsYUFBYTtZQUNiLDZDQUE2QztZQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNwRCxDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUMvQixTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO1FBQ0QsbUNBQW1DO1FBQ25DLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBZTtRQUN2QyxlQUFlO1FBQ2YsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEQsR0FBRztZQUNDLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyw2Q0FBNkMsQ0FDbEUsT0FBTyxFQUNQLEtBQUssRUFDTCxXQUFXLENBQ2QsQ0FBQztTQUNMLFFBQVEsV0FBVyxDQUFDLFNBQVMsRUFBRTtRQUNoQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyw2Q0FBNkMsQ0FDL0MsT0FBZSxFQUNmLEtBQWEsRUFDYixXQUErRDtRQUUvRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUzthQUNwQixpQkFBaUIsQ0FDZCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE1BQU0sRUFDTixJQUFJLEVBQ0osS0FBSyxFQUNMLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWTtTQUNyQzthQUNBLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2YsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNuQyxNQUFNLFlBQVksR0FBRztnQkFDakIsTUFBTSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO2dCQUMvQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7YUFDaEMsQ0FBQztZQUNGLE9BQU8sWUFBWSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FDN0IsVUFBdUIsRUFDdkIsU0FBZTtRQUVmLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzdELEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNWLElBQUksR0FBRyxFQUFFO2dCQUNMLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLEVBQUU7b0JBQzVCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUNsRCxLQUFLLENBQUMsT0FBTyxDQUNoQixDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO3dCQUNoQyxVQUFVLEVBQUUsR0FBRzt3QkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7d0JBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDckIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtxQkFDNUQsQ0FBQyxDQUFDO29CQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO3dCQUNwRCxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1osS0FBSyxFQUFFLEdBQUc7cUJBQ2IsQ0FBQyxDQUFDO29CQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3ZCO2dCQUNELE9BQU8sTUFBTSxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQW9CLEVBQUUsU0FBZTtRQUNuRCxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbEUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1YsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQ2xELFNBQVMsQ0FBQyxPQUFPLENBQ3BCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7b0JBQzdDLFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDcEIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO29CQUN6QixjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM1RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7b0JBQ3JDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtvQkFDaEIsS0FBSyxFQUFFLEdBQUc7aUJBQ2IsQ0FBQyxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBRUosQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUNqQixLQUFVLEVBQ1YsT0FBYSxJQUFJLEVBQ2pCLFdBQXFCLElBQUk7UUFFekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVM7YUFDcEIsZUFBZSxDQUFDLEtBQUssQ0FBQzthQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEVBQUU7WUFDOUIsSUFBSSxTQUFTLEdBQUcsaUJBQThCLENBQUM7WUFDL0MsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsUUFBUSxRQUFRLEVBQUU7d0JBQ2QsS0FBSyxRQUFRLENBQUMsS0FBSzs0QkFDZixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUN4QyxNQUFNO3dCQUNWOzRCQUNJLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDOzRCQUNoRCxNQUFNO3FCQUNiO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFBQSxDQUFDO0lBRUYsWUFBWSxDQUFDLElBQWM7UUFDdkIsSUFBSSxNQUFNLENBQUM7UUFDWCxRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssUUFBUSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDakMsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLFNBQVM7Z0JBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDL0IsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDakMsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLEtBQUs7Z0JBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUMzQixNQUFNO1lBQ1YsS0FBSyxRQUFRLENBQUMsS0FBSztnQkFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDVjtnQkFDSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQy9CLE1BQU07U0FDYjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQzNCLFVBQXVCLEVBQ3ZCLFlBQWtCLEVBQ2xCLElBQWM7UUFFZCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsSUFBSSxHQUFHLEVBQUU7WUFDTCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLEVBQUU7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7b0JBQ2pELFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUk7b0JBQ0osV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNyQixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM5QyxDQUFDLENBQUM7Z0JBQ0gsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM3QjtZQUNELE9BQU8sVUFBVSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FDWCxTQUFvQixFQUNwQixZQUFrQixFQUNsQixJQUFjO1FBRWQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxRCxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDVixJQUFJLEdBQUcsRUFBRTtnQkFDTCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztvQkFDakMsVUFBVSxFQUFFLEdBQUc7b0JBQ2YsSUFBSTtvQkFDSixXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQzlDLENBQUMsQ0FBQzthQUNOO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFnQjtRQUNsQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTFDLGFBQWE7UUFDYixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDL0IsSUFBSSxHQUFHLEVBQUU7WUFDTCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzQztRQUNELHVCQUF1QjtRQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBVSxFQUFFLEVBQUU7Z0JBQ3ZDLHVCQUF1QjtnQkFDdkIsc0NBQXNDO2dCQUN0QyxJQUNJLElBQUksQ0FBQyxVQUFVO29CQUNmLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUN4RDtvQkFDRSxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtRQUNELGlEQUFpRDtRQUNqRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkUsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FDekIsS0FBZ0IsRUFDaEIsT0FBc0I7UUFFdEIsTUFBTSxRQUFRLEdBQUc7WUFDYixVQUFVLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ3pDLElBQUksRUFBRSxPQUFPLENBQUMsU0FBUztZQUN2QixTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDbkIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUNyQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO1NBQ25DLENBQUM7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLHlCQUF5QixDQUMzQixNQUFjLEVBQ2QsS0FBZ0I7UUFFaEIsTUFBTSxjQUFjLEdBQ2hCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQ3pDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQ3BDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxnQkFBZ0I7YUFDdkIsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQzthQUNyQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBZ0IsRUFBRTtnQkFDbkQsS0FBSyxFQUFFLDZCQUE2QjtnQkFDcEMsV0FBVyxFQUFFLGNBQWMsS0FBSyxDQUFDLElBQUkseUJBQXlCO2dCQUM5RCxNQUFNLEVBQUUsV0FBVyxDQUFDLHVCQUF1QjtnQkFDM0MsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixlQUFlLEVBQUUsMENBQTBDO2dCQUMzRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQ25FLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDVCxDQUFDO1FBQ0YsdUJBQXVCO1FBQ3ZCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FDN0MsQ0FBQztZQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLDJCQUEyQjtvQkFDN0IsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzVCLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUM1RCxjQUFjLEVBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUM3QixDQUFDO2FBQ0w7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLGNBQWMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDM0QsY0FBYyxFQUNkLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQ25CLENBQWdCLENBQUM7YUFDckI7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1lBQ2xGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSztnQkFDbkMsSUFBSSxFQUFFLGNBQWM7YUFDdkIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1NBQzFCO2FBQU07WUFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDOUQ7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtTQUM1RTtRQUNELHVDQUF1QztRQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsbUNBQW1DLENBQ3JDLE9BQU8sRUFDUCxRQUFtQjtRQUVuQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUNwRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FDcEMsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUNELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLE1BQU0sQ0FBQyxJQUFJLGFBQWEsRUFBRTtZQUMzQixPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELDZEQUE2RDtRQUM3RCxlQUFlO1FBQ2YsZUFBZTtRQUNmLEtBQUs7UUFDTCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLGlDQUFpQyxDQUNuQyxPQUFlLEVBQ2YsT0FBZSxFQUNmLFdBQW1CLElBQUk7UUFFdkIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztTQUNsRTtRQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFBQSxDQUFDO0lBRUYsa0VBQWtFO0lBQ2xFLFVBQVUsQ0FBQyxTQUFvQjtRQUMzQixPQUFPLFNBQVMsQ0FBQyxvQkFBb0I7WUFDakMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQ3hEO1lBQ0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQW9CLEVBQUUsUUFBaUI7UUFDL0MsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLG9CQUFvQjtZQUM3QyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQjtZQUNoQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV4RSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRTNELElBQUksUUFBUSxFQUFFO1lBQ1YsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUN4QixFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDaEIsb0JBQW9CLEVBQUUsWUFBWTtTQUNyQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUE0QjtRQUN6QyxNQUFNLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUN6QixTQUFvQixFQUNwQixtQkFBNEIsS0FBSztRQUVqQyxJQUFJLEdBQUcsR0FBRyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxJQUFJLGdCQUFnQixFQUFFO1lBQ2xCLEdBQUcsSUFBSSxVQUFVLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNuQztRQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDMUQsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQ3BCLENBQUM7UUFDRixJQUFJLFVBQVUsRUFBRTtZQUNaLE9BQU87U0FDVjtRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzVCLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQ2pELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQixrREFBa0Q7WUFDbEQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRCxJQUFJLFlBQVksSUFBSSxZQUFZLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDakQsMEJBQTBCO2dCQUMxQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO29CQUNoQixzREFBc0Q7b0JBQ3RELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ2hFLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzdEO2FBQ0o7aUJBQU07Z0JBQ0gsc0VBQXNFO2dCQUN0RSx1QkFBdUIsQ0FDbkIsSUFBSSxDQUFDLFlBQVksRUFDakIsTUFBTSxDQUFDLE9BQU8sRUFDZCxTQUFTLENBQUMsT0FBTyxFQUNqQixFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQzNELENBQUM7YUFDTDtTQUNKO2FBQU07WUFDSCx3Q0FBd0M7WUFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxNQUFNLENBQUMsT0FBTyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEU7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekMsSUFDSSxJQUFJLENBQUMsWUFBWTtnQkFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUN4RDtnQkFDRSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4RSw4REFBOEQ7YUFDakU7aUJBQU07Z0JBQ0gsY0FBYyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUM1QixJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFnQixDQUFDO2dCQUVsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNuRCxHQUFHLGNBQWM7aUJBQ3BCLENBQUMsQ0FBQzthQUNOO1lBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzVCLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUM1RCxjQUFjLEVBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUM3QixDQUFDO2FBQ0w7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUNsRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7Z0JBQ25DLElBQUksRUFBRSxjQUFjO2FBQ3ZCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtTQUMxQjthQUFNO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7U0FDNUU7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsZ0JBQTJCO1FBQ3pDLHlEQUF5RDtRQUN6RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDM0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsRUFBRSxDQUNoRCxDQUFDO1FBQ0YsSUFBSSxLQUFLLEVBQUU7WUFDUCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDakQ7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVE7aUJBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ1QsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksYUFBYSxFQUFFO2dCQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO3FCQUN4QyxHQUFHLENBQUMsSUFBSSxDQUFDO3FCQUNULE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM5RDtTQUNKO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDL0QsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxZQUF1QjtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUTthQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzthQUN0QixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7WUFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDL0QsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO0lBQzNCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxZQUF1QjtRQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDM0MsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUFDLEVBQUUsQ0FDNUMsQ0FBQztRQUNGLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4QiwrQkFBK0I7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQy9EO1NBQ0o7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVE7aUJBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUM7aUJBQ1QsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCxJQUFJLFVBQVUsRUFBRTtnQkFDWixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUTtxQkFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQztxQkFDVCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDOUQ7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVE7eUJBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUM7eUJBQ1QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0o7U0FDSjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO1lBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQy9ELENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUMzQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVU7aUJBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7b0JBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHO3dCQUNyQixLQUFLLEVBQUUsRUFBRTt3QkFDVCxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7cUJBQ3RCLENBQUM7b0JBQ0YsT0FBTztpQkFDVjtnQkFDRCxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7d0JBQzlELGdDQUFnQzt3QkFDaEMsZUFBZTt3QkFDZixzREFBc0Q7d0JBQ3RELFlBQVk7d0JBQ1osS0FBSzt3QkFFTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO3dCQUMzRCxlQUFlO3dCQUNmLHFEQUFxRDt3QkFDckQsMkJBQTJCO3dCQUMzQixLQUFLO3dCQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztxQkFDckI7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVQLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFUCxJQUFJLENBQUMsZ0JBQWdCO2lCQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNyQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRVAsSUFBSSxDQUFDLGdCQUFnQjtpQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0M7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OzZHQW56QlEsZ0JBQWdCLGtCQXNEYixtQkFBbUIsYUFDbkIsbUNBQW1DO2lIQXZEdEMsZ0JBQWdCLGNBRmIsTUFBTTsyRkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkF1RFEsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoLFxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCxcbn0gZnJvbSAnLi4vLi4vaGVscGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdHRlcnRhZ0RhdGEgfSBmcm9tICcuLi8uLi9tYXR0ZXJ0YWdEYXRhJztcbmltcG9ydCB7XG4gICAgTm90ZSxcbiAgICBab25lLFxuICAgIEVxdWlwbWVudCxcbiAgICBFcXVpcG1lbnREb2N1bWVudCxcbiAgICBUaWNrZXQsXG4gICAgVHlwZU5vdGUsXG4gICAgTWlzc2lvbixcbiAgICBFdmVudFN0YXR1cyxcbiAgICBFdmVudFR5cGUsXG4gICAgT3BlcmF0aW9uLFxuICAgIFBPSSxcbiAgICBQb2lUeXBlLFxuICAgIFJvbGVTdGF0dXMsXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIGRlbGV0ZUZyb21TMyxcbiAgICBnZXRTaWduZWRGaWxlLFxuICAgIGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50LFxuICAgIHVwbG9hZEZpbGVUb1MzLFxufSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuL2Jhc2Utb2JqZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9vcGVyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9wb2kuc2VydmljZSc7XG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4vdGlja2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFcXVpcG1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU9iamVjdFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcHJlZml4ID0ge1xuICAgICAgICB0ZWNobmljYWw6ICdlcXVpcG1lbnRzL25vdGUvdGVjaG5pY2FsLycsXG4gICAgICAgIGltYWdlOiAnZXF1aXBtZW50cy9ub3RlL2ltYWdlLycsXG4gICAgICAgIGZpbmFuY2lhbDogJ2VxdWlwbWVudHMvbm90ZS9maW5hbmNpYWwvJyxcbiAgICAgICAgaW5mb3JtYXRpb246ICdlcXVpcG1lbnRzL25vdGUvaW5mb3JtYXRpb24vJyxcbiAgICAgICAgb3RoZXI6ICdlcXVpcG1lbnRzL25vdGUvb3RoZXIvJyxcbiAgICAgICAgY29udHJhY3R1YWw6ICdlcXVpcG1lbnRzL25vdGUvY29udHJhY3R1YWwvJyxcbiAgICB9O1xuXG4gICAgZXF1aXBtZW50c1VwZGF0ZWQ6IFN1YmplY3Q8e1xuICAgICAgICBzcGFjZTogRXF1aXBtZW50W107XG4gICAgICAgIHpvbmU6IEVxdWlwbWVudFtdO1xuICAgIH0+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGN1cnJlbnRFcXVpcG1lbnRzOiB7XG4gICAgICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcbiAgICAgICAgem9uZXNNYXA6IE1hcDxzdHJpbmcsIEVxdWlwbWVudFtdPjtcbiAgICB9ID0ge1xuICAgICAgICAgICAgc3BhY2U6IFtdLFxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgfTtcblxuICAgIGVxdWlwbWVudHNUYWdzOiBTdWJqZWN0PEVxdWlwbWVudFtdPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICB6b25lSURGaWx0ZXI6IHN0cmluZztcblxuICAgIGN1cnJlbnRab25lOiBab25lO1xuXG4gICAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcblxuICAgIC8qKiBOdWxsIG1lYW5zIHdlIGRvIG5vdCBhcHBseSBhIGZpbHRlciwgZW1wdHkgYXJyYXkgKFtdKSwgbWVhbnMgd2UgdGhhdCB3ZSBoaWRlIGFsbCBlcXVpcG1lbnQgKi9cbiAgICBlcXVpcG1lbnREb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcblxuICAgIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGN1cnJlbnRseVVwZGF0aW5nID0gZmFsc2U7XG5cbiAgICBjdXJyZW50U3dlZXA6IHN0cmluZztcblxuICAgIGRlbGV0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjcmVhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgdXBkYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIEFQSTogYW55OyAvL0FXU1xuICAgIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcblxuICAgIGlzTXVzZXVtVXNlciA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QXdzS2luZXNpc0FuYWx5dGljc1NlcnZpY2UnKSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcbiAgICAgICAgcG9pU2VydmljZTogUG9pU2VydmljZSxcbiAgICAgICAgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxuICAgICkge1xuICAgICAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcbiAgICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xuXG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNDaGFuZ2VkLnN1YnNjcmliZSgoaXNDb25uZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyByZWFkRXF1aXBtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldEVxdWlwbWVudChpZCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVxdWlwOiBFcXVpcG1lbnQ7XG4gICAgICAgICAgICBpZiAocmVjZWl2ZWRFcXVpcCkge1xuICAgICAgICAgICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcbiAgICAgICAgICAgICAgICBlcXVpcCA9IGF3YWl0IHRoaXMuZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChyZWNlaXZlZEVxdWlwKTtcbiAgICAgICAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcXVpcC5kb21haW4ucGFyZW50SUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwLmNoaWxkRG9tYWluID0gZXF1aXAuZG9tYWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluLnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXF1aXAuc3ViZXF1aXBtZW50c0lEcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVpcC5zdWJlcXVpcG1lbnRzSURzLm1hcChhc3luYyAoc3ViSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLkdldEVxdWlwbWVudChzdWJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXAuc3ViRXF1aXBtZW50cyA9IHN1YkVxdWlwcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXF1aXA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcbiAgICAgICAgZXF1aXA6IEVxdWlwbWVudCxcbiAgICAgICAgaW1hZ2VGaWxlOiBGaWxlLFxuICAgICAgICBkb2N1bWVudEZpbGU6IEZpbGVcbiAgICApOiBQcm9taXNlPEVxdWlwbWVudCB8IHZvaWQ+IHtcbiAgICAgICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGVxdWlwKTtcbiAgICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLmdldEluc3RhbmNlKCkucmVjb3JkKFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGV2ZW50VHlwZTogXCJPYmplY3QgQ3JlYXRpb25cIixcbiAgICAgICAgICAgICAgcG9pOiBlcXVpcCxcbiAgICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmVhbU5hbWU6IFwic21hcnRlcnBsYW5LaW5lc2lzLWFuYWx5dGljc1wiLFxuICAgICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJBV1NLaW5lc2lzXCIsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5DcmVhdGVFcXVpcG1lbnQoZXF1aXApLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xuICAgICAgICAgICAgaWYgKGVxdWlwbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgY3JlYXRlZDonLCBlcXVpcG1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWREb2MoZXF1aXBtZW50LCBkb2N1bWVudEZpbGUsIFR5cGVOb3RlLlRFQ0hOSUNBTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbWFnZUZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGltYWdlRmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVxdWlwbWVudDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChlcXVpcDogRXF1aXBtZW50KTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcbiAgICAgICAgY29uc3QgZXF1aXBtZW50ID0geyAuLi5lcXVpcCB9O1xuICAgICAgICBpZiAoZXF1aXBtZW50Lm5vdGVzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3MgPSBbXTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBtZW50LmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm90ZS5hdHRhY2htZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpW2xlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF3YWl0IGdldFNpZ25lZEZpbGUobm90ZS5hdHRhY2htZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbm90ZS5hdHRhY2htZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxTaWduZWQ6IGF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVJRDogbm90ZS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEVxdWlwbWVudERvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZXF1aXBtZW50LmRvY3VtZW50cyA9IGRvY3M7XG4gICAgICAgICAgICByZXR1cm4gZXF1aXBtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRpY2tldC5vcGVyYXRpb25zLml0ZW1zO1xuICAgICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zLnNvcnQoXG4gICAgICAgICAgICAgICAgKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZEF0KSAtIG5ldyBEYXRlKGEuY3JlYXRlZEF0KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5lcXVpcG1lbnQgPSBhd2FpdCB0aGlzLnJlYWRFcXVpcG1lbnQob3BlcmF0aW9uLmVxdWlwbWVudElEKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0byBrZWVwIHRoZSBzb3J0aW5nIGJ5IGNyZWF0ZWRBdFxuICAgICAgICByZXR1cm4gb3BlcmF0aW9ucy5tYXAoKG8pID0+IG8uZXF1aXBtZW50KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xuICAgICAgICAvLyBzcGxpdCBieSAxMDBcbiAgICAgICAgY29uc3QgbGltaXQgPSAxMDA7XG4gICAgICAgIGxldCBlcXVpcHNUb2tlbiA9IHsgZXF1aXBzOiBbXSwgbmV4dFRva2VuOiBudWxsIH07XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGVxdWlwc1Rva2VuID0gYXdhaXQgdGhpcy5tZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXG4gICAgICAgICAgICAgICAgc3BhY2VJRCxcbiAgICAgICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgICAgICBlcXVpcHNUb2tlblxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSB3aGlsZSAoZXF1aXBzVG9rZW4ubmV4dFRva2VuKTtcbiAgICAgICAgcmV0dXJuIGVxdWlwc1Rva2VuLmVxdWlwcztcbiAgICB9XG5cbiAgICBhc3luYyBtZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICAgICAgbGltaXQ6IG51bWJlcixcbiAgICAgICAgZXF1aXBzVG9rZW46IHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsOyB9XG4gICAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbDsgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXG4gICAgICAgICAgICAuRXF1aXBtZW50c0J5U3BhY2UoXG4gICAgICAgICAgICAgICAgc3BhY2VJRCxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICdERVNDJyxcbiAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgICAgIGVxdWlwc1Rva2VuLm5leHRUb2tlbiAvLyBuZXh0VG9rZW5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVxdWlwc0xpbWl0ID0gcmVzcG9uc2UuaXRlbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgZXF1aXBzT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgICAgICBlcXVpcHM6IFsuLi5lcXVpcHNUb2tlbi5lcXVpcHMsIC4uLmVxdWlwc0xpbWl0XSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRva2VuOiByZXNwb25zZS5uZXh0VG9rZW4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXF1aXBzT2JqZWN0O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBsb2FkSW1hZ2VGb3JBbGxFcXVpcG1lbnRzKFxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcbiAgICAgICAgaW1hZ2VGaWxlOiBGaWxlXG4gICAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xuICAgICAgICBpZiAoZXF1aXBtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyh0aGlzLnByZWZpeC5pbWFnZSwgaW1hZ2VGaWxlLCAnQkFUQ0gnKS50aGVuKFxuICAgICAgICAgICAgYXN5bmMgKHVybCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXF1aXBzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwLnNwYWNlSURcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlcXVpcC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG90bzogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVpcHMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcXVpcHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGxvYWRJbWFnZShlcXVpcG1lbnQ6IEVxdWlwbWVudCwgaW1hZ2VGaWxlOiBGaWxlKTogUHJvbWlzZTxOb3RlPiB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyh0aGlzLnByZWZpeC5pbWFnZSwgaW1hZ2VGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXG4gICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3duZXJNaXNzaW9uSUQ6IGN1cnJlbnRNaXNzaW9uID8gY3VycmVudE1pc3Npb24uaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGhvdG86IHVybCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUVxdWlwbWVudChcbiAgICAgICAgZXF1aXA6IGFueSxcbiAgICAgICAgZmlsZTogRmlsZSA9IG51bGwsXG4gICAgICAgIG5vdGVUeXBlOiBUeXBlTm90ZSA9IG51bGxcbiAgICApOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXG4gICAgICAgICAgICAuVXBkYXRlRXF1aXBtZW50KGVxdWlwKVxuICAgICAgICAgICAgLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoZXF1aXBtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgdXBkYXRlZDonLCBlcXVpcG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm90ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm90ZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGVxdWlwbWVudCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZmlsZSwgbm90ZVR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZXF1aXBtZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldFByZWZpeERvYyh0eXBlOiBUeXBlTm90ZSkge1xuICAgICAgICBsZXQgcHJlZml4O1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuSU5GT1JNQVRJT046XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFR5cGVOb3RlLkZJTkFOQ0lBTDpcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5maW5hbmNpYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFR5cGVOb3RlLkNPTlRSQUNUVUFMOlxuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmNvbnRyYWN0dWFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5PVEhFUjpcbiAgICAgICAgICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVHlwZU5vdGUuSU1BR0U6XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW1hZ2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LnRlY2huaWNhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cblxuICAgIGFzeW5jIHVwbG9hZERvY0ZvckFsbEVxdWlwbWVudHMoXG4gICAgICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxuICAgICAgICBkb2N1bWVudEZpbGU6IEZpbGUsXG4gICAgICAgIHR5cGU6IFR5cGVOb3RlXG4gICAgKSB7XG4gICAgICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyhwcmVmaXgsIGRvY3VtZW50RmlsZSwgJ0JBVENIJyk7XG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZUxpc3QgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwLnNwYWNlSUQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VxdWlwID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcbiAgICAgICAgICAgICAgICAgICAgb3duZXJNaXNzaW9uSUQ6IG1pc3Npb24gPyBtaXNzaW9uLmlkIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB1cGRhdGVMaXN0LnB1c2gobmV3RXF1aXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzeW5jIHVwbG9hZERvYyhcbiAgICAgICAgZXF1aXBtZW50OiBFcXVpcG1lbnQsXG4gICAgICAgIGRvY3VtZW50RmlsZTogRmlsZSxcbiAgICAgICAgdHlwZTogVHlwZU5vdGVcbiAgICApOiBQcm9taXNlPE5vdGU+IHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5nZXRQcmVmaXhEb2ModHlwZSk7XG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXG4gICAgICAgICAgICBhc3luYyAodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xuICAgICAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUVxdWlwbWVudCh7IGlkOiBlcXVpcC5pZCB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZWQgZXF1aXBtZW50JywgZGVsZXRlZCk7XG5cbiAgICAgICAgLy8gZGVsZXRlIFBPSVxuICAgICAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XG4gICAgICAgIGlmIChwb2kpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGUgbm90ZXMgcmVsYXRlZFxuICAgICAgICBpZiAoZXF1aXAubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZXF1aXAubm90ZXMuaXRlbXMubWFwKGFzeW5jIChub3RlOiBOb3RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlcyBmcm9tIFMzXG4gICAgICAgICAgICAgICAgICAgIC8qKiBOb3Qgc2hhcmVkIHdpdGggb3RoZXIgZXF1aXBtZW50ICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGUuYXR0YWNobWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKG5vdGUuYXR0YWNobWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZU5vdGUoeyBpZDogbm90ZS5pZCB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGUgb3BlcmF0aW9ucyAocmVtb3ZlIGZyb20gbGlua2VkIHRpY2tldHMpXG4gICAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5kZWxldGVPcGVyYXRpb25zRm9yRXF1aXBtZW50KGVxdWlwLmlkKTtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlRXF1aXBtZW50TG9jYXRpb24oXG4gICAgICAgIGVxdWlwOiBFcXVpcG1lbnQsXG4gICAgICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcbiAgICApOiBQcm9taXNlPFBPST4ge1xuICAgICAgICBjb25zdCBwb2lJbnB1dCA9IHtcbiAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxuICAgICAgICAgICAgdHlwZTogUG9pVHlwZS5FUVVJUE1FTlQsXG4gICAgICAgICAgICBlbGVtZW50SUQ6IGVxdWlwLmlkLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcbiAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiB0YWdEYXRhLmdldFN3ZWVwSUQoKSxcbiAgICAgICAgfSBhcyBQT0k7XG4gICAgICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHBvaUlucHV0KTtcbiAgICAgICAgcmV0dXJuIHBvaTtcbiAgICB9XG5cbiAgICBhc3luYyByZW1vdmVUaWNrZXRGcm9tRXF1aXBtZW50KFxuICAgICAgICB0aWNrZXQ6IFRpY2tldCxcbiAgICAgICAgZXF1aXA6IEVxdWlwbWVudFxuICAgICk6IFByb21pc2U8T3BlcmF0aW9uPiB7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkVxdWlwID1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XG4gICAgICAgIGNvbnN0IG9wZXJhdGlvblRvRGVsZXRlID0gb3BlcmF0aW9uRXF1aXAuZmluZChcbiAgICAgICAgICAgIChvcCkgPT4gb3AudGlja2V0SUQgPT09IHRpY2tldC5pZFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlT3BlcmF0aW9uKG9wZXJhdGlvblRvRGVsZXRlLmlkKVxuICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGlja2V0c1NlcnZpY2UuYWRkRXZlbnRUb1RpY2tldCh0aWNrZXQgYXMgVGlja2V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnRXF1aXBlbWVudCByZXRpcsOpIGR1IHRpY2tldCcsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgRXF1aXBlbWVudCAke2VxdWlwLm5hbWV9IGEgw6l0w6kgcmV0aXLDqSBkdSB0aWNrZXRgLFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IEV2ZW50U3RhdHVzLlVOTElOS0VEX0ZST01fRVFVSVBNRU5ULFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuVElDS0VULFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblBhdGg6ICd0aWNrZXRFdmVudC50aWNrZXQudW5saW5rZWRGcm9tRXF1aXBtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHsgZXF1aXBtZW50OiBlcXVpcC5uYW1lIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0RXF1aXBzKCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFNwYWNlSUQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSB0cnVlO1xuXG4gICAgICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcbiAgICAgICAgZXFMaXN0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxuICAgICAgICAgICAgZXFMaXN0XG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGVxTGlzdCk7XG4gICAgICAgIGlmIChlcUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gZXFMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZXF1aXBtZW50KSA9PiAhdGhpcy5pc0FyY2hpdmVkKGVxdWlwbWVudClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLm1hcChhc3luYyAoZXF1aXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXAuZG9jdW1lbnRhdGlvbkltYWdlVXJsU2lnbmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlID0gZmlsdGVyZWRFcXVpcHM7XG4gICAgICAgICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IChhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxuICAgICAgICAgICAgICAgICkpIGFzIEVxdWlwbWVudFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIGZpbHRlcmVkRXF1aXBzKTtcbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XG4gICAgICAgICAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgICAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXG4gICAgICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRFcXVpcG1lbnRzKTtcbiAgICAgICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxuICAgICAgICBzcGFjZUlELFxuICAgICAgICBtaXNzaW9uczogTWlzc2lvbltdXG4gICAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xuICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XG4gICAgICAgIGlmIChzcGFjZU1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FuU2VlRXF1aXBzID0gc3BhY2VNaXNzaW9ucy5zb21lKFxuICAgICAgICAgICAgKG0pID0+XG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5tYW5hZ2Vycy5pbmNsdWRlcyhtLnJvbGUpIHx8XG4gICAgICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkb21haW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBzcGFjZU1pc3Npb25zKSB7XG4gICAgICAgICAgICBkb21haW5zID0gWy4uLmRvbWFpbnMsIG0uZG9tYWluc107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRCk7XG4gICAgICAgIC8vIHJlc3VsdHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcbiAgICAgICAgLy8gICAgIHJlc3VsdHMsXG4gICAgICAgIC8vICAgICBkb21haW5zLFxuICAgICAgICAvLyApO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVJY29uRm9yQWxsRXF1aXBtZW50c0luU3BhY2UoXG4gICAgICAgIHRhZ0ljb246IHN0cmluZyxcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBkb21haW5JRDogc3RyaW5nID0gbnVsbFxuICAgICk6IFByb21pc2U8eyBlcXVpcHM6IEVxdWlwbWVudFtdOyBwb2lzOiBQT0lbXTsgfT4ge1xuICAgICAgICBsZXQgZXF1aXBzID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRCk7XG4gICAgICAgIGlmIChkb21haW5JRCkge1xuICAgICAgICAgICAgZXF1aXBzID0gZXF1aXBzLmZpbHRlcigoZXF1aXApID0+IGVxdWlwLmRvbWFpbklEID09PSBkb21haW5JRCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMudXBkYXRlSWNvbkZvckFsbE9iamVjdHMoZXF1aXBzLCB0YWdJY29uKTtcbiAgICAgICAgcmV0dXJuIHsgZXF1aXBzLCBwb2lzIH07XG4gICAgfTtcblxuICAgIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xuICAgIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRFxuICAgICAgICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogZmFsc2U7XG4gICAgfVxuXG4gICAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XG4gICAgICAgIGxldCBhcmNoaXZlZExpc3QgPSBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcbiAgICAgICAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcblxuICAgICAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xuXG4gICAgICAgIGlmIChhcmNoaXZlZCkge1xuICAgICAgICAgICAgYXJjaGl2ZWRMaXN0LnB1c2gobWlzc2lvbklEKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XG4gICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxuICAgICAgICAgICAgYXJjaGl2ZWRGb3JNaXNzaW9uSUQ6IGFyY2hpdmVkTGlzdCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlRmlsZShkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50KSB7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUZyb21TMyhkb2N1bWVudF8udXJsKTtcbiAgICAgICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5hdmlnYXRlVG9FcXVpcG1lbnRJbjNEKFxuICAgICAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcbiAgICAgICAgZm9yY2VTd2l0Y2hWaXNpdDogYm9vbGVhbiA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIGxldCB1cmwgPSBgdmlzaXQvJHtlcXVpcG1lbnQuc3BhY2VJRH1gO1xuICAgICAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xuICAgICAgICAgICAgdXJsICs9IGAvZXF1aXAvJHtlcXVpcG1lbnQuaWR9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5Hb1RvVGFnID0gYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhcbiAgICAgICAgICAgIGAke2VxdWlwbWVudC5pZH1gXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjYW5Hb1RvVGFnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcblxuICAgICAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcbiAgICAgICAgICAgIGFsZXJ0KCdFcnJvciB3aGlsZSBnZXR0aW5nIHZpcnR1YWwgdmlzaXQgbW9kZWwnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBtb3Zpbmcgd2l0aGluIHRoZSBzYW1lIDNEIG1vZGVsXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9kZWwzRCcpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgZm9yY2UgYWRkIGJlY2F1c2Ugd2UgbWlnaHQgYmUgaW4gYW4gYW5vdGhlciB6b25lXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKGVxdWlwbWVudCwgcG9pKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLyoqIFNpIG9uIG5lIGZvcmNlIHBhcyBsYSB2aXNpdGUsIG9uIGRlbWFuZGUgc2kgb24gdmV1dCBldHJlIHN3aXRjaCAqL1xuICAgICAgICAgICAgICAgIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGVsM0QsXG4gICAgICAgICAgICAgICAgICAgIGVxdWlwbWVudC5zcGFjZUlELFxuICAgICAgICAgICAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogU2kgb24gZm9yY2UgbGUgc3dpdGNoIGRlIGxhIHZpc2l0ICovXG4gICAgICAgICAgICB3aW5kb3cub3BlbihgJHt1cmx9P21vZGVsM0Q9JHtyZXN1bHQubW9kZWwzRH0mc3dlZXA9dHJ1ZWAsICdfYmxhbmsnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZUVxdWlwc0ZvclpvbmUoKSB7XG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcbiAgICAgICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gW107XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuaGFzKHRoaXMuem9uZUlERmlsdGVyKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IChhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRab25lXG4gICAgICAgICAgICAgICAgKSkgYXMgRXF1aXBtZW50W107XG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW1xuICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXJlZEVxdWlwcyxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXG4gICAgICAgICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xuICAgICAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgICAgICAgICAgIHpvbmU6IGZpbHRlcmVkRXF1aXBzLFxuICAgICAgICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHVwZGF0ZUR1ZVRvRGVsZXRlKGRlbGV0ZWRFcXVpcG1lbnQ6IEVxdWlwbWVudCkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xuICAgICAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcbiAgICAgICAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZXF1aXApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5pbmRleE9mKGVxdWlwKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHpvbmUgb2YgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5rZXlzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVxdWlwVG9EZWxldGUgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXG4gICAgICAgICAgICAgICAgLmdldCh6b25lKVxuICAgICAgICAgICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZCk7XG4gICAgICAgICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHpvbmUpXG4gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKGVxdWlwVG9EZWxldGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHpvbmUpLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxuICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgIH1cblxuICAgIHVwZGF0ZUR1ZVRvQ3JlYXRlKGNyZWF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UudW5zaGlmdChjcmVhdGVkRXF1aXApO1xuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXG4gICAgICAgICAgICAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKVxuICAgICAgICAgICAgLnVuc2hpZnQoY3JlYXRlZEVxdWlwKTtcbiAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcbiAgICAgICAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxuICAgICAgICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxuICAgICAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxuICAgIH1cblxuICAgIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XG4gICAgICAgIGNvbnN0IGVxdWlwID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5maW5kKFxuICAgICAgICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVxdWlwKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xuICAgICAgICAgICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxLCB1cGRhdGVkRXF1aXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xuICAgICAgICAgICAgY29uc3QgZXF1aXBUb1VwZCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgICAgICAuZ2V0KHpvbmUpXG4gICAgICAgICAgICAgICAgLmZpbmQoKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWQpO1xuICAgICAgICAgICAgaWYgKGVxdWlwVG9VcGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgICAgICAgICAgLmdldCh6b25lKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoem9uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XG4gICAgICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcbiAgICAgICAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcbiAgICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICB9XG5cbiAgICBpbml0U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTXVzZXVtVXNlcikge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLnpvbmVDaGFuZ2VcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoem9uZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXpvbmUgfHwgIXRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2U6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCA9PT0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FtZSBzcGFjZSwgIG9ubHkgem9uZSB1cGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJnb2luZyB0byB1cGRhdGUgZXF1aXBzIGZvciB6b25lIChzYW1lIHNwYWNlKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB6b25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJnb2luZyB0byBpbml0IGVxdWlwcyBmb3Igem9uZSBmb3IgbmV3IHNwYWNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFNwYWNlSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRFcXVpcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZU9ic2VydmFibGVcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvRGVsZXRlKGVxdWlwbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVPYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0NyZWF0ZShlcXVpcG1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2JzZXJ2YWJsZVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9FcXVpcFVwZGF0ZWQoZXF1aXBtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { Injectable } from "@angular/core";
1
+ import { Inject, Injectable } from "@angular/core";
2
2
  import { Subject } from "rxjs";
3
3
  import { PoiType } from "../../types.service";
4
4
  import { deleteFromS3, uploadFileToS3 } from "../s3.service";
@@ -10,7 +10,7 @@ import * as i4 from "./poi.service";
10
10
  import * as i5 from "../user.service";
11
11
  import * as i6 from "./navigation.service";
12
12
  export class MeasurementService {
13
- constructor(navigatorService, filterService, commentService, poiService, userService, navigationService) {
13
+ constructor(awsKinesisAnalyticsInjected, navigatorService, filterService, commentService, poiService, userService, navigationService) {
14
14
  this.navigatorService = navigatorService;
15
15
  this.filterService = filterService;
16
16
  this.commentService = commentService;
@@ -24,6 +24,7 @@ export class MeasurementService {
24
24
  this.measurementFilter = false; // if false means no filtering, everything is allowed
25
25
  this.updateDone = new Subject();
26
26
  this.updating = new Subject();
27
+ this.awsKinesisAnalytics = awsKinesisAnalyticsInjected;
27
28
  const isMuseumUser = this.userService.hasOnlyMuseumRole();
28
29
  if (!isMuseumUser) {
29
30
  this.navigatorService.zoneChange.subscribe((zone) => {
@@ -128,6 +129,19 @@ export class MeasurementService {
128
129
  comment,
129
130
  poi,
130
131
  };
132
+ this.awsKinesisAnalytics.getInstance().record(
133
+ // @ts-ignore
134
+ {
135
+ data: {
136
+ eventType: "Object Creation",
137
+ measurement: measurement,
138
+ zoneId: spaceID,
139
+ user: this.userService.cu,
140
+ timestamp: new Date(),
141
+ },
142
+ streamName: "smarterplanKinesis-analytics",
143
+ // partitionKey: "",
144
+ }, "AWSKinesis");
131
145
  return measurement;
132
146
  }
133
147
  async getModel3DForMeasurement(measurement) {
@@ -153,12 +167,15 @@ export class MeasurementService {
153
167
  return measurements;
154
168
  }
155
169
  }
156
- MeasurementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MeasurementService, deps: [{ token: i1.NavigatorService }, { token: i2.FilterService }, { token: i3.CommentService }, { token: i4.PoiService }, { token: i5.BaseUserService }, { token: i6.NavigationService }], target: i0.ɵɵFactoryTarget.Injectable });
170
+ MeasurementService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MeasurementService, deps: [{ token: 'currentAwsKinesisAnalyticsService' }, { token: i1.NavigatorService }, { token: i2.FilterService }, { token: i3.CommentService }, { token: i4.PoiService }, { token: i5.BaseUserService }, { token: i6.NavigationService }], target: i0.ɵɵFactoryTarget.Injectable });
157
171
  MeasurementService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MeasurementService, providedIn: "root" });
158
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: MeasurementService, decorators: [{
159
173
  type: Injectable,
160
174
  args: [{
161
175
  providedIn: "root",
162
176
  }]
163
- }], ctorParameters: function () { return [{ type: i1.NavigatorService }, { type: i2.FilterService }, { type: i3.CommentService }, { type: i4.PoiService }, { type: i5.BaseUserService }, { type: i6.NavigationService }]; } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhc3VyZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL21lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBZSxPQUFPLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFHekUsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7O0FBUzdELE1BQU0sT0FBTyxrQkFBa0I7SUEyQjNCLFlBQ1ksZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFdBQTRCLEVBQzVCLGlCQUFvQztRQUxwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBaENoRCxTQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXZCLHdCQUFtQixHQUdmLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFNUIscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsd0JBQW1CLEdBR2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVFuQixzQkFBaUIsR0FBWSxLQUFLLENBQUMsQ0FBQyxxREFBcUQ7UUFFekYsZUFBVSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFD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Q3BDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDckM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUFDLE9BQWU7UUFDaEQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN6RCxPQUFPLENBQ1YsQ0FBQztRQUNGLFFBQVE7WUFDSixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsdUNBQXVDLENBQzVELE9BQU8sRUFDUCxRQUFRLENBQ1gsQ0FBQztRQUNOLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDM0IsTUFBTSxXQUFXLEdBQ2IsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUM5QyxPQUFPLENBQUMsRUFBRSxDQUNiLENBQUM7Z0JBQ04sWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1NBQ0w7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDOzsrR0F0TVEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzJGQUVULGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTWVhc3VyZW1lbnQsIFBvaVR5cGUsIENvbW1lbnQsIFBPSSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2ZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL25hdmlnYXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBkZWxldGVGcm9tUzMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIi4uL3MzLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29tbWVudC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL3BvaS5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgTWVhc3VyZW1lbnRTZXJ2aWNlIHtcbiAgICBwYXRoID0gXCJtZWFzdXJlbWVudHMvXCI7XG5cbiAgICBjdXJyZW50TWVhc3VyZW1lbnRzOiB7XG4gICAgICAgIHNwYWNlOiBNZWFzdXJlbWVudFtdO1xuICAgICAgICB6b25lOiBNZWFzdXJlbWVudFtdO1xuICAgIH0gPSB7IHNwYWNlOiBbXSwgem9uZTogW10gfTtcblxuICAgIG1lYXN1cmVtZW50c1RhZ3M6IFN1YmplY3Q8Q29tbWVudFtdPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBtZWFzdXJlbWVudHNVcGRhdGVkOiBTdWJqZWN0PHtcbiAgICAgICAgc3BhY2U6IE1lYXN1cmVtZW50W107XG4gICAgICAgIHpvbmU6IE1lYXN1cmVtZW50W107XG4gICAgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcblxuICAgIHpvbmVJREZpbHRlcjogc3RyaW5nO1xuXG4gICAgZGF0ZUZpbHRlcjogRGF0ZVtdO1xuXG4gICAgbWVhc3VyZW1lbnRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgZmFsc2UgbWVhbnMgbm8gZmlsdGVyaW5nLCBldmVyeXRoaW5nIGlzIGFsbG93ZWRcblxuICAgIHVwZGF0ZURvbmU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbW1lbnRTZXJ2aWNlOiBDb21tZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBjb25zdCBpc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XG4gICAgICAgIGlmICghaXNNdXNldW1Vc2VyKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclNlcnZpY2Uuem9uZUNoYW5nZS5zdWJzY3JpYmUoKHpvbmUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1RhZ3MubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRGaWx0ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gaW5pdCBtZWFzdXJlbWVudHMgZnJvbSB6b25lXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRNZWFzdXJlbWVudHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyU2VydmljZS5zdWJzY3JpYmVUb0RhdGFGaWx0ZXJVcGRhdGUoKGRhdGVSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZpbHRlciA9IGRhdGVSYW5nZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRNZWFzdXJlbWVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kYXRlRmlsdGVyID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmN1cnJlbnREYXRlRmlsdGVyO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEb25lLnN1YnNjcmliZSgoKSA9PiB0aGlzLmluaXRNZWFzdXJlbWVudHMoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBpbml0TWVhc3VyZW1lbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGluZy5uZXh0KHRydWUpO1xuICAgICAgICAgICAgbGV0IG1lYXN1cmVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0TWVhc3VyZW1lbnRzRm9yU3BhY2VGb3JVc2VyKHRoaXMuY3VycmVudFNwYWNlSUQsKTtcbiAgICAgICAgICAgIGlmIChtZWFzdXJlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lYXN1cmVtZW50RmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNZWFzdXJlbWVudHMuc3BhY2UgPSBtZWFzdXJlbWVudHM7XG4gICAgICAgICAgICAgICAgLy8gZW1pdCBvbiB0YWdzIHNob3VsZCBiZSBhZnRlciBzZXR0aW5nIGN1cnJlbnQuc3BhY2UgISFcbiAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1RhZ3MubmV4dChtZWFzdXJlbWVudHMubWFwKChtKSA9PiBtLmNvbW1lbnQpKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21tZW50c1pvbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50cy5tYXAoKG1lYXN1cmUpID0+IG1lYXN1cmUuY29tbWVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudHMgPSBtZWFzdXJlbWVudHMuZmlsdGVyKChtZWFzdXJlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHNab25lLmluY2x1ZGVzKG1lYXN1cmUuY29tbWVudCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50cy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLmNvbW1lbnQuY3JlYXRlZEF0KSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShhLmNvbW1lbnQuY3JlYXRlZEF0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy56b25lID0gbWVhc3VyZW1lbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRzVXBkYXRlZC5uZXh0KHRoaXMuY3VycmVudE1lYXN1cmVtZW50cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy5zcGFjZSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy56b25lID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1RhZ3MubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIGRlbGV0ZU1lYXN1cmVtZW50KG1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCk6IFByb21pc2U8Q29tbWVudD4ge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZGVsZXRlQ29tbWVudChcbiAgICAgICAgICAgIG1lYXN1cmVtZW50LmNvbW1lbnQuaWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZWxldGVkQ29tbWVudCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShtZWFzdXJlbWVudC5wb2kuaWQpO1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gYCR7bWVhc3VyZW1lbnQuY29tbWVudC5pZC5zbGljZSgwLCA4KX1fYDtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBgJHt0aGlzLnBhdGggKyBwcmVmaXh9bWVzdXJlLmpwZWdgO1xuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWxldGVkQ29tbWVudDtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVNZWFzdXJlbWVudEZvclNwYWNlKFxuICAgICAgICBjb21tZW50SW5wdXQ6IENvbW1lbnQsXG4gICAgICAgIGRhdGFNZWFzdXJlbWVudHM6IHsgbWVhc3VyZTogYW55W107IHN3ZWVwOiBzdHJpbmc7IH0sXG4gICAgICAgIHNjcmVlbnNob3Q6IGFueSxcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8TWVhc3VyZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgbGFzdE1lYXN1cmUgPSBkYXRhTWVhc3VyZW1lbnRzLm1lYXN1cmU7XG4gICAgICAgIGNvbnN0IHN3ZWVwSUQgPSBkYXRhTWVhc3VyZW1lbnRzLnN3ZWVwO1xuICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSBsYXN0TWVhc3VyZVtsYXN0TWVhc3VyZS5sZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IGNvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmNyZWF0ZUNvbW1lbnQoY29tbWVudElucHV0KTtcbiAgICAgICAgY29uc3QgcG9pSW5wdXQgPSB7XG4gICAgICAgICAgICBjb29yZGluYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgeDogbGFzdFBvaW50LngsXG4gICAgICAgICAgICAgICAgeTogbGFzdFBvaW50LnksXG4gICAgICAgICAgICAgICAgejogbGFzdFBvaW50LnosXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHR5cGU6IFBvaVR5cGUuTUVBU1VSRSxcbiAgICAgICAgICAgIGVsZW1lbnRJRDogY29tbWVudC5pZCxcbiAgICAgICAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcElELFxuICAgICAgICB9IGFzIFBPSTtcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmNyZWF0ZVBPSUZvclNwYWNlSUQocG9pSW5wdXQpO1xuICAgICAgICBjb25zdCBzY3JlZW4gPSBhd2FpdCBmZXRjaChzY3JlZW5zaG90KTtcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHNjcmVlbi5ibG9iKCk7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIFwibWVzdXJlLmpwZWdcIiwgeyB0eXBlOiBcImltYWdlL2pwZWdcIiB9KTtcbiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdXBsb2FkRmlsZVRvUzModGhpcy5wYXRoLCBmaWxlLCBjb21tZW50LmlkKTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgY29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UudXBkYXRlQ29tbWVudCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgYW5uZXhlOiB1cmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZWFzdXJlbWVudCA9IHtcbiAgICAgICAgICAgIGNvbW1lbnQsXG4gICAgICAgICAgICBwb2ksXG4gICAgICAgIH0gYXMgTWVhc3VyZW1lbnQ7XG4gICAgICAgIHJldHVybiBtZWFzdXJlbWVudDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRNb2RlbDNERm9yTWVhc3VyZW1lbnQobWVhc3VyZW1lbnQ6IE1lYXN1cmVtZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaUJ5RWxlbWVudElkKFxuICAgICAgICAgICAgbWVhc3VyZW1lbnQuY29tbWVudC5pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBvaSAmJiBwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25zID1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldE5hdmlnYXRpb25zRm9yTWF0dGVycG9ydElERm9yU3BhY2UoXG4gICAgICAgICAgICAgICAgICAgIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCxcbiAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnQuY29tbWVudC5zcGFjZUlELFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBbcG9pTmF2aWdhdGlvbl0gPSBuYXZpZ2F0aW9ucztcbiAgICAgICAgICAgIHJldHVybiBwb2lOYXZpZ2F0aW9uLm5vZGUubW9kZWwzRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRNZWFzdXJlbWVudHNGb3JTcGFjZUZvclVzZXIoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxNZWFzdXJlbWVudFtdPiB7XG4gICAgICAgIGxldCBjb21tZW50cyA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZ2V0Q29tbWVudHNCeVNwYWNlSUQoXG4gICAgICAgICAgICBzcGFjZUlELFxuICAgICAgICApO1xuICAgICAgICBjb21tZW50cyA9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyTWVhc3VyZW1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxuICAgICAgICAgICAgICAgIHNwYWNlSUQsXG4gICAgICAgICAgICAgICAgY29tbWVudHMsXG4gICAgICAgICAgICApO1xuICAgICAgICBsZXQgbWVhc3VyZW1lbnRzID0gW107XG4gICAgICAgIGlmIChjb21tZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICBjb21tZW50cy5tYXAoYXN5bmMgKGNvbW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVhc3VyZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5yZWFkQ29tbWVudEFzTWVhc3VyZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50cy5wdXNoKG1lYXN1cmVtZW50KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cztcbiAgICB9XG59XG4iXX0=
177
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
178
+ type: Inject,
179
+ args: ['currentAwsKinesisAnalyticsService']
180
+ }] }, { type: i1.NavigatorService }, { type: i2.FilterService }, { type: i3.CommentService }, { type: i4.PoiService }, { type: i5.BaseUserService }, { type: i6.NavigationService }]; } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhc3VyZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL21lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQWUsT0FBTyxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVM3RCxNQUFNLE9BQU8sa0JBQWtCO0lBNkIzQixZQUNpRCwyQkFBZ0MsRUFDckUsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFdBQTRCLEVBQzVCLGlCQUFvQztRQUxwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBbkNoRCxTQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXZCLHdCQUFtQixHQUdmLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFNUIscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsd0JBQW1CLEdBR2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVFuQixzQkFBaUIsR0FBWSxLQUFLLENBQUMsQ0FBQyxxREFBcUQ7UUFFekYsZUFBVSxH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Q0wsQ0FBQztTQUNMO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQzs7K0dBNU5RLGtCQUFrQixrQkE4QmYsbUNBQW1DO21IQTlCdEMsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkErQlEsTUFBTTsyQkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTWVhc3VyZW1lbnQsIFBvaVR5cGUsIENvbW1lbnQsIFBPSSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2ZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL25hdmlnYXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBkZWxldGVGcm9tUzMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIi4uL3MzLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENvbW1lbnRTZXJ2aWNlIH0gZnJvbSBcIi4vY29tbWVudC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL3BvaS5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgTWVhc3VyZW1lbnRTZXJ2aWNlIHtcbiAgICBwYXRoID0gXCJtZWFzdXJlbWVudHMvXCI7XG5cbiAgICBjdXJyZW50TWVhc3VyZW1lbnRzOiB7XG4gICAgICAgIHNwYWNlOiBNZWFzdXJlbWVudFtdO1xuICAgICAgICB6b25lOiBNZWFzdXJlbWVudFtdO1xuICAgIH0gPSB7IHNwYWNlOiBbXSwgem9uZTogW10gfTtcblxuICAgIG1lYXN1cmVtZW50c1RhZ3M6IFN1YmplY3Q8Q29tbWVudFtdPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBtZWFzdXJlbWVudHNVcGRhdGVkOiBTdWJqZWN0PHtcbiAgICAgICAgc3BhY2U6IE1lYXN1cmVtZW50W107XG4gICAgICAgIHpvbmU6IE1lYXN1cmVtZW50W107XG4gICAgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcblxuICAgIHpvbmVJREZpbHRlcjogc3RyaW5nO1xuXG4gICAgZGF0ZUZpbHRlcjogRGF0ZVtdO1xuXG4gICAgbWVhc3VyZW1lbnRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgZmFsc2UgbWVhbnMgbm8gZmlsdGVyaW5nLCBldmVyeXRoaW5nIGlzIGFsbG93ZWRcblxuICAgIHVwZGF0ZURvbmU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpIGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDogYW55LFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tZW50U2VydmljZTogQ29tbWVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xuXG4gICAgICAgIGNvbnN0IGlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcbiAgICAgICAgaWYgKCFpc011c2V1bVVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRzVGFncy5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudEZpbHRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBpbml0IG1lYXN1cmVtZW50cyBmcm9tIHpvbmVcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdE1lYXN1cmVtZW50cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnN1YnNjcmliZVRvRGF0YUZpbHRlclVwZGF0ZSgoZGF0ZVJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdE1lYXN1cmVtZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRhdGVGaWx0ZXIgPSB0aGlzLmZpbHRlclNlcnZpY2UuY3VycmVudERhdGVGaWx0ZXI7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURvbmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5pdE1lYXN1cmVtZW50cygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGluaXRNZWFzdXJlbWVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBsZXQgbWVhc3VyZW1lbnRzID0gYXdhaXQgdGhpcy5nZXRNZWFzdXJlbWVudHNGb3JTcGFjZUZvclVzZXIodGhpcy5jdXJyZW50U3BhY2VJRCwpO1xuICAgICAgICAgICAgaWYgKG1lYXN1cmVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlRmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWVhc3VyZW1lbnRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy5zcGFjZSA9IG1lYXN1cmVtZW50cztcbiAgICAgICAgICAgICAgICAvLyBlbWl0IG9uIHRhZ3Mgc2hvdWxkIGJlIGFmdGVyIHNldHRpbmcgY3VycmVudC5zcGFjZSAhIVxuICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRzVGFncy5uZXh0KG1lYXN1cmVtZW50cy5tYXAoKG0pID0+IG0uY29tbWVudCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRzWm9uZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzLm1hcCgobWVhc3VyZSkgPT4gbWVhc3VyZS5jb21tZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50c1pvbmUuaW5jbHVkZXMobWVhc3VyZS5jb21tZW50KSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGIuY29tbWVudC5jcmVhdGVkQXQpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlKGEuY29tbWVudC5jcmVhdGVkQXQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzLnpvbmUgPSBtZWFzdXJlbWVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNVcGRhdGVkLm5leHQodGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzLnNwYWNlID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzLnpvbmUgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRzVGFncy5uZXh0KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRpbmcubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlTWVhc3VyZW1lbnQobWVhc3VyZW1lbnQ6IE1lYXN1cmVtZW50KTogUHJvbWlzZTxDb21tZW50PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGVDb21tZW50KFxuICAgICAgICAgICAgbWVhc3VyZW1lbnQuY29tbWVudC5pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlbGV0ZWRDb21tZW50KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZGVsZXRlUG9pKG1lYXN1cmVtZW50LnBvaS5pZCk7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBgJHttZWFzdXJlbWVudC5jb21tZW50LmlkLnNsaWNlKDAsIDgpfV9gO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGAke3RoaXMucGF0aCArIHByZWZpeH1tZXN1cmUuanBlZ2A7XG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbGV0ZWRDb21tZW50O1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZU1lYXN1cmVtZW50Rm9yU3BhY2UoXG4gICAgICAgIGNvbW1lbnRJbnB1dDogQ29tbWVudCxcbiAgICAgICAgZGF0YU1lYXN1cmVtZW50czogeyBtZWFzdXJlOiBhbnlbXTsgc3dlZXA6IHN0cmluZzsgfSxcbiAgICAgICAgc2NyZWVuc2hvdDogYW55LFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxNZWFzdXJlbWVudD4ge1xuICAgICAgICBjb25zdCBsYXN0TWVhc3VyZSA9IGRhdGFNZWFzdXJlbWVudHMubWVhc3VyZTtcbiAgICAgICAgY29uc3Qgc3dlZXBJRCA9IGRhdGFNZWFzdXJlbWVudHMuc3dlZXA7XG4gICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGxhc3RNZWFzdXJlW2xhc3RNZWFzdXJlLmxlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgY29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuY3JlYXRlQ29tbWVudChjb21tZW50SW5wdXQpO1xuICAgICAgICBjb25zdCBwb2lJbnB1dCA9IHtcbiAgICAgICAgICAgIGNvb3JkaW5hdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB4OiBsYXN0UG9pbnQueCxcbiAgICAgICAgICAgICAgICB5OiBsYXN0UG9pbnQueSxcbiAgICAgICAgICAgICAgICB6OiBsYXN0UG9pbnQueixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdHlwZTogUG9pVHlwZS5NRUFTVVJFLFxuICAgICAgICAgICAgZWxlbWVudElEOiBjb21tZW50LmlkLFxuICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHN3ZWVwSUQsXG4gICAgICAgIH0gYXMgUE9JO1xuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XG4gICAgICAgIGNvbnN0IHNjcmVlbiA9IGF3YWl0IGZldGNoKHNjcmVlbnNob3QpO1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgc2NyZWVuLmJsb2IoKTtcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgXCJtZXN1cmUuanBlZ1wiLCB7IHR5cGU6IFwiaW1hZ2UvanBlZ1wiIH0pO1xuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyh0aGlzLnBhdGgsIGZpbGUsIGNvbW1lbnQuaWQpO1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS51cGRhdGVDb21tZW50KHtcbiAgICAgICAgICAgICAgICBpZDogY29tbWVudC5pZCxcbiAgICAgICAgICAgICAgICBhbm5leGU6IHVybCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lYXN1cmVtZW50ID0ge1xuICAgICAgICAgICAgY29tbWVudCxcbiAgICAgICAgICAgIHBvaSxcbiAgICAgICAgfSBhcyBNZWFzdXJlbWVudDtcblxuICAgICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgZXZlbnRUeXBlOiBcIk9iamVjdCBDcmVhdGlvblwiLFxuICAgICAgICAgICAgICBtZWFzdXJlbWVudDogbWVhc3VyZW1lbnQsXG4gICAgICAgICAgICAgIHpvbmVJZDogc3BhY2VJRCxcbiAgICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmVhbU5hbWU6IFwic21hcnRlcnBsYW5LaW5lc2lzLWFuYWx5dGljc1wiLFxuICAgICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJBV1NLaW5lc2lzXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50O1xuICAgIH1cblxuICAgIGFzeW5jIGdldE1vZGVsM0RGb3JNZWFzdXJlbWVudChtZWFzdXJlbWVudDogTWVhc3VyZW1lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoXG4gICAgICAgICAgICBtZWFzdXJlbWVudC5jb21tZW50LmlkLFxuICAgICAgICApO1xuICAgICAgICBpZiAocG9pICYmIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbnMgPVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3JNYXR0ZXJwb3J0SURGb3JTcGFjZShcbiAgICAgICAgICAgICAgICAgICAgcG9pLm1hdHRlcnBvcnRTd2VlcElELFxuICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudC5jb21tZW50LnNwYWNlSUQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IFtwb2lOYXZpZ2F0aW9uXSA9IG5hdmlnYXRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIHBvaU5hdmlnYXRpb24ubm9kZS5tb2RlbDNEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE1lYXN1cmVtZW50c0ZvclNwYWNlRm9yVXNlcihzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPE1lYXN1cmVtZW50W10+IHtcbiAgICAgICAgbGV0IGNvbW1lbnRzID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5nZXRDb21tZW50c0J5U3BhY2VJRChcbiAgICAgICAgICAgIHNwYWNlSUQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbW1lbnRzID1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJNZWFzdXJlbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICAgICAgICAgICAgc3BhY2VJRCxcbiAgICAgICAgICAgICAgICBjb21tZW50cyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIGxldCBtZWFzdXJlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGNvbW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIGNvbW1lbnRzLm1hcChhc3luYyAoY29tbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZWFzdXJlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLnJlYWRDb21tZW50QXNNZWFzdXJlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbWVhc3VyZW1lbnRzLnB1c2gobWVhc3VyZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xuICAgIH1cbn1cbiJdfQ==