valtech-components 2.0.407 → 2.0.410

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 (110) hide show
  1. package/esm2022/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.mjs +82 -0
  2. package/esm2022/lib/components/atoms/horizontal-scroll/types.mjs +2 -0
  3. package/esm2022/lib/components/atoms/rights-footer/rights-footer.component.mjs +82 -0
  4. package/esm2022/lib/components/atoms/rights-footer/types.mjs +2 -0
  5. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +55 -11
  6. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +13 -4
  7. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +27 -23
  8. package/esm2022/lib/components/molecules/footer-links/footer-links.component.mjs +277 -0
  9. package/esm2022/lib/components/molecules/footer-links/types.mjs +2 -0
  10. package/esm2022/lib/components/molecules/links-accordion/links-accordion.component.mjs +157 -0
  11. package/esm2022/lib/components/molecules/links-accordion/types.mjs +2 -0
  12. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +12 -2
  13. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +21 -9
  14. package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
  15. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +13 -4
  16. package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +78 -0
  17. package/esm2022/lib/components/molecules/recap-card/types.mjs +2 -0
  18. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +31 -14
  19. package/esm2022/lib/components/molecules/swipe-carousel/swipe-carousel.component.mjs +206 -0
  20. package/esm2022/lib/components/molecules/swipe-carousel/types.mjs +2 -0
  21. package/esm2022/lib/components/molecules/testimonial-card/testimonial-card.component.mjs +138 -0
  22. package/esm2022/lib/components/molecules/testimonial-card/types.mjs +2 -0
  23. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +14 -4
  24. package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +61 -0
  25. package/esm2022/lib/components/organisms/cards-carousel/types.mjs +2 -0
  26. package/esm2022/lib/components/organisms/company-footer/company-footer.component.mjs +72 -0
  27. package/esm2022/lib/components/organisms/company-footer/types.mjs +2 -0
  28. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +175 -3
  29. package/esm2022/lib/components/organisms/data-table/types.mjs +1 -1
  30. package/esm2022/lib/components/organisms/form/form.component.mjs +2 -2
  31. package/esm2022/lib/components/organisms/fun-header/fun-header.component.mjs +225 -0
  32. package/esm2022/lib/components/organisms/fun-header/types.mjs +2 -0
  33. package/esm2022/lib/components/organisms/menu/menu.component.mjs +197 -0
  34. package/esm2022/lib/components/organisms/menu/types.mjs +2 -0
  35. package/esm2022/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.mjs +72 -0
  36. package/esm2022/lib/components/organisms/testimonial-carousel/types.mjs +2 -0
  37. package/esm2022/lib/components/templates/page-content/page-content.component.mjs +156 -0
  38. package/esm2022/lib/components/templates/page-content/types.mjs +2 -0
  39. package/esm2022/lib/components/templates/page-template/page-template.component.mjs +181 -0
  40. package/esm2022/lib/components/templates/page-template/types.mjs +2 -0
  41. package/esm2022/lib/components/templates/page-wrapper/page-wrapper.component.mjs +195 -0
  42. package/esm2022/lib/components/templates/page-wrapper/types.mjs +2 -0
  43. package/esm2022/lib/components/types.mjs +1 -1
  44. package/esm2022/lib/services/firebase/config.mjs +103 -0
  45. package/esm2022/lib/services/firebase/firebase.service.mjs +285 -0
  46. package/esm2022/lib/services/firebase/firestore-collection.mjs +266 -0
  47. package/esm2022/lib/services/firebase/firestore.service.mjs +508 -0
  48. package/esm2022/lib/services/firebase/index.mjs +46 -0
  49. package/esm2022/lib/services/firebase/messaging.service.mjs +503 -0
  50. package/esm2022/lib/services/firebase/storage.service.mjs +421 -0
  51. package/esm2022/lib/services/firebase/types.mjs +8 -0
  52. package/esm2022/lib/services/firebase/utils/path-builder.mjs +195 -0
  53. package/esm2022/lib/services/firebase/utils/query-builder.mjs +302 -0
  54. package/esm2022/lib/services/icons.service.mjs +3 -2
  55. package/esm2022/public-api.mjs +33 -1
  56. package/fesm2022/valtech-components.mjs +5823 -869
  57. package/fesm2022/valtech-components.mjs.map +1 -1
  58. package/lib/components/atoms/horizontal-scroll/horizontal-scroll.component.d.ts +41 -0
  59. package/lib/components/atoms/horizontal-scroll/types.d.ts +13 -0
  60. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +39 -0
  61. package/lib/components/atoms/rights-footer/types.d.ts +13 -0
  62. package/lib/components/molecules/check-input/check-input.component.d.ts +17 -2
  63. package/lib/components/molecules/email-input/email-input.component.d.ts +1 -2
  64. package/lib/components/molecules/footer-links/footer-links.component.d.ts +47 -0
  65. package/lib/components/molecules/footer-links/types.d.ts +37 -0
  66. package/lib/components/molecules/links-accordion/links-accordion.component.d.ts +48 -0
  67. package/lib/components/molecules/links-accordion/types.d.ts +33 -0
  68. package/lib/components/molecules/password-input/password-input.component.d.ts +1 -1
  69. package/lib/components/molecules/prompter/prompter.component.d.ts +8 -1
  70. package/lib/components/molecules/prompter/types.d.ts +7 -1
  71. package/lib/components/molecules/radio-input/radio-input.component.d.ts +1 -2
  72. package/lib/components/molecules/recap-card/recap-card.component.d.ts +36 -0
  73. package/lib/components/molecules/recap-card/types.d.ts +30 -0
  74. package/lib/components/molecules/select-input/select-input.component.d.ts +6 -1
  75. package/lib/components/molecules/swipe-carousel/swipe-carousel.component.d.ts +66 -0
  76. package/lib/components/molecules/swipe-carousel/types.d.ts +35 -0
  77. package/lib/components/molecules/testimonial-card/testimonial-card.component.d.ts +41 -0
  78. package/lib/components/molecules/testimonial-card/types.d.ts +25 -0
  79. package/lib/components/molecules/text-input/text-input.component.d.ts +13 -4
  80. package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +30 -0
  81. package/lib/components/organisms/cards-carousel/types.d.ts +11 -0
  82. package/lib/components/organisms/company-footer/company-footer.component.d.ts +32 -0
  83. package/lib/components/organisms/company-footer/types.d.ts +15 -0
  84. package/lib/components/organisms/data-table/data-table.component.d.ts +1 -1
  85. package/lib/components/organisms/data-table/types.d.ts +6 -0
  86. package/lib/components/organisms/fun-header/fun-header.component.d.ts +72 -0
  87. package/lib/components/organisms/fun-header/types.d.ts +28 -0
  88. package/lib/components/organisms/menu/menu.component.d.ts +39 -0
  89. package/lib/components/organisms/menu/types.d.ts +23 -0
  90. package/lib/components/organisms/testimonial-carousel/testimonial-carousel.component.d.ts +33 -0
  91. package/lib/components/organisms/testimonial-carousel/types.d.ts +8 -0
  92. package/lib/components/templates/page-content/page-content.component.d.ts +55 -0
  93. package/lib/components/templates/page-content/types.d.ts +14 -0
  94. package/lib/components/templates/page-template/page-template.component.d.ts +49 -0
  95. package/lib/components/templates/page-template/types.d.ts +17 -0
  96. package/lib/components/templates/page-wrapper/page-wrapper.component.d.ts +61 -0
  97. package/lib/components/templates/page-wrapper/types.d.ts +19 -0
  98. package/lib/components/types.d.ts +14 -0
  99. package/lib/services/firebase/config.d.ts +49 -0
  100. package/lib/services/firebase/firebase.service.d.ts +140 -0
  101. package/lib/services/firebase/firestore-collection.d.ts +195 -0
  102. package/lib/services/firebase/firestore.service.d.ts +303 -0
  103. package/lib/services/firebase/index.d.ts +38 -0
  104. package/lib/services/firebase/messaging.service.d.ts +254 -0
  105. package/lib/services/firebase/storage.service.d.ts +204 -0
  106. package/lib/services/firebase/types.d.ts +279 -0
  107. package/lib/services/firebase/utils/path-builder.d.ts +132 -0
  108. package/lib/services/firebase/utils/query-builder.d.ts +210 -0
  109. package/package.json +3 -1
  110. package/public-api.d.ts +31 -0
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Path Builder
3
+ *
4
+ * Utilidades para construir rutas de Firestore con templates.
5
+ * Soporta rutas multi-nivel y anidadas.
6
+ */
7
+ /**
8
+ * Construye una ruta de Firestore reemplazando placeholders.
9
+ *
10
+ * @param template - Template con placeholders en formato {param}
11
+ * @param params - Objeto con los valores a reemplazar
12
+ * @returns Ruta construida
13
+ * @throws Error si faltan parámetros requeridos
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * // Ruta simple
18
+ * buildPath('users/{userId}', { userId: 'abc123' });
19
+ * // => 'users/abc123'
20
+ *
21
+ * // Ruta anidada
22
+ * buildPath('users/{userId}/documents/{docId}', {
23
+ * userId: 'abc123',
24
+ * docId: 'doc456'
25
+ * });
26
+ * // => 'users/abc123/documents/doc456'
27
+ *
28
+ * // Múltiples niveles
29
+ * buildPath('orgs/{orgId}/teams/{teamId}/members/{memberId}', {
30
+ * orgId: 'org1',
31
+ * teamId: 'team2',
32
+ * memberId: 'member3'
33
+ * });
34
+ * // => 'orgs/org1/teams/team2/members/member3'
35
+ * ```
36
+ */
37
+ export function buildPath(template, params) {
38
+ let result = template;
39
+ // Encontrar todos los placeholders
40
+ const placeholders = template.match(/\{([^}]+)\}/g);
41
+ if (!placeholders) {
42
+ return template;
43
+ }
44
+ for (const placeholder of placeholders) {
45
+ const key = placeholder.slice(1, -1); // Remover { y }
46
+ const value = params[key];
47
+ if (value === undefined || value === null) {
48
+ throw new Error(`Parámetro requerido '${key}' no proporcionado para la ruta: ${template}`);
49
+ }
50
+ if (typeof value !== 'string' || value.trim() === '') {
51
+ throw new Error(`El parámetro '${key}' debe ser un string no vacío`);
52
+ }
53
+ // Validar que no contenga caracteres inválidos para Firestore
54
+ if (value.includes('/')) {
55
+ throw new Error(`El parámetro '${key}' no puede contener '/'`);
56
+ }
57
+ result = result.replace(placeholder, value);
58
+ }
59
+ return result;
60
+ }
61
+ /**
62
+ * Extrae los nombres de los parámetros de un template de ruta.
63
+ *
64
+ * @param template - Template de ruta
65
+ * @returns Array con los nombres de los parámetros
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * extractParams('users/{userId}/documents/{docId}');
70
+ * // => ['userId', 'docId']
71
+ * ```
72
+ */
73
+ export function extractPathParams(template) {
74
+ const matches = template.match(/\{([^}]+)\}/g);
75
+ if (!matches)
76
+ return [];
77
+ return matches.map((m) => m.slice(1, -1));
78
+ }
79
+ /**
80
+ * Valida que una ruta de Firestore sea válida.
81
+ *
82
+ * @param path - Ruta a validar
83
+ * @returns true si la ruta es válida
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * isValidPath('users/abc123'); // true
88
+ * isValidPath('users/abc123/documents'); // true
89
+ * isValidPath('users//documents'); // false (segmento vacío)
90
+ * isValidPath(''); // false (vacío)
91
+ * ```
92
+ */
93
+ export function isValidPath(path) {
94
+ if (!path || path.trim() === '')
95
+ return false;
96
+ const segments = path.split('/');
97
+ // No puede tener segmentos vacíos
98
+ if (segments.some((s) => s.trim() === ''))
99
+ return false;
100
+ // No puede empezar o terminar con /
101
+ if (path.startsWith('/') || path.endsWith('/'))
102
+ return false;
103
+ return true;
104
+ }
105
+ /**
106
+ * Obtiene la ruta de la colección padre de un documento.
107
+ *
108
+ * @param documentPath - Ruta completa del documento
109
+ * @returns Ruta de la colección padre
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * getCollectionPath('users/abc123');
114
+ * // => 'users'
115
+ *
116
+ * getCollectionPath('users/abc123/documents/doc456');
117
+ * // => 'users/abc123/documents'
118
+ * ```
119
+ */
120
+ export function getCollectionPath(documentPath) {
121
+ const segments = documentPath.split('/');
122
+ if (segments.length < 2) {
123
+ throw new Error(`Ruta de documento inválida: ${documentPath}`);
124
+ }
125
+ return segments.slice(0, -1).join('/');
126
+ }
127
+ /**
128
+ * Obtiene el ID del documento de una ruta.
129
+ *
130
+ * @param documentPath - Ruta completa del documento
131
+ * @returns ID del documento
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * getDocumentId('users/abc123');
136
+ * // => 'abc123'
137
+ *
138
+ * getDocumentId('users/abc123/documents/doc456');
139
+ * // => 'doc456'
140
+ * ```
141
+ */
142
+ export function getDocumentId(documentPath) {
143
+ const segments = documentPath.split('/');
144
+ if (segments.length < 2 || segments.length % 2 !== 0) {
145
+ throw new Error(`Ruta de documento inválida: ${documentPath}`);
146
+ }
147
+ return segments[segments.length - 1];
148
+ }
149
+ /**
150
+ * Verifica si una ruta apunta a un documento (número par de segmentos).
151
+ *
152
+ * @param path - Ruta a verificar
153
+ * @returns true si es una ruta de documento
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * isDocumentPath('users/abc123'); // true
158
+ * isDocumentPath('users'); // false (colección)
159
+ * isDocumentPath('users/abc123/documents'); // false (colección)
160
+ * ```
161
+ */
162
+ export function isDocumentPath(path) {
163
+ const segments = path.split('/').filter((s) => s.trim() !== '');
164
+ return segments.length > 0 && segments.length % 2 === 0;
165
+ }
166
+ /**
167
+ * Verifica si una ruta apunta a una colección (número impar de segmentos).
168
+ *
169
+ * @param path - Ruta a verificar
170
+ * @returns true si es una ruta de colección
171
+ */
172
+ export function isCollectionPath(path) {
173
+ const segments = path.split('/').filter((s) => s.trim() !== '');
174
+ return segments.length > 0 && segments.length % 2 !== 0;
175
+ }
176
+ /**
177
+ * Combina una ruta base con segmentos adicionales.
178
+ *
179
+ * @param basePath - Ruta base
180
+ * @param segments - Segmentos adicionales
181
+ * @returns Ruta combinada
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * joinPath('users', 'abc123', 'documents');
186
+ * // => 'users/abc123/documents'
187
+ * ```
188
+ */
189
+ export function joinPath(...segments) {
190
+ return segments
191
+ .filter((s) => s && s.trim() !== '')
192
+ .map((s) => s.replace(/^\/+|\/+$/g, '')) // Remover / al inicio y final
193
+ .join('/');
194
+ }
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS91dGlscy9wYXRoLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBOEI7SUFDeEUsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBRXRCLG1DQUFtQztJQUNuQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXBELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ3RELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcsb0NBQW9DLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixHQUFHLCtCQUErQixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELDhEQUE4RDtRQUM5RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENB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QUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFHLFFBQWtCO0lBQzVDLE9BQU8sUUFBUTtTQUNaLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDbkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtTQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXRoIEJ1aWxkZXJcbiAqXG4gKiBVdGlsaWRhZGVzIHBhcmEgY29uc3RydWlyIHJ1dGFzIGRlIEZpcmVzdG9yZSBjb24gdGVtcGxhdGVzLlxuICogU29wb3J0YSBydXRhcyBtdWx0aS1uaXZlbCB5IGFuaWRhZGFzLlxuICovXG5cbi8qKlxuICogQ29uc3RydXllIHVuYSBydXRhIGRlIEZpcmVzdG9yZSByZWVtcGxhemFuZG8gcGxhY2Vob2xkZXJzLlxuICpcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGNvbiBwbGFjZWhvbGRlcnMgZW4gZm9ybWF0byB7cGFyYW19XG4gKiBAcGFyYW0gcGFyYW1zIC0gT2JqZXRvIGNvbiBsb3MgdmFsb3JlcyBhIHJlZW1wbGF6YXJcbiAqIEByZXR1cm5zIFJ1dGEgY29uc3RydWlkYVxuICogQHRocm93cyBFcnJvciBzaSBmYWx0YW4gcGFyw6FtZXRyb3MgcmVxdWVyaWRvc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBSdXRhIHNpbXBsZVxuICogYnVpbGRQYXRoKCd1c2Vycy97dXNlcklkfScsIHsgdXNlcklkOiAnYWJjMTIzJyB9KTtcbiAqIC8vID0+ICd1c2Vycy9hYmMxMjMnXG4gKlxuICogLy8gUnV0YSBhbmlkYWRhXG4gKiBidWlsZFBhdGgoJ3VzZXJzL3t1c2VySWR9L2RvY3VtZW50cy97ZG9jSWR9Jywge1xuICogICB1c2VySWQ6ICdhYmMxMjMnLFxuICogICBkb2NJZDogJ2RvYzQ1NidcbiAqIH0pO1xuICogLy8gPT4gJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMvZG9jNDU2J1xuICpcbiAqIC8vIE3Dumx0aXBsZXMgbml2ZWxlc1xuICogYnVpbGRQYXRoKCdvcmdzL3tvcmdJZH0vdGVhbXMve3RlYW1JZH0vbWVtYmVycy97bWVtYmVySWR9Jywge1xuICogICBvcmdJZDogJ29yZzEnLFxuICogICB0ZWFtSWQ6ICd0ZWFtMicsXG4gKiAgIG1lbWJlcklkOiAnbWVtYmVyMydcbiAqIH0pO1xuICogLy8gPT4gJ29yZ3Mvb3JnMS90ZWFtcy90ZWFtMi9tZW1iZXJzL21lbWJlcjMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUGF0aCh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gdGVtcGxhdGU7XG5cbiAgLy8gRW5jb250cmFyIHRvZG9zIGxvcyBwbGFjZWhvbGRlcnNcbiAgY29uc3QgcGxhY2Vob2xkZXJzID0gdGVtcGxhdGUubWF0Y2goL1xceyhbXn1dKylcXH0vZyk7XG5cbiAgaWYgKCFwbGFjZWhvbGRlcnMpIHtcbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmb3IgKGNvbnN0IHBsYWNlaG9sZGVyIG9mIHBsYWNlaG9sZGVycykge1xuICAgIGNvbnN0IGtleSA9IHBsYWNlaG9sZGVyLnNsaWNlKDEsIC0xKTsgLy8gUmVtb3ZlciB7IHkgfVxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zW2tleV07XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXLDoW1ldHJvIHJlcXVlcmlkbyAnJHtrZXl9JyBubyBwcm9wb3JjaW9uYWRvIHBhcmEgbGEgcnV0YTogJHt0ZW1wbGF0ZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsIHBhcsOhbWV0cm8gJyR7a2V5fScgZGViZSBzZXIgdW4gc3RyaW5nIG5vIHZhY8Otb2ApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXIgcXVlIG5vIGNvbnRlbmdhIGNhcmFjdGVyZXMgaW52w6FsaWRvcyBwYXJhIEZpcmVzdG9yZVxuICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVsIHBhcsOhbWV0cm8gJyR7a2V5fScgbm8gcHVlZGUgY29udGVuZXIgJy8nYCk7XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocGxhY2Vob2xkZXIsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0cmFlIGxvcyBub21icmVzIGRlIGxvcyBwYXLDoW1ldHJvcyBkZSB1biB0ZW1wbGF0ZSBkZSBydXRhLlxuICpcbiAqIEBwYXJhbSB0ZW1wbGF0ZSAtIFRlbXBsYXRlIGRlIHJ1dGFcbiAqIEByZXR1cm5zIEFycmF5IGNvbiBsb3Mgbm9tYnJlcyBkZSBsb3MgcGFyw6FtZXRyb3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXh0cmFjdFBhcmFtcygndXNlcnMve3VzZXJJZH0vZG9jdW1lbnRzL3tkb2NJZH0nKTtcbiAqIC8vID0+IFsndXNlcklkJywgJ2RvY0lkJ11cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFBhdGhQYXJhbXModGVtcGxhdGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHRlbXBsYXRlLm1hdGNoKC9cXHsoW159XSspXFx9L2cpO1xuICBpZiAoIW1hdGNoZXMpIHJldHVybiBbXTtcbiAgcmV0dXJuIG1hdGNoZXMubWFwKChtKSA9PiBtLnNsaWNlKDEsIC0xKSk7XG59XG5cbi8qKlxuICogVmFsaWRhIHF1ZSB1bmEgcnV0YSBkZSBGaXJlc3RvcmUgc2VhIHbDoWxpZGEuXG4gKlxuICogQHBhcmFtIHBhdGggLSBSdXRhIGEgdmFsaWRhclxuICogQHJldHVybnMgdHJ1ZSBzaSBsYSBydXRhIGVzIHbDoWxpZGFcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNWYWxpZFBhdGgoJ3VzZXJzL2FiYzEyMycpOyAgICAgICAgICAgLy8gdHJ1ZVxuICogaXNWYWxpZFBhdGgoJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMnKTsgLy8gdHJ1ZVxuICogaXNWYWxpZFBhdGgoJ3VzZXJzLy9kb2N1bWVudHMnKTsgICAgICAgLy8gZmFsc2UgKHNlZ21lbnRvIHZhY8OtbylcbiAqIGlzVmFsaWRQYXRoKCcnKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlICh2YWPDrW8pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09ICcnKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyk7XG5cbiAgLy8gTm8gcHVlZGUgdGVuZXIgc2VnbWVudG9zIHZhY8Otb3NcbiAgaWYgKHNlZ21lbnRzLnNvbWUoKHMpID0+IHMudHJpbSgpID09PSAnJykpIHJldHVybiBmYWxzZTtcblxuICAvLyBObyBwdWVkZSBlbXBlemFyIG8gdGVybWluYXIgY29uIC9cbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpIHx8IHBhdGguZW5kc1dpdGgoJy8nKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIE9idGllbmUgbGEgcnV0YSBkZSBsYSBjb2xlY2Npw7NuIHBhZHJlIGRlIHVuIGRvY3VtZW50by5cbiAqXG4gKiBAcGFyYW0gZG9jdW1lbnRQYXRoIC0gUnV0YSBjb21wbGV0YSBkZWwgZG9jdW1lbnRvXG4gKiBAcmV0dXJucyBSdXRhIGRlIGxhIGNvbGVjY2nDs24gcGFkcmVcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0Q29sbGVjdGlvblBhdGgoJ3VzZXJzL2FiYzEyMycpO1xuICogLy8gPT4gJ3VzZXJzJ1xuICpcbiAqIGdldENvbGxlY3Rpb25QYXRoKCd1c2Vycy9hYmMxMjMvZG9jdW1lbnRzL2RvYzQ1NicpO1xuICogLy8gPT4gJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbGxlY3Rpb25QYXRoKGRvY3VtZW50UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBkb2N1bWVudFBhdGguc3BsaXQoJy8nKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1dGEgZGUgZG9jdW1lbnRvIGludsOhbGlkYTogJHtkb2N1bWVudFBhdGh9YCk7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogT2J0aWVuZSBlbCBJRCBkZWwgZG9jdW1lbnRvIGRlIHVuYSBydXRhLlxuICpcbiAqIEBwYXJhbSBkb2N1bWVudFBhdGggLSBSdXRhIGNvbXBsZXRhIGRlbCBkb2N1bWVudG9cbiAqIEByZXR1cm5zIElEIGRlbCBkb2N1bWVudG9cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZ2V0RG9jdW1lbnRJZCgndXNlcnMvYWJjMTIzJyk7XG4gKiAvLyA9PiAnYWJjMTIzJ1xuICpcbiAqIGdldERvY3VtZW50SWQoJ3VzZXJzL2FiYzEyMy9kb2N1bWVudHMvZG9jNDU2Jyk7XG4gKiAvLyA9PiAnZG9jNDU2J1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2N1bWVudElkKGRvY3VtZW50UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBkb2N1bWVudFBhdGguc3BsaXQoJy8nKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIgfHwgc2VnbWVudHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUnV0YSBkZSBkb2N1bWVudG8gaW52w6FsaWRhOiAke2RvY3VtZW50UGF0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV07XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgdW5hIHJ1dGEgYXB1bnRhIGEgdW4gZG9jdW1lbnRvIChuw7ptZXJvIHBhciBkZSBzZWdtZW50b3MpLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUnV0YSBhIHZlcmlmaWNhclxuICogQHJldHVybnMgdHJ1ZSBzaSBlcyB1bmEgcnV0YSBkZSBkb2N1bWVudG9cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaXNEb2N1bWVudFBhdGgoJ3VzZXJzL2FiYzEyMycpOyAgICAgICAgICAgLy8gdHJ1ZVxuICogaXNEb2N1bWVudFBhdGgoJ3VzZXJzJyk7ICAgICAgICAgICAgICAgICAgLy8gZmFsc2UgKGNvbGVjY2nDs24pXG4gKiBpc0RvY3VtZW50UGF0aCgndXNlcnMvYWJjMTIzL2RvY3VtZW50cycpOyAvLyBmYWxzZSAoY29sZWNjacOzbilcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb2N1bWVudFBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcy50cmltKCkgIT09ICcnKTtcbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA+IDAgJiYgc2VnbWVudHMubGVuZ3RoICUgMiA9PT0gMDtcbn1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSB1bmEgcnV0YSBhcHVudGEgYSB1bmEgY29sZWNjacOzbiAobsO6bWVybyBpbXBhciBkZSBzZWdtZW50b3MpLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gUnV0YSBhIHZlcmlmaWNhclxuICogQHJldHVybnMgdHJ1ZSBzaSBlcyB1bmEgcnV0YSBkZSBjb2xlY2Npw7NuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbGxlY3Rpb25QYXRoKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMudHJpbSgpICE9PSAnJyk7XG4gIHJldHVybiBzZWdtZW50cy5sZW5ndGggPiAwICYmIHNlZ21lbnRzLmxlbmd0aCAlIDIgIT09IDA7XG59XG5cbi8qKlxuICogQ29tYmluYSB1bmEgcnV0YSBiYXNlIGNvbiBzZWdtZW50b3MgYWRpY2lvbmFsZXMuXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gUnV0YSBiYXNlXG4gKiBAcGFyYW0gc2VnbWVudHMgLSBTZWdtZW50b3MgYWRpY2lvbmFsZXNcbiAqIEByZXR1cm5zIFJ1dGEgY29tYmluYWRhXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGpvaW5QYXRoKCd1c2VycycsICdhYmMxMjMnLCAnZG9jdW1lbnRzJyk7XG4gKiAvLyA9PiAndXNlcnMvYWJjMTIzL2RvY3VtZW50cydcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblBhdGgoLi4uc2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNlZ21lbnRzXG4gICAgLmZpbHRlcigocykgPT4gcyAmJiBzLnRyaW0oKSAhPT0gJycpXG4gICAgLm1hcCgocykgPT4gcy5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykpIC8vIFJlbW92ZXIgLyBhbCBpbmljaW8geSBmaW5hbFxuICAgIC5qb2luKCcvJyk7XG59XG4iXX0=
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Query Builder
3
+ *
4
+ * Builder fluido para construir queries de Firestore de manera legible.
5
+ * Alternativa más expresiva a pasar objetos QueryOptions directamente.
6
+ */
7
+ /**
8
+ * Builder fluido para queries de Firestore.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Construir query con builder
13
+ * const options = new QueryBuilder()
14
+ * .where('status', '==', 'active')
15
+ * .where('age', '>=', 18)
16
+ * .orderBy('createdAt', 'desc')
17
+ * .limit(10)
18
+ * .build();
19
+ *
20
+ * // Usar con FirestoreService
21
+ * const users = await firestoreService.getDocs<User>('users', options);
22
+ *
23
+ * // O con método estático
24
+ * const options2 = QueryBuilder.create()
25
+ * .where('category', '==', 'electronics')
26
+ * .orderBy('price', 'asc')
27
+ * .build();
28
+ * ```
29
+ */
30
+ export class QueryBuilder {
31
+ constructor() {
32
+ this.whereConditions = [];
33
+ this.orderByConditions = [];
34
+ }
35
+ /**
36
+ * Crea una nueva instancia del builder (método estático alternativo).
37
+ */
38
+ static create() {
39
+ return new QueryBuilder();
40
+ }
41
+ /**
42
+ * Agrega una condición where.
43
+ *
44
+ * @param field - Campo a filtrar
45
+ * @param operator - Operador de comparación
46
+ * @param value - Valor a comparar
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * builder.where('status', '==', 'active')
51
+ * builder.where('price', '>=', 100)
52
+ * builder.where('tags', 'array-contains', 'featured')
53
+ * builder.where('category', 'in', ['electronics', 'books'])
54
+ * ```
55
+ */
56
+ where(field, operator, value) {
57
+ this.whereConditions.push({ field, operator, value });
58
+ return this;
59
+ }
60
+ /**
61
+ * Shortcut para where con operador '=='.
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * builder.whereEquals('status', 'active')
66
+ * // equivalente a: builder.where('status', '==', 'active')
67
+ * ```
68
+ */
69
+ whereEquals(field, value) {
70
+ return this.where(field, '==', value);
71
+ }
72
+ /**
73
+ * Shortcut para where con operador '!='.
74
+ */
75
+ whereNotEquals(field, value) {
76
+ return this.where(field, '!=', value);
77
+ }
78
+ /**
79
+ * Shortcut para where con operador '>'.
80
+ */
81
+ whereGreaterThan(field, value) {
82
+ return this.where(field, '>', value);
83
+ }
84
+ /**
85
+ * Shortcut para where con operador '>='.
86
+ */
87
+ whereGreaterOrEqual(field, value) {
88
+ return this.where(field, '>=', value);
89
+ }
90
+ /**
91
+ * Shortcut para where con operador '<'.
92
+ */
93
+ whereLessThan(field, value) {
94
+ return this.where(field, '<', value);
95
+ }
96
+ /**
97
+ * Shortcut para where con operador '<='.
98
+ */
99
+ whereLessOrEqual(field, value) {
100
+ return this.where(field, '<=', value);
101
+ }
102
+ /**
103
+ * Shortcut para where con operador 'array-contains'.
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * builder.whereArrayContains('tags', 'featured')
108
+ * ```
109
+ */
110
+ whereArrayContains(field, value) {
111
+ return this.where(field, 'array-contains', value);
112
+ }
113
+ /**
114
+ * Shortcut para where con operador 'array-contains-any'.
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * builder.whereArrayContainsAny('tags', ['featured', 'new'])
119
+ * ```
120
+ */
121
+ whereArrayContainsAny(field, values) {
122
+ return this.where(field, 'array-contains-any', values);
123
+ }
124
+ /**
125
+ * Shortcut para where con operador 'in'.
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * builder.whereIn('status', ['active', 'pending'])
130
+ * ```
131
+ */
132
+ whereIn(field, values) {
133
+ return this.where(field, 'in', values);
134
+ }
135
+ /**
136
+ * Shortcut para where con operador 'not-in'.
137
+ */
138
+ whereNotIn(field, values) {
139
+ return this.where(field, 'not-in', values);
140
+ }
141
+ /**
142
+ * Agrega ordenamiento por un campo.
143
+ *
144
+ * @param field - Campo por el cual ordenar
145
+ * @param direction - Dirección: 'asc' o 'desc' (default: 'asc')
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * builder.orderBy('createdAt', 'desc')
150
+ * builder.orderBy('name') // asc por defecto
151
+ * ```
152
+ */
153
+ orderBy(field, direction = 'asc') {
154
+ this.orderByConditions.push({ field, direction });
155
+ return this;
156
+ }
157
+ /**
158
+ * Shortcut para orderBy descendente.
159
+ */
160
+ orderByDesc(field) {
161
+ return this.orderBy(field, 'desc');
162
+ }
163
+ /**
164
+ * Shortcut para orderBy ascendente.
165
+ */
166
+ orderByAsc(field) {
167
+ return this.orderBy(field, 'asc');
168
+ }
169
+ /**
170
+ * Limita el número de resultados.
171
+ *
172
+ * @param count - Número máximo de documentos
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * builder.limit(10)
177
+ * ```
178
+ */
179
+ limit(count) {
180
+ if (count <= 0) {
181
+ throw new Error('El límite debe ser mayor a 0');
182
+ }
183
+ this.limitValue = count;
184
+ return this;
185
+ }
186
+ /**
187
+ * Cursor para paginación: empezar después de un documento.
188
+ *
189
+ * @param cursor - Documento o snapshot desde donde continuar
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * // Primera página
194
+ * const page1 = await service.getPaginated('users', builder.limit(10).build());
195
+ *
196
+ * // Siguiente página
197
+ * const page2 = await service.getPaginated('users',
198
+ * builder.startAfter(page1.lastDoc).limit(10).build()
199
+ * );
200
+ * ```
201
+ */
202
+ startAfter(cursor) {
203
+ this.startAfterValue = cursor;
204
+ return this;
205
+ }
206
+ /**
207
+ * Cursor para paginación: empezar en un documento.
208
+ */
209
+ startAt(cursor) {
210
+ this.startAtValue = cursor;
211
+ return this;
212
+ }
213
+ /**
214
+ * Cursor para paginación: terminar antes de un documento.
215
+ */
216
+ endBefore(cursor) {
217
+ this.endBeforeValue = cursor;
218
+ return this;
219
+ }
220
+ /**
221
+ * Cursor para paginación: terminar en un documento.
222
+ */
223
+ endAt(cursor) {
224
+ this.endAtValue = cursor;
225
+ return this;
226
+ }
227
+ /**
228
+ * Construye el objeto QueryOptions.
229
+ *
230
+ * @returns QueryOptions para usar con FirestoreService
231
+ */
232
+ build() {
233
+ const options = {};
234
+ if (this.whereConditions.length > 0) {
235
+ options.where = [...this.whereConditions];
236
+ }
237
+ if (this.orderByConditions.length > 0) {
238
+ options.orderBy = [...this.orderByConditions];
239
+ }
240
+ if (this.limitValue !== undefined) {
241
+ options.limit = this.limitValue;
242
+ }
243
+ if (this.startAfterValue !== undefined) {
244
+ options.startAfter = this.startAfterValue;
245
+ }
246
+ if (this.startAtValue !== undefined) {
247
+ options.startAt = this.startAtValue;
248
+ }
249
+ if (this.endBeforeValue !== undefined) {
250
+ options.endBefore = this.endBeforeValue;
251
+ }
252
+ if (this.endAtValue !== undefined) {
253
+ options.endAt = this.endAtValue;
254
+ }
255
+ return options;
256
+ }
257
+ /**
258
+ * Resetea el builder para reutilización.
259
+ */
260
+ reset() {
261
+ this.whereConditions = [];
262
+ this.orderByConditions = [];
263
+ this.limitValue = undefined;
264
+ this.startAfterValue = undefined;
265
+ this.startAtValue = undefined;
266
+ this.endBeforeValue = undefined;
267
+ this.endAtValue = undefined;
268
+ return this;
269
+ }
270
+ /**
271
+ * Clona el builder actual.
272
+ */
273
+ clone() {
274
+ const cloned = new QueryBuilder();
275
+ cloned.whereConditions = [...this.whereConditions];
276
+ cloned.orderByConditions = [...this.orderByConditions];
277
+ cloned.limitValue = this.limitValue;
278
+ cloned.startAfterValue = this.startAfterValue;
279
+ cloned.startAtValue = this.startAtValue;
280
+ cloned.endBeforeValue = this.endBeforeValue;
281
+ cloned.endAtValue = this.endAtValue;
282
+ return cloned;
283
+ }
284
+ }
285
+ /**
286
+ * Función helper para crear un QueryBuilder.
287
+ *
288
+ * @example
289
+ * ```typescript
290
+ * import { query } from 'valtech-components';
291
+ *
292
+ * const options = query()
293
+ * .where('status', '==', 'active')
294
+ * .orderBy('createdAt', 'desc')
295
+ * .limit(10)
296
+ * .build();
297
+ * ```
298
+ */
299
+ export function query() {
300
+ return new QueryBuilder();
301
+ }
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2UvdXRpbHMvcXVlcnktYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFBekI7UUFDVSxvQkFBZSxHQUFrQixFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQW9CLEVBQUUsQ0FBQztJQThSbEQsQ0FBQztJQXZSQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxNQUFNO1FBQ1gsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNILEtBQUssQ0FBQyxLQUFhLEVBQUUsUUFBdUIsRUFBRSxLQUFjO1FBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsV0FBVyxDQUFDLEtBQWEsRUFBRSxLQUFjO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBYztRQUMxQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsS0FBYztRQUM1QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FB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Q0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxNQUFNLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDOUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUM1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBRdWVyeSBCdWlsZGVyXG4gKlxuICogQnVpbGRlciBmbHVpZG8gcGFyYSBjb25zdHJ1aXIgcXVlcmllcyBkZSBGaXJlc3RvcmUgZGUgbWFuZXJhIGxlZ2libGUuXG4gKiBBbHRlcm5hdGl2YSBtw6FzIGV4cHJlc2l2YSBhIHBhc2FyIG9iamV0b3MgUXVlcnlPcHRpb25zIGRpcmVjdGFtZW50ZS5cbiAqL1xuXG5pbXBvcnQgeyBPcmRlckJ5Q2xhdXNlLCBPcmRlckRpcmVjdGlvbiwgUXVlcnlPcHRpb25zLCBXaGVyZUNsYXVzZSwgV2hlcmVPcGVyYXRvciB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBCdWlsZGVyIGZsdWlkbyBwYXJhIHF1ZXJpZXMgZGUgRmlyZXN0b3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDb25zdHJ1aXIgcXVlcnkgY29uIGJ1aWxkZXJcbiAqIGNvbnN0IG9wdGlvbnMgPSBuZXcgUXVlcnlCdWlsZGVyKClcbiAqICAgLndoZXJlKCdzdGF0dXMnLCAnPT0nLCAnYWN0aXZlJylcbiAqICAgLndoZXJlKCdhZ2UnLCAnPj0nLCAxOClcbiAqICAgLm9yZGVyQnkoJ2NyZWF0ZWRBdCcsICdkZXNjJylcbiAqICAgLmxpbWl0KDEwKVxuICogICAuYnVpbGQoKTtcbiAqXG4gKiAvLyBVc2FyIGNvbiBGaXJlc3RvcmVTZXJ2aWNlXG4gKiBjb25zdCB1c2VycyA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0RG9jczxVc2VyPigndXNlcnMnLCBvcHRpb25zKTtcbiAqXG4gKiAvLyBPIGNvbiBtw6l0b2RvIGVzdMOhdGljb1xuICogY29uc3Qgb3B0aW9uczIgPSBRdWVyeUJ1aWxkZXIuY3JlYXRlKClcbiAqICAgLndoZXJlKCdjYXRlZ29yeScsICc9PScsICdlbGVjdHJvbmljcycpXG4gKiAgIC5vcmRlckJ5KCdwcmljZScsICdhc2MnKVxuICogICAuYnVpbGQoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyIHtcbiAgcHJpdmF0ZSB3aGVyZUNvbmRpdGlvbnM6IFdoZXJlQ2xhdXNlW10gPSBbXTtcbiAgcHJpdmF0ZSBvcmRlckJ5Q29uZGl0aW9uczogT3JkZXJCeUNsYXVzZVtdID0gW107XG4gIHByaXZhdGUgbGltaXRWYWx1ZT86IG51bWJlcjtcbiAgcHJpdmF0ZSBzdGFydEFmdGVyVmFsdWU/OiB1bmtub3duO1xuICBwcml2YXRlIHN0YXJ0QXRWYWx1ZT86IHVua25vd247XG4gIHByaXZhdGUgZW5kQmVmb3JlVmFsdWU/OiB1bmtub3duO1xuICBwcml2YXRlIGVuZEF0VmFsdWU/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBudWV2YSBpbnN0YW5jaWEgZGVsIGJ1aWxkZXIgKG3DqXRvZG8gZXN0w6F0aWNvIGFsdGVybmF0aXZvKS5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUoKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFF1ZXJ5QnVpbGRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFncmVnYSB1bmEgY29uZGljacOzbiB3aGVyZS5cbiAgICpcbiAgICogQHBhcmFtIGZpZWxkIC0gQ2FtcG8gYSBmaWx0cmFyXG4gICAqIEBwYXJhbSBvcGVyYXRvciAtIE9wZXJhZG9yIGRlIGNvbXBhcmFjacOzblxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWxvciBhIGNvbXBhcmFyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZSgnc3RhdHVzJywgJz09JywgJ2FjdGl2ZScpXG4gICAqIGJ1aWxkZXIud2hlcmUoJ3ByaWNlJywgJz49JywgMTAwKVxuICAgKiBidWlsZGVyLndoZXJlKCd0YWdzJywgJ2FycmF5LWNvbnRhaW5zJywgJ2ZlYXR1cmVkJylcbiAgICogYnVpbGRlci53aGVyZSgnY2F0ZWdvcnknLCAnaW4nLCBbJ2VsZWN0cm9uaWNzJywgJ2Jvb2tzJ10pXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmUoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLndoZXJlQ29uZGl0aW9ucy5wdXNoKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnPT0nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGJ1aWxkZXIud2hlcmVFcXVhbHMoJ3N0YXR1cycsICdhY3RpdmUnKVxuICAgKiAvLyBlcXVpdmFsZW50ZSBhOiBidWlsZGVyLndoZXJlKCdzdGF0dXMnLCAnPT0nLCAnYWN0aXZlJylcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZUVxdWFscyhmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc9PScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnIT0nLlxuICAgKi9cbiAgd2hlcmVOb3RFcXVhbHMoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnIT0nLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJz4nLlxuICAgKi9cbiAgd2hlcmVHcmVhdGVyVGhhbihmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc+JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICc+PScuXG4gICAqL1xuICB3aGVyZUdyZWF0ZXJPckVxdWFsKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aGVyZShmaWVsZCwgJz49JywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICc8Jy5cbiAgICovXG4gIHdoZXJlTGVzc1RoYW4oZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnPCcsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnPD0nLlxuICAgKi9cbiAgd2hlcmVMZXNzT3JFcXVhbChmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICc8PScsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIHdoZXJlIGNvbiBvcGVyYWRvciAnYXJyYXktY29udGFpbnMnLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGJ1aWxkZXIud2hlcmVBcnJheUNvbnRhaW5zKCd0YWdzJywgJ2ZlYXR1cmVkJylcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZUFycmF5Q29udGFpbnMoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLndoZXJlKGZpZWxkLCAnYXJyYXktY29udGFpbnMnLCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJ2FycmF5LWNvbnRhaW5zLWFueScuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZUFycmF5Q29udGFpbnNBbnkoJ3RhZ3MnLCBbJ2ZlYXR1cmVkJywgJ25ldyddKVxuICAgKiBgYGBcbiAgICovXG4gIHdoZXJlQXJyYXlDb250YWluc0FueShmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHVua25vd25bXSk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICdhcnJheS1jb250YWlucy1hbnknLCB2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHBhcmEgd2hlcmUgY29uIG9wZXJhZG9yICdpbicuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci53aGVyZUluKCdzdGF0dXMnLCBbJ2FjdGl2ZScsICdwZW5kaW5nJ10pXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmVJbihmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHVua25vd25bXSk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMud2hlcmUoZmllbGQsICdpbicsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSB3aGVyZSBjb24gb3BlcmFkb3IgJ25vdC1pbicuXG4gICAqL1xuICB3aGVyZU5vdEluKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogdW5rbm93bltdKTogUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aGVyZShmaWVsZCwgJ25vdC1pbicsIHZhbHVlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIG9yZGVuYW1pZW50byBwb3IgdW4gY2FtcG8uXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZCAtIENhbXBvIHBvciBlbCBjdWFsIG9yZGVuYXJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAtIERpcmVjY2nDs246ICdhc2MnIG8gJ2Rlc2MnIChkZWZhdWx0OiAnYXNjJylcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBidWlsZGVyLm9yZGVyQnkoJ2NyZWF0ZWRBdCcsICdkZXNjJylcbiAgICogYnVpbGRlci5vcmRlckJ5KCduYW1lJykgLy8gYXNjIHBvciBkZWZlY3RvXG4gICAqIGBgYFxuICAgKi9cbiAgb3JkZXJCeShmaWVsZDogc3RyaW5nLCBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uID0gJ2FzYycpOiBRdWVyeUJ1aWxkZXIge1xuICAgIHRoaXMub3JkZXJCeUNvbmRpdGlvbnMucHVzaCh7IGZpZWxkLCBkaXJlY3Rpb24gfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2hvcnRjdXQgcGFyYSBvcmRlckJ5IGRlc2NlbmRlbnRlLlxuICAgKi9cbiAgb3JkZXJCeURlc2MoZmllbGQ6IHN0cmluZyk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJCeShmaWVsZCwgJ2Rlc2MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG9ydGN1dCBwYXJhIG9yZGVyQnkgYXNjZW5kZW50ZS5cbiAgICovXG4gIG9yZGVyQnlBc2MoZmllbGQ6IHN0cmluZyk6IFF1ZXJ5QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJCeShmaWVsZCwgJ2FzYycpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbWl0YSBlbCBuw7ptZXJvIGRlIHJlc3VsdGFkb3MuXG4gICAqXG4gICAqIEBwYXJhbSBjb3VudCAtIE7Dum1lcm8gbcOheGltbyBkZSBkb2N1bWVudG9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYnVpbGRlci5saW1pdCgxMClcbiAgICogYGBgXG4gICAqL1xuICBsaW1pdChjb3VudDogbnVtYmVyKTogUXVlcnlCdWlsZGVyIHtcbiAgICBpZiAoY291bnQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbCBsw61taXRlIGRlYmUgc2VyIG1heW9yIGEgMCcpO1xuICAgIH1cbiAgICB0aGlzLmxpbWl0VmFsdWUgPSBjb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJzb3IgcGFyYSBwYWdpbmFjacOzbjogZW1wZXphciBkZXNwdcOpcyBkZSB1biBkb2N1bWVudG8uXG4gICAqXG4gICAqIEBwYXJhbSBjdXJzb3IgLSBEb2N1bWVudG8gbyBzbmFwc2hvdCBkZXNkZSBkb25kZSBjb250aW51YXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQcmltZXJhIHDDoWdpbmFcbiAgICogY29uc3QgcGFnZTEgPSBhd2FpdCBzZXJ2aWNlLmdldFBhZ2luYXRlZCgndXNlcnMnLCBidWlsZGVyLmxpbWl0KDEwKS5idWlsZCgpKTtcbiAgICpcbiAgICogLy8gU2lndWllbnRlIHDDoWdpbmFcbiAgICogY29uc3QgcGFnZTIgPSBhd2FpdCBzZXJ2aWNlLmdldFBhZ2luYXRlZCgndXNlcnMnLFxuICAgKiAgIGJ1aWxkZXIuc3RhcnRBZnRlcihwYWdlMS5sYXN0RG9jKS5saW1pdCgxMCkuYnVpbGQoKVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHN0YXJ0QWZ0ZXIoY3Vyc29yOiB1bmtub3duKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLnN0YXJ0QWZ0ZXJWYWx1ZSA9IGN1cnNvcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJzb3IgcGFyYSBwYWdpbmFjacOzbjogZW1wZXphciBlbiB1biBkb2N1bWVudG8uXG4gICAqL1xuICBzdGFydEF0KGN1cnNvcjogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgdGhpcy5zdGFydEF0VmFsdWUgPSBjdXJzb3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3Vyc29yIHBhcmEgcGFnaW5hY2nDs246IHRlcm1pbmFyIGFudGVzIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIGVuZEJlZm9yZShjdXJzb3I6IHVua25vd24pOiBRdWVyeUJ1aWxkZXIge1xuICAgIHRoaXMuZW5kQmVmb3JlVmFsdWUgPSBjdXJzb3I7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3Vyc29yIHBhcmEgcGFnaW5hY2nDs246IHRlcm1pbmFyIGVuIHVuIGRvY3VtZW50by5cbiAgICovXG4gIGVuZEF0KGN1cnNvcjogdW5rbm93bik6IFF1ZXJ5QnVpbGRlciB7XG4gICAgdGhpcy5lbmRBdFZhbHVlID0gY3Vyc29yO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBlbCBvYmpldG8gUXVlcnlPcHRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBRdWVyeU9wdGlvbnMgcGFyYSB1c2FyIGNvbiBGaXJlc3RvcmVTZXJ2aWNlXG4gICAqL1xuICBidWlsZCgpOiBRdWVyeU9wdGlvbnMge1xuICAgIGNvbnN0IG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyA9IHt9O1xuXG4gICAgaWYgKHRoaXMud2hlcmVDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9wdGlvbnMud2hlcmUgPSBbLi4udGhpcy53aGVyZUNvbmRpdGlvbnNdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9yZGVyQnlDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIG9wdGlvbnMub3JkZXJCeSA9IFsuLi50aGlzLm9yZGVyQnlDb25kaXRpb25zXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5saW1pdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMubGltaXQgPSB0aGlzLmxpbWl0VmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnRBZnRlclZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wdGlvbnMuc3RhcnRBZnRlciA9IHRoaXMuc3RhcnRBZnRlclZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXJ0QXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnN0YXJ0QXQgPSB0aGlzLnN0YXJ0QXRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmRCZWZvcmVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmVuZEJlZm9yZSA9IHRoaXMuZW5kQmVmb3JlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kQXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLmVuZEF0ID0gdGhpcy5lbmRBdFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0ZWEgZWwgYnVpbGRlciBwYXJhIHJldXRpbGl6YWNpw7NuLlxuICAgKi9cbiAgcmVzZXQoKTogUXVlcnlCdWlsZGVyIHtcbiAgICB0aGlzLndoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgIHRoaXMub3JkZXJCeUNvbmRpdGlvbnMgPSBbXTtcbiAgICB0aGlzLmxpbWl0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydEFmdGVyVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydEF0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbmRCZWZvcmVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVuZEF0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xvbmEgZWwgYnVpbGRlciBhY3R1YWwuXG4gICAqL1xuICBjbG9uZSgpOiBRdWVyeUJ1aWxkZXIge1xuICAgIGNvbnN0IGNsb25lZCA9IG5ldyBRdWVyeUJ1aWxkZXIoKTtcbiAgICBjbG9uZWQud2hlcmVDb25kaXRpb25zID0gWy4uLnRoaXMud2hlcmVDb25kaXRpb25zXTtcbiAgICBjbG9uZWQub3JkZXJCeUNvbmRpdGlvbnMgPSBbLi4udGhpcy5vcmRlckJ5Q29uZGl0aW9uc107XG4gICAgY2xvbmVkLmxpbWl0VmFsdWUgPSB0aGlzLmxpbWl0VmFsdWU7XG4gICAgY2xvbmVkLnN0YXJ0QWZ0ZXJWYWx1ZSA9IHRoaXMuc3RhcnRBZnRlclZhbHVlO1xuICAgIGNsb25lZC5zdGFydEF0VmFsdWUgPSB0aGlzLnN0YXJ0QXRWYWx1ZTtcbiAgICBjbG9uZWQuZW5kQmVmb3JlVmFsdWUgPSB0aGlzLmVuZEJlZm9yZVZhbHVlO1xuICAgIGNsb25lZC5lbmRBdFZhbHVlID0gdGhpcy5lbmRBdFZhbHVlO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGdW5jacOzbiBoZWxwZXIgcGFyYSBjcmVhciB1biBRdWVyeUJ1aWxkZXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHF1ZXJ5IH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCBvcHRpb25zID0gcXVlcnkoKVxuICogICAud2hlcmUoJ3N0YXR1cycsICc9PScsICdhY3RpdmUnKVxuICogICAub3JkZXJCeSgnY3JlYXRlZEF0JywgJ2Rlc2MnKVxuICogICAubGltaXQoMTApXG4gKiAgIC5idWlsZCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeSgpOiBRdWVyeUJ1aWxkZXIge1xuICByZXR1cm4gbmV3IFF1ZXJ5QnVpbGRlcigpO1xufVxuIl19
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Injectable } from '@angular/core';
7
7
  import { addIcons } from 'ionicons';
