permissions-contractx 1.0.0

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1397 -0
  3. package/dist/constants/contractx-permissions.constants.d.ts +310 -0
  4. package/dist/constants/contractx-permissions.constants.d.ts.map +1 -0
  5. package/dist/constants/contractx-permissions.constants.js +1061 -0
  6. package/dist/constants/contractx-roles.constants.d.ts +295 -0
  7. package/dist/constants/contractx-roles.constants.d.ts.map +1 -0
  8. package/dist/constants/contractx-roles.constants.js +238 -0
  9. package/dist/constants/index.d.ts +3 -0
  10. package/dist/constants/index.d.ts.map +1 -0
  11. package/dist/constants/index.js +18 -0
  12. package/dist/constants/security.constants.d.ts +77 -0
  13. package/dist/constants/security.constants.d.ts.map +1 -0
  14. package/dist/constants/security.constants.js +139 -0
  15. package/dist/decorators/current-user.decorator.d.ts +73 -0
  16. package/dist/decorators/current-user.decorator.d.ts.map +1 -0
  17. package/dist/decorators/current-user.decorator.js +91 -0
  18. package/dist/decorators/index.d.ts +5 -0
  19. package/dist/decorators/index.d.ts.map +1 -0
  20. package/dist/decorators/index.js +20 -0
  21. package/dist/decorators/permissions.decorator.d.ts +97 -0
  22. package/dist/decorators/permissions.decorator.d.ts.map +1 -0
  23. package/dist/decorators/permissions.decorator.js +106 -0
  24. package/dist/decorators/public.decorator.d.ts +18 -0
  25. package/dist/decorators/public.decorator.d.ts.map +1 -0
  26. package/dist/decorators/public.decorator.js +22 -0
  27. package/dist/decorators/roles.decorator.d.ts +79 -0
  28. package/dist/decorators/roles.decorator.d.ts.map +1 -0
  29. package/dist/decorators/roles.decorator.js +87 -0
  30. package/dist/guards/index.d.ts +4 -0
  31. package/dist/guards/index.d.ts.map +1 -0
  32. package/dist/guards/index.js +19 -0
  33. package/dist/guards/jwt-auth.guard.d.ts +21 -0
  34. package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
  35. package/dist/guards/jwt-auth.guard.js +115 -0
  36. package/dist/guards/permissions.guard.d.ts +14 -0
  37. package/dist/guards/permissions.guard.d.ts.map +1 -0
  38. package/dist/guards/permissions.guard.js +77 -0
  39. package/dist/guards/roles.guard.d.ts +13 -0
  40. package/dist/guards/roles.guard.d.ts.map +1 -0
  41. package/dist/guards/roles.guard.js +59 -0
  42. package/dist/index.d.ts +8 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +28 -0
  45. package/dist/interfaces/index.d.ts +2 -0
  46. package/dist/interfaces/index.d.ts.map +1 -0
  47. package/dist/interfaces/index.js +17 -0
  48. package/dist/interfaces/jwt-payload.interface.d.ts +93 -0
  49. package/dist/interfaces/jwt-payload.interface.d.ts.map +1 -0
  50. package/dist/interfaces/jwt-payload.interface.js +2 -0
  51. package/dist/modules/index.d.ts +2 -0
  52. package/dist/modules/index.d.ts.map +1 -0
  53. package/dist/modules/index.js +17 -0
  54. package/dist/modules/permissions-contractx.module.d.ts +41 -0
  55. package/dist/modules/permissions-contractx.module.d.ts.map +1 -0
  56. package/dist/modules/permissions-contractx.module.js +215 -0
  57. package/dist/services/contractx-authorization.service.d.ts +107 -0
  58. package/dist/services/contractx-authorization.service.d.ts.map +1 -0
  59. package/dist/services/contractx-authorization.service.js +362 -0
  60. package/dist/services/contractx-document-compliance.service.d.ts +85 -0
  61. package/dist/services/contractx-document-compliance.service.d.ts.map +1 -0
  62. package/dist/services/contractx-document-compliance.service.js +536 -0
  63. package/dist/services/contractx-validation.service.d.ts +76 -0
  64. package/dist/services/contractx-validation.service.d.ts.map +1 -0
  65. package/dist/services/contractx-validation.service.js +305 -0
  66. package/dist/services/index.d.ts +6 -0
  67. package/dist/services/index.d.ts.map +1 -0
  68. package/dist/services/index.js +20 -0
  69. package/dist/services/user-context.service.d.ts +114 -0
  70. package/dist/services/user-context.service.d.ts.map +1 -0
  71. package/dist/services/user-context.service.js +199 -0
  72. package/dist/test-document-compliance.d.ts +7 -0
  73. package/dist/test-document-compliance.d.ts.map +1 -0
  74. package/dist/test-document-compliance.js +118 -0
  75. package/package.json +405 -0
