Built motion from commit ffdca78c.|2.6.24
[motion2.git] / server / api / chatTransferReport / chatTransferReport.controller.js
index 284d310..d339374 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x66c2=['options','ChatTransferReport','includeAll','rows','show','fields','include','catch','body','find','params','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils','sendStatus','end','status','json','count','set','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','map','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','length','hasOwnProperty','limit','offset','where','pick','merge','VIRTUAL'];(function(_0x1c5cf5,_0x58ef5d){var _0x3aaf65=function(_0x414011){while(--_0x414011){_0x1c5cf5['push'](_0x1c5cf5['shift']());}};_0x3aaf65(++_0x58ef5d);}(_0x66c2,0x12c));var _0x266c=function(_0x2d6f2e,_0x514647){_0x2d6f2e=_0x2d6f2e-0x0;var _0xab9e3=_0x66c2[_0x2d6f2e];return _0xab9e3;};'use strict';var pdf=require(_0x266c('0x0'));var emlformat=require(_0x266c('0x1'));var rimraf=require(_0x266c('0x2'));var zipdir=require(_0x266c('0x3'));var jsonpatch=require(_0x266c('0x4'));var rp=require('request-promise');var moment=require(_0x266c('0x5'));var BPromise=require(_0x266c('0x6'));var Mustache=require(_0x266c('0x7'));var util=require(_0x266c('0x8'));var path=require(_0x266c('0x9'));var sox=require(_0x266c('0xa'));var csv=require(_0x266c('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x266c('0xc'));var squel=require(_0x266c('0xd'));var crypto=require(_0x266c('0xe'));var jsforce=require(_0x266c('0xf'));var deskjs=require(_0x266c('0x10'));var toCsv=require(_0x266c('0xb'));var querystring=require(_0x266c('0x11'));var Papa=require(_0x266c('0x12'));var Redis=require(_0x266c('0x13'));var authService=require(_0x266c('0x14'));var qs=require('../../components/parsers/qs');var as=require(_0x266c('0x15'));var hardwareService=require(_0x266c('0x16'));var logger=require('../../config/logger')(_0x266c('0x17'));var utils=require(_0x266c('0x18'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x30fbfa,_0x16cf8b){_0x16cf8b=_0x16cf8b||0xcc;return function(_0xcada9){if(_0xcada9){return _0x30fbfa[_0x266c('0x19')](_0x16cf8b);}return _0x30fbfa['status'](_0x16cf8b)[_0x266c('0x1a')]();};}function respondWithResult(_0x2af36d,_0x3ad60d){_0x3ad60d=_0x3ad60d||0xc8;return function(_0x1a7141){if(_0x1a7141){return _0x2af36d[_0x266c('0x1b')](_0x3ad60d)[_0x266c('0x1c')](_0x1a7141);}};}function respondWithFilteredResult(_0xdadb22,_0x3576b9){return function(_0xef451b){if(_0xef451b){var _0x58d296=_0xef451b[_0x266c('0x1d')],_0x436912=_0x3576b9['offset'],_0xe468a4=_0x3576b9['offset']+_0x3576b9['limit'],_0x25c1fd;if(_0xe468a4>=_0x58d296){_0xe468a4=_0x58d296;_0x25c1fd=0xc8;}else{_0x25c1fd=0xce;}_0xdadb22[_0x266c('0x1b')](_0x25c1fd);return _0xdadb22[_0x266c('0x1e')](_0x266c('0x1f'),_0x436912+'-'+_0xe468a4+'/'+_0x58d296)[_0x266c('0x1c')](_0xef451b);}return null;};}function patchUpdates(_0x55fc1c){return function(_0x3045a7){try{jsonpatch[_0x266c('0x20')](_0x3045a7,_0x55fc1c,!![]);}catch(_0x3aa619){return BPromise[_0x266c('0x21')](_0x3aa619);}return _0x3045a7[_0x266c('0x22')]();};}function saveUpdates(_0x3a65a1,_0x500d26){return function(_0xd8643e){if(_0xd8643e){return _0xd8643e[_0x266c('0x23')](_0x3a65a1)[_0x266c('0x24')](function(_0x223d0d){return _0x223d0d;});}return null;};}function removeEntity(_0x4a3aec,_0x1ab751){return function(_0xb187a4){if(_0xb187a4){return _0xb187a4[_0x266c('0x25')]()[_0x266c('0x24')](function(){_0x4a3aec['status'](0xcc)[_0x266c('0x1a')]();});}};}function handleEntityNotFound(_0x948169,_0x9785f0){return function(_0xa15cde){if(!_0xa15cde){_0x948169['sendStatus'](0x194);}return _0xa15cde;};}function handleError(_0x5802a9,_0x480015){_0x480015=_0x480015||0x1f4;return function(_0x47545b){logger['error'](_0x47545b[_0x266c('0x26')]);if(_0x47545b[_0x266c('0x27')]){delete _0x47545b[_0x266c('0x27')];}_0x5802a9[_0x266c('0x1b')](_0x480015)[_0x266c('0x28')](_0x47545b);};}exports[_0x266c('0x29')]=function(_0x5de349,_0x57c654){var _0x3bb8a5={},_0x3ec2fd={},_0x28775d={'count':0x0,'rows':[]};var _0x537780=_[_0x266c('0x2a')](db['ChatTransferReport'][_0x266c('0x2b')],function(_0x7aa082){return{'name':_0x7aa082['fieldName'],'type':_0x7aa082[_0x266c('0x2c')][_0x266c('0x2d')]};});_0x3ec2fd[_0x266c('0x2e')]=_[_0x266c('0x2a')](_0x537780,_0x266c('0x27'));_0x3ec2fd[_0x266c('0x2f')]=_[_0x266c('0x30')](_0x5de349[_0x266c('0x2f')]);_0x3ec2fd[_0x266c('0x31')]=_[_0x266c('0x32')](_0x3ec2fd[_0x266c('0x2e')],_0x3ec2fd[_0x266c('0x2f')]);_0x3bb8a5['attributes']=_['intersection'](_0x3ec2fd[_0x266c('0x2e')],qs['fields'](_0x5de349[_0x266c('0x2f')]['fields']));_0x3bb8a5[_0x266c('0x33')]=_0x3bb8a5[_0x266c('0x33')][_0x266c('0x34')]?_0x3bb8a5[_0x266c('0x33')]:_0x3ec2fd[_0x266c('0x2e')];if(!_0x5de349[_0x266c('0x2f')][_0x266c('0x35')]('nolimit')){_0x3bb8a5[_0x266c('0x36')]=qs['limit'](_0x5de349[_0x266c('0x2f')][_0x266c('0x36')]);_0x3bb8a5[_0x266c('0x37')]=qs['offset'](_0x5de349[_0x266c('0x2f')][_0x266c('0x37')]);}_0x3bb8a5['order']=qs['sort'](_0x5de349[_0x266c('0x2f')]['sort']);_0x3bb8a5[_0x266c('0x38')]=qs[_0x266c('0x31')](_[_0x266c('0x39')](_0x5de349[_0x266c('0x2f')],_0x3ec2fd[_0x266c('0x31')]),_0x537780);if(_0x5de349['query']['filter']){_0x3bb8a5[_0x266c('0x38')]=_[_0x266c('0x3a')](_0x3bb8a5['where'],{'$or':_['map'](_0x537780,function(_0x530123){if(_0x530123[_0x266c('0x2c')]!==_0x266c('0x3b')){var _0x283a86={};_0x283a86[_0x530123[_0x266c('0x27')]]={'$like':'%'+_0x5de349[_0x266c('0x2f')]['filter']+'%'};return _0x283a86;}})});}_0x3bb8a5=_['merge']({},_0x3bb8a5,_0x5de349[_0x266c('0x3c')]);var _0x44ff28={'where':_0x3bb8a5[_0x266c('0x38')]};return db[_0x266c('0x3d')][_0x266c('0x1d')](_0x44ff28)[_0x266c('0x24')](function(_0x2623d6){_0x28775d[_0x266c('0x1d')]=_0x2623d6;if(_0x5de349[_0x266c('0x2f')][_0x266c('0x3e')]){_0x3bb8a5['include']=[{'all':!![]}];}return db[_0x266c('0x3d')]['findAll'](_0x3bb8a5);})['then'](function(_0x6af222){_0x28775d[_0x266c('0x3f')]=_0x6af222;return _0x28775d;})['then'](respondWithFilteredResult(_0x57c654,_0x3bb8a5))['catch'](handleError(_0x57c654,null));};exports[_0x266c('0x40')]=function(_0x22d768,_0x4fce34){var _0x207a1c={'raw':!![],'where':{'id':_0x22d768['params']['id']}},_0x2c88b9={};_0x2c88b9['model']=_[_0x266c('0x30')](db[_0x266c('0x3d')][_0x266c('0x2b')]);_0x2c88b9[_0x266c('0x2f')]=_[_0x266c('0x30')](_0x22d768[_0x266c('0x2f')]);_0x2c88b9['filters']=_[_0x266c('0x32')](_0x2c88b9[_0x266c('0x2e')],_0x2c88b9[_0x266c('0x2f')]);_0x207a1c['attributes']=_[_0x266c('0x32')](_0x2c88b9[_0x266c('0x2e')],qs[_0x266c('0x41')](_0x22d768['query'][_0x266c('0x41')]));_0x207a1c[_0x266c('0x33')]=_0x207a1c[_0x266c('0x33')]['length']?_0x207a1c['attributes']:_0x2c88b9['model'];if(_0x22d768['query']['includeAll']){_0x207a1c[_0x266c('0x42')]=[{'all':!![]}];}_0x207a1c=_[_0x266c('0x3a')]({},_0x207a1c,_0x22d768[_0x266c('0x3c')]);return db[_0x266c('0x3d')]['find'](_0x207a1c)[_0x266c('0x24')](handleEntityNotFound(_0x4fce34,null))['then'](respondWithResult(_0x4fce34,null))[_0x266c('0x43')](handleError(_0x4fce34,null));};exports['create']=function(_0x350186,_0x3b1858){return db[_0x266c('0x3d')]['create'](_0x350186[_0x266c('0x44')],{})[_0x266c('0x24')](respondWithResult(_0x3b1858,0xc9))[_0x266c('0x43')](handleError(_0x3b1858,null));};exports[_0x266c('0x23')]=function(_0x480442,_0x2141d8){if(_0x480442['body']['id']){delete _0x480442[_0x266c('0x44')]['id'];}return db[_0x266c('0x3d')][_0x266c('0x45')]({'where':{'id':_0x480442['params']['id']}})['then'](handleEntityNotFound(_0x2141d8,null))[_0x266c('0x24')](saveUpdates(_0x480442[_0x266c('0x44')],null))[_0x266c('0x24')](respondWithResult(_0x2141d8,null))['catch'](handleError(_0x2141d8,null));};exports[_0x266c('0x25')]=function(_0x5a5720,_0x7f9848){return db[_0x266c('0x3d')][_0x266c('0x45')]({'where':{'id':_0x5a5720[_0x266c('0x46')]['id']}})['then'](handleEntityNotFound(_0x7f9848,null))['then'](removeEntity(_0x7f9848,null))[_0x266c('0x43')](handleError(_0x7f9848,null));};exports[_0x266c('0x47')]=function(_0x320cdc,_0x1f2cb6){return db[_0x266c('0x3d')]['describe']()[_0x266c('0x24')](respondWithResult(_0x1f2cb6,null))[_0x266c('0x43')](handleError(_0x1f2cb6,null));};
\ No newline at end of file
+var _0x0dd4=['lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','end','status','json','offset','limit','set','apply','reject','then','error','stack','name','send','index','map','ChatTransferReport','fieldName','type','key','query','keys','filters','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','count','includeAll','findAll','rawAttributes','include','options','catch','create','body','find','destroy','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','fs-extra'];(function(_0x4862de,_0x3ea85f){var _0x59c5b0=function(_0x51d28e){while(--_0x51d28e){_0x4862de['push'](_0x4862de['shift']());}};_0x59c5b0(++_0x3ea85f);}(_0x0dd4,0x1b6));var _0x40dd=function(_0x4e9719,_0x315b9b){_0x4e9719=_0x4e9719-0x0;var _0x32673c=_0x0dd4[_0x4e9719];return _0x32673c;};'use strict';var emlformat=require(_0x40dd('0x0'));var rimraf=require(_0x40dd('0x1'));var zipdir=require(_0x40dd('0x2'));var jsonpatch=require(_0x40dd('0x3'));var rp=require('request-promise');var moment=require(_0x40dd('0x4'));var BPromise=require(_0x40dd('0x5'));var Mustache=require(_0x40dd('0x6'));var util=require(_0x40dd('0x7'));var path=require(_0x40dd('0x8'));var sox=require('sox');var csv=require(_0x40dd('0x9'));var ejs=require(_0x40dd('0xa'));var fs=require('fs');var fs_extra=require(_0x40dd('0xb'));var _=require(_0x40dd('0xc'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x40dd('0xd'));var deskjs=require(_0x40dd('0xe'));var toCsv=require('to-csv');var querystring=require(_0x40dd('0xf'));var Papa=require(_0x40dd('0x10'));var Redis=require('ioredis');var authService=require(_0x40dd('0x11'));var qs=require(_0x40dd('0x12'));var as=require(_0x40dd('0x13'));var hardwareService=require(_0x40dd('0x14'));var logger=require(_0x40dd('0x15'))('api');var utils=require(_0x40dd('0x16'));var config=require('../../config/environment');var licenseUtil=require(_0x40dd('0x17'));var db=require(_0x40dd('0x18'))['db'];function respondWithStatusCode(_0x3d0886,_0x3b4e39){_0x3b4e39=_0x3b4e39||0xcc;return function(_0x2fbd57){if(_0x2fbd57){return _0x3d0886[_0x40dd('0x19')](_0x3b4e39);}return _0x3d0886['status'](_0x3b4e39)[_0x40dd('0x1a')]();};}function respondWithResult(_0x5c4d18,_0x2657d3){_0x2657d3=_0x2657d3||0xc8;return function(_0x852a75){if(_0x852a75){return _0x5c4d18[_0x40dd('0x1b')](_0x2657d3)[_0x40dd('0x1c')](_0x852a75);}};}function respondWithFilteredResult(_0x3a3737,_0x24d1ee){return function(_0x55130f){if(_0x55130f){var _0x4ea56b=typeof _0x24d1ee[_0x40dd('0x1d')]==='undefined'&&typeof _0x24d1ee[_0x40dd('0x1e')]==='undefined';var _0x4f5998=_0x55130f['count'];var _0x4aad8e=_0x4ea56b?0x0:_0x24d1ee[_0x40dd('0x1d')];var _0x326350=_0x4ea56b?_0x55130f['count']:_0x24d1ee['offset']+_0x24d1ee[_0x40dd('0x1e')];var _0xefd335;if(_0x326350>=_0x4f5998){_0x326350=_0x4f5998;_0xefd335=0xc8;}else{_0xefd335=0xce;}_0x3a3737[_0x40dd('0x1b')](_0xefd335);return _0x3a3737[_0x40dd('0x1f')]('Content-Range',_0x4aad8e+'-'+_0x326350+'/'+_0x4f5998)[_0x40dd('0x1c')](_0x55130f);}return null;};}function patchUpdates(_0x540b74){return function(_0x27e2ba){try{jsonpatch[_0x40dd('0x20')](_0x27e2ba,_0x540b74,!![]);}catch(_0x31b2f6){return BPromise[_0x40dd('0x21')](_0x31b2f6);}return _0x27e2ba['save']();};}function saveUpdates(_0x28ecd4,_0x5fa5b4){return function(_0x48c409){if(_0x48c409){return _0x48c409['update'](_0x28ecd4)[_0x40dd('0x22')](function(_0x14eb1c){return _0x14eb1c;});}return null;};}function removeEntity(_0x90eeca,_0x54206c){return function(_0x4a2ff2){if(_0x4a2ff2){return _0x4a2ff2['destroy']()[_0x40dd('0x22')](function(){_0x90eeca[_0x40dd('0x1b')](0xcc)[_0x40dd('0x1a')]();});}};}function handleEntityNotFound(_0x2e23fb,_0x49a688){return function(_0x140965){if(!_0x140965){_0x2e23fb[_0x40dd('0x19')](0x194);}return _0x140965;};}function handleError(_0x468f08,_0x163227){_0x163227=_0x163227||0x1f4;return function(_0x40eb34){logger[_0x40dd('0x23')](_0x40eb34[_0x40dd('0x24')]);if(_0x40eb34['name']){delete _0x40eb34[_0x40dd('0x25')];}_0x468f08[_0x40dd('0x1b')](_0x163227)[_0x40dd('0x26')](_0x40eb34);};}exports[_0x40dd('0x27')]=function(_0xb46a9c,_0x124940){var _0x24fe6c={},_0x23424d={},_0x22d92b={'count':0x0,'rows':[]};var _0x37f11d=_[_0x40dd('0x28')](db[_0x40dd('0x29')]['rawAttributes'],function(_0x1102eb){return{'name':_0x1102eb[_0x40dd('0x2a')],'type':_0x1102eb[_0x40dd('0x2b')][_0x40dd('0x2c')]};});_0x23424d['model']=_[_0x40dd('0x28')](_0x37f11d,_0x40dd('0x25'));_0x23424d[_0x40dd('0x2d')]=_[_0x40dd('0x2e')](_0xb46a9c[_0x40dd('0x2d')]);_0x23424d[_0x40dd('0x2f')]=_['intersection'](_0x23424d[_0x40dd('0x30')],_0x23424d[_0x40dd('0x2d')]);_0x24fe6c[_0x40dd('0x31')]=_[_0x40dd('0x32')](_0x23424d['model'],qs[_0x40dd('0x33')](_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x33')]));_0x24fe6c['attributes']=_0x24fe6c[_0x40dd('0x31')][_0x40dd('0x34')]?_0x24fe6c[_0x40dd('0x31')]:_0x23424d[_0x40dd('0x30')];if(!_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x35')](_0x40dd('0x36'))){_0x24fe6c[_0x40dd('0x1e')]=qs['limit'](_0xb46a9c[_0x40dd('0x2d')]['limit']);_0x24fe6c[_0x40dd('0x1d')]=qs[_0x40dd('0x1d')](_0xb46a9c['query'][_0x40dd('0x1d')]);}_0x24fe6c[_0x40dd('0x37')]=qs[_0x40dd('0x38')](_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x38')]);_0x24fe6c[_0x40dd('0x39')]=qs[_0x40dd('0x2f')](_[_0x40dd('0x3a')](_0xb46a9c['query'],_0x23424d['filters']),_0x37f11d);if(_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x3b')]){_0x24fe6c[_0x40dd('0x39')]=_[_0x40dd('0x3c')](_0x24fe6c[_0x40dd('0x39')],{'$or':_[_0x40dd('0x28')](_0x37f11d,function(_0x30f46c){if(_0x30f46c[_0x40dd('0x2b')]!==_0x40dd('0x3d')){var _0xfc5568={};_0xfc5568[_0x30f46c['name']]={'$like':'%'+_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x3b')]+'%'};return _0xfc5568;}})});}_0x24fe6c=_[_0x40dd('0x3c')]({},_0x24fe6c,_0xb46a9c['options']);var _0x17ad74={'where':_0x24fe6c['where']};return db[_0x40dd('0x29')][_0x40dd('0x3e')](_0x17ad74)['then'](function(_0x109090){_0x22d92b[_0x40dd('0x3e')]=_0x109090;if(_0xb46a9c[_0x40dd('0x2d')][_0x40dd('0x3f')]){_0x24fe6c['include']=[{'all':!![]}];}return db['ChatTransferReport'][_0x40dd('0x40')](_0x24fe6c);})[_0x40dd('0x22')](function(_0x475af8){_0x22d92b['rows']=_0x475af8;return _0x22d92b;})[_0x40dd('0x22')](respondWithFilteredResult(_0x124940,_0x24fe6c))['catch'](handleError(_0x124940,null));};exports['show']=function(_0x2e8135,_0x276b15){var _0x2b75a7={'raw':!![],'where':{'id':_0x2e8135['params']['id']}},_0x19065b={};_0x19065b['model']=_[_0x40dd('0x2e')](db[_0x40dd('0x29')][_0x40dd('0x41')]);_0x19065b[_0x40dd('0x2d')]=_[_0x40dd('0x2e')](_0x2e8135[_0x40dd('0x2d')]);_0x19065b[_0x40dd('0x2f')]=_[_0x40dd('0x32')](_0x19065b[_0x40dd('0x30')],_0x19065b[_0x40dd('0x2d')]);_0x2b75a7[_0x40dd('0x31')]=_[_0x40dd('0x32')](_0x19065b[_0x40dd('0x30')],qs[_0x40dd('0x33')](_0x2e8135[_0x40dd('0x2d')]['fields']));_0x2b75a7[_0x40dd('0x31')]=_0x2b75a7[_0x40dd('0x31')][_0x40dd('0x34')]?_0x2b75a7[_0x40dd('0x31')]:_0x19065b[_0x40dd('0x30')];if(_0x2e8135[_0x40dd('0x2d')][_0x40dd('0x3f')]){_0x2b75a7[_0x40dd('0x42')]=[{'all':!![]}];}_0x2b75a7=_[_0x40dd('0x3c')]({},_0x2b75a7,_0x2e8135[_0x40dd('0x43')]);return db['ChatTransferReport']['find'](_0x2b75a7)[_0x40dd('0x22')](handleEntityNotFound(_0x276b15,null))[_0x40dd('0x22')](respondWithResult(_0x276b15,null))[_0x40dd('0x44')](handleError(_0x276b15,null));};exports[_0x40dd('0x45')]=function(_0x26c6ed,_0x28f2b4){return db[_0x40dd('0x29')]['create'](_0x26c6ed['body'],{})['then'](respondWithResult(_0x28f2b4,0xc9))[_0x40dd('0x44')](handleError(_0x28f2b4,null));};exports['update']=function(_0x99bfd3,_0x4b450f){if(_0x99bfd3[_0x40dd('0x46')]['id']){delete _0x99bfd3[_0x40dd('0x46')]['id'];}return db[_0x40dd('0x29')][_0x40dd('0x47')]({'where':{'id':_0x99bfd3['params']['id']}})[_0x40dd('0x22')](handleEntityNotFound(_0x4b450f,null))['then'](saveUpdates(_0x99bfd3[_0x40dd('0x46')],null))[_0x40dd('0x22')](respondWithResult(_0x4b450f,null))[_0x40dd('0x44')](handleError(_0x4b450f,null));};exports[_0x40dd('0x48')]=function(_0x23c012,_0x4e9959){return db['ChatTransferReport'][_0x40dd('0x47')]({'where':{'id':_0x23c012[_0x40dd('0x49')]['id']}})['then'](handleEntityNotFound(_0x4e9959,null))['then'](removeEntity(_0x4e9959,null))[_0x40dd('0x44')](handleError(_0x4e9959,null));};exports[_0x40dd('0x4a')]=function(_0x2488b6,_0xc80f33){return db[_0x40dd('0x29')][_0x40dd('0x4a')]()[_0x40dd('0x22')](respondWithResult(_0xc80f33,null))['catch'](handleError(_0xc80f33,null));};
\ No newline at end of file