@seniorsistemas/platform-components 5.3.2 → 5.3.3-develop-73308358

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 (245) hide show
  1. package/esm2022/modules/advanced-filter/advanced-filter.module.mjs +75 -0
  2. package/esm2022/modules/advanced-filter/components/advanced-filter/advanced-filter.component.mjs +128 -0
  3. package/esm2022/modules/advanced-filter/components/form-filter/form-filter.component.mjs +651 -0
  4. package/esm2022/modules/advanced-filter/index.mjs +6 -0
  5. package/esm2022/modules/advanced-filter/locale/fallback.mjs +73 -0
  6. package/esm2022/modules/advanced-filter/models/context.mjs +2 -0
  7. package/esm2022/modules/advanced-filter/models/depends-on.mjs +2 -0
  8. package/esm2022/modules/advanced-filter/models/enum-item.mjs +2 -0
  9. package/esm2022/modules/advanced-filter/models/filter-type.mjs +14 -0
  10. package/esm2022/modules/advanced-filter/models/filter-value.mjs +2 -0
  11. package/esm2022/modules/advanced-filter/models/filter.mjs +41 -0
  12. package/esm2022/modules/advanced-filter/models/form-filter.mjs +28 -0
  13. package/esm2022/modules/advanced-filter/models/index.mjs +11 -0
  14. package/esm2022/modules/advanced-filter/models/scope.mjs +6 -0
  15. package/esm2022/modules/advanced-filter/models/search.mjs +2 -0
  16. package/esm2022/modules/advanced-filter/models/tab-view.mjs +18 -0
  17. package/esm2022/modules/advanced-filter/models/ticked-filter.mjs +2 -0
  18. package/esm2022/modules/advanced-filter/pipes/map-values.pipe.mjs +14 -0
  19. package/esm2022/modules/advanced-filter/pipes/translate.pipe.mjs +19 -0
  20. package/esm2022/modules/advanced-filter/services/advanced-filter.service.mjs +146 -0
  21. package/esm2022/modules/advanced-filter/services/calendar-options.service.mjs +77 -0
  22. package/esm2022/modules/advanced-filter/services/constants.mjs +6 -0
  23. package/esm2022/modules/advanced-filter/shared/constants.mjs +3 -0
  24. package/esm2022/modules/advanced-filter/utils/comparator.mjs +53 -0
  25. package/esm2022/modules/advanced-filter/utils/filter-id/index.mjs +8 -0
  26. package/esm2022/modules/advanced-filter/utils/filter-value/index.mjs +26 -0
  27. package/esm2022/modules/advanced-filter/utils/filterOperators.mjs +9 -0
  28. package/esm2022/modules/advanced-filter/utils/form-field/index.mjs +52 -0
  29. package/esm2022/modules/advanced-filter/utils/index.mjs +57 -0
  30. package/esm2022/modules/advanced-filter/utils/json-path.mjs +13 -0
  31. package/esm2022/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.mjs +14 -0
  32. package/esm2022/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.mjs +29 -0
  33. package/esm2022/modules/cyclic-json-interceptor/index.mjs +2 -0
  34. package/esm2022/modules/feature-toggle/constants/endpoint.constant.mjs +26 -0
  35. package/esm2022/modules/feature-toggle/feature-toggle.module.mjs +15 -0
  36. package/esm2022/modules/feature-toggle/feature-toggle.service.mjs +42 -0
  37. package/esm2022/modules/feature-toggle/index.mjs +4 -0
  38. package/esm2022/modules/feature-toggle/models/feature.mjs +2 -0
  39. package/esm2022/modules/http-interceptor/http-interceptor.module.mjs +16 -0
  40. package/esm2022/modules/http-interceptor/http-interceptor.service.mjs +42 -0
  41. package/esm2022/modules/http-interceptor/index.mjs +4 -0
  42. package/esm2022/modules/http-interceptor/rest-url.service.mjs +15 -0
  43. package/esm2022/modules/http-interceptor/x-services-url.service.mjs +18 -0
  44. package/esm2022/modules/permissions/permissions.config.mjs +17 -0
  45. package/esm2022/modules/permissions/permissions.module.mjs +43 -0
  46. package/esm2022/modules/permissions/permissions.service.mjs +169 -0
  47. package/esm2022/modules/spotlight/component/spotlight.component.mjs +274 -0
  48. package/esm2022/modules/spotlight/index.mjs +3 -0
  49. package/esm2022/modules/spotlight/locale/fallback.mjs +5 -0
  50. package/esm2022/modules/spotlight/models/display-type.enum.mjs +6 -0
  51. package/esm2022/modules/spotlight/models/index.mjs +10 -0
  52. package/esm2022/modules/spotlight/models/spotlight-control-list.interface.mjs +2 -0
  53. package/esm2022/modules/spotlight/models/spotlight-control.interface.mjs +11 -0
  54. package/esm2022/modules/spotlight/models/spotlight-notification.interface.mjs +2 -0
  55. package/esm2022/modules/spotlight/models/spotlight-screen-list.interface.mjs +2 -0
  56. package/esm2022/modules/spotlight/models/spotlight-screen.interface.mjs +2 -0
  57. package/esm2022/modules/spotlight/models/spotlight-status.enum.mjs +8 -0
  58. package/esm2022/modules/spotlight/models/spotlight-user.interface.mjs +2 -0
  59. package/esm2022/modules/spotlight/models/spotlight-users-list.interface.mjs +2 -0
  60. package/esm2022/modules/spotlight/models/spotlight.interface.mjs +2 -0
  61. package/esm2022/modules/spotlight/models/user-action.enum.mjs +7 -0
  62. package/esm2022/modules/spotlight/pipes/translate.pipe.mjs +19 -0
  63. package/esm2022/modules/spotlight/service/spotlight.service.mjs +34 -0
  64. package/esm2022/modules/spotlight/spotlight.module.mjs +53 -0
  65. package/esm2022/modules/translations/translations.module.mjs +192 -0
  66. package/esm2022/public-api.mjs +10 -0
  67. package/esm2022/seniorsistemas-platform-components.mjs +5 -0
  68. package/fesm2022/seniorsistemas-platform-components.mjs +2432 -0
  69. package/fesm2022/seniorsistemas-platform-components.mjs.map +1 -0
  70. package/index.d.ts +5 -0
  71. package/modules/advanced-filter/advanced-filter.module.d.ts +19 -0
  72. package/modules/advanced-filter/components/advanced-filter/advanced-filter.component.d.ts +4 -3
  73. package/modules/advanced-filter/components/form-filter/form-filter.component.d.ts +15 -12
  74. package/modules/advanced-filter/index.d.ts +1 -0
  75. package/modules/advanced-filter/models/tab-view.d.ts +1 -1
  76. package/modules/advanced-filter/pipes/map-values.pipe.d.ts +3 -0
  77. package/modules/advanced-filter/pipes/translate.pipe.d.ts +4 -3
  78. package/modules/advanced-filter/services/advanced-filter.service.d.ts +7 -3
  79. package/modules/advanced-filter/services/calendar-options.service.d.ts +4 -3
  80. package/modules/advanced-filter/services/constants.d.ts +4 -4
  81. package/modules/advanced-filter/utils/comparator.d.ts +1 -1
  82. package/modules/advanced-filter/utils/form-field/index.d.ts +1 -1
  83. package/modules/advanced-filter/utils/json-path.d.ts +1 -1
  84. package/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.d.ts +4 -0
  85. package/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.d.ts +3 -0
  86. package/modules/feature-toggle/feature-toggle.module.d.ts +5 -0
  87. package/modules/feature-toggle/feature-toggle.service.d.ts +4 -3
  88. package/modules/http-interceptor/http-interceptor.module.d.ts +4 -0
  89. package/modules/http-interceptor/http-interceptor.service.d.ts +3 -3
  90. package/modules/http-interceptor/rest-url.service.d.ts +3 -0
  91. package/modules/http-interceptor/x-services-url.service.d.ts +3 -0
  92. package/modules/permissions/permissions.config.d.ts +7 -1
  93. package/modules/permissions/permissions.module.d.ts +4 -0
  94. package/modules/permissions/permissions.service.d.ts +6 -12
  95. package/modules/spotlight/component/spotlight.component.d.ts +6 -7
  96. package/modules/spotlight/pipes/translate.pipe.d.ts +4 -3
  97. package/modules/spotlight/service/spotlight.service.d.ts +4 -3
  98. package/modules/spotlight/spotlight.module.d.ts +11 -0
  99. package/modules/translations/translations.module.d.ts +9 -5
  100. package/package.json +20 -54
  101. package/public-api.d.ts +1 -0
  102. package/bundles/seniorsistemas-platform-components.umd.js +0 -2745
  103. package/bundles/seniorsistemas-platform-components.umd.js.map +0 -1
  104. package/bundles/seniorsistemas-platform-components.umd.min.js +0 -17
  105. package/bundles/seniorsistemas-platform-components.umd.min.js.map +0 -1
  106. package/esm2015/modules/advanced-filter/advanced-filter.module.js +0 -47
  107. package/esm2015/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +0 -136
  108. package/esm2015/modules/advanced-filter/components/form-filter/form-filter.component.js +0 -578
  109. package/esm2015/modules/advanced-filter/index.js +0 -5
  110. package/esm2015/modules/advanced-filter/locale/fallback.js +0 -73
  111. package/esm2015/modules/advanced-filter/models/context.js +0 -1
  112. package/esm2015/modules/advanced-filter/models/depends-on.js +0 -1
  113. package/esm2015/modules/advanced-filter/models/enum-item.js +0 -1
  114. package/esm2015/modules/advanced-filter/models/filter-type.js +0 -14
  115. package/esm2015/modules/advanced-filter/models/filter-value.js +0 -1
  116. package/esm2015/modules/advanced-filter/models/filter.js +0 -23
  117. package/esm2015/modules/advanced-filter/models/form-filter.js +0 -19
  118. package/esm2015/modules/advanced-filter/models/index.js +0 -5
  119. package/esm2015/modules/advanced-filter/models/scope.js +0 -6
  120. package/esm2015/modules/advanced-filter/models/search.js +0 -1
  121. package/esm2015/modules/advanced-filter/models/tab-view.js +0 -18
  122. package/esm2015/modules/advanced-filter/models/ticked-filter.js +0 -1
  123. package/esm2015/modules/advanced-filter/pipes/map-values.pipe.js +0 -12
  124. package/esm2015/modules/advanced-filter/pipes/translate.pipe.js +0 -22
  125. package/esm2015/modules/advanced-filter/services/advanced-filter.service.js +0 -141
  126. package/esm2015/modules/advanced-filter/services/calendar-options.service.js +0 -81
  127. package/esm2015/modules/advanced-filter/services/constants.js +0 -6
  128. package/esm2015/modules/advanced-filter/shared/constants.js +0 -3
  129. package/esm2015/modules/advanced-filter/utils/comparator.js +0 -55
  130. package/esm2015/modules/advanced-filter/utils/filter-id/index.js +0 -8
  131. package/esm2015/modules/advanced-filter/utils/filter-value/index.js +0 -24
  132. package/esm2015/modules/advanced-filter/utils/filterOperators.js +0 -11
  133. package/esm2015/modules/advanced-filter/utils/form-field/index.js +0 -50
  134. package/esm2015/modules/advanced-filter/utils/index.js +0 -57
  135. package/esm2015/modules/advanced-filter/utils/json-path.js +0 -12
  136. package/esm2015/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.js +0 -14
  137. package/esm2015/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.js +0 -27
  138. package/esm2015/modules/cyclic-json-interceptor/index.js +0 -2
  139. package/esm2015/modules/feature-toggle/constants/endpoint.constant.js +0 -26
  140. package/esm2015/modules/feature-toggle/feature-toggle.module.js +0 -15
  141. package/esm2015/modules/feature-toggle/feature-toggle.service.js +0 -48
  142. package/esm2015/modules/feature-toggle/index.js +0 -3
  143. package/esm2015/modules/feature-toggle/models/feature.js +0 -1
  144. package/esm2015/modules/http-interceptor/http-interceptor.module.js +0 -16
  145. package/esm2015/modules/http-interceptor/http-interceptor.service.js +0 -47
  146. package/esm2015/modules/http-interceptor/index.js +0 -4
  147. package/esm2015/modules/http-interceptor/rest-url.service.js +0 -14
  148. package/esm2015/modules/http-interceptor/x-services-url.service.js +0 -17
  149. package/esm2015/modules/permissions/permissions.config.js +0 -11
  150. package/esm2015/modules/permissions/permissions.module.js +0 -42
  151. package/esm2015/modules/permissions/permissions.service.js +0 -196
  152. package/esm2015/modules/spotlight/component/spotlight.component.js +0 -274
  153. package/esm2015/modules/spotlight/index.js +0 -3
  154. package/esm2015/modules/spotlight/locale/fallback.js +0 -5
  155. package/esm2015/modules/spotlight/models/display-type.enum.js +0 -6
  156. package/esm2015/modules/spotlight/models/index.js +0 -4
  157. package/esm2015/modules/spotlight/models/spotlight-control-list.interface.js +0 -1
  158. package/esm2015/modules/spotlight/models/spotlight-control.interface.js +0 -3
  159. package/esm2015/modules/spotlight/models/spotlight-notification.interface.js +0 -1
  160. package/esm2015/modules/spotlight/models/spotlight-screen-list.interface.js +0 -1
  161. package/esm2015/modules/spotlight/models/spotlight-screen.interface.js +0 -1
  162. package/esm2015/modules/spotlight/models/spotlight-status.enum.js +0 -8
  163. package/esm2015/modules/spotlight/models/spotlight-user.interface.js +0 -1
  164. package/esm2015/modules/spotlight/models/spotlight-users-list.interface.js +0 -1
  165. package/esm2015/modules/spotlight/models/spotlight.interface.js +0 -1
  166. package/esm2015/modules/spotlight/models/user-action.enum.js +0 -7
  167. package/esm2015/modules/spotlight/pipes/translate.pipe.js +0 -22
  168. package/esm2015/modules/spotlight/service/spotlight.service.js +0 -38
  169. package/esm2015/modules/spotlight/spotlight.module.js +0 -37
  170. package/esm2015/modules/translations/translations.module.js +0 -182
  171. package/esm2015/public-api.js +0 -9
  172. package/esm2015/seniorsistemas-platform-components.js +0 -16
  173. package/esm5/modules/advanced-filter/advanced-filter.module.js +0 -54
  174. package/esm5/modules/advanced-filter/components/advanced-filter/advanced-filter.component.js +0 -144
  175. package/esm5/modules/advanced-filter/components/form-filter/form-filter.component.js +0 -626
  176. package/esm5/modules/advanced-filter/index.js +0 -5
  177. package/esm5/modules/advanced-filter/locale/fallback.js +0 -73
  178. package/esm5/modules/advanced-filter/models/context.js +0 -1
  179. package/esm5/modules/advanced-filter/models/depends-on.js +0 -1
  180. package/esm5/modules/advanced-filter/models/enum-item.js +0 -1
  181. package/esm5/modules/advanced-filter/models/filter-type.js +0 -14
  182. package/esm5/modules/advanced-filter/models/filter-value.js +0 -1
  183. package/esm5/modules/advanced-filter/models/filter.js +0 -25
  184. package/esm5/modules/advanced-filter/models/form-filter.js +0 -25
  185. package/esm5/modules/advanced-filter/models/index.js +0 -5
  186. package/esm5/modules/advanced-filter/models/scope.js +0 -6
  187. package/esm5/modules/advanced-filter/models/search.js +0 -1
  188. package/esm5/modules/advanced-filter/models/tab-view.js +0 -29
  189. package/esm5/modules/advanced-filter/models/ticked-filter.js +0 -1
  190. package/esm5/modules/advanced-filter/pipes/map-values.pipe.js +0 -16
  191. package/esm5/modules/advanced-filter/pipes/translate.pipe.js +0 -23
  192. package/esm5/modules/advanced-filter/services/advanced-filter.service.js +0 -152
  193. package/esm5/modules/advanced-filter/services/calendar-options.service.js +0 -82
  194. package/esm5/modules/advanced-filter/services/constants.js +0 -6
  195. package/esm5/modules/advanced-filter/shared/constants.js +0 -3
  196. package/esm5/modules/advanced-filter/utils/comparator.js +0 -55
  197. package/esm5/modules/advanced-filter/utils/filter-id/index.js +0 -8
  198. package/esm5/modules/advanced-filter/utils/filter-value/index.js +0 -25
  199. package/esm5/modules/advanced-filter/utils/filterOperators.js +0 -11
  200. package/esm5/modules/advanced-filter/utils/form-field/index.js +0 -52
  201. package/esm5/modules/advanced-filter/utils/index.js +0 -57
  202. package/esm5/modules/advanced-filter/utils/json-path.js +0 -12
  203. package/esm5/modules/cyclic-json-interceptor/cyclic-json-interceptor.module.js +0 -17
  204. package/esm5/modules/cyclic-json-interceptor/cyclic-json-interceptor.service.js +0 -30
  205. package/esm5/modules/cyclic-json-interceptor/index.js +0 -2
  206. package/esm5/modules/feature-toggle/constants/endpoint.constant.js +0 -27
  207. package/esm5/modules/feature-toggle/feature-toggle.module.js +0 -18
  208. package/esm5/modules/feature-toggle/feature-toggle.service.js +0 -51
  209. package/esm5/modules/feature-toggle/index.js +0 -3
  210. package/esm5/modules/feature-toggle/models/feature.js +0 -1
  211. package/esm5/modules/http-interceptor/http-interceptor.module.js +0 -19
  212. package/esm5/modules/http-interceptor/http-interceptor.service.js +0 -49
  213. package/esm5/modules/http-interceptor/index.js +0 -4
  214. package/esm5/modules/http-interceptor/rest-url.service.js +0 -17
  215. package/esm5/modules/http-interceptor/x-services-url.service.js +0 -20
  216. package/esm5/modules/permissions/permissions.config.js +0 -17
  217. package/esm5/modules/permissions/permissions.module.js +0 -46
  218. package/esm5/modules/permissions/permissions.service.js +0 -212
  219. package/esm5/modules/spotlight/component/spotlight.component.js +0 -300
  220. package/esm5/modules/spotlight/index.js +0 -3
  221. package/esm5/modules/spotlight/locale/fallback.js +0 -5
  222. package/esm5/modules/spotlight/models/display-type.enum.js +0 -6
  223. package/esm5/modules/spotlight/models/index.js +0 -4
  224. package/esm5/modules/spotlight/models/spotlight-control-list.interface.js +0 -1
  225. package/esm5/modules/spotlight/models/spotlight-control.interface.js +0 -7
  226. package/esm5/modules/spotlight/models/spotlight-notification.interface.js +0 -1
  227. package/esm5/modules/spotlight/models/spotlight-screen-list.interface.js +0 -1
  228. package/esm5/modules/spotlight/models/spotlight-screen.interface.js +0 -1
  229. package/esm5/modules/spotlight/models/spotlight-status.enum.js +0 -8
  230. package/esm5/modules/spotlight/models/spotlight-user.interface.js +0 -1
  231. package/esm5/modules/spotlight/models/spotlight-users-list.interface.js +0 -1
  232. package/esm5/modules/spotlight/models/spotlight.interface.js +0 -1
  233. package/esm5/modules/spotlight/models/user-action.enum.js +0 -7
  234. package/esm5/modules/spotlight/pipes/translate.pipe.js +0 -23
  235. package/esm5/modules/spotlight/service/spotlight.service.js +0 -39
  236. package/esm5/modules/spotlight/spotlight.module.js +0 -40
  237. package/esm5/modules/translations/translations.module.js +0 -226
  238. package/esm5/public-api.js +0 -9
  239. package/esm5/seniorsistemas-platform-components.js +0 -16
  240. package/fesm2015/seniorsistemas-platform-components.js +0 -2284
  241. package/fesm2015/seniorsistemas-platform-components.js.map +0 -1
  242. package/fesm5/seniorsistemas-platform-components.js +0 -2507
  243. package/fesm5/seniorsistemas-platform-components.js.map +0 -1
  244. package/seniorsistemas-platform-components.d.ts +0 -15
  245. package/seniorsistemas-platform-components.metadata.json +0 -1
