Built motion from commit 14588770.|2.5.38
[motion2.git] / server / api / intFreshsalesField / intFreshsalesField.controller.js
index 5861d41..fb2125b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b41=['sort','where','filter','VIRTUAL','FreshsalesField','includeAll','include','findAll','rows','catch','show','params','rawAttributes','merge','options','find','create','body','update','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','fs-extra','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','end','status','json','undefined','count','offset','limit','set','apply','reject','then','destroy','error','stack','name','map','fieldName','type','key','model','query','keys','filters','intersection','attributes','fields','length'];(function(_0x3b5193,_0x37beec){var _0x5b90ec=function(_0x5a680b){while(--_0x5a680b){_0x3b5193['push'](_0x3b5193['shift']());}};_0x5b90ec(++_0x37beec);}(_0x3b41,0x171));var _0x13b4=function(_0x4f4d19,_0x574245){_0x4f4d19=_0x4f4d19-0x0;var _0x27a258=_0x3b41[_0x4f4d19];return _0x27a258;};'use strict';var emlformat=require('eml-format');var rimraf=require(_0x13b4('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x13b4('0x1'));var rp=require(_0x13b4('0x2'));var moment=require(_0x13b4('0x3'));var BPromise=require(_0x13b4('0x4'));var Mustache=require(_0x13b4('0x5'));var util=require(_0x13b4('0x6'));var path=require(_0x13b4('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var fs_extra=require(_0x13b4('0x8'));var _=require('lodash');var squel=require(_0x13b4('0x9'));var crypto=require(_0x13b4('0xa'));var jsforce=require(_0x13b4('0xb'));var deskjs=require(_0x13b4('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x13b4('0xd'));var Redis=require('ioredis');var authService=require(_0x13b4('0xe'));var qs=require(_0x13b4('0xf'));var as=require(_0x13b4('0x10'));var hardwareService=require(_0x13b4('0x11'));var logger=require(_0x13b4('0x12'))(_0x13b4('0x13'));var utils=require(_0x13b4('0x14'));var config=require(_0x13b4('0x15'));var licenseUtil=require(_0x13b4('0x16'));var db=require(_0x13b4('0x17'))['db'];function respondWithStatusCode(_0x366400,_0x2ed10e){_0x2ed10e=_0x2ed10e||0xcc;return function(_0x258f4e){if(_0x258f4e){return _0x366400['sendStatus'](_0x2ed10e);}return _0x366400['status'](_0x2ed10e)[_0x13b4('0x18')]();};}function respondWithResult(_0x213ca9,_0x1b1599){_0x1b1599=_0x1b1599||0xc8;return function(_0x1c18bb){if(_0x1c18bb){return _0x213ca9[_0x13b4('0x19')](_0x1b1599)[_0x13b4('0x1a')](_0x1c18bb);}};}function respondWithFilteredResult(_0x38a38a,_0x582446){return function(_0x1d7eaf){if(_0x1d7eaf){var _0x171737=typeof _0x582446['offset']===_0x13b4('0x1b')&&typeof _0x582446['limit']==='undefined';var _0x653cd4=_0x1d7eaf[_0x13b4('0x1c')];var _0xac8477=_0x171737?0x0:_0x582446[_0x13b4('0x1d')];var _0x56ab0d=_0x171737?_0x1d7eaf['count']:_0x582446['offset']+_0x582446[_0x13b4('0x1e')];var _0xb1bcdc;if(_0x56ab0d>=_0x653cd4){_0x56ab0d=_0x653cd4;_0xb1bcdc=0xc8;}else{_0xb1bcdc=0xce;}_0x38a38a[_0x13b4('0x19')](_0xb1bcdc);return _0x38a38a[_0x13b4('0x1f')]('Content-Range',_0xac8477+'-'+_0x56ab0d+'/'+_0x653cd4)[_0x13b4('0x1a')](_0x1d7eaf);}return null;};}function patchUpdates(_0x35bd2c){return function(_0x541f51){try{jsonpatch[_0x13b4('0x20')](_0x541f51,_0x35bd2c,!![]);}catch(_0x31d850){return BPromise[_0x13b4('0x21')](_0x31d850);}return _0x541f51['save']();};}function saveUpdates(_0x569e60,_0x151be1){return function(_0x26f903){if(_0x26f903){return _0x26f903['update'](_0x569e60)[_0x13b4('0x22')](function(_0x51e07c){return _0x51e07c;});}return null;};}function removeEntity(_0x27c0fb,_0x40ef2e){return function(_0x3ee5ed){if(_0x3ee5ed){return _0x3ee5ed[_0x13b4('0x23')]()[_0x13b4('0x22')](function(){_0x27c0fb[_0x13b4('0x19')](0xcc)[_0x13b4('0x18')]();});}};}function handleEntityNotFound(_0x4476b4,_0xb0ab49){return function(_0x417d52){if(!_0x417d52){_0x4476b4['sendStatus'](0x194);}return _0x417d52;};}function handleError(_0x5b7f98,_0x390a92){_0x390a92=_0x390a92||0x1f4;return function(_0x277645){logger[_0x13b4('0x24')](_0x277645[_0x13b4('0x25')]);if(_0x277645['name']){delete _0x277645[_0x13b4('0x26')];}_0x5b7f98[_0x13b4('0x19')](_0x390a92)['send'](_0x277645);};}exports['index']=function(_0x2f5598,_0x51a15f){var _0x21868d={},_0x39b995={},_0x3b222e={'count':0x0,'rows':[]};var _0x81f940=_[_0x13b4('0x27')](db['FreshsalesField']['rawAttributes'],function(_0x3fe7b8){return{'name':_0x3fe7b8[_0x13b4('0x28')],'type':_0x3fe7b8[_0x13b4('0x29')][_0x13b4('0x2a')]};});_0x39b995[_0x13b4('0x2b')]=_[_0x13b4('0x27')](_0x81f940,_0x13b4('0x26'));_0x39b995[_0x13b4('0x2c')]=_[_0x13b4('0x2d')](_0x2f5598[_0x13b4('0x2c')]);_0x39b995[_0x13b4('0x2e')]=_[_0x13b4('0x2f')](_0x39b995[_0x13b4('0x2b')],_0x39b995[_0x13b4('0x2c')]);_0x21868d[_0x13b4('0x30')]=_['intersection'](_0x39b995[_0x13b4('0x2b')],qs[_0x13b4('0x31')](_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x31')]));_0x21868d[_0x13b4('0x30')]=_0x21868d['attributes'][_0x13b4('0x32')]?_0x21868d[_0x13b4('0x30')]:_0x39b995[_0x13b4('0x2b')];if(!_0x2f5598[_0x13b4('0x2c')]['hasOwnProperty']('nolimit')){_0x21868d[_0x13b4('0x1e')]=qs[_0x13b4('0x1e')](_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x1e')]);_0x21868d['offset']=qs['offset'](_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x1d')]);}_0x21868d['order']=qs[_0x13b4('0x33')](_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x33')]);_0x21868d[_0x13b4('0x34')]=qs['filters'](_['pick'](_0x2f5598[_0x13b4('0x2c')],_0x39b995[_0x13b4('0x2e')]),_0x81f940);if(_0x2f5598['query'][_0x13b4('0x35')]){_0x21868d[_0x13b4('0x34')]=_['merge'](_0x21868d[_0x13b4('0x34')],{'$or':_[_0x13b4('0x27')](_0x81f940,function(_0x36c8cb){if(_0x36c8cb[_0x13b4('0x29')]!==_0x13b4('0x36')){var _0x58bd88={};_0x58bd88[_0x36c8cb[_0x13b4('0x26')]]={'$like':'%'+_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x35')]+'%'};return _0x58bd88;}})});}_0x21868d=_['merge']({},_0x21868d,_0x2f5598['options']);var _0xe6678a={'where':_0x21868d[_0x13b4('0x34')]};return db[_0x13b4('0x37')][_0x13b4('0x1c')](_0xe6678a)[_0x13b4('0x22')](function(_0x49dcc3){_0x3b222e[_0x13b4('0x1c')]=_0x49dcc3;if(_0x2f5598[_0x13b4('0x2c')][_0x13b4('0x38')]){_0x21868d[_0x13b4('0x39')]=[{'all':!![]}];}return db[_0x13b4('0x37')][_0x13b4('0x3a')](_0x21868d);})[_0x13b4('0x22')](function(_0x167495){_0x3b222e[_0x13b4('0x3b')]=_0x167495;return _0x3b222e;})[_0x13b4('0x22')](respondWithFilteredResult(_0x51a15f,_0x21868d))[_0x13b4('0x3c')](handleError(_0x51a15f,null));};exports[_0x13b4('0x3d')]=function(_0x215558,_0x3356f2){var _0x1a25c3={'raw':!![],'where':{'id':_0x215558[_0x13b4('0x3e')]['id']}},_0x4a69e1={};_0x4a69e1[_0x13b4('0x2b')]=_[_0x13b4('0x2d')](db['FreshsalesField'][_0x13b4('0x3f')]);_0x4a69e1['query']=_[_0x13b4('0x2d')](_0x215558[_0x13b4('0x2c')]);_0x4a69e1[_0x13b4('0x2e')]=_[_0x13b4('0x2f')](_0x4a69e1[_0x13b4('0x2b')],_0x4a69e1['query']);_0x1a25c3['attributes']=_[_0x13b4('0x2f')](_0x4a69e1[_0x13b4('0x2b')],qs[_0x13b4('0x31')](_0x215558[_0x13b4('0x2c')][_0x13b4('0x31')]));_0x1a25c3[_0x13b4('0x30')]=_0x1a25c3[_0x13b4('0x30')][_0x13b4('0x32')]?_0x1a25c3[_0x13b4('0x30')]:_0x4a69e1[_0x13b4('0x2b')];if(_0x215558['query'][_0x13b4('0x38')]){_0x1a25c3[_0x13b4('0x39')]=[{'all':!![]}];}_0x1a25c3=_[_0x13b4('0x40')]({},_0x1a25c3,_0x215558[_0x13b4('0x41')]);return db[_0x13b4('0x37')][_0x13b4('0x42')](_0x1a25c3)[_0x13b4('0x22')](handleEntityNotFound(_0x3356f2,null))['then'](respondWithResult(_0x3356f2,null))[_0x13b4('0x3c')](handleError(_0x3356f2,null));};exports[_0x13b4('0x43')]=function(_0x2b8de2,_0x4b98e5){return db[_0x13b4('0x37')][_0x13b4('0x43')](_0x2b8de2[_0x13b4('0x44')],{})[_0x13b4('0x22')](respondWithResult(_0x4b98e5,0xc9))[_0x13b4('0x3c')](handleError(_0x4b98e5,null));};exports[_0x13b4('0x45')]=function(_0x1ea027,_0xb3dd8){if(_0x1ea027[_0x13b4('0x44')]['id']){delete _0x1ea027[_0x13b4('0x44')]['id'];}return db['FreshsalesField'][_0x13b4('0x42')]({'where':{'id':_0x1ea027[_0x13b4('0x3e')]['id']}})['then'](handleEntityNotFound(_0xb3dd8,null))[_0x13b4('0x22')](saveUpdates(_0x1ea027[_0x13b4('0x44')],null))[_0x13b4('0x22')](respondWithResult(_0xb3dd8,null))[_0x13b4('0x3c')](handleError(_0xb3dd8,null));};exports[_0x13b4('0x23')]=function(_0xfc4cb1,_0x1a47ea){return db[_0x13b4('0x37')]['find']({'where':{'id':_0xfc4cb1['params']['id']}})[_0x13b4('0x22')](handleEntityNotFound(_0x1a47ea,null))['then'](removeEntity(_0x1a47ea,null))['catch'](handleError(_0x1a47ea,null));};
\ No newline at end of file
+var _0x628b=['../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','sendStatus','status','end','undefined','limit','count','offset','set','Content-Range','json','apply','reject','save','then','destroy','error','stack','name','send','index','map','FreshsalesField','rawAttributes','fieldName','type','key','model','query','keys','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','VIRTUAL','options','includeAll','include','findAll','rows','show','params','length','find','catch','create','body','update','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','../../components/auth/service'];(function(_0x2113fa,_0x4694a7){var _0x588c4a=function(_0x267f0f){while(--_0x267f0f){_0x2113fa['push'](_0x2113fa['shift']());}};_0x588c4a(++_0x4694a7);}(_0x628b,0x8c));var _0xb628=function(_0x224a72,_0x207894){_0x224a72=_0x224a72-0x0;var _0x2d185a=_0x628b[_0x224a72];return _0x2d185a;};'use strict';var emlformat=require(_0xb628('0x0'));var rimraf=require(_0xb628('0x1'));var zipdir=require(_0xb628('0x2'));var jsonpatch=require(_0xb628('0x3'));var rp=require(_0xb628('0x4'));var moment=require(_0xb628('0x5'));var BPromise=require(_0xb628('0x6'));var Mustache=require(_0xb628('0x7'));var util=require(_0xb628('0x8'));var path=require(_0xb628('0x9'));var sox=require(_0xb628('0xa'));var csv=require(_0xb628('0xb'));var ejs=require(_0xb628('0xc'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require(_0xb628('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xb628('0xe'));var deskjs=require(_0xb628('0xf'));var toCsv=require(_0xb628('0xb'));var querystring=require(_0xb628('0x10'));var Papa=require('papaparse');var Redis=require('ioredis');var authService=require(_0xb628('0x11'));var qs=require(_0xb628('0x12'));var as=require(_0xb628('0x13'));var hardwareService=require(_0xb628('0x14'));var logger=require(_0xb628('0x15'))(_0xb628('0x16'));var utils=require(_0xb628('0x17'));var config=require('../../config/environment');var licenseUtil=require('../../config/license/util');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2a337f,_0x43a886){_0x43a886=_0x43a886||0xcc;return function(_0x40161e){if(_0x40161e){return _0x2a337f[_0xb628('0x18')](_0x43a886);}return _0x2a337f[_0xb628('0x19')](_0x43a886)[_0xb628('0x1a')]();};}function respondWithResult(_0x4161b1,_0x1e8837){_0x1e8837=_0x1e8837||0xc8;return function(_0x15bac5){if(_0x15bac5){return _0x4161b1[_0xb628('0x19')](_0x1e8837)['json'](_0x15bac5);}};}function respondWithFilteredResult(_0x12c6ac,_0x4b4903){return function(_0x2d9746){if(_0x2d9746){var _0x56bf6a=typeof _0x4b4903['offset']===_0xb628('0x1b')&&typeof _0x4b4903[_0xb628('0x1c')]===_0xb628('0x1b');var _0x3455c1=_0x2d9746[_0xb628('0x1d')];var _0x3f0c98=_0x56bf6a?0x0:_0x4b4903[_0xb628('0x1e')];var _0x591092=_0x56bf6a?_0x2d9746['count']:_0x4b4903[_0xb628('0x1e')]+_0x4b4903['limit'];var _0xef16f9;if(_0x591092>=_0x3455c1){_0x591092=_0x3455c1;_0xef16f9=0xc8;}else{_0xef16f9=0xce;}_0x12c6ac[_0xb628('0x19')](_0xef16f9);return _0x12c6ac[_0xb628('0x1f')](_0xb628('0x20'),_0x3f0c98+'-'+_0x591092+'/'+_0x3455c1)[_0xb628('0x21')](_0x2d9746);}return null;};}function patchUpdates(_0x376878){return function(_0x1ce5ae){try{jsonpatch[_0xb628('0x22')](_0x1ce5ae,_0x376878,!![]);}catch(_0x468fd5){return BPromise[_0xb628('0x23')](_0x468fd5);}return _0x1ce5ae[_0xb628('0x24')]();};}function saveUpdates(_0x902e59,_0x1b7c6f){return function(_0x2c144f){if(_0x2c144f){return _0x2c144f['update'](_0x902e59)[_0xb628('0x25')](function(_0x3a5bb0){return _0x3a5bb0;});}return null;};}function removeEntity(_0x51e37a,_0x4f76b8){return function(_0x17f401){if(_0x17f401){return _0x17f401[_0xb628('0x26')]()['then'](function(){_0x51e37a['status'](0xcc)[_0xb628('0x1a')]();});}};}function handleEntityNotFound(_0x22341d,_0x32f7b9){return function(_0x44737e){if(!_0x44737e){_0x22341d['sendStatus'](0x194);}return _0x44737e;};}function handleError(_0x5629ed,_0x265504){_0x265504=_0x265504||0x1f4;return function(_0x2560ce){logger[_0xb628('0x27')](_0x2560ce[_0xb628('0x28')]);if(_0x2560ce[_0xb628('0x29')]){delete _0x2560ce[_0xb628('0x29')];}_0x5629ed[_0xb628('0x19')](_0x265504)[_0xb628('0x2a')](_0x2560ce);};}exports[_0xb628('0x2b')]=function(_0xf9a449,_0x495d8e){var _0x5822f2={},_0x25117f={},_0x484253={'count':0x0,'rows':[]};var _0x2cdfee=_[_0xb628('0x2c')](db[_0xb628('0x2d')][_0xb628('0x2e')],function(_0x208232){return{'name':_0x208232[_0xb628('0x2f')],'type':_0x208232[_0xb628('0x30')][_0xb628('0x31')]};});_0x25117f[_0xb628('0x32')]=_['map'](_0x2cdfee,_0xb628('0x29'));_0x25117f[_0xb628('0x33')]=_[_0xb628('0x34')](_0xf9a449[_0xb628('0x33')]);_0x25117f[_0xb628('0x35')]=_[_0xb628('0x36')](_0x25117f[_0xb628('0x32')],_0x25117f[_0xb628('0x33')]);_0x5822f2['attributes']=_[_0xb628('0x36')](_0x25117f[_0xb628('0x32')],qs[_0xb628('0x37')](_0xf9a449['query'][_0xb628('0x37')]));_0x5822f2[_0xb628('0x38')]=_0x5822f2[_0xb628('0x38')]['length']?_0x5822f2['attributes']:_0x25117f[_0xb628('0x32')];if(!_0xf9a449['query'][_0xb628('0x39')](_0xb628('0x3a'))){_0x5822f2[_0xb628('0x1c')]=qs[_0xb628('0x1c')](_0xf9a449[_0xb628('0x33')]['limit']);_0x5822f2[_0xb628('0x1e')]=qs[_0xb628('0x1e')](_0xf9a449['query']['offset']);}_0x5822f2[_0xb628('0x3b')]=qs[_0xb628('0x3c')](_0xf9a449[_0xb628('0x33')][_0xb628('0x3c')]);_0x5822f2[_0xb628('0x3d')]=qs['filters'](_[_0xb628('0x3e')](_0xf9a449[_0xb628('0x33')],_0x25117f[_0xb628('0x35')]),_0x2cdfee);if(_0xf9a449[_0xb628('0x33')][_0xb628('0x3f')]){_0x5822f2['where']=_[_0xb628('0x40')](_0x5822f2[_0xb628('0x3d')],{'$or':_[_0xb628('0x2c')](_0x2cdfee,function(_0x2efc33){if(_0x2efc33['type']!==_0xb628('0x41')){var _0x313c74={};_0x313c74[_0x2efc33[_0xb628('0x29')]]={'$like':'%'+_0xf9a449[_0xb628('0x33')][_0xb628('0x3f')]+'%'};return _0x313c74;}})});}_0x5822f2=_[_0xb628('0x40')]({},_0x5822f2,_0xf9a449[_0xb628('0x42')]);var _0xb3094b={'where':_0x5822f2[_0xb628('0x3d')]};return db[_0xb628('0x2d')][_0xb628('0x1d')](_0xb3094b)[_0xb628('0x25')](function(_0x1f2a85){_0x484253[_0xb628('0x1d')]=_0x1f2a85;if(_0xf9a449[_0xb628('0x33')][_0xb628('0x43')]){_0x5822f2[_0xb628('0x44')]=[{'all':!![]}];}return db[_0xb628('0x2d')][_0xb628('0x45')](_0x5822f2);})[_0xb628('0x25')](function(_0x5a9a4c){_0x484253[_0xb628('0x46')]=_0x5a9a4c;return _0x484253;})[_0xb628('0x25')](respondWithFilteredResult(_0x495d8e,_0x5822f2))['catch'](handleError(_0x495d8e,null));};exports[_0xb628('0x47')]=function(_0x45d872,_0x3da5fc){var _0x5c414d={'raw':!![],'where':{'id':_0x45d872[_0xb628('0x48')]['id']}},_0xc68f84={};_0xc68f84[_0xb628('0x32')]=_[_0xb628('0x34')](db[_0xb628('0x2d')][_0xb628('0x2e')]);_0xc68f84[_0xb628('0x33')]=_[_0xb628('0x34')](_0x45d872[_0xb628('0x33')]);_0xc68f84[_0xb628('0x35')]=_[_0xb628('0x36')](_0xc68f84[_0xb628('0x32')],_0xc68f84[_0xb628('0x33')]);_0x5c414d[_0xb628('0x38')]=_[_0xb628('0x36')](_0xc68f84[_0xb628('0x32')],qs[_0xb628('0x37')](_0x45d872[_0xb628('0x33')][_0xb628('0x37')]));_0x5c414d[_0xb628('0x38')]=_0x5c414d[_0xb628('0x38')][_0xb628('0x49')]?_0x5c414d[_0xb628('0x38')]:_0xc68f84[_0xb628('0x32')];if(_0x45d872[_0xb628('0x33')][_0xb628('0x43')]){_0x5c414d[_0xb628('0x44')]=[{'all':!![]}];}_0x5c414d=_['merge']({},_0x5c414d,_0x45d872['options']);return db[_0xb628('0x2d')][_0xb628('0x4a')](_0x5c414d)['then'](handleEntityNotFound(_0x3da5fc,null))[_0xb628('0x25')](respondWithResult(_0x3da5fc,null))[_0xb628('0x4b')](handleError(_0x3da5fc,null));};exports[_0xb628('0x4c')]=function(_0x56e96f,_0x3b3c65){return db[_0xb628('0x2d')]['create'](_0x56e96f[_0xb628('0x4d')],{})[_0xb628('0x25')](respondWithResult(_0x3b3c65,0xc9))['catch'](handleError(_0x3b3c65,null));};exports[_0xb628('0x4e')]=function(_0x36c42b,_0x390428){if(_0x36c42b[_0xb628('0x4d')]['id']){delete _0x36c42b[_0xb628('0x4d')]['id'];}return db[_0xb628('0x2d')][_0xb628('0x4a')]({'where':{'id':_0x36c42b[_0xb628('0x48')]['id']}})[_0xb628('0x25')](handleEntityNotFound(_0x390428,null))[_0xb628('0x25')](saveUpdates(_0x36c42b[_0xb628('0x4d')],null))[_0xb628('0x25')](respondWithResult(_0x390428,null))[_0xb628('0x4b')](handleError(_0x390428,null));};exports['destroy']=function(_0x735839,_0x44e0cc){return db['FreshsalesField'][_0xb628('0x4a')]({'where':{'id':_0x735839['params']['id']}})[_0xb628('0x25')](handleEntityNotFound(_0x44e0cc,null))[_0xb628('0x25')](removeEntity(_0x44e0cc,null))['catch'](handleError(_0x44e0cc,null));};
\ No newline at end of file