@provoly/dashboard 0.14.11 → 0.14.13

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 (108) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.d.ts +1 -0
  3. package/admin/components/admin-classes/store/admin-class.actions.d.ts +11 -0
  4. package/admin/components/admin-classes/store/admin-class.effects.d.ts +5 -0
  5. package/admin/components/admin-classes/store/admin-class.reducer.d.ts +1 -0
  6. package/admin/components/admin-classes/store/admin-class.selectors.d.ts +1 -0
  7. package/admin/i18n/en.translations.d.ts +11 -0
  8. package/admin/i18n/fr.translations.d.ts +11 -0
  9. package/admin/store/admin.service.d.ts +1 -0
  10. package/esm2022/admin/admin.module.mjs +8 -4
  11. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +8 -4
  12. package/esm2022/admin/components/admin-classes/store/admin-class.actions.mjs +5 -2
  13. package/esm2022/admin/components/admin-classes/store/admin-class.effects.mjs +4 -1
  14. package/esm2022/admin/components/admin-classes/store/admin-class.reducer.mjs +6 -2
  15. package/esm2022/admin/components/admin-classes/store/admin-class.selectors.mjs +4 -2
  16. package/esm2022/admin/i18n/en.translations.mjs +12 -1
  17. package/esm2022/admin/i18n/fr.translations.mjs +12 -1
  18. package/esm2022/admin/store/admin.service.mjs +6 -1
  19. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +2 -1
  20. package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
  21. package/esm2022/lib/core/components/about/about.component.mjs +14 -9
  22. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  23. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  24. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +2 -1
  25. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +2 -1
  26. package/esm2022/lib/core/public-api.mjs +4 -1
  27. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +101 -0
  28. package/esm2022/lib/core/store/aggregation/base-aggregation.service.mjs +16 -0
  29. package/esm2022/lib/core/store/aggregation/frontend-aggregation.service.mjs +210 -0
  30. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  31. package/esm2022/lib/core/store/config/config.service.mjs +13 -13
  32. package/esm2022/lib/core/store/config/versions.interface.mjs +1 -1
  33. package/esm2022/lib/core/store/context-menu/context-menu.actions.mjs +1 -1
  34. package/esm2022/lib/core/store/context-menu/context-menu.reducer.mjs +5 -3
  35. package/esm2022/lib/core/store/context-menu/context-menu.selectors.mjs +4 -2
  36. package/esm2022/lib/core/store/field/field.interface.mjs +1 -1
  37. package/esm2022/lib/dashboard/components/context-menu/context-menu.component.mjs +23 -17
  38. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +1 -1
  39. package/esm2022/lib/dashboard/components/widgets/data-widget.component.mjs +1 -1
  40. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +4 -3
  41. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +5 -3
  42. package/esm2022/toolbox/components/save-view/save-view.component.mjs +5 -4
  43. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +8 -9
  44. package/esm2022/widgets/widget-aggregated-chart/public-api.mjs +1 -4
  45. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +2 -3
  46. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +2 -2
  47. package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -2
  48. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +2 -1
  49. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +94 -34
  50. package/esm2022/widgets/widget-map/interaction/interaction-manager.class.mjs +3 -2
  51. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +3 -2
  52. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +47 -52
  53. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -2
  54. package/esm2022/widgets/widget-vega/i18n/en.translations.mjs +4 -2
  55. package/esm2022/widgets/widget-vega/i18n/fr.translations.mjs +4 -2
  56. package/fesm2022/provoly-dashboard-admin.mjs +55 -9
  57. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  58. package/fesm2022/provoly-dashboard-dataset.mjs +2 -1
  59. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  60. package/fesm2022/provoly-dashboard-toolbox.mjs +4 -3
  61. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  62. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +10 -313
  63. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  64. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +1 -1
  65. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  66. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
  68. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +98 -36
  69. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  70. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +47 -52
  71. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  72. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -1
  73. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  74. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +6 -2
  75. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  76. package/fesm2022/provoly-dashboard.mjs +420 -99
  77. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  78. package/lib/core/components/about/about.component.d.ts +3 -1
  79. package/lib/core/i18n/en.translations.d.ts +1 -0
  80. package/lib/core/i18n/fr.translations.d.ts +1 -0
  81. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +2 -1
  82. package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
  83. package/lib/core/public-api.d.ts +3 -0
  84. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/backend-aggregation.service.d.ts +4 -1
  85. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/base-aggregation.service.d.ts +14 -1
  86. package/{widgets/widget-aggregated-chart/service → lib/core/store/aggregation}/frontend-aggregation.service.d.ts +3 -2
  87. package/lib/core/store/class/class.interface.d.ts +1 -0
  88. package/lib/core/store/config/config.service.d.ts +2 -1
  89. package/lib/core/store/config/versions.interface.d.ts +3 -3
  90. package/lib/core/store/context-menu/context-menu.actions.d.ts +2 -0
  91. package/lib/core/store/context-menu/context-menu.reducer.d.ts +1 -0
  92. package/lib/core/store/context-menu/context-menu.selectors.d.ts +1 -0
  93. package/lib/core/store/field/field.interface.d.ts +1 -0
  94. package/lib/dashboard/components/context-menu/context-menu.component.d.ts +1 -0
  95. package/lib/dashboard/store/dashboard.selectors.d.ts +6 -1
  96. package/package.json +1 -1
  97. package/styles/base/_utils.scss +4 -0
  98. package/styles/components/_o-pry-admin-classes-customize.scss +6 -4
  99. package/toolbox/components/save-view/save-view.component.d.ts +2 -1
  100. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +1 -7
  101. package/widgets/widget-aggregated-chart/public-api.d.ts +0 -3
  102. package/widgets/widget-map/component/widget-map.component.d.ts +14 -3
  103. package/widgets/widget-table/component/widget-table.component.d.ts +6 -1
  104. package/widgets/widget-vega/i18n/en.translations.d.ts +2 -0
  105. package/widgets/widget-vega/i18n/fr.translations.d.ts +2 -0
  106. package/esm2022/widgets/widget-aggregated-chart/service/backend-aggregation.service.mjs +0 -96
  107. package/esm2022/widgets/widget-aggregated-chart/service/base-aggregation.service.mjs +0 -16
  108. package/esm2022/widgets/widget-aggregated-chart/service/frontend-aggregation.service.mjs +0 -206
@@ -2,12 +2,11 @@ import { OverlayModule } from '@angular/cdk/overlay';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NgModule } from '@angular/core';
4
4
  import { FormsModule } from '@angular/forms';
5
- import { BaseWidgetModule, PryCoreModule, PryDashboardModule, PryEditInputModule, PryI18nModule, PryIconModule, PryRangeModule, PrySelectModule, PrySortModule, PryToggleModule } from '@provoly/dashboard';
5
+ import { BaseWidgetModule, PryAggregationService, PryCoreModule, PryDashboardModule, PryEditInputModule, PryI18nModule, PryIconModule, PryRangeModule, PrySelectModule, PrySortModule, PryToggleModule } from '@provoly/dashboard';
6
6
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
7
7
  import { WidgetAggregatedChartComponent } from './component/widget-aggregated-chart.component';
8
8
  import { enTranslations } from './i18n/en.translations';
9
9
  import { frTranslations } from './i18n/fr.translations';
10
- import { PryAggregationService } from './service/base-aggregation.service';
11
10
  import { PryWidgetAggregatedChartCssComponent } from './style/css.component';
12
11
  import * as i0 from "@angular/core";
13
12
  import * as i1 from "@provoly/dashboard";
@@ -72,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
72
71
  providers: [PryAggregationService]
73
72
  }]
