@manticore-labs/nest 0.0.59 → 0.0.61

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 (225) hide show
  1. package/.circleci/config.yml +47 -47
  2. package/.idea/codeStyles/Project.xml +37 -37
  3. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  4. package/.idea/encodings.xml +3 -3
  5. package/.idea/inspectionProfiles/Project_Default.xml +5 -5
  6. package/.idea/manticore-labs-nest.iml +11 -11
  7. package/.idea/misc.xml +5 -5
  8. package/.idea/modules.xml +7 -7
  9. package/.idea/vcs.xml +5 -5
  10. package/.idea/workspace.xml +207 -353
  11. package/.npmignore +14 -0
  12. package/LICENSE +8 -8
  13. package/README.1.md +116 -116
  14. package/README.md +1 -1
  15. package/build/main/index.d.ts +39 -39
  16. package/build/main/index.js +22 -22
  17. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  18. package/build/main/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +24 -24
  19. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  20. package/build/main/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +24 -24
  21. package/build/main/lib/auth0/auth0.controller.d.ts +37 -37
  22. package/build/main/lib/auth0/auth0.controller.js +514 -514
  23. package/build/main/lib/auth0/auth0.service.d.ts +42 -42
  24. package/build/main/lib/auth0/auth0.service.js +513 -513
  25. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  26. package/build/main/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +25 -25
  27. package/build/main/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  28. package/build/main/lib/auth0/interfaces/busqueda-nombre.js +2 -2
  29. package/build/main/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  30. package/build/main/lib/auth0/interfaces/funciones-seguridad.js +2 -2
  31. package/build/main/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  32. package/build/main/lib/auth0/interfaces/mensajes-controlador.js +2 -2
  33. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  34. package/build/main/lib/expresiones-regulares/letras-espacios-tildes-enie.js +3 -3
  35. package/build/main/lib/funciones-util/buscar-registro.d.ts +1 -1
  36. package/build/main/lib/funciones-util/buscar-registro.js +147 -147
  37. package/build/main/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  38. package/build/main/lib/funciones-util/buscar-un-registro-por-id.js +25 -25
  39. package/build/main/lib/funciones-util/buscar-where-or.d.ts +1 -1
  40. package/build/main/lib/funciones-util/buscar-where-or.js +33 -33
  41. package/build/main/lib/funciones-util/contar-registros.d.ts +1 -1
  42. package/build/main/lib/funciones-util/contar-registros.js +41 -41
  43. package/build/main/lib/funciones-util/crear-un-registro.d.ts +1 -1
  44. package/build/main/lib/funciones-util/crear-un-registro.js +24 -24
  45. package/build/main/lib/funciones-util/editar-un-registro.d.ts +1 -1
  46. package/build/main/lib/funciones-util/editar-un-registro.js +24 -24
  47. package/build/main/lib/funciones-util/eliminar-uno.d.ts +1 -1
  48. package/build/main/lib/funciones-util/eliminar-uno.js +35 -35
  49. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  50. package/build/main/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +21 -21
  51. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  52. package/build/main/lib/interfaces-util/arreglo-funciones-booleanas.js +2 -2
  53. package/build/main/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  54. package/build/main/lib/interfaces-util/broadcast-join.gateway.js +2 -2
  55. package/build/main/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  56. package/build/main/lib/interfaces-util/campos-a-buscar.js +9 -9
  57. package/build/main/lib/interfaces-util/delete-service.d.ts +12 -12
  58. package/build/main/lib/interfaces-util/delete-service.js +2 -2
  59. package/build/main/lib/interfaces-util/dto.d.ts +4 -4
  60. package/build/main/lib/interfaces-util/dto.js +2 -2
  61. package/build/main/lib/interfaces-util/find-where-relations.d.ts +9 -9
  62. package/build/main/lib/interfaces-util/find-where-relations.js +2 -2
  63. package/build/main/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  64. package/build/main/lib/interfaces-util/funciones-seguridad.js +2 -2
  65. package/build/main/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  66. package/build/main/lib/interfaces-util/funciones.gateway.js +2 -2
  67. package/build/main/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  68. package/build/main/lib/interfaces-util/mensajes-controller.js +2 -2
  69. package/build/main/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  70. package/build/main/lib/interfaces-util/politicas-de-seguridad.js +2 -2
  71. package/build/main/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  72. package/build/main/lib/interfaces-util/respuesta-general.gateway.js +2 -2
  73. package/build/main/lib/menu/entities/menu-entity.d.ts +13 -13
  74. package/build/main/lib/menu/entities/menu-entity.js +93 -93
  75. package/build/main/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  76. package/build/main/lib/one-signal/interfaces/funciones-seguridad.js +2 -2
  77. package/build/main/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  78. package/build/main/lib/one-signal/interfaces/one-signal-device.js +2 -2
  79. package/build/main/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  80. package/build/main/lib/one-signal/interfaces/one-signal-notification.js +2 -2
  81. package/build/main/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  82. package/build/main/lib/one-signal/interfaces/one-signal-notifications.js +2 -2
  83. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  84. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.js +2 -2
  85. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  86. package/build/main/lib/one-signal/interfaces/one-signal-ok-create-notification.js +2 -2
  87. package/build/main/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  88. package/build/main/lib/one-signal/interfaces/one-signal-success.js +2 -2
  89. package/build/main/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  90. package/build/main/lib/one-signal/interfaces/one-signal-tags.js +2 -2
  91. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  92. package/build/main/lib/one-signal/interfaces/one-signal-view-devices.js +2 -2
  93. package/build/main/lib/one-signal/one-signal.controller.d.ts +15 -15
  94. package/build/main/lib/one-signal/one-signal.controller.js +250 -250
  95. package/build/main/lib/one-signal/one-signal.service.d.ts +32 -32
  96. package/build/main/lib/one-signal/one-signal.service.js +84 -84
  97. package/build/main/lib/principal.controller.d.ts +20 -20
  98. package/build/main/lib/principal.controller.js +309 -309
  99. package/build/main/lib/principal.dto.d.ts +5 -5
  100. package/build/main/lib/principal.dto.js +21 -21
  101. package/build/main/lib/principal.entity.d.ts +7 -7
  102. package/build/main/lib/principal.entity.js +42 -42
  103. package/build/main/lib/principal.find-many-options.d.ts +14 -14
  104. package/build/main/lib/principal.find-many-options.js +48 -48
  105. package/build/main/lib/principal.find-many-where-or.d.ts +10 -10
  106. package/build/main/lib/principal.find-many-where-or.js +28 -28
  107. package/build/main/lib/principal.gateway.d.ts +35 -35
  108. package/build/main/lib/principal.gateway.js +399 -399
  109. package/build/main/lib/principal.id.d.ts +3 -3
  110. package/build/main/lib/principal.id.js +16 -16
  111. package/build/main/lib/principal.resolver.d.ts +21 -21
  112. package/build/main/lib/principal.resolver.js +343 -343
  113. package/build/main/lib/principal.service.d.ts +38 -38
  114. package/build/main/lib/principal.service.js +255 -255
  115. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  116. package/build/main/lib/seguridad/aplicar-politicas-de-seguridad.js +16 -16
  117. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  118. package/build/main/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +26 -26
  119. package/build/main/lib/seguridad/funciones/index.d.ts +6 -6
  120. package/build/main/lib/seguridad/funciones/index.js +12 -12
  121. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  122. package/build/main/lib/seguridad/funciones/obtener-reflector-seguridad.js +6 -6
  123. package/build/main/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  124. package/build/main/lib/seguridad/funciones/obtener-request.js +6 -6
  125. package/build/main/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  126. package/build/main/lib/seguridad/funciones/obtener-response.js +6 -6
  127. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  128. package/build/main/lib/seguridad/funciones/tiene-acceso-permitido.js +13 -13
  129. package/build/main/lib/seguridad/seguridad.decorator.d.ts +1 -1
  130. package/build/main/lib/seguridad/seguridad.decorator.js +4 -4
  131. package/build/module/index.d.ts +39 -39
  132. package/build/module/index.js +17 -17
  133. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.d.ts +5 -5
  134. package/build/module/lib/auth0/actualizar-usuario-cuenta-dto/actualizar-usuario-cuenta-dto.js +21 -21
  135. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.d.ts +5 -5
  136. package/build/module/lib/auth0/actualizar-usuario-dto/actualizar-usuario-dto.js +21 -21
  137. package/build/module/lib/auth0/auth0.controller.d.ts +37 -37
  138. package/build/module/lib/auth0/auth0.controller.js +512 -512
  139. package/build/module/lib/auth0/auth0.service.d.ts +42 -42
  140. package/build/module/lib/auth0/auth0.service.js +511 -511
  141. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.d.ts +5 -5
  142. package/build/module/lib/auth0/crear-usuario-dto/crear-usuario-dto.js +22 -22
  143. package/build/module/lib/auth0/interfaces/busqueda-nombre.d.ts +3 -3
  144. package/build/module/lib/auth0/interfaces/funciones-seguridad.d.ts +10 -10
  145. package/build/module/lib/auth0/interfaces/mensajes-controlador.d.ts +5 -5
  146. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.d.ts +1 -1
  147. package/build/module/lib/expresiones-regulares/letras-espacios-tildes-enie.js +1 -1
  148. package/build/module/lib/funciones-util/buscar-registro.d.ts +1 -1
  149. package/build/module/lib/funciones-util/buscar-registro.js +144 -144
  150. package/build/module/lib/funciones-util/buscar-un-registro-por-id.d.ts +1 -1
  151. package/build/module/lib/funciones-util/buscar-un-registro-por-id.js +22 -22
  152. package/build/module/lib/funciones-util/buscar-where-or.d.ts +1 -1
  153. package/build/module/lib/funciones-util/buscar-where-or.js +30 -30
  154. package/build/module/lib/funciones-util/contar-registros.d.ts +1 -1
  155. package/build/module/lib/funciones-util/contar-registros.js +38 -38
  156. package/build/module/lib/funciones-util/crear-un-registro.d.ts +1 -1
  157. package/build/module/lib/funciones-util/crear-un-registro.js +21 -21
  158. package/build/module/lib/funciones-util/editar-un-registro.d.ts +1 -1
  159. package/build/module/lib/funciones-util/editar-un-registro.js +21 -21
  160. package/build/module/lib/funciones-util/eliminar-uno.d.ts +1 -1
  161. package/build/module/lib/funciones-util/eliminar-uno.js +32 -32
  162. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.d.ts +2 -2
  163. package/build/module/lib/funciones-util/typeorm/valor-esta-dentro-del-arreglo.js +18 -18
  164. package/build/module/lib/interfaces-util/arreglo-funciones-booleanas.d.ts +4 -4
  165. package/build/module/lib/interfaces-util/broadcast-join.gateway.d.ts +14 -14
  166. package/build/module/lib/interfaces-util/campos-a-buscar.d.ts +9 -9
  167. package/build/module/lib/interfaces-util/campos-a-buscar.js +6 -6
  168. package/build/module/lib/interfaces-util/delete-service.d.ts +12 -12
  169. package/build/module/lib/interfaces-util/dto.d.ts +4 -4
  170. package/build/module/lib/interfaces-util/find-where-relations.d.ts +9 -9
  171. package/build/module/lib/interfaces-util/funciones-seguridad.d.ts +13 -13
  172. package/build/module/lib/interfaces-util/funciones.gateway.d.ts +5 -5
  173. package/build/module/lib/interfaces-util/mensajes-controller.d.ts +6 -6
  174. package/build/module/lib/interfaces-util/politicas-de-seguridad.d.ts +17 -17
  175. package/build/module/lib/interfaces-util/respuesta-general.gateway.d.ts +5 -5
  176. package/build/module/lib/menu/entities/menu-entity.d.ts +13 -13
  177. package/build/module/lib/menu/entities/menu-entity.js +90 -90
  178. package/build/module/lib/one-signal/interfaces/funciones-seguridad.d.ts +9 -9
  179. package/build/module/lib/one-signal/interfaces/one-signal-device.d.ts +19 -19
  180. package/build/module/lib/one-signal/interfaces/one-signal-notification.d.ts +15 -15
  181. package/build/module/lib/one-signal/interfaces/one-signal-notifications.d.ts +7 -7
  182. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification-no-players.d.ts +5 -5
  183. package/build/module/lib/one-signal/interfaces/one-signal-ok-create-notification.d.ts +4 -4
  184. package/build/module/lib/one-signal/interfaces/one-signal-success.d.ts +3 -3
  185. package/build/module/lib/one-signal/interfaces/one-signal-tags.d.ts +3 -3
  186. package/build/module/lib/one-signal/interfaces/one-signal-view-devices.d.ts +7 -7
  187. package/build/module/lib/one-signal/one-signal.controller.d.ts +15 -15
  188. package/build/module/lib/one-signal/one-signal.controller.js +248 -248
  189. package/build/module/lib/one-signal/one-signal.service.d.ts +32 -32
  190. package/build/module/lib/one-signal/one-signal.service.js +82 -82
  191. package/build/module/lib/principal.controller.d.ts +20 -20
  192. package/build/module/lib/principal.controller.js +306 -306
  193. package/build/module/lib/principal.dto.d.ts +5 -5
  194. package/build/module/lib/principal.dto.js +18 -18
  195. package/build/module/lib/principal.entity.d.ts +7 -7
  196. package/build/module/lib/principal.entity.js +39 -39
  197. package/build/module/lib/principal.find-many-options.d.ts +14 -14
  198. package/build/module/lib/principal.find-many-options.js +45 -45
  199. package/build/module/lib/principal.find-many-where-or.d.ts +10 -10
  200. package/build/module/lib/principal.find-many-where-or.js +25 -25
  201. package/build/module/lib/principal.gateway.d.ts +35 -35
  202. package/build/module/lib/principal.gateway.js +396 -396
  203. package/build/module/lib/principal.id.d.ts +3 -3
  204. package/build/module/lib/principal.id.js +13 -13
  205. package/build/module/lib/principal.resolver.d.ts +21 -21
  206. package/build/module/lib/principal.resolver.js +340 -340
  207. package/build/module/lib/principal.service.d.ts +38 -38
  208. package/build/module/lib/principal.service.js +252 -252
  209. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.d.ts +4 -4
  210. package/build/module/lib/seguridad/aplicar-politicas-de-seguridad.js +13 -13
  211. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.d.ts +3 -3
  212. package/build/module/lib/seguridad/funciones/convertir-arreglo-en-arreglo-de-observables.js +23 -23
  213. package/build/module/lib/seguridad/funciones/index.d.ts +6 -6
  214. package/build/module/lib/seguridad/funciones/index.js +6 -6
  215. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.d.ts +1 -1
  216. package/build/module/lib/seguridad/funciones/obtener-reflector-seguridad.js +3 -3
  217. package/build/module/lib/seguridad/funciones/obtener-request.d.ts +1 -1
  218. package/build/module/lib/seguridad/funciones/obtener-request.js +3 -3
  219. package/build/module/lib/seguridad/funciones/obtener-response.d.ts +1 -1
  220. package/build/module/lib/seguridad/funciones/obtener-response.js +3 -3
  221. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.d.ts +2 -2
  222. package/build/module/lib/seguridad/funciones/tiene-acceso-permitido.js +10 -10
  223. package/build/module/lib/seguridad/seguridad.decorator.d.ts +1 -1
  224. package/build/module/lib/seguridad/seguridad.decorator.js +2 -2
  225. package/package.json +1 -1
