aril 2.0.1-dev.4 → 2.0.1-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/boot/config/apps/src/interfaces.d.ts +7 -1
  2. package/boot/config/apps/src/route-close.service.d.ts +8 -3
  3. package/boot/config/apps/src/route-permissions.d.ts +2 -2
  4. package/esm2022/boot/config/api/src/interfaces.mjs +3 -2
  5. package/esm2022/boot/config/apps/src/apps.service.mjs +2 -2
  6. package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +4 -4
  7. package/esm2022/boot/config/apps/src/interfaces.mjs +2 -1
  8. package/esm2022/boot/config/apps/src/route-close.service.mjs +11 -4
  9. package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
  10. package/esm2022/boot/config/plugins/src/plugins.service.mjs +7 -5
  11. package/esm2022/boot/host/src/bootstrap.mjs +5 -3
  12. package/esm2022/boot/mfe/src/bootstrap.mjs +11 -3
  13. package/esm2022/http/index.mjs +1 -2
  14. package/esm2022/http/src/serviceBase.mjs +4 -4
  15. package/esm2022/http/src/serviceStateMethods.mjs +9 -1
  16. package/esm2022/keycloak/src/auth.interceptor.mjs +5 -2
  17. package/esm2022/selection/aril-selection.mjs +5 -0
  18. package/esm2022/selection/index.mjs +2 -0
  19. package/esm2022/selection/src/interfaces.mjs +2 -0
  20. package/esm2022/selection/src/selection-group.service.mjs +195 -0
  21. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +2 -2
  22. package/esm2022/theme/layout/index.mjs +4 -2
  23. package/esm2022/ui/button/index.mjs +1 -2
  24. package/esm2022/ui/button/src/button.component.mjs +5 -2
  25. package/esm2022/ui/charts/index.mjs +1 -11
  26. package/esm2022/ui/lib/index.mjs +1 -4
  27. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +9 -5
  28. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +25 -25
  29. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +2 -2
  30. package/esm2022/ui/selectBox/src/select-box.component.mjs +11 -34
  31. package/esm2022/ui/table/src/table.component.mjs +10 -5
  32. package/esm2022/ui/value/src/value.component.mjs +3 -2
  33. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +14 -6
  34. package/esm2022/util/activity/aril-util-activity.mjs +5 -0
  35. package/esm2022/util/activity/index.mjs +4 -0
  36. package/esm2022/util/activity/src/activity.constants.mjs +4 -0
  37. package/esm2022/util/activity/src/activity.service.mjs +218 -0
  38. package/esm2022/util/activity/src/activity.types.mjs +2 -0
  39. package/esm2022/util/block/src/block.mjs +9 -25
  40. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +10 -5
  41. package/fesm2022/{aril-app.component-s14ruALV.mjs → aril-app.component-MjG_tPEe.mjs} +2 -1
  42. package/fesm2022/{aril-app.component-s14ruALV.mjs.map → aril-app.component-MjG_tPEe.mjs.map} +1 -1
  43. package/fesm2022/aril-boot-config-api.mjs +2 -1
  44. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  45. package/fesm2022/aril-boot-config-apps.mjs +36 -12
  46. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  47. package/fesm2022/aril-boot-config-plugins.mjs +6 -4
  48. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  49. package/fesm2022/aril-boot-host.mjs +4 -2
  50. package/fesm2022/aril-boot-host.mjs.map +1 -1
  51. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs → aril-boot-mfe-app.component-DtspQ3J8.mjs} +3 -2
  52. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs.map → aril-boot-mfe-app.component-DtspQ3J8.mjs.map} +1 -1
  53. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs → aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs} +12 -4
  54. package/fesm2022/aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs.map +1 -0
  55. package/fesm2022/aril-boot-mfe.mjs +2 -1
  56. package/fesm2022/aril-boot-mfe.mjs.map +1 -1
  57. package/fesm2022/aril-http.mjs +11 -7
  58. package/fesm2022/aril-http.mjs.map +1 -1
  59. package/fesm2022/aril-keycloak.mjs +4 -1
  60. package/fesm2022/aril-keycloak.mjs.map +1 -1
  61. package/fesm2022/aril-selection.mjs +202 -0
  62. package/fesm2022/aril-selection.mjs.map +1 -0
  63. package/fesm2022/aril-theme-layout.mjs +4 -193
  64. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  65. package/fesm2022/aril-ui-business-enumPicker.mjs +14 -6
  66. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
  67. package/fesm2022/aril-ui-button.mjs +5 -17
  68. package/fesm2022/aril-ui-button.mjs.map +1 -1
  69. package/fesm2022/aril-ui-charts.mjs +4 -1302
  70. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  71. package/fesm2022/aril-ui-lib.mjs +10 -98
  72. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  73. package/fesm2022/aril-ui-multiSelect.mjs +24 -24
  74. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
  75. package/fesm2022/aril-ui-relativeDateSelector.mjs +1 -1
  76. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
  77. package/fesm2022/aril-ui-selectBox.mjs +10 -33
  78. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  79. package/fesm2022/aril-ui-table.mjs +9 -4
  80. package/fesm2022/aril-ui-table.mjs.map +1 -1
  81. package/fesm2022/aril-ui-value.mjs +2 -1
  82. package/fesm2022/aril-ui-value.mjs.map +1 -1
  83. package/fesm2022/aril-util-activity.mjs +228 -0
  84. package/fesm2022/aril-util-activity.mjs.map +1 -0
  85. package/fesm2022/aril-util-block.mjs +9 -25
  86. package/fesm2022/aril-util-block.mjs.map +1 -1
  87. package/fesm2022/aril-util-pub-sub.mjs +9 -4
  88. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  89. package/fesm2022/aril.mjs +14 -5
  90. package/fesm2022/aril.mjs.map +1 -1
  91. package/http/index.d.ts +0 -1
  92. package/http/src/serviceStateMethods.d.ts +1 -0
  93. package/package.json +215 -239
  94. package/selection/index.d.ts +1 -0
  95. package/selection/src/interfaces.d.ts +8 -0
  96. package/{theme/layout/service → selection/src}/selection-group.service.d.ts +1 -1
  97. package/theme/layout/index.d.ts +1 -1
  98. package/theme/layout/index.ts +3 -1
  99. package/ui/button/index.d.ts +0 -1
  100. package/ui/button/src/button.component.d.ts +2 -0
  101. package/ui/charts/index.d.ts +0 -10
  102. package/ui/lib/index.d.ts +0 -3
  103. package/ui/lib/src/form/form-error-message.directive.d.ts +4 -3
  104. package/ui/multiSelect/src/multi-select.component.d.ts +4 -5
  105. package/ui/selectBox/src/select-box.component.d.ts +2 -7
  106. package/ui/table/src/table.component.d.ts +3 -2
  107. package/util/activity/index.d.ts +3 -0
  108. package/util/activity/src/activity.constants.d.ts +3 -0
  109. package/util/activity/src/activity.service.d.ts +35 -0
  110. package/util/activity/src/activity.types.d.ts +13 -0
  111. package/util/block/src/block.d.ts +4 -10
  112. package/util/pub-sub/src/pub-sub.service.d.ts +2 -2
  113. package/esm2022/http/src/serviceMockBase.mjs +0 -4
  114. package/esm2022/theme/layout/service/selection-group.service.mjs +0 -195
  115. package/esm2022/ui/button/src/split-button.component.mjs +0 -18
  116. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +0 -124
  117. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +0 -164
  118. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +0 -116
  119. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +0 -114
  120. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +0 -100
  121. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +0 -117
  122. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +0 -252
  123. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +0 -89
  124. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +0 -82
  125. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +0 -137
  126. package/esm2022/ui/charts/src/theme/theme.mjs +0 -54
  127. package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +0 -5
  128. package/esm2022/ui/dxEditor/index.mjs +0 -2
  129. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +0 -26
  130. package/esm2022/ui/lib/src/form/form-field-builder.mjs +0 -23
  131. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +0 -49
  132. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +0 -25
  133. package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +0 -5
  134. package/esm2022/ui/overlayPanel/index.mjs +0 -2
  135. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +0 -20
  136. package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +0 -5
  137. package/esm2022/ui/tooltip/index.mjs +0 -2
  138. package/esm2022/ui/tooltip/src/tooltip-component.mjs +0 -23
  139. package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +0 -5
  140. package/esm2022/ui/treeTable/index.mjs +0 -2
  141. package/esm2022/ui/treeTable/src/tree-table.component.mjs +0 -55
  142. package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +0 -5
  143. package/esm2022/ui-business/operation-types-dialog/index.mjs +0 -2
  144. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -76
  145. package/esm2022/util/unwrap/aril-util-unwrap.mjs +0 -5
  146. package/esm2022/util/unwrap/index.mjs +0 -2
  147. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +0 -24
  148. package/fesm2022/aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs.map +0 -1
  149. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +0 -83
  150. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +0 -1
  151. package/fesm2022/aril-ui-dxEditor.mjs +0 -33
  152. package/fesm2022/aril-ui-dxEditor.mjs.map +0 -1
  153. package/fesm2022/aril-ui-overlayPanel.mjs +0 -27
  154. package/fesm2022/aril-ui-overlayPanel.mjs.map +0 -1
  155. package/fesm2022/aril-ui-tooltip.mjs +0 -30
  156. package/fesm2022/aril-ui-tooltip.mjs.map +0 -1
  157. package/fesm2022/aril-ui-treeTable.mjs +0 -62
  158. package/fesm2022/aril-ui-treeTable.mjs.map +0 -1
  159. package/fesm2022/aril-util-unwrap.mjs +0 -31
  160. package/fesm2022/aril-util-unwrap.mjs.map +0 -1
  161. package/http/src/serviceMockBase.d.ts +0 -6
  162. package/theme/layout/service/selection-group.service.ts +0 -209
  163. package/ui/button/src/split-button.component.d.ts +0 -8
  164. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +0 -25
  165. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +0 -26
  166. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +0 -24
  167. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +0 -20
  168. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +0 -26
  169. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +0 -28
  170. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +0 -32
  171. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +0 -21
  172. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +0 -21
  173. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +0 -27
  174. package/ui/charts/src/theme/theme.d.ts +0 -5
  175. package/ui/dxEditor/index.d.ts +0 -1
  176. package/ui/dxEditor/src/dx-editor.component.d.ts +0 -11
  177. package/ui/lib/src/form/form-field-builder.d.ts +0 -8
  178. package/ui/lib/src/input/common-input-validators.service.d.ts +0 -20
  179. package/ui/lib/src/input/input-disabled.directive.d.ts +0 -9
  180. package/ui/overlayPanel/index.d.ts +0 -1
  181. package/ui/overlayPanel/src/overlay-panel.component.d.ts +0 -8
  182. package/ui/tooltip/index.d.ts +0 -1
  183. package/ui/tooltip/src/tooltip-component.d.ts +0 -14
  184. package/ui/treeTable/index.d.ts +0 -1
  185. package/ui/treeTable/src/tree-table.component.d.ts +0 -21
  186. package/ui-business/operation-types-dialog/index.d.ts +0 -1
  187. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -28
  188. package/util/unwrap/index.d.ts +0 -1
  189. package/util/unwrap/src/unwrap-tag.directive.d.ts +0 -9
@@ -17,7 +17,8 @@ export declare enum Apps {
17
17
  STATE_MACHINE = "state-machine",
18
18
  REPORT = "report",
19
19
  LGC = "lgc",
20
- DMS = "dms"
20
+ DMS = "dms",
21
+ EVENT_GATEWAY = "event-gateway"
21
22
  }
