validation-br 0.21.2 → 1.1.2

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 (49) hide show
  1. package/.eslintcache +1 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.js +76 -11
  4. package/.github/workflows/test.yml +39 -0
  5. package/.prettierignore +1 -0
  6. package/.prettierrc.js +7 -0
  7. package/dist/{documents/cnh.js → cnh.js} +122 -153
  8. package/dist/cnh.js.map +1 -0
  9. package/dist/{documents/cnpj.js → cnpj.js} +111 -138
  10. package/dist/cnpj.js.map +1 -0
  11. package/dist/{documents/cpf.js → cpf.js} +133 -160
  12. package/dist/cpf.js.map +1 -0
  13. package/dist/index.js +24 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/judicialProcess.js +153 -0
  16. package/dist/judicialProcess.js.map +1 -0
  17. package/dist/{documents/pis-pasep.js → pisPasep.js} +113 -140
  18. package/dist/pisPasep.js.map +1 -0
  19. package/dist/postalCode.js +150 -0
  20. package/dist/postalCode.js.map +1 -0
  21. package/dist/renavam.js +108 -0
  22. package/dist/renavam.js.map +1 -0
  23. package/dist/{documents/titulo-eleitor.js → tituloEleitor.js} +130 -155
  24. package/dist/tituloEleitor.js.map +1 -0
  25. package/dist/{lib/utils.js → utils.js} +166 -175
  26. package/dist/utils.js.map +1 -0
  27. package/jest.config.js +14 -0
  28. package/package.json +60 -31
  29. package/readme.md +170 -111
  30. package/tsconfig.json +23 -0
  31. package/.babelrc +0 -15
  32. package/.prettierrc +0 -9
  33. package/LICENSE +0 -21
  34. package/dist/documents/cnh.js.map +0 -1
  35. package/dist/documents/cnpj.js.map +0 -1
  36. package/dist/documents/cpf.js.map +0 -1
  37. package/dist/documents/index.js +0 -29
  38. package/dist/documents/index.js.map +0 -1
  39. package/dist/documents/judicial-process.js +0 -177
  40. package/dist/documents/judicial-process.js.map +0 -1
  41. package/dist/documents/pis-pasep.js.map +0 -1
  42. package/dist/documents/postal-code.js +0 -151
  43. package/dist/documents/postal-code.js.map +0 -1
  44. package/dist/documents/renavam.js +0 -97
  45. package/dist/documents/renavam.js.map +0 -1
  46. package/dist/documents/titulo-eleitor.js.map +0 -1
  47. package/dist/lib/utils.js.map +0 -1
  48. package/docs.md +0 -0
  49. package/index.js +0 -3
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * RENAVAM
4
+ * Funções auxiliares para cálculo de máscaras, validação, dígito verificador e criaçãode
5
+ * números fake.
6
+ *
7
+ * @doc
8
+ * - O número de RENAVAM deve possuir 11 caracteres
9
+ *
10
+ * - Os caracteres de 1 a 10 são a numeração documento
11
+ *
12
+ * - O caractere 11 é o dígito verificador.
13
+ *
14
+ * 1) Partes do número
15
+ * _______________________________________________
16
+ * | Número | D V |
17
+ * | 2 6 8 2 7 6 4 9 9 6 - 0 |
18
+ * |_________________________________________|_____|
19
+ *
20
+ * 2) Cálculo do DV.
21
+ *
22
+ * - Soma-se o produto das algarismos 3 a 10 pelos números 3, 2, 9, 8, 7, 6, 5, 4, 3, 2
23
+ *
24
+ * 2 6 8 2 7 6 4 9 9 6
25
+ * x x x x x x x x x x
26
+ * 3 2 9 8 7 6 5 4 3 2
27
+ * = 6 +12 +72 +16 +49 +12 +20 +36 +27 +12 = 234
28
+ *
29
+ * - O somatório encontrado é multiplicado por 10 e ao resultado
30
+ * é aplicado o cálculo do MOD 11.
31
+ *
32
+ * ( 234 * 10 ) / 11 tem resto 8. DV = 8. Caso o resto seja maior ou igual a
33
+ * 10, DV será 0.
34
+ *
35
+ *
36
+ */
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.validate = exports.validateOrFail = exports.fake = exports.mask = exports.dv = void 0;
39
+ const utils_1 = require("./utils");
40
+ /**
41
+ * dv()
42
+ * Calcula o dígito verificador
43
+ *
44
+ * @param {Number|String} value
45
+ * @returns {String}
46
+ */
47
+ exports.dv = (value) => {
48
+ if (!value)
49
+ throw new Error('Renavam não informado');
50
+ const renavam = utils_1.clearValue(value, 10); // só 10 para remover o DV
51
+ const invalidList = utils_1.invalidListGenerator(10);
52
+ if (invalidList.includes(renavam)) {
53
+ throw new Error('RENAVAM não pode ser uma sequência de números iguais');
54
+ }
55
+ const sum1 = utils_1.sumElementsByMultipliers(renavam, [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]) * 10;
56
+ const dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11;
57
+ return `${dv1}`;
58
+ };
59
+ /**
60
+ * Aplica uma máscara ao número informado
61
+ *
62
+ * @param {String} value Número de Processo
63
+ * @returns {String} Valor com a máscara
64
+ */
65
+ exports.mask = (value) => utils_1.applyMask(value, '0000000000-0');
66
+ /**
67
+ * fake()
68
+ * Gera um número válido
69
+ *
70
+ * @returns {String}
71
+ */
72
+ exports.fake = (withMask = false) => {
73
+ const value = utils_1.fakeNumber(10, true);
74
+ const renavam = `${value}${exports.dv(value)}`;
75
+ if (withMask)
76
+ return exports.mask(renavam);
77
+ return renavam;
78
+ };
79
+ /**
80
+ * validateOrFail()
81
+ * Valida se um número de processo está correto e
82
+ * retorna uma exceção se não estiver
83
+ *
84
+ * @returns {Boolean}
85
+ */
86
+ exports.validateOrFail = (value) => {
87
+ const renavam = utils_1.clearValue(value, 11);
88
+ if (exports.dv(renavam) !== renavam.substring(10, 11)) {
89
+ throw new Error('Dígito verificador inválido');
90
+ }
91
+ return true;
92
+ };
93
+ /**
94
+ * validate()
95
+ * Valida se um número de processo está correto
96
+ *
97
+ * @returns {Boolean}
98
+ */
99
+ exports.validate = (value) => {
100
+ try {
101
+ return exports.validateOrFail(value);
102
+ }
103
+ catch (error) {
104
+ return false;
105
+ }
106
+ };
107
+ exports.default = exports.validate;
108
+ //# sourceMappingURL=renavam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renavam.js","sourceRoot":"","sources":["../src/renavam.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;AAEH,mCAMgB;AAEhB;;;;;;GAMG;AACU,QAAA,EAAE,GAAG,CAAC,KAAsB,EAAU,EAAE;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAEpD,MAAM,OAAO,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA,CAAC,0BAA0B;IAEhE,MAAM,WAAW,GAAG,4BAAoB,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;KACxE;IAED,MAAM,IAAI,GAAG,gCAAwB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IACnF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAC3C,OAAO,GAAG,GAAG,EAAE,CAAA;AACjB,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,iBAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;AAExF;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,WAAoB,KAAK,EAAU,EAAE;IACxD,MAAM,KAAK,GAAG,kBAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAElC,MAAM,OAAO,GAAG,GAAG,KAAK,GAAG,UAAE,CAAC,KAAK,CAAC,EAAE,CAAA;IAEtC,IAAI,QAAQ;QAAE,OAAO,YAAI,CAAC,OAAO,CAAC,CAAA;IAElC,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;;;GAMG;AACU,QAAA,cAAc,GAAG,CAAC,KAAsB,EAAW,EAAE;IAChE,MAAM,OAAO,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAErC,IAAI,UAAE,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;IAC1D,IAAI;QACF,OAAO,sBAAc,CAAC,KAAK,CAAC,CAAA;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,kBAAe,gBAAQ,CAAA"}
@@ -1,155 +1,130 @@
1
- "use strict";
2
-
3
- /**
4
- * isTitulo()
5
- * Calcula se um título eleitoral é válido
6
- *
7
- * @doc
8
- * Título de eleitor deve possuir 12 dígitos.
9
- *
10
- * - Os caracteres 1 a 8 são números sequenciais.
11
- *
12
- * - Os caracteres 9 e 10 representam os estados da federação onde o título
13
- * foi emitido (01 = SP, 02 = MG, 03 = RJ, 04 = RS, 05 = BA, 06 = PR, 07 = CE, 08 = PE,
14
- * 09 = SC, 10 = GO, 11 = MA12 = PB, 13 = PA, 14 = ES, 15 = PI, 16 = RN, 17 = AL,
15
- * 18 = MT, 19 = MS, 20 = DF, 21 = SE, 22 = AM, 23 = RO, 24 = AC, 25 = AP, 26 = RR,
16
- * 27 = TO, 28 = Exterior(ZZ).
17
- *
18
- * - Os caracteres 11 e 12 são dígitos verificadores.
19
- *
20
- * 1) Partes do número
21
- * ------------------------------------------------
22
- * | Número Sequencial | UF | DV |
23
- * 1 0 2 3 8 5 0 1 0 6 7 1
24
- *
25
- * 2) Cálculo do primeiro DV.
26
- *
27
- * - Soma-se o produto das algarismos 1 a 8 pelos números 2, 3, 4, 5, 6, 7, 8 e 9.
28
- *
29
- * 1 0 2 3 8 5 0 1
30
- * x x x x x x x x
31
- * 2 3 4 5 6 7 8 9
32
- * = 2 + 0 + 8 +15 +48 +35 + 0 + 9 = 117
33
- *
34
- * - O somatório encontrado é dividido por 11. O DV1 é o resto da divisão. Se o
35
- * resto for 10, o DV1 é 0.
36
- *
37
- * 2.1) 117 / 11 tem resto igual a 7.
38
- *
39
- * 3) Cálculo do segundo DV
40
- *
41
- * - Soma-se o produto dos algarismos 9 a 11 (relativos aos 2 dígitos da UF e o novo
42
- * DV1 que acabou de ser calculado) e os multiplicam pelos números 7, 8 e 9. Se o
43
- * resto for 10, DV2 será 0.
44
- * 0 6 7
45
- * x x x
46
- * 7 8 9
47
- * = 0 +48 +63 = 111
48
- *
49
- * 3.1) 111 / 11 tem resto igual a 1.
50
- *
51
- * Fonte: http://clubes.obmep.org.br/blog/a-matematica-nos-documentos-titulo-de-eleitor/
52
- *
53
- * @param {String} value Título eleitoral
54
- * @returns {Boolean}
55
- */
56
- var _require = require('../lib/utils'),
57
- sumElementsByMultipliers = _require.sumElementsByMultipliers,
58
- clearValue = _require.clearValue,
59
- fakeNumber = _require.fakeNumber,
60
- applyMask = _require.applyMask,
61
- invalidListGenerator = _require.invalidListGenerator;
62
- /**
63
- * dv()
64
- * Calcula o dígito verificador de um CPF
65
- *
66
- * @param {Number|String} value
67
- * @returns {String}
68
- */
69
-
70
-
71
- var dv = function dv() {
72
- var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
73
- if (!value) throw new Error('CPF não informado');
74
- var titulo = clearValue(value, 10);
75
- var invalidList = invalidListGenerator(10);
76
-
77
- if (invalidList.includes(titulo)) {
78
- throw new Error('Título não pode ser uma sequência de números iguais');
79
- }
80
-
81
- var sum1 = sumElementsByMultipliers(titulo.substring(0, 8), [2, 3, 4, 5, 6, 7, 8, 9]);
82
- var dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11;
83
- var sum2 = sumElementsByMultipliers(titulo.substring(8, 10) + dv1, [7, 8, 9]);
84
- var dv2 = sum2 % 11 >= 10 ? 0 : sum2 % 11;
85
- return "".concat(dv1).concat(dv2);
86
- };
87
- /**
88
- * Aplica uma máscara ao número informado
89
- *
90
- * @param {String} value Número de Processo
91
- * @returns {String} Valor com a máscara
92
- */
93
-
94
-
95
- var mask = function mask(value) {
96
- return applyMask(value, '0000.0000.0000');
97
- };
98
- /**
99
- * fake()
100
- * Gera um número válido
101
- *
102
- * @returns {String}
103
- */
104
-
105
-
106
- var fake = function fake() {
107
- var withMask = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
108
- var num = fakeNumber(8, true);
109
- var uf = String(parseInt(Math.random() * 27 + 1, 10)).padStart(2, '0');
110
- var titulo = "".concat(num).concat(uf).concat(dv(num + uf));
111
- if (withMask) return mask(titulo);
112
- return titulo;
113
- };
114
- /**
115
- * validateOrFail()
116
- * Valida se um número de processo está correto e
117
- * retorna uma exceção se não estiver
118
- *
119
- * @returns {Boolean}
120
- */
121
-
122
-
123
- var validateOrFail = function validateOrFail(value) {
124
- var titulo = clearValue(value, 12);
125
-
126
- if (dv(titulo) !== titulo.substring(10, 12)) {
127
- throw new Error('Dígito verificador inválido');
128
- }
129
-
130
- return true;
131
- };
132
- /**
133
- * validate()
134
- * Valida se um número de processo está correto
135
- *
136
- * @returns {Boolean}
137
- */
138
-
139
-
140
- var validate = function validate(value) {
141
- try {
142
- return validateOrFail(value);
143
- } catch (error) {
144
- return false;
145
- }
146
- };
147
-
148
- module.exports = {
149
- dv: dv,
150
- fake: fake,
151
- mask: mask,
152
- validate: validate,
153
- validateOrFail: validateOrFail
154
- };
155
- //# sourceMappingURL=titulo-eleitor.js.map
1
+ "use strict";
2
+ /**
3
+ * isTitulo()
4
+ * Calcula se um título eleitoral é válido
5
+ *
6
+ * @doc
7
+ * Título de eleitor deve possuir 12 dígitos.
8
+ *
9
+ * - Os caracteres 1 a 8 são números sequenciais.
10
+ *
11
+ * - Os caracteres 9 e 10 representam os estados da federação onde o título
12
+ * foi emitido (01 = SP, 02 = MG, 03 = RJ, 04 = RS, 05 = BA, 06 = PR, 07 = CE, 08 = PE,
13
+ * 09 = SC, 10 = GO, 11 = MA12 = PB, 13 = PA, 14 = ES, 15 = PI, 16 = RN, 17 = AL,
14
+ * 18 = MT, 19 = MS, 20 = DF, 21 = SE, 22 = AM, 23 = RO, 24 = AC, 25 = AP, 26 = RR,
15
+ * 27 = TO, 28 = Exterior(ZZ).
16
+ *
17
+ * - Os caracteres 11 e 12 são dígitos verificadores.
18
+ *
19
+ * 1) Partes do número
20
+ * ------------------------------------------------
21
+ * | Número Sequencial | UF | DV |
22
+ * 1 0 2 3 8 5 0 1 0 6 7 1
23
+ *
24
+ * 2) Cálculo do primeiro DV.
25
+ *
26
+ * - Soma-se o produto das algarismos 1 a 8 pelos números 2, 3, 4, 5, 6, 7, 8 e 9.
27
+ *
28
+ * 1 0 2 3 8 5 0 1
29
+ * x x x x x x x x
30
+ * 2 3 4 5 6 7 8 9
31
+ * = 2 + 0 + 8 +15 +48 +35 + 0 + 9 = 117
32
+ *
33
+ * - O somatório encontrado é dividido por 11. O DV1 é o resto da divisão. Se o
34
+ * resto for 10, o DV1 é 0.
35
+ *
36
+ * 2.1) 117 / 11 tem resto igual a 7.
37
+ *
38
+ * 3) Cálculo do segundo DV
39
+ *
40
+ * - Soma-se o produto dos algarismos 9 a 11 (relativos aos 2 dígitos da UF e o novo
41
+ * DV1 que acabou de ser calculado) e os multiplicam pelos números 7, 8 e 9. Se o
42
+ * resto for 10, DV2 será 0.
43
+ * 0 6 7
44
+ * x x x
45
+ * 7 8 9
46
+ * = 0 +48 +63 = 111
47
+ *
48
+ * 3.1) 111 / 11 tem resto igual a 1.
49
+ *
50
+ * Fonte: http://clubes.obmep.org.br/blog/a-matematica-nos-documentos-titulo-de-eleitor/
51
+ *
52
+ * @param {String} value Título eleitoral
53
+ * @returns {Boolean}
54
+ */
55
+ Object.defineProperty(exports, "__esModule", { value: true });
56
+ exports.validate = exports.validateOrFail = exports.fake = exports.mask = exports.dv = void 0;
57
+ const utils_1 = require("./utils");
58
+ /**
59
+ * dv()
60
+ * Calcula o dígito verificador
61
+ *
62
+ * @param {Number|String} value
63
+ * @returns {String}
64
+ */
65
+ exports.dv = (value) => {
66
+ if (!value)
67
+ throw new Error('CPF não informado');
68
+ const titulo = utils_1.clearValue(value, 10);
69
+ const invalidList = utils_1.invalidListGenerator(10);
70
+ if (invalidList.includes(titulo)) {
71
+ throw new Error('Título não pode ser uma sequência de números iguais');
72
+ }
73
+ const sum1 = utils_1.sumElementsByMultipliers(titulo.substring(0, 8), [2, 3, 4, 5, 6, 7, 8, 9]);
74
+ const dv1 = sum1 % 11 >= 10 ? 0 : sum1 % 11;
75
+ const sum2 = utils_1.sumElementsByMultipliers(titulo.substring(8, 10) + dv1, [7, 8, 9]);
76
+ const dv2 = sum2 % 11 >= 10 ? 0 : sum2 % 11;
77
+ return `${dv1}${dv2}`;
78
+ };
79
+ /**
80
+ * Aplica uma máscara ao número informado
81
+ *
82
+ * @param {String} value Número de Processo
83
+ * @returns {String} Valor com a máscara
84
+ */
85
+ exports.mask = (value) => utils_1.applyMask(value, '0000.0000.0000');
86
+ // const mask = (value) => applyMask(value, '0000.0000.0000');
87
+ /**
88
+ * fake()
89
+ * Gera um número válido
90
+ *
91
+ * @returns {String}
92
+ */
93
+ exports.fake = (withMask = false) => {
94
+ const num = utils_1.fakeNumber(8, true);
95
+ const uf = (Math.random() * 27 + 1).toFixed(0).padStart(2, '0');
96
+ const titulo = `${num}${uf}${exports.dv(num + uf)}`;
97
+ if (withMask)
98
+ return exports.mask(titulo);
99
+ return titulo;
100
+ };
101
+ /**
102
+ * validateOrFail()
103
+ * Valida se um número de processo está correto e
104
+ * retorna uma exceção se não estiver
105
+ *
106
+ * @returns {Boolean}
107
+ */
108
+ exports.validateOrFail = (value) => {
109
+ const titulo = utils_1.clearValue(value, 12);
110
+ if (exports.dv(titulo) !== titulo.substring(10, 12)) {
111
+ throw new Error('Dígito verificador inválido');
112
+ }
113
+ return true;
114
+ };
115
+ /**
116
+ * validate()
117
+ * Valida se um número de processo está correto
118
+ *
119
+ * @returns {Boolean}
120
+ */
121
+ exports.validate = (value) => {
122
+ try {
123
+ return exports.validateOrFail(value);
124
+ }
125
+ catch (error) {
126
+ return false;
127
+ }
128
+ };
129
+ exports.default = exports.validate;
130
+ //# sourceMappingURL=tituloEleitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tituloEleitor.js","sourceRoot":"","sources":["../src/tituloEleitor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;;;AAEH,mCAMgB;AAEhB;;;;;;GAMG;AACU,QAAA,EAAE,GAAG,CAAC,KAAsB,EAAU,EAAE;IACnD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IAEhD,MAAM,MAAM,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAEpC,MAAM,WAAW,GAAG,4BAAoB,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;KACvE;IAED,MAAM,IAAI,GAAG,gCAAwB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAE3C,MAAM,IAAI,GAAG,gCAAwB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;IAE3C,OAAO,GAAG,GAAG,GAAG,GAAG,EAAE,CAAA;AACvB,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,iBAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAA;AAC1F,8DAA8D;AAE9D;;;;;GAKG;AACU,QAAA,IAAI,GAAG,CAAC,WAAoB,KAAK,EAAU,EAAE;IACxD,MAAM,GAAG,GAAG,kBAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAE/B,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAE/D,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,UAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAA;IAE3C,IAAI,QAAQ;QAAE,OAAO,YAAI,CAAC,MAAM,CAAC,CAAA;IACjC,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;;;;;GAMG;AACU,QAAA,cAAc,GAAG,CAAC,KAAsB,EAAW,EAAE;IAChE,MAAM,MAAM,GAAG,kBAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAEpC,IAAI,UAAE,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QAC3C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;KAC/C;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,CAAC,KAAsB,EAAW,EAAE;IAC1D,IAAI;QACF,OAAO,sBAAc,CAAC,KAAK,CAAC,CAAA;KAC7B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAED,kBAAe,gBAAQ,CAAA"}