@@ -0,0 +1,362 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ContractXAuthorizationService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const contractx_validation_service_1 = require("./contractx-validation.service");
15
+ const contractx_roles_constants_1 = require("../constants/contractx-roles.constants");
16
+ const contractx_permissions_constants_1 = require("../constants/contractx-permissions.constants");
17
+ let ContractXAuthorizationService = class ContractXAuthorizationService {
18
+ constructor(validationService) {
19
+ this.validationService = validationService;
20
+ }
21
+ /**
22
+ * Authorize a user for a specific action on a resource
23
+ */
24
+ authorize(context) {
25
+ const { userRoles, userPermissions, requestedResource, requestedAction } = context;
26
+ // First validate the user context
27
+ const userValidation = this.validationService.validateUser(userRoles, userPermissions);
28
+ if (!userValidation.isValid) {
29
+ return {
30
+ granted: false,
31
+ reason: `Invalid user context: ${userValidation.errors.join(', ')}`,
32
+ level: 'denied',
33
+ };
34
+ }
35
+ // If no specific resource/action requested, just validate user
36
+ if (!requestedResource || !requestedAction) {
37
+ return {
38
+ granted: true,
39
+ reason: 'User context is valid',
40
+ level: 'system',
41
+ metadata: userValidation.metadata,
42
+ };
43
+ }
44
+ // Check system-level access first
45
+ if (this.hasSystemLevelAccess(userRoles)) {
46
+ return {
47
+ granted: true,
48
+ reason: 'System-level access granted via role',
49
+ level: 'system',
50
+ metadata: { systemRole: true },
51
+ };
52
+ }
53
+ // Check role-based access
54
+ const roleAccess = this.checkRoleBasedAccess(userRoles, requestedResource, requestedAction);
55
+ if (roleAccess.granted) {
56
+ return roleAccess;
57
+ }
58
+ // Check permission-based access
59
+ const permissionAccess = this.checkPermissionBasedAccess(userPermissions, requestedResource, requestedAction);
60
+ if (permissionAccess.granted) {
61
+ return permissionAccess;
62
+ }
63
+ // Check if user has any access to the module
64
+ const moduleAccess = this.checkModuleAccess(userPermissions, requestedResource);
65
+ if (moduleAccess) {
66
+ return {
67
+ granted: false,
68
+ reason: `Access denied for action '${requestedAction}' on resource '${requestedResource}'. User has module access but not for this action.`,
69
+ level: 'denied',
70
+ metadata: { hasModuleAccess: true },
71
+ };
72
+ }
73
+ return {
74
+ granted: false,
75
+ reason: `Access denied. No permissions found for resource '${requestedResource}'`,
76
+ level: 'denied',
77
+ };
78
+ }
79
+ /**
80
+ * Check if user has system-level access
81
+ */
82
+ hasSystemLevelAccess(userRoles) {
83
+ return userRoles.some(role => role === contractx_roles_constants_1.CONTRACTX_ROLES.SUPERADMIN ||
84
+ role === contractx_roles_constants_1.CONTRACTX_ROLES.SUPPORT ||
85
+ (0, contractx_roles_constants_1.isSystemRole)(role));
86
+ }
87
+ /**
88
+ * Check role-based access for a resource and action
89
+ */
90
+ checkRoleBasedAccess(userRoles, resource, action) {
91
+ // Get effective permissions for all user roles
92
+ const effectivePermissions = this.validationService.getEffectivePermissions(userRoles, []);
93
+ // Check if the effective permissions include the required permission
94
+ const requiredPermission = `${resource}:${action}`;
95
+ if (effectivePermissions.includes(requiredPermission)) {
96
+ return {
97
+ granted: true,
98
+ reason: `Access granted via role-based permissions`,
99
+ level: 'role',
100
+ metadata: { requiredPermission, effectivePermissions: effectivePermissions.length },
101
+ };
102
+ }
103
+ // Check for wildcard permissions
104
+ const wildcardPermission = `${resource}:*`;
105
+ if (effectivePermissions.includes(wildcardPermission)) {
106
+ return {
107
+ granted: true,
108
+ reason: `Access granted via role-based wildcard permission`,
109
+ level: 'role',
110
+ metadata: { wildcardPermission },
111
+ };
112
+ }
113
+ return {
114
+ granted: false,
115
+ reason: 'No role-based access found',
116
+ level: 'denied',
117
+ };
118
+ }
119
+ /**
120
+ * Check permission-based access for a resource and action
121
+ */
122
+ checkPermissionBasedAccess(userPermissions, resource, action) {
123
+ const requiredPermission = `${resource}:${action}`;
124
+ if (userPermissions.includes(requiredPermission)) {
125
+ return {
126
+ granted: true,
127
+ reason: `Access granted via explicit permission`,
128
+ level: 'permission',
129
+ metadata: { requiredPermission },
130
+ };
131
+ }
132
+ // Check for wildcard permissions
133
+ const wildcardPermission = `${resource}:*`;
134
+ if (userPermissions.includes(wildcardPermission)) {
135
+ return {
136
+ granted: true,
137
+ reason: `Access granted via wildcard permission`,
138
+ level: 'permission',
139
+ metadata: { wildcardPermission },
140
+ };
141
+ }
142
+ return {
143
+ granted: false,
144
+ reason: 'No explicit permission found',
145
+ level: 'denied',
146
+ };
147
+ }
148
+ /**
149
+ * Check if user has any access to a module
150
+ */
151
+ checkModuleAccess(userPermissions, module) {
152
+ return (0, contractx_permissions_constants_1.hasAnyModuleAccess)(userPermissions, module);
153
+ }
154
+ /**
155
+ * Generate an access matrix for the user
156
+ */
157
+ generateAccessMatrix(context) {
158
+ const { userRoles, userPermissions } = context;
159
+ // Get all role metadata
160
+ const roleMetadata = userRoles
161
+ .map(role => (0, contractx_roles_constants_1.getRoleMetadata)(role))
162
+ .filter(meta => meta !== null);
163
+ // Analyze access levels
164
+ const hasSystemAccess = userRoles.some(role => (0, contractx_roles_constants_1.isSystemRole)(role));
165
+ const hasClientAccess = userRoles.some(role => (0, contractx_roles_constants_1.isClientRole)(role));
166
+ const hasProviderAccess = userRoles.some(role => (0, contractx_roles_constants_1.isProviderRole)(role));
167
+ const hasAdminAccess = userRoles.some(role => (0, contractx_roles_constants_1.isAdminRole)(role));
168
+ // Get accessible modules
169
+ const accessibleModules = this.validationService.getUserModules(userPermissions);
170
+ // Calculate highest role level
171
+ const highestRoleLevel = Math.max(...roleMetadata.map(meta => meta?.level || 0), 0);
172
+ // Get effective permissions
173
+ const effectivePermissions = this.validationService.getEffectivePermissions(userRoles, userPermissions);
174
+ return {
175
+ hasSystemAccess,
176
+ hasClientAccess,
177
+ hasProviderAccess,
178
+ hasAdminAccess,
179
+ accessibleModules,
180
+ highestRoleLevel,
181
+ effectivePermissions,
182
+ };
183
+ }
184
+ /**
185
+ * Check if user can access a specific tenant
186
+ */
187
+ canAccessTenant(userRoles, tenantType) {
188
+ // System roles can access all tenants
189
+ if (this.hasSystemLevelAccess(userRoles)) {
190
+ return true;
191
+ }
192
+ // Check specific tenant access
193
+ if (tenantType === 'client') {
194
+ return userRoles.some(role => (0, contractx_roles_constants_1.isClientRole)(role));
195
+ }
196
+ else {
197
+ return userRoles.some(role => (0, contractx_roles_constants_1.isProviderRole)(role));
198
+ }
199
+ }
200
+ /**
201
+ * Get user's accessible tenant types
202
+ */
203
+ getAccessibleTenants(userRoles) {
204
+ const tenants = new Set();
205
+ if (this.hasSystemLevelAccess(userRoles)) {
206
+ tenants.add('system');
207
+ tenants.add('client');
208
+ tenants.add('provider');
209
+ }
210
+ else {
211
+ if (userRoles.some(role => (0, contractx_roles_constants_1.isClientRole)(role))) {
212
+ tenants.add('client');
213
+ }
214
+ if (userRoles.some(role => (0, contractx_roles_constants_1.isProviderRole)(role))) {
215
+ tenants.add('provider');
216
+ }
217
+ }
218
+ return Array.from(tenants);
219
+ }
220
+ /**
221
+ * Filter resources based on user permissions
222
+ */
223
+ filterAccessibleResources(userPermissions, resources, requiredAction = 'read') {
224
+ return resources.filter(resource => (0, contractx_permissions_constants_1.hasModuleAccess)(userPermissions, resource, requiredAction) ||
225
+ (0, contractx_permissions_constants_1.hasModuleAccess)(userPermissions, resource, '*'));
226
+ }
227
+ /**
228
+ * Get user's permissions for a specific module
229
+ */
230
+ getModulePermissions(userPermissions, module) {
231
+ return userPermissions
232
+ .filter(permission => {
233
+ const permModule = (0, contractx_permissions_constants_1.getModuleFromPermission)(permission);
234
+ return permModule === module;
235
+ })
236
+ .map(permission => (0, contractx_permissions_constants_1.getActionFromPermission)(permission))
237
+ .filter(action => action !== null);
238
+ }
239
+ /**
240
+ * Check if user has administrative access to a resource
241
+ */
242
+ hasAdministrativeAccess(userRoles, _resource) {
243
+ // System-level access
244
+ if (this.hasSystemLevelAccess(userRoles)) {
245
+ return true;
246
+ }
247
+ // Check for admin roles specific to the resource
248
+ const adminRoles = [
249
+ contractx_roles_constants_1.CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN,
250
+ contractx_roles_constants_1.CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN,
251
+ ];
252
+ return userRoles.some(role => adminRoles.includes(role));
253
+ }
254
+ /**
255
+ * Validate user context for multi-tenant environment
256
+ */
257
+ validateMultiTenantAccess(context) {
258
+ const errors = [];
259
+ const warnings = [];
260
+ const { userRoles, tenantType, organizationId, projectId } = context;
261
+ // Validate tenant access
262
+ if (tenantType && !this.canAccessTenant(userRoles, tenantType)) {
263
+ errors.push(`User does not have access to ${tenantType} tenant`);
264
+ }
265
+ // Validate organization context
266
+ if (organizationId && !this.hasSystemLevelAccess(userRoles)) {
267
+ // In a real implementation, you'd check if user belongs to the organization
268
+ warnings.push(`Organization-specific access validation should be implemented`);
269
+ }
270
+ // Validate project context
271
+ if (projectId && !this.hasSystemLevelAccess(userRoles)) {
272
+ // In a real implementation, you'd check if user has project access
273
+ warnings.push(`Project-specific access validation should be implemented`);
274
+ }
275
+ return {
276
+ isValid: errors.length === 0,
277
+ errors,
278
+ warnings,
279
+ };
280
+ }
281
+ /**
282
+ * Get permission summary for logging/audit purposes
283
+ */
284
+ getPermissionSummary(context) {
285
+ const accessMatrix = this.generateAccessMatrix(context);
286
+ const accessibleTenants = this.getAccessibleTenants(context.userRoles);
287
+ return {
288
+ userId: context.requestedResource, // Assuming this might be passed in context
289
+ roles: context.userRoles,
290
+ permissionCount: context.userPermissions.length,
291
+ effectivePermissionCount: accessMatrix.effectivePermissions.length,
292
+ accessLevel: accessMatrix.highestRoleLevel,
293
+ tenants: accessibleTenants,
294
+ modules: accessMatrix.accessibleModules,
295
+ hasSystemAccess: accessMatrix.hasSystemAccess,
296
+ hasAdminAccess: accessMatrix.hasAdminAccess,
297
+ };
298
+ }
299
+ /**
300
+ * Check if authorization is required for a resource
301
+ */
302
+ isAuthorizationRequired(resource, action) {
303
+ // Define public resources that don't require authorization
304
+ const publicResources = ['health', 'status', 'version'];
305
+ const publicActions = ['read', 'view'];
306
+ if (publicResources.includes(resource) && publicActions.includes(action)) {
307
+ return false;
308
+ }
309
+ return true;
310
+ }
311
+ /**
312
+ * Get minimum required role for a resource/action combination
313
+ */
314
+ getMinimumRequiredRole(resource, action) {
315
+ // This would typically be configured based on your security requirements
316
+ const resourceRoleMap = {
317
+ contracts: {
318
+ create: [contractx_roles_constants_1.CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN],
319
+ delete: [contractx_roles_constants_1.CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN],
320
+ admin: [contractx_roles_constants_1.CONTRACTX_ROLES.SUPERADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.SUPPORT],
321
+ },
322
+ projects: {
323
+ create: [contractx_roles_constants_1.CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN],
324
+ delete: [contractx_roles_constants_1.CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN],
325
+ },
326
+ security_control: {
327
+ '*': [contractx_roles_constants_1.CONTRACTX_ROLES.SUPERADMIN, contractx_roles_constants_1.CONTRACTX_ROLES.SUPPORT],
328
+ },
329
+ };
330
+ return resourceRoleMap[resource]?.[action] || resourceRoleMap[resource]?.['*'] || [];
331
+ }
332
+ /**
333
+ * Check permission for a user (simpler interface for admin service)
334
+ */
335
+ checkPermission(user, permission, context) {
336
+ const [resource, action] = permission.split(':');
337
+ const authContext = {
338
+ userRoles: user.role,
339
+ userPermissions: user.permissions,
340
+ requestedResource: resource,
341
+ requestedAction: action,
342
+ organizationId: context?.tenantId,
343
+ projectId: context?.resourceId,
344
+ };
345
+ return this.authorize(authContext);
346
+ }
347
+ /**
348
+ * Generate access matrix for a user object (simpler interface)
349
+ */
350
+ generateAccessMatrixForUser(user) {
351
+ const context = {
352
+ userRoles: user.role,
353
+ userPermissions: user.permissions,
354
+ };
355
+ return this.generateAccessMatrix(context);
356
+ }
357
+ };
358
+ exports.ContractXAuthorizationService = ContractXAuthorizationService;
359
+ exports.ContractXAuthorizationService = ContractXAuthorizationService = __decorate([
360
+ (0, common_1.Injectable)(),
361
+ __metadata("design:paramtypes", [contractx_validation_service_1.ContractXValidationService])
362
+ ], ContractXAuthorizationService);
@@ -0,0 +1,85 @@
1
+ /**
2
+ * ContractX Document Compliance Service
3
+ * Validates permissions-contractx package compliance with PermisosRoles.odt document requirements
4
+ */
5
+ export interface ComplianceValidationResult {
6
+ isCompliant: boolean;
7
+ summary: {
8
+ totalRoles: number;
9
+ validatedRoles: number;
10
+ totalPermissions: number;
11
+ validatedPermissions: number;
12
+ compliantRoles: string[];
13
+ nonCompliantRoles: string[];
14
+ };
15
+ roleAnalysis: Array<{
16
+ role: string;
17
+ isCompliant: boolean;
18
+ expectedPermissions: string[];
19
+ actualPermissions: string[];
20
+ missingPermissions: string[];
21
+ extraPermissions: string[];
22
+ documentReference: string;
23
+ }>;
24
+ modulesCoverage: Array<{
25
+ module: string;
26
+ covered: boolean;
27
+ usedByRoles: string[];
28
+ }>;
29
+ warnings: string[];
30
+ errors: string[];
31
+ }
32
+ export interface DocumentRequirement {
33
+ role: string;
34
+ category: 'system' | 'client' | 'provider';
35
+ permissions: Record<string, string[]>;
36
+ restrictions: string[];
37
+ }
38
+ export declare class ContractXDocumentComplianceService {
39
+ private readonly logger;
40
+ /**
41
+ * Document-based role requirements extracted from PermisosRoles.odt
42
+ */
43
+ private readonly DOCUMENT_REQUIREMENTS;
44
+ /**
45
+ * Permission action mappings from document notation to system notation
46
+ */
47
+ private readonly ACTION_MAPPINGS;
48
+ /**
49
+ * Validates complete package compliance with PermisosRoles.odt document
50
+ */
51
+ validateDocumentCompliance(): Promise<ComplianceValidationResult>;
52
+ /**
53
+ * Validates a specific role against document requirements
54
+ */
55
+ private validateRoleCompliance;
56
+ /**
57
+ * Converts document requirements to permission strings
58
+ */
59
+ private convertRequirementsToPermissions;
60
+ /**
61
+ * Validates module coverage across all roles
62
+ */
63
+ private validateModulesCoverage;
64
+ /**
65
+ * Finds roles that use a specific module
66
+ */
67
+ private findRolesUsingModule;
68
+ /**
69
+ * Counts total validated permissions across all roles
70
+ */
71
+ private countValidatedPermissions;
72
+ /**
73
+ * Adds warnings for roles present in package but not in document
74
+ */
75
+ private addMissingRoleWarnings;
76
+ /**
77
+ * Gets the document section for a role
78
+ */
79
+ private getRoleSection;
80
+ /**
81
+ * Generates a compliance report summary
82
+ */
83
+ generateComplianceReport(validation: ComplianceValidationResult): string;
84
+ }
85
+ //# sourceMappingURL=contractx-document-compliance.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractx-document-compliance.service.d.ts","sourceRoot":"","sources":["../../src/services/contractx-document-compliance.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBACa,kCAAkC;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;IAE9E;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAwRpC;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAEF;;OAEG;IACG,0BAA0B,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAuDvE;;OAEG;YACW,sBAAsB;IA+BpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAexC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,0BAA0B,GAAG,MAAM;CA2DzE"}