Built motion from commit c116dc8b.|2.6.30
[motion2.git] / server / api / mailSubstatus / mailSubstatus.controller.js
index 32b875a..71b8f09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x37cb=['params','include','find','create','update','body','catch','describe','html-pdf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','then','destroy','stack','name','index','map','MailSubstatus','rawAttributes','fieldName','key','model','keys','query','filters','intersection','attributes','fields','length','order','sort','where','filter','merge','VIRTUAL','options','includeAll','findAll','rows','show'];(function(_0x52407f,_0x3a57d2){var _0x5663e7=function(_0x50170e){while(--_0x50170e){_0x52407f['push'](_0x52407f['shift']());}};_0x5663e7(++_0x3a57d2);}(_0x37cb,0x1b8));var _0xb37c=function(_0x45b034,_0x3a57dd){_0x45b034=_0x45b034-0x0;var _0x509cb0=_0x37cb[_0x45b034];return _0x509cb0;};'use strict';var pdf=require(_0xb37c('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xb37c('0x1'));var jsonpatch=require(_0xb37c('0x2'));var rp=require('request-promise');var moment=require(_0xb37c('0x3'));var BPromise=require(_0xb37c('0x4'));var Mustache=require(_0xb37c('0x5'));var util=require(_0xb37c('0x6'));var path=require(_0xb37c('0x7'));var sox=require(_0xb37c('0x8'));var csv=require(_0xb37c('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb37c('0xa'));var squel=require(_0xb37c('0xb'));var crypto=require(_0xb37c('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xb37c('0xd'));var toCsv=require(_0xb37c('0x9'));var querystring=require(_0xb37c('0xe'));var Papa=require(_0xb37c('0xf'));var Redis=require(_0xb37c('0x10'));var authService=require(_0xb37c('0x11'));var qs=require('../../components/parsers/qs');var as=require(_0xb37c('0x12'));var hardwareService=require(_0xb37c('0x13'));var logger=require(_0xb37c('0x14'))('api');var utils=require(_0xb37c('0x15'));var config=require('../../config/environment');var licenseUtil=require(_0xb37c('0x16'));var db=require(_0xb37c('0x17'))['db'];function respondWithStatusCode(_0x2f1b53,_0x2bf283){_0x2bf283=_0x2bf283||0xcc;return function(_0x572ab8){if(_0x572ab8){return _0x2f1b53[_0xb37c('0x18')](_0x2bf283);}return _0x2f1b53[_0xb37c('0x19')](_0x2bf283)[_0xb37c('0x1a')]();};}function respondWithResult(_0x4f8732,_0x327087){_0x327087=_0x327087||0xc8;return function(_0x56a335){if(_0x56a335){return _0x4f8732['status'](_0x327087)[_0xb37c('0x1b')](_0x56a335);}};}function respondWithFilteredResult(_0x2a394e,_0x550c15){return function(_0x14e5af){if(_0x14e5af){var _0x50bb57=_0x14e5af[_0xb37c('0x1c')],_0x43bcf3=_0x550c15[_0xb37c('0x1d')],_0x2c45d9=_0x550c15[_0xb37c('0x1d')]+_0x550c15[_0xb37c('0x1e')],_0x41df08;if(_0x2c45d9>=_0x50bb57){_0x2c45d9=_0x50bb57;_0x41df08=0xc8;}else{_0x41df08=0xce;}_0x2a394e[_0xb37c('0x19')](_0x41df08);return _0x2a394e[_0xb37c('0x1f')](_0xb37c('0x20'),_0x43bcf3+'-'+_0x2c45d9+'/'+_0x50bb57)[_0xb37c('0x1b')](_0x14e5af);}return null;};}function patchUpdates(_0x2b933e){return function(_0x519621){try{jsonpatch[_0xb37c('0x21')](_0x519621,_0x2b933e,!![]);}catch(_0x235588){return BPromise['reject'](_0x235588);}return _0x519621[_0xb37c('0x22')]();};}function saveUpdates(_0x2934ba,_0x1067bc){return function(_0x182118){if(_0x182118){return _0x182118['update'](_0x2934ba)[_0xb37c('0x23')](function(_0x147e68){return _0x147e68;});}return null;};}function removeEntity(_0x22fffc,_0xd66193){return function(_0x56da6c){if(_0x56da6c){return _0x56da6c[_0xb37c('0x24')]()[_0xb37c('0x23')](function(){_0x22fffc[_0xb37c('0x19')](0xcc)[_0xb37c('0x1a')]();});}};}function handleEntityNotFound(_0x2f072e,_0xc89b){return function(_0x570bf0){if(!_0x570bf0){_0x2f072e[_0xb37c('0x18')](0x194);}return _0x570bf0;};}function handleError(_0x13e1ce,_0x3970f5){_0x3970f5=_0x3970f5||0x1f4;return function(_0x4f6a03){logger['error'](_0x4f6a03[_0xb37c('0x25')]);if(_0x4f6a03[_0xb37c('0x26')]){delete _0x4f6a03[_0xb37c('0x26')];}_0x13e1ce[_0xb37c('0x19')](_0x3970f5)['send'](_0x4f6a03);};}exports[_0xb37c('0x27')]=function(_0x129914,_0x2596ff){var _0x49968d={},_0x41cb44={},_0x24ab0d={'count':0x0,'rows':[]};var _0x81a9a0=_[_0xb37c('0x28')](db[_0xb37c('0x29')][_0xb37c('0x2a')],function(_0x2d5b70){return{'name':_0x2d5b70[_0xb37c('0x2b')],'type':_0x2d5b70['type'][_0xb37c('0x2c')]};});_0x41cb44[_0xb37c('0x2d')]=_['map'](_0x81a9a0,_0xb37c('0x26'));_0x41cb44['query']=_[_0xb37c('0x2e')](_0x129914[_0xb37c('0x2f')]);_0x41cb44[_0xb37c('0x30')]=_[_0xb37c('0x31')](_0x41cb44[_0xb37c('0x2d')],_0x41cb44[_0xb37c('0x2f')]);_0x49968d[_0xb37c('0x32')]=_[_0xb37c('0x31')](_0x41cb44[_0xb37c('0x2d')],qs[_0xb37c('0x33')](_0x129914[_0xb37c('0x2f')][_0xb37c('0x33')]));_0x49968d['attributes']=_0x49968d[_0xb37c('0x32')][_0xb37c('0x34')]?_0x49968d[_0xb37c('0x32')]:_0x41cb44['model'];if(!_0x129914['query']['hasOwnProperty']('nolimit')){_0x49968d['limit']=qs['limit'](_0x129914[_0xb37c('0x2f')][_0xb37c('0x1e')]);_0x49968d[_0xb37c('0x1d')]=qs['offset'](_0x129914['query'][_0xb37c('0x1d')]);}_0x49968d[_0xb37c('0x35')]=qs[_0xb37c('0x36')](_0x129914[_0xb37c('0x2f')][_0xb37c('0x36')]);_0x49968d[_0xb37c('0x37')]=qs['filters'](_['pick'](_0x129914[_0xb37c('0x2f')],_0x41cb44[_0xb37c('0x30')]),_0x81a9a0);if(_0x129914['query'][_0xb37c('0x38')]){_0x49968d[_0xb37c('0x37')]=_[_0xb37c('0x39')](_0x49968d[_0xb37c('0x37')],{'$or':_['map'](_0x81a9a0,function(_0x2eb55a){if(_0x2eb55a['type']!==_0xb37c('0x3a')){var _0x4eaf0b={};_0x4eaf0b[_0x2eb55a[_0xb37c('0x26')]]={'$like':'%'+_0x129914[_0xb37c('0x2f')][_0xb37c('0x38')]+'%'};return _0x4eaf0b;}})});}_0x49968d=_[_0xb37c('0x39')]({},_0x49968d,_0x129914[_0xb37c('0x3b')]);var _0xfe008a={'where':_0x49968d['where']};return db['MailSubstatus'][_0xb37c('0x1c')](_0xfe008a)[_0xb37c('0x23')](function(_0x6bd8de){_0x24ab0d[_0xb37c('0x1c')]=_0x6bd8de;if(_0x129914[_0xb37c('0x2f')][_0xb37c('0x3c')]){_0x49968d['include']=[{'all':!![]}];}return db[_0xb37c('0x29')][_0xb37c('0x3d')](_0x49968d);})[_0xb37c('0x23')](function(_0x237b0c){_0x24ab0d[_0xb37c('0x3e')]=_0x237b0c;return _0x24ab0d;})[_0xb37c('0x23')](respondWithFilteredResult(_0x2596ff,_0x49968d))['catch'](handleError(_0x2596ff,null));};exports[_0xb37c('0x3f')]=function(_0x28c314,_0x470959){var _0xcd48fe={'raw':!![],'where':{'id':_0x28c314[_0xb37c('0x40')]['id']}},_0x19174c={};_0x19174c[_0xb37c('0x2d')]=_[_0xb37c('0x2e')](db['MailSubstatus'][_0xb37c('0x2a')]);_0x19174c[_0xb37c('0x2f')]=_[_0xb37c('0x2e')](_0x28c314[_0xb37c('0x2f')]);_0x19174c[_0xb37c('0x30')]=_[_0xb37c('0x31')](_0x19174c[_0xb37c('0x2d')],_0x19174c['query']);_0xcd48fe[_0xb37c('0x32')]=_[_0xb37c('0x31')](_0x19174c[_0xb37c('0x2d')],qs['fields'](_0x28c314[_0xb37c('0x2f')][_0xb37c('0x33')]));_0xcd48fe[_0xb37c('0x32')]=_0xcd48fe[_0xb37c('0x32')]['length']?_0xcd48fe[_0xb37c('0x32')]:_0x19174c['model'];if(_0x28c314['query'][_0xb37c('0x3c')]){_0xcd48fe[_0xb37c('0x41')]=[{'all':!![]}];}_0xcd48fe=_['merge']({},_0xcd48fe,_0x28c314[_0xb37c('0x3b')]);return db[_0xb37c('0x29')][_0xb37c('0x42')](_0xcd48fe)['then'](handleEntityNotFound(_0x470959,null))[_0xb37c('0x23')](respondWithResult(_0x470959,null))['catch'](handleError(_0x470959,null));};exports[_0xb37c('0x43')]=function(_0x4d22cd,_0x2201b3){return db['MailSubstatus']['create'](_0x4d22cd['body'],{})['then'](respondWithResult(_0x2201b3,0xc9))['catch'](handleError(_0x2201b3,null));};exports[_0xb37c('0x44')]=function(_0x3672bb,_0x3883c){if(_0x3672bb[_0xb37c('0x45')]['id']){delete _0x3672bb[_0xb37c('0x45')]['id'];}return db[_0xb37c('0x29')][_0xb37c('0x42')]({'where':{'id':_0x3672bb['params']['id']}})[_0xb37c('0x23')](handleEntityNotFound(_0x3883c,null))[_0xb37c('0x23')](saveUpdates(_0x3672bb[_0xb37c('0x45')],null))[_0xb37c('0x23')](respondWithResult(_0x3883c,null))[_0xb37c('0x46')](handleError(_0x3883c,null));};exports['destroy']=function(_0x379468,_0x58a988){return db[_0xb37c('0x29')][_0xb37c('0x42')]({'where':{'id':_0x379468['params']['id']}})['then'](handleEntityNotFound(_0x58a988,null))[_0xb37c('0x23')](removeEntity(_0x58a988,null))[_0xb37c('0x46')](handleError(_0x58a988,null));};exports[_0xb37c('0x47')]=function(_0x4178e2,_0x283c7c){return db['MailSubstatus'][_0xb37c('0x47')]()[_0xb37c('0x23')](respondWithResult(_0x283c7c,null))[_0xb37c('0x46')](handleError(_0x283c7c,null));};
\ No newline at end of file
+var _0xb916=['../../config/environment','../../config/license/util','sendStatus','status','end','json','limit','undefined','count','offset','apply','save','destroy','then','error','stack','name','send','index','MailSubstatus','fieldName','type','key','map','query','keys','intersection','model','fields','attributes','hasOwnProperty','order','sort','where','filters','pick','filter','merge','VIRTUAL','options','includeAll','findAll','rows','catch','show','rawAttributes','length','create','body','find','params','describe','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/utils'];(function(_0x269ec7,_0x12df5c){var _0x358abd=function(_0x186335){while(--_0x186335){_0x269ec7['push'](_0x269ec7['shift']());}};_0x358abd(++_0x12df5c);}(_0xb916,0xc8));var _0x6b91=function(_0x390dad,_0x3a3e5a){_0x390dad=_0x390dad-0x0;var _0x490148=_0xb916[_0x390dad];return _0x490148;};'use strict';var emlformat=require(_0x6b91('0x0'));var rimraf=require(_0x6b91('0x1'));var zipdir=require(_0x6b91('0x2'));var jsonpatch=require(_0x6b91('0x3'));var rp=require(_0x6b91('0x4'));var moment=require(_0x6b91('0x5'));var BPromise=require(_0x6b91('0x6'));var Mustache=require(_0x6b91('0x7'));var util=require('util');var path=require('path');var sox=require(_0x6b91('0x8'));var csv=require(_0x6b91('0x9'));var ejs=require(_0x6b91('0xa'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0x6b91('0xb'));var crypto=require('crypto');var jsforce=require(_0x6b91('0xc'));var deskjs=require(_0x6b91('0xd'));var toCsv=require('to-csv');var querystring=require(_0x6b91('0xe'));var Papa=require(_0x6b91('0xf'));var Redis=require('ioredis');var authService=require(_0x6b91('0x10'));var qs=require(_0x6b91('0x11'));var as=require(_0x6b91('0x12'));var hardwareService=require(_0x6b91('0x13'));var logger=require('../../config/logger')(_0x6b91('0x14'));var utils=require(_0x6b91('0x15'));var config=require(_0x6b91('0x16'));var licenseUtil=require(_0x6b91('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x24865b,_0x289a8f){_0x289a8f=_0x289a8f||0xcc;return function(_0x237504){if(_0x237504){return _0x24865b[_0x6b91('0x18')](_0x289a8f);}return _0x24865b[_0x6b91('0x19')](_0x289a8f)[_0x6b91('0x1a')]();};}function respondWithResult(_0x12ad28,_0x3693c6){_0x3693c6=_0x3693c6||0xc8;return function(_0x28f55b){if(_0x28f55b){return _0x12ad28['status'](_0x3693c6)[_0x6b91('0x1b')](_0x28f55b);}};}function respondWithFilteredResult(_0x358587,_0x35dd10){return function(_0x521b1d){if(_0x521b1d){var _0x5868b9=typeof _0x35dd10['offset']==='undefined'&&typeof _0x35dd10[_0x6b91('0x1c')]===_0x6b91('0x1d');var _0x2eed58=_0x521b1d[_0x6b91('0x1e')];var _0x4d03ce=_0x5868b9?0x0:_0x35dd10[_0x6b91('0x1f')];var _0x340bc9=_0x5868b9?_0x521b1d[_0x6b91('0x1e')]:_0x35dd10['offset']+_0x35dd10[_0x6b91('0x1c')];var _0x1d87c9;if(_0x340bc9>=_0x2eed58){_0x340bc9=_0x2eed58;_0x1d87c9=0xc8;}else{_0x1d87c9=0xce;}_0x358587[_0x6b91('0x19')](_0x1d87c9);return _0x358587['set']('Content-Range',_0x4d03ce+'-'+_0x340bc9+'/'+_0x2eed58)[_0x6b91('0x1b')](_0x521b1d);}return null;};}function patchUpdates(_0x269eb0){return function(_0x43bff3){try{jsonpatch[_0x6b91('0x20')](_0x43bff3,_0x269eb0,!![]);}catch(_0x591217){return BPromise['reject'](_0x591217);}return _0x43bff3[_0x6b91('0x21')]();};}function saveUpdates(_0x1e8b58,_0xf0ecad){return function(_0x3d9c81){if(_0x3d9c81){return _0x3d9c81['update'](_0x1e8b58)['then'](function(_0x2a8260){return _0x2a8260;});}return null;};}function removeEntity(_0x15bcee,_0x10af4f){return function(_0x27b706){if(_0x27b706){return _0x27b706[_0x6b91('0x22')]()[_0x6b91('0x23')](function(){_0x15bcee['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x31b9b4,_0x34f0e9){return function(_0x381f7f){if(!_0x381f7f){_0x31b9b4[_0x6b91('0x18')](0x194);}return _0x381f7f;};}function handleError(_0x384226,_0x209da4){_0x209da4=_0x209da4||0x1f4;return function(_0x1243d2){logger[_0x6b91('0x24')](_0x1243d2[_0x6b91('0x25')]);if(_0x1243d2['name']){delete _0x1243d2[_0x6b91('0x26')];}_0x384226[_0x6b91('0x19')](_0x209da4)[_0x6b91('0x27')](_0x1243d2);};}exports[_0x6b91('0x28')]=function(_0x2c9922,_0x167445){var _0x5a657b={},_0x57805a={},_0x238bcf={'count':0x0,'rows':[]};var _0xb289e2=_['map'](db[_0x6b91('0x29')]['rawAttributes'],function(_0x2a83bc){return{'name':_0x2a83bc[_0x6b91('0x2a')],'type':_0x2a83bc[_0x6b91('0x2b')][_0x6b91('0x2c')]};});_0x57805a['model']=_[_0x6b91('0x2d')](_0xb289e2,_0x6b91('0x26'));_0x57805a[_0x6b91('0x2e')]=_[_0x6b91('0x2f')](_0x2c9922[_0x6b91('0x2e')]);_0x57805a['filters']=_[_0x6b91('0x30')](_0x57805a[_0x6b91('0x31')],_0x57805a[_0x6b91('0x2e')]);_0x5a657b['attributes']=_[_0x6b91('0x30')](_0x57805a[_0x6b91('0x31')],qs[_0x6b91('0x32')](_0x2c9922[_0x6b91('0x2e')]['fields']));_0x5a657b['attributes']=_0x5a657b['attributes']['length']?_0x5a657b[_0x6b91('0x33')]:_0x57805a[_0x6b91('0x31')];if(!_0x2c9922[_0x6b91('0x2e')][_0x6b91('0x34')]('nolimit')){_0x5a657b[_0x6b91('0x1c')]=qs[_0x6b91('0x1c')](_0x2c9922['query'][_0x6b91('0x1c')]);_0x5a657b['offset']=qs['offset'](_0x2c9922[_0x6b91('0x2e')]['offset']);}_0x5a657b[_0x6b91('0x35')]=qs[_0x6b91('0x36')](_0x2c9922[_0x6b91('0x2e')][_0x6b91('0x36')]);_0x5a657b[_0x6b91('0x37')]=qs[_0x6b91('0x38')](_[_0x6b91('0x39')](_0x2c9922[_0x6b91('0x2e')],_0x57805a['filters']),_0xb289e2);if(_0x2c9922[_0x6b91('0x2e')][_0x6b91('0x3a')]){_0x5a657b['where']=_[_0x6b91('0x3b')](_0x5a657b[_0x6b91('0x37')],{'$or':_[_0x6b91('0x2d')](_0xb289e2,function(_0x581fb1){if(_0x581fb1['type']!==_0x6b91('0x3c')){var _0xd7e4ee={};_0xd7e4ee[_0x581fb1[_0x6b91('0x26')]]={'$like':'%'+_0x2c9922[_0x6b91('0x2e')]['filter']+'%'};return _0xd7e4ee;}})});}_0x5a657b=_[_0x6b91('0x3b')]({},_0x5a657b,_0x2c9922[_0x6b91('0x3d')]);var _0x415619={'where':_0x5a657b[_0x6b91('0x37')]};return db['MailSubstatus'][_0x6b91('0x1e')](_0x415619)['then'](function(_0x24a1bd){_0x238bcf['count']=_0x24a1bd;if(_0x2c9922['query'][_0x6b91('0x3e')]){_0x5a657b['include']=[{'all':!![]}];}return db[_0x6b91('0x29')][_0x6b91('0x3f')](_0x5a657b);})['then'](function(_0x4a7b44){_0x238bcf[_0x6b91('0x40')]=_0x4a7b44;return _0x238bcf;})[_0x6b91('0x23')](respondWithFilteredResult(_0x167445,_0x5a657b))[_0x6b91('0x41')](handleError(_0x167445,null));};exports[_0x6b91('0x42')]=function(_0x161dc6,_0x113ae6){var _0x283e8b={'raw':!![],'where':{'id':_0x161dc6['params']['id']}},_0x5d5d56={};_0x5d5d56['model']=_[_0x6b91('0x2f')](db[_0x6b91('0x29')][_0x6b91('0x43')]);_0x5d5d56[_0x6b91('0x2e')]=_[_0x6b91('0x2f')](_0x161dc6[_0x6b91('0x2e')]);_0x5d5d56[_0x6b91('0x38')]=_[_0x6b91('0x30')](_0x5d5d56['model'],_0x5d5d56[_0x6b91('0x2e')]);_0x283e8b['attributes']=_[_0x6b91('0x30')](_0x5d5d56['model'],qs[_0x6b91('0x32')](_0x161dc6[_0x6b91('0x2e')][_0x6b91('0x32')]));_0x283e8b[_0x6b91('0x33')]=_0x283e8b[_0x6b91('0x33')][_0x6b91('0x44')]?_0x283e8b['attributes']:_0x5d5d56[_0x6b91('0x31')];if(_0x161dc6[_0x6b91('0x2e')][_0x6b91('0x3e')]){_0x283e8b['include']=[{'all':!![]}];}_0x283e8b=_['merge']({},_0x283e8b,_0x161dc6[_0x6b91('0x3d')]);return db[_0x6b91('0x29')]['find'](_0x283e8b)[_0x6b91('0x23')](handleEntityNotFound(_0x113ae6,null))[_0x6b91('0x23')](respondWithResult(_0x113ae6,null))[_0x6b91('0x41')](handleError(_0x113ae6,null));};exports[_0x6b91('0x45')]=function(_0x44e25a,_0x2a1f0d){return db[_0x6b91('0x29')][_0x6b91('0x45')](_0x44e25a[_0x6b91('0x46')],{})[_0x6b91('0x23')](respondWithResult(_0x2a1f0d,0xc9))[_0x6b91('0x41')](handleError(_0x2a1f0d,null));};exports['update']=function(_0x1b9479,_0xe7589e){if(_0x1b9479[_0x6b91('0x46')]['id']){delete _0x1b9479['body']['id'];}return db[_0x6b91('0x29')][_0x6b91('0x47')]({'where':{'id':_0x1b9479[_0x6b91('0x48')]['id']}})[_0x6b91('0x23')](handleEntityNotFound(_0xe7589e,null))[_0x6b91('0x23')](saveUpdates(_0x1b9479[_0x6b91('0x46')],null))['then'](respondWithResult(_0xe7589e,null))[_0x6b91('0x41')](handleError(_0xe7589e,null));};exports[_0x6b91('0x22')]=function(_0x2789dd,_0x2e29d2){return db[_0x6b91('0x29')][_0x6b91('0x47')]({'where':{'id':_0x2789dd[_0x6b91('0x48')]['id']}})[_0x6b91('0x23')](handleEntityNotFound(_0x2e29d2,null))['then'](removeEntity(_0x2e29d2,null))[_0x6b91('0x41')](handleError(_0x2e29d2,null));};exports['describe']=function(_0x265d20,_0x49ab4e){return db[_0x6b91('0x29')][_0x6b91('0x49')]()['then'](respondWithResult(_0x49ab4e,null))[_0x6b91('0x41')](handleError(_0x49ab4e,null));};
\ No newline at end of file