contable 0.0.5 → 0.0.7
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/client/client/client.js +240 -0
- package/dist/client/{menu.js → client/menu.js} +1 -1
- package/dist/client/client/redux-formulario.js +379 -0
- package/dist/client/client/render-components.js +750 -0
- package/dist/client/client/render-formulario.js +56 -0
- package/dist/client/client/render-general.js +197 -0
- package/dist/client/client/render-handlers.js +69 -0
- package/dist/client/client/tipos.js +13 -0
- package/dist/client/{tsconfig.json → client/tsconfig.json} +3 -4
- package/dist/{unlogged → client/unlogged}/tsconfig.json +1 -3
- package/dist/server/client/tipos.d.ts +119 -0
- package/dist/server/client/tipos.js +13 -0
- package/dist/server/{app-contable.d.ts → server/app-contable.d.ts} +63 -3
- package/dist/server/server/app-contable.js +192 -0
- package/dist/server/server/def-config.d.ts +1 -0
- package/dist/server/server/def-config.js +101 -0
- package/dist/server/server/procedures-contable.js +508 -0
- package/dist/server/server/server-contable.js +15 -0
- package/dist/server/server/table-categorias_producto.js +29 -0
- package/dist/server/server/table-clientes.js +56 -0
- package/dist/server/server/table-condicion_iva.js +29 -0
- package/dist/server/server/table-estados_pedido.js +33 -0
- package/dist/server/server/table-estados_presupuesto.js +34 -0
- package/dist/server/server/table-insumos.js +44 -0
- package/dist/server/server/table-items_pedido.js +48 -0
- package/dist/server/server/table-items_presupuesto.js +48 -0
- package/dist/server/server/table-iva_productos.js +29 -0
- package/dist/server/server/table-parametros.js +38 -0
- package/dist/server/server/table-pedidos.js +48 -0
- package/dist/server/server/table-pedidos_pendientes.js +28 -0
- package/dist/server/server/table-pedidos_vencidos.js +28 -0
- package/dist/server/server/table-presupuestos.js +56 -0
- package/dist/server/server/table-productos.js +70 -0
- package/dist/server/server/table-productos_clientes.js +22 -0
- package/dist/server/server/table-productos_generales.js +22 -0
- package/dist/server/server/table-productos_insumos.js +47 -0
- package/dist/server/server/table-usuarios.js +44 -0
- package/dist/server/{types-contable.d.ts → server/types-contable.d.ts} +14 -3
- package/dist/server/server/types-contable.js +28 -0
- package/dist/unlogged/unlogged/adapt.js +8 -0
- package/dist/unlogged/unlogged/css/styles.styl +88 -0
- package/dist/unlogged/unlogged/img/login-logo-icon.png +0 -0
- package/dist/unlogged/unlogged/img/logo.png +0 -0
- package/dist/unlogged/unlogged/tsconfig.json +13 -0
- package/dist/unlogged/unlogged/unlogged.js +13 -0
- package/package.json +22 -5
- package/dist/client/client.js +0 -182
- package/dist/client/redux-formulario.js +0 -326
- package/dist/client/render-components.js +0 -617
- package/dist/client/render-formulario.js +0 -56
- package/dist/client/render-general.js +0 -172
- package/dist/client/render-handlers.js +0 -29
- package/dist/client/tipos.js +0 -13
- package/dist/server/app-contable.js +0 -192
- package/dist/server/def-config.d.ts +0 -1
- package/dist/server/def-config.js +0 -100
- package/dist/server/procedures-contable.js +0 -508
- package/dist/server/server-contable.js +0 -17
- package/dist/server/table-categorias_producto.js +0 -29
- package/dist/server/table-clientes.js +0 -56
- package/dist/server/table-condicion_iva.js +0 -29
- package/dist/server/table-estados_pedido.js +0 -33
- package/dist/server/table-estados_presupuesto.js +0 -34
- package/dist/server/table-insumos.js +0 -44
- package/dist/server/table-items_pedido.js +0 -48
- package/dist/server/table-items_presupuesto.js +0 -48
- package/dist/server/table-iva_productos.js +0 -29
- package/dist/server/table-parametros.js +0 -38
- package/dist/server/table-pedidos.js +0 -48
- package/dist/server/table-pedidos_pendientes.js +0 -28
- package/dist/server/table-pedidos_vencidos.js +0 -28
- package/dist/server/table-presupuestos.js +0 -56
- package/dist/server/table-productos.js +0 -70
- package/dist/server/table-productos_clientes.js +0 -22
- package/dist/server/table-productos_generales.js +0 -22
- package/dist/server/table-productos_insumos.js +0 -47
- package/dist/server/table-usuarios.js +0 -44
- package/dist/server/tsconfig.json +0 -10
- package/dist/server/types-contable.js +0 -28
- package/dist/unlogged/adapt.js +0 -8
- package/dist/unlogged/unlogged.js +0 -118
- /package/dist/client/{client.d.ts → client/client.d.ts} +0 -0
- /package/dist/client/{img → client/img}/bannersuperior.png +0 -0
- /package/dist/client/{menu.d.ts → client/menu.d.ts} +0 -0
- /package/dist/client/{redux-formulario.d.ts → client/redux-formulario.d.ts} +0 -0
- /package/dist/client/{render-components.d.ts → client/render-components.d.ts} +0 -0
- /package/dist/client/{render-components.tsx → client/render-components.tsx} +0 -0
- /package/dist/client/{render-formulario.d.ts → client/render-formulario.d.ts} +0 -0
- /package/dist/client/{render-formulario.tsx → client/render-formulario.tsx} +0 -0
- /package/dist/client/{render-general.d.ts → client/render-general.d.ts} +0 -0
- /package/dist/client/{render-general.tsx → client/render-general.tsx} +0 -0
- /package/dist/client/{render-handlers.d.ts → client/render-handlers.d.ts} +0 -0
- /package/dist/client/{tipos.d.ts → client/tipos.d.ts} +0 -0
- /package/dist/{unlogged → client/unlogged}/css/styles.styl +0 -0
- /package/dist/{unlogged/img/login-logo-icon.png.png → client/unlogged/img/login-logo-icon.png} +0 -0
- /package/dist/{unlogged → client/unlogged}/img/logo.png +0 -0
- /package/dist/server/{procedures-contable.d.ts → server/procedures-contable.d.ts} +0 -0
- /package/dist/server/{server-contable.d.ts → server/server-contable.d.ts} +0 -0
- /package/dist/server/{table-categorias_producto.d.ts → server/table-categorias_producto.d.ts} +0 -0
- /package/dist/server/{table-clientes.d.ts → server/table-clientes.d.ts} +0 -0
- /package/dist/server/{table-condicion_iva.d.ts → server/table-condicion_iva.d.ts} +0 -0
- /package/dist/server/{table-estados_pedido.d.ts → server/table-estados_pedido.d.ts} +0 -0
- /package/dist/server/{table-estados_presupuesto.d.ts → server/table-estados_presupuesto.d.ts} +0 -0
- /package/dist/server/{table-insumos.d.ts → server/table-insumos.d.ts} +0 -0
- /package/dist/server/{table-items_pedido.d.ts → server/table-items_pedido.d.ts} +0 -0
- /package/dist/server/{table-items_presupuesto.d.ts → server/table-items_presupuesto.d.ts} +0 -0
- /package/dist/server/{table-iva_productos.d.ts → server/table-iva_productos.d.ts} +0 -0
- /package/dist/server/{table-parametros.d.ts → server/table-parametros.d.ts} +0 -0
- /package/dist/server/{table-pedidos.d.ts → server/table-pedidos.d.ts} +0 -0
- /package/dist/server/{table-pedidos_pendientes.d.ts → server/table-pedidos_pendientes.d.ts} +0 -0
- /package/dist/server/{table-pedidos_vencidos.d.ts → server/table-pedidos_vencidos.d.ts} +0 -0
- /package/dist/server/{table-presupuestos.d.ts → server/table-presupuestos.d.ts} +0 -0
- /package/dist/server/{table-productos.d.ts → server/table-productos.d.ts} +0 -0
- /package/dist/server/{table-productos_clientes.d.ts → server/table-productos_clientes.d.ts} +0 -0
- /package/dist/server/{table-productos_generales.d.ts → server/table-productos_generales.d.ts} +0 -0
- /package/dist/server/{table-productos_insumos.d.ts → server/table-productos_insumos.d.ts} +0 -0
- /package/dist/server/{table-usuarios.d.ts → server/table-usuarios.d.ts} +0 -0
- /package/dist/unlogged/{adapt.d.ts → unlogged/adapt.d.ts} +0 -0
- /package/dist/unlogged/{unlogged.d.ts → unlogged/unlogged.d.ts} +0 -0
package/dist/client/client.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "js-to-html", "myOwn", "typed-controls", "./redux-formulario"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const js_to_html_1 = require("js-to-html");
|
|
13
|
-
const myOwn = require("myOwn");
|
|
14
|
-
const TypedControls = require("typed-controls");
|
|
15
|
-
const redux_formulario_1 = require("./redux-formulario");
|
|
16
|
-
var my = myOwn;
|
|
17
|
-
myOwn.wScreens.tablero = function (_addrParams) {
|
|
18
|
-
var mainLayout = document.getElementById('main_layout');
|
|
19
|
-
mainLayout.appendChild(js_to_html_1.html.h1(`Tablero de control`).create());
|
|
20
|
-
['vencidos', 'pendientes'].forEach((element) => {
|
|
21
|
-
mainLayout.appendChild(js_to_html_1.html.h2(`Pedidos ${element}`).create());
|
|
22
|
-
var myDiv = js_to_html_1.html.div().create();
|
|
23
|
-
mainLayout.appendChild(myDiv);
|
|
24
|
-
my.tableGrid(`pedidos_${element}`, myDiv, {});
|
|
25
|
-
});
|
|
26
|
-
};
|
|
27
|
-
my.clientSides.verCliente = {
|
|
28
|
-
update: false,
|
|
29
|
-
prepare: function (depot, fieldName) {
|
|
30
|
-
var td = depot.rowControls[fieldName];
|
|
31
|
-
var boton = js_to_html_1.html.button({}, 'ver').create();
|
|
32
|
-
td.appendChild(boton);
|
|
33
|
-
td.onclick = async function () {
|
|
34
|
-
desplegarCliente(depot);
|
|
35
|
-
};
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
function colorearEstado(depot, pedidoOpresupuestoString) {
|
|
39
|
-
depot.rowControls['estado'].style.backgroundColor = depot.rowControls[`estados_${pedidoOpresupuestoString}__color`].getTypedValue();
|
|
40
|
-
}
|
|
41
|
-
my.clientSides.accionesPresupuesto = {
|
|
42
|
-
prepare: () => null,
|
|
43
|
-
update: function (depot, fieldName) {
|
|
44
|
-
let td = depot.rowControls[fieldName];
|
|
45
|
-
td.innerHTML = '';
|
|
46
|
-
colorearEstado(depot, 'presupuesto');
|
|
47
|
-
let td = depot.rowControls[fieldName];
|
|
48
|
-
let boton = my.createForkeableButton({ menuType: 'presupuesto', name: `gestionar,presupuesto`, label: "abrir" }, {});
|
|
49
|
-
boton.href = boton.href + '&' + 'presupuesto' + '=' + depot.row.presupuesto.toString();
|
|
50
|
-
td.appendChild(boton);
|
|
51
|
-
let puedeEditarPresupuesto = depot.rowControls['estados_presupuesto__permite_editar'].getTypedValue();
|
|
52
|
-
if (puedeEditarPresupuesto) {
|
|
53
|
-
let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: "aceptar" }, {});
|
|
54
|
-
boton.href = boton.href + '&presupuesto=' + depot.row['presupuesto'].toString();
|
|
55
|
-
td.appendChild(boton);
|
|
56
|
-
}
|
|
57
|
-
let presupuesto = depot.rowControls['presupuesto'].getTypedValue();
|
|
58
|
-
['anular', 'rechazar'].forEach((accion) => {
|
|
59
|
-
if (puedeEditarPresupuesto) {
|
|
60
|
-
let boton = js_to_html_1.html.button({}, accion).create();
|
|
61
|
-
boton.onclick = async () => {
|
|
62
|
-
await confirmPromise(`¿está por ${accion} el presupuesto? Esta acción no se podrá deshacer`);
|
|
63
|
-
try {
|
|
64
|
-
await my.ajax[`presupuesto_${accion}`]({
|
|
65
|
-
presupuesto
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
alertPromise(err.message);
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
let grid = depot.manager;
|
|
73
|
-
await grid.retrieveRowAndRefresh(depot);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
td.appendChild(boton);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
my.clientSides.accionesPedido = {
|
|
82
|
-
prepare: () => null,
|
|
83
|
-
update: function (depot, fieldName) {
|
|
84
|
-
let td = depot.rowControls[fieldName];
|
|
85
|
-
td.innerHTML = '';
|
|
86
|
-
colorearEstado(depot, 'pedido');
|
|
87
|
-
let td = depot.rowControls[fieldName];
|
|
88
|
-
let boton = my.createForkeableButton({ menuType: 'pedido', name: `gestionar,pedido`, label: "abrir" }, {});
|
|
89
|
-
boton.href = boton.href + '&' + 'pedido' + '=' + depot.row.pedido.toString();
|
|
90
|
-
td.appendChild(boton);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
myOwn.wScreens.presupuestos = function (_addrParams) {
|
|
94
|
-
var mainLayout = document.getElementById('main_layout');
|
|
95
|
-
var myDiv = js_to_html_1.html.div().create();
|
|
96
|
-
let boton = my.createForkeableButton({ menuType: 'presupuesto', name: 'gestionar,presupuesto', label: 'nuevo' }, {});
|
|
97
|
-
mainLayout.appendChild(boton);
|
|
98
|
-
mainLayout.appendChild(myDiv);
|
|
99
|
-
boton.onclick = async function () {
|
|
100
|
-
my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
|
|
101
|
-
};
|
|
102
|
-
my.tableGrid('presupuestos', myDiv, {});
|
|
103
|
-
};
|
|
104
|
-
myOwn.wScreens.pedidos = function (_addrParams) {
|
|
105
|
-
var mainLayout = document.getElementById('main_layout');
|
|
106
|
-
var myDiv = js_to_html_1.html.div().create();
|
|
107
|
-
let boton = my.createForkeableButton({ menuType: 'pedido', name: 'gestionar,pedido', label: 'nuevo' }, {});
|
|
108
|
-
//var boton = html.button({},'nuevo').create();
|
|
109
|
-
mainLayout.appendChild(boton);
|
|
110
|
-
mainLayout.appendChild(myDiv);
|
|
111
|
-
boton.onclick = async function () {
|
|
112
|
-
my.removeSessionVar(redux_formulario_1.STORAGE_STATE_NAME);
|
|
113
|
-
//history.replaceState(null, null, location.origin+location.pathname+my.menuSeparator+'i=gestionar,pedido');
|
|
114
|
-
//my.showPage();
|
|
115
|
-
};
|
|
116
|
-
my.tableGrid('pedidos', myDiv, {});
|
|
117
|
-
};
|
|
118
|
-
var validateHexaColor = (string) => /^#[0-9A-F]{6}$/i.test(string);
|
|
119
|
-
myOwn.clientSides.parsearColor = {
|
|
120
|
-
update: (depot, fieldName) => {
|
|
121
|
-
var myColor = depot.rowControls['color'].getTypedValue();
|
|
122
|
-
var isValidColor = validateHexaColor(myColor);
|
|
123
|
-
if (myColor && !isValidColor) {
|
|
124
|
-
alertPromise("color inválido!");
|
|
125
|
-
depot.rowControls['color'].setTypedValue(null, true);
|
|
126
|
-
}
|
|
127
|
-
var colorInput = js_to_html_1.html.input({ type: "color", value: isValidColor ? myColor : '#ffffff' }).create();
|
|
128
|
-
colorInput.onchange = () => {
|
|
129
|
-
depot.rowControls['color'].setTypedValue(colorInput.value, true);
|
|
130
|
-
};
|
|
131
|
-
depot.rowControls[fieldName].innerHTML = '';
|
|
132
|
-
depot.rowControls[fieldName].appendChild(colorInput);
|
|
133
|
-
},
|
|
134
|
-
prepare: (depot, fieldName) => { }
|
|
135
|
-
};
|
|
136
|
-
my.clientSides.clonarProducto = {
|
|
137
|
-
update: false,
|
|
138
|
-
prepare: function (depot, fieldName) {
|
|
139
|
-
var { producto, nombre } = depot.row;
|
|
140
|
-
var td = depot.rowControls[fieldName];
|
|
141
|
-
var boton = js_to_html_1.html.button({}, 'clonar').create();
|
|
142
|
-
td.appendChild(boton);
|
|
143
|
-
td.onclick = async function () {
|
|
144
|
-
await confirmPromise(`confirma clonado de producto (${producto}) "${nombre}"?`);
|
|
145
|
-
var result = await my.ajax.producto_clonar({
|
|
146
|
-
producto,
|
|
147
|
-
});
|
|
148
|
-
var newDepot = depot.manager.createRowInsertElements(depot);
|
|
149
|
-
newDepot.manager.depotRefresh(newDepot, { updatedRow: result.productoNuevo, sendedForUpdate: {} });
|
|
150
|
-
newDepot.manager.retrieveRowAndRefresh(newDepot);
|
|
151
|
-
};
|
|
152
|
-
},
|
|
153
|
-
};
|
|
154
|
-
myOwn.autoSetupFunctions.push(function autoSetupMyTables() {
|
|
155
|
-
TypedControls.showLupa = false;
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
//EJEMPLO GUARDAR
|
|
159
|
-
//my.clientSides.guardar = {
|
|
160
|
-
// update: false,
|
|
161
|
-
// prepare: function (depot, fieldName) {
|
|
162
|
-
// var td = depot.rowControls[fieldName];
|
|
163
|
-
// var boton = html.button({},'guardar').create();
|
|
164
|
-
// td.appendChild(boton);
|
|
165
|
-
// td.onclick=async function(){
|
|
166
|
-
// var pkValues = {};
|
|
167
|
-
// pkValues['codigo']=depot.rowControls['codigo'].getTypedValue();
|
|
168
|
-
// var result = await my.ajax.object_get({
|
|
169
|
-
// tablename: 'clientes',
|
|
170
|
-
// pk_values: pkValues,
|
|
171
|
-
// });
|
|
172
|
-
// result.cuit_dni = '12345678';
|
|
173
|
-
// result.mail = 'manuel@123.com';
|
|
174
|
-
// var result2 = await my.ajax.object_save({
|
|
175
|
-
// tablename: 'clientes',
|
|
176
|
-
// datos: result,
|
|
177
|
-
// });
|
|
178
|
-
// console.log(result2);
|
|
179
|
-
// }
|
|
180
|
-
// },
|
|
181
|
-
//}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFBQSwyQ0FBeUM7SUFDekMsK0JBQStCO0lBQy9CLGdEQUFnRDtJQUVoRCx5REFBd0Q7SUFHeEQsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRWIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUMsVUFBUyxXQUFXO1FBQ3ZDLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBYyxFQUFDLEVBQUU7WUFDakQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLEtBQUssR0FBRyxpQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLE9BQU8sRUFBRSxFQUFDLEtBQUssRUFBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUMsQ0FBQztJQUVGLEVBQUUsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHO1FBQ3hCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFLFVBQVUsS0FBSyxFQUFFLFNBQVM7WUFDL0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMs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QU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFDLEVBQUMsVUFBVSxFQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7Z0JBQzlGLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDcEQsQ0FBQyxDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUE7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsaUJBQWlCO1FBQ3BELGFBQWEsQ0FBQyxRQUFRLEdBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDOztBQUVILGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUIsb0JBQW9CO0FBQ3BCLDRDQUE0QztBQUM1QyxnREFBZ0Q7QUFDaEQseURBQXlEO0FBQ3pELGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsZ0NBQWdDO0FBQ2hDLDZFQUE2RTtBQUM3RSxxREFBcUQ7QUFDckQsd0NBQXdDO0FBQ3hDLHNDQUFzQztBQUN0QyxpQkFBaUI7QUFDakIsMkNBQTJDO0FBQzNDLDZDQUE2QztBQUM3Qyx1REFBdUQ7QUFDdkQsd0NBQXdDO0FBQ3hDLGdDQUFnQztBQUNoQyxpQkFBaUI7QUFDakIsbUNBQW1DO0FBQ25DLFdBQVc7QUFDWCxRQUFRO0FBQ1IsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aHRtbCwgSHRtbFRhZ30gZnJvbSBcImpzLXRvLWh0bWxcIjtcclxuaW1wb3J0ICogYXMgbXlPd24gZnJvbSBcIm15T3duXCI7XHJcbmltcG9ydCAqIGFzIFR5cGVkQ29udHJvbHMgZnJvbSBcInR5cGVkLWNvbnRyb2xzXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQgeyBTVE9SQUdFX1NUQVRFX05BTUUgfSBmcm9tIFwiLi9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAbWF0ZXJpYWwtdWkvY29yZVwiO1xyXG5cclxudmFyIG15PW15T3duO1xyXG5cclxubXlPd24ud1NjcmVlbnMudGFibGVybz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoaHRtbC5oMShgVGFibGVybyBkZSBjb250cm9sYCkuY3JlYXRlKCkpO1xyXG4gICAgWyd2ZW5jaWRvcycsICdwZW5kaWVudGVzJ10uZm9yRWFjaCgoZWxlbWVudDpzdHJpbmcpPT57XHJcbiAgICAgICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChodG1sLmgyKGBQZWRpZG9zICR7ZWxlbWVudH1gKS5jcmVhdGUoKSk7XHJcbiAgICAgICAgdmFyIG15RGl2ID0gaHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgICAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKG15RGl2KTtcclxuICAgICAgICBteS50YWJsZUdyaWQoYHBlZGlkb3NfJHtlbGVtZW50fWAsbXlEaXYse30pO1xyXG4gICAgfSlcclxufTtcclxuXHJcbm15LmNsaWVudFNpZGVzLnZlckNsaWVudGUgPSB7XHJcbiAgICB1cGRhdGU6IGZhbHNlLFxyXG4gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCd2ZXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBkZXNwbGVnYXJDbGllbnRlKGRlcG90KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59XHJcblxyXG5mdW5jdGlvbiBjb2xvcmVhckVzdGFkbyhkZXBvdCxwZWRpZG9PcHJlc3VwdWVzdG9TdHJpbmc6J3BlZGlkbyd8J3ByZXN1cHVlc3RvJyApe1xyXG4gICAgZGVwb3Qucm93Q29udHJvbHNbJ2VzdGFkbyddLnN0eWxlLmJhY2tncm91bmRDb2xvcj1kZXBvdC5yb3dDb250cm9sc1tgZXN0YWRvc18ke3BlZGlkb09wcmVzdXB1ZXN0b1N0cmluZ31fX2NvbG9yYF0uZ2V0VHlwZWRWYWx1ZSgpO1xyXG59XHJcblxyXG5teS5jbGllbnRTaWRlcy5hY2Npb25lc1ByZXN1cHVlc3RvID0ge1xyXG4gICAgcHJlcGFyZTogKCk9Pm51bGwsXHJcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgY29sb3JlYXJFc3RhZG8oZGVwb3QsICdwcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncHJlc3VwdWVzdG8nLCBuYW1lOmBnZXN0aW9uYXIscHJlc3VwdWVzdG9gICwgbGFiZWw6XCJhYnJpclwifSwge30pO1xyXG4gICAgICAgIGJvdG9uLmhyZWYgPSBib3Rvbi5ocmVmICsgJyYnKyAncHJlc3VwdWVzdG8nKyc9JytkZXBvdC5yb3cucHJlc3VwdWVzdG8udG9TdHJpbmcoKVxyXG4gICAgICAgIHRkLmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgICAgICBsZXQgcHVlZGVFZGl0YXJQcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydlc3RhZG9zX3ByZXN1cHVlc3RvX19wZXJtaXRlX2VkaXRhciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBpZihwdWVkZUVkaXRhclByZXN1cHVlc3RvKXtcclxuICAgICAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOlwiYWNlcHRhclwifSwge30pO1xyXG4gICAgICAgICAgICBib3Rvbi5ocmVmID0gYm90b24uaHJlZiArICcmcHJlc3VwdWVzdG89JytkZXBvdC5yb3dbJ3ByZXN1cHVlc3RvJ10udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwcmVzdXB1ZXN0byA9IGRlcG90LnJvd0NvbnRyb2xzWydwcmVzdXB1ZXN0byddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICBbJ2FudWxhcicsICdyZWNoYXphciddLmZvckVhY2goKGFjY2lvbik9PntcclxuICAgICAgICAgICAgaWYocHVlZGVFZGl0YXJQcmVzdXB1ZXN0byl7XHJcbiAgICAgICAgICAgICAgICBsZXQgYm90b24gPSBodG1sLmJ1dHRvbih7fSxhY2Npb24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYm90b24ub25jbGljayA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29uZmlybVByb21pc2UoYMK/ZXN0w6EgcG9yICR7YWNjaW9ufSBlbCBwcmVzdXB1ZXN0bz8gRXN0YSBhY2Npw7NuIG5vIHNlIHBvZHLDoSBkZXNoYWNlcmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXkuYWpheFtgcHJlc3VwdWVzdG9fJHthY2Npb259YF0oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxufVxyXG5cclxubXkuY2xpZW50U2lkZXMuYWNjaW9uZXNQZWRpZG8gPSB7XHJcbiAgICBwcmVwYXJlOiAoKT0+bnVsbCxcclxuICAgIHVwZGF0ZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBjb2xvcmVhckVzdGFkbyhkZXBvdCwgJ3BlZGlkbycpO1xyXG4gICAgICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTpgZ2VzdGlvbmFyLHBlZGlkb2AgLCBsYWJlbDpcImFicmlyXCJ9LCB7fSk7XHJcbiAgICAgICAgYm90b24uaHJlZiA9IGJvdG9uLmhyZWYgKyAnJicrICdwZWRpZG8nKyc9JytkZXBvdC5yb3cucGVkaWRvLnRvU3RyaW5nKClcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICB9XHJcbn1cclxuXHJcbm15T3duLndTY3JlZW5zLnByZXN1cHVlc3Rvcz1mdW5jdGlvbihfYWRkclBhcmFtcyl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBteURpdiA9IGh0bWwuZGl2KCkuY3JlYXRlKCk7XHJcbiAgICBsZXQgYm90b24gPSBteS5jcmVhdGVGb3JrZWFibGVCdXR0b24oe21lbnVUeXBlOidwcmVzdXB1ZXN0bycsIG5hbWU6J2dlc3Rpb25hcixwcmVzdXB1ZXN0bycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChteURpdik7XHJcbiAgICBib3Rvbi5vbmNsaWNrPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbXkucmVtb3ZlU2Vzc2lvblZhcihTVE9SQUdFX1NUQVRFX05BTUUpO1xyXG4gICAgfVxyXG4gICAgbXkudGFibGVHcmlkKCdwcmVzdXB1ZXN0b3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbm15T3duLndTY3JlZW5zLnBlZGlkb3M9ZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICB2YXIgbXlEaXYgPSBodG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbGV0IGJvdG9uID0gbXkuY3JlYXRlRm9ya2VhYmxlQnV0dG9uKHttZW51VHlwZToncGVkaWRvJywgbmFtZTonZ2VzdGlvbmFyLHBlZGlkbycsIGxhYmVsOidudWV2byd9LHt9KTtcclxuICAgIC8vdmFyIGJvdG9uID0gaHRtbC5idXR0b24oe30sJ251ZXZvJykuY3JlYXRlKCk7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGJvdG9uKTtcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQobXlEaXYpO1xyXG4gICAgYm90b24ub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgIG15LnJlbW92ZVNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICAvL2hpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsIGxvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZStteS5tZW51U2VwYXJhdG9yKydpPWdlc3Rpb25hcixwZWRpZG8nKTtcclxuICAgICAgICAvL215LnNob3dQYWdlKCk7XHJcbiAgICB9XHJcbiAgICBteS50YWJsZUdyaWQoJ3BlZGlkb3MnLG15RGl2LHt9KTtcclxufTtcclxuXHJcbnZhciB2YWxpZGF0ZUhleGFDb2xvcj0oc3RyaW5nOnN0cmluZyk9PiAvXiNbMC05QS1GXXs2fSQvaS50ZXN0KHN0cmluZyk7XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5wYXJzZWFyQ29sb3I9e1xyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgbXlDb2xvciA9IGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLmdldFR5cGVkVmFsdWUoKTtcclxuICAgICAgICB2YXIgaXNWYWxpZENvbG9yPXZhbGlkYXRlSGV4YUNvbG9yKG15Q29sb3IpO1xyXG4gICAgICAgIGlmKG15Q29sb3IgJiYgIWlzVmFsaWRDb2xvcil7XHJcbiAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShcImNvbG9yIGludsOhbGlkbyFcIik7XHJcbiAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzWydjb2xvciddLnNldFR5cGVkVmFsdWUobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBjb2xvcklucHV0ID0gaHRtbC5pbnB1dCh7dHlwZTpcImNvbG9yXCIsIHZhbHVlOmlzVmFsaWRDb2xvcj9teUNvbG9yOicjZmZmZmZmJ30pLmNyZWF0ZSgpO1xyXG4gICAgICAgIGNvbG9ySW5wdXQub25jaGFuZ2U9KCk9PntcclxuICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbJ2NvbG9yJ10uc2V0VHlwZWRWYWx1ZShjb2xvcklucHV0LnZhbHVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXS5hcHBlbmRDaGlsZChjb2xvcklucHV0KTtcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiAoZGVwb3QsIGZpZWxkTmFtZSk9Pnt9XHJcbn1cclxuXHJcbm15LmNsaWVudFNpZGVzLmNsb25hclByb2R1Y3RvID0ge1xyXG4gICAgdXBkYXRlOiBmYWxzZSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdCwgZmllbGROYW1lKSB7XHJcbiAgICAgICAgdmFyIHtwcm9kdWN0bywgbm9tYnJlfSA9IGRlcG90LnJvdztcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKHt9LCdjbG9uYXInKS5jcmVhdGUoKTtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb25maXJtUHJvbWlzZShgY29uZmlybWEgY2xvbmFkbyBkZSBwcm9kdWN0byAoJHtwcm9kdWN0b30pIFwiJHtub21icmV9XCI/YCk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4LnByb2R1Y3RvX2Nsb25hcih7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0byxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHZhciBuZXdEZXBvdCA9IGRlcG90Lm1hbmFnZXIuY3JlYXRlUm93SW5zZXJ0RWxlbWVudHMoZGVwb3QpO1xyXG4gICAgICAgICAgICBuZXdEZXBvdC5tYW5hZ2VyLmRlcG90UmVmcmVzaChuZXdEZXBvdCx7dXBkYXRlZFJvdzpyZXN1bHQucHJvZHVjdG9OdWV2bywgc2VuZGVkRm9yVXBkYXRlOnt9fSk7XHJcbiAgICAgICAgICAgIG5ld0RlcG90Lm1hbmFnZXIucmV0cmlldmVSb3dBbmRSZWZyZXNoKG5ld0RlcG90KSAgICAgICAgXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbn1cclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uIGF1dG9TZXR1cE15VGFibGVzKCl7XHJcbiAgICBUeXBlZENvbnRyb2xzLnNob3dMdXBhPWZhbHNlO1xyXG59KTtcclxuXHJcbi8vRUpFTVBMTyBHVUFSREFSXHJcbi8vbXkuY2xpZW50U2lkZXMuZ3VhcmRhciA9IHtcclxuLy8gICAgdXBkYXRlOiBmYWxzZSxcclxuLy8gICAgcHJlcGFyZTogZnVuY3Rpb24gKGRlcG90LCBmaWVsZE5hbWUpIHtcclxuLy8gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbi8vICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbih7fSwnZ3VhcmRhcicpLmNyZWF0ZSgpO1xyXG4vLyAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4vLyAgICAgICAgdGQub25jbGljaz1hc3luYyBmdW5jdGlvbigpe1xyXG4vLyAgICAgICAgICAgIHZhciBwa1ZhbHVlcyA9IHt9O1xyXG4vLyAgICAgICAgICAgIHBrVmFsdWVzWydjb2RpZ28nXT1kZXBvdC5yb3dDb250cm9sc1snY29kaWdvJ10uZ2V0VHlwZWRWYWx1ZSgpO1xyXG4vLyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9nZXQoe1xyXG4vLyAgICAgICAgICAgICAgICB0YWJsZW5hbWU6ICdjbGllbnRlcycsXHJcbi8vICAgICAgICAgICAgICAgIHBrX3ZhbHVlczogcGtWYWx1ZXMsXHJcbi8vICAgICAgICAgICAgfSk7XHJcbi8vICAgICAgICAgICAgcmVzdWx0LmN1aXRfZG5pID0gJzEyMzQ1Njc4JztcclxuLy8gICAgICAgICAgICByZXN1bHQubWFpbCA9ICdtYW51ZWxAMTIzLmNvbSc7XHJcbi8vICAgICAgICAgICAgdmFyIHJlc3VsdDIgPSBhd2FpdCBteS5hamF4Lm9iamVjdF9zYXZlKHtcclxuLy8gICAgICAgICAgICAgICAgdGFibGVuYW1lOiAnY2xpZW50ZXMnLFxyXG4vLyAgICAgICAgICAgICAgICBkYXRvczogcmVzdWx0LFxyXG4vLyAgICAgICAgICAgIH0pO1xyXG4vLyAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdDIpO1xyXG4vLyAgICAgICAgfVxyXG4vLyAgICB9LFxyXG4vL30iXX0=
|
|
@@ -1,326 +0,0 @@
|
|
|
1
|
-
(function (factory) {
|
|
2
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
-
var v = factory(require, exports);
|
|
4
|
-
if (v !== undefined) module.exports = v;
|
|
5
|
-
}
|
|
6
|
-
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "redux", "redux-typed-reducer", "best-globals"], factory);
|
|
8
|
-
}
|
|
9
|
-
})(function (require, exports) {
|
|
10
|
-
"use strict";
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.inicializarPedido = exports.dispatchers = exports.STORAGE_STATE_NAME = void 0;
|
|
13
|
-
exports.crearItem = crearItem;
|
|
14
|
-
exports.calcularTotalLinea = calcularTotalLinea;
|
|
15
|
-
exports.calcularTotales = calcularTotales;
|
|
16
|
-
exports.traerEstructura = traerEstructura;
|
|
17
|
-
exports.guardarPresupuesto = guardarPresupuesto;
|
|
18
|
-
exports.guardarPedido = guardarPedido;
|
|
19
|
-
exports.createInitialStatePresupuesto = createInitialStatePresupuesto;
|
|
20
|
-
exports.createInitialStatePedido = createInitialStatePedido;
|
|
21
|
-
exports.crearStore = crearStore;
|
|
22
|
-
const redux_1 = require("redux");
|
|
23
|
-
const redux_typed_reducer_1 = require("redux-typed-reducer");
|
|
24
|
-
const best_globals_1 = require("best-globals");
|
|
25
|
-
const ESTADO_INICIAL_PEDIDO = "preparacion";
|
|
26
|
-
var my = myOwn;
|
|
27
|
-
exports.STORAGE_STATE_NAME = 'contable_state';
|
|
28
|
-
function crearItem() {
|
|
29
|
-
return {
|
|
30
|
-
cantidad: 1,
|
|
31
|
-
descuento: 0
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
function calcularTotalLinea(item) {
|
|
35
|
-
if (item.cantidad && item.precio_unitario) {
|
|
36
|
-
let subtotal = item.cantidad * item.precio_unitario;
|
|
37
|
-
let descuento = parseFloat((item.porcentaje_descuento ? subtotal / 100 * item.porcentaje_descuento : 0).toFixed(2));
|
|
38
|
-
let total = parseFloat((subtotal - descuento).toFixed(2));
|
|
39
|
-
return { descuento, total };
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
return { descuento: undefined, total: undefined };
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function calcularTotales(items, datos, datosDesde) {
|
|
46
|
-
let pedidoOpresupuestoIndex = datosDesde == "datosPedido" ? 'pedido' : 'presupuesto';
|
|
47
|
-
//@ts-ignore estoy seguro que llega bien
|
|
48
|
-
let pedidoOpresupuesto = datos[pedidoOpresupuestoIndex];
|
|
49
|
-
pedidoOpresupuesto.subtotal = items.reduce((acum, item) => acum + (item.total || 0), 0);
|
|
50
|
-
pedidoOpresupuesto.descuento = pedidoOpresupuesto.descuento || 0;
|
|
51
|
-
pedidoOpresupuesto.total = pedidoOpresupuesto.subtotal - (pedidoOpresupuesto.descuento || 0);
|
|
52
|
-
}
|
|
53
|
-
var reducers = {
|
|
54
|
-
SET_OPCION: (payload) => function (state) {
|
|
55
|
-
return {
|
|
56
|
-
...state,
|
|
57
|
-
opciones: {
|
|
58
|
-
...state.opciones,
|
|
59
|
-
[payload.opcion]: payload.valor
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
SET_CLIENTE: (payload) => function (state) {
|
|
64
|
-
return {
|
|
65
|
-
...state,
|
|
66
|
-
[payload.datosDesde]: {
|
|
67
|
-
...state[payload.datosDesde],
|
|
68
|
-
cliente: payload.cliente
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
},
|
|
72
|
-
ADD_ITEM: (payload) => function (state) {
|
|
73
|
-
var items = state[payload.datosDesde].items;
|
|
74
|
-
items.push(crearItem());
|
|
75
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
76
|
-
return {
|
|
77
|
-
...state,
|
|
78
|
-
[payload.datosDesde]: {
|
|
79
|
-
...state[payload.datosDesde],
|
|
80
|
-
items: items
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
},
|
|
84
|
-
REMOVE_ITEM: (payload) => function (state) {
|
|
85
|
-
var items = state[payload.datosDesde].items;
|
|
86
|
-
items.splice(payload.index, 1);
|
|
87
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
88
|
-
if (items.length == 0) {
|
|
89
|
-
items.push(crearItem());
|
|
90
|
-
}
|
|
91
|
-
return {
|
|
92
|
-
...state,
|
|
93
|
-
[payload.datosDesde]: {
|
|
94
|
-
...state[payload.datosDesde],
|
|
95
|
-
items: items
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
},
|
|
99
|
-
SET_PRODUCTO_ITEM: (payload) => function (state) {
|
|
100
|
-
let { index, producto } = payload;
|
|
101
|
-
let items = state[payload.datosDesde].items;
|
|
102
|
-
items[index].producto = producto ? producto.producto : undefined;
|
|
103
|
-
items[index].nombre = producto ? producto.nombre : undefined;
|
|
104
|
-
items[index].descripcion = producto ? producto.descripcion : undefined;
|
|
105
|
-
items[index].precio_unitario = producto ? producto.precio : undefined;
|
|
106
|
-
let { descuento, total } = calcularTotalLinea(items[index]);
|
|
107
|
-
items[index].descuento = descuento;
|
|
108
|
-
items[index].total = total;
|
|
109
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
110
|
-
return {
|
|
111
|
-
...state,
|
|
112
|
-
[payload.datosDesde]: {
|
|
113
|
-
...state[payload.datosDesde],
|
|
114
|
-
items: items
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
},
|
|
118
|
-
SET_FIELD_CUSTOM_ITEM: (payload) => function (state) {
|
|
119
|
-
let { index, campo, valor } = payload;
|
|
120
|
-
let items = state[payload.datosDesde].items;
|
|
121
|
-
// @ts-ignore sé que el indice y el campo existen
|
|
122
|
-
items[index][campo] = valor;
|
|
123
|
-
let { descuento, total } = calcularTotalLinea(items[index]);
|
|
124
|
-
items[index].descuento = descuento;
|
|
125
|
-
items[index].total = total;
|
|
126
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
127
|
-
return {
|
|
128
|
-
...state,
|
|
129
|
-
[payload.datosDesde]: {
|
|
130
|
-
...state[payload.datosDesde],
|
|
131
|
-
items: items
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
},
|
|
135
|
-
SET_CANTIDAD_ITEM: (payload) => function (state) {
|
|
136
|
-
let { index, cantidad } = payload;
|
|
137
|
-
let items = state[payload.datosDesde].items;
|
|
138
|
-
items[index].cantidad = cantidad || undefined;
|
|
139
|
-
let { descuento, total } = calcularTotalLinea(items[index]);
|
|
140
|
-
items[index].descuento = descuento;
|
|
141
|
-
items[index].total = total;
|
|
142
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
143
|
-
return {
|
|
144
|
-
...state,
|
|
145
|
-
[payload.datosDesde]: {
|
|
146
|
-
...state[payload.datosDesde],
|
|
147
|
-
items: items
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
},
|
|
151
|
-
SET_DESCUENTO_ITEM: (payload) => function (state) {
|
|
152
|
-
let { index, porcentaje } = payload;
|
|
153
|
-
let items = state[payload.datosDesde].items;
|
|
154
|
-
items[index].porcentaje_descuento = porcentaje;
|
|
155
|
-
let { descuento, total } = calcularTotalLinea(items[index]);
|
|
156
|
-
items[index].descuento = descuento;
|
|
157
|
-
items[index].total = total;
|
|
158
|
-
calcularTotales(items, state[payload.datosDesde], payload.datosDesde);
|
|
159
|
-
return {
|
|
160
|
-
...state,
|
|
161
|
-
[payload.datosDesde]: {
|
|
162
|
-
...state[payload.datosDesde],
|
|
163
|
-
items: items
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
},
|
|
167
|
-
SET_DESCUENTO_PRESUPUESTO: (payload) => function (state) {
|
|
168
|
-
var { descuento } = payload;
|
|
169
|
-
var items = state.datosPresupuesto.items;
|
|
170
|
-
var myState = {
|
|
171
|
-
...state,
|
|
172
|
-
datosPresupuesto: {
|
|
173
|
-
...state.datosPresupuesto,
|
|
174
|
-
presupuesto: {
|
|
175
|
-
...state.datosPresupuesto.presupuesto,
|
|
176
|
-
descuento: descuento
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
calcularTotales(items, myState.datosPresupuesto, 'datosPresupuesto');
|
|
181
|
-
return myState;
|
|
182
|
-
},
|
|
183
|
-
SET_DESCUENTO_PEDIDO: (payload) => function (state) {
|
|
184
|
-
var { descuento } = payload;
|
|
185
|
-
var items = state.datosPedido.items;
|
|
186
|
-
var myState = {
|
|
187
|
-
...state,
|
|
188
|
-
datosPedido: {
|
|
189
|
-
...state.datosPedido,
|
|
190
|
-
pedido: {
|
|
191
|
-
...state.datosPedido.pedido,
|
|
192
|
-
descuento: descuento
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
calcularTotales(items, myState.datosPedido, 'datosPedido');
|
|
197
|
-
return myState;
|
|
198
|
-
},
|
|
199
|
-
SET_CAMPO_PRESUPUESTO: (payload) => function (state) {
|
|
200
|
-
var { campo, valor } = payload;
|
|
201
|
-
return {
|
|
202
|
-
...state,
|
|
203
|
-
datosPresupuesto: {
|
|
204
|
-
...state.datosPresupuesto,
|
|
205
|
-
presupuesto: {
|
|
206
|
-
...state.datosPresupuesto.presupuesto,
|
|
207
|
-
[campo]: valor
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
},
|
|
212
|
-
SET_CAMPO_PEDIDO: (payload) => function (state) {
|
|
213
|
-
var { campo, valor } = payload;
|
|
214
|
-
return {
|
|
215
|
-
...state,
|
|
216
|
-
datosPedido: {
|
|
217
|
-
...state.datosPedido,
|
|
218
|
-
pedido: {
|
|
219
|
-
...state.datosPedido.pedido,
|
|
220
|
-
[campo]: valor
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
},
|
|
225
|
-
RESET_OPCIONES: (_payload) => function (state) {
|
|
226
|
-
return {
|
|
227
|
-
...state,
|
|
228
|
-
opciones: {
|
|
229
|
-
...state.opciones,
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
},
|
|
233
|
-
};
|
|
234
|
-
/* FIN ACCIONES */
|
|
235
|
-
exports.dispatchers = (0, redux_typed_reducer_1.createDispatchers)(reducers);
|
|
236
|
-
async function traerEstructura() {
|
|
237
|
-
var estructura = await my.ajax.estructura_crear();
|
|
238
|
-
return estructura;
|
|
239
|
-
}
|
|
240
|
-
async function guardarPresupuesto(cliente, presupuesto, items) {
|
|
241
|
-
return await my.ajax.presupuesto_guardar({ cliente, presupuesto, items });
|
|
242
|
-
}
|
|
243
|
-
async function guardarPedido(cliente, pedido, items) {
|
|
244
|
-
return await my.ajax.pedido_guardar({ cliente, pedido, items });
|
|
245
|
-
}
|
|
246
|
-
async function createInitialStatePresupuesto() {
|
|
247
|
-
var estructura = await traerEstructura();
|
|
248
|
-
var initialState = {
|
|
249
|
-
estructura,
|
|
250
|
-
datosPresupuesto: {
|
|
251
|
-
cliente: {},
|
|
252
|
-
items: [crearItem()],
|
|
253
|
-
presupuesto: {
|
|
254
|
-
estado: "espera",
|
|
255
|
-
fecha: best_globals_1.datetime.now().toYmd(),
|
|
256
|
-
//@ts-ignore se puede llamar
|
|
257
|
-
valido_hasta: (best_globals_1.datetime.now().add((0, best_globals_1.timeInterval)({ days: 7 }))).toYmd(),
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
opciones: {},
|
|
261
|
-
};
|
|
262
|
-
return initialState;
|
|
263
|
-
}
|
|
264
|
-
const inicializarPedido = () => {
|
|
265
|
-
return {
|
|
266
|
-
estado: ESTADO_INICIAL_PEDIDO,
|
|
267
|
-
fecha: best_globals_1.datetime.now().toYmd(),
|
|
268
|
-
//@ts-ignore se puede llamar
|
|
269
|
-
fecha_entrega: (best_globals_1.datetime.now().add((0, best_globals_1.timeInterval)({ days: 7 }))).toYmd(),
|
|
270
|
-
observaciones: null
|
|
271
|
-
};
|
|
272
|
-
};
|
|
273
|
-
exports.inicializarPedido = inicializarPedido;
|
|
274
|
-
async function createInitialStatePedido() {
|
|
275
|
-
var estructura = await traerEstructura();
|
|
276
|
-
var initialState = {
|
|
277
|
-
estructura,
|
|
278
|
-
datosPedido: {
|
|
279
|
-
cliente: {},
|
|
280
|
-
items: [crearItem()],
|
|
281
|
-
pedido: (0, exports.inicializarPedido)()
|
|
282
|
-
},
|
|
283
|
-
opciones: {},
|
|
284
|
-
};
|
|
285
|
-
return initialState;
|
|
286
|
-
}
|
|
287
|
-
async function crearStore(opts, createInitialState) {
|
|
288
|
-
opts.useSessionStorage = opts.useSessionStorage || false;
|
|
289
|
-
var loadState = async function loadState() {
|
|
290
|
-
var presupuestoState = opts.useSessionStorage ? my.getSessionVar(exports.STORAGE_STATE_NAME) : my.getLocalVar(exports.STORAGE_STATE_NAME);
|
|
291
|
-
if (presupuestoState) {
|
|
292
|
-
initialState = await createInitialState();
|
|
293
|
-
presupuestoState = { ...initialState, ...presupuestoState };
|
|
294
|
-
presupuestoState.estructura = { ...initialState.estructura };
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
var initialState = await createInitialState();
|
|
298
|
-
presupuestoState = initialState;
|
|
299
|
-
}
|
|
300
|
-
if (opts.datosPresupuesto) {
|
|
301
|
-
presupuestoState.datosPresupuesto = { ...presupuestoState.datosPresupuesto, ...opts.datosPresupuesto };
|
|
302
|
-
}
|
|
303
|
-
if (opts.datosPedido) {
|
|
304
|
-
presupuestoState.datosPedido = { ...presupuestoState.datosPedido, ...opts.datosPedido };
|
|
305
|
-
}
|
|
306
|
-
return presupuestoState;
|
|
307
|
-
};
|
|
308
|
-
var saveState = function saveState(state) {
|
|
309
|
-
opts.useSessionStorage ? my.setSessionVar(exports.STORAGE_STATE_NAME, state) : my.setLocalVar(exports.STORAGE_STATE_NAME, state);
|
|
310
|
-
};
|
|
311
|
-
/* DEFINICION CONTROLADOR */
|
|
312
|
-
var initialState = await loadState();
|
|
313
|
-
const reducer = (0, redux_typed_reducer_1.createReducer)(reducers, initialState);
|
|
314
|
-
/* FIN DEFINICION CONTROLADOR */
|
|
315
|
-
/* CARGA Y GUARDADO DE STATE */
|
|
316
|
-
/* CREACION STORE */
|
|
317
|
-
const store = (0, redux_1.createStore)(reducer, initialState);
|
|
318
|
-
saveState(store.getState());
|
|
319
|
-
store.subscribe(function () {
|
|
320
|
-
saveState(store.getState());
|
|
321
|
-
});
|
|
322
|
-
/* FIN CREACION STORE */
|
|
323
|
-
return store;
|
|
324
|
-
}
|
|
325
|
-
});
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvcmVkdXgtZm9ybXVsYXJpby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFlQSw4QkFLQztJQUVELGdEQVNDO0lBRUQsMENBT0M7SUEwTUQsMENBR0M7SUFFRCxnREFFQztJQUVELHNDQUVDO0lBRUQsc0VBaUJDO0lBWUQsNERBYUM7SUFFRCxnQ0EyQ0M7SUF0VkQsaUNBQW9DO0lBRXBDLDZEQUFvRjtJQUlwRiwrQ0FBMkQ7SUFHM0QsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUM7SUFFNUMsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRUEsUUFBQSxrQkFBa0IsR0FBRSxnQkFBZ0IsQ0FBQztJQUVsRCxTQUFnQixTQUFTO1FBQ3JCLE9BQU87WUFDSCxRQUFRLEVBQUMsQ0FBQztZQUNWLFNBQVMsRUFBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNMLENBQUM7SUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFTO1FBQ3hDLElBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFDLENBQUM7WUFDdEMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ2xELElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQSxDQUFDLENBQUEsUUFBUSxHQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVHLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUMsU0FBUyxFQUFFLEtB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Q0FBQTtRQUNELElBQUksU0FBUyxHQUFHLFNBQVMsU0FBUyxDQUFDLEtBQVc7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUMsYUFBYSxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQSxFQUFFLENBQUMsV0FBVyxDQUFDLDBCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pILENBQUMsQ0FBQTtRQUNELDRCQUE0QjtRQUM1QixJQUFJLFlBQVksR0FBUyxNQUFNLFNBQVMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUEsbUNBQWEsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEQsZ0NBQWdDO1FBQ2hDLCtCQUErQjtRQUMvQixvQkFBb0I7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRCxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNaLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNILHdCQUF3QjtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwicmVkdXhcIjtcclxuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgY3JlYXRlRGlzcGF0Y2hlcnMsIEFjdGlvbnNGcm9tIH0gZnJvbSBcInJlZHV4LXR5cGVkLXJlZHVjZXJcIjtcclxuaW1wb3J0IHtTdGF0ZSwgRXN0cnVjdHVyYSwgSXRlbSwgUHJlc3VwdWVzdG8sIERhdG9zUHJlc3VwdWVzdG8sIFBlZGlkbywgRGF0b3NQZWRpZG8sIERhdG9zRGVzZGV9IGZyb20gXCIuL3RpcG9zXCJcclxuaW1wb3J0ICogYXMgSlNPTjRhbGwgZnJvbSBcImpzb240YWxsXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2RhdGV0aW1lLCBkYXRlLCB0aW1lSW50ZXJ2YWwgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQgeyBDbGllbnRlLCBQcm9kdWN0bywgQ29uZGljaW9uSXZhIH0gZnJvbSBcIi4vdGlwb3NcIjtcclxuICAgIFxyXG5jb25zdCBFU1RBRE9fSU5JQ0lBTF9QRURJRE8gPSBcInByZXBhcmFjaW9uXCI7XHJcblxyXG52YXIgbXk9bXlPd247XHJcblxyXG5leHBvcnQgY29uc3QgU1RPUkFHRV9TVEFURV9OQU1FID0nY29udGFibGVfc3RhdGUnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWFySXRlbSgpOkl0ZW17XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbnRpZGFkOjEsXHJcbiAgICAgICAgZGVzY3VlbnRvOjBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyVG90YWxMaW5lYShpdGVtOkl0ZW0pe1xyXG4gICAgaWYoaXRlbS5jYW50aWRhZCAmJiBpdGVtLnByZWNpb191bml0YXJpbyl7XHJcbiAgICAgICAgbGV0IHN1YnRvdGFsID0gaXRlbS5jYW50aWRhZCppdGVtLnByZWNpb191bml0YXJpbztcclxuICAgICAgICBsZXQgZGVzY3VlbnRvID0gcGFyc2VGbG9hdCgoaXRlbS5wb3JjZW50YWplX2Rlc2N1ZW50bz9zdWJ0b3RhbC8xMDAqaXRlbS5wb3JjZW50YWplX2Rlc2N1ZW50bzowKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICBsZXQgdG90YWwgPSBwYXJzZUZsb2F0KChzdWJ0b3RhbCAtIGRlc2N1ZW50bykudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgcmV0dXJuIHtkZXNjdWVudG8sIHRvdGFsfTtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIHJldHVybiB7ZGVzY3VlbnRvOnVuZGVmaW5lZCwgdG90YWw6dW5kZWZpbmVkfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJUb3RhbGVzKGl0ZW1zOkl0ZW1bXSwgZGF0b3M6RGF0b3NQZWRpZG98RGF0b3NQcmVzdXB1ZXN0bywgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlKTp2b2lke1xyXG4gICAgbGV0IHBlZGlkb09wcmVzdXB1ZXN0b0luZGV4OidwZWRpZG8nfCdwcmVzdXB1ZXN0byc9ZGF0b3NEZXNkZT09XCJkYXRvc1BlZGlkb1wiPydwZWRpZG8nOidwcmVzdXB1ZXN0byc7XHJcbiAgICAvL0B0cy1pZ25vcmUgZXN0b3kgc2VndXJvIHF1ZSBsbGVnYSBiaWVuXHJcbiAgICBsZXQgcGVkaWRvT3ByZXN1cHVlc3RvOlBlZGlkb3xQcmVzdXB1ZXN0bz1kYXRvc1twZWRpZG9PcHJlc3VwdWVzdG9JbmRleF07XHJcbiAgICBwZWRpZG9PcHJlc3VwdWVzdG8uc3VidG90YWw9aXRlbXMucmVkdWNlKChhY3VtLCBpdGVtKSA9PiBhY3VtICsgKGl0ZW0udG90YWwgfHwgMCksIDApO1xyXG4gICAgcGVkaWRvT3ByZXN1cHVlc3RvLmRlc2N1ZW50bz1wZWRpZG9PcHJlc3VwdWVzdG8uZGVzY3VlbnRvIHx8IDA7XHJcbiAgICBwZWRpZG9PcHJlc3VwdWVzdG8udG90YWw9cGVkaWRvT3ByZXN1cHVlc3RvLnN1YnRvdGFsLShwZWRpZG9PcHJlc3VwdWVzdG8uZGVzY3VlbnRvfHwwKTtcclxufVxyXG5cclxudmFyIHJlZHVjZXJzPXtcclxuICAgIFNFVF9PUENJT046IChwYXlsb2FkOiB7b3BjaW9uOmtleW9mIFN0YXRlWydvcGNpb25lcyddLCB2YWxvcjphbnl9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BheWxvYWQub3BjaW9uXTogcGF5bG9hZC52YWxvclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9DTElFTlRFOiAocGF5bG9hZDoge2NsaWVudGU6Q2xpZW50ZSwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50ZTogcGF5bG9hZC5jbGllbnRlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgQUREX0lURU06IChwYXlsb2FkOiB7ZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXJJdGVtKCkpO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgUkVNT1ZFX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBkYXRvc0Rlc2RlOkRhdG9zRGVzZGV9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICB2YXIgaXRlbXM9c3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXS5pdGVtcztcclxuICAgICAgICAgICAgaXRlbXMuc3BsaWNlKHBheWxvYWQuaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIGlmKGl0ZW1zLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWFySXRlbSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBbcGF5bG9hZC5kYXRvc0Rlc2RlXTp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczppdGVtc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9QUk9EVUNUT19JVEVNOiAocGF5bG9hZDoge2luZGV4Om51bWJlciwgcHJvZHVjdG86UHJvZHVjdG98bnVsbCwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgbGV0IHtpbmRleCwgcHJvZHVjdG99ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbGV0IGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5wcm9kdWN0bz1wcm9kdWN0bz9wcm9kdWN0by5wcm9kdWN0bzp1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5ub21icmU9cHJvZHVjdG8/cHJvZHVjdG8ubm9tYnJlOnVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLmRlc2NyaXBjaW9uPXByb2R1Y3RvP3Byb2R1Y3RvLmRlc2NyaXBjaW9uOnVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnByZWNpb191bml0YXJpbz1wcm9kdWN0bz9wcm9kdWN0by5wcmVjaW86dW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQge2Rlc2N1ZW50bywgdG90YWx9ID0gY2FsY3VsYXJUb3RhbExpbmVhKGl0ZW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5kZXNjdWVudG89ZGVzY3VlbnRvO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0udG90YWw9dG90YWw7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSwgcGF5bG9hZC5kYXRvc0Rlc2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6aXRlbXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBTRVRfRklFTERfQ1VTVE9NX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBjYW1wbzprZXlvZiBJdGVtLCB2YWxvcjpudW1iZXJ8c3RyaW5nfG51bGwsIGRhdG9zRGVzZGU6RGF0b3NEZXNkZX0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIGxldCB7aW5kZXgsIGNhbXBvLCB2YWxvcn0gPSBwYXlsb2FkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbXM9c3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXS5pdGVtcztcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBzw6kgcXVlIGVsIGluZGljZSB5IGVsIGNhbXBvIGV4aXN0ZW5cclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdW2NhbXBvXT12YWxvcjtcclxuICAgICAgICAgICAgbGV0IHtkZXNjdWVudG8sIHRvdGFsfSA9IGNhbGN1bGFyVG90YWxMaW5lYShpdGVtc1tpbmRleF0pO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0uZGVzY3VlbnRvPWRlc2N1ZW50bztcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnRvdGFsPXRvdGFsO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTlRJREFEX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBjYW50aWRhZDpudW1iZXJ8bnVsbCwgZGF0b3NEZXNkZTpEYXRvc0Rlc2RlfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgbGV0IHtpbmRleCwgY2FudGlkYWR9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgbGV0IGl0ZW1zPXN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0uaXRlbXM7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5jYW50aWRhZD1jYW50aWRhZHx8dW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBsZXQge2Rlc2N1ZW50bywgdG90YWx9ID0gY2FsY3VsYXJUb3RhbExpbmVhKGl0ZW1zW2luZGV4XSk7XHJcbiAgICAgICAgICAgIGl0ZW1zW2luZGV4XS5kZXNjdWVudG89ZGVzY3VlbnRvO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0udG90YWw9dG90YWw7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgc3RhdGVbcGF5bG9hZC5kYXRvc0Rlc2RlXSwgcGF5bG9hZC5kYXRvc0Rlc2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgW3BheWxvYWQuZGF0b3NEZXNkZV06e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6aXRlbXNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBTRVRfREVTQ1VFTlRPX0lURU06IChwYXlsb2FkOiB7aW5kZXg6bnVtYmVyLCBwb3JjZW50YWplOm51bWJlcnxudWxsLCBkYXRvc0Rlc2RlOkRhdG9zRGVzZGV9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICBsZXQge2luZGV4LCBwb3JjZW50YWplfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtcz1zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLml0ZW1zO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0ucG9yY2VudGFqZV9kZXNjdWVudG89cG9yY2VudGFqZTtcclxuICAgICAgICAgICAgbGV0IHtkZXNjdWVudG8sIHRvdGFsfSA9IGNhbGN1bGFyVG90YWxMaW5lYShpdGVtc1tpbmRleF0pO1xyXG4gICAgICAgICAgICBpdGVtc1tpbmRleF0uZGVzY3VlbnRvPWRlc2N1ZW50bztcclxuICAgICAgICAgICAgaXRlbXNbaW5kZXhdLnRvdGFsPXRvdGFsO1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIHN0YXRlW3BheWxvYWQuZGF0b3NEZXNkZV0sIHBheWxvYWQuZGF0b3NEZXNkZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIFtwYXlsb2FkLmRhdG9zRGVzZGVdOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtwYXlsb2FkLmRhdG9zRGVzZGVdLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOml0ZW1zXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgU0VUX0RFU0NVRU5UT19QUkVTVVBVRVNUTzogKHBheWxvYWQ6IHtkZXNjdWVudG86bnVtYmVyfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIHtkZXNjdWVudG99ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgdmFyIGl0ZW1zPXN0YXRlLmRhdG9zUHJlc3VwdWVzdG8uaXRlbXM7XHJcbiAgICAgICAgICAgIHZhciBteVN0YXRlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBkYXRvc1ByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgIHByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUuZGF0b3NQcmVzdXB1ZXN0by5wcmVzdXB1ZXN0byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3VlbnRvOiBkZXNjdWVudG9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhbGN1bGFyVG90YWxlcyhpdGVtcywgbXlTdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLCAnZGF0b3NQcmVzdXB1ZXN0bycpO1xyXG4gICAgICAgICAgICByZXR1cm4gbXlTdGF0ZTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0RFU0NVRU5UT19QRURJRE86IChwYXlsb2FkOiB7ZGVzY3VlbnRvOm51bWJlcn0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciB7ZGVzY3VlbnRvfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIHZhciBpdGVtcz1zdGF0ZS5kYXRvc1BlZGlkby5pdGVtcztcclxuICAgICAgICAgICAgdmFyIG15U3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIGRhdG9zUGVkaWRvOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1BlZGlkbyxcclxuICAgICAgICAgICAgICAgICAgICBwZWRpZG86e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1BlZGlkby5wZWRpZG8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2N1ZW50bzogZGVzY3VlbnRvXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYWxjdWxhclRvdGFsZXMoaXRlbXMsIG15U3RhdGUuZGF0b3NQZWRpZG8sICdkYXRvc1BlZGlkbycpO1xyXG4gICAgICAgICAgICByZXR1cm4gbXlTdGF0ZTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTVBPX1BSRVNVUFVFU1RPOiAocGF5bG9hZDoge2NhbXBvOmtleW9mIFByZXN1cHVlc3RvLCB2YWxvcjpzdHJpbmd8bnVtYmVyfGJvb2xlYW58bnVsbH0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBTdGF0ZSl7XHJcbiAgICAgICAgICAgIHZhciB7Y2FtcG8sIHZhbG9yfSA9IHBheWxvYWQ7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIGRhdG9zUHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUHJlc3VwdWVzdG8sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5kYXRvc1ByZXN1cHVlc3RvLnByZXN1cHVlc3RvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FtcG9dOiB2YWxvclxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9LFxyXG4gICAgU0VUX0NBTVBPX1BFRElETzogKHBheWxvYWQ6IHtjYW1wbzprZXlvZiBQZWRpZG8sIHZhbG9yOnN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IFN0YXRlKXtcclxuICAgICAgICAgICAgdmFyIHtjYW1wbywgdmFsb3J9ID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NQZWRpZG86e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUGVkaWRvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBlZGlkbzp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLmRhdG9zUGVkaWRvLnBlZGlkbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbXBvXTogdmFsb3JcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgIFJFU0VUX09QQ0lPTkVTOiAoX3BheWxvYWQ6IHt9KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBBY3Rpb25Gb3JtdWxhcmlvU3RhdGUgPSBBY3Rpb25zRnJvbTx0eXBlb2YgcmVkdWNlcnM+O1xyXG4vKiBGSU4gQUNDSU9ORVMgKi9cclxuXHJcbmV4cG9ydCBjb25zdCBkaXNwYXRjaGVycyA9IGNyZWF0ZURpc3BhdGNoZXJzKHJlZHVjZXJzKTtcclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFlckVzdHJ1Y3R1cmEoKXtcclxuICAgIHZhciBlc3RydWN0dXJhOiBFc3RydWN0dXJhID0gYXdhaXQgbXkuYWpheC5lc3RydWN0dXJhX2NyZWFyKCk7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGd1YXJkYXJQcmVzdXB1ZXN0byhjbGllbnRlOkNsaWVudGUsIHByZXN1cHVlc3RvOlByZXN1cHVlc3RvLCBpdGVtczpJdGVtW10pe1xyXG4gICAgcmV0dXJuIGF3YWl0IG15LmFqYXgucHJlc3VwdWVzdG9fZ3VhcmRhcih7Y2xpZW50ZSwgcHJlc3VwdWVzdG8sIGl0ZW1zfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBndWFyZGFyUGVkaWRvKGNsaWVudGU6Q2xpZW50ZSwgcGVkaWRvOlBlZGlkbywgaXRlbXM6SXRlbVtdKXtcclxuICAgIHJldHVybiBhd2FpdCBteS5hamF4LnBlZGlkb19ndWFyZGFyKHtjbGllbnRlLCBwZWRpZG8sIGl0ZW1zfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVQcmVzdXB1ZXN0bygpe1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBpbml0aWFsU3RhdGU6U3RhdGUgPSB7XHJcbiAgICAgICAgZXN0cnVjdHVyYSxcclxuICAgICAgICBkYXRvc1ByZXN1cHVlc3RvOntcclxuICAgICAgICAgICAgY2xpZW50ZTp7fSxcclxuICAgICAgICAgICAgaXRlbXM6W2NyZWFySXRlbSgpXSxcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG86e1xyXG4gICAgICAgICAgICAgICAgZXN0YWRvOiBcImVzcGVyYVwiLFxyXG4gICAgICAgICAgICAgICAgZmVjaGE6IGRhdGV0aW1lLm5vdygpLnRvWW1kKCksXHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgc2UgcHVlZGUgbGxhbWFyXHJcbiAgICAgICAgICAgICAgICB2YWxpZG9faGFzdGE6IChkYXRldGltZS5ub3coKS5hZGQodGltZUludGVydmFsKHtkYXlzOjd9KSkpLnRvWW1kKCksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9wY2lvbmVzOnt9LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBpbml0aWFsU3RhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbmljaWFsaXphclBlZGlkbz0oKT0+e1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBlc3RhZG86IEVTVEFET19JTklDSUFMX1BFRElETyxcclxuICAgICAgICBmZWNoYTogZGF0ZXRpbWUubm93KCkudG9ZbWQoKSxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgc2UgcHVlZGUgbGxhbWFyXHJcbiAgICAgICAgZmVjaGFfZW50cmVnYTogKGRhdGV0aW1lLm5vdygpLmFkZCh0aW1lSW50ZXJ2YWwoe2RheXM6N30pKSkudG9ZbWQoKSxcclxuICAgICAgICBvYnNlcnZhY2lvbmVzOiBudWxsXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVQZWRpZG8oKXtcclxuICAgIFxyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoKTtcclxuICAgIHZhciBpbml0aWFsU3RhdGU6U3RhdGUgPSB7XHJcbiAgICAgICAgZXN0cnVjdHVyYSxcclxuICAgICAgICBkYXRvc1BlZGlkbzp7XHJcbiAgICAgICAgICAgIGNsaWVudGU6e30sXHJcbiAgICAgICAgICAgIGl0ZW1zOltjcmVhckl0ZW0oKV0sXHJcbiAgICAgICAgICAgIHBlZGlkbzogaW5pY2lhbGl6YXJQZWRpZG8oKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3BjaW9uZXM6e30sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWFyU3RvcmUoXHJcbiAgICBvcHRzOntcclxuICAgICAgICB1c2VTZXNzaW9uU3RvcmFnZT86Ym9vbGVhbiwgXHJcbiAgICAgICAgZGF0b3NQcmVzdXB1ZXN0bz86RGF0b3NQcmVzdXB1ZXN0byxcclxuICAgICAgICBkYXRvc1BlZGlkbz86RGF0b3NQZWRpZG9cclxuICAgIH0sIFxyXG4gICAgY3JlYXRlSW5pdGlhbFN0YXRlOigpPT5Qcm9taXNlPFN0YXRlPiwgXHJcbil7XHJcbiAgICBvcHRzLnVzZVNlc3Npb25TdG9yYWdlPSBvcHRzLnVzZVNlc3Npb25TdG9yYWdlfHxmYWxzZTtcclxuICAgIHZhciBsb2FkU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBsb2FkU3RhdGUoKTpQcm9taXNlPFN0YXRlPntcclxuICAgICAgICB2YXIgcHJlc3VwdWVzdG9TdGF0ZTpTdGF0ZXxudWxsID0gb3B0cy51c2VTZXNzaW9uU3RvcmFnZT9teS5nZXRTZXNzaW9uVmFyKFNUT1JBR0VfU1RBVEVfTkFNRSk6bXkuZ2V0TG9jYWxWYXIoU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgICAgICBpZihwcmVzdXB1ZXN0b1N0YXRlKXtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlID0gYXdhaXQgY3JlYXRlSW5pdGlhbFN0YXRlKCk7XHJcbiAgICAgICAgICAgIHByZXN1cHVlc3RvU3RhdGUgPSB7Li4uaW5pdGlhbFN0YXRlLCAuLi5wcmVzdXB1ZXN0b1N0YXRlfTtcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG9TdGF0ZS5lc3RydWN0dXJhID0gey4uLmluaXRpYWxTdGF0ZS5lc3RydWN0dXJhfTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGF3YWl0IGNyZWF0ZUluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgICAgICBwcmVzdXB1ZXN0b1N0YXRlID0gaW5pdGlhbFN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRzLmRhdG9zUHJlc3VwdWVzdG8pe1xyXG4gICAgICAgICAgICBwcmVzdXB1ZXN0b1N0YXRlLmRhdG9zUHJlc3VwdWVzdG89ey4uLnByZXN1cHVlc3RvU3RhdGUuZGF0b3NQcmVzdXB1ZXN0bywgLi4ub3B0cy5kYXRvc1ByZXN1cHVlc3RvfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRzLmRhdG9zUGVkaWRvKXtcclxuICAgICAgICAgICAgcHJlc3VwdWVzdG9TdGF0ZS5kYXRvc1BlZGlkbz17Li4ucHJlc3VwdWVzdG9TdGF0ZS5kYXRvc1BlZGlkbywgLi4ub3B0cy5kYXRvc1BlZGlkb31cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHByZXN1cHVlc3RvU3RhdGU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2F2ZVN0YXRlID0gZnVuY3Rpb24gc2F2ZVN0YXRlKHN0YXRlOlN0YXRlKXtcclxuICAgICAgICBvcHRzLnVzZVNlc3Npb25TdG9yYWdlP215LnNldFNlc3Npb25WYXIoU1RPUkFHRV9TVEFURV9OQU1FLCBzdGF0ZSk6bXkuc2V0TG9jYWxWYXIoU1RPUkFHRV9TVEFURV9OQU1FLCBzdGF0ZSk7XHJcbiAgICB9XHJcbiAgICAvKiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICB2YXIgaW5pdGlhbFN0YXRlOlN0YXRlID0gYXdhaXQgbG9hZFN0YXRlKCk7XHJcbiAgICBjb25zdCByZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VycywgaW5pdGlhbFN0YXRlKTtcclxuICAgIC8qIEZJTiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICAvKiBDQVJHQSBZIEdVQVJEQURPIERFIFNUQVRFICovXHJcbiAgICAvKiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBpbml0aWFsU3RhdGUpOyBcclxuICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbigpe1xyXG4gICAgICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIH0pO1xyXG4gICAgLyogRklOIENSRUFDSU9OIFNUT1JFICovXHJcbiAgICByZXR1cm4gc3RvcmU7XHJcbn1cclxuXHJcbiJdfQ==
|