Built motion from commit (unavailable).|2.5.21
[motion2.git] / server / api / userProfileSection / userProfileSection.controller.js
index eb9735b..57c6e23 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4846=['fieldName','key','model','keys','query','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','type','VIRTUAL','filter','merge','options','includeAll','findAll','catch','show','params','intersection','include','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','util','path','to-csv','ejs','lodash','squel','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','status','end','json','count','offset','limit','set','apply','reject','save','update','then','destroy','sendStatus','stack','name','send','index','map','UserProfileSection','rawAttributes'];(function(_0x109307,_0x4f12d1){var _0x2ea750=function(_0x4758aa){while(--_0x4758aa){_0x109307['push'](_0x109307['shift']());}};_0x2ea750(++_0x4f12d1);}(_0x4846,0x19b));var _0x6484=function(_0x2c43f8,_0x261d10){_0x2c43f8=_0x2c43f8-0x0;var _0x3c0c0f=_0x4846[_0x2c43f8];return _0x3c0c0f;};'use strict';var pdf=require(_0x6484('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x6484('0x1'));var zipdir=require(_0x6484('0x2'));var jsonpatch=require(_0x6484('0x3'));var rp=require(_0x6484('0x4'));var moment=require(_0x6484('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x6484('0x6'));var path=require(_0x6484('0x7'));var sox=require('sox');var csv=require(_0x6484('0x8'));var ejs=require(_0x6484('0x9'));var fs=require('fs');var _=require(_0x6484('0xa'));var squel=require(_0x6484('0xb'));var crypto=require('crypto');var jsforce=require(_0x6484('0xc'));var deskjs=require(_0x6484('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x6484('0xe'));var Redis=require('ioredis');var authService=require(_0x6484('0xf'));var qs=require(_0x6484('0x10'));var as=require(_0x6484('0x11'));var hardwareService=require(_0x6484('0x12'));var logger=require(_0x6484('0x13'))(_0x6484('0x14'));var utils=require(_0x6484('0x15'));var config=require(_0x6484('0x16'));var licenseUtil=require(_0x6484('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5e60f4,_0x3670cf){_0x3670cf=_0x3670cf||0xcc;return function(_0x36aea2){if(_0x36aea2){return _0x5e60f4['sendStatus'](_0x3670cf);}return _0x5e60f4[_0x6484('0x18')](_0x3670cf)[_0x6484('0x19')]();};}function respondWithResult(_0x36b381,_0x478aad){_0x478aad=_0x478aad||0xc8;return function(_0x668610){if(_0x668610){return _0x36b381['status'](_0x478aad)[_0x6484('0x1a')](_0x668610);}};}function respondWithFilteredResult(_0x162bdc,_0x5b7364){return function(_0x25b206){if(_0x25b206){var _0x4e199f=_0x25b206[_0x6484('0x1b')],_0x1feaeb=_0x5b7364['offset'],_0x3b2ac7=_0x5b7364[_0x6484('0x1c')]+_0x5b7364[_0x6484('0x1d')],_0x50eb0c;if(_0x3b2ac7>=_0x4e199f){_0x3b2ac7=_0x4e199f;_0x50eb0c=0xc8;}else{_0x50eb0c=0xce;}_0x162bdc[_0x6484('0x18')](_0x50eb0c);return _0x162bdc[_0x6484('0x1e')]('Content-Range',_0x1feaeb+'-'+_0x3b2ac7+'/'+_0x4e199f)[_0x6484('0x1a')](_0x25b206);}return null;};}function patchUpdates(_0x2eb42f){return function(_0x4b9696){try{jsonpatch[_0x6484('0x1f')](_0x4b9696,_0x2eb42f,!![]);}catch(_0x330b60){return BPromise[_0x6484('0x20')](_0x330b60);}return _0x4b9696[_0x6484('0x21')]();};}function saveUpdates(_0x3b5edf,_0x2c70d9){return function(_0x5d0b8a){if(_0x5d0b8a){return _0x5d0b8a[_0x6484('0x22')](_0x3b5edf)[_0x6484('0x23')](function(_0x2e29fe){return _0x2e29fe;});}return null;};}function removeEntity(_0x5cc2a2,_0x346798){return function(_0x5c207d){if(_0x5c207d){return _0x5c207d[_0x6484('0x24')]()['then'](function(){_0x5cc2a2[_0x6484('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x724bcc,_0x2af522){return function(_0x3d261d){if(!_0x3d261d){_0x724bcc[_0x6484('0x25')](0x194);}return _0x3d261d;};}function handleError(_0xc4e608,_0x4a0a1e){_0x4a0a1e=_0x4a0a1e||0x1f4;return function(_0x505b55){logger['error'](_0x505b55[_0x6484('0x26')]);if(_0x505b55[_0x6484('0x27')]){delete _0x505b55[_0x6484('0x27')];}_0xc4e608[_0x6484('0x18')](_0x4a0a1e)[_0x6484('0x28')](_0x505b55);};}exports[_0x6484('0x29')]=function(_0x1dcc4a,_0x330b94){var _0x4cde43={},_0x56b2ed={},_0x330e17={'count':0x0,'rows':[]};var _0x5c3667=_[_0x6484('0x2a')](db[_0x6484('0x2b')][_0x6484('0x2c')],function(_0x239cb5){return{'name':_0x239cb5[_0x6484('0x2d')],'type':_0x239cb5['type'][_0x6484('0x2e')]};});_0x56b2ed[_0x6484('0x2f')]=_[_0x6484('0x2a')](_0x5c3667,_0x6484('0x27'));_0x56b2ed['query']=_[_0x6484('0x30')](_0x1dcc4a[_0x6484('0x31')]);_0x56b2ed['filters']=_['intersection'](_0x56b2ed[_0x6484('0x2f')],_0x56b2ed[_0x6484('0x31')]);_0x4cde43[_0x6484('0x32')]=_['intersection'](_0x56b2ed[_0x6484('0x2f')],qs[_0x6484('0x33')](_0x1dcc4a[_0x6484('0x31')][_0x6484('0x33')]));_0x4cde43[_0x6484('0x32')]=_0x4cde43[_0x6484('0x32')][_0x6484('0x34')]?_0x4cde43[_0x6484('0x32')]:_0x56b2ed[_0x6484('0x2f')];if(!_0x1dcc4a[_0x6484('0x31')][_0x6484('0x35')](_0x6484('0x36'))){_0x4cde43[_0x6484('0x1d')]=qs[_0x6484('0x1d')](_0x1dcc4a[_0x6484('0x31')][_0x6484('0x1d')]);_0x4cde43[_0x6484('0x1c')]=qs[_0x6484('0x1c')](_0x1dcc4a[_0x6484('0x31')]['offset']);}_0x4cde43[_0x6484('0x37')]=qs[_0x6484('0x38')](_0x1dcc4a[_0x6484('0x31')][_0x6484('0x38')]);_0x4cde43[_0x6484('0x39')]=qs[_0x6484('0x3a')](_[_0x6484('0x3b')](_0x1dcc4a[_0x6484('0x31')],_0x56b2ed[_0x6484('0x3a')]),_0x5c3667);if(_0x1dcc4a[_0x6484('0x31')]['filter']){_0x4cde43[_0x6484('0x39')]=_['merge'](_0x4cde43[_0x6484('0x39')],{'$or':_[_0x6484('0x2a')](_0x5c3667,function(_0x2c3ab4){if(_0x2c3ab4[_0x6484('0x3c')]!==_0x6484('0x3d')){var _0x40d5c3={};_0x40d5c3[_0x2c3ab4[_0x6484('0x27')]]={'$like':'%'+_0x1dcc4a['query'][_0x6484('0x3e')]+'%'};return _0x40d5c3;}})});}_0x4cde43=_[_0x6484('0x3f')]({},_0x4cde43,_0x1dcc4a[_0x6484('0x40')]);var _0x1b622f={'where':_0x4cde43[_0x6484('0x39')]};return db[_0x6484('0x2b')][_0x6484('0x1b')](_0x1b622f)[_0x6484('0x23')](function(_0x442c99){_0x330e17[_0x6484('0x1b')]=_0x442c99;if(_0x1dcc4a['query'][_0x6484('0x41')]){_0x4cde43['include']=[{'all':!![]}];}return db[_0x6484('0x2b')][_0x6484('0x42')](_0x4cde43);})[_0x6484('0x23')](function(_0x4a8e0d){_0x330e17['rows']=_0x4a8e0d;return _0x330e17;})['then'](respondWithFilteredResult(_0x330b94,_0x4cde43))[_0x6484('0x43')](handleError(_0x330b94,null));};exports[_0x6484('0x44')]=function(_0x49aad4,_0xac45b5){var _0x2f7bdb={'raw':![],'where':{'id':_0x49aad4[_0x6484('0x45')]['id']}},_0x3b12ad={};_0x3b12ad[_0x6484('0x2f')]=_[_0x6484('0x30')](db[_0x6484('0x2b')][_0x6484('0x2c')]);_0x3b12ad[_0x6484('0x31')]=_['keys'](_0x49aad4[_0x6484('0x31')]);_0x3b12ad[_0x6484('0x3a')]=_[_0x6484('0x46')](_0x3b12ad[_0x6484('0x2f')],_0x3b12ad[_0x6484('0x31')]);_0x2f7bdb[_0x6484('0x32')]=_[_0x6484('0x46')](_0x3b12ad[_0x6484('0x2f')],qs[_0x6484('0x33')](_0x49aad4['query'][_0x6484('0x33')]));_0x2f7bdb[_0x6484('0x32')]=_0x2f7bdb['attributes']['length']?_0x2f7bdb['attributes']:_0x3b12ad[_0x6484('0x2f')];if(_0x49aad4[_0x6484('0x31')][_0x6484('0x41')]){_0x2f7bdb[_0x6484('0x47')]=[{'all':!![]}];}_0x2f7bdb=_[_0x6484('0x3f')]({},_0x2f7bdb,_0x49aad4[_0x6484('0x40')]);return db[_0x6484('0x2b')][_0x6484('0x48')](_0x2f7bdb)['then'](handleEntityNotFound(_0xac45b5,null))[_0x6484('0x23')](respondWithResult(_0xac45b5,null))['catch'](handleError(_0xac45b5,null));};exports[_0x6484('0x49')]=function(_0x3728ed,_0x543026){return db[_0x6484('0x2b')][_0x6484('0x49')](_0x3728ed['body'],{})[_0x6484('0x23')](respondWithResult(_0x543026,0xc9))[_0x6484('0x43')](handleError(_0x543026,null));};exports[_0x6484('0x22')]=function(_0x3719eb,_0x340dae){if(_0x3719eb[_0x6484('0x4a')]['id']){delete _0x3719eb[_0x6484('0x4a')]['id'];}return db[_0x6484('0x2b')]['find']({'where':{'id':_0x3719eb['params']['id']}})['then'](handleEntityNotFound(_0x340dae,null))[_0x6484('0x23')](saveUpdates(_0x3719eb[_0x6484('0x4a')],null))['then'](respondWithResult(_0x340dae,null))[_0x6484('0x43')](handleError(_0x340dae,null));};exports['destroy']=function(_0x192ae3,_0x1f7b00){return db[_0x6484('0x2b')][_0x6484('0x48')]({'where':{'id':_0x192ae3[_0x6484('0x45')]['id']}})['then'](handleEntityNotFound(_0x1f7b00,null))[_0x6484('0x23')](removeEntity(_0x1f7b00,null))[_0x6484('0x43')](handleError(_0x1f7b00,null));};exports[_0x6484('0x4b')]=function(_0x28568c,_0x370410){return db['UserProfileSection']['describe']()[_0x6484('0x23')](respondWithResult(_0x370410,null))[_0x6484('0x43')](handleError(_0x370410,null));};
\ No newline at end of file
+var _0xc036=['destroy','stack','name','send','map','UserProfileSection','rawAttributes','fieldName','type','key','model','query','filters','intersection','attributes','order','sort','where','pick','merge','VIRTUAL','filter','options','includeAll','findAll','rows','catch','show','params','keys','fields','length','include','find','body','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/qs','../../components/parsers/advancedSearch','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','reject','save','update','then'];(function(_0x5cba0d,_0xc5111a){var _0x42d38d=function(_0x344f21){while(--_0x344f21){_0x5cba0d['push'](_0x5cba0d['shift']());}};_0x42d38d(++_0xc5111a);}(_0xc036,0x1ec));var _0x6c03=function(_0x4b809b,_0x5de1c6){_0x4b809b=_0x4b809b-0x0;var _0x338f37=_0xc036[_0x4b809b];return _0x338f37;};'use strict';var pdf=require(_0x6c03('0x0'));var emlformat=require(_0x6c03('0x1'));var rimraf=require(_0x6c03('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6c03('0x3'));var rp=require(_0x6c03('0x4'));var moment=require(_0x6c03('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x6c03('0x6'));var util=require(_0x6c03('0x7'));var path=require(_0x6c03('0x8'));var sox=require('sox');var csv=require(_0x6c03('0x9'));var ejs=require(_0x6c03('0xa'));var fs=require('fs');var _=require(_0x6c03('0xb'));var squel=require(_0x6c03('0xc'));var crypto=require(_0x6c03('0xd'));var jsforce=require(_0x6c03('0xe'));var deskjs=require(_0x6c03('0xf'));var toCsv=require(_0x6c03('0x9'));var querystring=require(_0x6c03('0x10'));var Papa=require(_0x6c03('0x11'));var Redis=require(_0x6c03('0x12'));var authService=require(_0x6c03('0x13'));var qs=require(_0x6c03('0x14'));var as=require(_0x6c03('0x15'));var hardwareService=require(_0x6c03('0x16'));var logger=require(_0x6c03('0x17'))(_0x6c03('0x18'));var utils=require(_0x6c03('0x19'));var config=require('../../config/environment');var licenseUtil=require(_0x6c03('0x1a'));var db=require(_0x6c03('0x1b'))['db'];function respondWithStatusCode(_0x30c75a,_0x191250){_0x191250=_0x191250||0xcc;return function(_0x4655e7){if(_0x4655e7){return _0x30c75a[_0x6c03('0x1c')](_0x191250);}return _0x30c75a[_0x6c03('0x1d')](_0x191250)[_0x6c03('0x1e')]();};}function respondWithResult(_0x111fce,_0x1ddcec){_0x1ddcec=_0x1ddcec||0xc8;return function(_0x2c3004){if(_0x2c3004){return _0x111fce['status'](_0x1ddcec)[_0x6c03('0x1f')](_0x2c3004);}};}function respondWithFilteredResult(_0x496d0f,_0xf384fd){return function(_0x3c0a97){if(_0x3c0a97){var _0x53dd8d=_0x3c0a97[_0x6c03('0x20')],_0x1eb32e=_0xf384fd[_0x6c03('0x21')],_0x4baa4d=_0xf384fd[_0x6c03('0x21')]+_0xf384fd[_0x6c03('0x22')],_0x5deeaa;if(_0x4baa4d>=_0x53dd8d){_0x4baa4d=_0x53dd8d;_0x5deeaa=0xc8;}else{_0x5deeaa=0xce;}_0x496d0f[_0x6c03('0x1d')](_0x5deeaa);return _0x496d0f[_0x6c03('0x23')]('Content-Range',_0x1eb32e+'-'+_0x4baa4d+'/'+_0x53dd8d)[_0x6c03('0x1f')](_0x3c0a97);}return null;};}function patchUpdates(_0x5be1c4){return function(_0x10d5c0){try{jsonpatch['apply'](_0x10d5c0,_0x5be1c4,!![]);}catch(_0x3c8f16){return BPromise[_0x6c03('0x24')](_0x3c8f16);}return _0x10d5c0[_0x6c03('0x25')]();};}function saveUpdates(_0x529679,_0x3ba35d){return function(_0x5ed98b){if(_0x5ed98b){return _0x5ed98b[_0x6c03('0x26')](_0x529679)[_0x6c03('0x27')](function(_0x2196e2){return _0x2196e2;});}return null;};}function removeEntity(_0x24fd51,_0x64c174){return function(_0x2dd035){if(_0x2dd035){return _0x2dd035[_0x6c03('0x28')]()[_0x6c03('0x27')](function(){_0x24fd51[_0x6c03('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x455b7e,_0x41a0da){return function(_0x3885b9){if(!_0x3885b9){_0x455b7e['sendStatus'](0x194);}return _0x3885b9;};}function handleError(_0x429a52,_0x26a075){_0x26a075=_0x26a075||0x1f4;return function(_0x382cc0){logger['error'](_0x382cc0[_0x6c03('0x29')]);if(_0x382cc0[_0x6c03('0x2a')]){delete _0x382cc0[_0x6c03('0x2a')];}_0x429a52['status'](_0x26a075)[_0x6c03('0x2b')](_0x382cc0);};}exports['index']=function(_0xaa056,_0x5c2741){var _0x229a6a={},_0x3839fb={},_0x145152={'count':0x0,'rows':[]};var _0x3659d7=_[_0x6c03('0x2c')](db[_0x6c03('0x2d')][_0x6c03('0x2e')],function(_0xace09d){return{'name':_0xace09d[_0x6c03('0x2f')],'type':_0xace09d[_0x6c03('0x30')][_0x6c03('0x31')]};});_0x3839fb[_0x6c03('0x32')]=_[_0x6c03('0x2c')](_0x3659d7,_0x6c03('0x2a'));_0x3839fb['query']=_['keys'](_0xaa056[_0x6c03('0x33')]);_0x3839fb[_0x6c03('0x34')]=_[_0x6c03('0x35')](_0x3839fb[_0x6c03('0x32')],_0x3839fb['query']);_0x229a6a['attributes']=_[_0x6c03('0x35')](_0x3839fb[_0x6c03('0x32')],qs['fields'](_0xaa056[_0x6c03('0x33')]['fields']));_0x229a6a['attributes']=_0x229a6a['attributes']['length']?_0x229a6a[_0x6c03('0x36')]:_0x3839fb[_0x6c03('0x32')];if(!_0xaa056[_0x6c03('0x33')]['hasOwnProperty']('nolimit')){_0x229a6a[_0x6c03('0x22')]=qs[_0x6c03('0x22')](_0xaa056[_0x6c03('0x33')][_0x6c03('0x22')]);_0x229a6a[_0x6c03('0x21')]=qs['offset'](_0xaa056['query'][_0x6c03('0x21')]);}_0x229a6a[_0x6c03('0x37')]=qs[_0x6c03('0x38')](_0xaa056[_0x6c03('0x33')][_0x6c03('0x38')]);_0x229a6a[_0x6c03('0x39')]=qs[_0x6c03('0x34')](_[_0x6c03('0x3a')](_0xaa056[_0x6c03('0x33')],_0x3839fb[_0x6c03('0x34')]),_0x3659d7);if(_0xaa056['query']['filter']){_0x229a6a[_0x6c03('0x39')]=_[_0x6c03('0x3b')](_0x229a6a[_0x6c03('0x39')],{'$or':_['map'](_0x3659d7,function(_0x5bdbfa){if(_0x5bdbfa[_0x6c03('0x30')]!==_0x6c03('0x3c')){var _0x3323e4={};_0x3323e4[_0x5bdbfa[_0x6c03('0x2a')]]={'$like':'%'+_0xaa056[_0x6c03('0x33')][_0x6c03('0x3d')]+'%'};return _0x3323e4;}})});}_0x229a6a=_['merge']({},_0x229a6a,_0xaa056[_0x6c03('0x3e')]);var _0xb9b3ca={'where':_0x229a6a[_0x6c03('0x39')]};return db[_0x6c03('0x2d')][_0x6c03('0x20')](_0xb9b3ca)['then'](function(_0x3e2db8){_0x145152[_0x6c03('0x20')]=_0x3e2db8;if(_0xaa056[_0x6c03('0x33')][_0x6c03('0x3f')]){_0x229a6a['include']=[{'all':!![]}];}return db['UserProfileSection'][_0x6c03('0x40')](_0x229a6a);})[_0x6c03('0x27')](function(_0x80c672){_0x145152[_0x6c03('0x41')]=_0x80c672;return _0x145152;})[_0x6c03('0x27')](respondWithFilteredResult(_0x5c2741,_0x229a6a))[_0x6c03('0x42')](handleError(_0x5c2741,null));};exports[_0x6c03('0x43')]=function(_0x2542ee,_0x3509a7){var _0x55e223={'raw':![],'where':{'id':_0x2542ee[_0x6c03('0x44')]['id']}},_0x399b1f={};_0x399b1f[_0x6c03('0x32')]=_[_0x6c03('0x45')](db[_0x6c03('0x2d')][_0x6c03('0x2e')]);_0x399b1f['query']=_['keys'](_0x2542ee[_0x6c03('0x33')]);_0x399b1f[_0x6c03('0x34')]=_['intersection'](_0x399b1f[_0x6c03('0x32')],_0x399b1f[_0x6c03('0x33')]);_0x55e223[_0x6c03('0x36')]=_['intersection'](_0x399b1f[_0x6c03('0x32')],qs[_0x6c03('0x46')](_0x2542ee['query']['fields']));_0x55e223['attributes']=_0x55e223[_0x6c03('0x36')][_0x6c03('0x47')]?_0x55e223[_0x6c03('0x36')]:_0x399b1f['model'];if(_0x2542ee[_0x6c03('0x33')]['includeAll']){_0x55e223[_0x6c03('0x48')]=[{'all':!![]}];}_0x55e223=_[_0x6c03('0x3b')]({},_0x55e223,_0x2542ee[_0x6c03('0x3e')]);return db[_0x6c03('0x2d')][_0x6c03('0x49')](_0x55e223)['then'](handleEntityNotFound(_0x3509a7,null))[_0x6c03('0x27')](respondWithResult(_0x3509a7,null))['catch'](handleError(_0x3509a7,null));};exports['create']=function(_0x21858e,_0x24ece7){return db['UserProfileSection']['create'](_0x21858e['body'],{})[_0x6c03('0x27')](respondWithResult(_0x24ece7,0xc9))[_0x6c03('0x42')](handleError(_0x24ece7,null));};exports['update']=function(_0x1f5dae,_0x15e0e6){if(_0x1f5dae[_0x6c03('0x4a')]['id']){delete _0x1f5dae[_0x6c03('0x4a')]['id'];}return db['UserProfileSection'][_0x6c03('0x49')]({'where':{'id':_0x1f5dae['params']['id']}})[_0x6c03('0x27')](handleEntityNotFound(_0x15e0e6,null))[_0x6c03('0x27')](saveUpdates(_0x1f5dae[_0x6c03('0x4a')],null))[_0x6c03('0x27')](respondWithResult(_0x15e0e6,null))[_0x6c03('0x42')](handleError(_0x15e0e6,null));};exports[_0x6c03('0x28')]=function(_0x47e058,_0x42db33){return db[_0x6c03('0x2d')][_0x6c03('0x49')]({'where':{'id':_0x47e058['params']['id']}})['then'](handleEntityNotFound(_0x42db33,null))[_0x6c03('0x27')](removeEntity(_0x42db33,null))[_0x6c03('0x42')](handleError(_0x42db33,null));};exports['describe']=function(_0x1f3dff,_0x4f073d){return db['UserProfileSection'][_0x6c03('0x4b')]()[_0x6c03('0x27')](respondWithResult(_0x4f073d,null))[_0x6c03('0x42')](handleError(_0x4f073d,null));};
\ No newline at end of file