forked from qwerty/tupali
418 lines
18 KiB
JavaScript
418 lines
18 KiB
JavaScript
//// funciones upload_generico
|
|
|
|
|
|
$(function () {
|
|
$('[data-toggle="tooltip"]').tooltip()
|
|
}) ;
|
|
function selectedFile(campo,item) {
|
|
var campo;
|
|
var item;
|
|
var nombre = campo+"["+item+"]";
|
|
var archivoSeleccionado = document.getElementById(campo+"-"+item);
|
|
// alert(nombre);
|
|
var file = archivoSeleccionado.files[0];
|
|
if (file) {
|
|
var fileSize = 0;
|
|
if (file.size > 1048576)
|
|
fileSize = (Math.round(file.size * 100 / 1048576) / 100).toString() + ' MB';
|
|
else
|
|
fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + ' Kb';
|
|
if (file.size > 5242880) {
|
|
alert("El archivo no debe exceder 5MB");
|
|
document.getElementById("div_preview_"+nombre).innerHTML = "<div class='alert alert-danger'><h1>Archivo no valido<small> " + file.name+"</small></h1></div>";
|
|
/// xmlHTTP.addEventListener("error", uploadFailed, false);
|
|
}else{
|
|
|
|
var divfileSize = document.getElementById('fileSize_'+nombre);
|
|
var divfileType = document.getElementById('fileType_'+nombre);
|
|
var divfileName = document.getElementById('fileName_'+nombre);
|
|
divfileSize.innerHTML = 'Tamaño: <strong>' + fileSize+"</strong>";
|
|
divfileType.innerHTML = 'Tipo: <strong>' + file.type+"</strong>";
|
|
divfileName.innerHTML = 'Nombre original: <strong>' + file.name+"</strong>" ;
|
|
if ((file.type != "image/jpeg") && (file.type != "image/png") ) {
|
|
document.getElementById("div_preview_"+nombre).innerHTML = "<h2><i class='fa fa-file' aria-hidden='true'></i><br>"+file.type+"</h2>";
|
|
}else{
|
|
document.getElementById("div_preview_"+nombre).innerHTML = "<h2>"+file.type+"</h2>";
|
|
document.getElementById("image_preview_"+nombre).src = window.URL.createObjectURL(archivoSeleccionado.files[0]);
|
|
// document.getElementById("image_preview_"+nombre).alt = file.type;
|
|
}
|
|
document.getElementById("alert_"+nombre).className = "alert alert-success";
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
function uploadFile(campo,item) {
|
|
var campo;
|
|
var item;
|
|
var nombre = campo+"["+item+"]";
|
|
|
|
var archivoSeleccionado = document.getElementById(campo+"-"+item);
|
|
var file = archivoSeleccionado.files[0];
|
|
var extension = getFileExtension(file.name);
|
|
var nombrecillo = hex_md5(Math.random()+file.name)+"."+extension;
|
|
// var arreglo = '[{"nombre_original":"'+file.name+'","tipo":"'+file.type+'","nombre":"'+nombrecillo+'","campo":"'+campo+'","item":"'+item+'","size":"'+file.size+'","extensión":"'+extension+'"}]';
|
|
//var myJsonString = JSON.stringify(arreglo);
|
|
|
|
//document.getElementById(nombre).value=nombrecillo;
|
|
|
|
document.getElementById(nombre).value=nombrecillo;
|
|
|
|
var url = "milfs/includes/upload_generico.php?nombrecillo="+nombrecillo+"&campo="+campo+"&item="+item;
|
|
|
|
var fd = new FormData();
|
|
fd.append(campo+"-"+item, file);
|
|
|
|
var xmlHTTP= new XMLHttpRequest();
|
|
|
|
xmlHTTP.upload.addEventListener("progress", progressFunction, false);
|
|
document.getElementById("percentageCalc_"+nombre).innerHTML = "<strong>Archivo se subió con éxito </strong>";
|
|
xmlHTTP.addEventListener("error", uploadFailed, false);
|
|
xmlHTTP.addEventListener("abort", uploadCanceled, false);
|
|
xmlHTTP.open("POST", url, true);
|
|
//xmlHTTP.setRequestHeader('book_id','10');
|
|
xmlHTTP.send(fd);
|
|
}
|
|
|
|
function progressFunction(evt){
|
|
|
|
var progressBar = document.getElementById("progressBar_");
|
|
var percentageDiv = document.getElementById("percentageCalc_");
|
|
if (evt.lengthComputable) {
|
|
progressBar.max = evt.total;
|
|
progressBar.value = evt.loaded;
|
|
percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";
|
|
}
|
|
}
|
|
function getFileExtension(filename) {
|
|
return filename.slice((filename.lastIndexOf(".") - 1 >>> 0) + 2);
|
|
}
|
|
|
|
function uploadFailed(evt) {
|
|
alert("Hubo un error al subir el archivo.");
|
|
}
|
|
|
|
function uploadCanceled(evt) {
|
|
alert("La operación se canceló o la conexión fue interrunpida.");
|
|
}
|
|
|
|
|
|
var hexcase=0;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g<p.length;g+=16){var j=o;var h=n;var f=m;var e=l;o=md5_ff(o,n,m,l,p[g+0],7,-680876936);l=md5_ff(l,o,n,m,p[g+1],12,-389564586);m=md5_ff(m,l,o,n,p[g+2],17,606105819);n=md5_ff(n,m,l,o,p[g+3],22,-1044525330);o=md5_ff(o,n,m,l,p[g+4],7,-176418897);l=md5_ff(l,o,n,m,p[g+5],12,1200080426);m=md5_ff(m,l,o,n,p[g+6],17,-1473231341);n=md5_ff(n,m,l,o,p[g+7],22,-45705983);o=md5_ff(o,n,m,l,p[g+8],7,1770035416);l=md5_ff(l,o,n,m,p[g+9],12,-1958414417);m=md5_ff(m,l,o,n,p[g+10],17,-42063);n=md5_ff(n,m,l,o,p[g+11],22,-1990404162);o=md5_ff(o,n,m,l,p[g+12],7,1804603682);l=md5_ff(l,o,n,m,p[g+13],12,-40341101);m=md5_ff(m,l,o,n,p[g+14],17,-1502002290);n=md5_ff(n,m,l,o,p[g+15],22,1236535329);o=md5_gg(o,n,m,l,p[g+1],5,-165796510);l=md5_gg(l,o,n,m,p[g+6],9,-1069501632);m=md5_gg(m,l,o,n,p[g+11],14,643717713);n=md5_gg(n,m,l,o,p[g+0],20,-373897302);o=md5_gg(o,n,m,l,p[g+5],5,-701558691);l=md5_gg(l,o,n,m,p[g+10],9,38016083);m=md5_gg(m,l,o,n,p[g+15],14,-660478335);n=md5_gg(n,m,l,o,p[g+4],20,-405537848);o=md5_gg(o,n,m,l,p[g+9],5,568446438);l=md5_gg(l,o,n,m,p[g+14],9,-1019803690);m=md5_gg(m,l,o,n,p[g+3],14,-187363961);n=md5_gg(n,m,l,o,p[g+8],20,1163531501);o=md5_gg(o,n,m,l,p[g+13],5,-1444681467);l=md5_gg(l,o,n,m,p[g+2],9,-51403784);m=md5_gg(m,l,o,n,p[g+7],14,1735328473);n=md5_gg(n,m,l,o,p[g+12],20,-1926607734);o=md5_hh(o,n,m,l,p[g+5],4,-378558);l=md5_hh(l,o,n,m,p[g+8],11,-2022574463);m=md5_hh(m,l,o,n,p[g+11],16,1839030562);n=md5_hh(n,m,l,o,p[g+14],23,-35309556);o=md5_hh(o,n,m,l,p[g+1],4,-1530992060);l=md5_hh(l,o,n,m,p[g+4],11,1272893353);m=md5_hh(m,l,o,n,p[g+7],16,-155497632);n=md5_hh(n,m,l,o,p[g+10],23,-1094730640);o=md5_hh(o,n,m,l,p[g+13],4,681279174);l=md5_hh(l,o,n,m,p[g+0],11,-358537222);m=md5_hh(m,l,o,n,p[g+3],16,-722521979);n=md5_hh(n,m,l,o,p[g+6],23,76029189);o=md5_hh(o,n,m,l,p[g+9],4,-640364487);l=md5_hh(l,o,n,m,p[g+12],11,-421815835);m=md5_hh(m,l,o,n,p[g+15],16,530742520);n=md5_hh(n,m,l,o,p[g+2],23,-995338651);o=md5_ii(o,n,m,l,p[g+0],6,-198630844);l=md5_ii(l,o,n,m,p[g+7],10,1126891415);m=md5_ii(m,l,o,n,p[g+14],15,-1416354905);n=md5_ii(n,m,l,o,p[g+5],21,-57434055);o=md5_ii(o,n,m,l,p[g+12],6,1700485571);l=md5_ii(l,o,n,m,p[g+3],10,-1894986606);m=md5_ii(m,l,o,n,p[g+10],15,-1051523);n=md5_ii(n,m,l,o,p[g+1],21,-2054922799);o=md5_ii(o,n,m,l,p[g+8],6,1873313359);l=md5_ii(l,o,n,m,p[g+15],10,-30611744);m=md5_ii(m,l,o,n,p[g+6],15,-1560198380);n=md5_ii(n,m,l,o,p[g+13],21,1309151649);o=md5_ii(o,n,m,l,p[g+4],6,-145523070);l=md5_ii(l,o,n,m,p[g+11],10,-1120210379);m=md5_ii(m,l,o,n,p[g+2],15,718787259);n=md5_ii(n,m,l,o,p[g+9],21,-343485551);o=safe_add(o,j);n=safe_add(n,h);m=safe_add(m,f);l=safe_add(l,e)}return Array(o,n,m,l)}function md5_cmn(h,e,d,c,g,f){return safe_add(bit_rol(safe_add(safe_add(e,h),safe_add(c,f)),g),d)}function md5_ff(g,f,k,j,e,i,h){return md5_cmn((f&k)|((~f)&j),g,f,e,i,h)}function md5_gg(g,f,k,j,e,i,h){return md5_cmn((f&j)|(k&(~j)),g,f,e,i,h)}function md5_hh(g,f,k,j,e,i,h){return md5_cmn(f^k^j,g,f,e,i,h)}function md5_ii(g,f,k,j,e,i,h){return md5_cmn(k^(f|(~j)),g,f,e,i,h)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};
|
|
|
|
/// fin funciones upload generico
|
|
|
|
|
|
|
|
|
|
|
|
//// drag div
|
|
// Cargo los ID's de los arrays que se convierten en "scrollables"
|
|
var scrollDivs=new Array();
|
|
scrollDivs[0]="despacho";
|
|
scrollDivs[1]="";
|
|
/*
|
|
function carga()
|
|
{
|
|
posicion=0;
|
|
|
|
// IE
|
|
if(navigator.userAgent.indexOf("MSIE")>=0) navegador=0;
|
|
// Otros
|
|
else navegador=1;
|
|
|
|
registraDivs();
|
|
}
|
|
*/
|
|
/*
|
|
function registraDivs()
|
|
{
|
|
for(divId in scrollDivs)
|
|
{
|
|
document.getElementById(scrollDivs[divId]).onmouseover=function() { this.style.cursor="move"; }
|
|
document.getElementById(scrollDivs[divId]).ondblclick=comienzoMovimiento;
|
|
}
|
|
}
|
|
*/
|
|
function evitaEventos(event)
|
|
{
|
|
// Funcion que evita que se ejecuten eventos adicionales
|
|
if(navegador==0)
|
|
{
|
|
//window.event.cancelBubble=true;
|
|
//window.event.returnValue=false;
|
|
}
|
|
//if(navegador==1) event.preventDefault();
|
|
}
|
|
|
|
function comienzoMovimiento(event)
|
|
{
|
|
var id=this.id;
|
|
elMovimiento=document.getElementById(id);
|
|
|
|
// Obtengo la posicion del cursor
|
|
|
|
if(navegador==0)
|
|
{
|
|
cursorComienzoX=window.event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
|
|
cursorComienzoY=window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop;
|
|
}
|
|
if(navegador==1)
|
|
{
|
|
cursorComienzoX=event.clientX+window.scrollX;
|
|
cursorComienzoY=event.clientY+window.scrollY;
|
|
}
|
|
|
|
elMovimiento.onmousemove=enMovimiento;
|
|
elMovimiento.onmouseup=finMovimiento;
|
|
|
|
elComienzoX=parseInt(elMovimiento.style.left);
|
|
elComienzoY=parseInt(elMovimiento.style.top);
|
|
// Actualizo el posicion del elemento
|
|
elMovimiento.style.zIndex=++posicion;
|
|
|
|
evitaEventos(event);
|
|
}
|
|
|
|
function enMovimiento(event)
|
|
{
|
|
var xActual, yActual;
|
|
if(navegador==0)
|
|
{
|
|
xActual=window.event.clientX+document.documentElement.scrollLeft+document.body.scrollLeft;
|
|
yActual=window.event.clientY+document.documentElement.scrollTop+document.body.scrollTop;
|
|
}
|
|
if(navegador==1)
|
|
{
|
|
xActual=event.clientX+window.scrollX;
|
|
yActual=event.clientY+window.scrollY;
|
|
}
|
|
|
|
elMovimiento.style.left=(elComienzoX+xActual-cursorComienzoX)+"px";
|
|
elMovimiento.style.top=(elComienzoY+yActual-cursorComienzoY)+"px";
|
|
|
|
evitaEventos(event);
|
|
}
|
|
|
|
function finMovimiento(event)
|
|
{
|
|
elMovimiento.onmousemove=null;
|
|
elMovimiento.onmouseup=null;
|
|
}
|
|
|
|
//window.onload=carga;
|
|
//// fin drag div
|
|
|
|
|
|
function resultadoUpload(estado, file,respuesta,id,coordenadas) {
|
|
var link = '<br />';
|
|
var formupload = 'formUpload_'+ id;
|
|
if (estado == 0)
|
|
var mensaje = '<img class=" img-thumbnail responsive" src="'+respuesta+'images/secure/?file=300/' + file + '" >' + link;
|
|
|
|
if (estado == 1)
|
|
var mensaje = 'Error ! - El Archivo no llego al servidor' + link;
|
|
|
|
if (estado == 2)
|
|
{var mensaje = '<img src="'+respuesta+'images/atencion.gif"> Error ! - Tipo de archivo incorrecto o demasiado grande' + link;
|
|
}
|
|
if (estado == 3)
|
|
var mensaje = 'Error ! - No se pudo copiar Archivo. Posible problema de permisos en server' + link;
|
|
document.getElementById(formupload).innerHTML=mensaje;
|
|
document.getElementById(id).value=file;
|
|
if (coordenadas != '') {
|
|
document.getElementById('mapita').contentWindow.document.location.href=coordenadas;
|
|
}
|
|
|
|
}
|
|
|
|
function resultadoUploadArchivo(estado,file,div) {
|
|
var link = '';
|
|
if (estado == 0)
|
|
|
|
var mensaje = '<div id="boton_subir"><input class="btn btn-success btn-block" type="button" value="Importar" onclick="this.disabled= true; xajax_formulario_importar(\''+file+'\',\'grabar\',(document.getElementById(\'seleccion_formulario\').value)) "></div>';
|
|
if (estado == 1)
|
|
var mensaje = 'Error ! - El Archivo ('+ file +') no llegó al servidor' + link;
|
|
if (estado == 2)
|
|
var mensaje = ' <div class="alert alert-danger">Error ! - Tipo de archivo incorrecto o demasiado grande</div>';
|
|
if (estado == 3)
|
|
var mensaje = 'Error ! - No se pudo copiar Archivo. Posible problema de permisos en server' + link;
|
|
document.getElementById(''+div+'').innerHTML=mensaje;
|
|
//document.getElementById('archivo').value=file;
|
|
xajax_formulario_importar(''+file+'','',(document.getElementById("seleccion_formulario").value));
|
|
}
|
|
|
|
|
|
// En Javascript
|
|
///sugiere
|
|
|
|
|
|
|
|
val=0;
|
|
|
|
function numeros(e,item_cie,Vtipo,Tabla,Campo,Campo_descripcion)
|
|
{
|
|
window["item_cie"] = item_cie;
|
|
window["Vinput"] = "buscar"+item_cie;
|
|
window["Vcontenedor"] = "contenedor"+item_cie;
|
|
window["Vtipo"] = Vtipo;
|
|
window["Tabla"] = Tabla;
|
|
window["Campo"] = Campo;
|
|
window["Campo_descripcion"] = Campo_descripcion;
|
|
|
|
var key;
|
|
if(window.event) // IE
|
|
{
|
|
key = e.keyCode;
|
|
nav='ie';
|
|
}
|
|
else if(e.which) // Netscape/Firefox/Opera
|
|
{
|
|
key = e.which;
|
|
nav='otro';
|
|
}
|
|
if(key!=40 && key!=38){if(key==13 && val!=0){dat='e'+val;document.getElementById(Vinput).value=document.getElementById(dat).innerHTML;document.getElementById(Vcontenedor).innerHTML='';document.getElementById(Vcontenedor).style.display='none';
|
|
}else{val=0;document.getElementById(Vcontenedor).scrollTop =0;OnKeyRequestBuffer.modified(Vinput);}}
|
|
else{if (key==40){node = document.getElementById('lista'+item_cie);
|
|
if(val<node.childNodes.length)
|
|
{
|
|
try{
|
|
document.getElementById(val).className='nosel';
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
val++;
|
|
alto=document.getElementById(val).offsetTop;
|
|
document.getElementById(Vcontenedor).scrollTop =alto;
|
|
document.getElementById(val).className='sel';
|
|
}
|
|
}
|
|
if (key==38){
|
|
if(val>=1)
|
|
{
|
|
document.getElementById(val).className='nosel';
|
|
try{
|
|
val--;
|
|
alto=document.getElementById(val).offsetTop;
|
|
document.getElementById(Vcontenedor).scrollTop =alto;
|
|
document.getElementById(val).className='sel';
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var OnKeyRequestBuffer =
|
|
{
|
|
bufferText: false,
|
|
bufferTime: 500,
|
|
|
|
modified : function(strId)
|
|
{
|
|
setTimeout('OnKeyRequestBuffer.compareBuffer("'+strId+'","'+xajax.$(strId).value+'");', this.bufferTime);
|
|
},
|
|
|
|
compareBuffer : function(strId, strText)
|
|
{
|
|
if (strText == xajax.$(strId).value && strText != this.bufferText)
|
|
{
|
|
this.bufferText = strText;
|
|
OnKeyRequestBuffer.makeRequest(strId);
|
|
}
|
|
},
|
|
|
|
makeRequest : function(strId)
|
|
{
|
|
|
|
this.bufferText = '';
|
|
if(Vtipo == "generico"){
|
|
xajax_sugiere_generico(xajax.$(strId).value,item_cie,Tabla,Campo,Campo_descripcion);
|
|
}else{
|
|
xajax_sugiere(xajax.$(strId).value,item_cie);
|
|
}
|
|
}
|
|
}
|
|
function pulsar(e) {
|
|
tecla = (document.all) ? e.keyCode : e.which;
|
|
return (tecla != 13);
|
|
}
|
|
function limpia(Vcontenedor)
|
|
{
|
|
document.getElementById(Vcontenedor).innerHTML='';
|
|
document.getElementById(Vcontenedor).style.display='none';
|
|
|
|
}
|
|
function revisa(Vinput)
|
|
{
|
|
if(document.getElementById(Vinput).value!='')
|
|
{
|
|
return 'si';
|
|
}
|
|
else
|
|
{
|
|
return 'no';
|
|
}
|
|
}
|
|
function sobre()
|
|
{
|
|
try{document.getElementById(val).className='nosel';val=0;}catch(e){}
|
|
|
|
}
|
|
|
|
// finsugiere
|
|
|
|
|
|
function uno(src,color_entrada) {
|
|
src.bgColor=color_entrada;src.style.cursor="hand";
|
|
}
|
|
function dos(src,color_default) {
|
|
src.bgColor=color_default;src.style.cursor="default";
|
|
}
|
|
|
|
|
|
function SoloCerrar(){
|
|
window.close()
|
|
}
|
|
|
|
function actualizar()
|
|
{
|
|
location.reload();
|
|
}
|
|
function amplia(){
|
|
resizeTo(screen.width-10,screen.height-80)
|
|
moveTo(0, 0);
|
|
}
|
|
|
|
function abrir(ventana,nombre,a,b,c,d,v,r)
|
|
{
|
|
e='width='+a+','
|
|
f='height='+b+','
|
|
g='screenx='+c+','
|
|
h='screeny='+d+','
|
|
s='scrollbars='+v+','
|
|
j='alwaysRaised='+r+','
|
|
hola=window.open(ventana,nombre,e+f+g+h+s+j);
|
|
hola.focus()
|
|
}
|
|
|
|
function toggleDiv(id,flagit) {
|
|
|
|
if (flagit=="1"){
|
|
if (document.layers) document.layers[''+id+''].visibility = "show"
|
|
else if (document.all) document.all[''+id+''].style.visibility = "visible"
|
|
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"
|
|
}
|
|
else
|
|
if (flagit=="0"){
|
|
if (document.layers) document.layers[''+id+''].visibility = "visible"
|
|
else if (document.all) document.all[''+id+''].style.visibility = "hidden"
|
|
else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"
|
|
}
|
|
}
|
|
|