22
23
  export interface AppsDTO {
23
24
  version: number;
@@ -25,6 +26,11 @@ export interface AppsDTO {
25
26
  plugins: PluginConfig[];
26
27
  extensions: Record<string, ExtensionConfig>;
27
28
  menuItems: PluginMenuItem[];
29
+ routePermissions?: RoutePermission[];
30
+ }
31
+ export interface RoutePermission {
32
+ routerLink: string;
33
+ permittedRoles: string[];
28
34
  }
29
35
  export interface ExtensionConfig {
30
36
  options: PluginConfig;
@@ -1,8 +1,13 @@
1
+ import { Observable } from 'rxjs';
1
2
  import * as i0 from "@angular/core";
2
3
  export declare class RouteCloseService {
3
- deleteRoute: import("@angular/core").WritableSignal<{
4
- key: string | null;
5
- }>;
4
+ private readonly deleteRouteSubject;
5
+ /**
6
+ * Kapatılan tab key'lerinin kuyruğu. Tek-slot signal yerine Subject kullanılıyor:
7
+ * toplu kapatmada (closeAll/closeOthers/closeToRight) ardışık çağrıların her biri ayrı
8
+ * emit olur ve tüketici hepsini işler. Signal coalescing'i son key dışındakileri düşürüyordu.
9
+ */
10
+ deleteRoute$: Observable<string>;
6
11
  deleteStoredRoute(key: string): void;
7
12
  static ɵfac: i0.ɵɵFactoryDeclaration<RouteCloseService, never>;
8
13
  static ɵprov: i0.ɵɵInjectableDeclaration<RouteCloseService>;
@@ -1,3 +1,3 @@
1
- import { PluginMenuItem } from './interfaces';
2
- export declare function setRoutePermissions(menuItems: PluginMenuItem[]): void;
1
+ import { PluginMenuItem, RoutePermission } from './interfaces';
2
+ export declare function setRoutePermissions(menuItems: PluginMenuItem[], routePermissions?: RoutePermission[]): void;
3
3
  export declare function getRoutePermissions(url: string): string[] | undefined;
@@ -31,7 +31,8 @@ export class ApiConfigsFactory {
31
31
  [Apps.MDM]: '',
32
32
  [Apps.REPORT]: '',
33
33
  [Apps.LGC]: '',
34
- [Apps.DMS]: ''
34
+ [Apps.DMS]: '',
35
+ [Apps.EVENT_GATEWAY]: ''
35
36
  };
36
37
  }
37
38
  getExternalAppEndpoint(appName) {
@@ -39,4 +40,4 @@ export class ApiConfigsFactory {
39
40
  return `${new URL(this.api).origin}/${prefix}`;
40
41
  }
41
42
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBpL3NyYy9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3QyxNQUFNLENBQU4sSUFBWSxVQUVYO0FBRkQsV0FBWSxVQUFVO0lBQ3JCLHlDQUEyQixDQUFBO0FBQzVCLENBQUMsRUFGVyxVQUFVLEtBQVYsVUFBVSxRQUVyQjtBQVFELE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDQyxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBQ2pCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFekIsV0FBTSxHQUErQjtZQUNwQyxVQUFVLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFDRixjQUFTLEdBQXlCO1lBQ2pDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNkLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDbEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2YsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNiLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNkLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDZCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUN4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFO1lBQ2IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNqQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFLSCxDQUFDO0lBSkEsc0JBQXNCLENBQUMsT0FBYTtRQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcHMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5cclxuZXhwb3J0IGVudW0gQXBwc1JvdXRlcyB7XHJcblx0TU5HX0JBU0VfVVJMID0gJ21uZ0Jhc2VVcmwnLFxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEtleWNsb2FrQ29uZmlnIHtcclxuXHR1cmw6IHN0cmluZztcclxuXHRyZWFsbTogc3RyaW5nO1xyXG5cdGNsaWVudElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlDb25maWdzRmFjdG9yeSB7XHJcblx0YXBpOiBzdHJpbmcgPSAnJztcclxuXHRmcm9tTWFpbDogc3RyaW5nID0gJyc7XHJcblx0bXdBcGk6IHN0cmluZyA9ICcnO1xyXG5cdGFpQXBpOiBzdHJpbmcgPSAnJztcclxuXHRzdGF0dXNBcGk6IHN0cmluZyA9ICcnO1xyXG5cdGVudmlyb25tZW50OiBzdHJpbmcgPSAnJztcclxuXHRrZXljbG9hayE6IEtleWNsb2FrLktleWNsb2FrQ29uZmlnO1xyXG5cdHJvdXRlczogUmVjb3JkPEFwcHNSb3V0ZXMsIHN0cmluZz4gPSB7XHJcblx0XHRtbmdCYXNlVXJsOiAnJyxcclxuXHR9O1xyXG5cdHByZWZpeE1hcDogUmVjb3JkPEFwcHMsIHN0cmluZz4gPSB7XHJcblx0XHRbQXBwcy5USE9SXTogJycsXHJcblx0XHRbQXBwcy5DUk1dOiAnJyxcclxuXHRcdFtBcHBzLldETV06ICcnLFxyXG5cdFx0W0FwcHMuQklMTElOR106ICcnLFxyXG5cdFx0W0FwcHMuUEFZTUVOVF06ICcnLFxyXG5cdFx0W0FwcHMuWUVBUF06ICcnLFxyXG5cdFx0W0FwcHMuTVddOiAnJyxcclxuXHRcdFtBcHBzLkxFTkFdOiAnJyxcclxuXHRcdFtBcHBzLkhFU106ICcnLFxyXG5cdFx0W0FwcHMuQ1RTXTogJycsXHJcblx0XHRbQXBwcy5TSVNdOiAnJyxcclxuXHRcdFtBcHBzLk1OR106ICcnLFxyXG5cdFx0W0FwcHMuU1RBVEVfTUFDSElORV06ICcnLFxyXG5cdFx0W0FwcHMuTURNXTonJyxcclxuXHRcdFtBcHBzLlJFUE9SVF06ICcnLFxyXG5cdFx0W0FwcHMuTEdDXTogJycsXHJcblx0XHRbQXBwcy5ETVNdOiAnJ1xyXG5cdH07XHJcblx0Z2V0RXh0ZXJuYWxBcHBFbmRwb2ludChhcHBOYW1lOiBBcHBzKTogc3RyaW5nIHtcclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXMucHJlZml4TWFwW2FwcE5hbWVdIHx8IHRoaXMucHJlZml4TWFwW0FwcHMuTU5HXTtcclxuXHRcdHJldHVybiBgJHtuZXcgVVJMKHRoaXMuYXBpKS5vcmlnaW59LyR7cHJlZml4fWA7XHJcblx0fVxyXG59XHJcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBpL3NyYy9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3QyxNQUFNLENBQU4sSUFBWSxVQUVYO0FBRkQsV0FBWSxVQUFVO0lBQ3JCLHlDQUEyQixDQUFBO0FBQzVCLENBQUMsRUFGVyxVQUFVLEtBQVYsVUFBVSxRQUVyQjtBQVFELE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFDQyxRQUFHLEdBQVcsRUFBRSxDQUFDO1FBQ2pCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFFekIsV0FBTSxHQUErQjtZQUNwQyxVQUFVLEVBQUUsRUFBRTtTQUNkLENBQUM7UUFDRixjQUFTLEdBQXlCO1lBQ2pDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNkLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDbEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUNsQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2YsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNiLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNkLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDZCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRTtZQUN4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxFQUFFO1lBQ2IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRTtZQUNqQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2QsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNkLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7U0FDeEIsQ0FBQztJQUtILENBQUM7SUFKQSxzQkFBc0IsQ0FBQyxPQUFhO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkUsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7SUFDaEQsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwcyB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcblxyXG5leHBvcnQgZW51bSBBcHBzUm91dGVzIHtcclxuXHRNTkdfQkFTRV9VUkwgPSAnbW5nQmFzZVVybCcsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS2V5Y2xvYWtDb25maWcge1xyXG5cdHVybDogc3RyaW5nO1xyXG5cdHJlYWxtOiBzdHJpbmc7XHJcblx0Y2xpZW50SWQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFwaUNvbmZpZ3NGYWN0b3J5IHtcclxuXHRhcGk6IHN0cmluZyA9ICcnO1xyXG5cdGZyb21NYWlsOiBzdHJpbmcgPSAnJztcclxuXHRtd0FwaTogc3RyaW5nID0gJyc7XHJcblx0YWlBcGk6IHN0cmluZyA9ICcnO1xyXG5cdHN0YXR1c0FwaTogc3RyaW5nID0gJyc7XHJcblx0ZW52aXJvbm1lbnQ6IHN0cmluZyA9ICcnO1xyXG5cdGtleWNsb2FrITogS2V5Y2xvYWsuS2V5Y2xvYWtDb25maWc7XHJcblx0cm91dGVzOiBSZWNvcmQ8QXBwc1JvdXRlcywgc3RyaW5nPiA9IHtcclxuXHRcdG1uZ0Jhc2VVcmw6ICcnLFxyXG5cdH07XHJcblx0cHJlZml4TWFwOiBSZWNvcmQ8QXBwcywgc3RyaW5nPiA9IHtcclxuXHRcdFtBcHBzLlRIT1JdOiAnJyxcclxuXHRcdFtBcHBzLkNSTV06ICcnLFxyXG5cdFx0W0FwcHMuV0RNXTogJycsXHJcblx0XHRbQXBwcy5CSUxMSU5HXTogJycsXHJcblx0XHRbQXBwcy5QQVlNRU5UXTogJycsXHJcblx0XHRbQXBwcy5ZRUFQXTogJycsXHJcblx0XHRbQXBwcy5NV106ICcnLFxyXG5cdFx0W0FwcHMuTEVOQV06ICcnLFxyXG5cdFx0W0FwcHMuSEVTXTogJycsXHJcblx0XHRbQXBwcy5DVFNdOiAnJyxcclxuXHRcdFtBcHBzLlNJU106ICcnLFxyXG5cdFx0W0FwcHMuTU5HXTogJycsXHJcblx0XHRbQXBwcy5TVEFURV9NQUNISU5FXTogJycsXHJcblx0XHRbQXBwcy5NRE1dOicnLFxyXG5cdFx0W0FwcHMuUkVQT1JUXTogJycsXHJcblx0XHRbQXBwcy5MR0NdOiAnJyxcclxuXHRcdFtBcHBzLkRNU106ICcnLFxyXG5cdFx0W0FwcHMuRVZFTlRfR0FURVdBWV06ICcnXHJcblx0fTtcclxuXHRnZXRFeHRlcm5hbEFwcEVuZHBvaW50KGFwcE5hbWU6IEFwcHMpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgcHJlZml4ID0gdGhpcy5wcmVmaXhNYXBbYXBwTmFtZV0gfHwgdGhpcy5wcmVmaXhNYXBbQXBwcy5NTkddO1xyXG5cdFx0cmV0dXJuIGAke25ldyBVUkwodGhpcy5hcGkpLm9yaWdpbn0vJHtwcmVmaXh9YDtcclxuXHR9XHJcbn1cclxuIl19
@@ -20,7 +20,7 @@ export class MicroAppService {
20
20
  return httpClient
21
21
  .get(isDevMode() ? './assets/local-configs/app.local.json' : hostAPI + '/ui-sidebar-configs')
22
22
  .pipe(map((apps) => {
23
- setRoutePermissions(apps.menuItems);
23
+ setRoutePermissions(apps.menuItems, apps.routePermissions);
24
24
  const routes = this.buildRoutes([...apps.modules, ...apps.plugins]);
25
25
  this.router.resetConfig([
26
26
  ...this.router.config,
@@ -88,4 +88,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
88
88
  type: Injectable,
89
89
  args: [{ providedIn: 'root' }]
90
90
  }] });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9hcHBzL3NyYy9hcHBzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBRU4sVUFBVSxFQUNWLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBYyxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVFoRSxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVrQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUMsY0FBUyxHQUFhLEVBQUUsQ0FBQztLQW1GakM7SUFqRkEsSUFBSSxDQUFDLFVBQXNCLEVBQUUsT0FBZTtRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUMsT0FBTyxVQUFVO2FBQ2Ys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QUM7Z0JBQ2hDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM1RCxPQUFPLEdBQUcsQ0FBQztnQkFDWixDQUFDO1lBQ0YsQ0FBQztZQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkIsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU8sYUFBYSxDQUFDLGNBQXlCO1FBQzlDLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OEdBdEZXLGVBQWU7a0hBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7XHJcblx0V2ViQ29tcG9uZW50V3JhcHBlck9wdGlvbnMsXHJcblx0c3RhcnRzV2l0aFxyXG59IGZyb20gJ0Bhbmd1bGFyLWFyY2hpdGVjdHMvbW9kdWxlLWZlZGVyYXRpb24tdG9vbHMnO1xyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgRm9yYmlkZGVuQ29tcG9uZW50LCBOb3RGb3VuZENvbXBvbmVudCB9IGZyb20gJ2FyaWwvYm9vdC9wYWdlcyc7XHJcblxyXG5pbXBvcnQgeyBBdXRoR3VhcmQgfSBmcm9tICcuL2F1dGguZ3VhcmQnO1xyXG5pbXBvcnQgeyBBcmlsV2ViQ29tcG9uZW50V3JhcHBlciB9IGZyb20gJy4vY3VzdG9tLXJldXNlLW91dGxldC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBzRFRPLCBFeHRlbnNpb25Db25maWcsIFBsdWdpbkNvbmZpZywgUGx1Z2luTWVudUl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBzZXRSb3V0ZVBlcm1pc3Npb25zIH0gZnJvbSAnLi9yb3V0ZS1wZXJtaXNzaW9ucyc7XHJcbmltcG9ydCB7IFNoYWRvd0RPTVdyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL3Nob3dkb3dET01XcmFwcGVyJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWljcm9BcHBJbml0UmVzdWx0IHtcclxuXHRtZW51SXRlbXM6IFBsdWdpbk1lbnVJdGVtW107XHJcblx0cGx1Z2luczogUmVjb3JkPHN0cmluZywgRXh0ZW5zaW9uQ29uZmlnPjtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1pY3JvQXBwU2VydmljZSB7XHJcblx0cHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrID0gaW5qZWN0KEtleWNsb2FrU2VydmljZSk7XHJcblxyXG5cdHByaXZhdGUgdXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRpbml0KGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIGhvc3RBUEk6IHN0cmluZyk6IE9ic2VydmFibGU8TWljcm9BcHBJbml0UmVzdWx0PiB7XHJcblx0XHR0aGlzLnVzZXJSb2xlcyA9IHRoaXMua2V5Y2xvYWsuZ2V0VXNlclJvbGVzKCk7XHJcblx0XHRyZXR1cm4gaHR0cENsaWVudFxyXG5cdFx0XHQuZ2V0PEFwcHNEVE8+KGlzRGV2TW9kZSgpID8gJy4vYXNzZXRzL2xvY2FsLWNvbmZpZ3MvYXBwLmxvY2FsLmpzb24nIDogaG9zdEFQSSArICcvdWktc2lkZWJhci1jb25maWdzJylcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0bWFwKChhcHBzKSA9PiB7XHJcblx0XHRcdFx0XHRzZXRSb3V0ZVBlcm1pc3Npb25zKGFwcHMubWVudUl0ZW1zKTtcclxuXHRcdFx0XHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMuYnVpbGRSb3V0ZXMoWy4uLmFwcHMubW9kdWxlcywgLi4uYXBwcy5wbHVnaW5zXSk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xyXG5cdFx0XHRcdFx0XHQuLi50aGlzLnJvdXRlci5jb25maWcsXHJcblx0XHRcdFx0XHRcdC4uLnJvdXRlcyxcclxuXHRcdFx0XHRcdFx0eyBwYXRoOiAnZm9yYmlkZGVuJywgY29tcG9uZW50OiBGb3JiaWRkZW5Db21wb25lbnQgfSxcclxuXHRcdFx0XHRcdFx0eyBwYXRoOiAnKionLCBjb21wb25lbnQ6IE5vdEZvdW5kQ29tcG9uZW50IH1cclxuXHRcdFx0XHRcdF0pO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlcmVkTWVudUl0ZW1zID0gdGhpcy5maWx0ZXJNZW51SXRlbXNCeVJvbGUoYXBwcy5tZW51SXRlbXMpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0bWVudUl0ZW1zOiBbXHJcblx0XHRcdFx0XHRcdFx0eyByb290OiB0cnVlLCBsYWJlbDogeyB0cjogJ0FuYXNheWZhJywgZW46ICdIb21lJyB9LCBpY29uOiAncGkgcGktZncgcGktaG9tZScsIHJvdXRlckxpbms6ICcvJyB9IGFzIFBsdWdpbk1lbnVJdGVtLFxyXG5cdFx0XHRcdFx0XHRcdC4uLmZpbHRlcmVkTWVudUl0ZW1zXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdHBsdWdpbnM6IGFwcHMuZXh0ZW5zaW9ucyB8fCB7fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRjYXRjaEVycm9yKChlcnIpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBNaWNybyBBcHBzIExvYWRpbmcnLCBlcnIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9mPE1pY3JvQXBwSW5pdFJlc3VsdD4oeyBtZW51SXRlbXM6IFtdLCBwbHVnaW5zOiB7fSB9KTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0YnVpbGRSb3V0ZXMob3B0aW9uczogUGx1Z2luQ29uZmlnW10pOiBSb3V0ZXMge1xyXG5cdFx0Y29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBvcHRpb25zLm1hcCgob3B0KSA9PiB7XHJcblx0XHRcdGlmICghb3B0LnJlbW90ZU5hbWUpIHtcclxuXHRcdFx0XHQvLyBgcmVtb3RlTmFtZWAgYm/Fn3NhIFN0cmF0ZWd5IGBnZXRSb3V0ZUtleWAgZG/En3J1IHRhYiBrZXkgw7xyZXRlbWl5b3Ig4oaSIHRhYiBpem9sYXN5b251XHJcblx0XHRcdFx0Ly8gc2lsZW50IGvEsXLEsWzEsXlvcmR1LiBGYWlsLWZhc3Q6IGNvbmZpZyBoYXRhc8SxbsSxIGJvb3QtdGltZSdkYSB5YWthbGEsIHJ1bnRpbWUnZGFcclxuXHRcdFx0XHQvLyBrdWxsYW7EsWPEsSBib8WfIHRhYidsYXIgZ8O2cm1lc2luLlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcclxuXHRcdFx0XHRcdGBbTWljcm9BcHBTZXJ2aWNlLmJ1aWxkUm91dGVzXSBQbHVnaW5Db25maWcucmVtb3RlTmFtZSBla3Npay4gYCArXHJcblx0XHRcdFx0XHRgUm91dGUgb2x1xZ90dXJ1bGFtYXog4oCUIGNvbmZpZyBrb250cm9sIGV0OiAke0pTT04uc3RyaW5naWZ5KG9wdCl9YFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRtYXRjaGVyOiBzdGFydHNXaXRoKG9wdC5yZW1vdGVOYW1lKSxcclxuXHRcdFx0XHRjb21wb25lbnQ6IG9wdC5zaGFkb3dEb21QYXNzaXZlID8gQXJpbFdlYkNvbXBvbmVudFdyYXBwZXIgOiBTaGFkb3dET01XcmFwcGVyQ29tcG9uZW50LFxyXG5cdFx0XHRcdGRhdGE6IG9wdCBhcyBXZWJDb21wb25lbnRXcmFwcGVyT3B0aW9ucyxcclxuXHRcdFx0XHRjYW5BY3RpdmF0ZTogW0F1dGhHdWFyZF1cclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiByb3V0ZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZpbHRlck1lbnVJdGVtc0J5Um9sZShpdGVtczogUGx1Z2luTWVudUl0ZW1bXSk6IFBsdWdpbk1lbnVJdGVtW10ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLnJlZHVjZTxQbHVnaW5NZW51SXRlbVtdPigoYWNjLCBpdGVtKSA9PiB7XHJcblx0XHRcdGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKGl0ZW0ucGVybWl0dGVkUm9sZXMpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFjYztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZmlsdGVyZWRJdGVtID0geyAuLi5pdGVtIH07XHJcblxyXG5cdFx0XHRpZiAoZmlsdGVyZWRJdGVtLml0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmaWx0ZXJlZEl0ZW0uaXRlbXMgPSB0aGlzLmZpbHRlck1lbnVJdGVtc0J5Um9sZShmaWx0ZXJlZEl0ZW0uaXRlbXMpO1xyXG5cclxuXHRcdFx0XHRpZiAoIWZpbHRlcmVkSXRlbS5pdGVtcy5sZW5ndGggJiYgIWZpbHRlcmVkSXRlbS5yb3V0ZXJMaW5rKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YWNjLnB1c2goZmlsdGVyZWRJdGVtKTtcclxuXHRcdFx0cmV0dXJuIGFjYztcclxuXHRcdH0sIFtdKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzUGVybWlzc2lvbihwZXJtaXR0ZWRSb2xlcz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXBlcm1pdHRlZFJvbGVzPy5sZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcGVybWl0dGVkUm9sZXMuc29tZSgocm9sZSkgPT4gdGhpcy51c2VyUm9sZXMuaW5jbHVkZXMocm9sZSkpO1xyXG5cdH1cclxufVxyXG4iXX0=
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9hcHBzL3NyYy9hcHBzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRCxPQUFPLEVBRU4sVUFBVSxFQUNWLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBYyxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVFoRSxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVrQixXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUMsY0FBUyxHQUFhLEVBQUUsQ0FBQztLQW1GakM7SUFqRkEsSUFBSSxDQUFDLFVBQXNCLEVBQUUsT0FBZTtRQUMzQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUMsT0FBTyxVQUFVO2FBQ2Ys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S0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDNUQsT0FBTyxHQUFHLENBQUM7Z0JBQ1osQ0FBQztZQUNGLENBQUM7WUFFRCxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sR0FBRyxDQUFDO1FBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVPLGFBQWEsQ0FBQyxjQUF5QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDOzhHQXRGVyxlQUFlO2tIQUFmLGVBQWUsY0FERixNQUFNOzsyRkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG5cdFdlYkNvbXBvbmVudFdyYXBwZXJPcHRpb25zLFxyXG5cdHN0YXJ0c1dpdGhcclxufSBmcm9tICdAYW5ndWxhci1hcmNoaXRlY3RzL21vZHVsZS1mZWRlcmF0aW9uLXRvb2xzJztcclxuaW1wb3J0IHsgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEZvcmJpZGRlbkNvbXBvbmVudCwgTm90Rm91bmRDb21wb25lbnQgfSBmcm9tICdhcmlsL2Jvb3QvcGFnZXMnO1xyXG5cclxuaW1wb3J0IHsgQXV0aEd1YXJkIH0gZnJvbSAnLi9hdXRoLmd1YXJkJztcclxuaW1wb3J0IHsgQXJpbFdlYkNvbXBvbmVudFdyYXBwZXIgfSBmcm9tICcuL2N1c3RvbS1yZXVzZS1vdXRsZXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXBwc0RUTywgRXh0ZW5zaW9uQ29uZmlnLCBQbHVnaW5Db25maWcsIFBsdWdpbk1lbnVJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgc2V0Um91dGVQZXJtaXNzaW9ucyB9IGZyb20gJy4vcm91dGUtcGVybWlzc2lvbnMnO1xyXG5pbXBvcnQgeyBTaGFkb3dET01XcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zaG93ZG93RE9NV3JhcHBlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1pY3JvQXBwSW5pdFJlc3VsdCB7XHJcblx0bWVudUl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdO1xyXG5cdHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIEV4dGVuc2lvbkNvbmZpZz47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNaWNyb0FwcFNlcnZpY2Uge1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblx0cHJpdmF0ZSByZWFkb25seSBrZXljbG9hayA9IGluamVjdChLZXljbG9ha1NlcnZpY2UpO1xyXG5cclxuXHRwcml2YXRlIHVzZXJSb2xlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0aW5pdChodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBob3N0QVBJOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1pY3JvQXBwSW5pdFJlc3VsdD4ge1xyXG5cdFx0dGhpcy51c2VyUm9sZXMgPSB0aGlzLmtleWNsb2FrLmdldFVzZXJSb2xlcygpO1xyXG5cdFx0cmV0dXJuIGh0dHBDbGllbnRcclxuXHRcdFx0LmdldDxBcHBzRFRPPihpc0Rldk1vZGUoKSA/ICcuL2Fzc2V0cy9sb2NhbC1jb25maWdzL2FwcC5sb2NhbC5qc29uJyA6IGhvc3RBUEkgKyAnL3VpLXNpZGViYXItY29uZmlncycpXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdG1hcCgoYXBwcykgPT4ge1xyXG5cdFx0XHRcdFx0c2V0Um91dGVQZXJtaXNzaW9ucyhhcHBzLm1lbnVJdGVtcywgYXBwcy5yb3V0ZVBlcm1pc3Npb25zKTtcclxuXHRcdFx0XHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMuYnVpbGRSb3V0ZXMoWy4uLmFwcHMubW9kdWxlcywgLi4uYXBwcy5wbHVnaW5zXSk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5yb3V0ZXIucmVzZXRDb25maWcoW1xyXG5cdFx0XHRcdFx0XHQuLi50aGlzLnJvdXRlci5jb25maWcsXHJcblx0XHRcdFx0XHRcdC4uLnJvdXRlcyxcclxuXHRcdFx0XHRcdFx0eyBwYXRoOiAnZm9yYmlkZGVuJywgY29tcG9uZW50OiBGb3JiaWRkZW5Db21wb25lbnQgfSxcclxuXHRcdFx0XHRcdFx0eyBwYXRoOiAnKionLCBjb21wb25lbnQ6IE5vdEZvdW5kQ29tcG9uZW50IH1cclxuXHRcdFx0XHRcdF0pO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlcmVkTWVudUl0ZW1zID0gdGhpcy5maWx0ZXJNZW51SXRlbXNCeVJvbGUoYXBwcy5tZW51SXRlbXMpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0bWVudUl0ZW1zOiBbXHJcblx0XHRcdFx0XHRcdFx0eyByb290OiB0cnVlLCBsYWJlbDogeyB0cjogJ0FuYXNheWZhJywgZW46ICdIb21lJyB9LCBpY29uOiAncGkgcGktZncgcGktaG9tZScsIHJvdXRlckxpbms6ICcvJyB9IGFzIFBsdWdpbk1lbnVJdGVtLFxyXG5cdFx0XHRcdFx0XHRcdC4uLmZpbHRlcmVkTWVudUl0ZW1zXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdHBsdWdpbnM6IGFwcHMuZXh0ZW5zaW9ucyB8fCB7fVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRjYXRjaEVycm9yKChlcnIpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBNaWNybyBBcHBzIExvYWRpbmcnLCBlcnIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9mPE1pY3JvQXBwSW5pdFJlc3VsdD4oeyBtZW51SXRlbXM6IFtdLCBwbHVnaW5zOiB7fSB9KTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0YnVpbGRSb3V0ZXMob3B0aW9uczogUGx1Z2luQ29uZmlnW10pOiBSb3V0ZXMge1xyXG5cdFx0Y29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBvcHRpb25zLm1hcCgob3B0KSA9PiB7XHJcblx0XHRcdGlmICghb3B0LnJlbW90ZU5hbWUpIHtcclxuXHRcdFx0XHQvLyBgcmVtb3RlTmFtZWAgYm/Fn3NhIFN0cmF0ZWd5IGBnZXRSb3V0ZUtleWAgZG/En3J1IHRhYiBrZXkgw7xyZXRlbWl5b3Ig4oaSIHRhYiBpem9sYXN5b251XHJcblx0XHRcdFx0Ly8gc2lsZW50IGvEsXLEsWzEsXlvcmR1LiBGYWlsLWZhc3Q6IGNvbmZpZyBoYXRhc8SxbsSxIGJvb3QtdGltZSdkYSB5YWthbGEsIHJ1bnRpbWUnZGFcclxuXHRcdFx0XHQvLyBrdWxsYW7EsWPEsSBib8WfIHRhYidsYXIgZ8O2cm1lc2luLlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcclxuXHRcdFx0XHRcdGBbTWljcm9BcHBTZXJ2aWNlLmJ1aWxkUm91dGVzXSBQbHVnaW5Db25maWcucmVtb3RlTmFtZSBla3Npay4gYCArXHJcblx0XHRcdFx0XHRgUm91dGUgb2x1xZ90dXJ1bGFtYXog4oCUIGNvbmZpZyBrb250cm9sIGV0OiAke0pTT04uc3RyaW5naWZ5KG9wdCl9YFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRtYXRjaGVyOiBzdGFydHNXaXRoKG9wdC5yZW1vdGVOYW1lKSxcclxuXHRcdFx0XHRjb21wb25lbnQ6IG9wdC5zaGFkb3dEb21QYXNzaXZlID8gQXJpbFdlYkNvbXBvbmVudFdyYXBwZXIgOiBTaGFkb3dET01XcmFwcGVyQ29tcG9uZW50LFxyXG5cdFx0XHRcdGRhdGE6IG9wdCBhcyBXZWJDb21wb25lbnRXcmFwcGVyT3B0aW9ucyxcclxuXHRcdFx0XHRjYW5BY3RpdmF0ZTogW0F1dGhHdWFyZF1cclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiByb3V0ZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZpbHRlck1lbnVJdGVtc0J5Um9sZShpdGVtczogUGx1Z2luTWVudUl0ZW1bXSk6IFBsdWdpbk1lbnVJdGVtW10ge1xyXG5cdFx0cmV0dXJuIGl0ZW1zLnJlZHVjZTxQbHVnaW5NZW51SXRlbVtdPigoYWNjLCBpdGVtKSA9PiB7XHJcblx0XHRcdGlmICghdGhpcy5oYXNQZXJtaXNzaW9uKGl0ZW0ucGVybWl0dGVkUm9sZXMpKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFjYztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZmlsdGVyZWRJdGVtID0geyAuLi5pdGVtIH07XHJcblxyXG5cdFx0XHRpZiAoZmlsdGVyZWRJdGVtLml0ZW1zPy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmaWx0ZXJlZEl0ZW0uaXRlbXMgPSB0aGlzLmZpbHRlck1lbnVJdGVtc0J5Um9sZShmaWx0ZXJlZEl0ZW0uaXRlbXMpO1xyXG5cclxuXHRcdFx0XHRpZiAoIWZpbHRlcmVkSXRlbS5pdGVtcy5sZW5ndGggJiYgIWZpbHRlcmVkSXRlbS5yb3V0ZXJMaW5rKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YWNjLnB1c2goZmlsdGVyZWRJdGVtKTtcclxuXHRcdFx0cmV0dXJuIGFjYztcclxuXHRcdH0sIFtdKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzUGVybWlzc2lvbihwZXJtaXR0ZWRSb2xlcz86IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIXBlcm1pdHRlZFJvbGVzPy5sZW5ndGgpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcGVybWl0dGVkUm9sZXMuc29tZSgocm9sZSkgPT4gdGhpcy51c2VyUm9sZXMuaW5jbHVkZXMocm9sZSkpO1xyXG5cdH1cclxufVxyXG4iXX0=
@@ -1,4 +1,5 @@
1
- import { DestroyRef, Injectable, effect, inject } from '@angular/core';
1
+ import { DestroyRef, Injectable, inject } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
2
3
  import { RouteCloseService } from './route-close.service';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
@@ -51,8 +52,7 @@ export class CustomRouteReuseStrategy {
51
52
  * type-safe ve handle GC'ye uğradığında bellek otomatik temizlenir.
52
53
  */
53
54
  this.preservedCustomEls = new WeakMap();
54
- effect(() => {
55
- const key = this.routeCloseService.deleteRoute().key;
55
+ this.routeCloseService.deleteRoute$.pipe(takeUntilDestroyed()).subscribe((key) => {
56
56
  if (!key)
57
57
  return;
58
58
  console.log(`[Strategy] cleanup tetiklendi key="${key}" storedKeys=[${Object.keys(this.storedRoutes).join(',')}]`);
@@ -607,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
607
607
  providedIn: 'root'
608
608
  }]
609
609
  }], ctorParameters: () => [] });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJvdXRlLXJldXNlLXN0cmF0ZWd5LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9hcHBzL3NyYy9jdXN0b20tcm91dGUtcmV1c2Utc3RyYXRlZ3kuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQWMsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJNUcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBNkIxRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQVdwQztRQVZBLHNCQUFpQixHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxpQkFBWSxHQUF3QyxFQUFFLENBQUM7UUFFdkQ7Ozs7V0FJRztRQUNLLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUE0QyxDQUFDO1FBR3BGLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ3JELElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU87WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsR0FBRyxpQkFBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFNUIscUZBQXFGO1lBQ3JGLHlGQUF5RjtZQUN6RixtRkFBbUY7WUFDbkYsdUZBQXVGO1lBQ3ZGLDhDQUE4QztZQUM5QyxJQUFJLEdBQUcsQ0FB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O1FBQzNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUM7UUFDckYsT0FBTyxDQUFDLEdBQUcsQ0FDVix3Q0FBd0MsV0FBVyxhQUFhLFNBQVMsS0FBSyxVQUFVLFdBQVcsT0FBTyxLQUFLLFFBQVEsR0FBRyxDQUMxSCxDQUFDO1FBQ0YsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQzs4R0EzakJXLHdCQUF3QjtrSEFBeEIsd0JBQXdCLGNBRnhCLE1BQU07OzJGQUVOLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgRGV0YWNoZWRSb3V0ZUhhbmRsZSwgUm91dGVSZXVzZVN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBsdWdpbkNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFJvdXRlQ2xvc2VTZXJ2aWNlIH0gZnJvbSAnLi9yb3V0ZS1jbG9zZS5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBBbmd1bGFyIFJvdXRlciBgRGV0YWNoZWRSb3V0ZUhhbmRsZWAnxLEgcmVzbWkgb2xhcmFrIG9wYXF1ZSAoYHt9YCkgYmlyIHR5cGUuXHJcbiAqIEludGVybmFsIHNoYXBlJ2kgcHVibGljIEFQSSdkYSB5b2ssIGFtYSBiaXogcHJlc2VydmUvcmVzdG9yZSBpw6dpbiBjb21wb25lbnRSZWYnZVxyXG4gKiBlcmnFn21lbWl6IGdlcmVraXlvci4gQnUgecO8emRlbiBpbnRlcm5hbCB5YXDEsXnEsSBtaW5pbWFsIMWfZWtpbGRlIG1vZGVsbGl5b3J1ei5cclxuICovXHJcbnR5cGUgSW50ZXJuYWxEZXRhY2hlZFJvdXRlSGFuZGxlID0gRGV0YWNoZWRSb3V0ZUhhbmRsZSAmIHtcclxuXHRjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8dW5rbm93bj47XHJcbn07XHJcblxyXG4vKipcclxuICogQXJpbFdlYkNvbXBvbmVudFdyYXBwZXIgaW5zdGFuY2UnxLFuZGEgc3RyYXRlZ3knbmluIGfDtnpsZXllY2XEn2kgYWxhbmxhci5cclxuICogV3JhcHBlcidhIGRvxJ9ydWRhbiBiYcSfxLFtbMSxIG9sbWFtYWsgacOnaW4gZHVjay10eXBpbmcgaWxlIG1pbmltYWwgaW50ZXJmYWNlLlxyXG4gKiBgbmVlZHNSZXN0b3JlYCB2ZSBgcHJvcHNVcGRhdGVkYCBiYXlyYWtsYXLEsSB3cmFwcGVyIGlsZSBzdHJhdGVneSBhcmFzxLFuZGFraSBzw7Z6bGXFn21lOlxyXG4gKiBzdHJhdGVneSBgcmV0cmlldmVgIHPEsXJhc8SxbmRhIHNldCBlZGVyLCB3cmFwcGVyIGBuZ0FmdGVyVmlld0luaXRgJ3RlIHTDvGtldGlyLlxyXG4gKi9cclxudHlwZSBXcmFwcGVySW5zdGFuY2UgPSB7XHJcblx0ZWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG5cdHZjPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblx0cHJvcHNVcGRhdGVkPzogYm9vbGVhbjtcclxuXHRuZWVkc1Jlc3RvcmU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuaW50ZXJmYWNlIFByZXNlcnZlZEN1c3RvbUVsIHtcclxuXHRlbDogSFRNTEVsZW1lbnQ7XHJcblx0cGxhY2Vob2xkZXI6IENvbW1lbnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUYWItYmF6bMSxIG5hdmlnYXRpb24gacOnaW4gY3VzdG9tIGBSb3V0ZVJldXNlU3RyYXRlZ3lgLlxyXG4gKlxyXG4gKiAjIyBUYWIgaXpvbGFzeW9udSAoYF90YWJgIHF1ZXJ5IHBhcmFtKVxyXG4gKiBgTmF2U2VydmljZWAgaGVyIHRhYidhIHVuaXF1ZSBgdGFiSWRgIMO8cmV0aXIgdmUgVVJMJ2UgYD9fdGFiPTx0YWJJZD5gIHF1ZXJ5IHBhcmFtXHJcbiAqIGVrbGVyLiBTdHJhdGVneSBidSBwYXJhbSfEsSByb3V0ZSBrZXknaW4gcGFyw6dhc8SxIHlhcGFyOlxyXG4gKiAgLSBNYXRjaGVyICh3ZWIgY29tcG9uZW50KSByb3V0ZSdsYXI6IGBtZmU6JHtyZW1vdGVOYW1lfToke3RhYklkfWBcclxuICogIC0gTm9ybWFsIHJvdXRlJ2xhcjogYHBhdGhGcm9tUm9vdGAgKyB0w7xtIHF1ZXJ5UGFyYW1zICh6YXRlbiBgX3RhYmAgZGFoaWwpXHJcbiAqXHJcbiAqIFNvbnXDpzogYXluxLEgc2F5ZmFuxLFuIGlraSB0YWInaSBgc3RvcmVkUm91dGVzYCDDvHplcmluZGUgZmFya2zEsSBzbG90J2xhcmEgeWF6xLFsxLFyXHJcbiAqIOKGkiBiYcSfxLFtc8SxeiBjb21wb25lbnRSZWYnbGVyLCBiYcSfxLFtc8SxeiBzdGF0ZS4gYHNob3VsZFJldXNlUm91dGVgIG1hdGNoZXIga2FyxZ/EsWxhxZ90xLFybWFzxLFcclxuICogYHRhYklkYCBmYXJrxLFuxLEgZGEgZGlra2F0ZSBhbMSxciDigJQgdGFiIGRlxJ9pxZ9pbWluZGUgZnJlc2ggY29tcG9uZW50IG9sdcWfdXIuXHJcbiAqXHJcbiAqICMjIE1pbWFyaTogaWtpIGJhxJ/EsW1zxLF6IGluc3RhbmNlXHJcbiAqIEJ1IHN0cmF0ZWd5IGhlbSBgYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50c2AndGUgaGVtIGhlciBNRkUgcmVtb3RlJ3VudW5cclxuICogYGFyaWwvYm9vdC9tZmUvc3JjL2Jvb3RzdHJhcC50c2AnaW5kZSBwcm92aWRlciBvbGFyYWsgdmVyaWxpeW9yLiBDbGFzc1xyXG4gKiBgcHJvdmlkZWRJbjogJ3Jvb3QnYCBvbGR1xJ91IGnDp2luICoqaGVyIHJvb3QgaW5qZWN0b3InZGEgQVlSSSBpbnN0YW5jZSoqIHlhxZ9hci5cclxuICogxLBraSBpbnN0YW5jZSBiYcSfxLFtc8SxeiBgc3RvcmVkUm91dGVzYCBtYXAnaSB0dXRhciB2ZSBiaXJiaXJpbmRlbiBoYWJlcnNpemRpcjpcclxuICpcclxuICogLSAqKkhvc3QgaW5zdGFuY2UqKjogbWF0Y2hlciByb3V0ZSdsYXLEsSB5w7ZuZXRpcjsga2V5IGBtZmU6JHtyZW1vdGVOYW1lfToke3RhYklkfWAuXHJcbiAqICAgVGFiIGthcGFuxLFwIGBtZmU6d2RtOmFiYzEyM2Agc2lsaW5kacSfaW5kZSBlZmZlY3QgcmVtb3RlJ2EgYWl0IGAjMC93ZG0vLi4uYFxyXG4gKiAgIHByZWZpeCdsaSBWRSBgX3RhYj1hYmMxMjNgIGnDp2VyZW4gY2hpbGQga2V5J2xlcmkgZGUgdGVtaXpsZXIuXHJcbiAqIC0gKipNRkUgaW5zdGFuY2UqKiAoaGVyIHJlbW90ZSd1biBrZW5kaSBpw6dpbmRlKTogbm9ybWFsIHJvdXRlJ2xhciBpw6dpbiDDp2FsxLHFn8Sxci5cclxuICogICBRdWVyeSBwYXJhbXMgemF0ZW4gYGdldFJvdXRlS2V5YCDDp8Sxa3TEsXPEsW5hIGRhaGlsIG9sZHXEn3UgacOnaW4gdGFiIGl6b2xhc3lvbnVcclxuICogICBkb8SfYWwgb2xhcmFrIGdlbGlyIOKAlCBlayDDtnplbCBkYXZyYW7EscWfIGdlcmVrbWV6LlxyXG4gKlxyXG4gKiAjIyBQbHVnaW4gY3VzdG9tIGVsZW1lbnQgcHJlc2VydmF0aW9uXHJcbiAqIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCBkZXRhY2hlZCB2aWV3J2Rha2kgYDxtZC1zZWFyY2g+YCBnaWJpIGN1c3RvbVxyXG4gKiBlbGVtZW50J2xlcmkgaGlkZGVuIGNvbnRhaW5lcidhIHRhxZ/EsXIg4oCUIGVsZW1lbnQgZG9jdW1lbnQndGFuIGF5csSxbG1heiwgQW5ndWxhclxyXG4gKiBFbGVtZW50cyBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgIDEwbXMgZGVzdHJveSB0aW1lcifEsSB0ZXRpa2xlbm1leiwgcGx1Z2luXHJcbiAqIGNvbXBvbmVudFJlZidpIHZlIGRhaGlsaSBzdGF0ZSdpIChmb3JtIGlucHV0LCBzZWFyY2ggc29udcOnbGFyxLEpIGtvcnVudXIuXHJcbiAqXHJcbiAqICMjIEJpbGluZW4gc8SxbsSxcmxhbWFsYXJcclxuICogLSBgc2hvdWxkRGV0YWNoYCBtYXRjaGVyIHJvdXRlJ2xhciBpw6dpbiB0YWJJZCB5b2trZW4gZmFsc2UgZMO2bmVyICh0YWJzxLF6IG9ycGhhblxyXG4gKiAgIGhhbmRsZSBvbHXFn21hc8SxbiksIGRpxJ9lciBkdXJ1bWxhcmRhIGB0cnVlYCDigJQgdMO8bSBkZXRhY2hlZCByb3V0ZSdsYXIgY2FjaGUnbGVuaXIuXHJcbiAqICAgTWVtb3J5IGxlYWsnaSBzxLFuxLFybGFtYWsgacOnaW4gYE5hdlNlcnZpY2VgIHRhYiBzYXnEsXPEsW7EsSBgTUFYX1RBQlNgIGlsZSBrxLFzxLF0bGFyXHJcbiAqICAgdmUgc29uIHRhYiBrYXBhdMSxbGTEscSfxLFuZGEgZWZmZWN0IHJlbW90ZSd1biB0w7xtIGNoaWxkIGtleSdsZXJpbmkgdGVtaXpsZXIuIFlpbmUgZGVcclxuICogICB0YWIgacOnaW5kZSBhw6fEsWxhbiBkZXRhaWwvZWRpdCBnaWJpIHBhcmFtZXRyZWxpIGFsdCBzYXlmYWxhcsSxbiBoYW5kbGUnbGFyxLEsIHBhcmVudFxyXG4gKiAgIHRhYiBrYXBhbmFuYSBrYWRhciBzdG9yZWRSb3V0ZXMndGEga2FsxLFyLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5IGltcGxlbWVudHMgUm91dGVSZXVzZVN0cmF0ZWd5LCBPbkRlc3Ryb3kge1xyXG5cdHJvdXRlQ2xvc2VTZXJ2aWNlOiBSb3V0ZUNsb3NlU2VydmljZSA9IGluamVjdChSb3V0ZUNsb3NlU2VydmljZSk7XHJcblx0c3RvcmVkUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBEZXRhY2hlZFJvdXRlSGFuZGxlPiA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBgKGRldGFjaGVkVHJlZSBhcyBhbnkpLl9fYXJpbFByZXNlcnZlZEN1c3RvbUVscyA9IFsuLi5dYCBydW50aW1lIHByb3BlcnR5XHJcblx0ICogZWtsZW1layB5ZXJpbmUgaGFuZGxlJ8SxIGtleSBvbGFyYWsga3VsbGFuYW4gYmlyIFdlYWtNYXAgdHV0dXlvcnV6IOKAlFxyXG5cdCAqIHR5cGUtc2FmZSB2ZSBoYW5kbGUgR0MneWUgdcSfcmFkxLHEn8SxbmRhIGJlbGxlayBvdG9tYXRpayB0ZW1pemxlbmlyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcHJlc2VydmVkQ3VzdG9tRWxzID0gbmV3IFdlYWtNYXA8RGV0YWNoZWRSb3V0ZUhhbmRsZSwgUHJlc2VydmVkQ3VzdG9tRWxbXT4oKTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLnJvdXRlQ2xvc2VTZXJ2aWNlLmRlbGV0ZVJvdXRlKCkua2V5O1xyXG5cdFx0XHRpZiAoIWtleSkgcmV0dXJuO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBjbGVhbnVwIHRldGlrbGVuZGkga2V5PVwiJHtrZXl9XCIgc3RvcmVkS2V5cz1bJHtPYmplY3Qua2V5cyh0aGlzLnN0b3JlZFJvdXRlcykuam9pbignLCcpfV1gKTtcclxuXHRcdFx0dGhpcy5wcm9jZXNzQ2xlYW51cEtleShrZXkpO1xyXG5cclxuXHRcdFx0Ly8gQ3Jvc3MtaW5qZWN0b3IgeWF5xLFuOiBgUm91dGVDbG9zZVNlcnZpY2VgIGBwcm92aWRlZEluOiAncm9vdCdgIG9sZHXEn3UgacOnaW4gaG9zdCB2ZVxyXG5cdFx0XHQvLyBoZXIgTUZFIHJlbW90ZSd1bmRhIEFZUkkgaW5zdGFuY2UgeWHFn2FyLiBIb3N0J3RhbiB0ZXRpa2xlbmVuIGNsZWFudXAgTUZFIHN0cmF0ZWd5J3NpbmlcclxuXHRcdFx0Ly8gb3RvbWF0aWsgdXlhbmTEsXJtYXouIFdpbmRvdyBldmVudCBpbGUgc2lueWFsIHlhecSxbmxhecSxcCBNRkUgc3RyYXRlZ3knc2luaW4ga2VuZGlcclxuXHRcdFx0Ly8gYHN0b3JlZFJvdXRlc2AndW51IHRlbWl6bGVtZXNpbmkgc2HEn2zEsXlvcnV6IChha3NpIHRha2RpcmRlIE1GRSdkZSBoaWRkZW4gY29udGFpbmVyJ2FcclxuXHRcdFx0Ly8gdGHFn8Sxbm3EscWfIHBsdWdpbiBlbGVtZW50J2xlcmkgb3JwaGFuIGthbMSxcikuXHJcblx0XHRcdGlmIChrZXkuc3RhcnRzV2l0aCgnbWZlOicpKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGNoZXJLZXkoa2V5KTtcclxuXHRcdFx0XHRpZiAocGFyc2VkKSB7XHJcblx0XHRcdFx0XHR3aW5kb3cuZGlzcGF0Y2hFdmVudChcclxuXHRcdFx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KCdhcmlsOnJlbW90ZS1jbGVhbnVwJywge1xyXG5cdFx0XHRcdFx0XHRcdGRldGFpbDogeyByZW1vdGVOYW1lOiBwYXJzZWQucmVtb3RlTmFtZSwgdGFiSWQ6IHBhcnNlZC50YWJJZCB9XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gS2FyxZ/EsSB5w7ZuZGUgKGNyb3NzLWluamVjdG9yKTogaG9zdCBzdHJhdGVneSduaW4geWF5xLFubGFkxLHEn8SxIGBhcmlsOnJlbW90ZS1jbGVhbnVwYFxyXG5cdFx0Ly8gZXZlbnQnaW5pIGhlciBNRkUgc3RyYXRlZ3kgaW5zdGFuY2UnxLEgeWFrYWxhciwga2VuZGkgYHN0b3JlZFJvdXRlc2AndW5kYWtpIG8gcmVtb3RlJ2FcclxuXHRcdC8vICh2ZSB2YXJzYSBvIHRhYklkJ3llKSBhaXQga2V5J2xlcmkgdGVtaXpsZXIuIEhvc3Qgc3RyYXRlZ3kgZGUgYnUgbGlzdGVuZXInYSBzYWhpcFxyXG5cdFx0Ly8gYW1hIGtlbmRpIGAjMC8ke3JlbW90ZU5hbWV9Ly4uLmAga2V5J2xlcmkgb2xtYWTEscSfxLEgacOnaW4gbm8tb3Agw6dhbMSxxZ/EsXIgKGfDvHZlbmxpKS5cclxuXHRcdGNvbnN0IGNsZWFudXBIYW5kbGVyID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XHJcblx0XHRcdGNvbnN0IGRldGFpbCA9IChlIGFzIEN1c3RvbUV2ZW50PHsgcmVtb3RlTmFtZT86IHN0cmluZzsgdGFiSWQ/OiBzdHJpbmcgfCBudWxsIH0+KS5kZXRhaWw7XHJcblx0XHRcdGNvbnN0IHJlbW90ZU5hbWUgPSBkZXRhaWw/LnJlbW90ZU5hbWU7XHJcblx0XHRcdGlmICghcmVtb3RlTmFtZSkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCB0YWJJZCA9IGRldGFpbD8udGFiSWQgPz8gbnVsbDtcclxuXHRcdFx0Y29uc3QgcHJlZml4ID0gYCMwLyR7cmVtb3RlTmFtZX1gO1xyXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpLmZpbHRlcigoaykgPT4ge1xyXG5cdFx0XHRcdGlmICghay5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHQvLyB0YWJJZCB2ZXJpbGRpeXNlIFNBREVDRSBvIHRhYidhIGFpdCBjaGlsZCBoYW5kbGUnbGFyxLEgdGVtaXpsZS4gQWtzaSB0YWtkaXJkZVxyXG5cdFx0XHRcdC8vIGF5bsSxIHJlbW90ZSd1biBiYcWfa2EgdGFiJ2xlcmluaW4gc3RhdGUnaSBkZSB5YW5sxLHFn2zEsWtsYSBzaWxpbmlyLlxyXG5cdFx0XHRcdGlmICh0YWJJZCAmJiAhay5pbmNsdWRlcyhgX3RhYj0ke3RhYklkfWApKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSByZXR1cm47XHJcblx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIGNyb3NzLWluamVjdG9yIGNsZWFudXAgcmVtb3RlTmFtZT1cIiR7cmVtb3RlTmFtZX1cIiB0YWJJZD1cIiR7dGFiSWQgPz8gJyonfVwiIGtleXM9WyR7a2V5cy5qb2luKCcsJyl9XWApO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xyXG5cdFx0XHRcdHRoaXMuY2xlYW51cFN0b3JlZEhhbmRsZSh0aGlzLnN0b3JlZFJvdXRlc1trXSk7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMuc3RvcmVkUm91dGVzW2tdO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FyaWw6cmVtb3RlLWNsZWFudXAnLCBjbGVhbnVwSGFuZGxlcik7XHJcblx0XHQvLyBTdHJhdGVneSBgcHJvdmlkZWRJbjogJ3Jvb3QnYCDihpIgcm9vdCBpbmplY3RvciBkZXN0cm95IGVkaWxkacSfaW5kZSBsaXN0ZW5lcifEsSBrYWxkxLFyLlxyXG5cdFx0Ly8gUHJhdGlrdGUgdXp1biDDtm3DvHJsw7wgYW1hIHRlc3Qgb3J0YW3EsSB2ZSBnZWxlY2VrdGVraSBpZnJhbWUgdmIuIG11bHRpLXdpbmRvd1xyXG5cdFx0Ly8gc2VuYXJ5b2xhcmRhIG9ycGhhbiBsaXN0ZW5lciBixLFyYWttYW1hayBpw6dpbiBkZWZlbnNpdmUuXHJcblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdhcmlsOnJlbW90ZS1jbGVhbnVwJywgY2xlYW51cEhhbmRsZXIpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluamVjdG9yIGRlc3Ryb3kgZWRpbGRpxJ9pbmRlIOKAlCBoaWJyaXQgbW9kZGEgaGVyIHRhYifEsW4gY2hpbGQgYEVudmlyb25tZW50SW5qZWN0b3JgJ8SxIHRhYlxyXG5cdCAqIGthcGFuxLFuY2EgYGRlc3Ryb3koKWAgZWRpbGlyOyBidSBzdHJhdGVneSBgcHJvdmlkZWRJbjoncm9vdCdgIG9sZHXEn3VuZGFuIGNoaWxkIGluamVjdG9yJ2RhXHJcblx0ICogKHJvb3Qtc2NvcGUpIG1hdGVyaWFsaXplIG9sbXXFnyBpbnN0YW5jZSBkYSB5xLFrxLFsxLFyIOKAlCBgc3RvcmVkUm91dGVzYCd0YSBrYWxhbiBUw5xNIGRldGFjaGVkXHJcblx0ICogaGFuZGxlJ2xhcsSxIHRlbWl6bGVyLiBBa3NpIGhhbGRlIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCBpbGUgaGlkZGVuIGNvbnRhaW5lcidhXHJcblx0ICogdGHFn8Sxbm3EscWfIHBsdWdpbiBjdXN0b20gZWxlbWVudCdsZXJpICjDtnJuLiBgPG1kLXNlYXJjaD5gKSBvcnBoYW4ga2FsxLFyIChtZW1vcnkgbGVhayk6IE1GRVxyXG5cdCAqIGludGVybmFsIHJvdXRlIGtleSdsZXJpIGBfdGFiYCB0YcWfxLFtYWTEscSfxLEgacOnaW4gYGFyaWw6cmVtb3RlLWNsZWFudXBgIGNyb3NzLWluamVjdG9yIHRlbWl6bGnEn2lcclxuXHQgKiBvbmxhcmEgdWxhxZ9hbWF6LiBJbmplY3Rvci1kZXN0cm95IGJhemzEsSBidSBzw7xww7xybWUgZ2FyYW50aWxpIHZlIGlkZW1wb3RlbnR0aXIuXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpO1xyXG5cdFx0aWYgKGtleXMubGVuZ3RoKSBjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBuZ09uRGVzdHJveSDihpIgJHtrZXlzLmxlbmd0aH0gc3RvcmVkIGhhbmRsZSB0ZW1pemxlbml5b3IgKHRhYiBrYXBhbmTEsSlgKTtcclxuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuXHRcdFx0dGhpcy5jbGVhbnVwU3RvcmVkSGFuZGxlKHRoaXMuc3RvcmVkUm91dGVzW2tleV0pO1xyXG5cdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNba2V5XTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZlcmlsZW4ga2V5IGnDp2luIGRpcmVjdCArIGNoaWxkIGNsZWFudXAgdXlndWxhci4gRWZmZWN0IGnDp2luZGVuIGF5csSxxZ90xLFyxLFsbcSxxZ8gaGVscGVyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcHJvY2Vzc0NsZWFudXBLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdC8vIERvxJ9ydWRhbiBlxZ9sZcWfZW4ga2V5IHZhcnNhIG9udSBzaWwuXHJcblx0XHRpZiAodGhpcy5zdG9yZWRSb3V0ZXNba2V5XSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBjbGVhbnVwIOKGkiBkaXJlY3QgbWF0Y2ggXCIke2tleX1cImApO1xyXG5cdFx0XHR0aGlzLmNsZWFudXBTdG9yZWRIYW5kbGUodGhpcy5zdG9yZWRSb3V0ZXNba2V5XSk7XHJcblx0XHRcdGRlbGV0ZSB0aGlzLnN0b3JlZFJvdXRlc1trZXldO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1hdGNoZXIga2V5IHNpbGluZGnEn2luZGUgKGBtZmU6d2RtOmFiY2AgZ2liaSkgbyByZW1vdGUnYSBhaXQg4oCUIHZhcnNhIG8gdGFiJ2EgYWl0IOKAlFxyXG5cdFx0Ly8gaW50ZXJuYWwgcm91dGUgaGFuZGxlJ2xhcsSxbsSxIGRhIHRlbWl6bGUuIENvbnZlbnRpb246IG1hdGNoZXIga2V5XHJcblx0XHQvLyBgbWZlOiR7cmVtb3RlTmFtZX1gIHZleWEgYG1mZToke3JlbW90ZU5hbWV9OiR7dGFiSWR9YCwgbm9ybWFsIGtleSdsZXJcclxuXHRcdC8vIGAjMC8ke3JlbW90ZU5hbWV9Ly4uLj8uLi4mX3RhYj0ke3RhYklkfWAgZm9ybWF0xLFuZGEuXHJcblx0XHRpZiAoa2V5LnN0YXJ0c1dpdGgoJ21mZTonKSkge1xyXG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlTWF0Y2hlcktleShrZXkpO1xyXG5cdFx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCB7IHJlbW90ZU5hbWUsIHRhYklkIH0gPSBwYXJzZWQ7XHJcblx0XHRcdGNvbnN0IHByZWZpeCA9IGAjMC8ke3JlbW90ZU5hbWV9YDtcclxuXHRcdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuc3RvcmVkUm91dGVzKSkge1xyXG5cdFx0XHRcdGlmICghay5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdC8vIHRhYklkIHZlcmlsZGl5c2Ugc2FkZWNlIG8gdGFiJ2EgYWl0IGNoaWxkIGhhbmRsZSdsYXLEsSB0ZW1pemxlXHJcblx0XHRcdFx0aWYgKHRhYklkICYmICFrLmluY2x1ZGVzKGBfdGFiPSR7dGFiSWR9YCkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIGNsZWFudXAg4oaSIGNoaWxkIG1hdGNoIFwiJHtrfVwiYCk7XHJcblx0XHRcdFx0dGhpcy5jbGVhbnVwU3RvcmVkSGFuZGxlKHRoaXMuc3RvcmVkUm91dGVzW2tdKTtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNba107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBtZmU6JHtyZW1vdGVOYW1lfWAgdmV5YSBgbWZlOiR7cmVtb3RlTmFtZX06JHt0YWJJZH1gIGZvcm1hdMSxbmRha2kgbWF0Y2hlciBrZXknaSBwYXJzZSBlZGVyLlxyXG5cdCAqIHRhYklkIHlva3NhIGBudWxsYCBkw7ZuZXIgKGdlcml5ZSBkw7Zuw7xrIHV5dW1sdWx1azogbGVnYWN5IMOnYcSfcsSxbGFyIHRhYklkIHZlcm1leWViaWxpcikuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwYXJzZU1hdGNoZXJLZXkoa2V5OiBzdHJpbmcpOiB7IHJlbW90ZU5hbWU6IHN0cmluZzsgdGFiSWQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFrZXkuc3RhcnRzV2l0aCgnbWZlOicpKSByZXR1cm4gbnVsbDtcclxuXHRcdGNvbnN0IHRhaWwgPSBrZXkuc3Vic3RyaW5nKDQpO1xyXG5cdFx0Y29uc3QgY29sb25JZHggPSB0YWlsLmluZGV4T2YoJzonKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlbW90ZU5hbWU6IGNvbG9uSWR4ID09PSAtMSA/IHRhaWwgOiB0YWlsLnN1YnN0cmluZygwLCBjb2xvbklkeCksXHJcblx0XHRcdHRhYklkOiBjb2xvbklkeCA9PT0gLTEgPyBudWxsIDogdGFpbC5zdWJzdHJpbmcoY29sb25JZHggKyAxKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3JlZCBoYW5kbGUnxLEgdGFtYW1lbiB0ZW1pemxlOiBoaWRkZW4gY29udGFpbmVyJ2Rha2kgcHJlc2VydmVkIGVsZW1lbnQnbGVyaSAocGx1Z2luXHJcblx0ICogY3VzdG9tIGVsZW1lbnQnbGVyaSArIEFyaWxXZWJDb21wb25lbnRXcmFwcGVyJ8SxbiBgPGFwcC14eHg+YCBlbGVtZW50J2kpIERPTSdkYW4ga2FsZMSxcixcclxuXHQgKiBzb25yYSBBbmd1bGFyIGBjb21wb25lbnRSZWYuZGVzdHJveSgpYCBpbGUgdmlldyB0cmVlJ3NpbmkgZGVzdHJveSBldC5cclxuXHQgKlxyXG5cdCAqIGBjb21wb25lbnRSZWYuZGVzdHJveSgpYCB0ZWsgYmHFn8SxbmEgeWV0ZXJsaSBkZcSfaWw6IEFuZ3VsYXIgc2FkZWNlIHZpZXcgdHJlZSdzaW5pIGJpbGlyLFxyXG5cdCAqIGJpemltIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCB2ZSBgcHJlc2VydmVXZWJDb21wb25lbnRFbGVtZW50YCBpbGUgaGlkZGVuXHJcblx0ICogY29udGFpbmVyJ2EgbWFudWVsIHRhxZ/EsW5hbiBlbGVtZW50J2xlcmRlbiBoYWJlcmkgeW9rdHVyIOKGkiBvbmxhciBvcnBoYW4ga2FsxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY2xlYW51cFN0b3JlZEhhbmRsZShoYW5kbGU6IERldGFjaGVkUm91dGVIYW5kbGUgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcblx0XHRpZiAoIWhhbmRsZSkgcmV0dXJuOyAvLyBBbmd1bGFyIFJvdXRlcifEsW4gYHN0b3JlKHJvdXRlLCBudWxsKWAgaWxlIGLEsXJha3TEscSfxLEgb3JwaGFuIGtleSdsZXIgacOnaW4gZGVmZW5zaXZlIGd1YXJkLlxyXG5cdFx0Y29uc3QgaGlkZGVuQ29udGFpbmVyID0gdGhpcy5nZXRIaWRkZW5Db250YWluZXIoKTtcclxuXHJcblx0XHQvLyAxLiBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlIGlsZSB0YcWfxLFuYW4gcGx1Z2luIGVsZW1lbnQnbGVyaSAow7Zybi4gPG1kLXNlYXJjaD4pXHJcblx0XHRjb25zdCBwcmVzZXJ2ZWQgPSB0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5nZXQoaGFuZGxlKTtcclxuXHRcdGlmIChwcmVzZXJ2ZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCB7IGVsIH0gb2YgcHJlc2VydmVkKSB7XHJcblx0XHRcdFx0aWYgKGhpZGRlbkNvbnRhaW5lci5jb250YWlucyhlbCkpIHtcclxuXHRcdFx0XHRcdGhpZGRlbkNvbnRhaW5lci5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucHJlc2VydmVkQ3VzdG9tRWxzLmRlbGV0ZShoYW5kbGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIDIuIHByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudCBpbGUgdGHFn8SxbmFuIHdyYXBwZXIgZWxlbWVudCdpICjDtnJuLiA8YXBwLXdkbT4pXHJcblx0XHRjb25zdCBjb21wb25lbnRSZWYgPSAoaGFuZGxlIGFzIEludGVybmFsRGV0YWNoZWRSb3V0ZUhhbmRsZSkuY29tcG9uZW50UmVmO1xyXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWY/Lmluc3RhbmNlIGFzIFdyYXBwZXJJbnN0YW5jZSB8IHVuZGVmaW5lZDtcclxuXHRcdGlmIChpbnN0YW5jZT8uZWxlbWVudCkge1xyXG5cdFx0XHQvLyBGbGFnJ2kgdGVtaXpsZSBraSByZW1vdmVDaGlsZCBzb25yYXPEsSB0ZXRpa2xlbmVuIGRpc2Nvbm5lY3RlZENhbGxiYWNrIEFwcGxpY2F0aW9uJ8SxXHJcblx0XHRcdC8vIGdlcsOnZWt0ZW4gZGVzdHJveSBldHNpbiDigJQgYWtzaSBoYWxkZSBNRkVBcHBFbGVtZW50IG9ycGhhbiBrYWzEsXIgKG1lbW9yeSBsZWFrKS5cclxuXHRcdFx0ZGVsZXRlIChpbnN0YW5jZS5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaD86IGJvb2xlYW4gfSkuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2g7XHJcblx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoaW5zdGFuY2UuZWxlbWVudCkpIHtcclxuXHRcdFx0XHRoaWRkZW5Db250YWluZXIucmVtb3ZlQ2hpbGQoaW5zdGFuY2UuZWxlbWVudCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAzLiBBbmd1bGFyIHZpZXcgdHJlZSdzaW5pIGRlc3Ryb3kgZXRcclxuXHRcdGNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWF0Y2hlciAoTUZFKSByb3V0ZSdsYXIgacOnaW4gdGFiSWQgem9ydW5sdS4gYGdldFRhYklkRnJvbVJvdXRlYCBVUkwgcXVlcnlQYXJhbXMgK1xyXG5cdCAqIGhpc3Rvcnkuc3RhdGUnaSBva3VyLiBIacOnYmlyIGtheW5hayB0YWJJZCB2ZXJtZXpzZSAoaWxrIG5hdmlnYXRpb24gaW50ZXJpbSdpKSBkZXRhY2hcclxuXHQgKiBlZGlsbWV6OyBgZmlyc3RDaGVja0ZvclJvdXRlYCBgX3RhYmAgZWtsZXlpcCB5ZW5pZGVuIG5hdmlnYXRlIGVkZWNlay5cclxuXHQgKi9cclxuXHRzaG91bGREZXRhY2gocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmlzTWF0Y2hlclJvdXRlKHJvdXRlKSAmJiAhdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkRGV0YWNoIGtleT1cIiR7dGhpcy5nZXRSb3V0ZUtleShyb3V0ZSl9XCIg4oaSIGZhbHNlIChtYXRjaGVyIHJvdXRlLCB0YWJJZCB5b2spYCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHQvLyBBbmd1bGFyIGBvdXRsZXQuZGV0YWNoKClgLCBgc3RvcmUoKWAnZGFuIMOWTkNFIMOnYWzEscWfxLFwIHdyYXBwZXIgdmlldyfEsW7EsSBET00nZGFuIHPDtmtlciDihpJcclxuXHRcdC8vIGnDp2luZGVraSBNRkUgYDxhcHAteHh4PmAgZWxlbWVudCdpIGRpc2Nvbm5lY3Qgb2x1ciB2ZSBiYXLEsW5kxLFyZMSxxJ/EsSBpZnJhbWUgKMO2cm4uIFN1cGVyc2V0IGVtYmVkKVxyXG5cdFx0Ly8gcmVsb2FkIG9sdXAgYXV0aCBoYW5kc2hha2UnaW5pIGthbMSxY8SxIGtheWJlZGVyLiBCdSB5w7x6ZGVuIGVsZW1lbnQnaSBIw4JMw4IgYmHEn2zEsXlrZW4sIGRldGFjaCd0ZW5cclxuXHRcdC8vIMOWTkNFIGF0b21pYyBgbW92ZUJlZm9yZWAgaWxlIGhpZGRlbiBjb250YWluZXInYSBhbMSxeW9ydXogKGJrei4gcHJlc2VydmVMaXZlRWxlbWVudEJlZm9yZURldGFjaCkuXHJcblx0XHRpZiAodGhpcy5pc01hdGNoZXJSb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0dGhpcy5wcmVzZXJ2ZUxpdmVFbGVtZW50QmVmb3JlRGV0YWNoKHJvdXRlKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHNob3VsZERldGFjaCBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiB0cnVlYCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHN0b3JlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBzdG9yZSBrZXk9XCIke3JvdXRlS2V5fVwiIGhhbmRsZT1gLCAhIWRldGFjaGVkVHJlZSk7XHJcblx0XHRpZiAoIWRldGFjaGVkVHJlZSkge1xyXG5cdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNbcm91dGVLZXldO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5pc01hdGNoZXJSb3V0ZShyb3V0ZSkgJiYgIXRoaXMuZ2V0VGFiSWRGcm9tUm91dGUocm91dGUpKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHN0b3JlIFNLSVAga2V5PVwiJHtyb3V0ZUtleX1cIiAobWF0Y2hlciByb3V0ZSwgdGFiSWQgeW9rKWApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnN0b3JlZFJvdXRlc1tyb3V0ZUtleV0gPSBkZXRhY2hlZFRyZWU7XHJcblx0XHR0aGlzLnByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudChkZXRhY2hlZFRyZWUpO1xyXG5cdFx0dGhpcy5wcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGRldGFjaGVkVHJlZSk7XHJcblx0fVxyXG5cclxuXHRzaG91bGRBdHRhY2gocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmlzTWF0Y2hlclJvdXRlKHJvdXRlKSAmJiAhdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkQXR0YWNoIGtleT1cIiR7dGhpcy5nZXRSb3V0ZUtleShyb3V0ZSl9XCIg4oaSIGZhbHNlIChtYXRjaGVyIHJvdXRlLCB0YWJJZCB5b2spYCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zdCBzaG91bGRBdHRhY2ggPSAhIXRoaXMuc3RvcmVkUm91dGVzW3JvdXRlS2V5XTtcclxuXHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHNob3VsZEF0dGFjaCBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiAke3Nob3VsZEF0dGFjaH0gKHN0b3JlZEtleXM9WyR7T2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpLmpvaW4oJywnKX1dKWApO1xyXG5cdFx0cmV0dXJuIHNob3VsZEF0dGFjaDtcclxuXHR9XHJcblxyXG5cdHJldHJpZXZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogRGV0YWNoZWRSb3V0ZUhhbmRsZSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuaXNNYXRjaGVyUm91dGUocm91dGUpICYmICF0aGlzLmdldFRhYklkRnJvbVJvdXRlKHJvdXRlKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zdCBoYW5kbGUgPSB0aGlzLnN0b3JlZFJvdXRlc1tyb3V0ZUtleV07XHJcblx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSByZXRyaWV2ZSBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiAke2hhbmRsZSA/ICdIQVMnIDogJ05VTEwnfWApO1xyXG5cdFx0aWYgKGhhbmRsZSkge1xyXG5cdFx0XHR0aGlzLnJlc3RvcmVXZWJDb21wb25lbnRFbGVtZW50KGhhbmRsZSk7XHJcblx0XHRcdHRoaXMucmVzdG9yZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGhhbmRsZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaGFuZGxlIHx8IG51bGw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXZWIgY29tcG9uZW50IGVsZW1lbnQnaW5pIGhpZGRlbiBjb250YWluZXInYSB0YcWfxLFyIChzdGF0ZSBrb3J1bm1hc8SxIGnDp2luKS5cclxuXHQgKlxyXG5cdCAqIEVsZW1lbnQnZSBgX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2hgIGZsYWcnaSB5YXrEsWzEsXI6IGByZW1vdmVDaGlsZGAgKyBgYXBwZW5kQ2hpbGRgXHJcblx0ICogYXJhc8SxbmRhIE1GRSBjdXN0b20gZWxlbWVudCdpbiBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgJ2kgdGV0aWtsZW5peW9yOyBmbGFnIG9yYWRha2lcclxuXHQgKiBkZXN0cm95IHRpbWVyJ8SxbsSxICoqZGV0ZXJtaW5pc3RpYyoqIMWfZWtpbGRlIGJ5cGFzcyBlZGVyLiBFc2tpZGVuIDUwbXMgaGFyZGNvZGVkIHRpbWVyXHJcblx0ICogeWFyxLHFnyBrb8WfdWx1IMO8cmV0aXlvcmR1ICh5YXZhxZ8gY2loYXpsYXJkYSBBcHBsaWNhdGlvbiBpc3RlbXNpeiBkZXN0cm95IG9sdXlvcmR1KS5cclxuXHQgKi9cclxuXHRwcml2YXRlIHByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudChkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGNvbXBvbmVudFJlZiA9IChkZXRhY2hlZFRyZWUgYXMgSW50ZXJuYWxEZXRhY2hlZFJvdXRlSGFuZGxlKS5jb21wb25lbnRSZWY7XHJcblx0XHRcdGlmICghY29tcG9uZW50UmVmKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBXcmFwcGVySW5zdGFuY2UgfCB1bmRlZmluZWQ7XHJcblx0XHRcdGlmICghY29tcG9uZW50SW5zdGFuY2U/LmVsZW1lbnQpIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnRJbnN0YW5jZS5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaD86IGJvb2xlYW4gfTtcclxuXHRcdFx0Y29uc3QgaGlkZGVuQ29udGFpbmVyID0gdGhpcy5nZXRIaWRkZW5Db250YWluZXIoKTtcclxuXHJcblx0XHRcdC8vIEZsYWcg4oCUIGZhbGxiYWNrIChtb3ZlQmVmb3JlIGRlc3Rla2xlbm1leWVuIHRhcmF5xLFjxLEpIHJlbW92ZUNoaWxkIHlhcHTEscSfxLFuZGEgZGlzY29ubmVjdGVkQ2FsbGJhY2tcclxuXHRcdFx0Ly8gYnVudSBva3V5dXAgZGVzdHJveSfEsSBhdGxhci4gbW92ZUJlZm9yZSB5b2x1bmRhIGNhbGxiYWNrIGhpw6cgdGV0aWtsZW5tZXogKGZsYWcgemFyYXJzxLF6IGthbMSxcikuXHJcblx0XHRcdGVsZW1lbnQuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2ggPSB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gYHNob3VsZERldGFjaGAgw6dvxJ91IGR1cnVtZGEgZWxlbWVudCdpIGRldGFjaCd0ZW4gw5ZOQ0UgemF0ZW4gdGHFn8SxZMSxIOKGkiBidXJhZGEgbm8tb3AuXHJcblx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoZWxlbWVudCkpIHJldHVybjtcclxuXHJcblx0XHRcdC8vIFRhxZ/EsW5tYWTEsXlzYSAow7ZyLiBzaG91bGREZXRhY2ggZWxlbWVudCdpIGJ1bGFtYWTEsSk6IGJ1IG5va3RhZGEgZWxlbWVudCBBbmd1bGFyIHRhcmFmxLFuZGFuXHJcblx0XHRcdC8vIHphdGVuIGRpc2Nvbm5lY3QgZWRpbG1pxZ8gb2xhYmlsaXI7IG1vdmVJbnRvIGJhxJ9sxLF5c2EgbW92ZUJlZm9yZSwgZGXEn2lsc2UgYXBwZW5kQ2hpbGQga3VsbGFuxLFyLlxyXG5cdFx0XHR0aGlzLm1vdmVJbnRvKGhpZGRlbkNvbnRhaW5lciwgZWxlbWVudCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgaGlkZGVuIGNvbnRhaW5lclxcJ2EgdGHFn8SxbmTEsSAoc3RhdGUga29ydW51eW9yKScpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgcHJlc2VydmUgZWRpbGlya2VuIGhhdGE6JywgZXJyb3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2ViIGNvbXBvbmVudCBlbGVtZW50J2luaSBoaWRkZW4gY29udGFpbmVyJ2RhbiDDp8Sxa2FyIHZlIGNvbXBvbmVudCB2aWV3J2EgZWtsZW1leWkgZGVuZS5cclxuXHQgKlxyXG5cdCAqIGBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaGAgZmxhZydpIHRlbWl6bGVuaXIg4oCUIGXEn2VyIGJ1IHJldHJpZXZlIHNvbnJhc8SxIGVsZW1lbnRcclxuXHQgKiBnZXLDp2VrIGFubGFtZGEgZGVzdHJveSBlZGlsaXJzZSBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgIGZsYWcgeW9rIGthYnVsIGVkaXAgQXBwbGljYXRpb25cclxuXHQgKiBjbGVhbnVwJ8SxbsSxIHnDvHLDvHRlY2VrLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcmVzdG9yZVdlYkNvbXBvbmVudEVsZW1lbnQoZGV0YWNoZWRUcmVlOiBEZXRhY2hlZFJvdXRlSGFuZGxlKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBjb21wb25lbnRSZWYgPSAoZGV0YWNoZWRUcmVlIGFzIEludGVybmFsRGV0YWNoZWRSb3V0ZUhhbmRsZSkuY29tcG9uZW50UmVmO1xyXG5cdFx0XHRpZiAoIWNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV3JhcHBlckluc3RhbmNlIHwgdW5kZWZpbmVkO1xyXG5cdFx0XHRpZiAoIWNvbXBvbmVudEluc3RhbmNlPy5lbGVtZW50KSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBlbGVtZW50ID0gY29tcG9uZW50SW5zdGFuY2UuZWxlbWVudCBhcyBIVE1MRWxlbWVudCAmIHsgX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2g/OiBib29sZWFuIH07XHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblxyXG5cdFx0XHRpZiAoIWhpZGRlbkNvbnRhaW5lci5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gw5ZORU1MSTogZWxlbWVudCdpIGhpZGRlbiBjb250YWluZXInZGFuIEVSS0VOIMOnxLFrYXJtxLF5b3J1ei4gYHJldHJpZXZlYCwgQW5ndWxhclxyXG5cdFx0XHQvLyBgb3V0bGV0LmF0dGFjaCgpYCd0ZW4gw5ZOQ0Ugw6dhxJ9yxLFsxLFyIOKGkiB2YyBoZW7DvHogRE9NJ2EgYmHEn2zEsSBkZcSfaWxkaXIuIEVya2VuIHJlbW92ZUNoaWxkXHJcblx0XHRcdC8vIGVsZW1lbnQnaSBkaXNjb25uZWN0IGVkZXIgdmUgaWZyYW1lIHJlbG9hZCBvbHVyICh0YW0ga2HDp8SxbmTEscSfxLFtxLF6IMWfZXkpLiBCdW51biB5ZXJpbmVcclxuXHRcdFx0Ly8gZWxlbWVudCdpIGhpZGRlbiBjb250YWluZXInZGEgKGJhxJ9sxLEpIGLEsXJha8SxcCB2YyBiYcSfbGFuxLFuY2EgYXRvbWljIG1vdmVCZWZvcmUgaWxlXHJcblx0XHRcdC8vIGRvxJ9ydWRhbiBoaWRkZW4g4oaSIHZjIHRhxZ/EsXlvcnV6OyBpZnJhbWUgaGnDpyByZWxvYWQgb2xtYXouXHJcblx0XHRcdGNvbnN0IHRyeVJlc3RvcmUgPSAoKTogYm9vbGVhbiA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdmNOYXRpdmUgPSBjb21wb25lbnRJbnN0YW5jZS52Yz8ubmF0aXZlRWxlbWVudDtcclxuXHRcdFx0XHRpZiAoIXZjTmF0aXZlIHx8ICF2Y05hdGl2ZS5pc0Nvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMubW92ZUludG8odmNOYXRpdmUsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdC8vIEZsYWcnaSBtb3ZlSW50byBTT05SQVNJIHNpbDogZmFsbGJhY2sgcmVtb3ZlQ2hpbGQgeWFwYXJzYSBkaXNjb25uZWN0ZWRDYWxsYmFjayBmbGFnJ2kgaMOibMOiIGfDtnJzw7xuLlxyXG5cdFx0XHRcdGRlbGV0ZSBlbGVtZW50Ll9fYXJpbFByZXNlcnZlRHVyaW5nRGV0YWNoO1xyXG5cdFx0XHRcdGNvbXBvbmVudEluc3RhbmNlLnByb3BzVXBkYXRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgY29tcG9uZW50IHZpZXdcXCdhIGVrbGVuZGkgKHJldHJpZXZlIHPEsXJhc8SxbmRhKScpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSGVtZW4gZGVuZSAodmMgZ2VuZWxkZSBiYcSfbMSxIGRlxJ9pbCkg4oaSIGRlxJ9pbHNlIG1pY3JvdGFzayd0ZSB0ZWtyYXIgZGVuZS4gYG91dGxldC5hdHRhY2goKWBcclxuXHRcdFx0Ly8gcmV0cmlldmUnZGVuIGhlbWVuIHNvbnJhIFNFTktST04gw6dhbMSxxZ/EsXI7IG1pY3JvdGFzayBnZcOnZXJsaSB0YXNrIGJpdGluY2UgKGF0dGFjaCB0YW1hbWxhbm3EscWfLFxyXG5cdFx0XHQvLyB2YyBiYcSfbMSxKSBhbWEgUEFJTlQndGVuIMOWTkNFIGtvxZ9hciDihpIgZWxlbWVudCB5ZXJpbmUgb3R1cnVyLCB0YWIgZ2XDp2nFn2luZGUgYm/Fny1mbGFzaCBvbG1hei5cclxuXHRcdFx0aWYgKHRyeVJlc3RvcmUoKSkgcmV0dXJuO1xyXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcblx0XHRcdFx0aWYgKHRyeVJlc3RvcmUoKSkgcmV0dXJuO1xyXG5cdFx0XHRcdC8vIFNvbiDDp2FyZTogdmMgaMOibMOiIGJhxJ9sxLEgZGXEn2lsLiBFbGVtZW50J2kgeWluZSBkZSB2Yyd5ZSB0YcWfxLEga2kgdGFiIGJvxZ8ga2FsbWFzxLFuXHJcblx0XHRcdFx0Ly8gKGF0dGFjaCB2aWV3J8SxIGJhxJ9sYXnEsW5jYSBnw7Zyw7xuw7xyIG9sdXIg4oCUIGlmcmFtZSByZWxvYWQgb2xhYmlsaXIgYW1hIGVza2kgZGF2cmFuxLHFnyBrb3J1bnVyKS5cclxuXHRcdFx0XHRjb25zdCB2Y05hdGl2ZSA9IGNvbXBvbmVudEluc3RhbmNlLnZjPy5uYXRpdmVFbGVtZW50O1xyXG5cdFx0XHRcdGlmICh2Y05hdGl2ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5tb3ZlSW50byh2Y05hdGl2ZSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRkZWxldGUgZWxlbWVudC5fX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaDtcclxuXHRcdFx0XHRcdGNvbXBvbmVudEluc3RhbmNlLnByb3BzVXBkYXRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb21wb25lbnRJbnN0YW5jZS5uZWVkc1Jlc3RvcmUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ1dlYiBjb21wb25lbnQgZWxlbWVudCByZXN0b3JlIGVkaWxlY2VrICh2aWV3IGhhesSxciBkZcSfaWwsIG5nQWZ0ZXJWaWV3SW5pdFxcJ3RlIHRla3JhciBkZW5lbmVjZWspJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignV2ViIGNvbXBvbmVudCBlbGVtZW50IHJlc3RvcmUgZWRpbGlya2VuIGhhdGE6JywgZXJyb3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2xvYmFsIGhpZGRlbiBjb250YWluZXInxLEgb2x1xZ90dXJ1ciB2ZXlhIGTDtm5kw7xyw7xyXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRIaWRkZW5Db250YWluZXIoKTogSFRNTEVsZW1lbnQge1xyXG5cdFx0Y29uc3Qgc2xvdCA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IF9fYXJpbFdlYkNvbXBvbmVudEhpZGRlbkNvbnRhaW5lcj86IEhUTUxFbGVtZW50IH07XHJcblx0XHRsZXQgY29udGFpbmVyID0gc2xvdC5fX2FyaWxXZWJDb21wb25lbnRIaWRkZW5Db250YWluZXI7XHJcblx0XHRpZiAoIWNvbnRhaW5lcikge1xyXG5cdFx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xyXG5cdFx0XHRjb250YWluZXIuc3R5bGUudG9wID0gJy05OTk5cHgnO1xyXG5cdFx0XHRjb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcblx0XHRcdHNsb3QuX19hcmlsV2ViQ29tcG9uZW50SGlkZGVuQ29udGFpbmVyID0gY29udGFpbmVyO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBlbGAnaSBgdGFyZ2V0YCfEsW4gc29uIMOnb2N1xJ91IG9sYWNhayDFn2VraWxkZSBUQcWeSVIuIGBtb3ZlQmVmb3JlYCAoYXRvbWljIG1vdmUpIGRlc3Rla2xlbml5b3IgdmVcclxuXHQgKiBoZXIgaWtpIGTDvMSfw7xtIGRlIGJhxJ9sxLF5c2Egb251IGt1bGxhbsSxcjogbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQgKGlmcmFtZSkgcmVsb2FkIE9MTUFEQU4gdmUgY3VzdG9tXHJcblx0ICogZWxlbWVudCdpbiBjb25uZWN0ZWQvZGlzY29ubmVjdGVkIGNhbGxiYWNrJ2xlcmkgdGV0aWtsZW5tZWRlbiB0YcWfxLFyIOKGkiBpZnJhbWUtdGFiYW5sxLEgZW1iZWQnbGVyaW5cclxuXHQgKiAoU3VwZXJzZXQpIGF1dGggaGFuZHNoYWtlJ2kgKyBzY3JvbGwvZmlsdHJlIHN0YXRlJ2kga29ydW51ci4gRGVzdGVrbGVubWl5b3JzYSB2ZXlhIHRhxZ/EsW1hIGvEsXPEsXRsYXLEsVxyXG5cdCAqIGlobGFsIGVkaWxpcnNlIChkaXNjb25uZWN0ZWQgLyBjcm9zcy1kb2N1bWVudCkgcmVtb3ZlQ2hpbGQrYXBwZW5kQ2hpbGQnYSBkw7zFn2VyIChlc2tpIGRhdnJhbsSxxZ86IGlmcmFtZVxyXG5cdCAqIHJlbG9hZCBvbHVyIGFtYSBpxZ9sZW0gZ8O8dmVubGkgdGFtYW1sYW7EsXIpLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbW92ZUludG8odGFyZ2V0OiBIVE1MRWxlbWVudCwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcblx0XHRjb25zdCBtb3ZlciA9IHRhcmdldCBhcyBIVE1MRWxlbWVudCAmIHsgbW92ZUJlZm9yZT86IChub2RlOiBOb2RlLCBjaGlsZDogTm9kZSB8IG51bGwpID0+IHZvaWQgfTtcclxuXHRcdGlmICh0eXBlb2YgbW92ZXIubW92ZUJlZm9yZSA9PT0gJ2Z1bmN0aW9uJyAmJiBlbC5pc0Nvbm5lY3RlZCAmJiB0YXJnZXQuaXNDb25uZWN0ZWQpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRtb3Zlci5tb3ZlQmVmb3JlKGVsLCBudWxsKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdC8vIG1vdmVCZWZvcmUga8Sxc8SxdGxhcsSxIGlobGFsIGVkaWxkaSDihpIgYcWfYcSfxLFkYWtpIGtsYXNpayB0YcWfxLFtYXlhIGTDvMWfLlxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlICE9PSB0YXJnZXQpIHtcclxuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRhcmdldC5jb250YWlucyhlbCkpIHtcclxuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKGVsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBzaG91bGREZXRhY2hgIGnDp2luZGVuLCBBbmd1bGFyIGBvdXRsZXQuZGV0YWNoKClgIMOnYWzEscWfbWFkYW4gw5ZOQ0Ugw6dhxJ9yxLFsxLFyOiBjYW5sxLEgb3V0bGV0J3Rla2kgTUZFXHJcblx0ICogZWxlbWVudCdpbmkgYGFyaWwtdGFiLWlkYCBhdHRyaWJ1dGUndW5kYW4gYnVsdXAgYXRvbWljIGBtb3ZlQmVmb3JlYCBpbGUgaGlkZGVuIGNvbnRhaW5lcidhIHRhxZ/EsXIuXHJcblx0ICogQsO2eWxlY2UgQW5ndWxhciB3cmFwcGVyIHZpZXcnxLFuxLEgc8O2a3TDvMSfw7xuZGUgYDxhcHAteHh4PmAgZWxlbWVudCdpIHphdGVuIGfDvHZlbmxpL2JhxJ9sxLEga29udW1kYWTEsXIgdmVcclxuXHQgKiBiYXLEsW5kxLFyZMSxxJ/EsSBpZnJhbWUgcmVsb2FkIG9sbWF6LiBFbGVtZW50IGJ1bHVuYW1heiB5YSBkYSB6YXRlbiBoaWRkZW4gY29udGFpbmVyJ2RheXNhIG5vLW9wIOKGklxyXG5cdCAqIGBzdG9yZSgpYCBlc2tpIHlvbHV5bGEgZGV2cmV5ZSBnaXJlciAocmVncmVzeW9uIHlvaykuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwcmVzZXJ2ZUxpdmVFbGVtZW50QmVmb3JlRGV0YWNoKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCB0YWJJZCA9IHRoaXMuZ2V0VGFiSWRGcm9tUm91dGUocm91dGUpO1xyXG5cdFx0XHRpZiAoIXRhYklkKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblx0XHRcdGNvbnN0IGNhbmRpZGF0ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpbC10YWItaWQ9XCIke3RhYklkfVwiXWApO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBBcnJheS5mcm9tKGNhbmRpZGF0ZXMpKSB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSBjYW5kaWRhdGUgYXMgSFRNTEVsZW1lbnQgJiB7IF9fYXJpbFByZXNlcnZlRHVyaW5nRGV0YWNoPzogYm9vbGVhbiB9O1xyXG5cdFx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoZWwpKSBjb250aW51ZTtcclxuXHRcdFx0XHQvLyBGYWxsYmFjayByZW1vdmVDaGlsZCB5b2x1bmRhIGRpc2Nvbm5lY3RlZENhbGxiYWNrJ2luIGRlc3Ryb3knxLEgYXRsYW1hc8SxIGnDp2luIGZsYWcnaSB0YcWfxLFtYWRhbiDDlk5DRSBzZXQgZXQuXHJcblx0XHRcdFx0ZWwuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2ggPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMubW92ZUludG8oaGlkZGVuQ29udGFpbmVyLCBlbCk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gcHJlLWRldGFjaCBwcmVzZXJ2ZTogPCR7ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gdGFiPVwiJHt0YWJJZH1cIiBoaWRkZW4gY29udGFpbmVyJ2EgdGHFn8SxbmTEsWApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tTdHJhdGVneV0gcHJlLWRldGFjaCBwcmVzZXJ2ZSBoYXRhc8SxOicsIGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGFjaGVkIHJvdXRlIHZpZXcnxLEgacOnaW5kZWtpIHBsdWdpbi9NRkUgY3VzdG9tIGVsZW1lbnQnbGVyaW5pICh0YWcgYWTEsW5kYSBgLWBcclxuXHQgKiBidWx1bmFuIHZlIGBjdXN0b21FbGVtZW50c2AnYSBrYXnEsXRsxLEgb2xhbmxhcsSxKSBoaWRkZW4gY29udGFpbmVyJ2EgdGHFn8SxciB2ZVxyXG5cdCAqIHllcmxlcmluZSBiaXJlciBDb21tZW50IHBsYWNlaG9sZGVyIGLEsXJha8Sxci4gRWxlbWVudCBkb2N1bWVudCd0YW4gYXlyxLFsbWF6LFxyXG5cdCAqIEFuZ3VsYXIgRWxlbWVudHMgYGRpc2Nvbm5lY3RlZENhbGxiYWNrYCAxMG1zIGRlc3Ryb3kgdGltZXInxLEga2FuYXQgw6fEsXJwbWF6IOKAlFxyXG5cdCAqIGRvbGF5xLFzxLF5bGEgcGx1Z2luJ2luIGBDb21wb25lbnRSZWZgIHZlIGRhaGlsaSBzdGF0ZSdpIChmb3JtIGRlxJ9lcmxlcmksIHNlYXJjaFxyXG5cdCAqIHNvbnXDp2xhcsSxIHZzLikgc29ucmFraSByZXRyaWV2ZSdlIGthZGFyIGtvcnVudXIuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGRldGFjaGVkVHJlZTogRGV0YWNoZWRSb3V0ZUhhbmRsZSk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgY29tcG9uZW50UmVmID0gKGRldGFjaGVkVHJlZSBhcyBJbnRlcm5hbERldGFjaGVkUm91dGVIYW5kbGUpLmNvbXBvbmVudFJlZjtcclxuXHRcdFx0Y29uc3Qgcm9vdEVsID0gY29tcG9uZW50UmVmPy5sb2NhdGlvbj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKCFyb290RWwpIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblx0XHRcdGNvbnN0IGFsbCA9IHJvb3RFbC5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XHJcblx0XHRcdGNvbnN0IHByZXNlcnZlZExpc3Q6IFByZXNlcnZlZEN1c3RvbUVsW10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgQXJyYXkuZnJvbShhbGwpKSB7XHJcblx0XHRcdFx0Y29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICghdGFnLmluY2x1ZGVzKCctJykpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGlmICghd2luZG93LmN1c3RvbUVsZW1lbnRzPy5nZXQodGFnKSkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG5vZGUgPSBlbCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoYGFyaWwtcHJlc2VydmVkOiR7dGFnfWApO1xyXG5cdFx0XHRcdG5vZGUucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHBsYWNlaG9sZGVyLCBub2RlKTtcclxuXHRcdFx0XHRoaWRkZW5Db250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XHJcblx0XHRcdFx0cHJlc2VydmVkTGlzdC5wdXNoKHsgZWw6IG5vZGUsIHBsYWNlaG9sZGVyIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAocHJlc2VydmVkTGlzdC5sZW5ndGgpIHtcclxuXHRcdFx0XHR0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5zZXQoZGV0YWNoZWRUcmVlLCBwcmVzZXJ2ZWRMaXN0KTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlOiAke3ByZXNlcnZlZExpc3QubGVuZ3RofSBlbGVtZW50IHRhxZ/EsW5kxLFgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdDdXN0b20gZWxlbWVudCBwcmVzZXJ2ZSBlZGlsaXJrZW4gaGF0YTonLCBlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlIGlsZSB0YcWfxLFuYW4gY3VzdG9tIGVsZW1lbnQnbGVyaSBvcmlqaW5hbFxyXG5cdCAqIHBsYWNlaG9sZGVyJ2xhcsSxbsSxbiB5ZXJpbmUgZ2VyaSBrb3lhci5cclxuXHQgKi9cclxuXHRwcml2YXRlIHJlc3RvcmVDdXN0b21FbGVtZW50c0luVHJlZShkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHByZXNlcnZlZExpc3QgPSB0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5nZXQoZGV0YWNoZWRUcmVlKTtcclxuXHRcdFx0aWYgKCFwcmVzZXJ2ZWRMaXN0Py5sZW5ndGgpIHJldHVybjtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgeyBlbCwgcGxhY2Vob2xkZXIgfSBvZiBwcmVzZXJ2ZWRMaXN0KSB7XHJcblx0XHRcdFx0aWYgKHBsYWNlaG9sZGVyLnBhcmVudE5vZGUpIHtcclxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsLCBwbGFjZWhvbGRlcik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIFBsYWNlaG9sZGVyIGHEn2HDp3RhbiBrb3BhcsSxbG3EscWfIOKAlCBwYXJlbnQgdmlldyB0YW1hbWVuIGRlc3Ryb3kgZWRpbG1pxZ8gb2xhYmlsaXJcclxuXHRcdFx0XHRcdC8vICjDtnJuLiByZW1vdGUgdGFiIGthcGFubcSxxZ8pLiBFbGVtZW50J2kgaGlkZGVuIGNvbnRhaW5lcidkYSBixLFyYWttYW1hayBpw6dpbiBjbGVhbnVwLlxyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbU3RyYXRlZ3ldIHJlc3RvcmU6IHBsYWNlaG9sZGVyIHBhcmVudCB5b2ssIGN1c3RvbSBlbGVtZW50IGNsZWFudXAgZWRpbGl5b3InLCBlbC50YWdOYW1lKTtcclxuXHRcdFx0XHRcdGlmIChlbC5wYXJlbnROb2RlID09PSB0aGlzLmdldEhpZGRlbkNvbnRhaW5lcigpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCkucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5kZWxldGUoZGV0YWNoZWRUcmVlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gcmVzdG9yZUN1c3RvbUVsZW1lbnRzSW5UcmVlOiAke3ByZXNlcnZlZExpc3QubGVuZ3RofSBlbGVtZW50IGdlcmkgeWVybGXFn3RpcmlsZGlgKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignQ3VzdG9tIGVsZW1lbnQgcmVzdG9yZSBlZGlsaXJrZW4gaGF0YTonLCBlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzTWF0Y2hlclJvdXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuICEhcm91dGU/LnJvdXRlQ29uZmlnPy5tYXRjaGVyO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRSZW1vdGVOYW1lKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xyXG5cdFx0cmV0dXJuIChyb3V0ZT8ucm91dGVDb25maWc/LmRhdGEgYXMgUGx1Z2luQ29uZmlnIHwgdW5kZWZpbmVkKT8ucmVtb3RlTmFtZSA/PyBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVVJMIGA/X3RhYj08dGFiSWQ+YCBxdWVyeSBwYXJhbSfEsW7EsSBva3Ug4oCUIGBOYXZTZXJ2aWNlYCBoZXIgdGFiIGnDp2luIHVuaXF1ZSBkZcSfZXIgw7xyZXRpci5cclxuXHQgKiBgSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5YCBzYXllc2luZGUgaG9zdCBSb3V0ZXInYSB0YWJzxLF6IG5hdmlnYXRpb24gZ2VsbWV6LCBzYWRlY2VcclxuXHQgKiBgdGFiU3RhdGUoe190YWJ9KWAnbMSxIHRhYiB0xLFrbGFtYWxhcsSxIGdlbGlyIOKGkiBgcm91dGUucXVlcnlQYXJhbXNbJ190YWInXWAgaGVyIHphbWFuIGRvbHUuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcclxuXHRcdGNvbnN0IHYgPSByb3V0ZT8ucXVlcnlQYXJhbXM/LlsnX3RhYiddO1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJvdXRlIGtleSdpbmkgb2x1xZ90dXJ1ci4gTWF0Y2hlciAod2ViIGNvbXBvbmVudCkgcm91dGUnbGFyIGnDp2luIHJlbW90ZU5hbWUgKyB0YWJJZFxyXG5cdCAqIGJhemzEsSBrZXkga3VsbGFuxLFsxLFyIOKAlCBheW7EsSByZW1vdGUndW4gaGVyIHRhYidpIGF5csSxIE1GRSBjdXN0b20gZWxlbWVudCBpbnN0YW5jZSfEsW5hXHJcblx0ICogc2FoaXB0aXIgKGJhxJ/EsW1zxLF6IHN0YXRlKS5cclxuXHQgKlxyXG5cdCAqIE5vcm1hbCByb3V0ZSdsYXIgacOnaW4gYHBhdGhGcm9tUm9vdGAgw7x6ZXJpbmRlbiB0YW0geW9sIMO8cmV0aWxpciwgYXJkxLFuZGFuIHF1ZXJ5IHBhcmFtc1xyXG5cdCAqIGVrbGVuaXIgKHphdGVuIGBfdGFiYCBkYWhpbCkg4oCUIG5lc3RlZCBib8WfLXBhdGggKGBwYXRoOiAnJ2ApIGNoaWxkIHJvdXRlJ2xhcsSxbsSxbiBheW7EsSBgXCJcImBcclxuXHQgKiBrZXknaXlsZSDDp2FrxLHFn21hc8SxbsSxIGVuZ2VsbGVyIHZlIGF5bsSxIHBhdGgnaW4gaWtpIHRhYidpIGZhcmtsxLEga2V5IGFsxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Um91dGVLZXkocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBzdHJpbmcge1xyXG5cdFx0aWYgKHRoaXMuaXNNYXRjaGVyUm91dGUocm91dGUpKSB7XHJcblx0XHRcdGNvbnN0IHJlbW90ZU5hbWUgPSB0aGlzLmdldFJlbW90ZU5hbWUocm91dGUpO1xyXG5cdFx0XHRpZiAocmVtb3RlTmFtZSkge1xyXG5cdFx0XHRcdGNvbnN0IHRhYklkID0gdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSk7XHJcblx0XHRcdFx0cmV0dXJuIHRhYklkID8gYG1mZToke3JlbW90ZU5hbWV9OiR7dGFiSWR9YCA6IGBtZmU6JHtyZW1vdGVOYW1lfWA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFRhbSBwYXRoOiBrw7ZrIOKGkiBpbnRlcm1lZGlhdGUg4oaSIHNlbGYuIEJvxZ8gc2VnbWVudGxlcmkgaW5kZXggaWxlIGtvcnV5YXJhayBoaXllcmFyxZ9pXHJcblx0XHQvLyBwb3ppc3lvbnVudSBrZXknZSBkYWhpbCBlZGVyaXogKGthcmRlxZ8gZW1wdHktcGF0aCByb3V0ZSdsYXIgZmFya2zEsSBrZXkgYWzEsXIpLlxyXG5cdFx0Y29uc3QgZnVsbFBhdGggPSByb3V0ZS5wYXRoRnJvbVJvb3RcclxuXHRcdFx0Lm1hcCgociwgaSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlZyA9IHIudXJsLm1hcCgocykgPT4gcy5wYXRoKS5qb2luKCcvJyk7XHJcblx0XHRcdFx0cmV0dXJuIHNlZy5sZW5ndGggPiAwID8gc2VnIDogYCMke2l9YDtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmpvaW4oJy8nKTtcclxuXHRcdGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5zZXJpYWxpemVRdWVyeVBhcmFtcyhyb3V0ZS5xdWVyeVBhcmFtcyk7XHJcblx0XHRjb25zdCBmcmFnbWVudCA9IHJvdXRlLmZyYWdtZW50ID8gJyMnICsgcm91dGUuZnJhZ21lbnQgOiAnJztcclxuXHJcblx0XHRyZXR1cm4gZnVsbFBhdGggKyBxdWVyeVBhcmFtcyArIGZyYWdtZW50O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUXVlcnkgcGFyYW0nbGFyxLEgVVJMLXNhZmUgxZ9la2lsZGUgc2VyaWxlxZ90aXJpci4gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3IndW5hXHJcblx0ICogZG/En3J1ZGFuIG9iamVjdCB2ZXJpcnNlayBhcnJheSBkZcSfZXJsZXIgYD9pZHM9MSwyLDNgIGdpYmkgdGVrIGtleSBvbGFyYWsgeWF6xLFsxLFyO1xyXG5cdCAqIEFuZ3VsYXIgUm91dGVyJ8SxbiBgP2lkcz0xJmlkcz0yJmlkcz0zYCBkYXZyYW7EscWfxLF5bGEgdXl1bXN1eiBvbGFiaWxpci4gYGFwcGVuZGAgaWxlXHJcblx0ICogaGVyIGFycmF5IGVsZW1hbsSxIGF5csSxIGVudHJ5IG9sdXIgdmUgbnVsbC91bmRlZmluZWQgZGXEn2VybGVyIGF0bGFuxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2VyaWFsaXplUXVlcnlQYXJhbXMocGFyYW1zOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90WydxdWVyeVBhcmFtcyddKTogc3RyaW5nIHtcclxuXHRcdC8vIGBzb3J0KClgIGlsZSBkZXRlcm1pbmlzbSDigJQgYXluxLEgc2F5ZmFuxLFuIGZhcmtsxLEgaW5zZXJ0aW9uLW9yZGVyJ2zEsSBxdWVyeVBhcmFtcyfEsVxyXG5cdFx0Ly8gKGRlZXAgbGluayBzaGFyZSwgc2VydmVyLXNpZGUgcmVuZGVyLCBKUy1nZW5lcmF0ZWQgVVJMJ2xlcikgYXluxLEgcm91dGUga2V5IMO8cmV0aXIuXHJcblx0XHQvLyBBa3NpIHRha2RpcmRlIGA/Yj0xJmE9MmAgdmUgYD9hPTImYj0xYCBpa2kgYXlyxLEgaGFuZGxlIG9sYXJhayBjYWNoZSdsZW5pciDihpIgdGFiXHJcblx0XHQvLyBpem9sYXN5b251IGF5bsSxIHNheWZhbsSxbiBpa2kgYXlyxLEgaW5zdGFuY2UnxLFuxLEgYcOnYXIuXHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKS5zb3J0KCk7XHJcblx0XHRpZiAoIWtleXMubGVuZ3RoKSByZXR1cm4gJyc7XHJcblx0XHRjb25zdCBvdXQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xyXG5cdFx0XHRjb25zdCB2ID0gcGFyYW1zW2tdO1xyXG5cdFx0XHRpZiAodiA9PSBudWxsKSBjb250aW51ZTtcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodikpIHtcclxuXHRcdFx0XHR2LmZvckVhY2goKHZ2KSA9PiB2diAhPSBudWxsICYmIG91dC5hcHBlbmQoaywgU3RyaW5nKHZ2KSkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG91dC5hcHBlbmQoaywgU3RyaW5nKHYpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgc3RyID0gb3V0LnRvU3RyaW5nKCk7XHJcblx0XHRyZXR1cm4gc3RyID8gJz8nICsgc3RyIDogJyc7XHJcblx0fVxyXG5cclxuXHRzaG91bGRSZXVzZVJvdXRlKGZ1dHVyZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgY3VycjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgZnV0dXJlTWF0Y2hlciA9IHRoaXMuaXNNYXRjaGVyUm91dGUoZnV0dXJlKTtcclxuXHRcdGNvbnN0IGN1cnJNYXRjaGVyID0gdGhpcy5pc01hdGNoZXJSb3V0ZShjdXJyKTtcclxuXHJcblx0XHRpZiAoZnV0dXJlTWF0Y2hlciAmJiBjdXJyTWF0Y2hlcikge1xyXG5cdFx0XHRjb25zdCBmciA9IHRoaXMuZ2V0UmVtb3RlTmFtZShmdXR1cmUpO1xyXG5cdFx0XHRjb25zdCBjciA9IHRoaXMuZ2V0UmVtb3RlTmFtZShjdXJyKTtcclxuXHRcdFx0Y29uc3QgZnQgPSB0aGlzLmdldFRhYklkRnJvbVJvdXRlKGZ1dHVyZSk7XHJcblx0XHRcdGNvbnN0IGN0ID0gdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShjdXJyKTtcclxuXHRcdFx0Ly8gQXluxLEgcmVtb3RlIG9sc2EgYmlsZSBmYXJrbMSxIHRhYidsZXJzZSBmcmVzaCBjb21wb25lbnQgaW5zdGFudGlhdGUgZWRpbG1lbGkg4oCUXHJcblx0XHRcdC8vIGFrc2kgdGFrZGlyZGUgaWtpIHRhYiB0ZWsgY29tcG9uZW50UmVmJ2kgcGF5bGHFn8SxciB2ZSBzdGF0ZSBpem9sYXN5b251IGtheWJvbHVyLlxyXG5cdFx0XHRjb25zdCBzaG91bGRSZXVzZSA9ICEhZnIgJiYgZnIgPT09IGNyICYmIGZ0ID09PSBjdDtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkUmV1c2VSb3V0ZSBtYXRjaGVyIOKGkiAke3Nob3VsZFJldXNlfS4gZnV0dXJlPSR7ZnJ9LyR7ZnR9IGN1cnI9JHtjcn0vJHtjdH1gKTtcclxuXHRcdFx0cmV0dXJuIHNob3VsZFJldXNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChmdXR1cmVNYXRjaGVyICE9PSBjdXJyTWF0Y2hlcikge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnW1N0cmF0ZWd5XSBzaG91bGRSZXVzZVJvdXRlIG1peGVkIOKGkiBmYWxzZScpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc2hvdWxkUmV1c2UgPSBmdXR1cmUucm91dGVDb25maWcgPT09IGN1cnIucm91dGVDb25maWc7XHJcblx0XHRjb25zdCBmdXR1cmVLZXkgPSB0aGlzLmdldFJvdXRlS2V5KGZ1dHVyZSk7XHJcblx0XHRjb25zdCBjdXJyS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShjdXJyKTtcclxuXHRcdGNvbnN0IGZ1dHVyZUNvbXAgPSBmdXR1cmUucm91dGVDb25maWc/LmNvbXBvbmVudD8ubmFtZSA/PyBmdXR1cmUuY29tcG9uZW50Py5uYW1lID8/ICdub25lJztcclxuXHRcdGNvbnN0IGN1cnJDb21wID0gY3Vyci5yb3V0ZUNvbmZpZz8uY29tcG9uZW50Py5uYW1lID8/IGN1cnIuY29tcG9uZW50Py5uYW1lID8/ICdub25lJztcclxuXHRcdGNvbnNvbGUubG9nKFxyXG5cdFx0XHRgW1N0cmF0ZWd5XSBzaG91bGRSZXVzZVJvdXRlIG5vcm1hbCDihpIgJHtzaG91bGRSZXVzZX0uIGZ1dHVyZT1cIiR7ZnV0dXJlS2V5fVwiKCR7ZnV0dXJlQ29tcH0pIGN1cnI9XCIke2N1cnJLZXl9XCIoJHtjdXJyQ29tcH0pYFxyXG5cdFx0KTtcclxuXHRcdHJldHVybiBzaG91bGRSZXVzZTtcclxuXHR9XHJcbn1cclxuIl19
610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJvdXRlLXJldXNlLXN0cmF0ZWd5LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9ib290L2NvbmZpZy9hcHBzL3NyYy9jdXN0b20tcm91dGUtcmV1c2Utc3RyYXRlZ3kuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixVQUFVLEVBQWMsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUloRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUE2QjFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBV3BDO1FBVkEsc0JBQWlCLEdBQXNCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pFLGlCQUFZLEdBQXdDLEVBQUUsQ0FBQztRQUV2RDs7OztXQUlHO1FBQ0ssdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQTRDLENBQUM7UUFHcEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hGLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU87WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsR0FBRyxpQkFBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFNUIscUZBQXFGO1lBQ3JGLHlGQUF5RjtZQUN6RixtRkFBbUY7WUFDbkYsdUZBQXVGO1lBQ3ZGLDhDQUE4QztZQUM5QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWixNQUFNLENBQUMsYUFBYSxDQUNuQixJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRTt3QkFDdEMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7cUJBQzlELENBQUMsQ0FDRixDQUFDO2dCQUNILENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRkFBb0Y7UUFDcEYsd0ZBQXdGO1FBQ3hGLG9GQUFvRjtRQUNwRixtRkFBbUY7UUFDbkYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFRLEVBQVEsRUFBRTtZQUN6QyxNQUFNLE1BQU0sR0FBSSxDQUFpRSxDQUFDLE1BQU0sQ0FBQztZQUN6RixNQUFNLFVBQVUsR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU87WUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7WUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN4QywrRUFBK0U7Z0JBQy9FLG1FQUFtRTtnQkFDbkUsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7b0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQ3hELE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQUcsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3SCxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNGLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvRCx1RkFBdUY7UUFDdkYsOEVBQThFO1FBQzlFLDBEQUEwRDtRQUMxRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVc7UUFDVixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sMkNBQTJDLENBQUMsQ0FBQztRQUNqSCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxHQUFXO1FBQ3BDLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxxRkFBcUY7UUFDckYsbUVBQW1FO1FBQ25FLHdFQUF3RTtRQUN4RSx1REFBdUQ7UUFDdkQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7WUFDbEMsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQUUsU0FBUztnQkFDcEMsZ0VBQWdFO2dCQUNoRSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQztvQkFBRSxTQUFTO2dCQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZSxDQUFDLEdBQVc7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE9BQU87WUFDTixVQUFVLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQztZQUNoRSxLQUFLLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUM1RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssbUJBQW1CLENBQUMsTUFBOEM7UUFDekUsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsNEZBQTRGO1FBQ2pILE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRWxELHFGQUFxRjtRQUNyRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZixLQUFLLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLGVBQWUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDRixDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsZ0ZBQWdGO1FBQ2hGLE1BQU0sWUFBWSxHQUFJLE1BQXNDLENBQUMsWUFBWSxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLFlBQVksRUFBRSxRQUF1QyxDQUFDO1FBQ3ZFLElBQUksUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLHNGQUFzRjtZQUN0RixpRkFBaUY7WUFDakYsT0FBUSxRQUFRLENBQUMsT0FBa0UsQ0FBQywwQkFBMEIsQ0FBQztZQUMvRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDRixDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxLQUE2QjtRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQzNHLE9BQU8sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMseUZBQXlGO1FBQ3pGLGtHQUFrRztRQUNsRyxpR0FBaUc7UUFDakcsbUdBQW1HO1FBQ25HLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsUUFBUSxVQUFVLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBNkIsRUFBRSxZQUFpQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLFFBQVEsV0FBVyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsUUFBUSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2xGLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDM0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQTZCO1FBQ3pDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7WUFDM0csT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxRQUFRLE9BQU8sWUFBWSxpQkFBaUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SSxPQUFPLFlBQVksQ0FBQztJQUNyQixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQTZCO1FBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLDJCQUEyQixDQUFDLFlBQWlDO1FBQ3BFLElBQUksQ0FBQztZQUNKLE1BQU0sWUFBWSxHQUFJLFlBQTRDLENBQUMsWUFBWSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsUUFBdUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTztnQkFBRSxPQUFPO1lBRXhDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQWlFLENBQUM7WUFDcEcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFbEQsbUdBQW1HO1lBQ25HLGtHQUFrRztZQUNsRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1lBRTFDLHFGQUFxRjtZQUNyRixJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFFLE9BQU87WUFFOUMsNEZBQTRGO1lBQzVGLGlHQUFpRztZQUNqRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLDBCQUEwQixDQUFDLFlBQWlDO1FBQ25FLElBQUksQ0FBQztZQUNKLE1BQU0sWUFBWSxHQUFJLFlBQTRDLENBQUMsWUFBWSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUIsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsUUFBdUMsQ0FBQztZQUMvRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTztnQkFBRSxPQUFPO1lBRXhDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQWlFLENBQUM7WUFDcEcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFFLE9BQU87WUFFL0MsaUZBQWlGO1lBQ2pGLHlGQUF5RjtZQUN6Rix1RkFBdUY7WUFDdkYsb0ZBQW9GO1lBQ3BGLDJEQUEyRDtZQUMzRCxNQUFNLFVBQVUsR0FBRyxHQUFZLEVBQUU7Z0JBQ2hDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLHFHQUFxRztnQkFDckcsT0FBTyxPQUFPLENBQUMsMEJBQTBCLENBQUM7Z0JBQzFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0VBQXNFLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxJQUFJLENBQUM7WUFDYixDQUFDLENBQUM7WUFFRiw0RkFBNEY7WUFDNUYsZ0dBQWdHO1lBQ2hHLDZGQUE2RjtZQUM3RixJQUFJLFVBQVUsRUFBRTtnQkFBRSxPQUFPO1lBQ3pCLGNBQWMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksVUFBVSxFQUFFO29CQUFFLE9BQU87Z0JBQ3pCLGtGQUFrRjtnQkFDbEYsOEZBQThGO2dCQUM5RixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO2dCQUNyRCxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNqQyxPQUFPLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztvQkFDMUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDeEMsQ0FBQztxQkFBTSxDQUFDO29CQUNQLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUdBQWlHLENBQUMsQ0FBQztnQkFDaEgsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLFVBQXFGLENBQUM7UUFDbkcsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlDQUFpQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoQixTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDakMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztZQUNqQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxTQUFTLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssUUFBUSxDQUFDLE1BQW1CLEVBQUUsRUFBZTtRQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFpRixDQUFDO1FBQ2hHLElBQUksT0FBTyxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwRixJQUFJLENBQUM7Z0JBQ0osS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU87WUFDUixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNSLHFFQUFxRTtZQUN0RSxDQUFDO1FBQ0YsQ0FBQztRQUNELElBQUksRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSywrQkFBK0IsQ0FBQyxLQUE2QjtRQUNwRSxJQUFJLENBQUM7WUFDSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztZQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDekUsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sRUFBRSxHQUFHLFNBQW1FLENBQUM7Z0JBQy9FLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQUUsU0FBUztnQkFDM0MsNkdBQTZHO2dCQUM3RyxFQUFFLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxLQUFLLDhCQUE4QixDQUFDLENBQUM7Z0JBQ3ZILE1BQU07WUFDUCxDQUFDO1FBQ0YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0YsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyw0QkFBNEIsQ0FBQyxZQUFpQztRQUNyRSxJQUFJLENBQUM7WUFDSixNQUFNLFlBQVksR0FBSSxZQUE0QyxDQUFDLFlBQVksQ0FBQztZQUNoRixNQUFNLE1BQU0sR0FBRyxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQXdDLENBQUM7WUFDaEYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTztZQUVwQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsTUFBTSxhQUFhLEdBQXdCLEVBQUUsQ0FBQztZQUU5QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO29CQUFFLFNBQVM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQUUsU0FBUztnQkFFL0MsTUFBTSxJQUFJLEdBQUcsRUFBaUIsQ0FBQztnQkFDL0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLGFBQWEsQ0FBQyxNQUFNLGtCQUFrQixDQUFDLENBQUM7WUFDakcsQ0FBQztRQUNGLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNGLENBQUM7SUFFRDs7O09BR0c7SUFDSywyQkFBMkIsQ0FBQyxZQUFpQztRQUNwRSxJQUFJLENBQUM7WUFDSixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTTtnQkFBRSxPQUFPO1lBRW5DLEtBQUssTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzVCLFdBQVcsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztxQkFBTSxDQUFDO29CQUNQLGdGQUFnRjtvQkFDaEYscUZBQXFGO29CQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDeEcsSUFBSSxFQUFFLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0MsQ0FBQztnQkFDRixDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsYUFBYSxDQUFDLE1BQU0sNkJBQTZCLENBQUMsQ0FBQztRQUMzRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDRixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQW9DO1FBQzFELE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBb0M7UUFDekQsT0FBUSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQWlDLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQixDQUFDLEtBQW9DO1FBQzdELE1BQU0sQ0FBQyxHQUFHLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssV0FBVyxDQUFDLEtBQTZCO1FBQ2hELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxVQUFVLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sVUFBVSxFQUFFLENBQUM7WUFDbkUsQ0FBQztRQUNGLENBQUM7UUFDRCxxRkFBcUY7UUFDckYsZ0ZBQWdGO1FBQ2hGLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZO2FBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNiLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFNUQsT0FBTyxRQUFRLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxvQkFBb0IsQ0FBQyxNQUE2QztRQUN6RSxtRkFBbUY7UUFDbkYscUZBQXFGO1FBQ3JGLGtGQUFrRjtRQUNsRix1REFBdUQ7UUFDdkQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLElBQUk7Z0JBQUUsU0FBUztZQUN4QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7aUJBQU0sQ0FBQztnQkFDUCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0YsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUE4QixFQUFFLElBQTRCO1FBQzVFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxJQUFJLGFBQWEsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNsQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxnRkFBZ0Y7WUFDaEYsa0ZBQWtGO1lBQ2xGLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLFdBQVcsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLE9BQU8sV0FBVyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLGFBQWEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDekQsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksTUFBTSxDQUFDO1FBQzNGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUM7UUFDckYsT0FBTyxDQUFDLEdBQUcsQ0FDVix3Q0FBd0MsV0FBVyxhQUFhLFNBQVMsS0FBSyxVQUFVLFdBQVcsT0FBTyxLQUFLLFFBQVEsR0FBRyxDQUMxSCxDQUFDO1FBQ0YsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQzs4R0ExakJXLHdCQUF3QjtrSEFBeEIsd0JBQXdCLGNBRnhCLE1BQU07OzJGQUVOLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIERlc3Ryb3lSZWYsIEVsZW1lbnRSZWYsIEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgRGV0YWNoZWRSb3V0ZUhhbmRsZSwgUm91dGVSZXVzZVN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBsdWdpbkNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFJvdXRlQ2xvc2VTZXJ2aWNlIH0gZnJvbSAnLi9yb3V0ZS1jbG9zZS5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBBbmd1bGFyIFJvdXRlciBgRGV0YWNoZWRSb3V0ZUhhbmRsZWAnxLEgcmVzbWkgb2xhcmFrIG9wYXF1ZSAoYHt9YCkgYmlyIHR5cGUuXHJcbiAqIEludGVybmFsIHNoYXBlJ2kgcHVibGljIEFQSSdkYSB5b2ssIGFtYSBiaXogcHJlc2VydmUvcmVzdG9yZSBpw6dpbiBjb21wb25lbnRSZWYnZVxyXG4gKiBlcmnFn21lbWl6IGdlcmVraXlvci4gQnUgecO8emRlbiBpbnRlcm5hbCB5YXDEsXnEsSBtaW5pbWFsIMWfZWtpbGRlIG1vZGVsbGl5b3J1ei5cclxuICovXHJcbnR5cGUgSW50ZXJuYWxEZXRhY2hlZFJvdXRlSGFuZGxlID0gRGV0YWNoZWRSb3V0ZUhhbmRsZSAmIHtcclxuXHRjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8dW5rbm93bj47XHJcbn07XHJcblxyXG4vKipcclxuICogQXJpbFdlYkNvbXBvbmVudFdyYXBwZXIgaW5zdGFuY2UnxLFuZGEgc3RyYXRlZ3knbmluIGfDtnpsZXllY2XEn2kgYWxhbmxhci5cclxuICogV3JhcHBlcidhIGRvxJ9ydWRhbiBiYcSfxLFtbMSxIG9sbWFtYWsgacOnaW4gZHVjay10eXBpbmcgaWxlIG1pbmltYWwgaW50ZXJmYWNlLlxyXG4gKiBgbmVlZHNSZXN0b3JlYCB2ZSBgcHJvcHNVcGRhdGVkYCBiYXlyYWtsYXLEsSB3cmFwcGVyIGlsZSBzdHJhdGVneSBhcmFzxLFuZGFraSBzw7Z6bGXFn21lOlxyXG4gKiBzdHJhdGVneSBgcmV0cmlldmVgIHPEsXJhc8SxbmRhIHNldCBlZGVyLCB3cmFwcGVyIGBuZ0FmdGVyVmlld0luaXRgJ3RlIHTDvGtldGlyLlxyXG4gKi9cclxudHlwZSBXcmFwcGVySW5zdGFuY2UgPSB7XHJcblx0ZWxlbWVudD86IEhUTUxFbGVtZW50O1xyXG5cdHZjPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblx0cHJvcHNVcGRhdGVkPzogYm9vbGVhbjtcclxuXHRuZWVkc1Jlc3RvcmU/OiBib29sZWFuO1xyXG59O1xyXG5cclxuaW50ZXJmYWNlIFByZXNlcnZlZEN1c3RvbUVsIHtcclxuXHRlbDogSFRNTEVsZW1lbnQ7XHJcblx0cGxhY2Vob2xkZXI6IENvbW1lbnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUYWItYmF6bMSxIG5hdmlnYXRpb24gacOnaW4gY3VzdG9tIGBSb3V0ZVJldXNlU3RyYXRlZ3lgLlxyXG4gKlxyXG4gKiAjIyBUYWIgaXpvbGFzeW9udSAoYF90YWJgIHF1ZXJ5IHBhcmFtKVxyXG4gKiBgTmF2U2VydmljZWAgaGVyIHRhYidhIHVuaXF1ZSBgdGFiSWRgIMO8cmV0aXIgdmUgVVJMJ2UgYD9fdGFiPTx0YWJJZD5gIHF1ZXJ5IHBhcmFtXHJcbiAqIGVrbGVyLiBTdHJhdGVneSBidSBwYXJhbSfEsSByb3V0ZSBrZXknaW4gcGFyw6dhc8SxIHlhcGFyOlxyXG4gKiAgLSBNYXRjaGVyICh3ZWIgY29tcG9uZW50KSByb3V0ZSdsYXI6IGBtZmU6JHtyZW1vdGVOYW1lfToke3RhYklkfWBcclxuICogIC0gTm9ybWFsIHJvdXRlJ2xhcjogYHBhdGhGcm9tUm9vdGAgKyB0w7xtIHF1ZXJ5UGFyYW1zICh6YXRlbiBgX3RhYmAgZGFoaWwpXHJcbiAqXHJcbiAqIFNvbnXDpzogYXluxLEgc2F5ZmFuxLFuIGlraSB0YWInaSBgc3RvcmVkUm91dGVzYCDDvHplcmluZGUgZmFya2zEsSBzbG90J2xhcmEgeWF6xLFsxLFyXHJcbiAqIOKGkiBiYcSfxLFtc8SxeiBjb21wb25lbnRSZWYnbGVyLCBiYcSfxLFtc8SxeiBzdGF0ZS4gYHNob3VsZFJldXNlUm91dGVgIG1hdGNoZXIga2FyxZ/EsWxhxZ90xLFybWFzxLFcclxuICogYHRhYklkYCBmYXJrxLFuxLEgZGEgZGlra2F0ZSBhbMSxciDigJQgdGFiIGRlxJ9pxZ9pbWluZGUgZnJlc2ggY29tcG9uZW50IG9sdcWfdXIuXHJcbiAqXHJcbiAqICMjIE1pbWFyaTogaWtpIGJhxJ/EsW1zxLF6IGluc3RhbmNlXHJcbiAqIEJ1IHN0cmF0ZWd5IGhlbSBgYXJpbC9ib290L2hvc3Qvc3JjL2Jvb3RzdHJhcC50c2AndGUgaGVtIGhlciBNRkUgcmVtb3RlJ3VudW5cclxuICogYGFyaWwvYm9vdC9tZmUvc3JjL2Jvb3RzdHJhcC50c2AnaW5kZSBwcm92aWRlciBvbGFyYWsgdmVyaWxpeW9yLiBDbGFzc1xyXG4gKiBgcHJvdmlkZWRJbjogJ3Jvb3QnYCBvbGR1xJ91IGnDp2luICoqaGVyIHJvb3QgaW5qZWN0b3InZGEgQVlSSSBpbnN0YW5jZSoqIHlhxZ9hci5cclxuICogxLBraSBpbnN0YW5jZSBiYcSfxLFtc8SxeiBgc3RvcmVkUm91dGVzYCBtYXAnaSB0dXRhciB2ZSBiaXJiaXJpbmRlbiBoYWJlcnNpemRpcjpcclxuICpcclxuICogLSAqKkhvc3QgaW5zdGFuY2UqKjogbWF0Y2hlciByb3V0ZSdsYXLEsSB5w7ZuZXRpcjsga2V5IGBtZmU6JHtyZW1vdGVOYW1lfToke3RhYklkfWAuXHJcbiAqICAgVGFiIGthcGFuxLFwIGBtZmU6d2RtOmFiYzEyM2Agc2lsaW5kacSfaW5kZSBlZmZlY3QgcmVtb3RlJ2EgYWl0IGAjMC93ZG0vLi4uYFxyXG4gKiAgIHByZWZpeCdsaSBWRSBgX3RhYj1hYmMxMjNgIGnDp2VyZW4gY2hpbGQga2V5J2xlcmkgZGUgdGVtaXpsZXIuXHJcbiAqIC0gKipNRkUgaW5zdGFuY2UqKiAoaGVyIHJlbW90ZSd1biBrZW5kaSBpw6dpbmRlKTogbm9ybWFsIHJvdXRlJ2xhciBpw6dpbiDDp2FsxLHFn8Sxci5cclxuICogICBRdWVyeSBwYXJhbXMgemF0ZW4gYGdldFJvdXRlS2V5YCDDp8Sxa3TEsXPEsW5hIGRhaGlsIG9sZHXEn3UgacOnaW4gdGFiIGl6b2xhc3lvbnVcclxuICogICBkb8SfYWwgb2xhcmFrIGdlbGlyIOKAlCBlayDDtnplbCBkYXZyYW7EscWfIGdlcmVrbWV6LlxyXG4gKlxyXG4gKiAjIyBQbHVnaW4gY3VzdG9tIGVsZW1lbnQgcHJlc2VydmF0aW9uXHJcbiAqIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCBkZXRhY2hlZCB2aWV3J2Rha2kgYDxtZC1zZWFyY2g+YCBnaWJpIGN1c3RvbVxyXG4gKiBlbGVtZW50J2xlcmkgaGlkZGVuIGNvbnRhaW5lcidhIHRhxZ/EsXIg4oCUIGVsZW1lbnQgZG9jdW1lbnQndGFuIGF5csSxbG1heiwgQW5ndWxhclxyXG4gKiBFbGVtZW50cyBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgIDEwbXMgZGVzdHJveSB0aW1lcifEsSB0ZXRpa2xlbm1leiwgcGx1Z2luXHJcbiAqIGNvbXBvbmVudFJlZidpIHZlIGRhaGlsaSBzdGF0ZSdpIChmb3JtIGlucHV0LCBzZWFyY2ggc29udcOnbGFyxLEpIGtvcnVudXIuXHJcbiAqXHJcbiAqICMjIEJpbGluZW4gc8SxbsSxcmxhbWFsYXJcclxuICogLSBgc2hvdWxkRGV0YWNoYCBtYXRjaGVyIHJvdXRlJ2xhciBpw6dpbiB0YWJJZCB5b2trZW4gZmFsc2UgZMO2bmVyICh0YWJzxLF6IG9ycGhhblxyXG4gKiAgIGhhbmRsZSBvbHXFn21hc8SxbiksIGRpxJ9lciBkdXJ1bWxhcmRhIGB0cnVlYCDigJQgdMO8bSBkZXRhY2hlZCByb3V0ZSdsYXIgY2FjaGUnbGVuaXIuXHJcbiAqICAgTWVtb3J5IGxlYWsnaSBzxLFuxLFybGFtYWsgacOnaW4gYE5hdlNlcnZpY2VgIHRhYiBzYXnEsXPEsW7EsSBgTUFYX1RBQlNgIGlsZSBrxLFzxLF0bGFyXHJcbiAqICAgdmUgc29uIHRhYiBrYXBhdMSxbGTEscSfxLFuZGEgZWZmZWN0IHJlbW90ZSd1biB0w7xtIGNoaWxkIGtleSdsZXJpbmkgdGVtaXpsZXIuIFlpbmUgZGVcclxuICogICB0YWIgacOnaW5kZSBhw6fEsWxhbiBkZXRhaWwvZWRpdCBnaWJpIHBhcmFtZXRyZWxpIGFsdCBzYXlmYWxhcsSxbiBoYW5kbGUnbGFyxLEsIHBhcmVudFxyXG4gKiAgIHRhYiBrYXBhbmFuYSBrYWRhciBzdG9yZWRSb3V0ZXMndGEga2FsxLFyLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5IGltcGxlbWVudHMgUm91dGVSZXVzZVN0cmF0ZWd5LCBPbkRlc3Ryb3kge1xyXG5cdHJvdXRlQ2xvc2VTZXJ2aWNlOiBSb3V0ZUNsb3NlU2VydmljZSA9IGluamVjdChSb3V0ZUNsb3NlU2VydmljZSk7XHJcblx0c3RvcmVkUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBEZXRhY2hlZFJvdXRlSGFuZGxlPiA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBgKGRldGFjaGVkVHJlZSBhcyBhbnkpLl9fYXJpbFByZXNlcnZlZEN1c3RvbUVscyA9IFsuLi5dYCBydW50aW1lIHByb3BlcnR5XHJcblx0ICogZWtsZW1layB5ZXJpbmUgaGFuZGxlJ8SxIGtleSBvbGFyYWsga3VsbGFuYW4gYmlyIFdlYWtNYXAgdHV0dXlvcnV6IOKAlFxyXG5cdCAqIHR5cGUtc2FmZSB2ZSBoYW5kbGUgR0MneWUgdcSfcmFkxLHEn8SxbmRhIGJlbGxlayBvdG9tYXRpayB0ZW1pemxlbmlyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcHJlc2VydmVkQ3VzdG9tRWxzID0gbmV3IFdlYWtNYXA8RGV0YWNoZWRSb3V0ZUhhbmRsZSwgUHJlc2VydmVkQ3VzdG9tRWxbXT4oKTtcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLnJvdXRlQ2xvc2VTZXJ2aWNlLmRlbGV0ZVJvdXRlJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGtleSkgPT4ge1xyXG5cdFx0XHRpZiAoIWtleSkgcmV0dXJuO1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBjbGVhbnVwIHRldGlrbGVuZGkga2V5PVwiJHtrZXl9XCIgc3RvcmVkS2V5cz1bJHtPYmplY3Qua2V5cyh0aGlzLnN0b3JlZFJvdXRlcykuam9pbignLCcpfV1gKTtcclxuXHRcdFx0dGhpcy5wcm9jZXNzQ2xlYW51cEtleShrZXkpO1xyXG5cclxuXHRcdFx0Ly8gQ3Jvc3MtaW5qZWN0b3IgeWF5xLFuOiBgUm91dGVDbG9zZVNlcnZpY2VgIGBwcm92aWRlZEluOiAncm9vdCdgIG9sZHXEn3UgacOnaW4gaG9zdCB2ZVxyXG5cdFx0XHQvLyBoZXIgTUZFIHJlbW90ZSd1bmRhIEFZUkkgaW5zdGFuY2UgeWHFn2FyLiBIb3N0J3RhbiB0ZXRpa2xlbmVuIGNsZWFudXAgTUZFIHN0cmF0ZWd5J3NpbmlcclxuXHRcdFx0Ly8gb3RvbWF0aWsgdXlhbmTEsXJtYXouIFdpbmRvdyBldmVudCBpbGUgc2lueWFsIHlhecSxbmxhecSxcCBNRkUgc3RyYXRlZ3knc2luaW4ga2VuZGlcclxuXHRcdFx0Ly8gYHN0b3JlZFJvdXRlc2AndW51IHRlbWl6bGVtZXNpbmkgc2HEn2zEsXlvcnV6IChha3NpIHRha2RpcmRlIE1GRSdkZSBoaWRkZW4gY29udGFpbmVyJ2FcclxuXHRcdFx0Ly8gdGHFn8Sxbm3EscWfIHBsdWdpbiBlbGVtZW50J2xlcmkgb3JwaGFuIGthbMSxcikuXHJcblx0XHRcdGlmIChrZXkuc3RhcnRzV2l0aCgnbWZlOicpKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGNoZXJLZXkoa2V5KTtcclxuXHRcdFx0XHRpZiAocGFyc2VkKSB7XHJcblx0XHRcdFx0XHR3aW5kb3cuZGlzcGF0Y2hFdmVudChcclxuXHRcdFx0XHRcdFx0bmV3IEN1c3RvbUV2ZW50KCdhcmlsOnJlbW90ZS1jbGVhbnVwJywge1xyXG5cdFx0XHRcdFx0XHRcdGRldGFpbDogeyByZW1vdGVOYW1lOiBwYXJzZWQucmVtb3RlTmFtZSwgdGFiSWQ6IHBhcnNlZC50YWJJZCB9XHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gS2FyxZ/EsSB5w7ZuZGUgKGNyb3NzLWluamVjdG9yKTogaG9zdCBzdHJhdGVneSduaW4geWF5xLFubGFkxLHEn8SxIGBhcmlsOnJlbW90ZS1jbGVhbnVwYFxyXG5cdFx0Ly8gZXZlbnQnaW5pIGhlciBNRkUgc3RyYXRlZ3kgaW5zdGFuY2UnxLEgeWFrYWxhciwga2VuZGkgYHN0b3JlZFJvdXRlc2AndW5kYWtpIG8gcmVtb3RlJ2FcclxuXHRcdC8vICh2ZSB2YXJzYSBvIHRhYklkJ3llKSBhaXQga2V5J2xlcmkgdGVtaXpsZXIuIEhvc3Qgc3RyYXRlZ3kgZGUgYnUgbGlzdGVuZXInYSBzYWhpcFxyXG5cdFx0Ly8gYW1hIGtlbmRpIGAjMC8ke3JlbW90ZU5hbWV9Ly4uLmAga2V5J2xlcmkgb2xtYWTEscSfxLEgacOnaW4gbm8tb3Agw6dhbMSxxZ/EsXIgKGfDvHZlbmxpKS5cclxuXHRcdGNvbnN0IGNsZWFudXBIYW5kbGVyID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XHJcblx0XHRcdGNvbnN0IGRldGFpbCA9IChlIGFzIEN1c3RvbUV2ZW50PHsgcmVtb3RlTmFtZT86IHN0cmluZzsgdGFiSWQ/OiBzdHJpbmcgfCBudWxsIH0+KS5kZXRhaWw7XHJcblx0XHRcdGNvbnN0IHJlbW90ZU5hbWUgPSBkZXRhaWw/LnJlbW90ZU5hbWU7XHJcblx0XHRcdGlmICghcmVtb3RlTmFtZSkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCB0YWJJZCA9IGRldGFpbD8udGFiSWQgPz8gbnVsbDtcclxuXHRcdFx0Y29uc3QgcHJlZml4ID0gYCMwLyR7cmVtb3RlTmFtZX1gO1xyXG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpLmZpbHRlcigoaykgPT4ge1xyXG5cdFx0XHRcdGlmICghay5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHQvLyB0YWJJZCB2ZXJpbGRpeXNlIFNBREVDRSBvIHRhYidhIGFpdCBjaGlsZCBoYW5kbGUnbGFyxLEgdGVtaXpsZS4gQWtzaSB0YWtkaXJkZVxyXG5cdFx0XHRcdC8vIGF5bsSxIHJlbW90ZSd1biBiYcWfa2EgdGFiJ2xlcmluaW4gc3RhdGUnaSBkZSB5YW5sxLHFn2zEsWtsYSBzaWxpbmlyLlxyXG5cdFx0XHRcdGlmICh0YWJJZCAmJiAhay5pbmNsdWRlcyhgX3RhYj0ke3RhYklkfWApKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAoIWtleXMubGVuZ3RoKSByZXR1cm47XHJcblx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIGNyb3NzLWluamVjdG9yIGNsZWFudXAgcmVtb3RlTmFtZT1cIiR7cmVtb3RlTmFtZX1cIiB0YWJJZD1cIiR7dGFiSWQgPz8gJyonfVwiIGtleXM9WyR7a2V5cy5qb2luKCcsJyl9XWApO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xyXG5cdFx0XHRcdHRoaXMuY2xlYW51cFN0b3JlZEhhbmRsZSh0aGlzLnN0b3JlZFJvdXRlc1trXSk7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMuc3RvcmVkUm91dGVzW2tdO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FyaWw6cmVtb3RlLWNsZWFudXAnLCBjbGVhbnVwSGFuZGxlcik7XHJcblx0XHQvLyBTdHJhdGVneSBgcHJvdmlkZWRJbjogJ3Jvb3QnYCDihpIgcm9vdCBpbmplY3RvciBkZXN0cm95IGVkaWxkacSfaW5kZSBsaXN0ZW5lcifEsSBrYWxkxLFyLlxyXG5cdFx0Ly8gUHJhdGlrdGUgdXp1biDDtm3DvHJsw7wgYW1hIHRlc3Qgb3J0YW3EsSB2ZSBnZWxlY2VrdGVraSBpZnJhbWUgdmIuIG11bHRpLXdpbmRvd1xyXG5cdFx0Ly8gc2VuYXJ5b2xhcmRhIG9ycGhhbiBsaXN0ZW5lciBixLFyYWttYW1hayBpw6dpbiBkZWZlbnNpdmUuXHJcblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdhcmlsOnJlbW90ZS1jbGVhbnVwJywgY2xlYW51cEhhbmRsZXIpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluamVjdG9yIGRlc3Ryb3kgZWRpbGRpxJ9pbmRlIOKAlCBoaWJyaXQgbW9kZGEgaGVyIHRhYifEsW4gY2hpbGQgYEVudmlyb25tZW50SW5qZWN0b3JgJ8SxIHRhYlxyXG5cdCAqIGthcGFuxLFuY2EgYGRlc3Ryb3koKWAgZWRpbGlyOyBidSBzdHJhdGVneSBgcHJvdmlkZWRJbjoncm9vdCdgIG9sZHXEn3VuZGFuIGNoaWxkIGluamVjdG9yJ2RhXHJcblx0ICogKHJvb3Qtc2NvcGUpIG1hdGVyaWFsaXplIG9sbXXFnyBpbnN0YW5jZSBkYSB5xLFrxLFsxLFyIOKAlCBgc3RvcmVkUm91dGVzYCd0YSBrYWxhbiBUw5xNIGRldGFjaGVkXHJcblx0ICogaGFuZGxlJ2xhcsSxIHRlbWl6bGVyLiBBa3NpIGhhbGRlIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCBpbGUgaGlkZGVuIGNvbnRhaW5lcidhXHJcblx0ICogdGHFn8Sxbm3EscWfIHBsdWdpbiBjdXN0b20gZWxlbWVudCdsZXJpICjDtnJuLiBgPG1kLXNlYXJjaD5gKSBvcnBoYW4ga2FsxLFyIChtZW1vcnkgbGVhayk6IE1GRVxyXG5cdCAqIGludGVybmFsIHJvdXRlIGtleSdsZXJpIGBfdGFiYCB0YcWfxLFtYWTEscSfxLEgacOnaW4gYGFyaWw6cmVtb3RlLWNsZWFudXBgIGNyb3NzLWluamVjdG9yIHRlbWl6bGnEn2lcclxuXHQgKiBvbmxhcmEgdWxhxZ9hbWF6LiBJbmplY3Rvci1kZXN0cm95IGJhemzEsSBidSBzw7xww7xybWUgZ2FyYW50aWxpIHZlIGlkZW1wb3RlbnR0aXIuXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpO1xyXG5cdFx0aWYgKGtleXMubGVuZ3RoKSBjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBuZ09uRGVzdHJveSDihpIgJHtrZXlzLmxlbmd0aH0gc3RvcmVkIGhhbmRsZSB0ZW1pemxlbml5b3IgKHRhYiBrYXBhbmTEsSlgKTtcclxuXHRcdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuXHRcdFx0dGhpcy5jbGVhbnVwU3RvcmVkSGFuZGxlKHRoaXMuc3RvcmVkUm91dGVzW2tleV0pO1xyXG5cdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNba2V5XTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZlcmlsZW4ga2V5IGnDp2luIGRpcmVjdCArIGNoaWxkIGNsZWFudXAgdXlndWxhci4gRWZmZWN0IGnDp2luZGVuIGF5csSxxZ90xLFyxLFsbcSxxZ8gaGVscGVyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcHJvY2Vzc0NsZWFudXBLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdC8vIERvxJ9ydWRhbiBlxZ9sZcWfZW4ga2V5IHZhcnNhIG9udSBzaWwuXHJcblx0XHRpZiAodGhpcy5zdG9yZWRSb3V0ZXNba2V5XSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBjbGVhbnVwIOKGkiBkaXJlY3QgbWF0Y2ggXCIke2tleX1cImApO1xyXG5cdFx0XHR0aGlzLmNsZWFudXBTdG9yZWRIYW5kbGUodGhpcy5zdG9yZWRSb3V0ZXNba2V5XSk7XHJcblx0XHRcdGRlbGV0ZSB0aGlzLnN0b3JlZFJvdXRlc1trZXldO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1hdGNoZXIga2V5IHNpbGluZGnEn2luZGUgKGBtZmU6d2RtOmFiY2AgZ2liaSkgbyByZW1vdGUnYSBhaXQg4oCUIHZhcnNhIG8gdGFiJ2EgYWl0IOKAlFxyXG5cdFx0Ly8gaW50ZXJuYWwgcm91dGUgaGFuZGxlJ2xhcsSxbsSxIGRhIHRlbWl6bGUuIENvbnZlbnRpb246IG1hdGNoZXIga2V5XHJcblx0XHQvLyBgbWZlOiR7cmVtb3RlTmFtZX1gIHZleWEgYG1mZToke3JlbW90ZU5hbWV9OiR7dGFiSWR9YCwgbm9ybWFsIGtleSdsZXJcclxuXHRcdC8vIGAjMC8ke3JlbW90ZU5hbWV9Ly4uLj8uLi4mX3RhYj0ke3RhYklkfWAgZm9ybWF0xLFuZGEuXHJcblx0XHRpZiAoa2V5LnN0YXJ0c1dpdGgoJ21mZTonKSkge1xyXG5cdFx0XHRjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlTWF0Y2hlcktleShrZXkpO1xyXG5cdFx0XHRpZiAoIXBhcnNlZCkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCB7IHJlbW90ZU5hbWUsIHRhYklkIH0gPSBwYXJzZWQ7XHJcblx0XHRcdGNvbnN0IHByZWZpeCA9IGAjMC8ke3JlbW90ZU5hbWV9YDtcclxuXHRcdFx0Zm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuc3RvcmVkUm91dGVzKSkge1xyXG5cdFx0XHRcdGlmICghay5zdGFydHNXaXRoKHByZWZpeCkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdC8vIHRhYklkIHZlcmlsZGl5c2Ugc2FkZWNlIG8gdGFiJ2EgYWl0IGNoaWxkIGhhbmRsZSdsYXLEsSB0ZW1pemxlXHJcblx0XHRcdFx0aWYgKHRhYklkICYmICFrLmluY2x1ZGVzKGBfdGFiPSR7dGFiSWR9YCkpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIGNsZWFudXAg4oaSIGNoaWxkIG1hdGNoIFwiJHtrfVwiYCk7XHJcblx0XHRcdFx0dGhpcy5jbGVhbnVwU3RvcmVkSGFuZGxlKHRoaXMuc3RvcmVkUm91dGVzW2tdKTtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNba107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBtZmU6JHtyZW1vdGVOYW1lfWAgdmV5YSBgbWZlOiR7cmVtb3RlTmFtZX06JHt0YWJJZH1gIGZvcm1hdMSxbmRha2kgbWF0Y2hlciBrZXknaSBwYXJzZSBlZGVyLlxyXG5cdCAqIHRhYklkIHlva3NhIGBudWxsYCBkw7ZuZXIgKGdlcml5ZSBkw7Zuw7xrIHV5dW1sdWx1azogbGVnYWN5IMOnYcSfcsSxbGFyIHRhYklkIHZlcm1leWViaWxpcikuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwYXJzZU1hdGNoZXJLZXkoa2V5OiBzdHJpbmcpOiB7IHJlbW90ZU5hbWU6IHN0cmluZzsgdGFiSWQ6IHN0cmluZyB8IG51bGwgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFrZXkuc3RhcnRzV2l0aCgnbWZlOicpKSByZXR1cm4gbnVsbDtcclxuXHRcdGNvbnN0IHRhaWwgPSBrZXkuc3Vic3RyaW5nKDQpO1xyXG5cdFx0Y29uc3QgY29sb25JZHggPSB0YWlsLmluZGV4T2YoJzonKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHJlbW90ZU5hbWU6IGNvbG9uSWR4ID09PSAtMSA/IHRhaWwgOiB0YWlsLnN1YnN0cmluZygwLCBjb2xvbklkeCksXHJcblx0XHRcdHRhYklkOiBjb2xvbklkeCA9PT0gLTEgPyBudWxsIDogdGFpbC5zdWJzdHJpbmcoY29sb25JZHggKyAxKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN0b3JlZCBoYW5kbGUnxLEgdGFtYW1lbiB0ZW1pemxlOiBoaWRkZW4gY29udGFpbmVyJ2Rha2kgcHJlc2VydmVkIGVsZW1lbnQnbGVyaSAocGx1Z2luXHJcblx0ICogY3VzdG9tIGVsZW1lbnQnbGVyaSArIEFyaWxXZWJDb21wb25lbnRXcmFwcGVyJ8SxbiBgPGFwcC14eHg+YCBlbGVtZW50J2kpIERPTSdkYW4ga2FsZMSxcixcclxuXHQgKiBzb25yYSBBbmd1bGFyIGBjb21wb25lbnRSZWYuZGVzdHJveSgpYCBpbGUgdmlldyB0cmVlJ3NpbmkgZGVzdHJveSBldC5cclxuXHQgKlxyXG5cdCAqIGBjb21wb25lbnRSZWYuZGVzdHJveSgpYCB0ZWsgYmHFn8SxbmEgeWV0ZXJsaSBkZcSfaWw6IEFuZ3VsYXIgc2FkZWNlIHZpZXcgdHJlZSdzaW5pIGJpbGlyLFxyXG5cdCAqIGJpemltIGBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlYCB2ZSBgcHJlc2VydmVXZWJDb21wb25lbnRFbGVtZW50YCBpbGUgaGlkZGVuXHJcblx0ICogY29udGFpbmVyJ2EgbWFudWVsIHRhxZ/EsW5hbiBlbGVtZW50J2xlcmRlbiBoYWJlcmkgeW9rdHVyIOKGkiBvbmxhciBvcnBoYW4ga2FsxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgY2xlYW51cFN0b3JlZEhhbmRsZShoYW5kbGU6IERldGFjaGVkUm91dGVIYW5kbGUgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcblx0XHRpZiAoIWhhbmRsZSkgcmV0dXJuOyAvLyBBbmd1bGFyIFJvdXRlcifEsW4gYHN0b3JlKHJvdXRlLCBudWxsKWAgaWxlIGLEsXJha3TEscSfxLEgb3JwaGFuIGtleSdsZXIgacOnaW4gZGVmZW5zaXZlIGd1YXJkLlxyXG5cdFx0Y29uc3QgaGlkZGVuQ29udGFpbmVyID0gdGhpcy5nZXRIaWRkZW5Db250YWluZXIoKTtcclxuXHJcblx0XHQvLyAxLiBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlIGlsZSB0YcWfxLFuYW4gcGx1Z2luIGVsZW1lbnQnbGVyaSAow7Zybi4gPG1kLXNlYXJjaD4pXHJcblx0XHRjb25zdCBwcmVzZXJ2ZWQgPSB0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5nZXQoaGFuZGxlKTtcclxuXHRcdGlmIChwcmVzZXJ2ZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCB7IGVsIH0gb2YgcHJlc2VydmVkKSB7XHJcblx0XHRcdFx0aWYgKGhpZGRlbkNvbnRhaW5lci5jb250YWlucyhlbCkpIHtcclxuXHRcdFx0XHRcdGhpZGRlbkNvbnRhaW5lci5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucHJlc2VydmVkQ3VzdG9tRWxzLmRlbGV0ZShoYW5kbGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIDIuIHByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudCBpbGUgdGHFn8SxbmFuIHdyYXBwZXIgZWxlbWVudCdpICjDtnJuLiA8YXBwLXdkbT4pXHJcblx0XHRjb25zdCBjb21wb25lbnRSZWYgPSAoaGFuZGxlIGFzIEludGVybmFsRGV0YWNoZWRSb3V0ZUhhbmRsZSkuY29tcG9uZW50UmVmO1xyXG5cdFx0Y29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWY/Lmluc3RhbmNlIGFzIFdyYXBwZXJJbnN0YW5jZSB8IHVuZGVmaW5lZDtcclxuXHRcdGlmIChpbnN0YW5jZT8uZWxlbWVudCkge1xyXG5cdFx0XHQvLyBGbGFnJ2kgdGVtaXpsZSBraSByZW1vdmVDaGlsZCBzb25yYXPEsSB0ZXRpa2xlbmVuIGRpc2Nvbm5lY3RlZENhbGxiYWNrIEFwcGxpY2F0aW9uJ8SxXHJcblx0XHRcdC8vIGdlcsOnZWt0ZW4gZGVzdHJveSBldHNpbiDigJQgYWtzaSBoYWxkZSBNRkVBcHBFbGVtZW50IG9ycGhhbiBrYWzEsXIgKG1lbW9yeSBsZWFrKS5cclxuXHRcdFx0ZGVsZXRlIChpbnN0YW5jZS5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaD86IGJvb2xlYW4gfSkuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2g7XHJcblx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoaW5zdGFuY2UuZWxlbWVudCkpIHtcclxuXHRcdFx0XHRoaWRkZW5Db250YWluZXIucmVtb3ZlQ2hpbGQoaW5zdGFuY2UuZWxlbWVudCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAzLiBBbmd1bGFyIHZpZXcgdHJlZSdzaW5pIGRlc3Ryb3kgZXRcclxuXHRcdGNvbXBvbmVudFJlZj8uZGVzdHJveSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWF0Y2hlciAoTUZFKSByb3V0ZSdsYXIgacOnaW4gdGFiSWQgem9ydW5sdS4gYGdldFRhYklkRnJvbVJvdXRlYCBVUkwgcXVlcnlQYXJhbXMgK1xyXG5cdCAqIGhpc3Rvcnkuc3RhdGUnaSBva3VyLiBIacOnYmlyIGtheW5hayB0YWJJZCB2ZXJtZXpzZSAoaWxrIG5hdmlnYXRpb24gaW50ZXJpbSdpKSBkZXRhY2hcclxuXHQgKiBlZGlsbWV6OyBgZmlyc3RDaGVja0ZvclJvdXRlYCBgX3RhYmAgZWtsZXlpcCB5ZW5pZGVuIG5hdmlnYXRlIGVkZWNlay5cclxuXHQgKi9cclxuXHRzaG91bGREZXRhY2gocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmlzTWF0Y2hlclJvdXRlKHJvdXRlKSAmJiAhdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkRGV0YWNoIGtleT1cIiR7dGhpcy5nZXRSb3V0ZUtleShyb3V0ZSl9XCIg4oaSIGZhbHNlIChtYXRjaGVyIHJvdXRlLCB0YWJJZCB5b2spYCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHQvLyBBbmd1bGFyIGBvdXRsZXQuZGV0YWNoKClgLCBgc3RvcmUoKWAnZGFuIMOWTkNFIMOnYWzEscWfxLFwIHdyYXBwZXIgdmlldyfEsW7EsSBET00nZGFuIHPDtmtlciDihpJcclxuXHRcdC8vIGnDp2luZGVraSBNRkUgYDxhcHAteHh4PmAgZWxlbWVudCdpIGRpc2Nvbm5lY3Qgb2x1ciB2ZSBiYXLEsW5kxLFyZMSxxJ/EsSBpZnJhbWUgKMO2cm4uIFN1cGVyc2V0IGVtYmVkKVxyXG5cdFx0Ly8gcmVsb2FkIG9sdXAgYXV0aCBoYW5kc2hha2UnaW5pIGthbMSxY8SxIGtheWJlZGVyLiBCdSB5w7x6ZGVuIGVsZW1lbnQnaSBIw4JMw4IgYmHEn2zEsXlrZW4sIGRldGFjaCd0ZW5cclxuXHRcdC8vIMOWTkNFIGF0b21pYyBgbW92ZUJlZm9yZWAgaWxlIGhpZGRlbiBjb250YWluZXInYSBhbMSxeW9ydXogKGJrei4gcHJlc2VydmVMaXZlRWxlbWVudEJlZm9yZURldGFjaCkuXHJcblx0XHRpZiAodGhpcy5pc01hdGNoZXJSb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0dGhpcy5wcmVzZXJ2ZUxpdmVFbGVtZW50QmVmb3JlRGV0YWNoKHJvdXRlKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHNob3VsZERldGFjaCBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiB0cnVlYCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHN0b3JlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBzdG9yZSBrZXk9XCIke3JvdXRlS2V5fVwiIGhhbmRsZT1gLCAhIWRldGFjaGVkVHJlZSk7XHJcblx0XHRpZiAoIWRldGFjaGVkVHJlZSkge1xyXG5cdFx0XHRkZWxldGUgdGhpcy5zdG9yZWRSb3V0ZXNbcm91dGVLZXldO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5pc01hdGNoZXJSb3V0ZShyb3V0ZSkgJiYgIXRoaXMuZ2V0VGFiSWRGcm9tUm91dGUocm91dGUpKSB7XHJcblx0XHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHN0b3JlIFNLSVAga2V5PVwiJHtyb3V0ZUtleX1cIiAobWF0Y2hlciByb3V0ZSwgdGFiSWQgeW9rKWApO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnN0b3JlZFJvdXRlc1tyb3V0ZUtleV0gPSBkZXRhY2hlZFRyZWU7XHJcblx0XHR0aGlzLnByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudChkZXRhY2hlZFRyZWUpO1xyXG5cdFx0dGhpcy5wcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGRldGFjaGVkVHJlZSk7XHJcblx0fVxyXG5cclxuXHRzaG91bGRBdHRhY2gocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmlzTWF0Y2hlclJvdXRlKHJvdXRlKSAmJiAhdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSkpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkQXR0YWNoIGtleT1cIiR7dGhpcy5nZXRSb3V0ZUtleShyb3V0ZSl9XCIg4oaSIGZhbHNlIChtYXRjaGVyIHJvdXRlLCB0YWJJZCB5b2spYCk7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zdCBzaG91bGRBdHRhY2ggPSAhIXRoaXMuc3RvcmVkUm91dGVzW3JvdXRlS2V5XTtcclxuXHRcdGNvbnNvbGUubG9nKGBbU3RyYXRlZ3ldIHNob3VsZEF0dGFjaCBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiAke3Nob3VsZEF0dGFjaH0gKHN0b3JlZEtleXM9WyR7T2JqZWN0LmtleXModGhpcy5zdG9yZWRSb3V0ZXMpLmpvaW4oJywnKX1dKWApO1xyXG5cdFx0cmV0dXJuIHNob3VsZEF0dGFjaDtcclxuXHR9XHJcblxyXG5cdHJldHJpZXZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogRGV0YWNoZWRSb3V0ZUhhbmRsZSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuaXNNYXRjaGVyUm91dGUocm91dGUpICYmICF0aGlzLmdldFRhYklkRnJvbVJvdXRlKHJvdXRlKSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHJvdXRlS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShyb3V0ZSk7XHJcblx0XHRjb25zdCBoYW5kbGUgPSB0aGlzLnN0b3JlZFJvdXRlc1tyb3V0ZUtleV07XHJcblx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSByZXRyaWV2ZSBrZXk9XCIke3JvdXRlS2V5fVwiIOKGkiAke2hhbmRsZSA/ICdIQVMnIDogJ05VTEwnfWApO1xyXG5cdFx0aWYgKGhhbmRsZSkge1xyXG5cdFx0XHR0aGlzLnJlc3RvcmVXZWJDb21wb25lbnRFbGVtZW50KGhhbmRsZSk7XHJcblx0XHRcdHRoaXMucmVzdG9yZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGhhbmRsZSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaGFuZGxlIHx8IG51bGw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBXZWIgY29tcG9uZW50IGVsZW1lbnQnaW5pIGhpZGRlbiBjb250YWluZXInYSB0YcWfxLFyIChzdGF0ZSBrb3J1bm1hc8SxIGnDp2luKS5cclxuXHQgKlxyXG5cdCAqIEVsZW1lbnQnZSBgX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2hgIGZsYWcnaSB5YXrEsWzEsXI6IGByZW1vdmVDaGlsZGAgKyBgYXBwZW5kQ2hpbGRgXHJcblx0ICogYXJhc8SxbmRhIE1GRSBjdXN0b20gZWxlbWVudCdpbiBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgJ2kgdGV0aWtsZW5peW9yOyBmbGFnIG9yYWRha2lcclxuXHQgKiBkZXN0cm95IHRpbWVyJ8SxbsSxICoqZGV0ZXJtaW5pc3RpYyoqIMWfZWtpbGRlIGJ5cGFzcyBlZGVyLiBFc2tpZGVuIDUwbXMgaGFyZGNvZGVkIHRpbWVyXHJcblx0ICogeWFyxLHFnyBrb8WfdWx1IMO8cmV0aXlvcmR1ICh5YXZhxZ8gY2loYXpsYXJkYSBBcHBsaWNhdGlvbiBpc3RlbXNpeiBkZXN0cm95IG9sdXlvcmR1KS5cclxuXHQgKi9cclxuXHRwcml2YXRlIHByZXNlcnZlV2ViQ29tcG9uZW50RWxlbWVudChkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGNvbXBvbmVudFJlZiA9IChkZXRhY2hlZFRyZWUgYXMgSW50ZXJuYWxEZXRhY2hlZFJvdXRlSGFuZGxlKS5jb21wb25lbnRSZWY7XHJcblx0XHRcdGlmICghY29tcG9uZW50UmVmKSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBXcmFwcGVySW5zdGFuY2UgfCB1bmRlZmluZWQ7XHJcblx0XHRcdGlmICghY29tcG9uZW50SW5zdGFuY2U/LmVsZW1lbnQpIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBjb21wb25lbnRJbnN0YW5jZS5lbGVtZW50IGFzIEhUTUxFbGVtZW50ICYgeyBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaD86IGJvb2xlYW4gfTtcclxuXHRcdFx0Y29uc3QgaGlkZGVuQ29udGFpbmVyID0gdGhpcy5nZXRIaWRkZW5Db250YWluZXIoKTtcclxuXHJcblx0XHRcdC8vIEZsYWcg4oCUIGZhbGxiYWNrIChtb3ZlQmVmb3JlIGRlc3Rla2xlbm1leWVuIHRhcmF5xLFjxLEpIHJlbW92ZUNoaWxkIHlhcHTEscSfxLFuZGEgZGlzY29ubmVjdGVkQ2FsbGJhY2tcclxuXHRcdFx0Ly8gYnVudSBva3V5dXAgZGVzdHJveSfEsSBhdGxhci4gbW92ZUJlZm9yZSB5b2x1bmRhIGNhbGxiYWNrIGhpw6cgdGV0aWtsZW5tZXogKGZsYWcgemFyYXJzxLF6IGthbMSxcikuXHJcblx0XHRcdGVsZW1lbnQuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2ggPSB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gYHNob3VsZERldGFjaGAgw6dvxJ91IGR1cnVtZGEgZWxlbWVudCdpIGRldGFjaCd0ZW4gw5ZOQ0UgemF0ZW4gdGHFn8SxZMSxIOKGkiBidXJhZGEgbm8tb3AuXHJcblx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoZWxlbWVudCkpIHJldHVybjtcclxuXHJcblx0XHRcdC8vIFRhxZ/EsW5tYWTEsXlzYSAow7ZyLiBzaG91bGREZXRhY2ggZWxlbWVudCdpIGJ1bGFtYWTEsSk6IGJ1IG5va3RhZGEgZWxlbWVudCBBbmd1bGFyIHRhcmFmxLFuZGFuXHJcblx0XHRcdC8vIHphdGVuIGRpc2Nvbm5lY3QgZWRpbG1pxZ8gb2xhYmlsaXI7IG1vdmVJbnRvIGJhxJ9sxLF5c2EgbW92ZUJlZm9yZSwgZGXEn2lsc2UgYXBwZW5kQ2hpbGQga3VsbGFuxLFyLlxyXG5cdFx0XHR0aGlzLm1vdmVJbnRvKGhpZGRlbkNvbnRhaW5lciwgZWxlbWVudCk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgaGlkZGVuIGNvbnRhaW5lclxcJ2EgdGHFn8SxbmTEsSAoc3RhdGUga29ydW51eW9yKScpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgcHJlc2VydmUgZWRpbGlya2VuIGhhdGE6JywgZXJyb3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogV2ViIGNvbXBvbmVudCBlbGVtZW50J2luaSBoaWRkZW4gY29udGFpbmVyJ2RhbiDDp8Sxa2FyIHZlIGNvbXBvbmVudCB2aWV3J2EgZWtsZW1leWkgZGVuZS5cclxuXHQgKlxyXG5cdCAqIGBfX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaGAgZmxhZydpIHRlbWl6bGVuaXIg4oCUIGXEn2VyIGJ1IHJldHJpZXZlIHNvbnJhc8SxIGVsZW1lbnRcclxuXHQgKiBnZXLDp2VrIGFubGFtZGEgZGVzdHJveSBlZGlsaXJzZSBgZGlzY29ubmVjdGVkQ2FsbGJhY2tgIGZsYWcgeW9rIGthYnVsIGVkaXAgQXBwbGljYXRpb25cclxuXHQgKiBjbGVhbnVwJ8SxbsSxIHnDvHLDvHRlY2VrLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcmVzdG9yZVdlYkNvbXBvbmVudEVsZW1lbnQoZGV0YWNoZWRUcmVlOiBEZXRhY2hlZFJvdXRlSGFuZGxlKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBjb21wb25lbnRSZWYgPSAoZGV0YWNoZWRUcmVlIGFzIEludGVybmFsRGV0YWNoZWRSb3V0ZUhhbmRsZSkuY29tcG9uZW50UmVmO1xyXG5cdFx0XHRpZiAoIWNvbXBvbmVudFJlZikgcmV0dXJuO1xyXG5cclxuXHRcdFx0Y29uc3QgY29tcG9uZW50SW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgV3JhcHBlckluc3RhbmNlIHwgdW5kZWZpbmVkO1xyXG5cdFx0XHRpZiAoIWNvbXBvbmVudEluc3RhbmNlPy5lbGVtZW50KSByZXR1cm47XHJcblxyXG5cdFx0XHRjb25zdCBlbGVtZW50ID0gY29tcG9uZW50SW5zdGFuY2UuZWxlbWVudCBhcyBIVE1MRWxlbWVudCAmIHsgX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2g/OiBib29sZWFuIH07XHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblxyXG5cdFx0XHRpZiAoIWhpZGRlbkNvbnRhaW5lci5jb250YWlucyhlbGVtZW50KSkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gw5ZORU1MSTogZWxlbWVudCdpIGhpZGRlbiBjb250YWluZXInZGFuIEVSS0VOIMOnxLFrYXJtxLF5b3J1ei4gYHJldHJpZXZlYCwgQW5ndWxhclxyXG5cdFx0XHQvLyBgb3V0bGV0LmF0dGFjaCgpYCd0ZW4gw5ZOQ0Ugw6dhxJ9yxLFsxLFyIOKGkiB2YyBoZW7DvHogRE9NJ2EgYmHEn2zEsSBkZcSfaWxkaXIuIEVya2VuIHJlbW92ZUNoaWxkXHJcblx0XHRcdC8vIGVsZW1lbnQnaSBkaXNjb25uZWN0IGVkZXIgdmUgaWZyYW1lIHJlbG9hZCBvbHVyICh0YW0ga2HDp8SxbmTEscSfxLFtxLF6IMWfZXkpLiBCdW51biB5ZXJpbmVcclxuXHRcdFx0Ly8gZWxlbWVudCdpIGhpZGRlbiBjb250YWluZXInZGEgKGJhxJ9sxLEpIGLEsXJha8SxcCB2YyBiYcSfbGFuxLFuY2EgYXRvbWljIG1vdmVCZWZvcmUgaWxlXHJcblx0XHRcdC8vIGRvxJ9ydWRhbiBoaWRkZW4g4oaSIHZjIHRhxZ/EsXlvcnV6OyBpZnJhbWUgaGnDpyByZWxvYWQgb2xtYXouXHJcblx0XHRcdGNvbnN0IHRyeVJlc3RvcmUgPSAoKTogYm9vbGVhbiA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdmNOYXRpdmUgPSBjb21wb25lbnRJbnN0YW5jZS52Yz8ubmF0aXZlRWxlbWVudDtcclxuXHRcdFx0XHRpZiAoIXZjTmF0aXZlIHx8ICF2Y05hdGl2ZS5pc0Nvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdHRoaXMubW92ZUludG8odmNOYXRpdmUsIGVsZW1lbnQpO1xyXG5cdFx0XHRcdC8vIEZsYWcnaSBtb3ZlSW50byBTT05SQVNJIHNpbDogZmFsbGJhY2sgcmVtb3ZlQ2hpbGQgeWFwYXJzYSBkaXNjb25uZWN0ZWRDYWxsYmFjayBmbGFnJ2kgaMOibMOiIGfDtnJzw7xuLlxyXG5cdFx0XHRcdGRlbGV0ZSBlbGVtZW50Ll9fYXJpbFByZXNlcnZlRHVyaW5nRGV0YWNoO1xyXG5cdFx0XHRcdGNvbXBvbmVudEluc3RhbmNlLnByb3BzVXBkYXRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdXZWIgY29tcG9uZW50IGVsZW1lbnQgY29tcG9uZW50IHZpZXdcXCdhIGVrbGVuZGkgKHJldHJpZXZlIHPEsXJhc8SxbmRhKScpO1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSGVtZW4gZGVuZSAodmMgZ2VuZWxkZSBiYcSfbMSxIGRlxJ9pbCkg4oaSIGRlxJ9pbHNlIG1pY3JvdGFzayd0ZSB0ZWtyYXIgZGVuZS4gYG91dGxldC5hdHRhY2goKWBcclxuXHRcdFx0Ly8gcmV0cmlldmUnZGVuIGhlbWVuIHNvbnJhIFNFTktST04gw6dhbMSxxZ/EsXI7IG1pY3JvdGFzayBnZcOnZXJsaSB0YXNrIGJpdGluY2UgKGF0dGFjaCB0YW1hbWxhbm3EscWfLFxyXG5cdFx0XHQvLyB2YyBiYcSfbMSxKSBhbWEgUEFJTlQndGVuIMOWTkNFIGtvxZ9hciDihpIgZWxlbWVudCB5ZXJpbmUgb3R1cnVyLCB0YWIgZ2XDp2nFn2luZGUgYm/Fny1mbGFzaCBvbG1hei5cclxuXHRcdFx0aWYgKHRyeVJlc3RvcmUoKSkgcmV0dXJuO1xyXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcblx0XHRcdFx0aWYgKHRyeVJlc3RvcmUoKSkgcmV0dXJuO1xyXG5cdFx0XHRcdC8vIFNvbiDDp2FyZTogdmMgaMOibMOiIGJhxJ9sxLEgZGXEn2lsLiBFbGVtZW50J2kgeWluZSBkZSB2Yyd5ZSB0YcWfxLEga2kgdGFiIGJvxZ8ga2FsbWFzxLFuXHJcblx0XHRcdFx0Ly8gKGF0dGFjaCB2aWV3J8SxIGJhxJ9sYXnEsW5jYSBnw7Zyw7xuw7xyIG9sdXIg4oCUIGlmcmFtZSByZWxvYWQgb2xhYmlsaXIgYW1hIGVza2kgZGF2cmFuxLHFnyBrb3J1bnVyKS5cclxuXHRcdFx0XHRjb25zdCB2Y05hdGl2ZSA9IGNvbXBvbmVudEluc3RhbmNlLnZjPy5uYXRpdmVFbGVtZW50O1xyXG5cdFx0XHRcdGlmICh2Y05hdGl2ZSkge1xyXG5cdFx0XHRcdFx0dGhpcy5tb3ZlSW50byh2Y05hdGl2ZSwgZWxlbWVudCk7XHJcblx0XHRcdFx0XHRkZWxldGUgZWxlbWVudC5fX2FyaWxQcmVzZXJ2ZUR1cmluZ0RldGFjaDtcclxuXHRcdFx0XHRcdGNvbXBvbmVudEluc3RhbmNlLnByb3BzVXBkYXRlZCA9IGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb21wb25lbnRJbnN0YW5jZS5uZWVkc1Jlc3RvcmUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ1dlYiBjb21wb25lbnQgZWxlbWVudCByZXN0b3JlIGVkaWxlY2VrICh2aWV3IGhhesSxciBkZcSfaWwsIG5nQWZ0ZXJWaWV3SW5pdFxcJ3RlIHRla3JhciBkZW5lbmVjZWspJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignV2ViIGNvbXBvbmVudCBlbGVtZW50IHJlc3RvcmUgZWRpbGlya2VuIGhhdGE6JywgZXJyb3IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2xvYmFsIGhpZGRlbiBjb250YWluZXInxLEgb2x1xZ90dXJ1ciB2ZXlhIGTDtm5kw7xyw7xyXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRIaWRkZW5Db250YWluZXIoKTogSFRNTEVsZW1lbnQge1xyXG5cdFx0Y29uc3Qgc2xvdCA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IF9fYXJpbFdlYkNvbXBvbmVudEhpZGRlbkNvbnRhaW5lcj86IEhUTUxFbGVtZW50IH07XHJcblx0XHRsZXQgY29udGFpbmVyID0gc2xvdC5fX2FyaWxXZWJDb21wb25lbnRIaWRkZW5Db250YWluZXI7XHJcblx0XHRpZiAoIWNvbnRhaW5lcikge1xyXG5cdFx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcblx0XHRcdGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xyXG5cdFx0XHRjb250YWluZXIuc3R5bGUudG9wID0gJy05OTk5cHgnO1xyXG5cdFx0XHRjb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cdFx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XHJcblx0XHRcdHNsb3QuX19hcmlsV2ViQ29tcG9uZW50SGlkZGVuQ29udGFpbmVyID0gY29udGFpbmVyO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBlbGAnaSBgdGFyZ2V0YCfEsW4gc29uIMOnb2N1xJ91IG9sYWNhayDFn2VraWxkZSBUQcWeSVIuIGBtb3ZlQmVmb3JlYCAoYXRvbWljIG1vdmUpIGRlc3Rla2xlbml5b3IgdmVcclxuXHQgKiBoZXIgaWtpIGTDvMSfw7xtIGRlIGJhxJ9sxLF5c2Egb251IGt1bGxhbsSxcjogbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQgKGlmcmFtZSkgcmVsb2FkIE9MTUFEQU4gdmUgY3VzdG9tXHJcblx0ICogZWxlbWVudCdpbiBjb25uZWN0ZWQvZGlzY29ubmVjdGVkIGNhbGxiYWNrJ2xlcmkgdGV0aWtsZW5tZWRlbiB0YcWfxLFyIOKGkiBpZnJhbWUtdGFiYW5sxLEgZW1iZWQnbGVyaW5cclxuXHQgKiAoU3VwZXJzZXQpIGF1dGggaGFuZHNoYWtlJ2kgKyBzY3JvbGwvZmlsdHJlIHN0YXRlJ2kga29ydW51ci4gRGVzdGVrbGVubWl5b3JzYSB2ZXlhIHRhxZ/EsW1hIGvEsXPEsXRsYXLEsVxyXG5cdCAqIGlobGFsIGVkaWxpcnNlIChkaXNjb25uZWN0ZWQgLyBjcm9zcy1kb2N1bWVudCkgcmVtb3ZlQ2hpbGQrYXBwZW5kQ2hpbGQnYSBkw7zFn2VyIChlc2tpIGRhdnJhbsSxxZ86IGlmcmFtZVxyXG5cdCAqIHJlbG9hZCBvbHVyIGFtYSBpxZ9sZW0gZ8O8dmVubGkgdGFtYW1sYW7EsXIpLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgbW92ZUludG8odGFyZ2V0OiBIVE1MRWxlbWVudCwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcblx0XHRjb25zdCBtb3ZlciA9IHRhcmdldCBhcyBIVE1MRWxlbWVudCAmIHsgbW92ZUJlZm9yZT86IChub2RlOiBOb2RlLCBjaGlsZDogTm9kZSB8IG51bGwpID0+IHZvaWQgfTtcclxuXHRcdGlmICh0eXBlb2YgbW92ZXIubW92ZUJlZm9yZSA9PT0gJ2Z1bmN0aW9uJyAmJiBlbC5pc0Nvbm5lY3RlZCAmJiB0YXJnZXQuaXNDb25uZWN0ZWQpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRtb3Zlci5tb3ZlQmVmb3JlKGVsLCBudWxsKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH0gY2F0Y2gge1xyXG5cdFx0XHRcdC8vIG1vdmVCZWZvcmUga8Sxc8SxdGxhcsSxIGlobGFsIGVkaWxkaSDihpIgYcWfYcSfxLFkYWtpIGtsYXNpayB0YcWfxLFtYXlhIGTDvMWfLlxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlICE9PSB0YXJnZXQpIHtcclxuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRhcmdldC5jb250YWlucyhlbCkpIHtcclxuXHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKGVsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGBzaG91bGREZXRhY2hgIGnDp2luZGVuLCBBbmd1bGFyIGBvdXRsZXQuZGV0YWNoKClgIMOnYWzEscWfbWFkYW4gw5ZOQ0Ugw6dhxJ9yxLFsxLFyOiBjYW5sxLEgb3V0bGV0J3Rla2kgTUZFXHJcblx0ICogZWxlbWVudCdpbmkgYGFyaWwtdGFiLWlkYCBhdHRyaWJ1dGUndW5kYW4gYnVsdXAgYXRvbWljIGBtb3ZlQmVmb3JlYCBpbGUgaGlkZGVuIGNvbnRhaW5lcidhIHRhxZ/EsXIuXHJcblx0ICogQsO2eWxlY2UgQW5ndWxhciB3cmFwcGVyIHZpZXcnxLFuxLEgc8O2a3TDvMSfw7xuZGUgYDxhcHAteHh4PmAgZWxlbWVudCdpIHphdGVuIGfDvHZlbmxpL2JhxJ9sxLEga29udW1kYWTEsXIgdmVcclxuXHQgKiBiYXLEsW5kxLFyZMSxxJ/EsSBpZnJhbWUgcmVsb2FkIG9sbWF6LiBFbGVtZW50IGJ1bHVuYW1heiB5YSBkYSB6YXRlbiBoaWRkZW4gY29udGFpbmVyJ2RheXNhIG5vLW9wIOKGklxyXG5cdCAqIGBzdG9yZSgpYCBlc2tpIHlvbHV5bGEgZGV2cmV5ZSBnaXJlciAocmVncmVzeW9uIHlvaykuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwcmVzZXJ2ZUxpdmVFbGVtZW50QmVmb3JlRGV0YWNoKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCB0YWJJZCA9IHRoaXMuZ2V0VGFiSWRGcm9tUm91dGUocm91dGUpO1xyXG5cdFx0XHRpZiAoIXRhYklkKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblx0XHRcdGNvbnN0IGNhbmRpZGF0ZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbYXJpbC10YWItaWQ9XCIke3RhYklkfVwiXWApO1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBBcnJheS5mcm9tKGNhbmRpZGF0ZXMpKSB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSBjYW5kaWRhdGUgYXMgSFRNTEVsZW1lbnQgJiB7IF9fYXJpbFByZXNlcnZlRHVyaW5nRGV0YWNoPzogYm9vbGVhbiB9O1xyXG5cdFx0XHRcdGlmIChoaWRkZW5Db250YWluZXIuY29udGFpbnMoZWwpKSBjb250aW51ZTtcclxuXHRcdFx0XHQvLyBGYWxsYmFjayByZW1vdmVDaGlsZCB5b2x1bmRhIGRpc2Nvbm5lY3RlZENhbGxiYWNrJ2luIGRlc3Ryb3knxLEgYXRsYW1hc8SxIGnDp2luIGZsYWcnaSB0YcWfxLFtYWRhbiDDlk5DRSBzZXQgZXQuXHJcblx0XHRcdFx0ZWwuX19hcmlsUHJlc2VydmVEdXJpbmdEZXRhY2ggPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMubW92ZUludG8oaGlkZGVuQ29udGFpbmVyLCBlbCk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gcHJlLWRldGFjaCBwcmVzZXJ2ZTogPCR7ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpfT4gdGFiPVwiJHt0YWJJZH1cIiBoaWRkZW4gY29udGFpbmVyJ2EgdGHFn8SxbmTEsWApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1tTdHJhdGVneV0gcHJlLWRldGFjaCBwcmVzZXJ2ZSBoYXRhc8SxOicsIGVycm9yKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERldGFjaGVkIHJvdXRlIHZpZXcnxLEgacOnaW5kZWtpIHBsdWdpbi9NRkUgY3VzdG9tIGVsZW1lbnQnbGVyaW5pICh0YWcgYWTEsW5kYSBgLWBcclxuXHQgKiBidWx1bmFuIHZlIGBjdXN0b21FbGVtZW50c2AnYSBrYXnEsXRsxLEgb2xhbmxhcsSxKSBoaWRkZW4gY29udGFpbmVyJ2EgdGHFn8SxciB2ZVxyXG5cdCAqIHllcmxlcmluZSBiaXJlciBDb21tZW50IHBsYWNlaG9sZGVyIGLEsXJha8Sxci4gRWxlbWVudCBkb2N1bWVudCd0YW4gYXlyxLFsbWF6LFxyXG5cdCAqIEFuZ3VsYXIgRWxlbWVudHMgYGRpc2Nvbm5lY3RlZENhbGxiYWNrYCAxMG1zIGRlc3Ryb3kgdGltZXInxLEga2FuYXQgw6fEsXJwbWF6IOKAlFxyXG5cdCAqIGRvbGF5xLFzxLF5bGEgcGx1Z2luJ2luIGBDb21wb25lbnRSZWZgIHZlIGRhaGlsaSBzdGF0ZSdpIChmb3JtIGRlxJ9lcmxlcmksIHNlYXJjaFxyXG5cdCAqIHNvbnXDp2xhcsSxIHZzLikgc29ucmFraSByZXRyaWV2ZSdlIGthZGFyIGtvcnVudXIuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlKGRldGFjaGVkVHJlZTogRGV0YWNoZWRSb3V0ZUhhbmRsZSk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgY29tcG9uZW50UmVmID0gKGRldGFjaGVkVHJlZSBhcyBJbnRlcm5hbERldGFjaGVkUm91dGVIYW5kbGUpLmNvbXBvbmVudFJlZjtcclxuXHRcdFx0Y29uc3Qgcm9vdEVsID0gY29tcG9uZW50UmVmPy5sb2NhdGlvbj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcclxuXHRcdFx0aWYgKCFyb290RWwpIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IGhpZGRlbkNvbnRhaW5lciA9IHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCk7XHJcblx0XHRcdGNvbnN0IGFsbCA9IHJvb3RFbC5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7XHJcblx0XHRcdGNvbnN0IHByZXNlcnZlZExpc3Q6IFByZXNlcnZlZEN1c3RvbUVsW10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZWwgb2YgQXJyYXkuZnJvbShhbGwpKSB7XHJcblx0XHRcdFx0Y29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdGlmICghdGFnLmluY2x1ZGVzKCctJykpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGlmICghd2luZG93LmN1c3RvbUVsZW1lbnRzPy5nZXQodGFnKSkgY29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IG5vZGUgPSBlbCBhcyBIVE1MRWxlbWVudDtcclxuXHRcdFx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoYGFyaWwtcHJlc2VydmVkOiR7dGFnfWApO1xyXG5cdFx0XHRcdG5vZGUucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHBsYWNlaG9sZGVyLCBub2RlKTtcclxuXHRcdFx0XHRoaWRkZW5Db250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XHJcblx0XHRcdFx0cHJlc2VydmVkTGlzdC5wdXNoKHsgZWw6IG5vZGUsIHBsYWNlaG9sZGVyIH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAocHJlc2VydmVkTGlzdC5sZW5ndGgpIHtcclxuXHRcdFx0XHR0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5zZXQoZGV0YWNoZWRUcmVlLCBwcmVzZXJ2ZWRMaXN0KTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhgW1N0cmF0ZWd5XSBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlOiAke3ByZXNlcnZlZExpc3QubGVuZ3RofSBlbGVtZW50IHRhxZ/EsW5kxLFgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdDdXN0b20gZWxlbWVudCBwcmVzZXJ2ZSBlZGlsaXJrZW4gaGF0YTonLCBlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBwcmVzZXJ2ZUN1c3RvbUVsZW1lbnRzSW5UcmVlIGlsZSB0YcWfxLFuYW4gY3VzdG9tIGVsZW1lbnQnbGVyaSBvcmlqaW5hbFxyXG5cdCAqIHBsYWNlaG9sZGVyJ2xhcsSxbsSxbiB5ZXJpbmUgZ2VyaSBrb3lhci5cclxuXHQgKi9cclxuXHRwcml2YXRlIHJlc3RvcmVDdXN0b21FbGVtZW50c0luVHJlZShkZXRhY2hlZFRyZWU6IERldGFjaGVkUm91dGVIYW5kbGUpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHByZXNlcnZlZExpc3QgPSB0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5nZXQoZGV0YWNoZWRUcmVlKTtcclxuXHRcdFx0aWYgKCFwcmVzZXJ2ZWRMaXN0Py5sZW5ndGgpIHJldHVybjtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgeyBlbCwgcGxhY2Vob2xkZXIgfSBvZiBwcmVzZXJ2ZWRMaXN0KSB7XHJcblx0XHRcdFx0aWYgKHBsYWNlaG9sZGVyLnBhcmVudE5vZGUpIHtcclxuXHRcdFx0XHRcdHBsYWNlaG9sZGVyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsLCBwbGFjZWhvbGRlcik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIFBsYWNlaG9sZGVyIGHEn2HDp3RhbiBrb3BhcsSxbG3EscWfIOKAlCBwYXJlbnQgdmlldyB0YW1hbWVuIGRlc3Ryb3kgZWRpbG1pxZ8gb2xhYmlsaXJcclxuXHRcdFx0XHRcdC8vICjDtnJuLiByZW1vdGUgdGFiIGthcGFubcSxxZ8pLiBFbGVtZW50J2kgaGlkZGVuIGNvbnRhaW5lcidkYSBixLFyYWttYW1hayBpw6dpbiBjbGVhbnVwLlxyXG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKCdbU3RyYXRlZ3ldIHJlc3RvcmU6IHBsYWNlaG9sZGVyIHBhcmVudCB5b2ssIGN1c3RvbSBlbGVtZW50IGNsZWFudXAgZWRpbGl5b3InLCBlbC50YWdOYW1lKTtcclxuXHRcdFx0XHRcdGlmIChlbC5wYXJlbnROb2RlID09PSB0aGlzLmdldEhpZGRlbkNvbnRhaW5lcigpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0SGlkZGVuQ29udGFpbmVyKCkucmVtb3ZlQ2hpbGQoZWwpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnByZXNlcnZlZEN1c3RvbUVscy5kZWxldGUoZGV0YWNoZWRUcmVlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gcmVzdG9yZUN1c3RvbUVsZW1lbnRzSW5UcmVlOiAke3ByZXNlcnZlZExpc3QubGVuZ3RofSBlbGVtZW50IGdlcmkgeWVybGXFn3RpcmlsZGlgKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignQ3VzdG9tIGVsZW1lbnQgcmVzdG9yZSBlZGlsaXJrZW4gaGF0YTonLCBlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGlzTWF0Y2hlclJvdXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuICEhcm91dGU/LnJvdXRlQ29uZmlnPy5tYXRjaGVyO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRSZW1vdGVOYW1lKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xyXG5cdFx0cmV0dXJuIChyb3V0ZT8ucm91dGVDb25maWc/LmRhdGEgYXMgUGx1Z2luQ29uZmlnIHwgdW5kZWZpbmVkKT8ucmVtb3RlTmFtZSA/PyBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVVJMIGA/X3RhYj08dGFiSWQ+YCBxdWVyeSBwYXJhbSfEsW7EsSBva3Ug4oCUIGBOYXZTZXJ2aWNlYCBoZXIgdGFiIGnDp2luIHVuaXF1ZSBkZcSfZXIgw7xyZXRpci5cclxuXHQgKiBgSXNvbGF0ZWRMb2NhdGlvblN0cmF0ZWd5YCBzYXllc2luZGUgaG9zdCBSb3V0ZXInYSB0YWJzxLF6IG5hdmlnYXRpb24gZ2VsbWV6LCBzYWRlY2VcclxuXHQgKiBgdGFiU3RhdGUoe190YWJ9KWAnbMSxIHRhYiB0xLFrbGFtYWxhcsSxIGdlbGlyIOKGkiBgcm91dGUucXVlcnlQYXJhbXNbJ190YWInXWAgaGVyIHphbWFuIGRvbHUuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBnZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpOiBzdHJpbmcgfCBudWxsIHtcclxuXHRcdGNvbnN0IHYgPSByb3V0ZT8ucXVlcnlQYXJhbXM/LlsnX3RhYiddO1xyXG5cdFx0cmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA+IDAgPyB2IDogbnVsbDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJvdXRlIGtleSdpbmkgb2x1xZ90dXJ1ci4gTWF0Y2hlciAod2ViIGNvbXBvbmVudCkgcm91dGUnbGFyIGnDp2luIHJlbW90ZU5hbWUgKyB0YWJJZFxyXG5cdCAqIGJhemzEsSBrZXkga3VsbGFuxLFsxLFyIOKAlCBheW7EsSByZW1vdGUndW4gaGVyIHRhYidpIGF5csSxIE1GRSBjdXN0b20gZWxlbWVudCBpbnN0YW5jZSfEsW5hXHJcblx0ICogc2FoaXB0aXIgKGJhxJ/EsW1zxLF6IHN0YXRlKS5cclxuXHQgKlxyXG5cdCAqIE5vcm1hbCByb3V0ZSdsYXIgacOnaW4gYHBhdGhGcm9tUm9vdGAgw7x6ZXJpbmRlbiB0YW0geW9sIMO8cmV0aWxpciwgYXJkxLFuZGFuIHF1ZXJ5IHBhcmFtc1xyXG5cdCAqIGVrbGVuaXIgKHphdGVuIGBfdGFiYCBkYWhpbCkg4oCUIG5lc3RlZCBib8WfLXBhdGggKGBwYXRoOiAnJ2ApIGNoaWxkIHJvdXRlJ2xhcsSxbsSxbiBheW7EsSBgXCJcImBcclxuXHQgKiBrZXknaXlsZSDDp2FrxLHFn21hc8SxbsSxIGVuZ2VsbGVyIHZlIGF5bsSxIHBhdGgnaW4gaWtpIHRhYidpIGZhcmtsxLEga2V5IGFsxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZ2V0Um91dGVLZXkocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBzdHJpbmcge1xyXG5cdFx0aWYgKHRoaXMuaXNNYXRjaGVyUm91dGUocm91dGUpKSB7XHJcblx0XHRcdGNvbnN0IHJlbW90ZU5hbWUgPSB0aGlzLmdldFJlbW90ZU5hbWUocm91dGUpO1xyXG5cdFx0XHRpZiAocmVtb3RlTmFtZSkge1xyXG5cdFx0XHRcdGNvbnN0IHRhYklkID0gdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShyb3V0ZSk7XHJcblx0XHRcdFx0cmV0dXJuIHRhYklkID8gYG1mZToke3JlbW90ZU5hbWV9OiR7dGFiSWR9YCA6IGBtZmU6JHtyZW1vdGVOYW1lfWA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFRhbSBwYXRoOiBrw7ZrIOKGkiBpbnRlcm1lZGlhdGUg4oaSIHNlbGYuIEJvxZ8gc2VnbWVudGxlcmkgaW5kZXggaWxlIGtvcnV5YXJhayBoaXllcmFyxZ9pXHJcblx0XHQvLyBwb3ppc3lvbnVudSBrZXknZSBkYWhpbCBlZGVyaXogKGthcmRlxZ8gZW1wdHktcGF0aCByb3V0ZSdsYXIgZmFya2zEsSBrZXkgYWzEsXIpLlxyXG5cdFx0Y29uc3QgZnVsbFBhdGggPSByb3V0ZS5wYXRoRnJvbVJvb3RcclxuXHRcdFx0Lm1hcCgociwgaSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNlZyA9IHIudXJsLm1hcCgocykgPT4gcy5wYXRoKS5qb2luKCcvJyk7XHJcblx0XHRcdFx0cmV0dXJuIHNlZy5sZW5ndGggPiAwID8gc2VnIDogYCMke2l9YDtcclxuXHRcdFx0fSlcclxuXHRcdFx0LmpvaW4oJy8nKTtcclxuXHRcdGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5zZXJpYWxpemVRdWVyeVBhcmFtcyhyb3V0ZS5xdWVyeVBhcmFtcyk7XHJcblx0XHRjb25zdCBmcmFnbWVudCA9IHJvdXRlLmZyYWdtZW50ID8gJyMnICsgcm91dGUuZnJhZ21lbnQgOiAnJztcclxuXHJcblx0XHRyZXR1cm4gZnVsbFBhdGggKyBxdWVyeVBhcmFtcyArIGZyYWdtZW50O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUXVlcnkgcGFyYW0nbGFyxLEgVVJMLXNhZmUgxZ9la2lsZGUgc2VyaWxlxZ90aXJpci4gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3IndW5hXHJcblx0ICogZG/En3J1ZGFuIG9iamVjdCB2ZXJpcnNlayBhcnJheSBkZcSfZXJsZXIgYD9pZHM9MSwyLDNgIGdpYmkgdGVrIGtleSBvbGFyYWsgeWF6xLFsxLFyO1xyXG5cdCAqIEFuZ3VsYXIgUm91dGVyJ8SxbiBgP2lkcz0xJmlkcz0yJmlkcz0zYCBkYXZyYW7EscWfxLF5bGEgdXl1bXN1eiBvbGFiaWxpci4gYGFwcGVuZGAgaWxlXHJcblx0ICogaGVyIGFycmF5IGVsZW1hbsSxIGF5csSxIGVudHJ5IG9sdXIgdmUgbnVsbC91bmRlZmluZWQgZGXEn2VybGVyIGF0bGFuxLFyLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2VyaWFsaXplUXVlcnlQYXJhbXMocGFyYW1zOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90WydxdWVyeVBhcmFtcyddKTogc3RyaW5nIHtcclxuXHRcdC8vIGBzb3J0KClgIGlsZSBkZXRlcm1pbmlzbSDigJQgYXluxLEgc2F5ZmFuxLFuIGZhcmtsxLEgaW5zZXJ0aW9uLW9yZGVyJ2zEsSBxdWVyeVBhcmFtcyfEsVxyXG5cdFx0Ly8gKGRlZXAgbGluayBzaGFyZSwgc2VydmVyLXNpZGUgcmVuZGVyLCBKUy1nZW5lcmF0ZWQgVVJMJ2xlcikgYXluxLEgcm91dGUga2V5IMO8cmV0aXIuXHJcblx0XHQvLyBBa3NpIHRha2RpcmRlIGA/Yj0xJmE9MmAgdmUgYD9hPTImYj0xYCBpa2kgYXlyxLEgaGFuZGxlIG9sYXJhayBjYWNoZSdsZW5pciDihpIgdGFiXHJcblx0XHQvLyBpem9sYXN5b251IGF5bsSxIHNheWZhbsSxbiBpa2kgYXlyxLEgaW5zdGFuY2UnxLFuxLEgYcOnYXIuXHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1zKS5zb3J0KCk7XHJcblx0XHRpZiAoIWtleXMubGVuZ3RoKSByZXR1cm4gJyc7XHJcblx0XHRjb25zdCBvdXQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XHJcblx0XHRmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xyXG5cdFx0XHRjb25zdCB2ID0gcGFyYW1zW2tdO1xyXG5cdFx0XHRpZiAodiA9PSBudWxsKSBjb250aW51ZTtcclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodikpIHtcclxuXHRcdFx0XHR2LmZvckVhY2goKHZ2KSA9PiB2diAhPSBudWxsICYmIG91dC5hcHBlbmQoaywgU3RyaW5nKHZ2KSkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG91dC5hcHBlbmQoaywgU3RyaW5nKHYpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3Qgc3RyID0gb3V0LnRvU3RyaW5nKCk7XHJcblx0XHRyZXR1cm4gc3RyID8gJz8nICsgc3RyIDogJyc7XHJcblx0fVxyXG5cclxuXHRzaG91bGRSZXVzZVJvdXRlKGZ1dHVyZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgY3VycjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgZnV0dXJlTWF0Y2hlciA9IHRoaXMuaXNNYXRjaGVyUm91dGUoZnV0dXJlKTtcclxuXHRcdGNvbnN0IGN1cnJNYXRjaGVyID0gdGhpcy5pc01hdGNoZXJSb3V0ZShjdXJyKTtcclxuXHJcblx0XHRpZiAoZnV0dXJlTWF0Y2hlciAmJiBjdXJyTWF0Y2hlcikge1xyXG5cdFx0XHRjb25zdCBmciA9IHRoaXMuZ2V0UmVtb3RlTmFtZShmdXR1cmUpO1xyXG5cdFx0XHRjb25zdCBjciA9IHRoaXMuZ2V0UmVtb3RlTmFtZShjdXJyKTtcclxuXHRcdFx0Y29uc3QgZnQgPSB0aGlzLmdldFRhYklkRnJvbVJvdXRlKGZ1dHVyZSk7XHJcblx0XHRcdGNvbnN0IGN0ID0gdGhpcy5nZXRUYWJJZEZyb21Sb3V0ZShjdXJyKTtcclxuXHRcdFx0Ly8gQXluxLEgcmVtb3RlIG9sc2EgYmlsZSBmYXJrbMSxIHRhYidsZXJzZSBmcmVzaCBjb21wb25lbnQgaW5zdGFudGlhdGUgZWRpbG1lbGkg4oCUXHJcblx0XHRcdC8vIGFrc2kgdGFrZGlyZGUgaWtpIHRhYiB0ZWsgY29tcG9uZW50UmVmJ2kgcGF5bGHFn8SxciB2ZSBzdGF0ZSBpem9sYXN5b251IGtheWJvbHVyLlxyXG5cdFx0XHRjb25zdCBzaG91bGRSZXVzZSA9ICEhZnIgJiYgZnIgPT09IGNyICYmIGZ0ID09PSBjdDtcclxuXHRcdFx0Y29uc29sZS5sb2coYFtTdHJhdGVneV0gc2hvdWxkUmV1c2VSb3V0ZSBtYXRjaGVyIOKGkiAke3Nob3VsZFJldXNlfS4gZnV0dXJlPSR7ZnJ9LyR7ZnR9IGN1cnI9JHtjcn0vJHtjdH1gKTtcclxuXHRcdFx0cmV0dXJuIHNob3VsZFJldXNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChmdXR1cmVNYXRjaGVyICE9PSBjdXJyTWF0Y2hlcikge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnW1N0cmF0ZWd5XSBzaG91bGRSZXVzZVJvdXRlIG1peGVkIOKGkiBmYWxzZScpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc2hvdWxkUmV1c2UgPSBmdXR1cmUucm91dGVDb25maWcgPT09IGN1cnIucm91dGVDb25maWc7XHJcblx0XHRjb25zdCBmdXR1cmVLZXkgPSB0aGlzLmdldFJvdXRlS2V5KGZ1dHVyZSk7XHJcblx0XHRjb25zdCBjdXJyS2V5ID0gdGhpcy5nZXRSb3V0ZUtleShjdXJyKTtcclxuXHRcdGNvbnN0IGZ1dHVyZUNvbXAgPSBmdXR1cmUucm91dGVDb25maWc/LmNvbXBvbmVudD8ubmFtZSA/PyBmdXR1cmUuY29tcG9uZW50Py5uYW1lID8/ICdub25lJztcclxuXHRcdGNvbnN0IGN1cnJDb21wID0gY3Vyci5yb3V0ZUNvbmZpZz8uY29tcG9uZW50Py5uYW1lID8/IGN1cnIuY29tcG9uZW50Py5uYW1lID8/ICdub25lJztcclxuXHRcdGNvbnNvbGUubG9nKFxyXG5cdFx0XHRgW1N0cmF0ZWd5XSBzaG91bGRSZXVzZVJvdXRlIG5vcm1hbCDihpIgJHtzaG91bGRSZXVzZX0uIGZ1dHVyZT1cIiR7ZnV0dXJlS2V5fVwiKCR7ZnV0dXJlQ29tcH0pIGN1cnI9XCIke2N1cnJLZXl9XCIoJHtjdXJyQ29tcH0pYFxyXG5cdFx0KTtcclxuXHRcdHJldHVybiBzaG91bGRSZXVzZTtcclxuXHR9XHJcbn1cclxuIl19
@@ -17,5 +17,6 @@ export var Apps;
17
17
  Apps["REPORT"] = "report";
18
18
  Apps["LGC"] = "lgc";
19
19
  Apps["DMS"] = "dms";
20
+ Apps["EVENT_GATEWAY"] = "event-gateway";
20
21
  })(Apps || (Apps = {}));
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQU4sSUFBWSxJQWtCWDtBQWxCRCxXQUFZLElBQUk7SUFDZixxQkFBYSxDQUFBO0lBQ2IsbUJBQVcsQ0FBQTtJQUNYLG1CQUFXLENBQUE7SUFDWCwyQkFBbUIsQ0FBQTtJQUNuQiwyQkFBbUIsQ0FBQTtJQUNuQixxQkFBYSxDQUFBO0lBQ2IsaUJBQVMsQ0FBQTtJQUNULHFCQUFhLENBQUE7SUFDYixtQkFBVyxDQUFBO0lBQ1gsbUJBQVcsQ0FBQTtJQUNYLG1CQUFXLENBQUE7SUFDWCxtQkFBVyxDQUFBO0lBQ1gsbUJBQVcsQ0FBQTtJQUNYLHVDQUErQixDQUFBO0lBQy9CLHlCQUFpQixDQUFBO0lBQ2pCLG1CQUFXLENBQUE7SUFDWCxtQkFBVyxDQUFBO0FBQ1osQ0FBQyxFQWxCVyxJQUFJLEtBQUosSUFBSSxRQWtCZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVJdGVtQ29tbWFuZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuaW1wb3J0IHsgV2ViQ29tcG9uZW50V3JhcHBlck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1hcmNoaXRlY3RzL21vZHVsZS1mZWRlcmF0aW9uLXRvb2xzJztcclxuXHJcbmV4cG9ydCBlbnVtIEFwcHMge1xyXG5cdFRIT1IgPSAndGhvcicsXHJcblx0Q1JNID0gJ2NybScsXHJcblx0V0RNID0gJ3dkbScsXHJcblx0QklMTElORyA9ICdiaWxsaW5nJyxcclxuXHRQQVlNRU5UID0gJ3BheW1lbnQnLFxyXG5cdFlFQVAgPSAneWVhcCcsXHJcblx0TVcgPSAnbXcnLFxyXG5cdExFTkEgPSAnbGVuYScsXHJcblx0SEVTID0gJ2hlcycsXHJcblx0Q1RTID0gJ2N0cycsXHJcblx0U0lTID0gJ3NpcycsXHJcblx0TU5HID0gJ21uZycsXHJcblx0TURNID0gJ21kbScsXHJcblx0U1RBVEVfTUFDSElORSA9ICdzdGF0ZS1tYWNoaW5lJyxcclxuXHRSRVBPUlQgPSAncmVwb3J0JyxcclxuXHRMR0MgPSAnbGdjJyxcclxuXHRETVMgPSAnZG1zJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwcHNEVE8ge1xyXG5cdHZlcnNpb246IG51bWJlcjtcclxuXHRtb2R1bGVzOiBQbHVnaW5Db25maWdbXTtcclxuXHRwbHVnaW5zOiBQbHVnaW5Db25maWdbXTtcclxuXHRleHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBFeHRlbnNpb25Db25maWc+O1xyXG5cdG1lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeHRlbnNpb25Db25maWcge1xyXG5cdG9wdGlvbnM6IFBsdWdpbkNvbmZpZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnID0gV2ViQ29tcG9uZW50V3JhcHBlck9wdGlvbnMgJiB7XHJcblx0aWQ/OiBzdHJpbmc7XHJcblx0cmVtb3RlTmFtZTogc3RyaW5nO1xyXG5cdHNoYWRvd0RvbVBhc3NpdmU6IGJvb2xlYW47XHJcblx0cGVybWl0dGVkUm9sZXM/OiBzdHJpbmdbXTtcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1BY3Rpb24ge1xyXG5cdG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnO1xyXG5cdHVybDogc3RyaW5nO1xyXG5cdGJvZHk/OiBhbnk7XHJcblx0c3VjY2Vzc1JvdXRlOiBzdHJpbmc7XHJcblx0c3VjY2Vzc1JvdXRlUmVzcG9uc2VLZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTWVudUl0ZW0ge1xyXG5cdHJvdXRlckxpbms/OiBzdHJpbmc7XHJcblx0aWNvbj86IHN0cmluZztcclxuXHRsYWJlbDoge1xyXG5cdFx0W2xhbmd1YWdlQ29kZTogc3RyaW5nXTogc3RyaW5nO1xyXG5cdH07XHJcblx0aXRlbXM/OiBQbHVnaW5NZW51SXRlbVtdO1xyXG5cdHBlcm1pdHRlZFJvbGVzPzogc3RyaW5nW107XHJcblx0YWN0aW9uPzogTWVudUl0ZW1BY3Rpb247XHJcblxyXG5cdC8vIFVJIGZpZWxkc1xyXG5cdHNlcGFyYXRvcj86IGJvb2xlYW47XHJcblx0cm9vdD86IGJvb2xlYW47XHJcblx0cGF0aD86IHN0cmluZztcclxuXHRkaXNhYmxlZD86IGJvb2xlYW47XHJcblx0Y29tbWFuZD8oZXZlbnQ6IE1lbnVJdGVtQ29tbWFuZEV2ZW50KTogdm9pZDtcclxufVxyXG4iXX0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQU4sSUFBWSxJQW1CWDtBQW5CRCxXQUFZLElBQUk7SUFDZixxQkFBYSxDQUFBO0lBQ2IsbUJBQVcsQ0FBQTtJQUNYLG1CQUFXLENBQUE7SUFDWCwyQkFBbUIsQ0FBQTtJQUNuQiwyQkFBbUIsQ0FBQTtJQUNuQixxQkFBYSxDQUFBO0lBQ2IsaUJBQVMsQ0FBQTtJQUNULHFCQUFhLENBQUE7SUFDYixtQkFBVyxDQUFBO0lBQ1gsbUJBQVcsQ0FBQTtJQUNYLG1CQUFXLENBQUE7SUFDWCxtQkFBVyxDQUFBO0lBQ1gsbUJBQVcsQ0FBQTtJQUNYLHVDQUErQixDQUFBO0lBQy9CLHlCQUFpQixDQUFBO0lBQ2pCLG1CQUFXLENBQUE7SUFDWCxtQkFBVyxDQUFBO0lBQ1gsdUNBQStCLENBQUE7QUFDaEMsQ0FBQyxFQW5CVyxJQUFJLEtBQUosSUFBSSxRQW1CZiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1lbnVJdGVtQ29tbWFuZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuaW1wb3J0IHsgV2ViQ29tcG9uZW50V3JhcHBlck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1hcmNoaXRlY3RzL21vZHVsZS1mZWRlcmF0aW9uLXRvb2xzJztcclxuXHJcbmV4cG9ydCBlbnVtIEFwcHMge1xyXG5cdFRIT1IgPSAndGhvcicsXHJcblx0Q1JNID0gJ2NybScsXHJcblx0V0RNID0gJ3dkbScsXHJcblx0QklMTElORyA9ICdiaWxsaW5nJyxcclxuXHRQQVlNRU5UID0gJ3BheW1lbnQnLFxyXG5cdFlFQVAgPSAneWVhcCcsXHJcblx0TVcgPSAnbXcnLFxyXG5cdExFTkEgPSAnbGVuYScsXHJcblx0SEVTID0gJ2hlcycsXHJcblx0Q1RTID0gJ2N0cycsXHJcblx0U0lTID0gJ3NpcycsXHJcblx0TU5HID0gJ21uZycsXHJcblx0TURNID0gJ21kbScsXHJcblx0U1RBVEVfTUFDSElORSA9ICdzdGF0ZS1tYWNoaW5lJyxcclxuXHRSRVBPUlQgPSAncmVwb3J0JyxcclxuXHRMR0MgPSAnbGdjJyxcclxuXHRETVMgPSAnZG1zJyxcclxuXHRFVkVOVF9HQVRFV0FZID0gJ2V2ZW50LWdhdGV3YXknXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwc0RUTyB7XHJcblx0dmVyc2lvbjogbnVtYmVyO1xyXG5cdG1vZHVsZXM6IFBsdWdpbkNvbmZpZ1tdO1xyXG5cdHBsdWdpbnM6IFBsdWdpbkNvbmZpZ1tdO1xyXG5cdGV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEV4dGVuc2lvbkNvbmZpZz47XHJcblx0bWVudUl0ZW1zOiBQbHVnaW5NZW51SXRlbVtdO1xyXG5cdHJvdXRlUGVybWlzc2lvbnM/OiBSb3V0ZVBlcm1pc3Npb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVBlcm1pc3Npb24ge1xyXG5cdHJvdXRlckxpbms6IHN0cmluZztcclxuXHRwZXJtaXR0ZWRSb2xlczogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5zaW9uQ29uZmlnIHtcclxuXHRvcHRpb25zOiBQbHVnaW5Db25maWc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFBsdWdpbkNvbmZpZyA9IFdlYkNvbXBvbmVudFdyYXBwZXJPcHRpb25zICYge1xyXG5cdGlkPzogc3RyaW5nO1xyXG5cdHJlbW90ZU5hbWU6IHN0cmluZztcclxuXHRzaGFkb3dEb21QYXNzaXZlOiBib29sZWFuO1xyXG5cdHBlcm1pdHRlZFJvbGVzPzogc3RyaW5nW107XHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtQWN0aW9uIHtcclxuXHRtZXRob2Q/OiAnR0VUJyB8ICdQT1NUJztcclxuXHR1cmw6IHN0cmluZztcclxuXHRib2R5PzogYW55O1xyXG5cdHN1Y2Nlc3NSb3V0ZTogc3RyaW5nO1xyXG5cdHN1Y2Nlc3NSb3V0ZVJlc3BvbnNlS2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk1lbnVJdGVtIHtcclxuXHRyb3V0ZXJMaW5rPzogc3RyaW5nO1xyXG5cdGljb24/OiBzdHJpbmc7XHJcblx0bGFiZWw6IHtcclxuXHRcdFtsYW5ndWFnZUNvZGU6IHN0cmluZ106IHN0cmluZztcclxuXHR9O1xyXG5cdGl0ZW1zPzogUGx1Z2luTWVudUl0ZW1bXTtcclxuXHRwZXJtaXR0ZWRSb2xlcz86IHN0cmluZ1tdO1xyXG5cdGFjdGlvbj86IE1lbnVJdGVtQWN0aW9uO1xyXG5cclxuXHQvLyBVSSBmaWVsZHNcclxuXHRzZXBhcmF0b3I/OiBib29sZWFuO1xyXG5cdHJvb3Q/OiBib29sZWFuO1xyXG5cdHBhdGg/OiBzdHJpbmc7XHJcblx0ZGlzYWJsZWQ/OiBib29sZWFuO1xyXG5cdGNvbW1hbmQ/KGV2ZW50OiBNZW51SXRlbUNvbW1hbmRFdmVudCk6IHZvaWQ7XHJcbn1cclxuIl19
@@ -1,11 +1,18 @@
1
- import { Injectable, signal } from '@angular/core';
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
2
3
  import * as i0 from "@angular/core";
3
4
  export class RouteCloseService {
4
5
  constructor() {
5
- this.deleteRoute = signal({ key: null });
6
+ this.deleteRouteSubject = new Subject();
7
+ /**
8
+ * Kapatılan tab key'lerinin kuyruğu. Tek-slot signal yerine Subject kullanılıyor:
9
+ * toplu kapatmada (closeAll/closeOthers/closeToRight) ardışık çağrıların her biri ayrı
10
+ * emit olur ve tüketici hepsini işler. Signal coalescing'i son key dışındakileri düşürüyordu.
11
+ */
12
+ this.deleteRoute$ = this.deleteRouteSubject.asObservable();
6
13
  }
7
14
  deleteStoredRoute(key) {
8
- this.deleteRoute.update(() => ({ key }));
15
+ this.deleteRouteSubject.next(key);
9
16
  }
10
17
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RouteCloseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
11
18
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: RouteCloseService, providedIn: 'root' }); }
@@ -16,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
16
23
  providedIn: 'root',