@@ -1,514 +1,514 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const common_1 = require("@nestjs/common");
10
- const auth0_1 = require("auth0");
11
- const buscar_registro_1 = require("../funciones-util/buscar-registro");
12
- const principal_find_many_options_1 = require("../principal.find-many-options");
13
- const ManagementClient = require('auth0').ManagementClient;
14
- let PrincipalAuth0Service = class PrincipalAuth0Service {
15
- constructor(AUTH0_CONFIG, _datosUsuarioService, datosUsuarioDto, search_engine = 'v3', sort = 'created_at:-1', debug = true) {
16
- this.AUTH0_CONFIG = AUTH0_CONFIG;
17
- this._datosUsuarioService = _datosUsuarioService;
18
- this.datosUsuarioDto = datosUsuarioDto;
19
- this.search_engine = search_engine;
20
- this.sort = sort;
21
- this.debug = debug;
22
- this.managementClient = new ManagementClient({
23
- domain: `${this.AUTH0_CONFIG.CUENTA}.auth0.com`,
24
- clientId: `${this.AUTH0_CONFIG.CLIENT_ID}`,
25
- clientSecret: `${this.AUTH0_CONFIG.SECRET}`,
26
- scope: 'read:users update:users create:users read:user_idp_tokens'
27
- });
28
- this.authenticationClient = new auth0_1.AuthenticationClient({
29
- domain: `${AUTH0_CONFIG.CUENTA}.auth0.com`,
30
- clientId: `${AUTH0_CONFIG.CLIENT_ID}`
31
- });
32
- }
33
- async findOne(id) {
34
- if (id) {
35
- return await new Promise((resolve) => {
36
- const idUsuario = { id };
37
- this.managementClient
38
- .users
39
- .get(idUsuario, (err, usuarioEncontrado) => {
40
- if (err) {
41
- if (this.debug) {
42
- console.error('Error: ', err);
43
- }
44
- let error = 500;
45
- let mensaje = 'Error buscando usuario';
46
- if (err.statusCode === 404) {
47
- error = err.statusCode;
48
- mensaje = 'No existe usuario';
49
- }
50
- resolve({ error, mensaje });
51
- }
52
- else {
53
- resolve(usuarioEncontrado);
54
- }
55
- });
56
- });
57
- }
58
- else {
59
- return await new Promise((res) => res({ mensaje: 'No envia id', error: 400 }));
60
- }
61
- }
62
- async create(registro) {
63
- return await new Promise((resolve) => {
64
- this.managementClient
65
- .users
66
- .create(registro, (err, nuevoRegistro) => {
67
- if (err) {
68
- if (this.debug) {
69
- console.error('Error: ', err);
70
- }
71
- let error = 500;
72
- let mensaje = 'Error creando usuario';
73
- if (err.statusCode === 409) {
74
- error = err.statusCode;
75
- mensaje = 'Ya existe ese usuario';
76
- }
77
- if (err.statusCode === 400) {
78
- error = err.statusCode;
79
- mensaje = 'Usuario inválido';
80
- }
81
- resolve({ error, mensaje });
82
- }
83
- else {
84
- resolve(nuevoRegistro);
85
- }
86
- });
87
- });
88
- }
89
- async find(criterioBusqueda) {
90
- return await new Promise((resolve) => {
91
- let params;
92
- if (criterioBusqueda) {
93
- if (this.debug) {
94
- console.log('Hay criterio', criterioBusqueda);
95
- }
96
- const sort = obtenerPrimerOrder(criterioBusqueda.order);
97
- params = {
98
- per_page: criterioBusqueda.take ? criterioBusqueda.take : 30,
99
- page: criterioBusqueda.skip ? criterioBusqueda.skip : 0,
100
- search_engine: this.search_engine,
101
- include_totals: true,
102
- sort
103
- };
104
- if (criterioBusqueda.where) {
105
- params.q = criterioBusqueda.where;
106
- }
107
- if (criterioBusqueda.select) {
108
- params.fields = obtenerCamposSeparadosPorComa(criterioBusqueda.select);
109
- }
110
- }
111
- else {
112
- params = {
113
- per_page: 30,
114
- page: 0,
115
- search_engine: this.search_engine,
116
- include_totals: true,
117
- sort: this.sort
118
- };
119
- }
120
- if (this.debug) {
121
- console.log('Parametros: ', params);
122
- }
123
- this.managementClient
124
- .users
125
- .get(params, (err, usuarioEncontrado) => {
126
- if (err) {
127
- if (this.debug) {
128
- console.error('Error: ', err);
129
- }
130
- let error = 500;
131
- let mensaje = 'Error buscando usuarios';
132
- if (err.statusCode === 404) {
133
- error = err.statusCode;
134
- mensaje = 'No existen usuarios';
135
- }
136
- resolve({ error, mensaje });
137
- }
138
- else {
139
- resolve(usuarioEncontrado.users);
140
- }
141
- });
142
- });
143
- // }
144
- }
145
- async findBy(arregloCamposABuscar, busqueda) {
146
- return new Promise((resolve) => {
147
- let params = {
148
- q: ''
149
- };
150
- let query = '';
151
- arregloCamposABuscar
152
- .forEach((campo) => {
153
- if (query === '') {
154
- query = `${campo}="${busqueda}"`;
155
- }
156
- else {
157
- query = query + ` OR ${campo}="${busqueda}"`;
158
- }
159
- });
160
- params.q = query;
161
- if (this.debug) {
162
- console.log('Parametros: ', params);
163
- }
164
- this.managementClient
165
- .users
166
- .get(params, (err, usuariosEncontrados) => {
167
- if (err) {
168
- if (this.debug) {
169
- console.error('Error: ', err);
170
- }
171
- let error = 500;
172
- let mensaje = 'Error buscando usuarios';
173
- if (err.statusCode === 404) {
174
- error = err.statusCode;
175
- mensaje = 'No existen usuarios';
176
- }
177
- resolve({ error, mensaje });
178
- }
179
- else {
180
- resolve(usuariosEncontrados);
181
- }
182
- });
183
- });
184
- }
185
- async findOneByIdAndUpdate(id, datosAActualizar) {
186
- const usuario = await this.findOne(id);
187
- if (this.debug) {
188
- console.log('Usuario encontrado: ', usuario);
189
- }
190
- return await new Promise((resolve) => {
191
- if (usuario.error) {
192
- if (this.debug) {
193
- console.log('Error encontrando usuario: ', usuario);
194
- }
195
- resolve(usuario);
196
- }
197
- if (datosAActualizar.user_metadata) {
198
- datosAActualizar.user_metadata = elaborarUserMetadataAActualizar(usuario.user_metadata, datosAActualizar.user_metadata);
199
- }
200
- this.managementClient
201
- .users
202
- .update({ id }, datosAActualizar, (err, registroActualizado) => {
203
- if (err) {
204
- if (this.debug) {
205
- console.error('Error: ', err);
206
- }
207
- let error = 500;
208
- let mensaje = 'Error actualizando usuario';
209
- if (err.statusCode === 400) {
210
- error = err.statusCode;
211
- mensaje = 'Usuario inválido';
212
- }
213
- if (err.statusCode === 404) {
214
- error = err.statusCode;
215
- mensaje = 'Usuario no encontrado';
216
- }
217
- resolve({ error, mensaje });
218
- }
219
- else {
220
- resolve(registroActualizado);
221
- }
222
- });
223
- });
224
- }
225
- sendEmailVerification(id) {
226
- return new Promise((resolve) => {
227
- this.managementClient
228
- .sendEmailVerification({
229
- user_id: id
230
- })
231
- .then((r) => {
232
- if (this.debug) {
233
- console.error('Peticion: ', r);
234
- }
235
- resolve({ mensaje: 'Peticion enviada' });
236
- })
237
- .catch((err) => {
238
- if (this.debug) {
239
- console.error('Error: ', err);
240
- }
241
- resolve({ error: 500, mensaje: 'Error enviando peticion' });
242
- });
243
- });
244
- }
245
- changePassword(email, connection = 'Username-Password-Authentication') {
246
- return new Promise((resolve) => {
247
- this.authenticationClient
248
- .requestChangePasswordEmail({
249
- email,
250
- connection
251
- })
252
- .then((r) => {
253
- if (this.debug) {
254
- console.error('Peticion: ', r);
255
- }
256
- resolve({ mensaje: 'Cambio de password realizado' });
257
- })
258
- .catch((err) => {
259
- if (this.debug) {
260
- console.error('Error: ', err);
261
- }
262
- resolve({ error: 500, mensaje: 'Error enviando peticion' });
263
- });
264
- });
265
- }
266
- delete(id) {
267
- return new Promise((resolve) => {
268
- this.managementClient
269
- .users
270
- .delete({ id: id }, (err) => {
271
- if (err) {
272
- if (this.debug) {
273
- console.error('Error: ', err);
274
- }
275
- let error = 500;
276
- let mensaje = 'Error borrando usuario';
277
- if (err.statusCode === 400) {
278
- error = err.statusCode;
279
- mensaje = 'Usuario inválido';
280
- }
281
- if (err.statusCode === 404) {
282
- error = err.statusCode;
283
- mensaje = 'Usuario no encontrado';
284
- }
285
- resolve({ error, mensaje });
286
- }
287
- else {
288
- resolve({ mensaje: `Registro con id: ${id} eliminado` });
289
- }
290
- });
291
- });
292
- }
293
- async createMany(nuevosRegistros) {
294
- return new Promise((resolve) => {
295
- let terminado = 0;
296
- let numeroDeRegistros = 0;
297
- const registrosCreados = [];
298
- while (terminado < nuevosRegistros.length) {
299
- const contadorAuxiliar = terminado;
300
- const tiempoEnCrearse = 10000 * (terminado + 1);
301
- setTimeout(() => {
302
- this.create(nuevosRegistros[contadorAuxiliar])
303
- .then((registroCreado) => {
304
- if (this.debug) {
305
- console.log('Registro creado', registroCreado);
306
- console.log('nuevosRegistros.length', nuevosRegistros.length);
307
- console.log('numeroDeRegistros', numeroDeRegistros);
308
- }
309
- if (registroCreado.error === 409 || registroCreado.error === 400) {
310
- if (this.debug) {
311
- console.log('Usuario ya existe o bad request', nuevosRegistros[contadorAuxiliar]);
312
- }
313
- this.find({ where: `username:${nuevosRegistros[contadorAuxiliar].username}` })
314
- .then((usuario) => {
315
- numeroDeRegistros++;
316
- registrosCreados.push(usuario[0]);
317
- if (numeroDeRegistros === nuevosRegistros.length) {
318
- resolve(registrosCreados);
319
- }
320
- })
321
- .catch((e) => {
322
- numeroDeRegistros++;
323
- registrosCreados.push(e);
324
- if (numeroDeRegistros === nuevosRegistros.length) {
325
- resolve(registrosCreados);
326
- }
327
- });
328
- }
329
- else {
330
- numeroDeRegistros++;
331
- registrosCreados.push(registroCreado);
332
- if (numeroDeRegistros === nuevosRegistros.length) {
333
- resolve(registrosCreados);
334
- }
335
- }
336
- })
337
- .catch((err) => {
338
- if (this.debug) {
339
- console.error('Error creando: ', err);
340
- }
341
- numeroDeRegistros++;
342
- registrosCreados.push(err);
343
- if (numeroDeRegistros === nuevosRegistros.length - 1) {
344
- resolve(registrosCreados);
345
- }
346
- });
347
- }, tiempoEnCrearse);
348
- terminado++;
349
- }
350
- });
351
- }
352
- async findWhereOr(camposABuscar, skip = 0, take = 10) {
353
- if (this._datosUsuarioService) {
354
- if (this.debug) {
355
- console.info('Consulta: ', camposABuscar);
356
- }
357
- const usuariosEncontrados = await this._datosUsuarioService
358
- .findWhereOr(camposABuscar, skip, take);
359
- if (this.debug) {
360
- console.info('UsuariosEncontrados: ', usuariosEncontrados);
361
- }
362
- let consulta = '';
363
- const hayUsuarios = usuariosEncontrados[0].length > 0;
364
- if (hayUsuarios) {
365
- usuariosEncontrados[0]
366
- .forEach((datosUsuario) => {
367
- if (consulta === '') {
368
- consulta = consulta + datosUsuario.user_id;
369
- }
370
- else {
371
- consulta = consulta + ' OR ' + datosUsuario.user_id;
372
- }
373
- });
374
- if (this.debug) {
375
- console.info('Consulta de usuarios: ', consulta);
376
- }
377
- const respuesta = await this.find({
378
- where: consulta
379
- });
380
- if (respuesta.error) {
381
- const error = respuesta;
382
- return { error: error.error, mensaje: error.mensaje };
383
- }
384
- else {
385
- let usuariosAuth0 = respuesta;
386
- usuariosAuth0 = usuariosAuth0
387
- .map((usuarioAuth0) => {
388
- usuarioAuth0.usuario = usuariosEncontrados[0]
389
- .find((usuario) => {
390
- return usuario.user_id === usuarioAuth0.user_id;
391
- });
392
- return usuarioAuth0;
393
- });
394
- return [usuariosAuth0, usuariosAuth0.length];
395
- }
396
- }
397
- else {
398
- if (this.debug) {
399
- console.info('No se encontraron usuarios');
400
- }
401
- return { error: 404, mensaje: 'No se encontro ningun usuario' };
402
- }
403
- }
404
- else {
405
- if (this.debug) {
406
- console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
407
- }
408
- return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
409
- }
410
- }
411
- async findAll(criterioBusqueda, skip, take) {
412
- if (this._datosUsuarioService) {
413
- if (this.debug) {
414
- console.info('Consulta: ', criterioBusqueda);
415
- }
416
- const usuariosEncontrados = await buscar_registro_1.buscarVariosRegistros(criterioBusqueda, principal_find_many_options_1.PrincipalFindManyOptions, skip, take, this._datosUsuarioService);
417
- if (this.debug) {
418
- console.info('UsuariosEncontrados: ', usuariosEncontrados);
419
- }
420
- let consulta = '';
421
- const hayUsuarios = usuariosEncontrados[0].length > 0;
422
- if (hayUsuarios) {
423
- usuariosEncontrados[0]
424
- .forEach((datosUsuario) => {
425
- if (consulta === '') {
426
- consulta = consulta + datosUsuario.user_id;
427
- }
428
- else {
429
- consulta = consulta + ' OR ' + datosUsuario.user_id;
430
- }
431
- });
432
- if (this.debug) {
433
- console.info('Consulta de usuarios: ', consulta);
434
- }
435
- const respuesta = await this.find({
436
- where: consulta
437
- });
438
- if (respuesta.error) {
439
- const error = respuesta;
440
- return { error: error.error, mensaje: error.mensaje };
441
- }
442
- else {
443
- let usuariosAuth0 = respuesta;
444
- usuariosAuth0 = usuariosAuth0
445
- .map((usuarioAuth0) => {
446
- usuarioAuth0.usuario = usuariosEncontrados[0]
447
- .find((usuario) => {
448
- return usuario.user_id === usuarioAuth0.user_id;
449
- });
450
- return usuarioAuth0;
451
- });
452
- return [usuariosAuth0, usuariosAuth0.length];
453
- }
454
- }
455
- else {
456
- if (this.debug) {
457
- console.info('No se encontraron usuarios');
458
- }
459
- return { error: 404, mensaje: 'No se encontro ningun usuario' };
460
- }
461
- }
462
- else {
463
- if (this.debug) {
464
- console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
465
- }
466
- return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
467
- }
468
- }
469
- };
470
- PrincipalAuth0Service = __decorate([
471
- common_1.Injectable()
472
- ], PrincipalAuth0Service);
473
- exports.PrincipalAuth0Service = PrincipalAuth0Service;
474
- function obtenerPrimerOrder(order) {
475
- if (order) {
476
- const nombreCampo = Object.keys(order)[0];
477
- return `${nombreCampo}:${order[nombreCampo] === 'ASC' ? 1 : -1}`;
478
- }
479
- else {
480
- return undefined;
481
- }
482
- }
483
- function obtenerCamposSeparadosPorComa(select) {
484
- if (select) {
485
- let campos = '';
486
- select.forEach((nombreCampo) => {
487
- if (campos === '') {
488
- campos = nombreCampo;
489
- }
490
- else {
491
- campos = `${campos},${nombreCampo}`;
492
- }
493
- });
494
- return campos;
495
- }
496
- else {
497
- return undefined;
498
- }
499
- }
500
- function elaborarUserMetadataAActualizar(user_metadata, user_metadataAActualizar) {
501
- let user_metadataClonado = {};
502
- try {
503
- user_metadataClonado = JSON.parse(JSON.stringify(user_metadata));
504
- }
505
- catch (e) {
506
- }
507
- Object
508
- .keys(user_metadataAActualizar)
509
- .forEach((nombrePropiedad) => {
510
- user_metadataClonado[nombrePropiedad] = user_metadataAActualizar[nombrePropiedad];
511
- });
512
- return user_metadataClonado;
513
- }
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const common_1 = require("@nestjs/common");
10
+ const auth0_1 = require("auth0");
11
+ const buscar_registro_1 = require("../funciones-util/buscar-registro");
12
+ const principal_find_many_options_1 = require("../principal.find-many-options");
13
+ const ManagementClient = require('auth0').ManagementClient;
14
+ let PrincipalAuth0Service = class PrincipalAuth0Service {
15
+ constructor(AUTH0_CONFIG, _datosUsuarioService, datosUsuarioDto, search_engine = 'v3', sort = 'created_at:-1', debug = true) {
16
+ this.AUTH0_CONFIG = AUTH0_CONFIG;
17
+ this._datosUsuarioService = _datosUsuarioService;
18
+ this.datosUsuarioDto = datosUsuarioDto;
19
+ this.search_engine = search_engine;
20
+ this.sort = sort;
21
+ this.debug = debug;
22
+ this.managementClient = new ManagementClient({
23
+ domain: `${this.AUTH0_CONFIG.CUENTA}.auth0.com`,
24
+ clientId: `${this.AUTH0_CONFIG.CLIENT_ID}`,
25
+ clientSecret: `${this.AUTH0_CONFIG.SECRET}`,
26
+ scope: 'read:users update:users create:users read:user_idp_tokens'
27
+ });
28
+ this.authenticationClient = new auth0_1.AuthenticationClient({
29
+ domain: `${AUTH0_CONFIG.CUENTA}.auth0.com`,
30
+ clientId: `${AUTH0_CONFIG.CLIENT_ID}`
31
+ });
32
+ }
33
+ async findOne(id) {
34
+ if (id) {
35
+ return await new Promise((resolve) => {
36
+ const idUsuario = { id };
37
+ this.managementClient
38
+ .users
39
+ .get(idUsuario, (err, usuarioEncontrado) => {
40
+ if (err) {
41
+ if (this.debug) {
42
+ console.error('Error: ', err);
43
+ }
44
+ let error = 500;
45
+ let mensaje = 'Error buscando usuario';
46
+ if (err.statusCode === 404) {
47
+ error = err.statusCode;
48
+ mensaje = 'No existe usuario';
49
+ }
50
+ resolve({ error, mensaje });
51
+ }
52
+ else {
53
+ resolve(usuarioEncontrado);
54
+ }
55
+ });
56
+ });
57
+ }
58
+ else {
59
+ return await new Promise((res) => res({ mensaje: 'No envia id', error: 400 }));
60
+ }
61
+ }
62
+ async create(registro) {
63
+ return await new Promise((resolve) => {
64
+ this.managementClient
65
+ .users
66
+ .create(registro, (err, nuevoRegistro) => {
67
+ if (err) {
68
+ if (this.debug) {
69
+ console.error('Error: ', err);
70
+ }
71
+ let error = 500;
72
+ let mensaje = 'Error creando usuario';
73
+ if (err.statusCode === 409) {
74
+ error = err.statusCode;
75
+ mensaje = 'Ya existe ese usuario';
76
+ }
77
+ if (err.statusCode === 400) {
78
+ error = err.statusCode;
79
+ mensaje = 'Usuario inválido';
80
+ }
81
+ resolve({ error, mensaje });
82
+ }
83
+ else {
84
+ resolve(nuevoRegistro);
85
+ }
86
+ });
87
+ });
88
+ }
89
+ async find(criterioBusqueda) {
90
+ return await new Promise((resolve) => {
91
+ let params;
92
+ if (criterioBusqueda) {
93
+ if (this.debug) {
94
+ console.log('Hay criterio', criterioBusqueda);
95
+ }
96
+ const sort = obtenerPrimerOrder(criterioBusqueda.order);
97
+ params = {
98
+ per_page: criterioBusqueda.take ? criterioBusqueda.take : 30,
99
+ page: criterioBusqueda.skip ? criterioBusqueda.skip : 0,
100
+ search_engine: this.search_engine,
101
+ include_totals: true,
102
+ sort
103
+ };
104
+ if (criterioBusqueda.where) {
105
+ params.q = criterioBusqueda.where;
106
+ }
107
+ if (criterioBusqueda.select) {
108
+ params.fields = obtenerCamposSeparadosPorComa(criterioBusqueda.select);
109
+ }
110
+ }
111
+ else {
112
+ params = {
113
+ per_page: 30,
114
+ page: 0,
115
+ search_engine: this.search_engine,
116
+ include_totals: true,
117
+ sort: this.sort
118
+ };
119
+ }
120
+ if (this.debug) {
121
+ console.log('Parametros: ', params);
122
+ }
123
+ this.managementClient
124
+ .users
125
+ .get(params, (err, usuarioEncontrado) => {
126
+ if (err) {
127
+ if (this.debug) {
128
+ console.error('Error: ', err);
129
+ }
130
+ let error = 500;
131
+ let mensaje = 'Error buscando usuarios';
132
+ if (err.statusCode === 404) {
133
+ error = err.statusCode;
134
+ mensaje = 'No existen usuarios';
135
+ }
136
+ resolve({ error, mensaje });
137
+ }
138
+ else {
139
+ resolve(usuarioEncontrado.users);
140
+ }
141
+ });
142
+ });
143
+ // }
144
+ }
145
+ async findBy(arregloCamposABuscar, busqueda) {
146
+ return new Promise((resolve) => {
147
+ let params = {
148
+ q: ''
149
+ };
150
+ let query = '';
151
+ arregloCamposABuscar
152
+ .forEach((campo) => {
153
+ if (query === '') {
154
+ query = `${campo}="${busqueda}"`;
155
+ }
156
+ else {
157
+ query = query + ` OR ${campo}="${busqueda}"`;
158
+ }
159
+ });
160
+ params.q = query;
161
+ if (this.debug) {
162
+ console.log('Parametros: ', params);
163
+ }
164
+ this.managementClient
165
+ .users
166
+ .get(params, (err, usuariosEncontrados) => {
167
+ if (err) {
168
+ if (this.debug) {
169
+ console.error('Error: ', err);
170
+ }
171
+ let error = 500;
172
+ let mensaje = 'Error buscando usuarios';
173
+ if (err.statusCode === 404) {
174
+ error = err.statusCode;
175
+ mensaje = 'No existen usuarios';
176
+ }
177
+ resolve({ error, mensaje });
178
+ }
179
+ else {
180
+ resolve(usuariosEncontrados);
181
+ }
182
+ });
183
+ });
184
+ }
185
+ async findOneByIdAndUpdate(id, datosAActualizar) {
186
+ const usuario = await this.findOne(id);
187
+ if (this.debug) {
188
+ console.log('Usuario encontrado: ', usuario);
189
+ }
190
+ return await new Promise((resolve) => {
191
+ if (usuario.error) {
192
+ if (this.debug) {
193
+ console.log('Error encontrando usuario: ', usuario);
194
+ }
195
+ resolve(usuario);
196
+ }
197
+ if (datosAActualizar.user_metadata) {
198
+ datosAActualizar.user_metadata = elaborarUserMetadataAActualizar(usuario.user_metadata, datosAActualizar.user_metadata);
199
+ }
200
+ this.managementClient
201
+ .users
202
+ .update({ id }, datosAActualizar, (err, registroActualizado) => {
203
+ if (err) {
204
+ if (this.debug) {
205
+ console.error('Error: ', err);
206
+ }
207
+ let error = 500;
208
+ let mensaje = 'Error actualizando usuario';
209
+ if (err.statusCode === 400) {
210
+ error = err.statusCode;
211
+ mensaje = 'Usuario inválido';
212
+ }
213
+ if (err.statusCode === 404) {
214
+ error = err.statusCode;
215
+ mensaje = 'Usuario no encontrado';
216
+ }
217
+ resolve({ error, mensaje });
218
+ }
219
+ else {
220
+ resolve(registroActualizado);
221
+ }
222
+ });
223
+ });
224
+ }
225
+ sendEmailVerification(id) {
226
+ return new Promise((resolve) => {
227
+ this.managementClient
228
+ .sendEmailVerification({
229
+ user_id: id
230
+ })
231
+ .then((r) => {
232
+ if (this.debug) {
233
+ console.error('Peticion: ', r);
234
+ }
235
+ resolve({ mensaje: 'Peticion enviada' });
236
+ })
237
+ .catch((err) => {
238
+ if (this.debug) {
239
+ console.error('Error: ', err);
240
+ }
241
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
242
+ });
243
+ });
244
+ }
245
+ changePassword(email, connection = 'Username-Password-Authentication') {
246
+ return new Promise((resolve) => {
247
+ this.authenticationClient
248
+ .requestChangePasswordEmail({
249
+ email,
250
+ connection
251
+ })
252
+ .then((r) => {
253
+ if (this.debug) {
254
+ console.error('Peticion: ', r);
255
+ }
256
+ resolve({ mensaje: 'Cambio de password realizado' });
257
+ })
258
+ .catch((err) => {
259
+ if (this.debug) {
260
+ console.error('Error: ', err);
261
+ }
262
+ resolve({ error: 500, mensaje: 'Error enviando peticion' });
263
+ });
264
+ });
265
+ }
266
+ delete(id) {
267
+ return new Promise((resolve) => {
268
+ this.managementClient
269
+ .users
270
+ .delete({ id: id }, (err) => {
271
+ if (err) {
272
+ if (this.debug) {
273
+ console.error('Error: ', err);
274
+ }
275
+ let error = 500;
276
+ let mensaje = 'Error borrando usuario';
277
+ if (err.statusCode === 400) {
278
+ error = err.statusCode;
279
+ mensaje = 'Usuario inválido';
280
+ }
281
+ if (err.statusCode === 404) {
282
+ error = err.statusCode;
283
+ mensaje = 'Usuario no encontrado';
284
+ }
285
+ resolve({ error, mensaje });
286
+ }
287
+ else {
288
+ resolve({ mensaje: `Registro con id: ${id} eliminado` });
289
+ }
290
+ });
291
+ });
292
+ }
293
+ async createMany(nuevosRegistros) {
294
+ return new Promise((resolve) => {
295
+ let terminado = 0;
296
+ let numeroDeRegistros = 0;
297
+ const registrosCreados = [];
298
+ while (terminado < nuevosRegistros.length) {
299
+ const contadorAuxiliar = terminado;
300
+ const tiempoEnCrearse = 10000 * (terminado + 1);
301
+ setTimeout(() => {
302
+ this.create(nuevosRegistros[contadorAuxiliar])
303
+ .then((registroCreado) => {
304
+ if (this.debug) {
305
+ console.log('Registro creado', registroCreado);
306
+ console.log('nuevosRegistros.length', nuevosRegistros.length);
307
+ console.log('numeroDeRegistros', numeroDeRegistros);
308
+ }
309
+ if (registroCreado.error === 409 || registroCreado.error === 400) {
310
+ if (this.debug) {
311
+ console.log('Usuario ya existe o bad request', nuevosRegistros[contadorAuxiliar]);
312
+ }
313
+ this.find({ where: `username:${nuevosRegistros[contadorAuxiliar].username}` })
314
+ .then((usuario) => {
315
+ numeroDeRegistros++;
316
+ registrosCreados.push(usuario[0]);
317
+ if (numeroDeRegistros === nuevosRegistros.length) {
318
+ resolve(registrosCreados);
319
+ }
320
+ })
321
+ .catch((e) => {
322
+ numeroDeRegistros++;
323
+ registrosCreados.push(e);
324
+ if (numeroDeRegistros === nuevosRegistros.length) {
325
+ resolve(registrosCreados);
326
+ }
327
+ });
328
+ }
329
+ else {
330
+ numeroDeRegistros++;
331
+ registrosCreados.push(registroCreado);
332
+ if (numeroDeRegistros === nuevosRegistros.length) {
333
+ resolve(registrosCreados);
334
+ }
335
+ }
336
+ })
337
+ .catch((err) => {
338
+ if (this.debug) {
339
+ console.error('Error creando: ', err);
340
+ }
341
+ numeroDeRegistros++;
342
+ registrosCreados.push(err);
343
+ if (numeroDeRegistros === nuevosRegistros.length - 1) {
344
+ resolve(registrosCreados);
345
+ }
346
+ });
347
+ }, tiempoEnCrearse);
348
+ terminado++;
349
+ }
350
+ });
351
+ }
352
+ async findWhereOr(camposABuscar, skip = 0, take = 10) {
353
+ if (this._datosUsuarioService) {
354
+ if (this.debug) {
355
+ console.info('Consulta: ', camposABuscar);
356
+ }
357
+ const usuariosEncontrados = await this._datosUsuarioService
358
+ .findWhereOr(camposABuscar, skip, take);
359
+ if (this.debug) {
360
+ console.info('UsuariosEncontrados: ', usuariosEncontrados);
361
+ }
362
+ let consulta = '';
363
+ const hayUsuarios = usuariosEncontrados[0].length > 0;
364
+ if (hayUsuarios) {
365
+ usuariosEncontrados[0]
366
+ .forEach((datosUsuario) => {
367
+ if (consulta === '') {
368
+ consulta = consulta + datosUsuario.user_id;
369
+ }
370
+ else {
371
+ consulta = consulta + ' OR ' + datosUsuario.user_id;
372
+ }
373
+ });
374
+ if (this.debug) {
375
+ console.info('Consulta de usuarios: ', consulta);
376
+ }
377
+ const respuesta = await this.find({
378
+ where: consulta
379
+ });
380
+ if (respuesta.error) {
381
+ const error = respuesta;
382
+ return { error: error.error, mensaje: error.mensaje };
383
+ }
384
+ else {
385
+ let usuariosAuth0 = respuesta;
386
+ usuariosAuth0 = usuariosAuth0
387
+ .map((usuarioAuth0) => {
388
+ usuarioAuth0.usuario = usuariosEncontrados[0]
389
+ .find((usuario) => {
390
+ return usuario.user_id === usuarioAuth0.user_id;
391
+ });
392
+ return usuarioAuth0;
393
+ });
394
+ return [usuariosAuth0, usuariosAuth0.length];
395
+ }
396
+ }
397
+ else {
398
+ if (this.debug) {
399
+ console.info('No se encontraron usuarios');
400
+ }
401
+ return { error: 404, mensaje: 'No se encontro ningun usuario' };
402
+ }
403
+ }
404
+ else {
405
+ if (this.debug) {
406
+ console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
407
+ }
408
+ return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
409
+ }
410
+ }
411
+ async findAll(criterioBusqueda, skip, take) {
412
+ if (this._datosUsuarioService) {
413
+ if (this.debug) {
414
+ console.info('Consulta: ', criterioBusqueda);
415
+ }
416
+ const usuariosEncontrados = await buscar_registro_1.buscarVariosRegistros(criterioBusqueda, principal_find_many_options_1.PrincipalFindManyOptions, skip, take, this._datosUsuarioService);
417
+ if (this.debug) {
418
+ console.info('UsuariosEncontrados: ', usuariosEncontrados);
419
+ }
420
+ let consulta = '';
421
+ const hayUsuarios = usuariosEncontrados[0].length > 0;
422
+ if (hayUsuarios) {
423
+ usuariosEncontrados[0]
424
+ .forEach((datosUsuario) => {
425
+ if (consulta === '') {
426
+ consulta = consulta + datosUsuario.user_id;
427
+ }
428
+ else {
429
+ consulta = consulta + ' OR ' + datosUsuario.user_id;
430
+ }
431
+ });
432
+ if (this.debug) {
433
+ console.info('Consulta de usuarios: ', consulta);
434
+ }
435
+ const respuesta = await this.find({
436
+ where: consulta
437
+ });
438
+ if (respuesta.error) {
439
+ const error = respuesta;
440
+ return { error: error.error, mensaje: error.mensaje };
441
+ }
442
+ else {
443
+ let usuariosAuth0 = respuesta;
444
+ usuariosAuth0 = usuariosAuth0
445
+ .map((usuarioAuth0) => {
446
+ usuarioAuth0.usuario = usuariosEncontrados[0]
447
+ .find((usuario) => {
448
+ return usuario.user_id === usuarioAuth0.user_id;
449
+ });
450
+ return usuarioAuth0;
451
+ });
452
+ return [usuariosAuth0, usuariosAuth0.length];
453
+ }
454
+ }
455
+ else {
456
+ if (this.debug) {
457
+ console.info('No se encontraron usuarios');
458
+ }
459
+ return { error: 404, mensaje: 'No se encontro ningun usuario' };
460
+ }
461
+ }
462
+ else {
463
+ if (this.debug) {
464
+ console.info('No existe el servicio, añada como dependencia en el constructor el _datosUsuarioService');
465
+ }
466
+ return { error: 400, mensaje: 'No existe el servicio DatosUsuarioService' };
467
+ }
468
+ }
469
+ };
470
+ PrincipalAuth0Service = __decorate([
471
+ common_1.Injectable()
472
+ ], PrincipalAuth0Service);
473
+ exports.PrincipalAuth0Service = PrincipalAuth0Service;
474
+ function obtenerPrimerOrder(order) {
475
+ if (order) {
476
+ const nombreCampo = Object.keys(order)[0];
477
+ return `${nombreCampo}:${order[nombreCampo] === 'ASC' ? 1 : -1}`;
478
+ }
479
+ else {
480
+ return undefined;
481
+ }
482
+ }
483
+ function obtenerCamposSeparadosPorComa(select) {
484
+ if (select) {
485
+ let campos = '';
486
+ select.forEach((nombreCampo) => {
487
+ if (campos === '') {
488
+ campos = nombreCampo;
489
+ }
490
+ else {
491
+ campos = `${campos},${nombreCampo}`;
492
+ }
493
+ });
494
+ return campos;
495
+ }
496
+ else {
497
+ return undefined;
498
+ }
499
+ }
500
+ function elaborarUserMetadataAActualizar(user_metadata, user_metadataAActualizar) {
501
+ let user_metadataClonado = {};
502
+ try {
503
+ user_metadataClonado = JSON.parse(JSON.stringify(user_metadata));
504
+ }
505
+ catch (e) {
506
+ }
507
+ Object
508
+ .keys(user_metadataAActualizar)
509
+ .forEach((nombrePropiedad) => {
510
+ user_metadataClonado[nombrePropiedad] = user_metadataAActualizar[nombrePropiedad];
511
+ });
512
+ return user_metadataClonado;
513
+ }
514
514
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aDAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYXV0aDAvYXV0aDAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLDJDQUE0QztBQUU1QyxpQ0FBdUQ7QUFHdkQsdUVBQTBFO0FBQzFFLGdGQUEwRTtBQUUxRSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUczRCxJQUFzQixxQkFBcUIsR0FBM0M7SUFJRSxZQUE2QixZQUFZLEVBQ2Isb0JBQTBCLEVBQzFCLGVBQXFCLEVBQ3BCLGdCQUF3QixJQUFJLEVBQzVCLE9BQWUsZUFBZSxFQUM5QixRQUFpQixJQUFJO1FBTHJCLGlCQUFZLEdBQVosWUFBWSxDQUFBO1FBQ2IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFNO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFNO1FBQ3BCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFNBQUksR0FBSixJQUFJLENBQTBCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQzNDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxZQUFZO1lBQy9DLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO1lBQzFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQzNDLEtBQUssRUFBRSwyREFBMkQ7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksNEJBQW9CLENBQUM7WUFDbkQsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLE1BQU0sWUFBWTtZQUMxQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQXNDO1FBRWxELElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0sU0FBUyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0I7cUJBQ2xCLEtBQUs7cUJBQ0wsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxpQkFBMkIsRUFBRSxFQUFFO29CQUNuRCxJQUFJLEdBQUcsRUFBRTt3QkFDUCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7eUJBQy9CO3dCQUNELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQzt3QkFDaEIsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUM7d0JBQ3ZDLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUU7NEJBQzFCLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDOzRCQUN2QixPQUFPLEdBQUcsbUJBQW1CLENBQUM7eUJBQy9CO3dCQUNELE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO3FCQUU3Qjt5QkFBTTt3QkFDTCxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztxQkFDNUI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFUCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNoRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQXVCO1FBQ2xDLE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xCLEtBQUs7aUJBQ0wsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUMvQjtvQkFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7b0JBQ2hCLElBQUksT0FBTyxHQUFHLHVCQUF1QixDQUFDO29CQUN0QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO3dCQUMxQixLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkIsT0FBTyxHQUFHLHVCQUF1QixDQUFDO3FCQUNuQztvQkFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO3dCQUMxQixLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkIsT0FBTyxHQUFHLGtCQUFrQixDQUFDO3FCQUM5QjtvQkFDRCxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFDN0I7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUN4QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBaUQ7UUFDMUQsT0FBTyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxNQUFNLENBQUM7WUFDWCxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sR0FBRztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzVELElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO29CQUNqQyxjQUFjLEVBQUUsSUFBSTtvQkFDcEIsSUFBSTtpQkFDTCxDQUFDO2dCQUNGLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO29CQUMxQixNQUFNLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7b0JBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsNkJBQTZCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3hFO2FBQ0Y7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHO29CQUNQLFFBQVEsRUFBRSxFQUFFO29CQUNaLElBQUksRUFBRSxDQUFDO29CQUNQLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDakMsY0FBYyxFQUFFLElBQUk7b0JBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtpQkFDaEIsQ0FBQzthQUNIO1lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsS0FBSztpQkFDTCxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLGlCQUFzQixFQUFFLEVBQUU7Z0JBQzNDLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDL0I7b0JBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNoQixJQUFJLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQztvQkFDeEMsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTt3QkFDMUIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQztxQkFDakM7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBRTdCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUE4QixFQUFFLFFBQWdCO1FBQzNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLE1BQU0sR0FBRztnQkFDWCxDQUFDLEVBQUUsRUFBRTthQUNOLENBQUM7WUFDRixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZixvQkFBb0I7aUJBQ2pCLE9BQU8sQ0FDTixDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNSLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtvQkFDaEIsS0FBSyxHQUFHLEdBQUcsS0FBSyxLQUFLLFFBQVEsR0FBRyxDQUFDO2lCQUNsQztxQkFBTTtvQkFDTCxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBRyxDQUFDO2lCQUM5QztZQUNILENBQUMsQ0FDRixDQUFDO1lBQ0osTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsS0FBSztpQkFDTCxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLG1CQUF3QixFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDL0I7b0JBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNoQixJQUFJLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQztvQkFDeEMsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTt3QkFDMUIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQztxQkFDakM7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQzdCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUM5QjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQXFDLEVBQ3JDLGdCQUErQjtRQUN4RCxNQUFNLE9BQU8sR0FBUSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBRW5DLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3JEO2dCQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNsQjtZQUVELElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFO2dCQUNsQyxnQkFBZ0IsQ0FBQyxhQUFhLEdBQUcsK0JBQStCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN6SDtZQUVELElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xCLEtBQUs7aUJBQ0wsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUMvQjtvQkFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7b0JBQ2hCLElBQUksT0FBTyxHQUFHLDRCQUE0QixDQUFDO29CQUMzQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO3dCQUMxQixLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkIsT0FBTyxHQUFHLGtCQUFrQixDQUFDO3FCQUM5QjtvQkFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO3dCQUMxQixLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDdkIsT0FBTyxHQUFHLHVCQUF1QixDQUFDO3FCQUNuQztvQkFDRCxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFFN0I7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUFVO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCO2lCQUNsQixxQkFBcUIsQ0FBQztnQkFDckIsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFDO2lCQUNELElBQUksQ0FDSCxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNKLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQ0Y7aUJBQ0EsS0FBSyxDQUNKLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQjtnQkFDRCxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUNGLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLFVBQVUsR0FBRyxrQ0FBa0M7UUFDM0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxvQkFBb0I7aUJBQ3RCLDBCQUEwQixDQUFDO2dCQUMxQixLQUFLO2dCQUNMLFVBQVU7YUFDWCxDQUFDO2lCQUNELElBQUksQ0FDSCxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNKLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEM7Z0JBQ0QsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQ0Y7aUJBQ0EsS0FBSyxDQUNKLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMvQjtnQkFDRCxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUNGLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBK0I7UUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xCLEtBQUs7aUJBQ0wsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksR0FBRyxFQUFFO29CQUNQLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztxQkFDL0I7b0JBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNoQixJQUFJLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQztvQkFDdkMsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTt3QkFDMUIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQztxQkFDOUI7b0JBQ0QsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLEdBQUcsRUFBRTt3QkFDMUIsS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztxQkFDbkM7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQzdCO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUMxRDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFnQztRQUMvQyxPQUFPLElBQUksT0FBTyxDQUNoQixDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO1lBRWpDLE9BQU8sU0FBUyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNuQyxNQUFNLGVBQWUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELFVBQVUsQ0FDUixHQUFHLEVBQUU7b0JBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt5QkFDM0MsSUFBSSxDQUNILENBQUMsY0FBbUIsRUFBRSxFQUFFO3dCQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7NEJBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsQ0FBQzs0QkFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7NEJBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzt5QkFDckQ7d0JBQ0QsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUcsSUFBSSxjQUFjLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRTs0QkFDaEUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dDQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzs2QkFDbkY7NEJBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7aUNBQzNFLElBQUksQ0FDSCxDQUFDLE9BQU8sRUFBRSxFQUFFO2dDQUNWLGlCQUFpQixFQUFFLENBQUM7Z0NBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDbEMsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO29DQUNoRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQ0FDM0I7NEJBQ0gsQ0FBQyxDQUNGO2lDQUNBLEtBQUssQ0FDSixDQUFDLENBQUMsRUFBRSxFQUFFO2dDQUNKLGlCQUFpQixFQUFFLENBQUM7Z0NBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDekIsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO29DQUNoRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQ0FDM0I7NEJBQ0gsQ0FBQyxDQUNGLENBQUM7eUJBQ0w7NkJBQU07NEJBQ0wsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDcEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDOzRCQUN0QyxJQUFJLGlCQUFpQixLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7Z0NBQ2hELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzZCQUMzQjt5QkFDRjtvQkFFSCxDQUFDLENBQ0Y7eUJBQ0EsS0FBSyxDQUNKLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFOzRCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7eUJBQ3ZDO3dCQUNELGlCQUFpQixFQUFFLENBQUM7d0JBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxpQkFBaUIsS0FBSyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs0QkFDcEQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7eUJBQzNCO29CQUNILENBQUMsQ0FDRixDQUFDO2dCQUNOLENBQUMsRUFBRSxlQUFlLENBQ25CLENBQUM7Z0JBQ0YsU0FBUyxFQUFFLENBQUM7YUFDYjtRQUNILENBQUMsQ0FDRixDQUFDO0lBR0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBdUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFO1FBQzVFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQzthQUMzQztZQUNELE1BQU0sbUJBQW1CLEdBQTBCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQjtpQkFDL0UsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzthQUM1RDtZQUNELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUVsQixNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELElBQUksV0FBVyxFQUFFO2dCQUNmLG1CQUFtQixDQUFDLENBQUMsQ0FBQztxQkFDbkIsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7b0JBQ3hCLElBQUksUUFBUSxLQUFLLEVBQUUsRUFBRTt3QkFDbkIsUUFBUSxHQUFHLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO3FCQUM1Qzt5QkFBTTt3QkFDTCxRQUFRLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO3FCQUNyRDtnQkFFSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDbEQ7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNoQyxLQUFLLEVBQUUsUUFBUTtpQkFDaEIsQ0FBMkIsQ0FBQztnQkFDN0IsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO29CQUNuQixNQUFNLEtBQUssR0FBRyxTQUFtQyxDQUFDO29CQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDdkQ7cUJBQU07b0JBQ0wsSUFBSSxhQUFhLEdBQUcsU0FBNEIsQ0FBQztvQkFDakQsYUFBYSxHQUFHLGFBQWE7eUJBQzFCLEdBQUcsQ0FDRixDQUFDLFlBQVksRUFBRSxFQUFFO3dCQUNmLFlBQVksQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDOzZCQUMxQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTs0QkFDaEIsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFlBQVksQ0FBQyxPQUFPLENBQUM7d0JBQ2xELENBQUMsQ0FBQyxDQUFDO3dCQUNMLE9BQU8sWUFBWSxDQUFDO29CQUN0QixDQUFDLENBQ0YsQ0FBQztvQkFDSixPQUFPLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDOUM7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsQ0FBQzthQUNqRTtTQUNGO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO2FBQ3pHO1lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLDJDQUEyQyxFQUFFLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBR0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBc0MsRUFBRSxJQUFZLEVBQUUsSUFBWTtRQUM5RSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUM5QztZQUNELE1BQU0sbUJBQW1CLEdBQTBCLE1BQU0sdUNBQXFCLENBQUMsZ0JBQWdCLEVBQUUsc0RBQXdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNsSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBRWxCLE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdEQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO3FCQUNuQixPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtvQkFDeEIsSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFO3dCQUNuQixRQUFRLEdBQUcsUUFBUSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7cUJBQzVDO3lCQUFNO3dCQUNMLFFBQVEsR0FBRyxRQUFRLEdBQUcsTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7cUJBQ3JEO2dCQUVILENBQUMsQ0FBQyxDQUFDO2dCQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ2hDLEtBQUssRUFBRSxRQUFRO2lCQUNoQixDQUEyQixDQUFDO2dCQUM3QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7b0JBQ25CLE1BQU0sS0FBSyxHQUFHLFNBQW1DLENBQUM7b0JBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN2RDtxQkFBTTtvQkFDTCxJQUFJLGFBQWEsR0FBRyxTQUE0QixDQUFDO29CQUNqRCxhQUFhLEdBQUcsYUFBYTt5QkFDMUIsR0FBRyxDQUNGLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ2YsWUFBWSxDQUFDLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NkJBQzFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUNoQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEQsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsT0FBTyxZQUFZLENBQUM7b0JBQ3RCLENBQUMsQ0FDRixDQUFDO29CQUNKLE9BQU8sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QzthQUNGO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7aUJBQzVDO2dCQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxDQUFDO2FBQ2pFO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLHlGQUF5RixDQUFDLENBQUM7YUFDekc7WUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQztTQUM3RTtJQUNILENBQUM7Q0FHRixDQUFBO0FBcGZxQixxQkFBcUI7SUFEMUMsbUJBQVUsRUFBRTtHQUNTLHFCQUFxQixDQW9mMUM7QUFwZnFCLHNEQUFxQjtBQWlnQjNDLDRCQUE0QixLQUFVO0lBQ3BDLElBQUksS0FBSyxFQUFFO1FBQ1QsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRTtTQUFNO1FBQ0wsT0FBTyxTQUFTLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBRUQsdUNBQXVDLE1BQVc7SUFDaEQsSUFBSSxNQUFNLEVBQUU7UUFDVixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLE9BQU8sQ0FDWixDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2QsSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO2dCQUNqQixNQUFNLEdBQUcsV0FBVyxDQUFDO2FBQ3RCO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxXQUFXLEVBQUUsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7S0FDZjtTQUFNO1FBQ0wsT0FBTyxTQUFTLENBQUM7S0FDbEI7QUFFSCxDQUFDO0FBRUQseUNBQXlDLGFBQWEsRUFBRSx3QkFBd0I7SUFDOUUsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDOUIsSUFBSTtRQUNGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0tBQ2xFO0lBQUMsT0FBTyxDQUFDLEVBQUU7S0FDWDtJQUNELE1BQU07U0FDSCxJQUFJLENBQUMsd0JBQXdCLENBQUM7U0FDOUIsT0FBTyxDQUNOLENBQUMsZUFBZSxFQUFFLEVBQUU7UUFDbEIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEYsQ0FBQyxDQUNGLENBQUM7SUFDSixPQUFPLG9CQUFvQixDQUFDO0FBQzlCLENBQUMifQ==