8
- import { addCircleOutline, addOutline, alertCircleOutline, alertOutline, arrowBackOutline, arrowDownOutline, arrowForwardOutline, businessOutline, calendarOutline, chatbubblesOutline, checkmarkCircleOutline, checkmarkOutline, chevronDownOutline, chevronForwardOutline, clipboardOutline, closeOutline, copyOutline, createOutline, documentTextOutline, ellipsisHorizontalOutline, eyeOffOutline, eyeOutline, filterOutline, heart, heartOutline, homeOutline, informationCircleOutline, locationOutline, lockClosedOutline, logoFacebook, logoInstagram, logoLinkedin, logoNpm, logoTiktok, logoTwitter, logoYoutube, notificationsOutline, openOutline, playOutline, refreshOutline, removeOutline, scanOutline, shareOutline, trashOutline, } from 'ionicons/icons';
8
+ import { addCircleOutline, addOutline, alertCircleOutline, alertOutline, arrowBackOutline, arrowDownOutline, arrowForwardOutline, businessOutline, calendarOutline, chatbubblesOutline, checkmarkCircleOutline, checkmarkOutline, chevronDownOutline, chevronForwardOutline, clipboardOutline, closeOutline, copyOutline, createOutline, documentTextOutline, ellipsisHorizontalOutline, eyeOffOutline, eyeOutline, filterOutline, heart, heartOutline, homeOutline, informationCircleOutline, locationOutline, lockClosedOutline, logoFacebook, logoGoogle, logoInstagram, logoLinkedin, logoNpm, logoTiktok, logoTwitter, logoYoutube, notificationsOutline, openOutline, playOutline, refreshOutline, removeOutline, scanOutline, shareOutline, trashOutline, } from 'ionicons/icons';
9
9
  import * as i0 from "@angular/core";