17
24
  }]
18
25
  }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY2xvc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvcm91dGUtY2xvc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUlFLGdCQUFXLEdBQUcsTUFBTSxDQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBSTdEO0lBSEMsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7OEdBSlUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlQ2xvc2VTZXJ2aWNlIHtcclxuICBkZWxldGVSb3V0ZSA9IHNpZ25hbDx7IGtleTogc3RyaW5nIHwgbnVsbCB9Pih7IGtleTogbnVsbCB9KTtcclxuICBkZWxldGVTdG9yZWRSb3V0ZShrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVSb3V0ZS51cGRhdGUoKCkgPT4gKHsga2V5IH0pKTtcclxuICB9XHJcbn1cclxuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY2xvc2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvYm9vdC9jb25maWcvYXBwcy9zcmMvcm91dGUtY2xvc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFJbUIsdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM1RDs7OztXQUlHO1FBQ0gsaUJBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7S0FLdkQ7SUFIQyxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0FYVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvdXRlQ2xvc2VTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlbGV0ZVJvdXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAvKipcclxuICAgKiBLYXBhdMSxbGFuIHRhYiBrZXknbGVyaW5pbiBrdXlydcSfdS4gVGVrLXNsb3Qgc2lnbmFsIHllcmluZSBTdWJqZWN0IGt1bGxhbsSxbMSxeW9yOlxyXG4gICAqIHRvcGx1IGthcGF0bWFkYSAoY2xvc2VBbGwvY2xvc2VPdGhlcnMvY2xvc2VUb1JpZ2h0KSBhcmTEscWfxLFrIMOnYcSfcsSxbGFyxLFuIGhlciBiaXJpIGF5csSxXHJcbiAgICogZW1pdCBvbHVyIHZlIHTDvGtldGljaSBoZXBzaW5pIGnFn2xlci4gU2lnbmFsIGNvYWxlc2NpbmcnaSBzb24ga2V5IGTEscWfxLFuZGFraWxlcmkgZMO8xZ/DvHLDvHlvcmR1LlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJvdXRlJCA9IHRoaXMuZGVsZXRlUm91dGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBkZWxldGVTdG9yZWRSb3V0ZShrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVSb3V0ZVN1YmplY3QubmV4dChrZXkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,21 +1,39 @@
