@accon/connect 0.4.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/connect.service.d.ts +2 -1
- package/dist/core/connect.service.js +2 -2
- package/dist/core/connect.service.js.map +1 -1
- package/dist/core/interfaces/webhook-input-integration.interface.d.ts +5 -2
- package/dist/core/types/flags.type.d.ts +3 -0
- package/dist/core/types/flags.type.js +8 -0
- package/dist/core/types/flags.type.js.map +1 -0
- package/dist/core/types/integration-payload.type.d.ts +2 -1
- package/dist/core/types/integration-payload.type.js.map +1 -1
- package/dist/core/types/order.type.d.ts +7 -7
- package/dist/order/accon/accon-webhook.order-output.js +1 -1
- package/dist/order/accon/accon-webhook.order-output.js.map +1 -1
- package/dist/order/saipos/dto/webhook-body.dto.d.ts +5 -0
- package/dist/order/saipos/dto/webhook-body.dto.js +10 -0
- package/dist/order/saipos/dto/webhook-body.dto.js.map +1 -0
- package/dist/order/saipos/saipos.order-output.d.ts +6 -1
- package/dist/order/saipos/saipos.order-output.js +53 -11
- package/dist/order/saipos/saipos.order-output.js.map +1 -1
- package/dist/order/totvs-chef/dto/create-order.dto.d.ts +71 -0
- package/dist/order/totvs-chef/dto/create-order.dto.js +66 -0
- package/dist/order/totvs-chef/dto/create-order.dto.js.map +1 -0
- package/dist/order/totvs-chef/dto/itens-v1.dto.d.ts +29 -0
- package/dist/order/totvs-chef/dto/itens-v1.dto.js +3 -0
- package/dist/order/totvs-chef/dto/itens-v1.dto.js.map +1 -0
- package/dist/order/totvs-chef/totvs-chef.config.d.ts +15 -0
- package/dist/order/totvs-chef/totvs-chef.config.js +17 -0
- package/dist/order/totvs-chef/totvs-chef.config.js.map +1 -0
- package/dist/order/totvs-chef/totvs-chef.order-output.d.ts +35 -0
- package/dist/order/totvs-chef/totvs-chef.order-output.js +565 -0
- package/dist/order/totvs-chef/totvs-chef.order-output.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -3
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { OrderOutputIntegration, IntegrationPayload, EventsService } from '../../core/index.js';
|
|
2
|
+
import type { Order } from '../../core/index.js';
|
|
3
|
+
import { HttpService } from '@nestjs/axios';
|
|
4
|
+
import { ItemDto, PagamentoDto, ClienteDto, EnderecoDto, CreateOrderDto } from './dto/create-order.dto';
|
|
5
|
+
import { GetItemInput, GetItensProducts } from './dto/itens-v1.dto';
|
|
6
|
+
import { TotvsChefConfig } from './totvs-chef.config';
|
|
7
|
+
export declare class TotvsChefOrderOutput implements OrderOutputIntegration<TotvsChefConfig> {
|
|
8
|
+
readonly eventsService: EventsService;
|
|
9
|
+
private readonly httpService;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly TOTVS_CHEF_BASE_URL;
|
|
12
|
+
private readonly CODIGO_INTEGRACAO;
|
|
13
|
+
private readonly CHAVE;
|
|
14
|
+
private readonly dispatchEvent;
|
|
15
|
+
constructor(eventsService: EventsService, httpService: HttpService);
|
|
16
|
+
getAuthParams(config: TotvsChefConfig): {
|
|
17
|
+
username: string;
|
|
18
|
+
password: string;
|
|
19
|
+
};
|
|
20
|
+
onOrderCreated(payload: IntegrationPayload, config: TotvsChefConfig): Promise<void>;
|
|
21
|
+
getMenu(config: TotvsChefConfig): Promise<any[]>;
|
|
22
|
+
getItens(products: GetItensProducts, menu: any[], chargeMostExpensive?: string[]): ItemDto[];
|
|
23
|
+
getItem(input: GetItemInput, isModifier?: boolean): ItemDto;
|
|
24
|
+
toFixed(num: number): number;
|
|
25
|
+
getUF(state: string): string;
|
|
26
|
+
getCleanAddressNumber(number: string): string;
|
|
27
|
+
getChange(order: Order): number;
|
|
28
|
+
transformPaymentCode(method: string): number;
|
|
29
|
+
transformPayment(order: Order): Array<PagamentoDto>;
|
|
30
|
+
transformAddress(order: Order): EnderecoDto;
|
|
31
|
+
transformCustomer(order: Order): ClienteDto;
|
|
32
|
+
transformDeliveryFee(order: Order): number;
|
|
33
|
+
transformTotalValue(order: Order, itens: any[], otherFees: any[]): number;
|
|
34
|
+
transformOrder(order: Order, config: TotvsChefConfig, chargeMostExpensive?: string[]): Promise<CreateOrderDto>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var TotvsChefOrderOutput_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.TotvsChefOrderOutput = void 0;
|
|
14
|
+
const core_1 = require("../../core/index.js");
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const axios_1 = require("@nestjs/axios");
|
|
17
|
+
const axios_2 = require("axios");
|
|
18
|
+
const rxjs_1 = require("rxjs");
|
|
19
|
+
const crypto_1 = require("crypto");
|
|
20
|
+
const moment = require("moment-timezone");
|
|
21
|
+
const currency = require("currency.js");
|
|
22
|
+
const totvs_chef_config_1 = require("./totvs-chef.config");
|
|
23
|
+
let TotvsChefOrderOutput = TotvsChefOrderOutput_1 = class TotvsChefOrderOutput {
|
|
24
|
+
eventsService;
|
|
25
|
+
httpService;
|
|
26
|
+
logger = new common_1.Logger(TotvsChefOrderOutput_1.name);
|
|
27
|
+
TOTVS_CHEF_BASE_URL;
|
|
28
|
+
CODIGO_INTEGRACAO;
|
|
29
|
+
CHAVE;
|
|
30
|
+
dispatchEvent;
|
|
31
|
+
constructor(eventsService, httpService) {
|
|
32
|
+
this.eventsService = eventsService;
|
|
33
|
+
this.httpService = httpService;
|
|
34
|
+
this.CODIGO_INTEGRACAO = process.env.CODIGO_INTEGRACAO;
|
|
35
|
+
if (!this.CODIGO_INTEGRACAO) {
|
|
36
|
+
this.logger.error('CODIGO_INTEGRACAO não fornecido via ambiente.');
|
|
37
|
+
}
|
|
38
|
+
this.CHAVE = process.env.CHAVE;
|
|
39
|
+
if (!this.CHAVE) {
|
|
40
|
+
this.logger.error('CHAVE não fornecida via ambiente.');
|
|
41
|
+
}
|
|
42
|
+
this.TOTVS_CHEF_BASE_URL =
|
|
43
|
+
process.env.TOTVS_CHEF_BASE_URL ||
|
|
44
|
+
'http://chefweb.chef.totvs.com.br/IntegracaoPedidosOnline';
|
|
45
|
+
this.dispatchEvent = eventsService.createDispatcherFor('TotvsChef', 'OrderOutput');
|
|
46
|
+
}
|
|
47
|
+
getAuthParams(config) {
|
|
48
|
+
const timestamp = moment()
|
|
49
|
+
.tz('America/Sao_Paulo')
|
|
50
|
+
.format('YYYYMMDDHHmmssZZ');
|
|
51
|
+
return {
|
|
52
|
+
username: timestamp,
|
|
53
|
+
password: (0, crypto_1.createHash)('md5')
|
|
54
|
+
.update(`${this.CODIGO_INTEGRACAO}|${this.CHAVE}|${timestamp}`)
|
|
55
|
+
.digest('hex'),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async onOrderCreated(payload, config) {
|
|
59
|
+
this.logger.verbose('onOrderCreated: iniciando integração');
|
|
60
|
+
const { order, flags } = payload;
|
|
61
|
+
const chargeMostExpensive = flags?.CHARGE_MOST_EXPENSIVE;
|
|
62
|
+
const orderId = parseInt(order.externalId);
|
|
63
|
+
this.dispatchEvent({
|
|
64
|
+
eventType: 'INTEGRATION_INITIATED',
|
|
65
|
+
orderId,
|
|
66
|
+
});
|
|
67
|
+
try {
|
|
68
|
+
const payload = {
|
|
69
|
+
parametros: {
|
|
70
|
+
CodigoEstabelecimento: config.CodigoEstabelecimento,
|
|
71
|
+
CodigoIntegracao: this.CODIGO_INTEGRACAO,
|
|
72
|
+
Pedido: this.transformOrder(order, config, chargeMostExpensive),
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
this.dispatchEvent({
|
|
76
|
+
eventType: 'INTEGRATION_PROCESSING',
|
|
77
|
+
orderId,
|
|
78
|
+
metadata: { payload },
|
|
79
|
+
});
|
|
80
|
+
const auth = this.getAuthParams(config);
|
|
81
|
+
const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.TOTVS_CHEF_BASE_URL}/DeliveryService.svc/EnviarPedido`, payload, {
|
|
82
|
+
auth,
|
|
83
|
+
headers: { 'Content-Type': 'application/json' },
|
|
84
|
+
}));
|
|
85
|
+
this.dispatchEvent({
|
|
86
|
+
eventType: 'INTEGRATION_COMPLETED',
|
|
87
|
+
orderId,
|
|
88
|
+
metadata: { data },
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if ((0, axios_2.isAxiosError)(error)) {
|
|
94
|
+
this.logger.error('onOrderCreated: falha ao realizar requisição no Totvs Chef ', JSON.stringify(error.response?.data));
|
|
95
|
+
this.dispatchEvent({
|
|
96
|
+
eventType: 'INTEGRATION_FAILED',
|
|
97
|
+
orderId,
|
|
98
|
+
metadata: { error: JSON.stringify(error.response?.data) },
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.dispatchEvent({
|
|
103
|
+
eventType: 'INTEGRATION_FAILED',
|
|
104
|
+
orderId,
|
|
105
|
+
metadata: { error },
|
|
106
|
+
});
|
|
107
|
+
this.logger.error('onOrderCreated: falha ao criar pedido no Totvs Chef', error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async getMenu(config) {
|
|
112
|
+
const payload = {
|
|
113
|
+
parametros: {
|
|
114
|
+
CodigoIntegracao: this.CODIGO_INTEGRACAO,
|
|
115
|
+
CodigoEstabelecimento: config.CodigoEstabelecimento,
|
|
116
|
+
DataAtualizacao: null,
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
const auth = this.getAuthParams(config);
|
|
120
|
+
const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(`${this.TOTVS_CHEF_BASE_URL}/CadastroService.svc/ObterCardapio`, payload, {
|
|
121
|
+
auth,
|
|
122
|
+
headers: { 'Content-Type': 'application/json' },
|
|
123
|
+
}));
|
|
124
|
+
return data?.ObterCardapioResult?.Produtos ?? [];
|
|
125
|
+
}
|
|
126
|
+
getItens(products, menu, chargeMostExpensive) {
|
|
127
|
+
const itens = [];
|
|
128
|
+
const getHigherPrice = (ItensFracao) => Math.max(...ItensFracao.map((Item) => Item.Produto?.PrecoVenda ?? 0));
|
|
129
|
+
for (const product of products) {
|
|
130
|
+
const item = this.getItem({
|
|
131
|
+
...product,
|
|
132
|
+
total: currency(product.total).value,
|
|
133
|
+
externalVendorCode: product.externalVendorCode ?? '',
|
|
134
|
+
quantity: product.quantity ?? 1,
|
|
135
|
+
});
|
|
136
|
+
const attributes = product.modifiers.filter((modifier) => modifier.externalVendorCode &&
|
|
137
|
+
!modifier.externalVendorCode.includes('mix:') &&
|
|
138
|
+
!modifier.externalVendorCode.includes('split:'));
|
|
139
|
+
if (attributes && attributes.length) {
|
|
140
|
+
item.ItensAdicionais = attributes.map((attr) => {
|
|
141
|
+
const externalVendorCode = attr.externalVendorCode?.includes(':')
|
|
142
|
+
? attr.externalVendorCode.split(':')[1]
|
|
143
|
+
: attr.externalVendorCode;
|
|
144
|
+
return this.getItem({
|
|
145
|
+
...attr,
|
|
146
|
+
quantity: attr.quantity * product.quantity,
|
|
147
|
+
externalVendorCode,
|
|
148
|
+
}, true);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
const hasFractionedModifier = product.modifiers.some((modifier) => modifier.externalVendorCode &&
|
|
152
|
+
(modifier.externalVendorCode.includes('mix:') ||
|
|
153
|
+
modifier.externalVendorCode.includes('split:')));
|
|
154
|
+
if (!hasFractionedModifier) {
|
|
155
|
+
itens.push(item);
|
|
156
|
+
}
|
|
157
|
+
const parentItem = {
|
|
158
|
+
TipoItem: 1,
|
|
159
|
+
Produto: {
|
|
160
|
+
Codigo: product.externalVendorCode ?? '',
|
|
161
|
+
Descricao: product.name ?? '',
|
|
162
|
+
PrecoVenda: 0,
|
|
163
|
+
},
|
|
164
|
+
Quantidade: product.quantity ?? 0,
|
|
165
|
+
Acrescimo: 0,
|
|
166
|
+
Desconto: 0,
|
|
167
|
+
MotivoAcrescimoDesconto: null,
|
|
168
|
+
AcrescimoDiferencaFracionada: 0,
|
|
169
|
+
Observacao: product.notes || '',
|
|
170
|
+
ItensFracao: [],
|
|
171
|
+
ItensAdicionais: [],
|
|
172
|
+
ValorTotal: 0,
|
|
173
|
+
TipoOperacao: 0,
|
|
174
|
+
};
|
|
175
|
+
const mixProductsQuantity = () => {
|
|
176
|
+
const mixQuantity = product.modifiers
|
|
177
|
+
.filter(({ externalVendorCode }) => externalVendorCode &&
|
|
178
|
+
(externalVendorCode.includes('mix:') ||
|
|
179
|
+
externalVendorCode.includes('split:')))
|
|
180
|
+
.reduce((acc, cur) => acc + cur.quantity, 0);
|
|
181
|
+
switch (mixQuantity) {
|
|
182
|
+
case 1:
|
|
183
|
+
return 1;
|
|
184
|
+
case 2:
|
|
185
|
+
return 0.5;
|
|
186
|
+
case 3:
|
|
187
|
+
return 0.333;
|
|
188
|
+
case 4:
|
|
189
|
+
return 0.25;
|
|
190
|
+
default:
|
|
191
|
+
throw new core_1.InvalidOrderException('Quantidade inválida para realizar fracionamento');
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
let mixCount = 1;
|
|
195
|
+
for (const modifier of product.modifiers) {
|
|
196
|
+
if (!modifier.externalVendorCode)
|
|
197
|
+
continue;
|
|
198
|
+
if (modifier.externalVendorCode &&
|
|
199
|
+
modifier.externalVendorCode.includes('attr:'))
|
|
200
|
+
continue;
|
|
201
|
+
if (modifier.externalVendorCode.includes('mix:') ||
|
|
202
|
+
modifier.externalVendorCode.includes('split:')) {
|
|
203
|
+
let quantity = mixProductsQuantity();
|
|
204
|
+
const [, externalVendorCode] = modifier.externalVendorCode.split(':');
|
|
205
|
+
if (quantity === 1) {
|
|
206
|
+
const item = this.getItem({
|
|
207
|
+
name: modifier.name,
|
|
208
|
+
externalVendorCode,
|
|
209
|
+
quantity,
|
|
210
|
+
total: modifier.price?.actualPrice ?? 0,
|
|
211
|
+
price: { actualPrice: modifier.price?.actualPrice ?? 0 },
|
|
212
|
+
notes: modifier.notes,
|
|
213
|
+
}, true);
|
|
214
|
+
itens.push(item);
|
|
215
|
+
continue;
|
|
216
|
+
}
|
|
217
|
+
for (let i = 0; i < modifier.quantity; i++) {
|
|
218
|
+
if (quantity === 0.333 && mixCount === 3) {
|
|
219
|
+
quantity = 0.334;
|
|
220
|
+
}
|
|
221
|
+
const itemFracao = this.getItem({
|
|
222
|
+
name: modifier.name,
|
|
223
|
+
externalVendorCode,
|
|
224
|
+
quantity: quantity,
|
|
225
|
+
total: modifier.price?.actualPrice ?? 0,
|
|
226
|
+
price: { actualPrice: modifier.price?.actualPrice ?? 0 },
|
|
227
|
+
notes: modifier.notes,
|
|
228
|
+
}, true);
|
|
229
|
+
parentItem.ItensFracao?.push(itemFracao);
|
|
230
|
+
mixCount++;
|
|
231
|
+
}
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const useSplit = product.modifiers.some((m) => m.externalVendorCode && m.externalVendorCode.includes('split:'));
|
|
236
|
+
if (parentItem.ItensFracao && parentItem.ItensFracao.length) {
|
|
237
|
+
if (!useSplit) {
|
|
238
|
+
for (const item of parentItem.ItensFracao) {
|
|
239
|
+
try {
|
|
240
|
+
const found = menu.find((product) => product.Codigo === item.Produto?.Codigo);
|
|
241
|
+
if (found && item.Produto)
|
|
242
|
+
item.Produto.PrecoVenda = found.PrecoVenda;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
throw new Error(`Não foi possível encontrar o produto ${item.Produto?.Descricao} com código ${item.Produto?.Codigo}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const useHigherPrice = Array.isArray(chargeMostExpensive) &&
|
|
250
|
+
chargeMostExpensive.includes(product.externalVendorCode);
|
|
251
|
+
if (useHigherPrice) {
|
|
252
|
+
const maxUnitPrice = Math.max(...parentItem.ItensFracao.map((f) => f.Produto?.PrecoVenda ?? 0));
|
|
253
|
+
const numFractions = parentItem.ItensFracao.length;
|
|
254
|
+
parentItem.ValorTotal = this.toFixed(maxUnitPrice * numFractions);
|
|
255
|
+
parentItem.ItensFracao.forEach((fracao) => {
|
|
256
|
+
fracao.ValorTotal = this.toFixed(maxUnitPrice * fracao.Quantidade);
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
for (const item of parentItem.ItensFracao) {
|
|
261
|
+
if (!useSplit && item.Produto) {
|
|
262
|
+
item.ValorTotal = this.toFixed(item.Produto.PrecoVenda * item.Quantidade);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
parentItem.ValorTotal = currency(product.total).value;
|
|
266
|
+
}
|
|
267
|
+
for (let i = 0; i < product.quantity; i++) {
|
|
268
|
+
itens.push(parentItem);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return itens;
|
|
273
|
+
}
|
|
274
|
+
getItem(input, isModifier = false) {
|
|
275
|
+
const { name, externalVendorCode, quantity, total, price, notes } = input;
|
|
276
|
+
const actualPrice = isModifier ? price.actualPrice : total;
|
|
277
|
+
return {
|
|
278
|
+
TipoItem: 0,
|
|
279
|
+
Produto: {
|
|
280
|
+
Codigo: externalVendorCode,
|
|
281
|
+
Descricao: name,
|
|
282
|
+
PrecoVenda: isModifier
|
|
283
|
+
? actualPrice
|
|
284
|
+
: currency(actualPrice / quantity).value,
|
|
285
|
+
},
|
|
286
|
+
Quantidade: quantity,
|
|
287
|
+
Acrescimo: 0,
|
|
288
|
+
Desconto: 0,
|
|
289
|
+
MotivoAcrescimoDesconto: null,
|
|
290
|
+
AcrescimoDiferencaFracionada: 0,
|
|
291
|
+
Observacao: notes || '',
|
|
292
|
+
ItensFracao: null,
|
|
293
|
+
ItensAdicionais: null,
|
|
294
|
+
ValorTotal: isModifier
|
|
295
|
+
? currency(actualPrice).multiply(quantity).value
|
|
296
|
+
: currency(actualPrice).value,
|
|
297
|
+
TipoOperacao: 0,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
toFixed(num) {
|
|
301
|
+
const match = num.toPrecision(15).match(/^-?\d+(?:\.\d{0,2})?/);
|
|
302
|
+
return currency(match ? match[0] : '0').value;
|
|
303
|
+
}
|
|
304
|
+
getUF(state) {
|
|
305
|
+
const UFs = [
|
|
306
|
+
'AC',
|
|
307
|
+
'AL',
|
|
308
|
+
'AP',
|
|
309
|
+
'AM',
|
|
310
|
+
'BA',
|
|
311
|
+
'CE',
|
|
312
|
+
'DF',
|
|
313
|
+
'ES',
|
|
314
|
+
'GO',
|
|
315
|
+
'MA',
|
|
316
|
+
'MT',
|
|
317
|
+
'MS',
|
|
318
|
+
'MG',
|
|
319
|
+
'PA',
|
|
320
|
+
'PB',
|
|
321
|
+
'PR',
|
|
322
|
+
'PE',
|
|
323
|
+
'PI',
|
|
324
|
+
'RJ',
|
|
325
|
+
'RN',
|
|
326
|
+
'RS',
|
|
327
|
+
'RO',
|
|
328
|
+
'RR',
|
|
329
|
+
'SC',
|
|
330
|
+
'SP',
|
|
331
|
+
'SE',
|
|
332
|
+
'TO',
|
|
333
|
+
];
|
|
334
|
+
if (state.length === 2 && UFs.includes(state.toUpperCase())) {
|
|
335
|
+
return state.toUpperCase();
|
|
336
|
+
}
|
|
337
|
+
const normalizedState = state
|
|
338
|
+
.toLowerCase()
|
|
339
|
+
.normalize('NFD')
|
|
340
|
+
.replace(/[\u0300-\u036f]/g, '');
|
|
341
|
+
switch (normalizedState) {
|
|
342
|
+
case 'acre':
|
|
343
|
+
return 'AC';
|
|
344
|
+
case 'alagoas':
|
|
345
|
+
return 'AL';
|
|
346
|
+
case 'amapa':
|
|
347
|
+
return 'AP';
|
|
348
|
+
case 'amazonas':
|
|
349
|
+
return 'AM';
|
|
350
|
+
case 'bahia':
|
|
351
|
+
return 'BA';
|
|
352
|
+
case 'ceara':
|
|
353
|
+
return 'CE';
|
|
354
|
+
case 'distrito federal':
|
|
355
|
+
return 'DF';
|
|
356
|
+
case 'espirito santo':
|
|
357
|
+
return 'ES';
|
|
358
|
+
case 'goias':
|
|
359
|
+
return 'GO';
|
|
360
|
+
case 'maranhao':
|
|
361
|
+
return 'MA';
|
|
362
|
+
case 'mato grosso do sul':
|
|
363
|
+
return 'MS';
|
|
364
|
+
case 'mato grosso':
|
|
365
|
+
return 'MT';
|
|
366
|
+
case 'minas gerais':
|
|
367
|
+
return 'MG';
|
|
368
|
+
case 'para':
|
|
369
|
+
return 'PA';
|
|
370
|
+
case 'paraiba':
|
|
371
|
+
return 'PB';
|
|
372
|
+
case 'pernambuco':
|
|
373
|
+
return 'PE';
|
|
374
|
+
case 'piaui':
|
|
375
|
+
return 'PI';
|
|
376
|
+
case 'rio de janeiro':
|
|
377
|
+
return 'RJ';
|
|
378
|
+
case 'rio grande do norte':
|
|
379
|
+
return 'RN';
|
|
380
|
+
case 'rio grande do sul':
|
|
381
|
+
return 'RS';
|
|
382
|
+
case 'rondonia':
|
|
383
|
+
return 'RO';
|
|
384
|
+
case 'roraima':
|
|
385
|
+
return 'RR';
|
|
386
|
+
case 'santa catarina':
|
|
387
|
+
return 'SC';
|
|
388
|
+
case 'sao paulo':
|
|
389
|
+
return 'SP';
|
|
390
|
+
case 'sergipe':
|
|
391
|
+
return 'SE';
|
|
392
|
+
case 'tocantins':
|
|
393
|
+
return 'TO';
|
|
394
|
+
default:
|
|
395
|
+
if (state) {
|
|
396
|
+
throw new core_1.InvalidOrderException(`Estado inválido: ${state}`);
|
|
397
|
+
}
|
|
398
|
+
return '';
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
getCleanAddressNumber(number) {
|
|
402
|
+
const cleanNumber = number.replace(/\D/g, '');
|
|
403
|
+
return cleanNumber.length ? cleanNumber : '1';
|
|
404
|
+
}
|
|
405
|
+
getChange(order) {
|
|
406
|
+
const cashMethod = order.payments.methods.find((m) => m.method === 'CASH');
|
|
407
|
+
const changeFor = cashMethod?.changeFor ?? 0;
|
|
408
|
+
const totalValue = order.total?.orderAmount?.value ?? 0;
|
|
409
|
+
return changeFor > totalValue ? changeFor - totalValue : 0;
|
|
410
|
+
}
|
|
411
|
+
transformPaymentCode(method) {
|
|
412
|
+
const paymentMethod = method?.toUpperCase() || '';
|
|
413
|
+
const CASH = 0, CREDIT = 2, DEBIT = 3, TICKET = 4, PIX = 20;
|
|
414
|
+
if (paymentMethod === 'CASH')
|
|
415
|
+
return CASH;
|
|
416
|
+
if (paymentMethod === 'CREDIT')
|
|
417
|
+
return CREDIT;
|
|
418
|
+
if (paymentMethod === 'DEBIT')
|
|
419
|
+
return DEBIT;
|
|
420
|
+
if (paymentMethod === 'MEAL_VOUCHER' ||
|
|
421
|
+
paymentMethod === 'FOOD_VOUCHER' ||
|
|
422
|
+
paymentMethod === 'TICKET')
|
|
423
|
+
return TICKET;
|
|
424
|
+
if (paymentMethod === 'PIX')
|
|
425
|
+
return PIX;
|
|
426
|
+
return CASH;
|
|
427
|
+
}
|
|
428
|
+
transformPayment(order) {
|
|
429
|
+
const change = this.getChange(order);
|
|
430
|
+
return order.payments.methods.map((method) => ({
|
|
431
|
+
Tipo: this.transformPaymentCode(method.method),
|
|
432
|
+
Valor: currency(method.value).add(method.method === 'CASH' ? change : 0)
|
|
433
|
+
.value,
|
|
434
|
+
CodigoReferencia: method.method,
|
|
435
|
+
PagoOnline: method.type === 'PREPAID',
|
|
436
|
+
}));
|
|
437
|
+
}
|
|
438
|
+
transformAddress(order) {
|
|
439
|
+
const deliveryAddress = order.delivery.deliveryAddress;
|
|
440
|
+
const userPhone = order.customer?.phone.number.replace(/\D/g, '');
|
|
441
|
+
const DDD = userPhone?.slice(0, 2);
|
|
442
|
+
const Telefone = userPhone?.slice(2);
|
|
443
|
+
return {
|
|
444
|
+
Logradouro: deliveryAddress.street,
|
|
445
|
+
Numero: this.getCleanAddressNumber(deliveryAddress.number),
|
|
446
|
+
Complemento: deliveryAddress.complement || '',
|
|
447
|
+
Bairro: deliveryAddress.district,
|
|
448
|
+
Municipio: deliveryAddress.city,
|
|
449
|
+
MunicipioNumeroIBGE: null,
|
|
450
|
+
UF: this.getUF(deliveryAddress.state),
|
|
451
|
+
UFNumeroIBGE: null,
|
|
452
|
+
CEP: deliveryAddress.postalCode.replace(/\D/g, ''),
|
|
453
|
+
DDD: DDD || '',
|
|
454
|
+
Telefone: Telefone || '',
|
|
455
|
+
EMail: order.customer?.email || '',
|
|
456
|
+
IdentificacaoEndereco: null,
|
|
457
|
+
InformacoesAdicionais: null,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
transformCustomer(order) {
|
|
461
|
+
const CpfCnpj = order.customer?.documentNumber?.replace(/\D/g, '') || '';
|
|
462
|
+
return {
|
|
463
|
+
NomeCompleto: order.customer?.name,
|
|
464
|
+
TipoPessoa: (order.customer?.documentNumber?.length ?? 0) < 12 ? 0 : 1,
|
|
465
|
+
Sexo: 0,
|
|
466
|
+
CpfCnpj,
|
|
467
|
+
Endereco: this.transformAddress(order),
|
|
468
|
+
EnderecoEntrega: null,
|
|
469
|
+
ConheceuComo: null,
|
|
470
|
+
RgIE: null,
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
transformDeliveryFee(order) {
|
|
474
|
+
const deliveryFee = order.otherFees.find(({ type }) => type === 'DELIVERY_FEE');
|
|
475
|
+
return deliveryFee?.price.value ?? 0;
|
|
476
|
+
}
|
|
477
|
+
transformTotalValue(order, itens, otherFees) {
|
|
478
|
+
const itemsTotal = itens.reduce((acc, item) => acc + currency(item.ValorTotal).value, 0);
|
|
479
|
+
const feesTotal = otherFees.reduce((acc, fee) => acc + currency(fee.price?.value || 0).value, 0);
|
|
480
|
+
return currency(itemsTotal)
|
|
481
|
+
.add(feesTotal)
|
|
482
|
+
.subtract(currency(order.total.discount?.value || 0).value).value;
|
|
483
|
+
}
|
|
484
|
+
async transformOrder(order, config, chargeMostExpensive) {
|
|
485
|
+
if (!order.customer) {
|
|
486
|
+
throw new core_1.InvalidOrderException('Pedido sem cliente', 'customer');
|
|
487
|
+
}
|
|
488
|
+
if (order.type !== 'DELIVERY' && order.type !== 'TAKEOUT') {
|
|
489
|
+
throw new core_1.InvalidOrderException('Tipo de pedido inválido', 'type');
|
|
490
|
+
}
|
|
491
|
+
const itemsWithoutCode = order.items.filter((item) => !item.externalCode);
|
|
492
|
+
if (itemsWithoutCode.length) {
|
|
493
|
+
throw new core_1.InvalidOrderException(`Item(s) sem código de integração: ${itemsWithoutCode
|
|
494
|
+
.map((i) => i.id)
|
|
495
|
+
.join(', ')}`, 'items');
|
|
496
|
+
}
|
|
497
|
+
const optionsWithoutCode = order.items.filter((item) => item.options?.some((option) => !option.externalCode));
|
|
498
|
+
if (optionsWithoutCode.length) {
|
|
499
|
+
throw new core_1.InvalidOrderException(`Item(s) com opção(ões) sem código: ${optionsWithoutCode
|
|
500
|
+
.map((i) => i.id)
|
|
501
|
+
.join(', ')}`, 'items');
|
|
502
|
+
}
|
|
503
|
+
const deliveryFee = this.transformDeliveryFee(order);
|
|
504
|
+
let menu = [];
|
|
505
|
+
menu = await this.getMenu(config);
|
|
506
|
+
const itens = this.getItens(order.items.map((item) => ({
|
|
507
|
+
name: item.name,
|
|
508
|
+
externalVendorCode: item.externalCode,
|
|
509
|
+
quantity: item.quantity ?? 1,
|
|
510
|
+
total: item.totalPrice?.value ?? item.unitPrice.value * item.quantity,
|
|
511
|
+
price: { actualPrice: item.unitPrice.value },
|
|
512
|
+
notes: item.specialInstructions,
|
|
513
|
+
modifiers: (item.options || []).map((option) => ({
|
|
514
|
+
name: option.name,
|
|
515
|
+
externalVendorCode: option.externalCode || '',
|
|
516
|
+
quantity: option.quantity ?? 1,
|
|
517
|
+
price: {
|
|
518
|
+
actualPrice: option.unitPrice.value || option.totalPrice?.value || 0,
|
|
519
|
+
},
|
|
520
|
+
notes: option.specialInstructions,
|
|
521
|
+
})),
|
|
522
|
+
})), menu, chargeMostExpensive);
|
|
523
|
+
const pagamentos = this.transformPayment(order);
|
|
524
|
+
const valorTotal = this.transformTotalValue(order, itens, order.otherFees);
|
|
525
|
+
const cliente = this.transformCustomer(order);
|
|
526
|
+
const dto = {
|
|
527
|
+
CodigoEstabelecimento: config.CodigoEstabelecimento,
|
|
528
|
+
CodigoIntegracao: this.CODIGO_INTEGRACAO,
|
|
529
|
+
Pedido: {
|
|
530
|
+
TaxaDeEntrega: deliveryFee,
|
|
531
|
+
PagamentoOnline: order.payments.pending === 0,
|
|
532
|
+
RetirarNaLoja: order.type === 'TAKEOUT',
|
|
533
|
+
IdConfiguracaoIntegracao: 1,
|
|
534
|
+
CodigoExternoPedido: order.id,
|
|
535
|
+
CodigoExternoPedidoReduzido: order.displayId,
|
|
536
|
+
Cliente: cliente,
|
|
537
|
+
Troco: this.getChange(order),
|
|
538
|
+
Desconto: order.total.discount?.value || 0,
|
|
539
|
+
ValorTotal: valorTotal,
|
|
540
|
+
Pagamentos: pagamentos,
|
|
541
|
+
IncluirCPFNaNota: true,
|
|
542
|
+
ObservacaoPedido: order.extraInfo || '',
|
|
543
|
+
Itens: itens,
|
|
544
|
+
},
|
|
545
|
+
};
|
|
546
|
+
return dto;
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
exports.TotvsChefOrderOutput = TotvsChefOrderOutput;
|
|
550
|
+
exports.TotvsChefOrderOutput = TotvsChefOrderOutput = TotvsChefOrderOutput_1 = __decorate([
|
|
551
|
+
(0, core_1.RegistryIntegration)({
|
|
552
|
+
id: 'totvs-chef',
|
|
553
|
+
category: 'POS',
|
|
554
|
+
type: 'OrderOutput',
|
|
555
|
+
title: 'Totvs Chef',
|
|
556
|
+
description: 'Integração com Totvs Chef Web PDV',
|
|
557
|
+
logoUrl: 'https://www.fidelimax.com.br/wp-content/uploads/2022/07/Novo-Projeto-1.png',
|
|
558
|
+
websiteUrl: 'https://chefweb.totvs.com.br/',
|
|
559
|
+
configSchema: totvs_chef_config_1.TOTVS_CHEF_CONFIG_SCHEMA,
|
|
560
|
+
}),
|
|
561
|
+
(0, common_1.Injectable)(),
|
|
562
|
+
__metadata("design:paramtypes", [core_1.EventsService,
|
|
563
|
+
axios_1.HttpService])
|
|
564
|
+
], TotvsChefOrderOutput);
|
|
565
|
+
//# sourceMappingURL=totvs-chef.order-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totvs-chef.order-output.js","sourceRoot":"","sources":["../../../lib/order/totvs-chef/totvs-chef.order-output.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,oCAOmB;AAGnB,2CAAoD;AACpD,yCAA4C;AAE5C,iCAAqC;AAErC,+BAAsC;AACtC,mCAAoC;AAEpC,0CAA0C;AAC1C,wCAAwC;AAUxC,2DAAgF;AAczE,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAUpB;IACQ;IARF,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAC/C,mBAAmB,CAAC;IACpB,iBAAiB,CAAC;IAClB,KAAK,CAAC;IACN,aAAa,CAA6B;IAE3D,YACW,aAA4B,EACpB,WAAwB;QADhC,kBAAa,GAAb,aAAa,CAAe;QACpB,gBAAW,GAAX,WAAW,CAAa;QAEzC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,mBAAmB;YACtB,OAAO,CAAC,GAAG,CAAC,mBAAmB;gBAC/B,0DAA0D,CAAC;QAE7D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,mBAAmB,CACpD,WAAW,EACX,aAAa,CACd,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,MAAuB;QACnC,MAAM,SAAS,GAAG,MAAM,EAAE;aACvB,EAAE,CAAC,mBAAmB,CAAC;aACvB,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,IAAA,mBAAU,EAAC,KAAK,CAAC;iBACxB,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC;iBAC9D,MAAM,CAAC,KAAK,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAA2B,EAC3B,MAAuB;QAEvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;QAE5D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QACjC,MAAM,mBAAmB,GAAG,KAAK,EAAE,qBAAqB,CAAC;QACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC;YACjB,SAAS,EAAE,uBAAuB;YAClC,OAAO;SACR,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG;gBACd,UAAU,EAAE;oBACV,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;oBACnD,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;oBACxC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC;iBAChE;aACF,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC;gBACjB,SAAS,EAAE,wBAAwB;gBACnC,OAAO;gBACP,QAAQ,EAAE,EAAE,OAAO,EAAE;aACtB,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,GAAG,IAAI,CAAC,mBAAmB,mCAAmC,EAC9D,OAAO,EACP;gBACE,IAAI;gBACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;aAChD,CACF,CACF,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC;gBACjB,SAAS,EAAE,uBAAuB;gBAClC,OAAO;gBACP,QAAQ,EAAE,EAAE,IAAI,EAAE;aACnB,CAAC,CAAC;YAEH,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAA,oBAAY,EAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6DAA6D,EAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CACrC,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC;oBACjB,SAAS,EAAE,oBAAoB;oBAC/B,OAAO;oBACP,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;iBAC1D,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,CAAC;oBACjB,SAAS,EAAE,oBAAoB;oBAC/B,OAAO;oBACP,QAAQ,EAAE,EAAE,KAAK,EAAE;iBACpB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,qDAAqD,EACrD,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAuB;QACnC,MAAM,OAAO,GAAG;YACd,UAAU,EAAE;gBACV,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;gBACxC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;gBACnD,eAAe,EAAE,IAAI;aACtB;SACF,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,qBAAc,EACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,GAAG,IAAI,CAAC,mBAAmB,oCAAoC,EAC/D,OAAO,EACP;YACE,IAAI;YACJ,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CACF,CACF,CAAC;QACF,OAAO,IAAI,EAAE,mBAAmB,EAAE,QAAQ,IAAI,EAAE,CAAC;IACnD,CAAC;IAED,QAAQ,CACN,QAA0B,EAC1B,IAAW,EACX,mBAA8B;QAE9B,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,CAAC,WAAsB,EAAE,EAAE,CAChD,IAAI,CAAC,GAAG,CACN,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,CACrE,CAAC;QAEJ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;gBACxB,GAAG,OAAO;gBACV,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK;gBACpC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,EAAE;gBACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;aAChC,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CACzC,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,kBAAkB;gBAC3B,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7C,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAClD,CAAC;YACF,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,CACnC,CAAC,IAAoD,EAAE,EAAE;oBACvD,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,CAAC;wBAC/D,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACvC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAC5B,OAAO,IAAI,CAAC,OAAO,CACjB;wBACE,GAAG,IAAI;wBACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;wBAC1C,kBAAkB;qBACnB,EACD,IAAI,CACL,CAAC;gBACJ,CAAC,CACF,CAAC;YACJ,CAAC;YACD,MAAM,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAClD,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,kBAAkB;gBAC3B,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3C,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CACpD,CAAC;YACF,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,MAAM,UAAU,GAAY;gBAC1B,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO,CAAC,kBAAkB,IAAI,EAAE;oBACxC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;oBAC7B,UAAU,EAAE,CAAC;iBACd;gBACD,UAAU,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;gBACjC,SAAS,EAAE,CAAC;gBACZ,QAAQ,EAAE,CAAC;gBACX,uBAAuB,EAAE,IAAI;gBAC7B,4BAA4B,EAAE,CAAC;gBAC/B,UAAU,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC/B,WAAW,EAAE,EAAe;gBAC5B,eAAe,EAAE,EAAe;gBAChC,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;aAChB,CAAC;YAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;gBAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS;qBAClC,MAAM,CACL,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,CACzB,kBAAkB;oBAClB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;wBAClC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAC3C;qBACA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC/C,QAAQ,WAAW,EAAE,CAAC;oBACpB,KAAK,CAAC;wBACJ,OAAO,CAAC,CAAC;oBACX,KAAK,CAAC;wBACJ,OAAO,GAAG,CAAC;oBACb,KAAK,CAAC;wBACJ,OAAO,KAAK,CAAC;oBACf,KAAK,CAAC;wBACJ,OAAO,IAAI,CAAC;oBACd;wBACE,MAAM,IAAI,4BAAqB,CAC7B,iDAAiD,CAClD,CAAC;gBACN,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,QAAQ,CAAC,kBAAkB;oBAAE,SAAS;gBAC3C,IACE,QAAQ,CAAC,kBAAkB;oBAC3B,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAE7C,SAAS;gBAEX,IACE,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5C,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC9C,CAAC;oBACD,IAAI,QAAQ,GAAG,mBAAmB,EAAE,CAAC;oBACrC,MAAM,CAAC,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;wBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CACvB;4BACE,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,kBAAkB;4BAClB,QAAQ;4BACR,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;4BACvC,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE;4BACxD,KAAK,EAAE,QAAQ,CAAC,KAAK;yBACtB,EACD,IAAI,CACL,CAAC;wBACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,SAAS;oBACX,CAAC;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3C,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;4BACzC,QAAQ,GAAG,KAAK,CAAC;wBACnB,CAAC;wBACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAC7B;4BACE,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,kBAAkB;4BAClB,QAAQ,EAAE,QAAQ;4BAClB,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;4BACvC,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,EAAE;4BACxD,KAAK,EAAE,QAAQ,CAAC,KAAK;yBACtB,EACD,IAAI,CACL,CAAC;wBACF,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;wBACzC,QAAQ,EAAE,CAAC;oBACb,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CACrC,CAAC,CAAkC,EAAE,EAAE,CACrC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAClE,CAAC;YAEF,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAEd,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;wBAC1C,IAAI,CAAC;4BACH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CACrB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,MAAM,CACrD,CAAC;4BACF,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO;gCACvB,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;wBAC/C,CAAC;wBAAC,MAAM,CAAC;4BACP,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,CAAC,OAAO,EAAE,SAAS,eAAe,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CACrG,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAGD,MAAM,cAAc,GAClB,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBAClC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBAC3D,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC,CACjE,CAAC;oBACF,MAAM,YAAY,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC;oBACnD,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC;oBAClE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;wBACxC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;wBAC1C,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAC1C,CAAC;wBACJ,CAAC;oBACH,CAAC;oBACD,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;gBACxD,CAAC;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,KAAmB,EAAE,UAAU,GAAG,KAAK;QAC7C,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3D,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,UAAU;oBACpB,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC,KAAK;aAC3C;YACD,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,CAAC;YACZ,QAAQ,EAAE,CAAC;YACX,uBAAuB,EAAE,IAAI;YAC7B,4BAA4B,EAAE,CAAC;YAC/B,UAAU,EAAE,KAAK,IAAI,EAAE;YACvB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,UAAU,EAAE,UAAU;gBACpB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK;gBAChD,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK;YAC/B,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,MAAM,GAAG,GAAG;YACV,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;SACL,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,eAAe,GAAG,KAAK;aAC1B,WAAW,EAAE;aACb,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAEnC,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,kBAAkB;gBACrB,OAAO,IAAI,CAAC;YACd,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC;YACd,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC;YACd,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC;YACd,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC;YACd,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC;YACd,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC;YACd,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC;YACd,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC;YACd,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC;YACd,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC;YACd,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC;YACd,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC;YACd,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC;YACd,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC;YACd;gBACE,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,IAAI,4BAAqB,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,MAAc;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,KAAY;QACpB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAC3E,MAAM,SAAS,GAAG,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;QACxD,OAAO,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,oBAAoB,CAAC,MAAc;QACjC,MAAM,aAAa,GAAG,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,CAAC,EACZ,MAAM,GAAG,CAAC,EACV,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,CAAC,EACV,GAAG,GAAG,EAAE,CAAC;QACX,IAAI,aAAa,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,aAAa,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC9C,IAAI,aAAa,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAC5C,IACE,aAAa,KAAK,cAAc;YAChC,aAAa,KAAK,cAAc;YAChC,aAAa,KAAK,QAAQ;YAE1B,OAAO,MAAM,CAAC;QAChB,IAAI,aAAa,KAAK,KAAK;YAAE,OAAO,GAAG,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,KAAY;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAErC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrE,KAAK;YACR,gBAAgB,EAAE,MAAM,CAAC,MAAM;YAC/B,UAAU,EAAE,MAAM,CAAC,IAAI,KAAK,SAAS;SACtC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,KAAY;QAC3B,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAErC,OAAO;YACL,UAAU,EAAE,eAAe,CAAC,MAAM;YAClC,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,MAAM,CAAC;YAC1D,WAAW,EAAE,eAAe,CAAC,UAAU,IAAI,EAAE;YAC7C,MAAM,EAAE,eAAe,CAAC,QAAQ;YAChC,SAAS,EAAE,eAAe,CAAC,IAAI;YAC/B,mBAAmB,EAAE,IAAI;YACzB,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC;YACrC,YAAY,EAAE,IAAI;YAClB,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YAClD,GAAG,EAAE,GAAG,IAAI,EAAE;YACd,QAAQ,EAAE,QAAQ,IAAI,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAClC,qBAAqB,EAAE,IAAI;YAC3B,qBAAqB,EAAE,IAAI;SAC5B,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,KAAY;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAEzE,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;YAClC,UAAU,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,EAAE,CAAC;YACP,OAAO;YACP,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACtC,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,KAAY;QAC/B,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CACtC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,cAAc,CACtC,CAAC;QACF,OAAO,WAAW,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,KAAY,EAAE,KAAY,EAAE,SAAgB;QAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAC7B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EACpD,CAAC,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,EACzD,CAAC,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC,UAAU,CAAC;aACxB,GAAG,CAAC,SAAS,CAAC;aACd,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAY,EACZ,MAAuB,EACvB,mBAA8B;QAE9B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,4BAAqB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1D,MAAM,IAAI,4BAAqB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,4BAAqB,CAC7B,qCAAqC,gBAAgB;iBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,EAAE,EACf,OAAO,CACR,CAAC;QACJ,CAAC;QACD,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CACrD,CAAC;QACF,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,4BAAqB,CAC7B,sCAAsC,kBAAkB;iBACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,EAAE,EACf,OAAO,CACR,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CACzB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,kBAAkB,EAAE,IAAI,CAAC,YAAY;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC;YAC5B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;YACrE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YAC5C,KAAK,EAAE,IAAI,CAAC,mBAAmB;YAC/B,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,kBAAkB,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;gBAC7C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;gBAC9B,KAAK,EAAE;oBACL,WAAW,EACT,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC;iBAC1D;gBACD,KAAK,EAAE,MAAM,CAAC,mBAAmB;aAClC,CAAC,CAAC;SACJ,CAAC,CAAC,EACH,IAAI,EACJ,mBAAmB,CACpB,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,GAAG,GAAmB;YAC1B,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;YACxC,MAAM,EAAE;gBACN,aAAa,EAAE,WAAW;gBAC1B,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC;gBAC7C,aAAa,EAAE,KAAK,CAAC,IAAI,KAAK,SAAS;gBACvC,wBAAwB,EAAE,CAAC;gBAC3B,mBAAmB,EAAE,KAAK,CAAC,EAAE;gBAC7B,2BAA2B,EAAE,KAAK,CAAC,SAAS;gBAC5C,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC5B,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;gBAC1C,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,UAAU;gBACtB,gBAAgB,EAAE,IAAI;gBACtB,gBAAgB,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;gBACvC,KAAK,EAAE,KAAK;aACb;SACF,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAA;AAxpBY,oDAAoB;+BAApB,oBAAoB;IAZhC,IAAA,0BAAmB,EAAC;QACnB,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,mCAAmC;QAChD,OAAO,EACL,4EAA4E;QAC9E,UAAU,EAAE,+BAA+B;QAC3C,YAAY,EAAE,4CAAwB;KACvC,CAAC;IACD,IAAA,mBAAU,GAAE;qCAWe,oBAAa;QACP,mBAAW;GAXhC,oBAAoB,CAwpBhC"}
|