74
73
  }], ctorParameters: function () { return [{ type: i1.PryI18nService }]; } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFFYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGVBQWUsRUFDZixhQUFhLEVBQ2IsZUFBZSxFQUNoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQXNCN0UsTUFBTSxPQUFPLDJCQUE0QixTQUFRLGdCQUFnQjtJQUMvRCxZQUFvQixtQkFBbUM7UUFDckQsS0FBSyxFQUFFLENBQUM7UUFEVSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQWdCO1FBRXJELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFUSxZQUFZO1FBQ25CLE9BQU8sOEJBQTJELENBQUM7SUFDckUsQ0FBQzs4R0FUVSwyQkFBMkI7K0dBQTNCLDJCQUEyQixpQkFuQnZCLDhCQUE4QixFQUFFLG9DQUFvQyxhQUVqRixZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxhQUFhLGFBRUwsOEJBQThCOytHQUc3QiwyQkFBMkIsYUFGM0IsQ0FBQyxxQkFBcUIsQ0FBQyxZQWZoQyxZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsYUFBYTtZQUNiLGNBQWM7WUFDZCxhQUFhOzsyRkFLSiwyQkFBMkI7a0JBcEJ2QyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDhCQUE4QixFQUFFLG9DQUFvQyxDQUFDO29CQUNwRixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGNBQWM7d0JBQ2QsYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDekMsU0FBUyxFQUFFLENBQUMscUJBQXFCLENBQUM7aUJBQ25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBCYXNlV2lkZ2V0Q29tcG9uZW50LFxuICBCYXNlV2lkZ2V0TW9kdWxlLFxuICBQcnlDb3JlTW9kdWxlLFxuICBQcnlEYXNoYm9hcmRNb2R1bGUsXG4gIFByeUVkaXRJbnB1dE1vZHVsZSxcbiAgUHJ5STE4bk1vZHVsZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFByeUljb25Nb2R1bGUsXG4gIFByeVJhbmdlTW9kdWxlLFxuICBQcnlTZWxlY3RNb2R1bGUsXG4gIFByeVNvcnRNb2R1bGUsXG4gIFByeVRvZ2dsZU1vZHVsZVxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgUHJ5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQvY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZW5UcmFuc2xhdGlvbnMgfSBmcm9tICcuL2kxOG4vZW4udHJhbnNsYXRpb25zJztcbmltcG9ydCB7IGZyVHJhbnNsYXRpb25zIH0gZnJvbSAnLi9pMThuL2ZyLnRyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBQcnlBZ2dyZWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UvYmFzZS1hZ2dyZWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByeVdpZGdldEFnZ3JlZ2F0ZWRDaGFydENzc0NvbXBvbmVudCB9IGZyb20gJy4vc3R5bGUvY3NzLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1dpZGdldEFnZ3JlZ2F0ZWRDaGFydENvbXBvbmVudCwgUHJ5V2lkZ2V0QWdncmVnYXRlZENoYXJ0Q3NzQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBPdmVybGF5TW9kdWxlLFxuICAgIFByeUNvcmVNb2R1bGUsXG4gICAgUHJ5RGFzaGJvYXJkTW9kdWxlLFxuICAgIFByeVNlbGVjdE1vZHVsZSxcbiAgICBQcnlJY29uTW9kdWxlLFxuICAgIFByeUNoZWNrYm94TW9kdWxlLFxuICAgIFByeVRvZ2dsZU1vZHVsZSxcbiAgICBQcnlFZGl0SW5wdXRNb2R1bGUsXG4gICAgUHJ5STE4bk1vZHVsZSxcbiAgICBQcnlSYW5nZU1vZHVsZSxcbiAgICBQcnlTb3J0TW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnRdLFxuICBwcm92aWRlcnM6IFtQcnlBZ2dyZWdhdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldEFnZ3JlZ2F0ZWRDaGFydE1vZHVsZSBleHRlbmRzIEJhc2VXaWRnZXRNb2R1bGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByeVRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnByeVRyYW5zbGF0ZVNlcnZpY2UuYWRkTGFuZ09iamVjdCgnZnInLCAnd2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQnLCBmclRyYW5zbGF0aW9ucyk7XG4gICAgdGhpcy5wcnlUcmFuc2xhdGVTZXJ2aWNlLmFkZExhbmdPYmplY3QoJ2VuJywgJ3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0JywgZW5UcmFuc2xhdGlvbnMpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQgYXMgVHlwZTxCYXNlV2lkZ2V0Q29tcG9uZW50PjtcbiAgfVxufVxuIl19
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWFnZ3JlZ2F0ZWQtY2hhcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtYWdncmVnYXRlZC1jaGFydC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixhQUFhLEVBRWIsYUFBYSxFQUNiLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGVBQWUsRUFDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMvRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFzQjdFLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxnQkFBZ0I7SUFDL0QsWUFBb0IsbUJBQW1DO1FBQ3JELEtBQUssRUFBRSxDQUFDO1FBRFUsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFnQjtRQUVyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRVEsWUFBWTtRQUNuQixPQUFPLDhCQUEyRCxDQUFDO0lBQ3JFLENBQUM7OEdBVFUsMkJBQTJCOytHQUEzQiwyQkFBMkIsaUJBbkJ2Qiw4QkFBOEIsRUFBRSxvQ0FBb0MsYUFFakYsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2IsYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYSxhQUVMLDhCQUE4QjsrR0FHN0IsMkJBQTJCLGFBRjNCLENBQUMscUJBQXFCLENBQUMsWUFmaEMsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2IsYUFBYTtZQUNiLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTs7MkZBS0osMkJBQTJCO2tCQXBCdkMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxvQ0FBb0MsQ0FBQztvQkFDcEYsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsOEJBQThCLENBQUM7b0JBQ3pDLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQmFzZVdpZGdldENvbXBvbmVudCxcbiAgQmFzZVdpZGdldE1vZHVsZSxcbiAgUHJ5QWdncmVnYXRpb25TZXJ2aWNlLFxuICBQcnlDb3JlTW9kdWxlLFxuICBQcnlEYXNoYm9hcmRNb2R1bGUsXG4gIFByeUVkaXRJbnB1dE1vZHVsZSxcbiAgUHJ5STE4bk1vZHVsZSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFByeUljb25Nb2R1bGUsXG4gIFByeVJhbmdlTW9kdWxlLFxuICBQcnlTZWxlY3RNb2R1bGUsXG4gIFByeVNvcnRNb2R1bGUsXG4gIFByeVRvZ2dsZU1vZHVsZVxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgUHJ5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQvY29tcG9uZW50cy9jaGVja2JveCc7XG5pbXBvcnQgeyBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudC93aWRnZXQtYWdncmVnYXRlZC1jaGFydC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZW5UcmFuc2xhdGlvbnMgfSBmcm9tICcuL2kxOG4vZW4udHJhbnNsYXRpb25zJztcbmltcG9ydCB7IGZyVHJhbnNsYXRpb25zIH0gZnJvbSAnLi9pMThuL2ZyLnRyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBQcnlXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDc3NDb21wb25lbnQgfSBmcm9tICcuL3N0eWxlL2Nzcy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRDb21wb25lbnQsIFByeVdpZGdldEFnZ3JlZ2F0ZWRDaGFydENzc0NvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgT3ZlcmxheU1vZHVsZSxcbiAgICBQcnlDb3JlTW9kdWxlLFxuICAgIFByeURhc2hib2FyZE1vZHVsZSxcbiAgICBQcnlTZWxlY3RNb2R1bGUsXG4gICAgUHJ5SWNvbk1vZHVsZSxcbiAgICBQcnlDaGVja2JveE1vZHVsZSxcbiAgICBQcnlUb2dnbGVNb2R1bGUsXG4gICAgUHJ5RWRpdElucHV0TW9kdWxlLFxuICAgIFByeUkxOG5Nb2R1bGUsXG4gICAgUHJ5UmFuZ2VNb2R1bGUsXG4gICAgUHJ5U29ydE1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbUHJ5QWdncmVnYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRBZ2dyZWdhdGVkQ2hhcnRNb2R1bGUgZXh0ZW5kcyBCYXNlV2lkZ2V0TW9kdWxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwcnlUcmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wcnlUcmFuc2xhdGVTZXJ2aWNlLmFkZExhbmdPYmplY3QoJ2ZyJywgJ3dpZGdldC1hZ2dyZWdhdGVkLWNoYXJ0JywgZnJUcmFuc2xhdGlvbnMpO1xuICAgIHRoaXMucHJ5VHJhbnNsYXRlU2VydmljZS5hZGRMYW5nT2JqZWN0KCdlbicsICd3aWRnZXQtYWdncmVnYXRlZC1jaGFydCcsIGVuVHJhbnNsYXRpb25zKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gV2lkZ2V0QWdncmVnYXRlZENoYXJ0Q29tcG9uZW50IGFzIFR5cGU8QmFzZVdpZGdldENvbXBvbmVudD47XG4gIH1cbn1cbiJdfQ==
@@ -115,7 +115,7 @@ export class WidgetDetailComponent extends BaseWidgetComponent {
115
115
  contextMenu($event, item) {
116
116
  if (this.manifest.contextMenu !== false) {
117
117
  $event.preventDefault();
118
- this.store.dispatch(ContextMenuActions.open({ itemId: item.id, clientX: $event.clientX, clientY: $event.clientY, from: 'detail' }));
118
+ this.store.dispatch(ContextMenuActions.open({ itemId: item.id, clientX: $event.clientX, clientY: $event.clientY, from: 'detail', allowObjectCreation: false }));
119
119
  }
120
120
  }
121
121
  isRaw(property) {
@@ -128,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
128
128
  type: Component,
129
129
  args: [{ selector: 'pry-widget-detail', template: "<pry-widget-detail-css></pry-widget-detail-css>\n<div class=\"o-widget o-widget--detail\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"detailledWidgetManifest$ | async\"\n [additionalOptions]=\"additionalOptions$ | async\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n >\n </pry-widget-header>\n\n <p class=\"is-empty\" *ngIf=\"!(itemAndCategories$ | async) || (itemAndCategories$ | async)?.length === 0\">\n {{ '@pry.widget.detail.noItems' | i18n }}\n </p>\n\n <div class=\"o-widget--detail__content\" *ngFor=\"let couple of itemAndCategories$ | async; let itemIndex = index\">\n <ng-container *ngIf=\"!((options$ | async)?.header === false)\">\n <div\n class=\"o-widget--detail__header\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n title=\"{{ '@pry.widget.itemId' | i18n }}: {{ couple.item.id }}\"\n >\n <img [height]=\"25\" [width]=\"25\" [src]=\"couple.item | translateItemToSymbol | async\" [alt]=\"couple\" />\n <h3 class=\"o-widget--detail__header__title\">\n {{ '@pry.widget.class' | i18n }}:\n {{\n couple.item.oClass\n | translateId\n : {\n type: 'class',\n output: 'name'\n }\n | async\n }}\n </h3>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\"\n [attr.aria-controls]=\"'item-' + widgetId + '-' + itemIndex\"\n (click)=\"toggle(itemIndex)\"\n >\n <pry-icon *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\" iconSvg=\"fleche_haut\"></pry-icon>\n <pry-icon *ngIf=\"!(!!panelOpened[itemIndex] && panelOpened[itemIndex].item)\" iconSvg=\"fleche_bas\"></pry-icon>\n </button>\n </div>\n <div class=\"o-widget--detail__datas\" *ngIf=\"hasMetadata(couple.item)\">\n <pry-metadata [item]=\"couple.item\"></pry-metadata>\n </div>\n </ng-container>\n\n <div\n *ngIf=\"!!panelOpened[itemIndex] && panelOpened[itemIndex].item\"\n (contextmenu)=\"contextMenu($event, couple.item)\"\n class=\"o-widget--detail__datas\"\n [id]=\"'item-' + widgetId + '-' + itemIndex\"\n >\n <ng-container *ngFor=\"let category of couple.categories; let categoryIndex = index\">\n <div class=\"o-widget--detail__category\">\n <p>{{ '@pry.widget.detail.category' | i18n }}: {{ category.name }}</p>\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n [attr.aria-expanded]=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n [attr.aria-controls]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n (click)=\"toggle(itemIndex, categoryIndex)\"\n >\n <pry-icon\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n iconSvg=\"fleche_haut\"\n >\n </pry-icon>\n <pry-icon\n *ngIf=\"!(panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex])\"\n iconSvg=\"fleche_bas\"\n >\n </pry-icon>\n </button>\n </div>\n\n <div\n class=\"o-properties\"\n [id]=\"'properties-' + widgetId + '-' + itemIndex + '-' + categoryIndex\"\n *ngIf=\"panelOpened[itemIndex] && panelOpened[itemIndex].categories[categoryIndex]\"\n >\n <ul class=\"o-properties__list\">\n <ng-container>\n <ng-container *ngFor=\"let property of category.properties\">\n <li\n *ngFor=\"let value of getValue(couple.item, property.attribute); let i = index; let c = count\"\n class=\"o-properties__list__item\"\n >\n <p class=\"o-properties__list__item__label\" *ngIf=\"i === 0\">{{ property.name }}:</p>\n <p class=\"o-properties__list__item__value\" *ngIf=\"!isRaw(property)\">{{ value?.value }}</p>\n <p class=\"o-properties__list__item__raw\" *ngIf=\"isRaw(property)\">\n <pry-vizualize-raw [item]=\"couple.item\" [propertyName]=\"property.name\"></pry-vizualize-raw>\n </p>\n <ng-container *ngIf=\"hasMetadata(value)\">\n <pry-metadata [item]=\"value\"></pry-metadata>\n </ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n" }]
130
130
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }]; } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1kZXRhaWwvY29tcG9uZW50L3dpZGdldC1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZGV0YWlsL2NvbXBvbmVudC93aWRnZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxTQUFTLEVBR1QsU0FBUyxFQUdWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFNMUMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjthQWNyRCxzQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFDRSxLQUFpQixFQUNULGdCQUFnQyxFQUN4QyxFQUFjO1FBRWQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhULHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFmMUMsZ0JBQVcsR0FBK0MsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTy9GLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFZbkIsSUFBSSxDQUFD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LFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN6RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDeEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWtDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQixFQUFFLElBQVU7UUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FDL0csQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFnRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDcEcsQ0FBQzs4R0F6S1UscUJBQXFCO2tHQUFyQixxQkFBcUIsZ0ZDNUJsQyx5eEpBOEdBOzsyRkRsRmEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBCYXNlV2lkZ2V0Q29tcG9uZW50LFxuICBDYXRlZ29yeVNlbGVjdG9ycyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbnRleHRNZW51QWN0aW9ucyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEZXRhaWxXaWRnZXRPcHRpb25zLFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEZpZWxkVHlwZSxcbiAgSGVhZGVyQWN0aW9uLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBXaWRnZXRNYW5pZmVzdFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZGV0YWlsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldERldGFpbENvbXBvbmVudCBleHRlbmRzIEJhc2VXaWRnZXRDb21wb25lbnQge1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxEZXRhaWxXaWRnZXRPcHRpb25zPjtcbiAgaXRlbXNUb0Rpc3BsYXkkOiBPYnNlcnZhYmxlPEl0ZW1bXT47XG4gIHBhbmVsT3BlbmVkOiB7IGl0ZW06IGJvb2xlYW47IGNhdGVnb3JpZXM6IGJvb2xlYW5bXSB9W10gPSBbeyBpdGVtOiB0cnVlLCBjYXRlZ29yaWVzOiBbdHJ1ZV0gfV07XG4gIGl0ZW1BbmRDYXRlZ29yaWVzJDogT2JzZXJ2YWJsZTxcbiAgICB7IGl0ZW06IEl0ZW07IGNhdGVnb3JpZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBwcm9wZXJ0aWVzOiB7IG5hbWU6IHN0cmluZzsgYXR0cmlidXRlOiBBdHRyaWJ1dGUgfVtdIH1bXSB9W11cbiAgPjtcbiAgcGlubmVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgb3B0aW9uc0NvcHk/OiBEZXRhaWxXaWRnZXRPcHRpb25zO1xuICBpdGVtc0ZvclBpbj86IHN0cmluZ1tdO1xuICBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgZGV0YWlsbGVkV2lkZ2V0TWFuaWZlc3QkOiBPYnNlcnZhYmxlPFdpZGdldE1hbmlmZXN0PjtcbiAgYWRkaXRpb25hbE9wdGlvbnMkOiBPYnNlcnZhYmxlPEhlYWRlckFjdGlvbltdPjtcbiAgd2lkZ2V0SWQ6IG51bWJlcjtcbiAgc3RhdGljIHdpZGdldElkR2VuZXJhdG9yID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG4gICAgdGhpcy53aWRnZXRJZCA9IFdpZGdldERldGFpbENvbXBvbmVudC53aWRnZXRJZEdlbmVyYXRvcisrO1xuICAgIHRoaXMub3B0aW9ucyQgPSB0aGlzLm1hbmlmZXN0JC5waXBlKG1hcCgobWFuaWZlc3QpID0+IChtYW5pZmVzdC5vcHRpb25zID8/IHt9KSBhcyBEZXRhaWxXaWRnZXRPcHRpb25zKSk7XG4gICAgdGhpcy5waW5uZWQkID0gdGhpcy5vcHRpb25zJC5waXBlKG1hcCgob3B0aW9ucykgPT4gISFvcHRpb25zLml0ZW1JZHMgJiYgb3B0aW9ucy5pdGVtSWRzLmxlbmd0aCA+IDApKTtcbiAgICB0aGlzLml0ZW1zVG9EaXNwbGF5JCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbXMpLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLmFsbEl0ZW1zKSxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMub2JqZWN0RGV0YWlscylcbiAgICBdKS5waXBlKFxuICAgICAgdGFwKChbXywgYWxsSXRlbXMsIG9wdGlvbnMsIG9iamVjdERldGFpbHNdKSA9PiB7XG4gICAgICAgIC8vIGdvIHNlYXJjaCBmb3IgZGV0YWlsIGl0ZW0gaWYgbm90IGFscmVhZHkgZm91bmQgaW4gYWxsSXRlbXMgTGlzdFxuICAgICAgICBpZiAob3B0aW9ucy5pdGVtSWRzICYmIG9wdGlvbnMuaXRlbUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW1zID0gb3B0aW9ucy5pdGVtSWRzXG4gICAgICAgICAgICAubWFwKChpZCkgPT4gKCFhbGxJdGVtcy5maW5kKChpdCkgPT4gaXQuaWQgPT09IGlkKSA/IGlkIDogKG51bGwgYXMgdW5rbm93biBhcyBzdHJpbmcpKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0KSA9PiAhIWl0KVxuICAgICAgICAgICAgLmZpbHRlcigoaXQpID0+ICFPYmplY3Qua2V5cyhvYmplY3REZXRhaWxzKS5pbmNsdWRlcyhpdCkpO1xuXG4gICAgICAgICAgaWYgKG1pc3NpbmdJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuZmV0Y2hPYmplY3RzRGV0YWlscyh7IGlkczogbWlzc2luZ0l0ZW1zIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWFwKChbZ2xvYmFsU2VsZWN0aW9uSXRlbXMsIGFsbEl0ZW1zLCBvcHRpb25zLCBvYmplY3REZXRhaWxzXSkgPT5cbiAgICAgICAgb3B0aW9ucy5pdGVtSWRzICYmIG9wdGlvbnMuaXRlbUlkcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBvcHRpb25zLml0ZW1JZHMubWFwKChpZCkgPT4gYWxsSXRlbXMuZmluZCgoaXQpID0+IGl0LmlkID09PSBpZCkgPz8gb2JqZWN0RGV0YWlsc1tpZF0pXG4gICAgICAgICAgOiBnbG9iYWxTZWxlY3Rpb25JdGVtc1xuICAgICAgKSxcbiAgICAgIG1hcCgoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcigoaXQpID0+ICEhaXQpIGFzIEl0ZW1bXSlcbiAgICApO1xuXG4gICAgdGhpcy5pdGVtQW5kQ2F0ZWdvcmllcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuaXRlbXNUb0Rpc3BsYXkkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcyksXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDYXRlZ29yeVNlbGVjdG9ycy5jYXRlZ29yaWVzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgY2xhc3NlcywgY2F0ZWdvcmllc10pID0+XG4gICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iamVjdENsYXNzID0gY2xhc3Nlcy5maW5kKChvQ2xhc3MpID0+IG9DbGFzcy5pZCA9PT0gaXRlbS5vQ2xhc3MpID8/IHsgYXR0cmlidXRlczogW10gfTtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzV2l0aFByb3BzID0gW10gYXMge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHsgbmFtZTogc3RyaW5nOyBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB9W107XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgICAgfVtdO1xuICAgICAgICAgIG9iamVjdENsYXNzLmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnlJZCA9IGF0dHIuY2F0ZWdvcnkgPz8gY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5uYW1lID09PSAnZGVmYXVsdCcpPy5pZCA/PyAnZGVmYXVsdC1pZCc7XG4gICAgICAgICAgICBpZiAoIWNhdGVnb3JpZXNXaXRoUHJvcHMuZmluZCgoY2F0KSA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpKSB7XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXNXaXRoUHJvcHMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5SWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcmllcy5maW5kKChjYXQpID0+IGNhdC5pZCA9PT0gY2F0ZWdvcnlJZCk/Lm5hbWUgPz8gJ2RlZmF1bHQnXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0ZWdvcmllc1dpdGhQcm9wc1xuICAgICAgICAgICAgICAuZmluZCgoY2F0KSA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpXG4gICAgICAgICAgICAgID8ucHJvcGVydGllcy5wdXNoKHsgbmFtZTogYXR0ci5uYW1lLCBhdHRyaWJ1dGU6IGF0dHIgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzV2l0aFByb3BzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQuc3Vic2NyaWJlKChvcHRpb25zKSA9PiAodGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpKSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuaXRlbXNUb0Rpc3BsYXkkLnN1YnNjcmliZSgoaXRlbXMpID0+ICh0aGlzLml0ZW1zRm9yUGluID0gaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmlkKSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKS5zdWJzY3JpYmUoKGZpZWxkcykgPT4gKHRoaXMuZmllbGRzID0gZmllbGRzKSkpO1xuXG4gICAgdGhpcy5kZXRhaWxsZWRXaWRnZXRNYW5pZmVzdCQgPSB0aGlzLml0ZW1zVG9EaXNwbGF5JC5waXBlKFxuICAgICAgbWFwKFxuICAgICAgICAoaXRlbXMpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIC4uLnRoaXMubWFuaWZlc3QsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0LmRldGFpbC50aXRsZScsIHsgaXRlbXNOYjogaXRlbXMubGVuZ3RoIH0pXG4gICAgICAgICAgfSkgYXMgV2lkZ2V0TWFuaWZlc3RcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5hZGRpdGlvbmFsT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnBpbm5lZCQsIHRoaXMuaXRlbXNUb0Rpc3BsYXkkXSkucGlwZShcbiAgICAgIG1hcCgoW2lzUGlubmVkLCBpdGVtc10pID0+IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiBpc1Bpbm5lZCA/ICdAcHJ5LndpZGdldC5kZXRhaWwudW5waW4nIDogJ0Bwcnkud2lkZ2V0LmRldGFpbC5waW4nLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQaW4oKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGljb246IGlzUGlubmVkID8gJ3VucHVibGlzaGVkJyA6ICdwdWJsaXNoZWRfd2l0aF9jaGFuZ2VzJyxcbiAgICAgICAgICBkaXNhYmxlZDogKCkgPT4gaXRlbXMubGVuZ3RoID09PSAwXG4gICAgICAgIH1cbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuXG4gIHRvZ2dsZShpdGVtSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlJbmRleD86IG51bWJlcikge1xuICAgIGlmICghdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdKSB7XG4gICAgICB0aGlzLnBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gPSB7IGl0ZW06IGZhbHNlLCBjYXRlZ29yaWVzOiBbXSB9O1xuICAgIH1cbiAgICBpZiAoY2F0ZWdvcnlJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbSA9ICF0aGlzLnBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdLmNhdGVnb3JpZXNbY2F0ZWdvcnlJbmRleF0gPSAhdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdLmNhdGVnb3JpZXNbY2F0ZWdvcnlJbmRleF07XG4gICAgfVxuICB9XG5cbiAgZ2V0VmFsdWUoaXRlbTogSXRlbSwgcHJvcGVydHk6IEF0dHJpYnV0ZSk6IEF0dHJpYnV0ZVNpbXBsZVZhbHVlW10ge1xuICAgIGNvbnN0IHZhbHVlID0gSXRlbVV0aWxzLmdldEF0dHJpYnV0ZVZhbHVlKGl0ZW0sIHByb3BlcnR5KTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gIH1cblxuICB0b2dnbGVQaW4oKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5KSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5ID0ge307XG4gICAgfVxuICAgIGlmICghIXRoaXMub3B0aW9uc0NvcHkuaXRlbUlkcyAmJiB0aGlzLm9wdGlvbnNDb3B5Lml0ZW1JZHMubGVuZ3RoID4gMCkge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuaXRlbUlkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5pdGVtSWRzID0gdGhpcy5pdGVtc0ZvclBpbjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgRGFzaGJvYXJkQWN0aW9ucy51cGRhdGVXaWRnZXRNYW5pZmVzdCh7XG4gICAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfSxcbiAgICAgICAgaW5kZXg6IHRoaXMud2lkZ2V0SW5kZXhcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGhhc01ldGFkYXRhKHZhbHVlOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSB8IEl0ZW0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWU/Lm1ldGFkYXRhID8/IHt9KS5sZW5ndGggPiAwO1xuICB9XG5cbiAgY29udGV4dE1lbnUoJGV2ZW50OiBNb3VzZUV2ZW50LCBpdGVtOiBJdGVtKSB7XG4gICAgaWYgKHRoaXMubWFuaWZlc3QuY29udGV4dE1lbnUgIT09IGZhbHNlKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHsgaXRlbUlkOiBpdGVtLmlkLCBjbGllbnRYOiAkZXZlbnQuY2xpZW50WCwgY2xpZW50WTogJGV2ZW50LmNsaWVudFksIGZyb206ICdkZXRhaWwnIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlzUmF3KHByb3BlcnR5OiB7IG5hbWU6IHN0cmluZzsgYXR0cmlidXRlOiBBdHRyaWJ1dGUgfSkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IHByb3BlcnR5LmF0dHJpYnV0ZS5maWVsZCk/LnR5cGUgPT09IEZpZWxkVHlwZS5SQVc7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWRldGFpbC1jc3M+PC9wcnktd2lkZ2V0LWRldGFpbC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWRldGFpbFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cImRldGFpbGxlZFdpZGdldE1hbmlmZXN0JCB8IGFzeW5jXCJcbiAgICBbYWRkaXRpb25hbE9wdGlvbnNdPVwiYWRkaXRpb25hbE9wdGlvbnMkIHwgYXN5bmNcIlxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgW2Rpc3BsYXlDb3VudF09XCJmYWxzZVwiXG4gID5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cblxuICA8cCBjbGFzcz1cImlzLWVtcHR5XCIgKm5nSWY9XCIhKGl0ZW1BbmRDYXRlZ29yaWVzJCB8IGFzeW5jKSB8fCAoaXRlbUFuZENhdGVnb3JpZXMkIHwgYXN5bmMpPy5sZW5ndGggPT09IDBcIj5cbiAgICB7eyAnQHByeS53aWRnZXQuZGV0YWlsLm5vSXRlbXMnIHwgaTE4biB9fVxuICA8L3A+XG5cbiAgPGRpdiBjbGFzcz1cIm8td2lkZ2V0LS1kZXRhaWxfX2NvbnRlbnRcIiAqbmdGb3I9XCJsZXQgY291cGxlIG9mIGl0ZW1BbmRDYXRlZ29yaWVzJCB8IGFzeW5jOyBsZXQgaXRlbUluZGV4ID0gaW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISgob3B0aW9ucyQgfCBhc3luYyk/LmhlYWRlciA9PT0gZmFsc2UpXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiby13aWRnZXQtLWRldGFpbF9faGVhZGVyXCJcbiAgICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudCwgY291cGxlLml0ZW0pXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQHByeS53aWRnZXQuaXRlbUlkJyB8IGkxOG4gfX06IHt7IGNvdXBsZS5pdGVtLmlkIH19XCJcbiAgICAgID5cbiAgICAgICAgPGltZyBbaGVpZ2h0XT1cIjI1XCIgW3dpZHRoXT1cIjI1XCIgW3NyY109XCJjb3VwbGUuaXRlbSB8IHRyYW5zbGF0ZUl0ZW1Ub1N5bWJvbCB8IGFzeW5jXCIgW2FsdF09XCJjb3VwbGVcIiAvPlxuICAgICAgICA8aDMgY2xhc3M9XCJvLXdpZGdldC0tZGV0YWlsX19oZWFkZXJfX3RpdGxlXCI+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0LmNsYXNzJyB8IGkxOG4gfX06XG4gICAgICAgICAge3tcbiAgICAgICAgICAgIGNvdXBsZS5pdGVtLm9DbGFzc1xuICAgICAgICAgICAgICB8IHRyYW5zbGF0ZUlkXG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjbGFzcycsXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDogJ25hbWUnXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHwgYXN5bmNcbiAgICAgICAgICB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEoISFwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ2l0ZW0tJyArIHdpZGdldElkICsgJy0nICsgaXRlbUluZGV4XCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGl0ZW1JbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiISFwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbVwiIGljb25Tdmc9XCJmbGVjaGVfaGF1dFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHByeS1pY29uICpuZ0lmPVwiISghIXBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5pdGVtKVwiIGljb25Tdmc9XCJmbGVjaGVfYmFzXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tZGV0YWlsX19kYXRhc1wiICpuZ0lmPVwiaGFzTWV0YWRhdGEoY291cGxlLml0ZW0pXCI+XG4gICAgICAgIDxwcnktbWV0YWRhdGEgW2l0ZW1dPVwiY291cGxlLml0ZW1cIj48L3ByeS1tZXRhZGF0YT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCIhIXBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5pdGVtXCJcbiAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGNvdXBsZS5pdGVtKVwiXG4gICAgICBjbGFzcz1cIm8td2lkZ2V0LS1kZXRhaWxfX2RhdGFzXCJcbiAgICAgIFtpZF09XCInaXRlbS0nICsgd2lkZ2V0SWQgKyAnLScgKyBpdGVtSW5kZXhcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGNvdXBsZS5jYXRlZ29yaWVzOyBsZXQgY2F0ZWdvcnlJbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tZGV0YWlsX19jYXRlZ29yeVwiPlxuICAgICAgICAgIDxwPnt7ICdAcHJ5LndpZGdldC5kZXRhaWwuY2F0ZWdvcnknIHwgaTE4biB9fToge3sgY2F0ZWdvcnkubmFtZSB9fTwvcD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiEocGFuZWxPcGVuZWRbaXRlbUluZGV4XSAmJiBwYW5lbE9wZW5lZFtpdGVtSW5kZXhdLmNhdGVnb3JpZXNbY2F0ZWdvcnlJbmRleF0pXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ3Byb3BlcnRpZXMtJyArIHdpZGdldElkICsgJy0nICsgaXRlbUluZGV4ICsgJy0nICsgY2F0ZWdvcnlJbmRleFwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGl0ZW1JbmRleCwgY2F0ZWdvcnlJbmRleClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdXCJcbiAgICAgICAgICAgICAgaWNvblN2Zz1cImZsZWNoZV9oYXV0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcHJ5LWljb24+XG4gICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhKHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdKVwiXG4gICAgICAgICAgICAgIGljb25Tdmc9XCJmbGVjaGVfYmFzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcHJ5LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm8tcHJvcGVydGllc1wiXG4gICAgICAgICAgW2lkXT1cIidwcm9wZXJ0aWVzLScgKyB3aWRnZXRJZCArICctJyArIGl0ZW1JbmRleCArICctJyArIGNhdGVnb3J5SW5kZXhcIlxuICAgICAgICAgICpuZ0lmPVwicGFuZWxPcGVuZWRbaXRlbUluZGV4XSAmJiBwYW5lbE9wZW5lZFtpdGVtSW5kZXhdLmNhdGVnb3JpZXNbY2F0ZWdvcnlJbmRleF1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBjYXRlZ29yeS5wcm9wZXJ0aWVzXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0VmFsdWUoY291cGxlLml0ZW0sIHByb3BlcnR5LmF0dHJpYnV0ZSk7IGxldCBpID0gaW5kZXg7IGxldCBjID0gY291bnRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvLXByb3BlcnRpZXNfX2xpc3RfX2l0ZW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtX19sYWJlbFwiICpuZ0lmPVwiaSA9PT0gMFwiPnt7IHByb3BlcnR5Lm5hbWUgfX06PC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvLXByb3BlcnRpZXNfX2xpc3RfX2l0ZW1fX3ZhbHVlXCIgKm5nSWY9XCIhaXNSYXcocHJvcGVydHkpXCI+e3sgdmFsdWU/LnZhbHVlIH19PC9wPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJvLXByb3BlcnRpZXNfX2xpc3RfX2l0ZW1fX3Jhd1wiICpuZ0lmPVwiaXNSYXcocHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktdml6dWFsaXplLXJhdyBbaXRlbV09XCJjb3VwbGUuaXRlbVwiIFtwcm9wZXJ0eU5hbWVdPVwicHJvcGVydHkubmFtZVwiPjwvcHJ5LXZpenVhbGl6ZS1yYXc+XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTWV0YWRhdGEodmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwcnktbWV0YWRhdGEgW2l0ZW1dPVwidmFsdWVcIj48L3ByeS1tZXRhZGF0YT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1kZXRhaWwvY29tcG9uZW50L3dpZGdldC1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZGV0YWlsL2NvbXBvbmVudC93aWRnZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxTQUFTLEVBR1QsU0FBUyxFQUdWLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFNMUMsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjthQWNyRCxzQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFDRSxLQUFpQixFQUNULGdCQUFnQyxFQUN4QyxFQUFjO1FBRWQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhULHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0I7UUFmMUMsZ0JBQVcsR0FBK0MsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTy9GLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFZbkIsSUFBSSxDQUFD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LFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN6RCxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDeEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWtDO1FBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQixFQUFFLElBQVU7UUFDeEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNqQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQzFJLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsUUFBZ0Q7UUFDcEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQ3BHLENBQUM7OEdBektVLHFCQUFxQjtrR0FBckIscUJBQXFCLGdGQzVCbEMseXhKQThHQTs7MkZEbEZhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSxcbiAgQmFzZVdpZGdldENvbXBvbmVudCxcbiAgQ2F0ZWdvcnlTZWxlY3RvcnMsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb250ZXh0TWVudUFjdGlvbnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGV0YWlsV2lkZ2V0T3B0aW9ucyxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEhlYWRlckFjdGlvbixcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBQcnlJMThuU2VydmljZSxcbiAgV2lkZ2V0TWFuaWZlc3Rcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXREZXRhaWxDb21wb25lbnQgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29tcG9uZW50IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8RGV0YWlsV2lkZ2V0T3B0aW9ucz47XG4gIGl0ZW1zVG9EaXNwbGF5JDogT2JzZXJ2YWJsZTxJdGVtW10+O1xuICBwYW5lbE9wZW5lZDogeyBpdGVtOiBib29sZWFuOyBjYXRlZ29yaWVzOiBib29sZWFuW10gfVtdID0gW3sgaXRlbTogdHJ1ZSwgY2F0ZWdvcmllczogW3RydWVdIH1dO1xuICBpdGVtQW5kQ2F0ZWdvcmllcyQ6IE9ic2VydmFibGU8XG4gICAgeyBpdGVtOiBJdGVtOyBjYXRlZ29yaWVzOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgcHJvcGVydGllczogeyBuYW1lOiBzdHJpbmc7IGF0dHJpYnV0ZTogQXR0cmlidXRlIH1bXSB9W10gfVtdXG4gID47XG4gIHBpbm5lZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIG9wdGlvbnNDb3B5PzogRGV0YWlsV2lkZ2V0T3B0aW9ucztcbiAgaXRlbXNGb3JQaW4/OiBzdHJpbmdbXTtcbiAgZmllbGRzOiBGaWVsZFtdID0gW107XG4gIGRldGFpbGxlZFdpZGdldE1hbmlmZXN0JDogT2JzZXJ2YWJsZTxXaWRnZXRNYW5pZmVzdD47XG4gIGFkZGl0aW9uYWxPcHRpb25zJDogT2JzZXJ2YWJsZTxIZWFkZXJBY3Rpb25bXT47XG4gIHdpZGdldElkOiBudW1iZXI7XG4gIHN0YXRpYyB3aWRnZXRJZEdlbmVyYXRvciA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZlxuICApIHtcbiAgICBzdXBlcihzdG9yZSwgZWwpO1xuICAgIHRoaXMud2lkZ2V0SWQgPSBXaWRnZXREZXRhaWxDb21wb25lbnQud2lkZ2V0SWRHZW5lcmF0b3IrKztcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiAobWFuaWZlc3Qub3B0aW9ucyA/PyB7fSkgYXMgRGV0YWlsV2lkZ2V0T3B0aW9ucykpO1xuICAgIHRoaXMucGlubmVkJCA9IHRoaXMub3B0aW9ucyQucGlwZShtYXAoKG9wdGlvbnMpID0+ICEhb3B0aW9ucy5pdGVtSWRzICYmIG9wdGlvbnMuaXRlbUlkcy5sZW5ndGggPiAwKSk7XG4gICAgdGhpcy5pdGVtc1RvRGlzcGxheSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1zKSxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5hbGxJdGVtcyksXG4gICAgICB0aGlzLm9wdGlvbnMkLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLm9iamVjdERldGFpbHMpXG4gICAgXSkucGlwZShcbiAgICAgIHRhcCgoW18sIGFsbEl0ZW1zLCBvcHRpb25zLCBvYmplY3REZXRhaWxzXSkgPT4ge1xuICAgICAgICAvLyBnbyBzZWFyY2ggZm9yIGRldGFpbCBpdGVtIGlmIG5vdCBhbHJlYWR5IGZvdW5kIGluIGFsbEl0ZW1zIExpc3RcbiAgICAgICAgaWYgKG9wdGlvbnMuaXRlbUlkcyAmJiBvcHRpb25zLml0ZW1JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG1pc3NpbmdJdGVtcyA9IG9wdGlvbnMuaXRlbUlkc1xuICAgICAgICAgICAgLm1hcCgoaWQpID0+ICghYWxsSXRlbXMuZmluZCgoaXQpID0+IGl0LmlkID09PSBpZCkgPyBpZCA6IChudWxsIGFzIHVua25vd24gYXMgc3RyaW5nKSkpXG4gICAgICAgICAgICAuZmlsdGVyKChpdCkgPT4gISFpdClcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0KSA9PiAhT2JqZWN0LmtleXMob2JqZWN0RGV0YWlscykuaW5jbHVkZXMoaXQpKTtcblxuICAgICAgICAgIGlmIChtaXNzaW5nSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLmZldGNoT2JqZWN0c0RldGFpbHMoeyBpZHM6IG1pc3NpbmdJdGVtcyB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG1hcCgoW2dsb2JhbFNlbGVjdGlvbkl0ZW1zLCBhbGxJdGVtcywgb3B0aW9ucywgb2JqZWN0RGV0YWlsc10pID0+XG4gICAgICAgIG9wdGlvbnMuaXRlbUlkcyAmJiBvcHRpb25zLml0ZW1JZHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gb3B0aW9ucy5pdGVtSWRzLm1hcCgoaWQpID0+IGFsbEl0ZW1zLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gaWQpID8/IG9iamVjdERldGFpbHNbaWRdKVxuICAgICAgICAgIDogZ2xvYmFsU2VsZWN0aW9uSXRlbXNcbiAgICAgICksXG4gICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGl0KSA9PiAhIWl0KSBhcyBJdGVtW10pXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbUFuZENhdGVnb3JpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLml0ZW1zVG9EaXNwbGF5JCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpLFxuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoQ2F0ZWdvcnlTZWxlY3RvcnMuY2F0ZWdvcmllcylcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbaXRlbXMsIGNsYXNzZXMsIGNhdGVnb3JpZXNdKSA9PlxuICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBvYmplY3RDbGFzcyA9IGNsYXNzZXMuZmluZCgob0NsYXNzKSA9PiBvQ2xhc3MuaWQgPT09IGl0ZW0ub0NsYXNzKSA/PyB7IGF0dHJpYnV0ZXM6IFtdIH07XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcmllc1dpdGhQcm9wcyA9IFtdIGFzIHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7IG5hbWU6IHN0cmluZzsgYXR0cmlidXRlOiBBdHRyaWJ1dGUgfVtdO1xuICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgICBvYmplY3RDbGFzcy5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWQgPSBhdHRyLmNhdGVnb3J5ID8/IGNhdGVnb3JpZXMuZmluZCgoY2F0KSA9PiBjYXQubmFtZSA9PT0gJ2RlZmF1bHQnKT8uaWQgPz8gJ2RlZmF1bHQtaWQnO1xuICAgICAgICAgICAgaWYgKCFjYXRlZ29yaWVzV2l0aFByb3BzLmZpbmQoKGNhdCkgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKSkge1xuICAgICAgICAgICAgICBjYXRlZ29yaWVzV2l0aFByb3BzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBjYXRlZ29yeUlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3JpZXMuZmluZCgoY2F0KSA9PiBjYXQuaWQgPT09IGNhdGVnb3J5SWQpPy5uYW1lID8/ICdkZWZhdWx0J1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGVnb3JpZXNXaXRoUHJvcHNcbiAgICAgICAgICAgICAgLmZpbmQoKGNhdCkgPT4gY2F0LmlkID09PSBjYXRlZ29yeUlkKVxuICAgICAgICAgICAgICA/LnByb3BlcnRpZXMucHVzaCh7IG5hbWU6IGF0dHIubmFtZSwgYXR0cmlidXRlOiBhdHRyIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllc1dpdGhQcm9wc1xuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnN1YnNjcmliZSgob3B0aW9ucykgPT4gKHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLml0ZW1zVG9EaXNwbGF5JC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiAodGhpcy5pdGVtc0ZvclBpbiA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcykuc3Vic2NyaWJlKChmaWVsZHMpID0+ICh0aGlzLmZpZWxkcyA9IGZpZWxkcykpKTtcblxuICAgIHRoaXMuZGV0YWlsbGVkV2lkZ2V0TWFuaWZlc3QkID0gdGhpcy5pdGVtc1RvRGlzcGxheSQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGl0ZW1zKSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5kZXRhaWwudGl0bGUnLCB7IGl0ZW1zTmI6IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgICAgIH0pIGFzIFdpZGdldE1hbmlmZXN0XG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkaXRpb25hbE9wdGlvbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5waW5uZWQkLCB0aGlzLml0ZW1zVG9EaXNwbGF5JF0pLnBpcGUoXG4gICAgICBtYXAoKFtpc1Bpbm5lZCwgaXRlbXNdKSA9PiBbXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogaXNQaW5uZWQgPyAnQHByeS53aWRnZXQuZGV0YWlsLnVucGluJyA6ICdAcHJ5LndpZGdldC5kZXRhaWwucGluJyxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUGluKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpY29uOiBpc1Bpbm5lZCA/ICd1bnB1Ymxpc2hlZCcgOiAncHVibGlzaGVkX3dpdGhfY2hhbmdlcycsXG4gICAgICAgICAgZGlzYWJsZWQ6ICgpID0+IGl0ZW1zLmxlbmd0aCA9PT0gMFxuICAgICAgICB9XG4gICAgICBdKVxuICAgICk7XG4gIH1cblxuICB0b2dnbGUoaXRlbUluZGV4OiBudW1iZXIsIGNhdGVnb3J5SW5kZXg/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMucGFuZWxPcGVuZWRbaXRlbUluZGV4XSkge1xuICAgICAgdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdID0geyBpdGVtOiBmYWxzZSwgY2F0ZWdvcmllczogW10gfTtcbiAgICB9XG4gICAgaWYgKGNhdGVnb3J5SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdLml0ZW0gPSAhdGhpcy5wYW5lbE9wZW5lZFtpdGVtSW5kZXhdLml0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdID0gIXRoaXMucGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlKGl0ZW06IEl0ZW0sIHByb3BlcnR5OiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZSA9IEl0ZW1VdGlscy5nZXRBdHRyaWJ1dGVWYWx1ZShpdGVtLCBwcm9wZXJ0eSk7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICB9XG5cbiAgdG9nZ2xlUGluKCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zQ29weSkge1xuICAgICAgdGhpcy5vcHRpb25zQ29weSA9IHt9O1xuICAgIH1cbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5Lml0ZW1JZHMgJiYgdGhpcy5vcHRpb25zQ29weS5pdGVtSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnNDb3B5Lml0ZW1JZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uc0NvcHkuaXRlbUlkcyA9IHRoaXMuaXRlbXNGb3JQaW47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgIERhc2hib2FyZEFjdGlvbnMudXBkYXRlV2lkZ2V0TWFuaWZlc3Qoe1xuICAgICAgICBtYW5pZmVzdDogeyAuLi50aGlzLm1hbmlmZXN0LCBvcHRpb25zOiB0aGlzLm9wdGlvbnNDb3B5IH0sXG4gICAgICAgIGluZGV4OiB0aGlzLndpZGdldEluZGV4XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBoYXNNZXRhZGF0YSh2YWx1ZTogQXR0cmlidXRlU2ltcGxlVmFsdWUgfCBJdGVtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlPy5tZXRhZGF0YSA/PyB7fSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCwgaXRlbTogSXRlbSkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBDb250ZXh0TWVudUFjdGlvbnMub3Blbih7IGl0ZW1JZDogaXRlbS5pZCwgY2xpZW50WDogJGV2ZW50LmNsaWVudFgsIGNsaWVudFk6ICRldmVudC5jbGllbnRZLCBmcm9tOiAnZGV0YWlsJyxhbGxvd09iamVjdENyZWF0aW9uOiBmYWxzZSB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpc1Jhdyhwcm9wZXJ0eTogeyBuYW1lOiBzdHJpbmc7IGF0dHJpYnV0ZTogQXR0cmlidXRlIH0pIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBwcm9wZXJ0eS5hdHRyaWJ1dGUuZmllbGQpPy50eXBlID09PSBGaWVsZFR5cGUuUkFXO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1kZXRhaWwtY3NzPjwvcHJ5LXdpZGdldC1kZXRhaWwtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1kZXRhaWxcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJkZXRhaWxsZWRXaWRnZXRNYW5pZmVzdCQgfCBhc3luY1wiXG4gICAgW2FkZGl0aW9uYWxPcHRpb25zXT1cImFkZGl0aW9uYWxPcHRpb25zJCB8IGFzeW5jXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgIFtkaXNwbGF5Q291bnRdPVwiZmFsc2VcIlxuICA+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG5cbiAgPHAgY2xhc3M9XCJpcy1lbXB0eVwiICpuZ0lmPVwiIShpdGVtQW5kQ2F0ZWdvcmllcyQgfCBhc3luYykgfHwgKGl0ZW1BbmRDYXRlZ29yaWVzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwXCI+XG4gICAge3sgJ0Bwcnkud2lkZ2V0LmRldGFpbC5ub0l0ZW1zJyB8IGkxOG4gfX1cbiAgPC9wPlxuXG4gIDxkaXYgY2xhc3M9XCJvLXdpZGdldC0tZGV0YWlsX19jb250ZW50XCIgKm5nRm9yPVwibGV0IGNvdXBsZSBvZiBpdGVtQW5kQ2F0ZWdvcmllcyQgfCBhc3luYzsgbGV0IGl0ZW1JbmRleCA9IGluZGV4XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoKG9wdGlvbnMkIHwgYXN5bmMpPy5oZWFkZXIgPT09IGZhbHNlKVwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm8td2lkZ2V0LS1kZXRhaWxfX2hlYWRlclwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQsIGNvdXBsZS5pdGVtKVwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0Bwcnkud2lkZ2V0Lml0ZW1JZCcgfCBpMThuIH19OiB7eyBjb3VwbGUuaXRlbS5pZCB9fVwiXG4gICAgICA+XG4gICAgICAgIDxpbWcgW2hlaWdodF09XCIyNVwiIFt3aWR0aF09XCIyNVwiIFtzcmNdPVwiY291cGxlLml0ZW0gfCB0cmFuc2xhdGVJdGVtVG9TeW1ib2wgfCBhc3luY1wiIFthbHRdPVwiY291cGxlXCIgLz5cbiAgICAgICAgPGgzIGNsYXNzPVwiby13aWRnZXQtLWRldGFpbF9faGVhZGVyX190aXRsZVwiPlxuICAgICAgICAgIHt7ICdAcHJ5LndpZGdldC5jbGFzcycgfCBpMThuIH19OlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICBjb3VwbGUuaXRlbS5vQ2xhc3NcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVJZFxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2xhc3MnLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhKCEhcGFuZWxPcGVuZWRbaXRlbUluZGV4XSAmJiBwYW5lbE9wZW5lZFtpdGVtSW5kZXhdLml0ZW0pXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidpdGVtLScgKyB3aWRnZXRJZCArICctJyArIGl0ZW1JbmRleFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZShpdGVtSW5kZXgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiAqbmdJZj1cIiEhcGFuZWxPcGVuZWRbaXRlbUluZGV4XSAmJiBwYW5lbE9wZW5lZFtpdGVtSW5kZXhdLml0ZW1cIiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDxwcnktaWNvbiAqbmdJZj1cIiEoISFwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbSlcIiBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWRldGFpbF9fZGF0YXNcIiAqbmdJZj1cImhhc01ldGFkYXRhKGNvdXBsZS5pdGVtKVwiPlxuICAgICAgICA8cHJ5LW1ldGFkYXRhIFtpdGVtXT1cImNvdXBsZS5pdGVtXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiISFwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uaXRlbVwiXG4gICAgICAoY29udGV4dG1lbnUpPVwiY29udGV4dE1lbnUoJGV2ZW50LCBjb3VwbGUuaXRlbSlcIlxuICAgICAgY2xhc3M9XCJvLXdpZGdldC0tZGV0YWlsX19kYXRhc1wiXG4gICAgICBbaWRdPVwiJ2l0ZW0tJyArIHdpZGdldElkICsgJy0nICsgaXRlbUluZGV4XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBjb3VwbGUuY2F0ZWdvcmllczsgbGV0IGNhdGVnb3J5SW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby13aWRnZXQtLWRldGFpbF9fY2F0ZWdvcnlcIj5cbiAgICAgICAgICA8cD57eyAnQHByeS53aWRnZXQuZGV0YWlsLmNhdGVnb3J5JyB8IGkxOG4gfX06IHt7IGNhdGVnb3J5Lm5hbWUgfX08L3A+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhKHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidwcm9wZXJ0aWVzLScgKyB3aWRnZXRJZCArICctJyArIGl0ZW1JbmRleCArICctJyArIGNhdGVnb3J5SW5kZXhcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZShpdGVtSW5kZXgsIGNhdGVnb3J5SW5kZXgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uY2F0ZWdvcmllc1tjYXRlZ29yeUluZGV4XVwiXG4gICAgICAgICAgICAgIGljb25Tdmc9XCJmbGVjaGVfaGF1dFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3ByeS1pY29uPlxuICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIShwYW5lbE9wZW5lZFtpdGVtSW5kZXhdICYmIHBhbmVsT3BlbmVkW2l0ZW1JbmRleF0uY2F0ZWdvcmllc1tjYXRlZ29yeUluZGV4XSlcIlxuICAgICAgICAgICAgICBpY29uU3ZnPVwiZmxlY2hlX2Jhc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3ByeS1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJvLXByb3BlcnRpZXNcIlxuICAgICAgICAgIFtpZF09XCIncHJvcGVydGllcy0nICsgd2lkZ2V0SWQgKyAnLScgKyBpdGVtSW5kZXggKyAnLScgKyBjYXRlZ29yeUluZGV4XCJcbiAgICAgICAgICAqbmdJZj1cInBhbmVsT3BlbmVkW2l0ZW1JbmRleF0gJiYgcGFuZWxPcGVuZWRbaXRlbUluZGV4XS5jYXRlZ29yaWVzW2NhdGVnb3J5SW5kZXhdXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx1bCBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgY2F0ZWdvcnkucHJvcGVydGllc1wiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdldFZhbHVlKGNvdXBsZS5pdGVtLCBwcm9wZXJ0eS5hdHRyaWJ1dGUpOyBsZXQgaSA9IGluZGV4OyBsZXQgYyA9IGNvdW50XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm8tcHJvcGVydGllc19fbGlzdF9faXRlbV9fbGFiZWxcIiAqbmdJZj1cImkgPT09IDBcIj57eyBwcm9wZXJ0eS5uYW1lIH19OjwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtX192YWx1ZVwiICpuZ0lmPVwiIWlzUmF3KHByb3BlcnR5KVwiPnt7IHZhbHVlPy52YWx1ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiby1wcm9wZXJ0aWVzX19saXN0X19pdGVtX19yYXdcIiAqbmdJZj1cImlzUmF3KHByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LXZpenVhbGl6ZS1yYXcgW2l0ZW1dPVwiY291cGxlLml0ZW1cIiBbcHJvcGVydHlOYW1lXT1cInByb3BlcnR5Lm5hbWVcIj48L3ByeS12aXp1YWxpemUtcmF3PlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc01ldGFkYXRhKHZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LW1ldGFkYXRhIFtpdGVtXT1cInZhbHVlXCI+PC9wcnktbWV0YWRhdGE+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -403,7 +403,8 @@ export class WidgetGraphComponent extends DataWidgetComponent {
403
403
  clientX: $event.clientX,
404
404
  clientY: $event.clientY,
405
405
  resultSet: Array.isArray(this.manifest.datasource) ? this.manifest.datasource[0] : this.manifest.datasource,
406
- from: 'graph'
406
+ from: 'graph',
407
+ allowObjectCreation: false
407
408
  }));