1
- const routePermissions = new Map();
2
- export function setRoutePermissions(menuItems) {
3
- routePermissions.clear();
1
+ const exactPermissions = new Map();
2
+ const patternPermissions = [];
3
+ export function setRoutePermissions(menuItems, routePermissions) {
4
+ exactPermissions.clear();
5
+ patternPermissions.length = 0;
4
6
  buildPermissionsMap(menuItems);
7
+ buildPatternList(routePermissions);
5
8
  }
6
9
  export function getRoutePermissions(url) {
7
10
  const normalizedUrl = url.split('?')[0].replace(/^\//, '');
8
- return routePermissions.get(normalizedUrl);
11
+ return exactPermissions.get(normalizedUrl) ?? patternPermissions.find((p) => p.regex.test(normalizedUrl))?.roles;
9
12
  }
10
13
  function buildPermissionsMap(items) {
11
14
  for (const item of items) {
12
15
  if (item.routerLink && item.permittedRoles?.length) {
13
16
  const normalized = item.routerLink.replace(/^\//, '');
14
- routePermissions.set(normalized, item.permittedRoles);
17
+ exactPermissions.set(normalized, item.permittedRoles);
15
18
  }
16
19
  if (item.items?.length) {
17
20
  buildPermissionsMap(item.items);
18
21
  }
19
22
  }
20
23
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL2Jvb3QvY29uZmlnL2FwcHMvc3JjL3JvdXRlLXBlcm1pc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7QUFFckQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFNBQTJCO0lBQzlELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBVztJQUM5QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUQsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBdUI7SUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNGLENBQUM7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGx1Z2luTWVudUl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuY29uc3Qgcm91dGVQZXJtaXNzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRSb3V0ZVBlcm1pc3Npb25zKG1lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXSk6IHZvaWQge1xyXG5cdHJvdXRlUGVybWlzc2lvbnMuY2xlYXIoKTtcclxuXHRidWlsZFBlcm1pc3Npb25zTWFwKG1lbnVJdGVtcyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZVBlcm1pc3Npb25zKHVybDogc3RyaW5nKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xyXG5cdGNvbnN0IG5vcm1hbGl6ZWRVcmwgPSB1cmwuc3BsaXQoJz8nKVswXS5yZXBsYWNlKC9eXFwvLywgJycpO1xyXG4gIHJldHVybiByb3V0ZVBlcm1pc3Npb25zLmdldChub3JtYWxpemVkVXJsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRQZXJtaXNzaW9uc01hcChpdGVtczogUGx1Z2luTWVudUl0ZW1bXSk6IHZvaWQge1xyXG5cdGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG5cdFx0aWYgKGl0ZW0ucm91dGVyTGluayAmJiBpdGVtLnBlcm1pdHRlZFJvbGVzPy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGl0ZW0ucm91dGVyTGluay5yZXBsYWNlKC9eXFwvLywgJycpO1xyXG5cdFx0XHRyb3V0ZVBlcm1pc3Npb25zLnNldChub3JtYWxpemVkLCBpdGVtLnBlcm1pdHRlZFJvbGVzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XHJcblx0XHRcdGJ1aWxkUGVybWlzc2lvbnNNYXAoaXRlbS5pdGVtcyk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
24
+ function buildPatternList(routePermissions) {
25
+ if (!routePermissions?.length) {
26
+ return;
27
+ }
28
+ for (const entry of routePermissions) {
29
+ if (entry.routerLink && entry.permittedRoles?.length) {
30
+ patternPermissions.push({ regex: globToRegExp(entry.routerLink), roles: entry.permittedRoles });
31
+ }
32
+ }
33
+ }
34
+ function globToRegExp(pattern) {
35
+ const normalized = pattern.replace(/^\//, '').replace(/[.+?^${}()|[\]\\]/g, '\\$&');
36
+ const body = normalized.replace(/\*\*|\*/g, (match) => (match === '**' ? '.*' : '[^/]+'));
37
+ return new RegExp(`^${body}$`);
38
+ }
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcGVybWlzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL2Jvb3QvY29uZmlnL2FwcHMvc3JjL3JvdXRlLXBlcm1pc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7QUFDckQsTUFBTSxrQkFBa0IsR0FBeUMsRUFBRSxDQUFDO0FBRXBFLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUEyQixFQUFFLGdCQUFvQztJQUNwRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXO0lBQzlDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ2xILENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQXVCO0lBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDeEIsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDRixDQUFDO0FBQ0YsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsZ0JBQW9DO0lBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMvQixPQUFPO0lBQ1IsQ0FBQztJQUVELEtBQUssTUFBTSxLQUFLLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN0RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDakcsQ0FBQztJQUNGLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBZTtJQUNwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbHVnaW5NZW51SXRlbSwgUm91dGVQZXJtaXNzaW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbmNvbnN0IGV4YWN0UGVybWlzc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XHJcbmNvbnN0IHBhdHRlcm5QZXJtaXNzaW9uczogeyByZWdleDogUmVnRXhwOyByb2xlczogc3RyaW5nW10gfVtdID0gW107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Um91dGVQZXJtaXNzaW9ucyhtZW51SXRlbXM6IFBsdWdpbk1lbnVJdGVtW10sIHJvdXRlUGVybWlzc2lvbnM/OiBSb3V0ZVBlcm1pc3Npb25bXSk6IHZvaWQge1xyXG5cdGV4YWN0UGVybWlzc2lvbnMuY2xlYXIoKTtcclxuXHRwYXR0ZXJuUGVybWlzc2lvbnMubGVuZ3RoID0gMDtcclxuXHRidWlsZFBlcm1pc3Npb25zTWFwKG1lbnVJdGVtcyk7XHJcblx0YnVpbGRQYXR0ZXJuTGlzdChyb3V0ZVBlcm1pc3Npb25zKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlUGVybWlzc2lvbnModXJsOiBzdHJpbmcpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcblx0Y29uc3Qgbm9ybWFsaXplZFVybCA9IHVybC5zcGxpdCgnPycpWzBdLnJlcGxhY2UoL15cXC8vLCAnJyk7XHJcblx0cmV0dXJuIGV4YWN0UGVybWlzc2lvbnMuZ2V0KG5vcm1hbGl6ZWRVcmwpID8/IHBhdHRlcm5QZXJtaXNzaW9ucy5maW5kKChwKSA9PiBwLnJlZ2V4LnRlc3Qobm9ybWFsaXplZFVybCkpPy5yb2xlcztcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGRQZXJtaXNzaW9uc01hcChpdGVtczogUGx1Z2luTWVudUl0ZW1bXSk6IHZvaWQge1xyXG5cdGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG5cdFx0aWYgKGl0ZW0ucm91dGVyTGluayAmJiBpdGVtLnBlcm1pdHRlZFJvbGVzPy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3Qgbm9ybWFsaXplZCA9IGl0ZW0ucm91dGVyTGluay5yZXBsYWNlKC9eXFwvLywgJycpO1xyXG5cdFx0XHRleGFjdFBlcm1pc3Npb25zLnNldChub3JtYWxpemVkLCBpdGVtLnBlcm1pdHRlZFJvbGVzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XHJcblx0XHRcdGJ1aWxkUGVybWlzc2lvbnNNYXAoaXRlbS5pdGVtcyk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBidWlsZFBhdHRlcm5MaXN0KHJvdXRlUGVybWlzc2lvbnM/OiBSb3V0ZVBlcm1pc3Npb25bXSk6IHZvaWQge1xyXG5cdGlmICghcm91dGVQZXJtaXNzaW9ucz8ubGVuZ3RoKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHRmb3IgKGNvbnN0IGVudHJ5IG9mIHJvdXRlUGVybWlzc2lvbnMpIHtcclxuXHRcdGlmIChlbnRyeS5yb3V0ZXJMaW5rICYmIGVudHJ5LnBlcm1pdHRlZFJvbGVzPy5sZW5ndGgpIHtcclxuXHRcdFx0cGF0dGVyblBlcm1pc3Npb25zLnB1c2goeyByZWdleDogZ2xvYlRvUmVnRXhwKGVudHJ5LnJvdXRlckxpbmspLCByb2xlczogZW50cnkucGVybWl0dGVkUm9sZXMgfSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBnbG9iVG9SZWdFeHAocGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHtcclxuXHRjb25zdCBub3JtYWxpemVkID0gcGF0dGVybi5yZXBsYWNlKC9eXFwvLywgJycpLnJlcGxhY2UoL1suKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuXHRjb25zdCBib2R5ID0gbm9ybWFsaXplZC5yZXBsYWNlKC9cXCpcXCp8XFwqL2csIChtYXRjaCkgPT4gKG1hdGNoID09PSAnKionID8gJy4qJyA6ICdbXi9dKycpKTtcclxuXHRyZXR1cm4gbmV3IFJlZ0V4cChgXiR7Ym9keX0kYCk7XHJcbn1cclxuIl19