10
10
  export class IconService {
11
11
  /**
@@ -48,6 +48,7 @@ export class IconService {
48
48
  logoYoutube,
49
49
  logoTiktok,
50
50
  logoFacebook,
51
+ logoGoogle,
51
52
  createOutline,
52
53
  trashOutline,
53
54
  playOutline,
@@ -68,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
68
69
  providedIn: 'root',
69
70
  }]
70
71
  }], ctorParameters: () => [] });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvaWNvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFFekM7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osV0FBVyxFQUNYLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixVQUFVLEVBQ1YsYUFBYSxFQUNiLEtBQUssRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLFdBQVcsRUFDWCxjQUFjLEVBQ2QsYUFBYSxFQUNiLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7O0FBS3hCLE1BQU0sT0FBTyxXQUFXO0lBQ3RCOztPQUVHO0lBQ0g7UUFDRSxRQUFRLENBQUM7WUFDUCxVQUFVO1lBQ1YsZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtZQUNuQixnQkFBZ0I7WUFDaEIsc0JBQXNCO1lBQ3RCLHlCQUF5QjtZQUN6QixvQkFBb0I7WUFDcEIsV0FBVztZQUNYLFlBQVk7WUFDWixrQkFBa0I7WUFDbEIsWUFBWTtZQUNaLEtBQUs7WUFDTCxZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixVQUFVO1lBQ1YsV0FBVztZQUNYLGtCQUFrQjtZQUNsQixxQkFBcUI7WUFDckIsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsZUFBZTtZQUNmLFdBQVc7WUFDWCxhQUFhO1lBQ2IsWUFBWTtZQUNaLFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWTtZQUNaLGFBQWE7WUFDYixZQUFZO1lBQ1osV0FBVztZQUNYLGNBQWM7WUFDZCxtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLHdCQUF3QjtZQUN4QixPQUFPO1lBQ1AsYUFBYTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBbkRVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciByZWdpc3RlcmluZyBhbmQgbWFuYWdpbmcgY3VzdG9tIElvbmljb25zIGljb25zIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJzIGEgc2V0IG9mIGNvbW1vbmx5IHVzZWQgaWNvbnMgb24gaW5pdGlhbGl6YXRpb24uXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhZGRDaXJjbGVPdXRsaW5lLFxuICBhZGRPdXRsaW5lLFxuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGFsZXJ0T3V0bGluZSxcbiAgYXJyb3dCYWNrT3V0bGluZSxcbiAgYXJyb3dEb3duT3V0bGluZSxcbiAgYXJyb3dGb3J3YXJkT3V0bGluZSxcbiAgYnVzaW5lc3NPdXRsaW5lLFxuICBjYWxlbmRhck91dGxpbmUsXG4gIGNoYXRidWJibGVzT3V0bGluZSxcbiAgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSxcbiAgY2hlY2ttYXJrT3V0bGluZSxcbiAgY2hldnJvbkRvd25PdXRsaW5lLFxuICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gIGNsaXBib2FyZE91dGxpbmUsXG4gIGNsb3NlT3V0bGluZSxcbiAgY29weU91dGxpbmUsXG4gIGNyZWF0ZU91dGxpbmUsXG4gIGRvY3VtZW50VGV4dE91dGxpbmUsXG4gIGVsbGlwc2lzSG9yaXpvbnRhbE91dGxpbmUsXG4gIGV5ZU9mZk91dGxpbmUsXG4gIGV5ZU91dGxpbmUsXG4gIGZpbHRlck91dGxpbmUsXG4gIGhlYXJ0LFxuICBoZWFydE91dGxpbmUsXG4gIGhvbWVPdXRsaW5lLFxuICBpbmZvcm1hdGlvbkNpcmNsZU91dGxpbmUsXG4gIGxvY2F0aW9uT3V0bGluZSxcbiAgbG9ja0Nsb3NlZE91dGxpbmUsXG4gIGxvZ29GYWNlYm9vayxcbiAgbG9nb0luc3RhZ3JhbSxcbiAgbG9nb0xpbmtlZGluLFxuICBsb2dvTnBtLFxuICBsb2dvVGlrdG9rLFxuICBsb2dvVHdpdHRlcixcbiAgbG9nb1lvdXR1YmUsXG4gIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICBvcGVuT3V0bGluZSxcbiAgcGxheU91dGxpbmUsXG4gIHJlZnJlc2hPdXRsaW5lLFxuICByZW1vdmVPdXRsaW5lLFxuICBzY2FuT3V0bGluZSxcbiAgc2hhcmVPdXRsaW5lLFxuICB0cmFzaE91dGxpbmUsXG59IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEljb25TZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHNldCBvZiBJb25pY29ucyBpY29ucyBmb3IgdXNlIHRocm91Z2hvdXQgdGhlIGFwcC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHtcbiAgICAgIGFkZE91dGxpbmUsXG4gICAgICBhZGRDaXJjbGVPdXRsaW5lLFxuICAgICAgYWxlcnRPdXRsaW5lLFxuICAgICAgYWxlcnRDaXJjbGVPdXRsaW5lLFxuICAgICAgYXJyb3dCYWNrT3V0bGluZSxcbiAgICAgIGFycm93Rm9yd2FyZE91dGxpbmUsXG4gICAgICBhcnJvd0Rvd25PdXRsaW5lLFxuICAgICAgY2hlY2ttYXJrQ2lyY2xlT3V0bGluZSxcbiAgICAgIGVsbGlwc2lzSG9yaXpvbnRhbE91dGxpbmUsXG4gICAgICBub3RpZmljYXRpb25zT3V0bGluZSxcbiAgICAgIG9wZW5PdXRsaW5lLFxuICAgICAgY2xvc2VPdXRsaW5lLFxuICAgICAgY2hhdGJ1YmJsZXNPdXRsaW5lLFxuICAgICAgc2hhcmVPdXRsaW5lLFxuICAgICAgaGVhcnQsXG4gICAgICBoZWFydE91dGxpbmUsXG4gICAgICBob21lT3V0bGluZSxcbiAgICAgIGV5ZU9mZk91dGxpbmUsXG4gICAgICBleWVPdXRsaW5lLFxuICAgICAgc2Nhbk91dGxpbmUsXG4gICAgICBjaGV2cm9uRG93bk91dGxpbmUsXG4gICAgICBjaGV2cm9uRm9yd2FyZE91dGxpbmUsXG4gICAgICBjaGVja21hcmtPdXRsaW5lLFxuICAgICAgY2xpcGJvYXJkT3V0bGluZSxcbiAgICAgIGNvcHlPdXRsaW5lLFxuICAgICAgZmlsdGVyT3V0bGluZSxcbiAgICAgIGxvY2F0aW9uT3V0bGluZSxcbiAgICAgIGNhbGVuZGFyT3V0bGluZSxcbiAgICAgIGJ1c2luZXNzT3V0bGluZSxcbiAgICAgIGxvZ29Ud2l0dGVyLFxuICAgICAgbG9nb0luc3RhZ3JhbSxcbiAgICAgIGxvZ29MaW5rZWRpbixcbiAgICAgIGxvZ29Zb3V0dWJlLFxuICAgICAgbG9nb1Rpa3RvayxcbiAgICAgIGxvZ29GYWNlYm9vayxcbiAgICAgIGNyZWF0ZU91dGxpbmUsXG4gICAgICB0cmFzaE91dGxpbmUsXG4gICAgICBwbGF5T3V0bGluZSxcbiAgICAgIHJlZnJlc2hPdXRsaW5lLFxuICAgICAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgICAgIGxvY2tDbG9zZWRPdXRsaW5lLFxuICAgICAgaW5mb3JtYXRpb25DaXJjbGVPdXRsaW5lLFxuICAgICAgbG9nb05wbSxcbiAgICAgIHJlbW92ZU91dGxpbmUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvaWNvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFFekM7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osV0FBVyxFQUNYLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixVQUFVLEVBQ1YsYUFBYSxFQUNiLEtBQUssRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixPQUFPLEVBQ1AsVUFBVSxFQUNWLFdBQVcsRUFDWCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGFBQWEsRUFDYixXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDOztBQUt4QixNQUFNLE9BQU8sV0FBVztJQUN0Qjs7T0FFRztJQUNIO1FBQ0UsUUFBUSxDQUFDO1lBQ1AsVUFBVTtZQUNWLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLHNCQUFzQjtZQUN0Qix5QkFBeUI7WUFDekIsb0JBQW9CO1lBQ3BCLFdBQVc7WUFDWCxZQUFZO1lBQ1osa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixLQUFLO1lBQ0wsWUFBWTtZQUNaLFdBQVc7WUFDWCxhQUFhO1lBQ2IsVUFBVTtZQUNWLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLGFBQWE7WUFDYixlQUFlO1lBQ2YsZUFBZTtZQUNmLGVBQWU7WUFDZixXQUFXO1lBQ1gsYUFBYTtZQUNiLFlBQVk7WUFDWixXQUFXO1lBQ1gsVUFBVTtZQUNWLFlBQVk7WUFDWixVQUFVO1lBQ1YsYUFBYTtZQUNiLFlBQVk7WUFDWixXQUFXO1lBQ1gsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsd0JBQXdCO1lBQ3hCLE9BQU87WUFDUCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwRFUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHJlZ2lzdGVyaW5nIGFuZCBtYW5hZ2luZyBjdXN0b20gSW9uaWNvbnMgaWNvbnMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICogQXV0b21hdGljYWxseSByZWdpc3RlcnMgYSBzZXQgb2YgY29tbW9ubHkgdXNlZCBpY29ucyBvbiBpbml0aWFsaXphdGlvbi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7XG4gIGFkZENpcmNsZU91dGxpbmUsXG4gIGFkZE91dGxpbmUsXG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgYWxlcnRPdXRsaW5lLFxuICBhcnJvd0JhY2tPdXRsaW5lLFxuICBhcnJvd0Rvd25PdXRsaW5lLFxuICBhcnJvd0ZvcndhcmRPdXRsaW5lLFxuICBidXNpbmVzc091dGxpbmUsXG4gIGNhbGVuZGFyT3V0bGluZSxcbiAgY2hhdGJ1YmJsZXNPdXRsaW5lLFxuICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICBjaGVja21hcmtPdXRsaW5lLFxuICBjaGV2cm9uRG93bk91dGxpbmUsXG4gIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgY2xpcGJvYXJkT3V0bGluZSxcbiAgY2xvc2VPdXRsaW5lLFxuICBjb3B5T3V0bGluZSxcbiAgY3JlYXRlT3V0bGluZSxcbiAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgZWxsaXBzaXNIb3Jpem9udGFsT3V0bGluZSxcbiAgZXllT2ZmT3V0bGluZSxcbiAgZXllT3V0bGluZSxcbiAgZmlsdGVyT3V0bGluZSxcbiAgaGVhcnQsXG4gIGhlYXJ0T3V0bGluZSxcbiAgaG9tZU91dGxpbmUsXG4gIGluZm9ybWF0aW9uQ2lyY2xlT3V0bGluZSxcbiAgbG9jYXRpb25PdXRsaW5lLFxuICBsb2NrQ2xvc2VkT3V0bGluZSxcbiAgbG9nb0ZhY2Vib29rLFxuICBsb2dvR29vZ2xlLFxuICBsb2dvSW5zdGFncmFtLFxuICBsb2dvTGlua2VkaW4sXG4gIGxvZ29OcG0sXG4gIGxvZ29UaWt0b2ssXG4gIGxvZ29Ud2l0dGVyLFxuICBsb2dvWW91dHViZSxcbiAgbm90aWZpY2F0aW9uc091dGxpbmUsXG4gIG9wZW5PdXRsaW5lLFxuICBwbGF5T3V0bGluZSxcbiAgcmVmcmVzaE91dGxpbmUsXG4gIHJlbW92ZU91dGxpbmUsXG4gIHNjYW5PdXRsaW5lLFxuICBzaGFyZU91dGxpbmUsXG4gIHRyYXNoT3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgSWNvblNlcnZpY2Uge1xuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIElvbmljb25zIGljb25zIGZvciB1c2UgdGhyb3VnaG91dCB0aGUgYXBwLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgYWRkSWNvbnMoe1xuICAgICAgYWRkT3V0bGluZSxcbiAgICAgIGFkZENpcmNsZU91dGxpbmUsXG4gICAgICBhbGVydE91dGxpbmUsXG4gICAgICBhbGVydENpcmNsZU91dGxpbmUsXG4gICAgICBhcnJvd0JhY2tPdXRsaW5lLFxuICAgICAgYXJyb3dGb3J3YXJkT3V0bGluZSxcbiAgICAgIGFycm93RG93bk91dGxpbmUsXG4gICAgICBjaGVja21hcmtDaXJjbGVPdXRsaW5lLFxuICAgICAgZWxsaXBzaXNIb3Jpem9udGFsT3V0bGluZSxcbiAgICAgIG5vdGlmaWNhdGlvbnNPdXRsaW5lLFxuICAgICAgb3Blbk91dGxpbmUsXG4gICAgICBjbG9zZU91dGxpbmUsXG4gICAgICBjaGF0YnViYmxlc091dGxpbmUsXG4gICAgICBzaGFyZU91dGxpbmUsXG4gICAgICBoZWFydCxcbiAgICAgIGhlYXJ0T3V0bGluZSxcbiAgICAgIGhvbWVPdXRsaW5lLFxuICAgICAgZXllT2ZmT3V0bGluZSxcbiAgICAgIGV5ZU91dGxpbmUsXG4gICAgICBzY2FuT3V0bGluZSxcbiAgICAgIGNoZXZyb25Eb3duT3V0bGluZSxcbiAgICAgIGNoZXZyb25Gb3J3YXJkT3V0bGluZSxcbiAgICAgIGNoZWNrbWFya091dGxpbmUsXG4gICAgICBjbGlwYm9hcmRPdXRsaW5lLFxuICAgICAgY29weU91dGxpbmUsXG4gICAgICBmaWx0ZXJPdXRsaW5lLFxuICAgICAgbG9jYXRpb25PdXRsaW5lLFxuICAgICAgY2FsZW5kYXJPdXRsaW5lLFxuICAgICAgYnVzaW5lc3NPdXRsaW5lLFxuICAgICAgbG9nb1R3aXR0ZXIsXG4gICAgICBsb2dvSW5zdGFncmFtLFxuICAgICAgbG9nb0xpbmtlZGluLFxuICAgICAgbG9nb1lvdXR1YmUsXG4gICAgICBsb2dvVGlrdG9rLFxuICAgICAgbG9nb0ZhY2Vib29rLFxuICAgICAgbG9nb0dvb2dsZSxcbiAgICAgIGNyZWF0ZU91dGxpbmUsXG4gICAgICB0cmFzaE91dGxpbmUsXG4gICAgICBwbGF5T3V0bGluZSxcbiAgICAgIHJlZnJlc2hPdXRsaW5lLFxuICAgICAgZG9jdW1lbnRUZXh0T3V0bGluZSxcbiAgICAgIGxvY2tDbG9zZWRPdXRsaW5lLFxuICAgICAgaW5mb3JtYXRpb25DaXJjbGVPdXRsaW5lLFxuICAgICAgbG9nb05wbSxcbiAgICAgIHJlbW92ZU91dGxpbmUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==