@@ -1,196 +0,0 @@
1
- import { __awaiter, __decorate, __param } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Inject, Injectable } from '@angular/core';
4
- import { Router } from '@angular/router';
5
- import { TranslateService } from '@ngx-translate/core';
6
- import { MessageService } from "primeng/api";
7
- import { from, of, throwError } from 'rxjs';
8
- import { catchError, map } from 'rxjs/operators';
9
- import { Environment, ENVIRONMENT, Permission, Resource, Resources, RESOURCES, Result } from './permissions.config';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "./permissions.config";
12
- import * as i2 from "@angular/common/http";
13
- import * as i3 from "@angular/router";
14
- import * as i4 from "primeng/api";
15
- import * as i5 from "@ngx-translate/core";
16
- export let promise;
17
- let PermissionsService = class PermissionsService {
18
- constructor(resources, environment, http, router, messageService, translate) {
19
- this.resources = resources;
20
- this.environment = environment;
21
- this.http = http;
22
- this.router = router;
23
- this.messageService = messageService;
24
- this.translate = translate;
25
- this.checkedPermissions = [];
26
- this.actionUrl = 'platform/authorization/queries';
27
- }
28
- // v2
29
- checkAccess(resources) {
30
- const permissions = [];
31
- resources.forEach(rec => {
32
- rec.actions.forEach(action => {
33
- if (!rec.uri) {
34
- const resource = this.getUriByResourceName(rec.name, rec.entity);
35
- rec.uri = resource;
36
- }
37
- permissions.push({ action, resource: rec.uri });
38
- });
39
- });
40
- return this.http.post(`${this.actionUrl}/checkAccess`, { includeFilters: true, permissions }).pipe(map(({ permissions: checkedPermissions }) => {
41
- this.checkedPermissions = [...this.checkedPermissions, ...checkedPermissions];
42
- const values = {};
43
- if (this.shouldRedirectToForbiddenPage(resources, checkedPermissions)) {
44
- this.router.navigate(['error', 403]);
45
- return throwError('forbidden');
46
- }
47
- checkedPermissions.forEach(permission => {
48
- const resource = resources.find(res => res.uri === permission.resource);
49
- const { name } = resource;
50
- values[name] = values[name] || {};
51
- values[name][permission.action] = permission.authorized;
52
- values[name][permission.action.toLowerCase()] = permission.authorized;
53
- if (permission.resourceFilters && permission.resourceFilters.length) {
54
- if (!values[name]['resourceFilters']) {
55
- values[name]['resourceFilters'] = [];
56
- }
57
- permission.resourceFilters.forEach((resourceFilter) => {
58
- values[name]['resourceFilters'].push(resourceFilter);
59
- });
60
- }
61
- });
62
- return values;
63
- }));
64
- }
65
- // v1
66
- get(resource = '') {
67
- if (!promise) {
68
- promise = this.getPermissions();
69
- }
70
- return from(promise).pipe(map((permissions) => {
71
- this.checkedPermissions = permissions;
72
- if (resource) {
73
- const resourceKey = Object.keys(permissions).find(key => key.toLowerCase() === resource.toLowerCase());
74
- return permissions[resourceKey];
75
- }
76
- return permissions;
77
- }), catchError((err) => {
78
- promise = undefined;
79
- this.messageService.add({
80
- severity: 'error',
81
- summary: this.translate.instant('permission_error_summary'),
82
- detail: this.translate.instant('permission_error_detail')
83
- });
84
- return of(this.getPermissionObject(false));
85
- }));
86
- }
87
- isAuthorized(resourceName, action, isEntity) {
88
- if (!this.checkedPermissions.length) {
89
- throwError('\'Permissions\' are not defined. You should call \'get\' or \'checkAccess\' method first.');
90
- }
91
- const resourceUri = this.getUriByResourceName(resourceName, isEntity);
92
- const permissionsOfResource = this.checkedPermissions.filter(perm => perm.resource === resourceUri);
93
- const permissionOfAction = permissionsOfResource.find(permRec => permRec.action.toLowerCase() === action.toLowerCase());
94
- return permissionOfAction && permissionOfAction.authorized;
95
- }
96
- getUriByResourceName(resourceName, isEntity) {
97
- const { domain, service } = this.environment;
98
- if (!domain || !service) {
99
- throwError('You must inform domain and service name');
100
- }
101
- const uriBase = `res://senior.com.br/${domain}/${service}`;
102
- if (isEntity) {
103
- return `${uriBase}/entities/${resourceName}`;
104
- }
105
- else {
106
- return `${uriBase}/${resourceName}`;
107
- }
108
- }
109
- /**
110
- * Valida com base nas propriedade redirectToError e actionsToCheck
111
- * se a ação de um recurso deve enviar para a página de erro caso não tenha autorização
112
- */
113
- shouldRedirectToForbiddenPage(resources = [], permissions) {
114
- const permissionsDenied = permissions.filter(perm => !perm.authorized);
115
- if (permissionsDenied && permissionsDenied.length) {
116
- const resourcesToCheck = resources.filter(resource => resource.redirectToError);
117
- if (resourcesToCheck && resourcesToCheck.length) {
118
- return resourcesToCheck.every(resource => {
119
- const actionsToCheck = resource.actionsToCheck && resource.actionsToCheck.length ? resource.actionsToCheck : resource.actions;
120
- return actionsToCheck.every(action => permissionsDenied.some(permissionDenied => permissionDenied.resource === resource.uri && permissionDenied.action === action));
121
- });
122
- }
123
- return false;
124
- }
125
- return false;
126
- }
127
- getFlatEnvironment() {
128
- return this.environment.ignorePermissions;
129
- }
130
- getFlatResources() {
131
- return this.resources.reduce((result, item) => {
132
- if (!item) {
133
- return result;
134
- }
135
- if (Array.isArray(item)) {
136
- return [...result, ...item];
137
- }
138
- return [...result, item];
139
- }, []);
140
- }
141
- getPermissionObject(defaultValue) {
142
- return this.getFlatResources().reduce((resources, resource) => {
143
- resources[resource.name] = resource.actions.reduce((actions, action) => {
144
- actions[action] = defaultValue;
145
- actions[action.toLowerCase()] = defaultValue;
146
- return actions;
147
- }, {});
148
- return resources;
149
- }, {});
150
- }
151
- getPermissions() {
152
- return __awaiter(this, void 0, void 0, function* () {
153
- if (this.getFlatEnvironment()) {
154
- return this.getPermissionObject(true);
155
- }
156
- const resources = this.getFlatResources();
157
- const perm = resources
158
- .map(resource => resource.actions.map((action) => ({ action: action, resource: resource.uri })))
159
- .reduce((acc, val) => [...acc, ...val]);
160
- const permissions = yield this.http
161
- .post(`${this.actionUrl}/checkAccess`, {
162
- includeFilters: false,
163
- permissions: perm
164
- })
165
- .toPromise()
166
- .then(response => response.permissions);
167
- const values = {};
168
- permissions.forEach((permission) => {
169
- const resource = resources.find((res) => res.uri === permission.resource);
170
- const { name } = resource;
171
- values[name] = values[name] ? values[name] : {};
172
- values[name][permission.action] = permission.authorized;
173
- values[name][permission.action.toLowerCase()] = permission.authorized;
174
- });
175
- return values;
176
- });
177
- }
178
- };
179
- PermissionsService.ctorParameters = () => [
180
- { type: undefined, decorators: [{ type: Inject, args: [RESOURCES,] }] },
181
- { type: Environment, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
182
- { type: HttpClient },
183
- { type: Router },
184
- { type: MessageService },
185
- { type: TranslateService }
186
- ];
187
- PermissionsService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PermissionsService_Factory() { return new PermissionsService(i0.ɵɵinject(i1.RESOURCES), i0.ɵɵinject(i1.ENVIRONMENT), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.Router), i0.ɵɵinject(i4.MessageService), i0.ɵɵinject(i5.TranslateService)); }, token: PermissionsService, providedIn: "root" });
188
- PermissionsService = __decorate([
189
- Injectable({
190
- providedIn: 'root'
191
- }),
192
- __param(0, Inject(RESOURCES)),
193
- __param(1, Inject(ENVIRONMENT))
194
- ], PermissionsService);
195
- export { PermissionsService };
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9wbGF0Zm9ybS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kdWxlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBRXBILE1BQU0sQ0FBQyxJQUFJLE9BQXFCLENBQUM7QUFLakMsSUFBYSxrQkFBa0IsR0FBL0IsTUFBYSxrQkFBa0I7SUFJN0IsWUFDc0MsU0FBb0IsRUFDbEIsV0FBd0IsRUFDN0MsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLGNBQThCLEVBQzlCLFNBQTJCO1FBTFIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUM3QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FB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TSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtDQUNGLENBQUE7OzRDQXJNSSxNQUFNLFNBQUMsU0FBUztZQUNrQyxXQUFXLHVCQUE3RCxNQUFNLFNBQUMsV0FBVztZQUNJLFVBQVU7WUFDUixNQUFNO1lBQ0UsY0FBYztZQUNuQixnQkFBZ0I7OztBQVZuQyxrQkFBa0I7SUFIOUIsVUFBVSxDQUFDO1FBQ1YsVUFBVSxFQUFFLE1BQU07S0FDbkIsQ0FBQztJQU1HLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ2pCLFdBQUEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0dBTlgsa0JBQWtCLENBME05QjtTQTFNWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQsIFBlcm1pc3Npb24sIFJlc291cmNlLCBSZXNvdXJjZXMsIFJFU09VUkNFUywgUmVzdWx0IH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5jb25maWcnO1xuXG5leHBvcnQgbGV0IHByb21pc2U6IFByb21pc2U8YW55PjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjaGVja2VkUGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXSA9IFtdO1xuICBwcml2YXRlIGFjdGlvblVybCA9ICdwbGF0Zm9ybS9hdXRob3JpemF0aW9uL3F1ZXJpZXMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUkVTT1VSQ0VTKSBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VzLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICAvLyB2MlxuICBjaGVja0FjY2VzcyhyZXNvdXJjZXM6IFJlc291cmNlW10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zOiBhbnlbXSA9IFtdO1xuXG4gICAgcmVzb3VyY2VzLmZvckVhY2gocmVjID0+IHtcbiAgICAgIHJlYy5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgaWYgKCFyZWMudXJpKSB7XG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFVyaUJ5UmVzb3VyY2VOYW1lKHJlYy5uYW1lLCByZWMuZW50aXR5KTtcbiAgICAgICAgICByZWMudXJpID0gcmVzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgcGVybWlzc2lvbnMucHVzaCh7IGFjdGlvbiwgcmVzb3VyY2U6IHJlYy51cmkgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmFjdGlvblVybH0vY2hlY2tBY2Nlc3NgLCB7IGluY2x1ZGVGaWx0ZXJzOiB0cnVlLCBwZXJtaXNzaW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IHBlcm1pc3Npb25zOiBjaGVja2VkUGVybWlzc2lvbnMgfTogUmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tlZFBlcm1pc3Npb25zID0gWy4uLnRoaXMuY2hlY2tlZFBlcm1pc3Npb25zLCAuLi5jaGVja2VkUGVybWlzc2lvbnNdO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLnNob3VsZFJlZGlyZWN0VG9Gb3JiaWRkZW5QYWdlKHJlc291cmNlcywgY2hlY2tlZFBlcm1pc3Npb25zKSkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZXJyb3InLCA0MDNdKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignZm9yYmlkZGVuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja2VkUGVybWlzc2lvbnMuZm9yRWFjaChwZXJtaXNzaW9uID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlcy5maW5kKHJlcyA9PiByZXMudXJpID09PSBwZXJtaXNzaW9uLnJlc291cmNlKTtcbiAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IHJlc291cmNlO1xuXG4gICAgICAgICAgdmFsdWVzW25hbWVdID0gdmFsdWVzW25hbWVdIHx8IHt9O1xuICAgICAgICAgIHZhbHVlc1tuYW1lXVtwZXJtaXNzaW9uLmFjdGlvbl0gPSBwZXJtaXNzaW9uLmF1dGhvcml6ZWQ7XG4gICAgICAgICAgdmFsdWVzW25hbWVdW3Blcm1pc3Npb24uYWN0aW9uLnRvTG93ZXJDYXNlKCldID0gcGVybWlzc2lvbi5hdXRob3JpemVkO1xuXG4gICAgICAgICAgaWYgKHBlcm1pc3Npb24ucmVzb3VyY2VGaWx0ZXJzICYmIHBlcm1pc3Npb24ucmVzb3VyY2VGaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXNbbmFtZV1bJ3Jlc291cmNlRmlsdGVycyddKSB7XG4gICAgICAgICAgICAgIHZhbHVlc1tuYW1lXVsncmVzb3VyY2VGaWx0ZXJzJ10gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGVybWlzc2lvbi5yZXNvdXJjZUZpbHRlcnMuZm9yRWFjaCgocmVzb3VyY2VGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWVzW25hbWVdWydyZXNvdXJjZUZpbHRlcnMnXS5wdXNoKHJlc291cmNlRmlsdGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8vIHYxXG4gIGdldChyZXNvdXJjZTogc3RyaW5nID0gJycpIHtcbiAgICBpZiAoIXByb21pc2UpIHtcbiAgICAgIHByb21pc2UgPSB0aGlzLmdldFBlcm1pc3Npb25zKCk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKHByb21pc2UpLnBpcGUoXG4gICAgICBtYXAoKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW10pID0+IHtcbiAgICAgICAgdGhpcy5jaGVja2VkUGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcblxuICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICBjb25zdCByZXNvdXJjZUtleSA9IE9iamVjdC5rZXlzKHBlcm1pc3Npb25zKS5maW5kKGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcmVzb3VyY2UudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25zW3Jlc291cmNlS2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbnM7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgIHByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdwZXJtaXNzaW9uX2Vycm9yX3N1bW1hcnknKSxcbiAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3Blcm1pc3Npb25fZXJyb3JfZGV0YWlsJylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0UGVybWlzc2lvbk9iamVjdChmYWxzZSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaXNBdXRob3JpemVkKHJlc291cmNlTmFtZTogc3RyaW5nLCBhY3Rpb246IHN0cmluZywgaXNFbnRpdHk/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNoZWNrZWRQZXJtaXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93RXJyb3IoJ1xcJ1Blcm1pc3Npb25zXFwnIGFyZSBub3QgZGVmaW5lZC4gWW91IHNob3VsZCBjYWxsIFxcJ2dldFxcJyBvciBcXCdjaGVja0FjY2Vzc1xcJyBtZXRob2QgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VVcmkgPSB0aGlzLmdldFVyaUJ5UmVzb3VyY2VOYW1lKHJlc291cmNlTmFtZSwgaXNFbnRpdHkpO1xuXG4gICAgY29uc3QgcGVybWlzc2lvbnNPZlJlc291cmNlID0gdGhpcy5jaGVja2VkUGVybWlzc2lvbnMuZmlsdGVyKHBlcm0gPT4gcGVybS5yZXNvdXJjZSA9PT0gcmVzb3VyY2VVcmkpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25PZkFjdGlvbiA9IHBlcm1pc3Npb25zT2ZSZXNvdXJjZS5maW5kKHBlcm1SZWMgPT4gcGVybVJlYy5hY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gYWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgcmV0dXJuIHBlcm1pc3Npb25PZkFjdGlvbiAmJiBwZXJtaXNzaW9uT2ZBY3Rpb24uYXV0aG9yaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJpQnlSZXNvdXJjZU5hbWUocmVzb3VyY2VOYW1lOiBzdHJpbmcsIGlzRW50aXR5PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgeyBkb21haW4sIHNlcnZpY2UgfSA9IHRoaXMuZW52aXJvbm1lbnQ7XG5cbiAgICBpZiAoIWRvbWFpbiB8fCAhc2VydmljZSkge1xuICAgICAgdGhyb3dFcnJvcignWW91IG11c3QgaW5mb3JtIGRvbWFpbiBhbmQgc2VydmljZSBuYW1lJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJpQmFzZSA9IGByZXM6Ly9zZW5pb3IuY29tLmJyLyR7ZG9tYWlufS8ke3NlcnZpY2V9YDtcblxuICAgIGlmIChpc0VudGl0eSkge1xuICAgICAgcmV0dXJuIGAke3VyaUJhc2V9L2VudGl0aWVzLyR7cmVzb3VyY2VOYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt1cmlCYXNlfS8ke3Jlc291cmNlTmFtZX1gO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGEgY29tIGJhc2UgbmFzIHByb3ByaWVkYWRlIHJlZGlyZWN0VG9FcnJvciBlIGFjdGlvbnNUb0NoZWNrXG4gICAqIHNlIGEgYcOnw6NvIGRlIHVtIHJlY3Vyc28gZGV2ZSBlbnZpYXIgcGFyYSBhIHDDoWdpbmEgZGUgZXJybyBjYXNvIG7Do28gdGVuaGEgYXV0b3JpemHDp8Ojb1xuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRSZWRpcmVjdFRvRm9yYmlkZGVuUGFnZShyZXNvdXJjZXM6IFJlc291cmNlW10gPSBbXSwgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zRGVuaWVkID0gcGVybWlzc2lvbnMuZmlsdGVyKHBlcm0gPT4gIXBlcm0uYXV0aG9yaXplZCk7XG5cbiAgICBpZiAocGVybWlzc2lvbnNEZW5pZWQgJiYgcGVybWlzc2lvbnNEZW5pZWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXNUb0NoZWNrID0gcmVzb3VyY2VzLmZpbHRlcihyZXNvdXJjZSA9PiByZXNvdXJjZS5yZWRpcmVjdFRvRXJyb3IpO1xuXG4gICAgICBpZiAocmVzb3VyY2VzVG9DaGVjayAmJiByZXNvdXJjZXNUb0NoZWNrLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzVG9DaGVjay5ldmVyeShyZXNvdXJjZSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uc1RvQ2hlY2sgPSByZXNvdXJjZS5hY3Rpb25zVG9DaGVjayAmJiByZXNvdXJjZS5hY3Rpb25zVG9DaGVjay5sZW5ndGggPyByZXNvdXJjZS5hY3Rpb25zVG9DaGVjayA6IHJlc291cmNlLmFjdGlvbnM7XG5cbiAgICAgICAgICByZXR1cm4gYWN0aW9uc1RvQ2hlY2suZXZlcnkoYWN0aW9uID0+XG4gICAgICAgICAgICBwZXJtaXNzaW9uc0RlbmllZC5zb21lKHBlcm1pc3Npb25EZW5pZWQgPT4gcGVybWlzc2lvbkRlbmllZC5yZXNvdXJjZSA9PT0gcmVzb3VyY2UudXJpICYmIHBlcm1pc3Npb25EZW5pZWQuYWN0aW9uID09PSBhY3Rpb24pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldEZsYXRFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudC5pZ25vcmVQZXJtaXNzaW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmxhdFJlc291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMucmVkdWNlKChyZXN1bHQ6IFJlc291cmNlW10sIGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XG4gICAgICAgIHJldHVybiBbLi4ucmVzdWx0LCAuLi5pdGVtXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFsuLi5yZXN1bHQsIGl0ZW1dO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWlzc2lvbk9iamVjdChkZWZhdWx0VmFsdWU6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGF0UmVzb3VyY2VzKCkucmVkdWNlKChyZXNvdXJjZXM6IG9iamVjdCwgcmVzb3VyY2U6IFJlc291cmNlKSA9PiB7XG4gICAgICByZXNvdXJjZXNbcmVzb3VyY2UubmFtZV0gPSByZXNvdXJjZS5hY3Rpb25zLnJlZHVjZSgoYWN0aW9uczogYW55LCBhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBhY3Rpb25zW2FjdGlvbl0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIGFjdGlvbnNbYWN0aW9uLnRvTG93ZXJDYXNlKCldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiByZXNvdXJjZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICBpZiAodGhpcy5nZXRGbGF0RW52aXJvbm1lbnQoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGVybWlzc2lvbk9iamVjdCh0cnVlKTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5nZXRGbGF0UmVzb3VyY2VzKCk7XG4gICAgY29uc3QgcGVybSA9IHJlc291cmNlc1xuICAgICAgLm1hcChyZXNvdXJjZSA9PiByZXNvdXJjZS5hY3Rpb25zLm1hcCgoYWN0aW9uOiBhbnkpID0+ICh7IGFjdGlvbjogYWN0aW9uLCByZXNvdXJjZTogcmVzb3VyY2UudXJpIH0pKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55LCB2YWw6IGFueSkgPT4gWy4uLmFjYywgLi4udmFsXSk7XG5cbiAgICBjb25zdCBwZXJtaXNzaW9uczogYW55W10gPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PGFueT4oYCR7dGhpcy5hY3Rpb25Vcmx9L2NoZWNrQWNjZXNzYCwge1xuICAgICAgICBpbmNsdWRlRmlsdGVyczogZmFsc2UsXG4gICAgICAgIHBlcm1pc3Npb25zOiBwZXJtXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5wZXJtaXNzaW9ucyk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSB7fTtcblxuICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb246IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZXMuZmluZCgocmVzOiBhbnkpID0+IHJlcy51cmkgPT09IHBlcm1pc3Npb24ucmVzb3VyY2UpO1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSByZXNvdXJjZTtcbiAgICAgIHZhbHVlc1tuYW1lXSA9IHZhbHVlc1tuYW1lXSA/IHZhbHVlc1tuYW1lXSA6IHt9O1xuICAgICAgdmFsdWVzW25hbWVdW3Blcm1pc3Npb24uYWN0aW9uXSA9IHBlcm1pc3Npb24uYXV0aG9yaXplZDtcbiAgICAgIHZhbHVlc1tuYW1lXVtwZXJtaXNzaW9uLmFjdGlvbi50b0xvd2VyQ2FzZSgpXSA9IHBlcm1pc3Npb24uYXV0aG9yaXplZDtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG59XG4iXX0=
@@ -1,274 +0,0 @@
1
- import { __awaiter, __decorate } from "tslib";
2
- import { UserAction } from './../models/user-action.enum';
3
- import { Component, EventEmitter, Input, Output } from '@angular/core';
4
- import { SpotlightService } from '../service/spotlight.service';
5
- import { EnumDisplayType, EnumSpotlightStatus } from '../models/index';
6
- import { DatePipe } from '@angular/common';
7
- import { CookieService } from 'ngx-cookie-service';
8
- let SpotlightComponent = class SpotlightComponent {
9
- constructor(spotlightService, cookieService, datePipe) {
10
- this.spotlightService = spotlightService;
11
- this.cookieService = cookieService;
12
- this.datePipe = datePipe;
13
- this.canAppear = false;
14
- this.visible = false;
15
- this.fade = false;
16
- this.visibleChange = new EventEmitter();
17
- }
18
- ngOnInit() {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- yield this.setValues();
21
- this.fetchSpotlight();
22
- });
23
- }
24
- setValues() {
25
- return __awaiter(this, void 0, void 0, function* () {
26
- const userData = JSON.parse(this.cookieService.get('com.senior.token'));
27
- this.currentUser = userData.username;
28
- this.spotlightUsersList = yield this.spotlightService.listSpotlightUsers();
29
- this.spotlightControlsList = yield this.spotlightService.listSpotlightControl();
30
- });
31
- }
32
- setValuesInSpotlight(values) {
33
- this.header = values.spotlightTitle;
34
- this.imgUrl = values.bannerUrl;
35
- this.primaryButtonLabel = values.primaryButtonLabel;
36
- this.primaryButtonTooltip = values.primaryButtonHint;
37
- }
38
- getShowDate(days) {
39
- const currentDate = new Date();
40
- return this.datePipe.transform(currentDate.setDate(currentDate.getDate() + days).toString(), 'yyyy-MM-dd');
41
- }
42
- fetchSpotlight() {
43
- this.spotlightService.listSpotlightScreen().subscribe(value => {
44
- this.spotlightScreen = value.contents.filter(val => val.screenMenuId === this.menuId)[0];
45
- if (this.spotlightScreen) {
46
- this.showSpotlight(this.spotlightScreen.spotlight);
47
- }
48
- });
49
- }
50
- showSpotlight(spotlight) {
51
- if (this.validateDate(spotlight.initialDate) && this.validateFinalDate(spotlight.finalDate) && this.validateSpotlight(spotlight)) {
52
- this.setValuesInSpotlight(spotlight);
53
- this.canAppear = true;
54
- const control = this.getSpotlightControlFromList(this.spotlightScreen.spotlight.id);
55
- this.canEmitEvent = !control || this.currentUser !== control.firstUser;
56
- }
57
- }
58
- validateDate(date) {
59
- if (date) {
60
- const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');
61
- const initialDate = this.datePipe.transform(date, 'yyyy-MM-dd');
62
- return currentDate >= initialDate;
63
- }
64
- return false;
65
- }
66
- validateFinalDate(date) {
67
- if (date) {
68
- const currentDate = this.datePipe.transform(new Date().toString(), 'yyyy-MM-dd');
69
- const finalDate = this.datePipe.transform(date, 'yyyy-MM-dd');
70
- return currentDate <= finalDate;
71
- }
72
- return true;
73
- }
74
- validateSpotlight(spotlight) {
75
- if (!this.validateControlsList(this.spotlightControlsList, spotlight, this.currentUser)) {
76
- return false;
77
- }
78
- if (!this.validateDisplayType(spotlight, this.spotlightUsersList, this.spotlightControlsList, this.currentUser)) {
79
- return false;
80
- }
81
- return true;
82
- }
83
- validateControlsList(controlsList, spotlight, currentUser) {
84
- if (controlsList.totalElements) {
85
- const notCompatibleControls = controlsList.contents.filter(control => {
86
- if (control.status === EnumSpotlightStatus.ACTIVE) {
87
- return control.spotlightId === spotlight.id;
88
- }
89
- else if (control.status === EnumSpotlightStatus.IN_PROGRESS) {
90
- return control.spotlightId === spotlight.id && control.firstUser !== currentUser;
91
- }
92
- });
93
- if (notCompatibleControls.length > 0) {
94
- return false;
95
- }
96
- }
97
- return true;
98
- }
99
- validateDisplayType(spotlight, usersList, controlsList, currentUser) {
100
- switch (spotlight.displayType) {
101
- case EnumDisplayType.ADVERSITING:
102
- return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;
103
- case EnumDisplayType.INTEGRATION:
104
- if (controlsList.totalElements) {
105
- const compatibleControls = controlsList.contents.filter(control => {
106
- switch (control.status) {
107
- case EnumSpotlightStatus.NO_STARTED:
108
- return control.spotlightId === spotlight.id;
109
- case EnumSpotlightStatus.REFUSED:
110
- return usersList.totalElements ? this.validateUser(usersList.contents, spotlight) : true;
111
- case EnumSpotlightStatus.IN_PROGRESS:
112
- return control.firstUser === currentUser
113
- && control.spotlightId === spotlight.id;
114
- }
115
- });
116
- if (compatibleControls.length === 0) {
117
- return false;
118
- }
119
- }
120
- return true;
121
- }
122
- }
123
- validateUser(users, spotlight) {
124
- let spotlightUsers = users.filter(user => user.spotlightId === spotlight.id);
125
- if (!spotlightUsers.length) {
126
- spotlightUsers = users.filter(user => user.userOperation === this.currentUser);
127
- return spotlightUsers.length === 0;
128
- }
129
- const compatibleUserToValidate = spotlightUsers.filter(user => user.userOperation === this.currentUser)[0];
130
- return compatibleUserToValidate ? this.validateDate(compatibleUserToValidate.showDate) : true;
131
- }
132
- saveSpotlightUser(days) {
133
- const spotlight = this.spotlightScreen.spotlight;
134
- const user = this.spotlightUsersList.contents.filter(val => {
135
- return val.spotlightId === spotlight.id
136
- && val.userOperation === this.currentUser;
137
- })[0];
138
- let spotlightUser = {
139
- spotlightId: spotlight.id,
140
- showDate: days ? this.getShowDate(days) : null,
141
- userOperation: this.currentUser
142
- };
143
- if (user) {
144
- spotlightUser = Object.assign({ id: user.id }, spotlightUser);
145
- }
146
- this.spotlightService.saveSpotlightUser(spotlightUser).subscribe();
147
- }
148
- onPrimary() {
149
- const spotlight = this.spotlightScreen.spotlight;
150
- const notification = this.buildNotification(UserAction.CONFIRMED);
151
- this.saveSpotlightControl();
152
- this.saveSpotlightUser();
153
- if (this.canEmitEvent) {
154
- this.spotlightService.notificateSpotlight(notification).subscribe();
155
- }
156
- if (spotlight.primaryButtonUrl) {
157
- window.open(spotlight.primaryButtonUrl);
158
- }
159
- this.close();
160
- }
161
- onSecondary() {
162
- const notification = this.buildNotification(UserAction.POSTPONED);
163
- this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);
164
- this.saveSpotlightUser(this.spotlightScreen.spotlight.daysRememberLate);
165
- this.spotlightService.notificateSpotlight(notification).subscribe();
166
- this.close();
167
- }
168
- onTertiary() {
169
- const notification = this.buildNotification(UserAction.REFUSED);
170
- this.saveSpotlightControl(EnumSpotlightStatus.REFUSED);
171
- this.saveSpotlightUser(this.spotlightScreen.spotlight.daysNotInterested);
172
- this.spotlightService.notificateSpotlight(notification).subscribe();
173
- this.close();
174
- }
175
- /**
176
- * Verifica se um registro de usuário pertence ao usuário logado e corresponde ao spotlight atual
177
- * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight
178
- * @param spotlight Spotlight Spotlight
179
- * @returns boolean true se corresponder ao spotlight atual, false caso contrário
180
- */
181
- hasThisRegister(user, spotlight) {
182
- return (user.spotlightId === spotlight.id && user.userOperation === this.currentUser);
183
- }
184
- /**
185
- * Verifica se um registro de usuário pertece ao usuário logado, mas não corresponde ao spotlight atual
186
- * @param user SpotlightUser Objeto representando o registro do usuário para uma spotlight
187
- * @param spotlight Spotlight Spotlight
188
- * @returns boolean true se corresponder ao spotlight atual, false caso contrário
189
- */
190
- hasAnotherRegister(user, spotlight) {
191
- return user.spotlightId !== spotlight.id && user.userOperation === this.currentUser;
192
- }
193
- /**
194
- * Persiste um novo registro de controle para o spotlight atual se
195
- * não for encontrado nenhum na lista de controles carregada inicialmente
196
- * @param status EnumSpotlightStatus Status do controle do spotlight. Se nenhum for informado, IN_PROGRESS será aplicado
197
- * @returns SpotlightControl Controle do spotlight recuperado/pesistido
198
- */
199
- saveSpotlightControl(status = EnumSpotlightStatus.IN_PROGRESS) {
200
- const spotlight = this.spotlightScreen.spotlight;
201
- let control = this.getSpotlightControlFromList(spotlight.id);
202
- if (!control) {
203
- control = {
204
- spotlightId: spotlight.id,
205
- status: status,
206
- firstUser: this.currentUser
207
- };
208
- }
209
- if (this.isNewControl(control) || control.status !== EnumSpotlightStatus.IN_PROGRESS) {
210
- control.status = status;
211
- control.firstUser = status === EnumSpotlightStatus.IN_PROGRESS ? this.currentUser : '';
212
- this.spotlightService.saveSpotlightControl(control).subscribe();
213
- }
214
- return control;
215
- }
216
- /**
217
- * Retorna o controle de spotlight correspondente ao identificador
218
- * informado na lista de controles carregada na inicialização do componente
219
- * @param id string Identificador do controle de spotlight
220
- */
221
- getSpotlightControlFromList(id) {
222
- return this.spotlightControlsList.contents.filter(val => val.spotlightId === id)[0];
223
- }
224
- /**
225
- * Verifica se o controle de spotlight informado não foi registrado ainda
226
- * @param spotlightControl SpotlightControl Controle do spotlight
227
- * @returns boolean true se ainda não foi registrado na base, false caso contrário
228
- */
229
- isNewControl(spotlightControl) {
230
- return !this.spotlightControlsList.contents.includes(spotlightControl);
231
- }
232
- /**
233
- * Retorna um objeto de notificação referente ao botão clicado pelo usuário.
234
- * @param userAction UserAction Ação realizada pelo usuário ao clicar nos botões da modal
235
- * @returns SpotlightNotification Objeto de notificação
236
- */
237
- buildNotification(userAction) {
238
- const spotlight = this.spotlightScreen.spotlight;
239
- return {
240
- clickedButton: userAction,
241
- spotlightControlId: spotlight.id,
242
- primaryButtonUrl: spotlight.primaryButtonUrl
243
- };
244
- }
245
- close() {
246
- this.visibleChange.emit(false);
247
- }
248
- };
249
- SpotlightComponent.ctorParameters = () => [
250
- { type: SpotlightService },
251
- { type: CookieService },
252
- { type: DatePipe }
253
- ];
254
- __decorate([
255
- Input()
256
- ], SpotlightComponent.prototype, "visible", void 0);
257
- __decorate([
258
- Input()
259
- ], SpotlightComponent.prototype, "menuId", void 0);
260
- __decorate([
261
- Input()
262
- ], SpotlightComponent.prototype, "fade", void 0);
263
- __decorate([
264
- Output()
265
- ], SpotlightComponent.prototype, "visibleChange", void 0);
266
- SpotlightComponent = __decorate([
267
- Component({
268
- selector: 's-spotlight',
269
- template: "<div class=\"s-spotlight-overlay\" id=\"ol\" *ngIf=\"canAppear && visible\">\n <div class=\"s-spotlight\" id=\"sl\" [ngClass]=\"{'s-effect-fadein': fade}\">\n <div class=\"s-spotlight-header\">\n <span class=\"s-spotlight-title\">{{header.toUpperCase()}}</span>\n <a role=\"button\" class=\"s-spotlight-close\" (click)=\"close()\"><span class=\"fa fa-times\" aria-hidden=\"true\"></span></a>\n </div>\n <div class=\"s-img\">\n <img src=\"{{imgUrl}}\">\n </div>\n <div class=\"s-spotlight-footer\">\n <div class=\"s-spotlight-footer-left\">\n <button\n pButton\n type=\"submit\"\n id=\"decline-button\"\n label=\"{{'platform.spotlight.no_interest' | translate}}\"\n (click)=\"onTertiary()\"\n class=\"ui-button-link\">\n </button>\n </div>\n <div class=\"s-spotlight-footer-right\">\n <button\n pButton\n type=\"submit\"\n id=\"remember-button\"\n label=\"{{'platform.spotlight.remember_late' | translate}}\"\n (click)=\"onSecondary()\"\n class=\"ui-button-raised ui-button-secondary\">\n </button>\n <button\n pButton\n label=\"{{primaryButtonLabel}}\"\n type=\"submit\"\n id=\"submit-button\"\n (click)=\"onPrimary()\"\n [pTooltip]=\"primaryButtonTooltip\"\n tooltipPosition=\"top\"\n showDelay=\"500\"\n class=\"ui-button-raised\">\n </button>\n </div>\n </div>\n</div>\n</div>",
270
- styles: [".s-spotlight-overlay{display:-ms-flexbox;display:flex;position:fixed;z-index:10;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgba(0,0,0,.4)}.s-spotlight{border-radius:3px;background:#fff;margin:auto;overflow:hidden;animation:.15s forwards move}.s-spotlight-footer,.s-spotlight-header{display:-ms-flexbox;display:flex;padding:15px}.s-spotlight-header{-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.s-spotlight-footer,.s-spotlight-footer-left,.s-spotlight-footer-right{display:-ms-flexbox;display:flex}.s-spotlight-footer-right{-ms-flex:2;flex:2;-ms-flex-pack:end;justify-content:flex-end}.s-spotlight-footer-left{-ms-flex:1;flex:1;-ms-flex-pack:start;justify-content:flex-start}.s-spotlight-title{font-family:\"Open Sans\",sans-serif;font-size:16px;font-weight:400;color:#333}.s-spotlight-close{display:block;margin-left:15px;color:#000}.s-img{width:100%;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.s-img img{width:100%}.s-effect-fadein{animation:.15s forwards fade}@keyframes fade{0%{opacity:0}100%{opacity:1}}@media (max-width:595px){.s-spotlight-footer,.s-spotlight-footer-left,.s-spotlight-footer-right{-ms-flex-align:center;align-items:center;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.s-spotlight-footer button{margin:0 0 15px!important;width:100%!important}}@media (min-width:576px){.s-spotlight{width:100%}}@media (min-width:768px){.s-spotlight{width:720px}.s-spotlight-footer,.s-spotlight-footer-left,.s-spotlight-footer-right{-ms-flex-direction:row;flex-direction:row}}@media (min-width:992px){.s-spotlight{width:960px}}@media (min-width:1200px){.s-spotlight{width:50%}}"]
271
- })
272
- ], SpotlightComponent);
273
- export { SpotlightComponent };
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9wbGF0Zm9ybS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kdWxlcy9zcG90bGlnaHQvY29tcG9uZW50L3Nwb3RsaWdodC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRCxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFHTCxlQUFlLEVBQ2YsbUJBQW1CLEVBS3BCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9uRCxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtJQUU3QixZQUNVLGdCQUFrQyxFQUNsQyxhQUE0QixFQUM1QixRQUFrQjtRQUZsQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFPckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQVNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBTWhCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFHYixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUF4QmhELENBQUM7SUEwQkUsUUFBUTs7WUFDWixNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQztLQUFBO0lBRWEsU0FBUzs7WUFDckIsTUFBTSxRQUFRLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2xGLENBQUM7S0FBQTtJQUVPLG9CQUFvQixDQUFDLE1BQWlCO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUNwRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO0lBQ3ZELENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNwRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxTQUFvQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLElBQVk7UUFDL0IsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUVoRSxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUM7U0FDbkM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFZO1FBQ3BDLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFOUQsT0FBTyxXQUFXLElBQUksU0FBUyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8saUJBQWlCLENBQUMsU0FBb0I7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2RixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0csT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFlBQWtDLEVBQUUsU0FBb0IsRUFBRSxXQUFtQjtRQUN4RyxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUU7WUFFOUIsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtvQkFDakQsT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7aUJBRTdDO3FCQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7b0JBQzNELE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssV0FBVyxDQUFDO2lCQUNwRjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsU0FBb0IsRUFDcEIsU0FBNkIsRUFDN0IsWUFBa0MsRUFDbEMsV0FBbUI7UUFHbkIsUUFBUSxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzdCLEtBQUssZUFBZSxDQUFDLFdBQVc7Z0JBQzlCLE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFM0YsS0FBSyxlQUFlLENBQUMsV0FBVztnQkFFOUIsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFO29CQUM5QixNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUU5RCxRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUU7NEJBRXRCLEtBQUssbUJBQW1CLENBQUMsVUFBVTtnQ0FDakMsT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBRTlDLEtBQUssbUJBQW1CLENBQUMsT0FBTztnQ0FDOUIsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFFM0YsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXO2dDQUNsQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssV0FBVzt1Q0FDbkMsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO3lCQUM3QztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ25DLE9BQU8sS0FBSyxDQUFDO3FCQUNkO2lCQUNGO2dCQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQXNCLEVBQUUsU0FBb0I7UUFDL0QsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQzFCLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFL0UsT0FBTyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztTQUNwQztRQUVELE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNHLE9BQU8sd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRyxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBYTtRQUVyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUVqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxPQUFPLEdBQUcsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEVBQUU7bUJBQ2xDLEdBQUcsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksYUFBYSxHQUFrQjtZQUNqQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDaEMsQ0FBQztRQUVGLElBQUksSUFBSSxFQUFFO1lBQ1IsYUFBYSxtQkFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFDUixhQUFhLENBQ2pCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRU0sU0FBUztRQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNyRTtRQUVELElBQUksU0FBUyxDQUFDLGdCQUFnQixFQUFFO1lBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFcEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVNLFVBQVU7UUFDZixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFcEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssZUFBZSxDQUFDLElBQW1CLEVBQUUsU0FBb0I7UUFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxrQkFBa0IsQ0FBQyxJQUFtQixFQUFFLFNBQW9CO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN0RixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsV0FBVztRQUNuRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sR0FBcUIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHO2dCQUNSLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtnQkFDekIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQzVCLENBQUM7U0FDSDtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtZQUNwRixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN4QixPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakU7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDJCQUEyQixDQUFDLEVBQVU7UUFDNUMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLEdBQUcsQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxZQUFZLENBQUMsZ0JBQWtDO1FBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCLENBQUMsVUFBc0I7UUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFFakQsT0FBTztZQUNMLGFBQWEsRUFBRSxVQUFVO1lBQ3pCLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2hDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7U0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGLENBQUE7O1lBNVQ2QixnQkFBZ0I7WUFDbkIsYUFBYTtZQUNsQixRQUFROztBQWdCNUI7SUFEQyxLQUFLLEVBQUU7bURBQ2U7QUFHdkI7SUFEQyxLQUFLLEVBQUU7a0RBQ2M7QUFHdEI7SUFEQyxLQUFLLEVBQUU7Z0RBQ1k7QUFHcEI7SUFEQyxNQUFNLEVBQUU7eURBQzBDO0FBOUJ4QyxrQkFBa0I7SUFMOUIsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLGFBQWE7UUFDdkIsOHhEQUF5Qzs7S0FFMUMsQ0FBQztHQUNXLGtCQUFrQixDQStUOUI7U0EvVFksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckFjdGlvbiB9IGZyb20gJy4vLi4vbW9kZWxzL3VzZXItYWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgU3BvdGxpZ2h0Tm90aWZpY2F0aW9uIH0gZnJvbSAnLi8uLi9tb2RlbHMvc3BvdGxpZ2h0LW5vdGlmaWNhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwb3RsaWdodFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3Nwb3RsaWdodC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFNwb3RsaWdodCxcbiAgU3BvdGxpZ2h0U2NyZWVuLFxuICBFbnVtRGlzcGxheVR5cGUsXG4gIEVudW1TcG90bGlnaHRTdGF0dXMsXG4gIFNwb3RsaWdodENvbnRyb2xMaXN0LFxuICBTcG90bGlnaHRVc2Vyc0xpc3QsXG4gIFNwb3RsaWdodFVzZXIsXG4gIFNwb3RsaWdodENvbnRyb2xcbn0gZnJvbSAnLi4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzLXNwb3RsaWdodCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zcG90bGlnaHQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zcG90bGlnaHQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTcG90bGlnaHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3BvdGxpZ2h0U2VydmljZTogU3BvdGxpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcbiAgKSB7fVxuXG4gIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgcHVibGljIGltZ1VybDogc3RyaW5nO1xuICBwdWJsaWMgcHJpbWFyeUJ1dHRvbkxhYmVsOiBzdHJpbmc7XG4gIHB1YmxpYyBwcmltYXJ5QnV0dG9uVG9vbHRpcDogc3RyaW5nO1xuICBwdWJsaWMgY2FuQXBwZWFyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjdXJyZW50VXNlcjogc3RyaW5nO1xuICBwcml2YXRlIHNwb3RsaWdodFVzZXJzTGlzdDogU3BvdGxpZ2h0VXNlcnNMaXN0O1xuICBwcml2YXRlIHNwb3RsaWdodENvbnRyb2xzTGlzdDogU3BvdGxpZ2h0Q29udHJvbExpc3Q7XG4gIHByaXZhdGUgc3BvdGxpZ2h0U2NyZWVuOiBTcG90bGlnaHRTY3JlZW47XG4gIHByaXZhdGUgY2FuRW1pdEV2ZW50OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2aXNpYmxlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lbnVJZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmYWRlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMuc2V0VmFsdWVzKCk7XG4gICAgdGhpcy5mZXRjaFNwb3RsaWdodCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXRWYWx1ZXMoKSB7XG4gICAgY29uc3QgdXNlckRhdGE6IGFueSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldCgnY29tLnNlbmlvci50b2tlbicpKTtcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdXNlckRhdGEudXNlcm5hbWU7XG4gICAgdGhpcy5zcG90bGlnaHRVc2Vyc0xpc3QgPSBhd2FpdCB0aGlzLnNwb3RsaWdodFNlcnZpY2UubGlzdFNwb3RsaWdodFVzZXJzKCk7XG4gICAgdGhpcy5zcG90bGlnaHRDb250cm9sc0xpc3QgPSBhd2FpdCB0aGlzLnNwb3RsaWdodFNlcnZpY2UubGlzdFNwb3RsaWdodENvbnRyb2woKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsdWVzSW5TcG90bGlnaHQodmFsdWVzOiBTcG90bGlnaHQpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlciA9IHZhbHVlcy5zcG90bGlnaHRUaXRsZTtcbiAgICB0aGlzLmltZ1VybCA9IHZhbHVlcy5iYW5uZXJVcmw7XG4gICAgdGhpcy5wcmltYXJ5QnV0dG9uTGFiZWwgPSB2YWx1ZXMucHJpbWFyeUJ1dHRvbkxhYmVsO1xuICAgIHRoaXMucHJpbWFyeUJ1dHRvblRvb2x0aXAgPSB2YWx1ZXMucHJpbWFyeUJ1dHRvbkhpbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldFNob3dEYXRlKGRheXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjdXJyZW50RGF0ZS5zZXREYXRlKGN1cnJlbnREYXRlLmdldERhdGUoKSArIGRheXMpLnRvU3RyaW5nKCksICd5eXl5LU1NLWRkJyk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3BvdGxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuc3BvdGxpZ2h0U2VydmljZS5saXN0U3BvdGxpZ2h0U2NyZWVuKCkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMuc3BvdGxpZ2h0U2NyZWVuID0gdmFsdWUuY29udGVudHMuZmlsdGVyKHZhbCA9PiB2YWwuc2NyZWVuTWVudUlkID09PSB0aGlzLm1lbnVJZClbMF07XG4gICAgICBpZiAodGhpcy5zcG90bGlnaHRTY3JlZW4pIHtcbiAgICAgICAgdGhpcy5zaG93U3BvdGxpZ2h0KHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTcG90bGlnaHQoc3BvdGxpZ2h0OiBTcG90bGlnaHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWxpZGF0ZURhdGUoc3BvdGxpZ2h0LmluaXRpYWxEYXRlKSAmJiB0aGlzLnZhbGlkYXRlRmluYWxEYXRlKHNwb3RsaWdodC5maW5hbERhdGUpICYmIHRoaXMudmFsaWRhdGVTcG90bGlnaHQoc3BvdGxpZ2h0KSkge1xuICAgICAgdGhpcy5zZXRWYWx1ZXNJblNwb3RsaWdodChzcG90bGlnaHQpO1xuICAgICAgdGhpcy5jYW5BcHBlYXIgPSB0cnVlO1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0U3BvdGxpZ2h0Q29udHJvbEZyb21MaXN0KHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodC5pZCk7XG4gICAgICB0aGlzLmNhbkVtaXRFdmVudCA9ICFjb250cm9sIHx8IHRoaXMuY3VycmVudFVzZXIgIT09IGNvbnRyb2wuZmlyc3RVc2VyO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVEYXRlKGRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKCkudG9TdHJpbmcoKSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgIGNvbnN0IGluaXRpYWxEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ3l5eXktTU0tZGQnKTtcblxuICAgICAgcmV0dXJuIGN1cnJlbnREYXRlID49IGluaXRpYWxEYXRlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmluYWxEYXRlKGRhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKCkudG9TdHJpbmcoKSwgJ3l5eXktTU0tZGQnKTtcbiAgICAgIGNvbnN0IGZpbmFsRGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICd5eXl5LU1NLWRkJyk7XG5cbiAgICAgIHJldHVybiBjdXJyZW50RGF0ZSA8PSBmaW5hbERhdGU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVNwb3RsaWdodChzcG90bGlnaHQ6IFNwb3RsaWdodCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUNvbnRyb2xzTGlzdCh0aGlzLnNwb3RsaWdodENvbnRyb2xzTGlzdCwgc3BvdGxpZ2h0LCB0aGlzLmN1cnJlbnRVc2VyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVEaXNwbGF5VHlwZShzcG90bGlnaHQsIHRoaXMuc3BvdGxpZ2h0VXNlcnNMaXN0LCB0aGlzLnNwb3RsaWdodENvbnRyb2xzTGlzdCwgdGhpcy5jdXJyZW50VXNlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQ29udHJvbHNMaXN0KGNvbnRyb2xzTGlzdDogU3BvdGxpZ2h0Q29udHJvbExpc3QsIHNwb3RsaWdodDogU3BvdGxpZ2h0LCBjdXJyZW50VXNlcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbnRyb2xzTGlzdC50b3RhbEVsZW1lbnRzKSB7XG5cbiAgICAgIGNvbnN0IG5vdENvbXBhdGlibGVDb250cm9scyA9IGNvbnRyb2xzTGlzdC5jb250ZW50cy5maWx0ZXIoY29udHJvbCA9PiB7XG4gICAgICAgIGlmIChjb250cm9sLnN0YXR1cyA9PT0gRW51bVNwb3RsaWdodFN0YXR1cy5BQ1RJVkUpIHtcbiAgICAgICAgICByZXR1cm4gY29udHJvbC5zcG90bGlnaHRJZCA9PT0gc3BvdGxpZ2h0LmlkO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC5zdGF0dXMgPT09IEVudW1TcG90bGlnaHRTdGF0dXMuSU5fUFJPR1JFU1MpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLnNwb3RsaWdodElkID09PSBzcG90bGlnaHQuaWQgJiYgY29udHJvbC5maXJzdFVzZXIgIT09IGN1cnJlbnRVc2VyO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKG5vdENvbXBhdGlibGVDb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRGlzcGxheVR5cGUoXG4gICAgc3BvdGxpZ2h0OiBTcG90bGlnaHQsXG4gICAgdXNlcnNMaXN0OiBTcG90bGlnaHRVc2Vyc0xpc3QsXG4gICAgY29udHJvbHNMaXN0OiBTcG90bGlnaHRDb250cm9sTGlzdCxcbiAgICBjdXJyZW50VXNlcjogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuXG4gICAgc3dpdGNoIChzcG90bGlnaHQuZGlzcGxheVR5cGUpIHtcbiAgICAgIGNhc2UgRW51bURpc3BsYXlUeXBlLkFEVkVSU0lUSU5HOlxuICAgICAgICByZXR1cm4gdXNlcnNMaXN0LnRvdGFsRWxlbWVudHMgPyB0aGlzLnZhbGlkYXRlVXNlcih1c2Vyc0xpc3QuY29udGVudHMsIHNwb3RsaWdodCkgOiB0cnVlO1xuXG4gICAgICBjYXNlIEVudW1EaXNwbGF5VHlwZS5JTlRFR1JBVElPTjpcblxuICAgICAgICBpZiAoY29udHJvbHNMaXN0LnRvdGFsRWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCBjb21wYXRpYmxlQ29udHJvbHMgPSBjb250cm9sc0xpc3QuY29udGVudHMuZmlsdGVyKGNvbnRyb2wgPT4ge1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAoY29udHJvbC5zdGF0dXMpIHtcblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bVNwb3RsaWdodFN0YXR1cy5OT19TVEFSVEVEOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuc3BvdGxpZ2h0SWQgPT09IHNwb3RsaWdodC5pZDtcblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bVNwb3RsaWdodFN0YXR1cy5SRUZVU0VEOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJzTGlzdC50b3RhbEVsZW1lbnRzID8gdGhpcy52YWxpZGF0ZVVzZXIodXNlcnNMaXN0LmNvbnRlbnRzLCBzcG90bGlnaHQpIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bVNwb3RsaWdodFN0YXR1cy5JTl9QUk9HUkVTUzpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sLmZpcnN0VXNlciA9PT0gY3VycmVudFVzZXJcbiAgICAgICAgICAgICAgICAgICAgJiYgY29udHJvbC5zcG90bGlnaHRJZCA9PT0gc3BvdGxpZ2h0LmlkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbXBhdGlibGVDb250cm9scy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVVzZXIodXNlcnM6IFNwb3RsaWdodFVzZXJbXSwgc3BvdGxpZ2h0OiBTcG90bGlnaHQpOiBib29sZWFuIHtcbiAgICBsZXQgc3BvdGxpZ2h0VXNlcnMgPSB1c2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnNwb3RsaWdodElkID09PSBzcG90bGlnaHQuaWQpO1xuXG4gICAgaWYgKCFzcG90bGlnaHRVc2Vycy5sZW5ndGgpIHtcbiAgICAgIHNwb3RsaWdodFVzZXJzID0gdXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci51c2VyT3BlcmF0aW9uID09PSB0aGlzLmN1cnJlbnRVc2VyKTtcblxuICAgICAgcmV0dXJuIHNwb3RsaWdodFVzZXJzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYXRpYmxlVXNlclRvVmFsaWRhdGUgPSBzcG90bGlnaHRVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLnVzZXJPcGVyYXRpb24gPT09IHRoaXMuY3VycmVudFVzZXIpWzBdO1xuXG4gICAgcmV0dXJuIGNvbXBhdGlibGVVc2VyVG9WYWxpZGF0ZSA/IHRoaXMudmFsaWRhdGVEYXRlKGNvbXBhdGlibGVVc2VyVG9WYWxpZGF0ZS5zaG93RGF0ZSkgOiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlU3BvdGxpZ2h0VXNlcihkYXlzPzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICBjb25zdCBzcG90bGlnaHQgPSB0aGlzLnNwb3RsaWdodFNjcmVlbi5zcG90bGlnaHQ7XG5cbiAgICBjb25zdCB1c2VyID0gdGhpcy5zcG90bGlnaHRVc2Vyc0xpc3QuY29udGVudHMuZmlsdGVyKHZhbCA9PiB7XG4gICAgICByZXR1cm4gdmFsLnNwb3RsaWdodElkID09PSBzcG90bGlnaHQuaWRcbiAgICAgICAgJiYgdmFsLnVzZXJPcGVyYXRpb24gPT09IHRoaXMuY3VycmVudFVzZXI7XG4gICAgfSlbMF07XG5cbiAgICBsZXQgc3BvdGxpZ2h0VXNlcjogU3BvdGxpZ2h0VXNlciA9IHtcbiAgICAgIHNwb3RsaWdodElkOiBzcG90bGlnaHQuaWQsXG4gICAgICBzaG93RGF0ZTogZGF5cyA/IHRoaXMuZ2V0U2hvd0RhdGUoZGF5cykgOiBudWxsLFxuICAgICAgdXNlck9wZXJhdGlvbjogdGhpcy5jdXJyZW50VXNlclxuICAgIH07XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgc3BvdGxpZ2h0VXNlciA9IHtcbiAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgIC4uLnNwb3RsaWdodFVzZXJcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuc3BvdGxpZ2h0U2VydmljZS5zYXZlU3BvdGxpZ2h0VXNlcihzcG90bGlnaHRVc2VyKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblByaW1hcnkoKSB7XG4gICAgY29uc3Qgc3BvdGxpZ2h0ID0gdGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0O1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGROb3RpZmljYXRpb24oVXNlckFjdGlvbi5DT05GSVJNRUQpO1xuXG4gICAgdGhpcy5zYXZlU3BvdGxpZ2h0Q29udHJvbCgpO1xuICAgIHRoaXMuc2F2ZVNwb3RsaWdodFVzZXIoKTtcblxuICAgIGlmICh0aGlzLmNhbkVtaXRFdmVudCkge1xuICAgICAgdGhpcy5zcG90bGlnaHRTZXJ2aWNlLm5vdGlmaWNhdGVTcG90bGlnaHQobm90aWZpY2F0aW9uKS5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAoc3BvdGxpZ2h0LnByaW1hcnlCdXR0b25VcmwpIHtcbiAgICAgIHdpbmRvdy5vcGVuKHNwb3RsaWdodC5wcmltYXJ5QnV0dG9uVXJsKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgb25TZWNvbmRhcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZE5vdGlmaWNhdGlvbihVc2VyQWN0aW9uLlBPU1RQT05FRCk7XG5cbiAgICB0aGlzLnNhdmVTcG90bGlnaHRDb250cm9sKEVudW1TcG90bGlnaHRTdGF0dXMuUkVGVVNFRCk7XG4gICAgdGhpcy5zYXZlU3BvdGxpZ2h0VXNlcih0aGlzLnNwb3RsaWdodFNjcmVlbi5zcG90bGlnaHQuZGF5c1JlbWVtYmVyTGF0ZSk7XG4gICAgdGhpcy5zcG90bGlnaHRTZXJ2aWNlLm5vdGlmaWNhdGVTcG90bGlnaHQobm90aWZpY2F0aW9uKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRlcnRpYXJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGROb3RpZmljYXRpb24oVXNlckFjdGlvbi5SRUZVU0VEKTtcblxuICAgIHRoaXMuc2F2ZVNwb3RsaWdodENvbnRyb2woRW51bVNwb3RsaWdodFN0YXR1cy5SRUZVU0VEKTtcbiAgICB0aGlzLnNhdmVTcG90bGlnaHRVc2VyKHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodC5kYXlzTm90SW50ZXJlc3RlZCk7XG4gICAgdGhpcy5zcG90bGlnaHRTZXJ2aWNlLm5vdGlmaWNhdGVTcG90bGlnaHQobm90aWZpY2F0aW9uKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzZSB1bSByZWdpc3RybyBkZSB1c3XDoXJpbyBwZXJ0ZW5jZSBhbyB1c3XDoXJpbyBsb2dhZG8gZSBjb3JyZXNwb25kZSBhbyBzcG90bGlnaHQgYXR1YWxcbiAgICogQHBhcmFtIHVzZXIgU3BvdGxpZ2h0VXNlciBPYmpldG8gcmVwcmVzZW50YW5kbyBvIHJlZ2lzdHJvIGRvIHVzdcOhcmlvIHBhcmEgdW1hIHNwb3RsaWdodFxuICAgKiBAcGFyYW0gc3BvdGxpZ2h0IFNwb3RsaWdodCBTcG90bGlnaHRcbiAgICogQHJldHVybnMgYm9vbGVhbiB0cnVlIHNlIGNvcnJlc3BvbmRlciBhbyBzcG90bGlnaHQgYXR1YWwsIGZhbHNlIGNhc28gY29udHLDoXJpb1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNUaGlzUmVnaXN0ZXIodXNlcjogU3BvdGxpZ2h0VXNlciwgc3BvdGxpZ2h0OiBTcG90bGlnaHQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHVzZXIuc3BvdGxpZ2h0SWQgPT09IHNwb3RsaWdodC5pZCAmJiB1c2VyLnVzZXJPcGVyYXRpb24gPT09IHRoaXMuY3VycmVudFVzZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIHVtIHJlZ2lzdHJvIGRlIHVzdcOhcmlvIHBlcnRlY2UgYW8gdXN1w6FyaW8gbG9nYWRvLCBtYXMgbsOjbyBjb3JyZXNwb25kZSBhbyBzcG90bGlnaHQgYXR1YWxcbiAgICogQHBhcmFtIHVzZXIgU3BvdGxpZ2h0VXNlciBPYmpldG8gcmVwcmVzZW50YW5kbyBvIHJlZ2lzdHJvIGRvIHVzdcOhcmlvIHBhcmEgdW1hIHNwb3RsaWdodFxuICAgKiBAcGFyYW0gc3BvdGxpZ2h0IFNwb3RsaWdodCBTcG90bGlnaHRcbiAgICogQHJldHVybnMgYm9vbGVhbiB0cnVlIHNlIGNvcnJlc3BvbmRlciBhbyBzcG90bGlnaHQgYXR1YWwsIGZhbHNlIGNhc28gY29udHLDoXJpb1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNBbm90aGVyUmVnaXN0ZXIodXNlcjogU3BvdGxpZ2h0VXNlciwgc3BvdGxpZ2h0OiBTcG90bGlnaHQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXNlci5zcG90bGlnaHRJZCAhPT0gc3BvdGxpZ2h0LmlkICYmIHVzZXIudXNlck9wZXJhdGlvbiA9PT0gdGhpcy5jdXJyZW50VXNlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0ZSB1bSBub3ZvIHJlZ2lzdHJvIGRlIGNvbnRyb2xlIHBhcmEgbyBzcG90bGlnaHQgYXR1YWwgc2VcbiAgICogbsOjbyBmb3IgZW5jb250cmFkbyBuZW5odW0gbmEgbGlzdGEgZGUgY29udHJvbGVzIGNhcnJlZ2FkYSBpbmljaWFsbWVudGVcbiAgICogQHBhcmFtIHN0YXR1cyBFbnVtU3BvdGxpZ2h0U3RhdHVzIFN0YXR1cyBkbyBjb250cm9sZSBkbyBzcG90bGlnaHQuIFNlIG5lbmh1bSBmb3IgaW5mb3JtYWRvLCBJTl9QUk9HUkVTUyBzZXLDoSBhcGxpY2Fkb1xuICAgKiBAcmV0dXJucyBTcG90bGlnaHRDb250cm9sIENvbnRyb2xlIGRvIHNwb3RsaWdodCByZWN1cGVyYWRvL3Blc2lzdGlkb1xuICAgKi9cbiAgcHJpdmF0ZSBzYXZlU3BvdGxpZ2h0Q29udHJvbChzdGF0dXMgPSBFbnVtU3BvdGxpZ2h0U3RhdHVzLklOX1BST0dSRVNTKTogU3BvdGxpZ2h0Q29udHJvbCB7XG4gICAgY29uc3Qgc3BvdGxpZ2h0ID0gdGhpcy5zcG90bGlnaHRTY3JlZW4uc3BvdGxpZ2h0O1xuICAgIGxldCBjb250cm9sOiBTcG90bGlnaHRDb250cm9sID0gdGhpcy5nZXRTcG90bGlnaHRDb250cm9sRnJvbUxpc3Qoc3BvdGxpZ2h0LmlkKTtcblxuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29udHJvbCA9IHtcbiAgICAgICAgc3BvdGxpZ2h0SWQ6IHNwb3RsaWdodC5pZCxcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGZpcnN0VXNlcjogdGhpcy5jdXJyZW50VXNlclxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc05ld0NvbnRyb2woY29udHJvbCkgfHwgY29udHJvbC5zdGF0dXMgIT09IEVudW1TcG90bGlnaHRTdGF0dXMuSU5fUFJPR1JFU1MpIHtcbiAgICAgIGNvbnRyb2wuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgY29udHJvbC5maXJzdFVzZXIgPSBzdGF0dXMgPT09IEVudW1TcG90bGlnaHRTdGF0dXMuSU5fUFJPR1JFU1MgPyB0aGlzLmN1cnJlbnRVc2VyIDogJyc7XG4gICAgICB0aGlzLnNwb3RsaWdodFNlcnZpY2Uuc2F2ZVNwb3RsaWdodENvbnRyb2woY29udHJvbCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBvIGNvbnRyb2xlIGRlIHNwb3RsaWdodCBjb3JyZXNwb25kZW50ZSBhbyBpZGVudGlmaWNhZG9yXG4gICAqIGluZm9ybWFkbyBuYSBsaXN0YSBkZSBjb250cm9sZXMgY2FycmVnYWRhIG5hIGluaWNpYWxpemHDp8OjbyBkbyBjb21wb25lbnRlXG4gICAqIEBwYXJhbSBpZCBzdHJpbmcgSWRlbnRpZmljYWRvciBkbyBjb250cm9sZSBkZSBzcG90bGlnaHRcbiAgICovXG4gIHByaXZhdGUgZ2V0U3BvdGxpZ2h0Q29udHJvbEZyb21MaXN0KGlkOiBzdHJpbmcpOiBTcG90bGlnaHRDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5zcG90bGlnaHRDb250cm9sc0xpc3QuY29udGVudHMuZmlsdGVyKHZhbCA9PiAgdmFsLnNwb3RsaWdodElkID09PSBpZClbMF07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgbyBjb250cm9sZSBkZSBzcG90bGlnaHQgaW5mb3JtYWRvIG7Do28gZm9pIHJlZ2lzdHJhZG8gYWluZGFcbiAgICogQHBhcmFtIHNwb3RsaWdodENvbnRyb2wgU3BvdGxpZ2h0Q29udHJvbCBDb250cm9sZSBkbyBzcG90bGlnaHRcbiAgICogQHJldHVybnMgYm9vbGVhbiB0cnVlIHNlIGFpbmRhIG7Do28gZm9pIHJlZ2lzdHJhZG8gbmEgYmFzZSwgZmFsc2UgY2FzbyBjb250csOhcmlvXG4gICAqL1xuICBwcml2YXRlIGlzTmV3Q29udHJvbChzcG90bGlnaHRDb250cm9sOiBTcG90bGlnaHRDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnNwb3RsaWdodENvbnRyb2xzTGlzdC5jb250ZW50cy5pbmNsdWRlcyhzcG90bGlnaHRDb250cm9sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVtIG9iamV0byBkZSBub3RpZmljYcOnw6NvIHJlZmVyZW50ZSBhbyBib3TDo28gY2xpY2FkbyBwZWxvIHVzdcOhcmlvLlxuICAgKiBAcGFyYW0gdXNlckFjdGlvbiBVc2VyQWN0aW9uIEHDp8OjbyByZWFsaXphZGEgcGVsbyB1c3XDoXJpbyBhbyBjbGljYXIgbm9zIGJvdMO1ZXMgZGEgbW9kYWxcbiAgICogQHJldHVybnMgU3BvdGxpZ2h0Tm90aWZpY2F0aW9uIE9iamV0byBkZSBub3RpZmljYcOnw6NvXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkTm90aWZpY2F0aW9uKHVzZXJBY3Rpb246IFVzZXJBY3Rpb24pOiBTcG90bGlnaHROb3RpZmljYXRpb24ge1xuICAgIGNvbnN0IHNwb3RsaWdodCA9IHRoaXMuc3BvdGxpZ2h0U2NyZWVuLnNwb3RsaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGlja2VkQnV0dG9uOiB1c2VyQWN0aW9uLFxuICAgICAgc3BvdGxpZ2h0Q29udHJvbElkOiBzcG90bGlnaHQuaWQsXG4gICAgICBwcmltYXJ5QnV0dG9uVXJsOiBzcG90bGlnaHQucHJpbWFyeUJ1dHRvblVybFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG59XG4iXX0=
@@ -1,3 +0,0 @@
1
- export * from './spotlight.module';
2
- export * from './component/spotlight.component';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudC9zcG90bGlnaHQuY29tcG9uZW50JztcbiJdfQ==
@@ -1,5 +0,0 @@
1
- export const fallback = {
2
- 'platform.spotlight.no_interest': 'Não tenho interesse',
3
- 'platform.spotlight.remember_late': 'Lembrar mais tarde'
4
- };
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2suanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L2xvY2FsZS9mYWxsYmFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVE7SUFFekIsZ0NBQWdDLEVBQUcscUJBQXFCO0lBQ3hELGtDQUFrQyxFQUFHLG9CQUFvQjtDQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZhbGxiYWNrOiBhbnkgPSB7XG5cbiAgICAncGxhdGZvcm0uc3BvdGxpZ2h0Lm5vX2ludGVyZXN0JyA6ICdOw6NvIHRlbmhvIGludGVyZXNzZScsXG4gICAgJ3BsYXRmb3JtLnNwb3RsaWdodC5yZW1lbWJlcl9sYXRlJyA6ICdMZW1icmFyIG1haXMgdGFyZGUnXG59O1xuIl19
@@ -1,6 +0,0 @@
1
- export var EnumDisplayType;
2
- (function (EnumDisplayType) {
3
- EnumDisplayType["ADVERSITING"] = "ADVERSITING";
4
- EnumDisplayType["INTEGRATION"] = "INTEGRATION";
5
- })(EnumDisplayType || (EnumDisplayType = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGxheS10eXBlLmVudW0uanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9kaXNwbGF5LXR5cGUuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxlQUdYO0FBSEQsV0FBWSxlQUFlO0lBQ3ZCLDhDQUEyQixDQUFBO0lBQzNCLDhDQUEyQixDQUFBO0FBQy9CLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxRQUcxQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVudW1EaXNwbGF5VHlwZSB7XG4gICAgQURWRVJTSVRJTkcgPSAnQURWRVJTSVRJTkcnLFxuICAgIElOVEVHUkFUSU9OID0gJ0lOVEVHUkFUSU9OJ1xufVxuIl19
@@ -1,4 +0,0 @@
1
- export * from './display-type.enum';
2
- export * from './spotlight-control.interface';
3
- export * from './spotlight-status.enum';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBT3BDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGlzcGxheS10eXBlLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9zcG90bGlnaHQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0LXNjcmVlbi1saXN0LmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3Nwb3RsaWdodC1zY3JlZW4uaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0LXVzZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0LXVzZXJzLWxpc3QuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3BvdGxpZ2h0LWNvbnRyb2wtbGlzdC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcG90bGlnaHQtY29udHJvbC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcG90bGlnaHQtc3RhdHVzLmVudW0nO1xuIl19
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LWNvbnRyb2wtbGlzdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9zcG90bGlnaHQtY29udHJvbC1saXN0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3BvdGxpZ2h0Q29udHJvbCB9IGZyb20gJy4vc3BvdGxpZ2h0LWNvbnRyb2wuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBTcG90bGlnaHRDb250cm9sTGlzdCB7XG4gICAgdG90YWxQYWdlczogbnVtYmVyO1xuICAgIHRvdGFsRWxlbWVudHM6IG51bWJlcjtcbiAgICBjb250ZW50czogU3BvdGxpZ2h0Q29udHJvbFtdO1xufVxuIl19
@@ -1,3 +0,0 @@
1
- export class SpotlightControl {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LWNvbnRyb2wuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3BsYXRmb3JtLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2R1bGVzL3Nwb3RsaWdodC9tb2RlbHMvc3BvdGxpZ2h0LWNvbnRyb2wuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxnQkFBZ0I7Q0FTNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnVtU3BvdGxpZ2h0U3RhdHVzIH0gZnJvbSAnLi9zcG90bGlnaHQtc3RhdHVzLmVudW0nO1xuXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0Q29udHJvbCB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgc3BvdGxpZ2h0SWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IEVudW1TcG90bGlnaHRTdGF0dXM7XG4gICAgZmlyc3RVc2VyPzogc3RyaW5nO1xuICAgIGNyZWF0ZWRCeT86IHN0cmluZztcbiAgICBjcmVhdGVkRGF0ZT86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWRCeT86IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWREYXRlPzogc3RyaW5nO1xufSJdfQ==
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW5vdGlmaWNhdGlvbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9zcG90bGlnaHQtbm90aWZpY2F0aW9uLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckFjdGlvbiB9IGZyb20gJy4vdXNlci1hY3Rpb24uZW51bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BvdGxpZ2h0Tm90aWZpY2F0aW9uIHtcbiAgY2xpY2tlZEJ1dHRvbjogVXNlckFjdGlvbjtcbiAgc3BvdGxpZ2h0Q29udHJvbElkOiBzdHJpbmc7XG4gIHByaW1hcnlCdXR0b25Vcmw6IHN0cmluZztcbn1cbiJdfQ==
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LXNjcmVlbi1saXN0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3JzaXN0ZW1hcy9wbGF0Zm9ybS1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsibW9kdWxlcy9zcG90bGlnaHQvbW9kZWxzL3Nwb3RsaWdodC1zY3JlZW4tbGlzdC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNwb3RsaWdodFNjcmVlbiB9IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNwb3RsaWdodFNjcmVlbkxpc3Qge1xuICAgIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG4gICAgY29udGVudHM6IFNwb3RsaWdodFNjcmVlbltdO1xufVxuIl19
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LXNjcmVlbi5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvcGxhdGZvcm0tY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvc3BvdGxpZ2h0L21vZGVscy9zcG90bGlnaHQtc2NyZWVuLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3BvdGxpZ2h0IH0gZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BvdGxpZ2h0U2NyZWVuIHtcbiAgICBpZD86IHN0cmluZztcbiAgICBzcG90bGlnaHQ6IFNwb3RsaWdodDtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIHNjcmVlbk1lbnVJZDogc3RyaW5nO1xuICAgIGNyZWF0ZUJ5OiBzdHJpbmc7XG4gICAgY3JlYXRlZERhdGU6IHN0cmluZztcbiAgICBsYXN0TW9kaWZpZWRCeTogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZERhdGU6IERhdGU7XG59XG4iXX0=
@@ -1,8 +0,0 @@
1
- export var EnumSpotlightStatus;
2
- (function (EnumSpotlightStatus) {
3
- EnumSpotlightStatus["ACTIVE"] = "ACTIVE";
4
- EnumSpotlightStatus["IN_PROGRESS"] = "IN_PROGRESS";
5
- EnumSpotlightStatus["NO_STARTED"] = "NO_STARTED";
6
- EnumSpotlightStatus["REFUSED"] = "REFUSED";
7
- })(EnumSpotlightStatus || (EnumSpotlightStatus = {}));
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LXN0YXR1cy5lbnVtLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvcnNpc3RlbWFzL3BsYXRmb3JtLWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJtb2R1bGVzL3Nwb3RsaWdodC9tb2RlbHMvc3BvdGxpZ2h0LXN0YXR1cy5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDM0Isd0NBQWlCLENBQUE7SUFDakIsa0RBQTJCLENBQUE7SUFDM0IsZ0RBQXlCLENBQUE7SUFDekIsMENBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUxXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFLOUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBFbnVtU3BvdGxpZ2h0U3RhdHVzIHtcbiAgICBBQ1RJVkUgPSAnQUNUSVZFJyxcbiAgICBJTl9QUk9HUkVTUyA9ICdJTl9QUk9HUkVTUycsXG4gICAgTk9fU1RBUlRFRCA9ICdOT19TVEFSVEVEJyxcbiAgICBSRUZVU0VEID0gJ1JFRlVTRUQnXG59XG4iXX0=