408
409
  }
409
410
  }
@@ -445,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
445
446
  type: ViewChild,
446
447
  args: ['tooltip', { read: ViewContainerRef }]
447
448
  }] } });
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxx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QUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCdcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uTW91c2VVcCgkZXZlbnQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRpbmcgTm9kZXNcbiAgICovXG5cbiAgZmluZE5vZGVzKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgTWF0aC5wb3coKGl0ZW0ueCA/PyAwKSAtICRldmVudC5vZmZzZXRYICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIDIpICtcbiAgICAgICAgICBNYXRoLnBvdygoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gLSAkZXZlbnQub2Zmc2V0WSwgMikgPFxuICAgICAgICBNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9kZVJhZGl1cyAvIDIgKyA4LCAyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2Rlc0luU2hhcGVkKHNoYXBlOiB7IHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07IGVuZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0pOiBQcnlOb2RlW10ge1xuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihzaGFwZS5zdGFydC54LCBzaGFwZS5lbmQueCk7XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4oc2hhcGUuc3RhcnQueSwgc2hhcGUuZW5kLnkpO1xuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtc0FzTm9kZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIChpdGVtLnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSA+IG1pblggJiZcbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdIDwgbWF4WCAmJlxuICAgICAgICAoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gPiBtaW5ZICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA8IG1heFlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWZvcmNlLWdyYXBoLWNzcz48L3ByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1ncmFwaFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImdyYXBoX2xheW91dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5sYXlvdXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5b3V0KCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJsYXlvdXRzXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubGF5b3V0XCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJrZXlcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImtleVwiXG4gICAgICAgICAgaWQ9XCJncmFwaF9sYXlvdXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubm9kZVJhZGl1c1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmdyYXBoLm5vZGVSYWRpdXNcIlxuICAgICAgICAgIG1pbj1cIjEwXCJcbiAgICAgICAgICBtYXg9XCIyMDBcIlxuICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGFsbEl0ZW1zV2l0aEltYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50YWJsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5lbXB0eScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1zZWxlY3Rpb24tY2hvaWNlXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJib3R0b21MZWZ0JCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ21vdmUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdtb3ZlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcE1vdmVcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcE1vdmVfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vdmVcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgncmVjdGFuZ2xlJylcIlxuICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJtb2RlID09PSAncmVjdGFuZ2xlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcFJlY3RcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlY3RhbmdsZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzXG4gICAgI2NhbnZhc1xuICAgIGNsYXNzPVwiby13aWRnZXQtLWdyYXBoX19jYW52YXNcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgPjwvY2FudmFzPlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tcmVjdGFuZ2xlXCIgI3NlbGVjdGlvblJlY3RhbmdsZT48L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cCBub2V2ZW50XCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCIodG9vbHRpcCQgfCBhc3luYyk/LmRpc3BsYXkgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy54ID8/IDApICsgNTBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiKCh0b29sdGlwJCB8IGFzeW5jKT8ueSA/PyAwKSArIDUwXCJcbiAgPlxuICAgIDxkaXYgI3Rvb2x0aXA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBNb3ZlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIiBpZD1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFJlY3Q+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBSZWN0X3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxxQkFBNEMsRUFDNUMsZ0JBQWdDLEVBQ2hDLGFBQTRCLEVBQzVCLFNBQXVCLEVBQy9CLEVBQWMsRUFDTixTQUFtQjtRQUUzQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBUFQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFdkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQTlCN0IsWUFBTyxHQUFvQyxJQUFJLENBQUM7UUFHaEQsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBRWpDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUM3QixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osSUFBSSxFQUFFLElBQTBCO1lBQ2hDLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDbEMsU0FBSSxHQUF5QixNQUFNLENBQUM7UUFFcEMsV0FBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLHNCQUFpQixHQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxZQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFhekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pDLEdBQUcsQ0FDRCxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ1gsQ0FBQztZQUNDLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLGlCQUFpQixFQUFFLEdBQUc7WUFDdEIsZUFBZSxFQUFFLEdBQUc7WUFDcEIsaUJBQWlCLEVBQUUsT0FBTztZQUMxQixlQUFlLEVBQUUsTUFBTTtZQUN2QixlQUFlLEVBQUUsR0FBRztZQUNwQixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxRQUFRLENBQUMsT0FBTztTQUNwQixDQUF1QixDQUMzQixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQXdCLEVBQUUsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFxQixDQUFDLEVBQzVHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM1QyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixJQUFJLENBQ0YsSUFBSSxPQUFPLENBQTZDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ3JGLE9BQU8sQ0FDTCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEIsSUFBSTtnQkFDSixLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQzthQUNyQixDQUFDLENBQUMsQ0FDSixDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztRQUVGLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxZQUFZO1NBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM3RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxLQUFLLEVBQUUsR0FBRztnQkFDVixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7Z0JBQ3hCLEVBQUUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUQsQ0FBQyxDQUFjLENBQUM7WUFFakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqQyxZQUFZLENBQUMsR0FBRyxHQUFHLGdDQUFnQyxDQUFDO1lBRXBELHlCQUF5QjtZQUN6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO3dCQUMvQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7d0JBQ2hFLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDbkIsS0FBSyxFQUFFLFlBQVk7d0JBQ25CLFFBQVEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3BELENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTt3QkFDL0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO3dCQUNyRSxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVc7d0JBQ3hCLEtBQUssRUFBRSxZQUFZO3dCQUNuQixRQUFRLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6RCxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ2xGLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDdkYsUUFBUTthQUNULENBQUMsQ0FBYyxDQUFDO1lBRWpCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN4QjtZQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pGLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQWdCLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksU0FBUyxFQUFFO29CQUNiLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDbEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVoRixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHLENBQ0QsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQ3hCLCtCQUErQixhQUFhLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQ3pGLEVBQ0QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQTJCLEVBQUUsSUFBc0I7UUFDaEUsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3RCLEtBQUssUUFBUTtnQkFDWCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixLQUFLLE9BQU8sQ0FBQztZQUNiO2dCQUNFLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7cUJBQ3RDLEtBQUssQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUM7cUJBQ2hDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7cUJBQ3BCLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7cUJBQ3BCLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ3RELEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNySCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBMEI7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksQ0FBQyxXQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixJQUFJLENBQUMsV0FBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBRUgsSUFBSSxDQUFDLElBQXNCLEVBQUUsT0FBMkIsRUFBRSxhQUE2QjtRQUNyRixPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsZUFBZTtnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0MsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFdkIsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV2Qix3Q0FBd0M7Z0JBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3hCO2FBQ0Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsT0FBMkI7UUFDM0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ3BDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNwQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFDWCxLQUFLLENBQ04sQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQ1YsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQzdELENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUM3RCxPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMsVUFBVSxDQUNuQixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsT0FBMkIsRUFBRSxhQUE2QjtRQUMxRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQ3JELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pGLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQ3hCLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDaEQsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2pELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2hELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDakQsQ0FBQztvQkFDRixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzdHLFFBQVE7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FDWixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2pELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxPQUFPLEVBQ1AsT0FBTyxHQUFHLENBQUMsRUFDWCxLQUFLLEdBQUcsR0FBRyxDQUNaLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVyxFQUFFLFVBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzlHLFFBQVE7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FDWixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDM0MsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQzNDLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7aUJBQ0g7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFhLEVBQ2IsVUFBbUIsRUFDbkIsYUFBNkIsRUFDN0IsT0FBMkI7UUFFM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU8sWUFBWSxDQUNsQixJQUFhLEVBQ2IsVUFBbUIsRUFDbkIsVUFBbUIsRUFDbkIsYUFBNkIsRUFDN0IsT0FBMkI7UUFFM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDL0MsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDdEI7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU8sUUFBUSxDQUNkLE9BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLGFBQW9CLEVBQ3BCLE9BQTJCLEVBQzNCLElBQWEsRUFDYixTQUFpQjtRQUVqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyxTQUFTLENBQUMsT0FBZSxFQUFFLE9BQWUsRUFBRSxPQUFlLEVBQUUsT0FBZSxFQUFFLEtBQWE7UUFDakcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFFbkIscUdBQXFHO1lBQ3JHLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTVDLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUNqRCxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7WUFFRixnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ2pCLE9BQU8sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDakQsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNsRCxDQUFDO1lBRUYsa0dBQWtHO1lBQ2xHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUNqRCxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7WUFFRiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUVILFdBQVcsQ0FBQyxNQUFrQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDaEIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQy9DLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO2FBQzlDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWtCO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUc7d0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDaEQsQ0FBQztpQkFDSDthQUNGO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFrQixFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ3pDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRTt3QkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7cUJBQzVCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7d0JBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVyxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3RixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ2hCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN2Rzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN2RjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtZQUN2QyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29CQUN0QixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN4QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3ZCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtvQkFDM0csSUFBSSxFQUFFLE9BQU87b0JBQ2IsbUJBQW1CLEVBQUUsS0FBSztpQkFDM0IsQ0FBQyxDQUNILENBQUM7YUFDSDtTQUNGO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUyxDQUFDLE1BQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQzdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXlFO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUM3QixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUMzQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO1lBQzNDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDM0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdmtCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwTkFNRCxnQkFBZ0Isb0RDekRoRCxnL0hBbUhBOzsyRkRoRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQixtQkFFWCx1QkFBdUIsQ0FBQyxNQUFNO29RQU8xQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCcsXG4gICAgICAgICAgICBhbGxvd09iamVjdENyZWF0aW9uOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25Nb3VzZVVwKCRldmVudCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZGluZyBOb2Rlc1xuICAgKi9cblxuICBmaW5kTm9kZXMoJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNBc05vZGVzLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PlxuICAgICAgICBNYXRoLnBvdygoaXRlbS54ID8/IDApIC0gJGV2ZW50Lm9mZnNldFggKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgMikgK1xuICAgICAgICAgIE1hdGgucG93KChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtICRldmVudC5vZmZzZXRZLCAyKSA8XG4gICAgICAgIE1hdGgucG93KHRoaXMub3B0aW9ucy5ub2RlUmFkaXVzIC8gMiArIDgsIDIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZE5vZGVzSW5TaGFwZWQoc2hhcGU6IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfSk6IFByeU5vZGVbXSB7XG4gICAgY29uc3QgbWluWCA9IE1hdGgubWluKHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtYXhYID0gTWF0aC5tYXgoc2hhcGUuc3RhcnQueCwgc2hhcGUuZW5kLngpO1xuICAgIGNvbnN0IG1pblkgPSBNYXRoLm1pbihzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG4gICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LnksIHNoYXBlLmVuZC55KTtcblxuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdID4gbWluWCAmJlxuICAgICAgICAoaXRlbS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gPCBtYXhYICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA+IG1pblkgJiZcbiAgICAgICAgKGl0ZW0ueSA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdIDwgbWF4WVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSB0b0ltYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPjwvcHJ5LXdpZGdldC1mb3JjZS1ncmFwaC1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWdyYXBoXCI+XG4gIDxwcnktd2lkZ2V0LWhlYWRlclxuICAgIFtkYXRhc291cmNlSWRzXT1cIihkYXRhc291cmNlSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKm5nSWY9XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgIFttYW5pZmVzdF09XCJtYW5pZmVzdFwiXG4gICAgKG1hbmlmZXN0TW9kaWZpZWQpPVwibWFuaWZlc3RNb2RpZmllZC5lbWl0KCRldmVudClcIlxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gICAgI2hlYWRlclxuICA+XG4gICAgPHByeS1zZXR0aW5nc1xuICAgICAgKHNhdmVUcmlnZ2VyZWQpPVwiZW1pdE1hbmlmZXN0KClcIlxuICAgICAgKGNoYW5nZVRpdGxlKT1cImNoYW5nZVdpZGdldFRpdGxlKCRldmVudClcIlxuICAgICAgW2hlYWRlclByZXNlbnRdPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgICBbd2lkZ2V0SW5kZXhdPVwid2lkZ2V0SW5kZXhcIlxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIlxuICAgICAgW29wZW4kXT1cIm9wZW4kXCJcbiAgICAgIGNsYXNzPVwiby1zZXR0aW5nc1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiZ3JhcGhfbGF5b3V0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLmxheW91dCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXlvdXQoJGV2ZW50KVwiXG4gICAgICAgICAgW2l0ZW1zQXNPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgW2l0ZW1zXT1cImxheW91dHNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5IS5sYXlvdXRcIlxuICAgICAgICAgIGJpbmRMYWJlbD1cImtleVwiXG4gICAgICAgICAgYmluZFZhbHVlPVwia2V5XCJcbiAgICAgICAgICBpZD1cImdyYXBoX2xheW91dFwiXG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5IS5ub2RlUmFkaXVzXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VOb2RlUmFkaXVzKCRldmVudClcIlxuICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQuZ3JhcGgubm9kZVJhZGl1c1wiXG4gICAgICAgICAgbWluPVwiMTBcIlxuICAgICAgICAgIG1heD1cIjIwMFwiXG4gICAgICAgID48L3ByeS1yYW5nZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuICA8ZGl2IGNsYXNzPVwibm8tcmVzdWx0XCIgKm5nSWY9XCIoYWxsSXRlbXNXaXRoSW1hZ2VzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwXCI+XG4gICAgPGltZ1xuICAgICAgY2xhc3M9XCJuby1yZXN1bHRfX3NlYXJjaFwiXG4gICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvc3Zncy9wcnlfcmVjaGVyY2hlX3Bhc19kZV9yZXN1bHRhdC5zdmdcIlxuICAgICAgYWx0PVwie3sgJ0Bwcnkud2lkZ2V0LnRhYmxlLmVtcHR5JyB8IGkxOG4gfX1cIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICAgIDxzcGFuIGNsYXNzPVwibm8tcmVzdWx0X190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLmVtcHR5JyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgLXNlbGVjdGlvbi1jaG9pY2VcIiBbc3R5bGUudHJhbnNmb3JtXT1cImJvdHRvbUxlZnQkIHwgYXN5bmNcIj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnbW92ZScpXCJcbiAgICAgIFtjbGFzcy4tc2VsZWN0ZWRdPVwibW9kZSA9PT0gJ21vdmUnXCJcbiAgICAgIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwTW92ZVwiXG4gICAgICBwcnlUb29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgYXJpYS1kZXNjcmliZWRieT1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibW92ZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLm1vdmUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgIChjbGljayk9XCJjaGFuZ2VNb2RlKCdyZWN0YW5nbGUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdyZWN0YW5nbGUnXCJcbiAgICAgIFtwcnlUb29sdGlwXT1cImluZm9Ub29sdGlwUmVjdFwiXG4gICAgICBwcnlUb29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgYXJpYS1kZXNjcmliZWRieT1cImluZm9Ub29sdGlwUmVjdF93aWRnZXRNYXBcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwicmVjdGFuZ2xlXCI+PC9wcnktaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQuZ3JhcGgucmVjdGFuZ2xlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxjYW52YXNcbiAgICAjY2FudmFzXG4gICAgY2xhc3M9XCJvLXdpZGdldC0tZ3JhcGhfX2NhbnZhc1wiXG4gICAgKG1vdXNlbW92ZSk9XCJvbk1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudClcIlxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgkZXZlbnQpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlVXAoJGV2ZW50LCB0cnVlKVwiXG4gICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51KCRldmVudClcIlxuICA+PC9jYW52YXM+XG5cbiAgPGRpdiBjbGFzcz1cInNlbGVjdGlvbi1yZWN0YW5nbGVcIiAjc2VsZWN0aW9uUmVjdGFuZ2xlPjwvZGl2PlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm0tdG9vbHRpcCBtLXRvb2x0aXAtLXBvcHVwIG5vZXZlbnRcIlxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIih0b29sdGlwJCB8IGFzeW5jKT8uZGlzcGxheSA/ICdibG9jaycgOiAnbm9uZSdcIlxuICAgIFtzdHlsZS5sZWZ0LnB4XT1cIigodG9vbHRpcCQgfCBhc3luYyk/LnggPz8gMCkgKyA1MFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy55ID8/IDApICsgNTBcIlxuICA+XG4gICAgPGRpdiAjdG9vbHRpcD48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcE1vdmU+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBNb3ZlX3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLm1vdmUnIHwgaTE4biB9fTwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2luZm9Ub29sdGlwUmVjdD5cbiAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCIgaWQ9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS53aWRnZXQuZ3JhcGgucmVjdGFuZ2xlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==