Built motion from commit bab6f49e.|2.6.17
[motion2.git] / server / api / intSalesforceField / intSalesforceField.controller.js
index 198093a..b27d389 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4a16=['merge','VIRTUAL','SalesforceField','include','findAll','catch','show','params','find','create','body','update','html-pdf','eml-format','rimraf','zip-dir','bluebird','mustache','util','sox','to-csv','ejs','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','sendStatus','status','end','count','offset','limit','json','apply','save','then','destroy','name','send','index','map','rawAttributes','fieldName','type','key','model','keys','query','intersection','attributes','fields','length','nolimit','sort','where','filters','filter'];(function(_0xe849f7,_0x48b661){var _0x271a10=function(_0x2cd663){while(--_0x2cd663){_0xe849f7['push'](_0xe849f7['shift']());}};_0x271a10(++_0x48b661);}(_0x4a16,0xcf));var _0x64a1=function(_0x93792a,_0x2b9e5f){_0x93792a=_0x93792a-0x0;var _0x52c36f=_0x4a16[_0x93792a];return _0x52c36f;};'use strict';var pdf=require(_0x64a1('0x0'));var emlformat=require(_0x64a1('0x1'));var rimraf=require(_0x64a1('0x2'));var zipdir=require(_0x64a1('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x64a1('0x4'));var Mustache=require(_0x64a1('0x5'));var util=require(_0x64a1('0x6'));var path=require('path');var sox=require(_0x64a1('0x7'));var csv=require(_0x64a1('0x8'));var ejs=require(_0x64a1('0x9'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x64a1('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x64a1('0xb'));var toCsv=require(_0x64a1('0x8'));var querystring=require(_0x64a1('0xc'));var Papa=require(_0x64a1('0xd'));var Redis=require('ioredis');var authService=require(_0x64a1('0xe'));var qs=require(_0x64a1('0xf'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0x64a1('0x10'));var logger=require(_0x64a1('0x11'))(_0x64a1('0x12'));var utils=require(_0x64a1('0x13'));var config=require(_0x64a1('0x14'));var licenseUtil=require(_0x64a1('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xa02a9c,_0x54739d){_0x54739d=_0x54739d||0xcc;return function(_0x20856d){if(_0x20856d){return _0xa02a9c[_0x64a1('0x16')](_0x54739d);}return _0xa02a9c[_0x64a1('0x17')](_0x54739d)[_0x64a1('0x18')]();};}function respondWithResult(_0x378d2c,_0x29485f){_0x29485f=_0x29485f||0xc8;return function(_0x11652e){if(_0x11652e){return _0x378d2c[_0x64a1('0x17')](_0x29485f)['json'](_0x11652e);}};}function respondWithFilteredResult(_0x3d050d,_0xab4f06){return function(_0x4b9a84){if(_0x4b9a84){var _0x1ace3a=_0x4b9a84[_0x64a1('0x19')],_0x2df342=_0xab4f06[_0x64a1('0x1a')],_0x163c1c=_0xab4f06[_0x64a1('0x1a')]+_0xab4f06[_0x64a1('0x1b')],_0x2419b6;if(_0x163c1c>=_0x1ace3a){_0x163c1c=_0x1ace3a;_0x2419b6=0xc8;}else{_0x2419b6=0xce;}_0x3d050d[_0x64a1('0x17')](_0x2419b6);return _0x3d050d['set']('Content-Range',_0x2df342+'-'+_0x163c1c+'/'+_0x1ace3a)[_0x64a1('0x1c')](_0x4b9a84);}return null;};}function patchUpdates(_0x3ebd38){return function(_0x5a2ca8){try{jsonpatch[_0x64a1('0x1d')](_0x5a2ca8,_0x3ebd38,!![]);}catch(_0x4ec9cc){return BPromise['reject'](_0x4ec9cc);}return _0x5a2ca8[_0x64a1('0x1e')]();};}function saveUpdates(_0x3a0fa2,_0x2e0723){return function(_0x513567){if(_0x513567){return _0x513567['update'](_0x3a0fa2)[_0x64a1('0x1f')](function(_0x51094d){return _0x51094d;});}return null;};}function removeEntity(_0x1157f2,_0x2adbab){return function(_0x15e254){if(_0x15e254){return _0x15e254[_0x64a1('0x20')]()[_0x64a1('0x1f')](function(){_0x1157f2[_0x64a1('0x17')](0xcc)[_0x64a1('0x18')]();});}};}function handleEntityNotFound(_0x4a9607,_0x63ae74){return function(_0x4ce859){if(!_0x4ce859){_0x4a9607['sendStatus'](0x194);}return _0x4ce859;};}function handleError(_0x20d27b,_0x267c4b){_0x267c4b=_0x267c4b||0x1f4;return function(_0x326cc2){logger['error'](_0x326cc2['stack']);if(_0x326cc2['name']){delete _0x326cc2[_0x64a1('0x21')];}_0x20d27b[_0x64a1('0x17')](_0x267c4b)[_0x64a1('0x22')](_0x326cc2);};}exports[_0x64a1('0x23')]=function(_0x9ec8d9,_0x5b517a){var _0x592ddb={},_0x32d04d={},_0xba8598={'count':0x0,'rows':[]};var _0x4436db=_[_0x64a1('0x24')](db['SalesforceField'][_0x64a1('0x25')],function(_0x296d4a){return{'name':_0x296d4a[_0x64a1('0x26')],'type':_0x296d4a[_0x64a1('0x27')][_0x64a1('0x28')]};});_0x32d04d[_0x64a1('0x29')]=_[_0x64a1('0x24')](_0x4436db,'name');_0x32d04d['query']=_[_0x64a1('0x2a')](_0x9ec8d9[_0x64a1('0x2b')]);_0x32d04d['filters']=_[_0x64a1('0x2c')](_0x32d04d['model'],_0x32d04d[_0x64a1('0x2b')]);_0x592ddb[_0x64a1('0x2d')]=_[_0x64a1('0x2c')](_0x32d04d[_0x64a1('0x29')],qs[_0x64a1('0x2e')](_0x9ec8d9['query']['fields']));_0x592ddb[_0x64a1('0x2d')]=_0x592ddb[_0x64a1('0x2d')][_0x64a1('0x2f')]?_0x592ddb[_0x64a1('0x2d')]:_0x32d04d[_0x64a1('0x29')];if(!_0x9ec8d9[_0x64a1('0x2b')]['hasOwnProperty'](_0x64a1('0x30'))){_0x592ddb[_0x64a1('0x1b')]=qs[_0x64a1('0x1b')](_0x9ec8d9[_0x64a1('0x2b')][_0x64a1('0x1b')]);_0x592ddb[_0x64a1('0x1a')]=qs[_0x64a1('0x1a')](_0x9ec8d9['query']['offset']);}_0x592ddb['order']=qs['sort'](_0x9ec8d9[_0x64a1('0x2b')][_0x64a1('0x31')]);_0x592ddb[_0x64a1('0x32')]=qs[_0x64a1('0x33')](_['pick'](_0x9ec8d9[_0x64a1('0x2b')],_0x32d04d[_0x64a1('0x33')]),_0x4436db);if(_0x9ec8d9[_0x64a1('0x2b')][_0x64a1('0x34')]){_0x592ddb[_0x64a1('0x32')]=_[_0x64a1('0x35')](_0x592ddb['where'],{'$or':_[_0x64a1('0x24')](_0x4436db,function(_0x2f5197){if(_0x2f5197[_0x64a1('0x27')]!==_0x64a1('0x36')){var _0x1056ff={};_0x1056ff[_0x2f5197[_0x64a1('0x21')]]={'$like':'%'+_0x9ec8d9[_0x64a1('0x2b')][_0x64a1('0x34')]+'%'};return _0x1056ff;}})});}_0x592ddb=_[_0x64a1('0x35')]({},_0x592ddb,_0x9ec8d9['options']);var _0x3e4019={'where':_0x592ddb[_0x64a1('0x32')]};return db[_0x64a1('0x37')][_0x64a1('0x19')](_0x3e4019)[_0x64a1('0x1f')](function(_0x232b62){_0xba8598[_0x64a1('0x19')]=_0x232b62;if(_0x9ec8d9['query']['includeAll']){_0x592ddb[_0x64a1('0x38')]=[{'all':!![]}];}return db[_0x64a1('0x37')][_0x64a1('0x39')](_0x592ddb);})[_0x64a1('0x1f')](function(_0x3fc13a){_0xba8598['rows']=_0x3fc13a;return _0xba8598;})[_0x64a1('0x1f')](respondWithFilteredResult(_0x5b517a,_0x592ddb))[_0x64a1('0x3a')](handleError(_0x5b517a,null));};exports[_0x64a1('0x3b')]=function(_0x3feccc,_0x5c6e3e){var _0x4a6513={'raw':!![],'where':{'id':_0x3feccc[_0x64a1('0x3c')]['id']}},_0x340619={};_0x340619[_0x64a1('0x29')]=_[_0x64a1('0x2a')](db[_0x64a1('0x37')]['rawAttributes']);_0x340619[_0x64a1('0x2b')]=_[_0x64a1('0x2a')](_0x3feccc[_0x64a1('0x2b')]);_0x340619[_0x64a1('0x33')]=_[_0x64a1('0x2c')](_0x340619['model'],_0x340619['query']);_0x4a6513[_0x64a1('0x2d')]=_[_0x64a1('0x2c')](_0x340619[_0x64a1('0x29')],qs['fields'](_0x3feccc['query']['fields']));_0x4a6513[_0x64a1('0x2d')]=_0x4a6513[_0x64a1('0x2d')][_0x64a1('0x2f')]?_0x4a6513[_0x64a1('0x2d')]:_0x340619[_0x64a1('0x29')];if(_0x3feccc[_0x64a1('0x2b')]['includeAll']){_0x4a6513[_0x64a1('0x38')]=[{'all':!![]}];}_0x4a6513=_['merge']({},_0x4a6513,_0x3feccc['options']);return db[_0x64a1('0x37')][_0x64a1('0x3d')](_0x4a6513)[_0x64a1('0x1f')](handleEntityNotFound(_0x5c6e3e,null))[_0x64a1('0x1f')](respondWithResult(_0x5c6e3e,null))['catch'](handleError(_0x5c6e3e,null));};exports[_0x64a1('0x3e')]=function(_0x3dac05,_0x533377){return db[_0x64a1('0x37')][_0x64a1('0x3e')](_0x3dac05[_0x64a1('0x3f')],{})['then'](respondWithResult(_0x533377,0xc9))['catch'](handleError(_0x533377,null));};exports[_0x64a1('0x40')]=function(_0x6538a3,_0x381d1b){if(_0x6538a3[_0x64a1('0x3f')]['id']){delete _0x6538a3[_0x64a1('0x3f')]['id'];}return db[_0x64a1('0x37')]['find']({'where':{'id':_0x6538a3[_0x64a1('0x3c')]['id']}})['then'](handleEntityNotFound(_0x381d1b,null))[_0x64a1('0x1f')](saveUpdates(_0x6538a3['body'],null))[_0x64a1('0x1f')](respondWithResult(_0x381d1b,null))[_0x64a1('0x3a')](handleError(_0x381d1b,null));};exports[_0x64a1('0x20')]=function(_0x5500df,_0x3e5b82){return db[_0x64a1('0x37')]['find']({'where':{'id':_0x5500df[_0x64a1('0x3c')]['id']}})[_0x64a1('0x1f')](handleEntityNotFound(_0x3e5b82,null))[_0x64a1('0x1f')](removeEntity(_0x3e5b82,null))[_0x64a1('0x3a')](handleError(_0x3e5b82,null));};
\ No newline at end of file
+var _0xaac4=['json','offset','undefined','limit','count','set','Content-Range','apply','save','update','then','destroy','error','name','send','map','SalesforceField','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','type','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','find','create','body','params','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../components/parsers/advancedSearch','../../config/license/hardware','api','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end'];(function(_0x28edda,_0xbd447a){var _0x21f4a4=function(_0x5ae05e){while(--_0x5ae05e){_0x28edda['push'](_0x28edda['shift']());}};_0x21f4a4(++_0xbd447a);}(_0xaac4,0x112));var _0x4aac=function(_0x409f3f,_0x476945){_0x409f3f=_0x409f3f-0x0;var _0x5753c8=_0xaac4[_0x409f3f];return _0x5753c8;};'use strict';var emlformat=require(_0x4aac('0x0'));var rimraf=require(_0x4aac('0x1'));var zipdir=require(_0x4aac('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4aac('0x3'));var moment=require(_0x4aac('0x4'));var BPromise=require(_0x4aac('0x5'));var Mustache=require(_0x4aac('0x6'));var util=require(_0x4aac('0x7'));var path=require(_0x4aac('0x8'));var sox=require(_0x4aac('0x9'));var csv=require(_0x4aac('0xa'));var ejs=require(_0x4aac('0xb'));var fs=require('fs');var fs_extra=require(_0x4aac('0xc'));var _=require(_0x4aac('0xd'));var squel=require('squel');var crypto=require(_0x4aac('0xe'));var jsforce=require(_0x4aac('0xf'));var deskjs=require(_0x4aac('0x10'));var toCsv=require('to-csv');var querystring=require(_0x4aac('0x11'));var Papa=require(_0x4aac('0x12'));var Redis=require(_0x4aac('0x13'));var authService=require(_0x4aac('0x14'));var qs=require('../../components/parsers/qs');var as=require(_0x4aac('0x15'));var hardwareService=require(_0x4aac('0x16'));var logger=require('../../config/logger')(_0x4aac('0x17'));var utils=require('../../config/utils');var config=require(_0x4aac('0x18'));var licenseUtil=require(_0x4aac('0x19'));var db=require(_0x4aac('0x1a'))['db'];function respondWithStatusCode(_0x40197c,_0xdc3cf0){_0xdc3cf0=_0xdc3cf0||0xcc;return function(_0x41599d){if(_0x41599d){return _0x40197c[_0x4aac('0x1b')](_0xdc3cf0);}return _0x40197c[_0x4aac('0x1c')](_0xdc3cf0)[_0x4aac('0x1d')]();};}function respondWithResult(_0x5e2da6,_0x322218){_0x322218=_0x322218||0xc8;return function(_0x546cbb){if(_0x546cbb){return _0x5e2da6[_0x4aac('0x1c')](_0x322218)[_0x4aac('0x1e')](_0x546cbb);}};}function respondWithFilteredResult(_0x45475d,_0x53b2eb){return function(_0x21510a){if(_0x21510a){var _0x4b7342=typeof _0x53b2eb[_0x4aac('0x1f')]===_0x4aac('0x20')&&typeof _0x53b2eb[_0x4aac('0x21')]===_0x4aac('0x20');var _0x139960=_0x21510a[_0x4aac('0x22')];var _0x3da4b8=_0x4b7342?0x0:_0x53b2eb[_0x4aac('0x1f')];var _0x70728f=_0x4b7342?_0x21510a[_0x4aac('0x22')]:_0x53b2eb[_0x4aac('0x1f')]+_0x53b2eb[_0x4aac('0x21')];var _0x12524a;if(_0x70728f>=_0x139960){_0x70728f=_0x139960;_0x12524a=0xc8;}else{_0x12524a=0xce;}_0x45475d[_0x4aac('0x1c')](_0x12524a);return _0x45475d[_0x4aac('0x23')](_0x4aac('0x24'),_0x3da4b8+'-'+_0x70728f+'/'+_0x139960)['json'](_0x21510a);}return null;};}function patchUpdates(_0x916e69){return function(_0x3ab5a3){try{jsonpatch[_0x4aac('0x25')](_0x3ab5a3,_0x916e69,!![]);}catch(_0x403610){return BPromise['reject'](_0x403610);}return _0x3ab5a3[_0x4aac('0x26')]();};}function saveUpdates(_0x128309,_0x18cfc6){return function(_0x1cf2de){if(_0x1cf2de){return _0x1cf2de[_0x4aac('0x27')](_0x128309)[_0x4aac('0x28')](function(_0x4f757f){return _0x4f757f;});}return null;};}function removeEntity(_0x4df583,_0x417370){return function(_0x3d4c1f){if(_0x3d4c1f){return _0x3d4c1f[_0x4aac('0x29')]()[_0x4aac('0x28')](function(){_0x4df583['status'](0xcc)[_0x4aac('0x1d')]();});}};}function handleEntityNotFound(_0x1a80d7,_0x3045af){return function(_0x32df8d){if(!_0x32df8d){_0x1a80d7[_0x4aac('0x1b')](0x194);}return _0x32df8d;};}function handleError(_0x28e94b,_0x37b5c7){_0x37b5c7=_0x37b5c7||0x1f4;return function(_0x2d3db2){logger[_0x4aac('0x2a')](_0x2d3db2['stack']);if(_0x2d3db2[_0x4aac('0x2b')]){delete _0x2d3db2['name'];}_0x28e94b[_0x4aac('0x1c')](_0x37b5c7)[_0x4aac('0x2c')](_0x2d3db2);};}exports['index']=function(_0x24e41e,_0x405a1e){var _0x33e45b={},_0x585bfc={},_0x10f611={'count':0x0,'rows':[]};var _0x18b2dc=_[_0x4aac('0x2d')](db[_0x4aac('0x2e')][_0x4aac('0x2f')],function(_0x41ac5b){return{'name':_0x41ac5b['fieldName'],'type':_0x41ac5b['type']['key']};});_0x585bfc[_0x4aac('0x30')]=_['map'](_0x18b2dc,'name');_0x585bfc['query']=_[_0x4aac('0x31')](_0x24e41e['query']);_0x585bfc[_0x4aac('0x32')]=_[_0x4aac('0x33')](_0x585bfc['model'],_0x585bfc[_0x4aac('0x34')]);_0x33e45b[_0x4aac('0x35')]=_[_0x4aac('0x33')](_0x585bfc['model'],qs[_0x4aac('0x36')](_0x24e41e[_0x4aac('0x34')][_0x4aac('0x36')]));_0x33e45b[_0x4aac('0x35')]=_0x33e45b[_0x4aac('0x35')][_0x4aac('0x37')]?_0x33e45b[_0x4aac('0x35')]:_0x585bfc[_0x4aac('0x30')];if(!_0x24e41e[_0x4aac('0x34')]['hasOwnProperty'](_0x4aac('0x38'))){_0x33e45b[_0x4aac('0x21')]=qs[_0x4aac('0x21')](_0x24e41e[_0x4aac('0x34')][_0x4aac('0x21')]);_0x33e45b[_0x4aac('0x1f')]=qs[_0x4aac('0x1f')](_0x24e41e[_0x4aac('0x34')][_0x4aac('0x1f')]);}_0x33e45b[_0x4aac('0x39')]=qs['sort'](_0x24e41e[_0x4aac('0x34')][_0x4aac('0x3a')]);_0x33e45b[_0x4aac('0x3b')]=qs[_0x4aac('0x32')](_[_0x4aac('0x3c')](_0x24e41e['query'],_0x585bfc[_0x4aac('0x32')]),_0x18b2dc);if(_0x24e41e[_0x4aac('0x34')][_0x4aac('0x3d')]){_0x33e45b[_0x4aac('0x3b')]=_[_0x4aac('0x3e')](_0x33e45b['where'],{'$or':_[_0x4aac('0x2d')](_0x18b2dc,function(_0xb0902c){if(_0xb0902c[_0x4aac('0x3f')]!==_0x4aac('0x40')){var _0x14b255={};_0x14b255[_0xb0902c[_0x4aac('0x2b')]]={'$like':'%'+_0x24e41e[_0x4aac('0x34')][_0x4aac('0x3d')]+'%'};return _0x14b255;}})});}_0x33e45b=_[_0x4aac('0x3e')]({},_0x33e45b,_0x24e41e[_0x4aac('0x41')]);var _0x1ce23b={'where':_0x33e45b[_0x4aac('0x3b')]};return db['SalesforceField'][_0x4aac('0x22')](_0x1ce23b)['then'](function(_0x320314){_0x10f611[_0x4aac('0x22')]=_0x320314;if(_0x24e41e[_0x4aac('0x34')][_0x4aac('0x42')]){_0x33e45b[_0x4aac('0x43')]=[{'all':!![]}];}return db[_0x4aac('0x2e')][_0x4aac('0x44')](_0x33e45b);})['then'](function(_0x15e151){_0x10f611[_0x4aac('0x45')]=_0x15e151;return _0x10f611;})[_0x4aac('0x28')](respondWithFilteredResult(_0x405a1e,_0x33e45b))[_0x4aac('0x46')](handleError(_0x405a1e,null));};exports[_0x4aac('0x47')]=function(_0x23bf28,_0x4c62f9){var _0x3144c1={'raw':!![],'where':{'id':_0x23bf28['params']['id']}},_0x27ee64={};_0x27ee64[_0x4aac('0x30')]=_[_0x4aac('0x31')](db[_0x4aac('0x2e')][_0x4aac('0x2f')]);_0x27ee64[_0x4aac('0x34')]=_[_0x4aac('0x31')](_0x23bf28[_0x4aac('0x34')]);_0x27ee64[_0x4aac('0x32')]=_[_0x4aac('0x33')](_0x27ee64[_0x4aac('0x30')],_0x27ee64['query']);_0x3144c1[_0x4aac('0x35')]=_[_0x4aac('0x33')](_0x27ee64['model'],qs['fields'](_0x23bf28['query'][_0x4aac('0x36')]));_0x3144c1[_0x4aac('0x35')]=_0x3144c1[_0x4aac('0x35')][_0x4aac('0x37')]?_0x3144c1[_0x4aac('0x35')]:_0x27ee64[_0x4aac('0x30')];if(_0x23bf28[_0x4aac('0x34')][_0x4aac('0x42')]){_0x3144c1[_0x4aac('0x43')]=[{'all':!![]}];}_0x3144c1=_['merge']({},_0x3144c1,_0x23bf28[_0x4aac('0x41')]);return db[_0x4aac('0x2e')][_0x4aac('0x48')](_0x3144c1)[_0x4aac('0x28')](handleEntityNotFound(_0x4c62f9,null))['then'](respondWithResult(_0x4c62f9,null))[_0x4aac('0x46')](handleError(_0x4c62f9,null));};exports[_0x4aac('0x49')]=function(_0x3a4d5c,_0x121b9b){return db[_0x4aac('0x2e')][_0x4aac('0x49')](_0x3a4d5c['body'],{})['then'](respondWithResult(_0x121b9b,0xc9))[_0x4aac('0x46')](handleError(_0x121b9b,null));};exports[_0x4aac('0x27')]=function(_0x3e81c3,_0x4b5fa1){if(_0x3e81c3[_0x4aac('0x4a')]['id']){delete _0x3e81c3['body']['id'];}return db['SalesforceField'][_0x4aac('0x48')]({'where':{'id':_0x3e81c3[_0x4aac('0x4b')]['id']}})['then'](handleEntityNotFound(_0x4b5fa1,null))['then'](saveUpdates(_0x3e81c3[_0x4aac('0x4a')],null))[_0x4aac('0x28')](respondWithResult(_0x4b5fa1,null))[_0x4aac('0x46')](handleError(_0x4b5fa1,null));};exports['destroy']=function(_0x57fcc7,_0x4aeb9f){return db[_0x4aac('0x2e')][_0x4aac('0x48')]({'where':{'id':_0x57fcc7[_0x4aac('0x4b')]['id']}})['then'](handleEntityNotFound(_0x4aeb9f,null))[_0x4aac('0x28')](removeEntity(_0x4aeb9f,null))[_0x4aac('0x46')](handleError(_0x4aeb9f,null));};
\ No newline at end of file