Built motion from commit 953226e6.|2.6.32
[motion2.git] / server / api / cmHopperHistory / cmHopperHistory.controller.js
index 024126e..9ecb8b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16cc=['save','update','then','error','name','index','map','CmHopperHistory','rawAttributes','fieldName','type','key','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','sort','where','merge','VIRTUAL','includeAll','include','findAll','rows','params','options','find','catch','create','body','uniqueid','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','fs-extra','lodash','jsforce','desk.js','papaparse','ioredis','../../components/parsers/qs','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../config/license/util','../../mysqldb','sendStatus','status','end','json','offset','undefined','limit','count','Content-Range','apply','reject'];(function(_0x1fb038,_0xc3f69b){var _0x1600dc=function(_0x2a040e){while(--_0x2a040e){_0x1fb038['push'](_0x1fb038['shift']());}};_0x1600dc(++_0xc3f69b);}(_0x16cc,0xb5));var _0xc16c=function(_0x3122ca,_0x1eaf4c){_0x3122ca=_0x3122ca-0x0;var _0xf95988=_0x16cc[_0x3122ca];return _0xf95988;};'use strict';var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xc16c('0x0'));var jsonpatch=require(_0xc16c('0x1'));var rp=require('request-promise');var moment=require(_0xc16c('0x2'));var BPromise=require(_0xc16c('0x3'));var Mustache=require(_0xc16c('0x4'));var util=require(_0xc16c('0x5'));var path=require(_0xc16c('0x6'));var sox=require(_0xc16c('0x7'));var csv=require(_0xc16c('0x8'));var ejs=require(_0xc16c('0x9'));var fs=require('fs');var fs_extra=require(_0xc16c('0xa'));var _=require(_0xc16c('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xc16c('0xc'));var deskjs=require(_0xc16c('0xd'));var toCsv=require(_0xc16c('0x8'));var querystring=require('querystring');var Papa=require(_0xc16c('0xe'));var Redis=require(_0xc16c('0xf'));var authService=require('../../components/auth/service');var qs=require(_0xc16c('0x10'));var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0xc16c('0x11'));var logger=require(_0xc16c('0x12'))(_0xc16c('0x13'));var utils=require(_0xc16c('0x14'));var config=require(_0xc16c('0x15'));var licenseUtil=require(_0xc16c('0x16'));var db=require(_0xc16c('0x17'))['db'];function respondWithStatusCode(_0x59f30f,_0x20b9ba){_0x20b9ba=_0x20b9ba||0xcc;return function(_0x372648){if(_0x372648){return _0x59f30f[_0xc16c('0x18')](_0x20b9ba);}return _0x59f30f[_0xc16c('0x19')](_0x20b9ba)[_0xc16c('0x1a')]();};}function respondWithResult(_0x40ea97,_0x43be21){_0x43be21=_0x43be21||0xc8;return function(_0x1efc95){if(_0x1efc95){return _0x40ea97[_0xc16c('0x19')](_0x43be21)[_0xc16c('0x1b')](_0x1efc95);}};}function respondWithFilteredResult(_0x115840,_0x429268){return function(_0x2333c5){if(_0x2333c5){var _0x46d10f=typeof _0x429268[_0xc16c('0x1c')]===_0xc16c('0x1d')&&typeof _0x429268[_0xc16c('0x1e')]===_0xc16c('0x1d');var _0x503444=_0x2333c5['count'];var _0x48b9ac=_0x46d10f?0x0:_0x429268[_0xc16c('0x1c')];var _0x2df6f8=_0x46d10f?_0x2333c5[_0xc16c('0x1f')]:_0x429268[_0xc16c('0x1c')]+_0x429268[_0xc16c('0x1e')];var _0x703ab2;if(_0x2df6f8>=_0x503444){_0x2df6f8=_0x503444;_0x703ab2=0xc8;}else{_0x703ab2=0xce;}_0x115840[_0xc16c('0x19')](_0x703ab2);return _0x115840['set'](_0xc16c('0x20'),_0x48b9ac+'-'+_0x2df6f8+'/'+_0x503444)['json'](_0x2333c5);}return null;};}function patchUpdates(_0x2c8a65){return function(_0x320a15){try{jsonpatch[_0xc16c('0x21')](_0x320a15,_0x2c8a65,!![]);}catch(_0x1b6a75){return BPromise[_0xc16c('0x22')](_0x1b6a75);}return _0x320a15[_0xc16c('0x23')]();};}function saveUpdates(_0x1adac0,_0x44b26a){return function(_0x104b9c){if(_0x104b9c){return _0x104b9c[_0xc16c('0x24')](_0x1adac0)[_0xc16c('0x25')](function(_0x4c9975){return _0x4c9975;});}return null;};}function removeEntity(_0x17d299,_0x127594){return function(_0x26338e){if(_0x26338e){return _0x26338e['destroy']()['then'](function(){_0x17d299['status'](0xcc)[_0xc16c('0x1a')]();});}};}function handleEntityNotFound(_0x16ccd7,_0x5f355f){return function(_0x30156d){if(!_0x30156d){_0x16ccd7[_0xc16c('0x18')](0x194);}return _0x30156d;};}function handleError(_0x33d104,_0x58962b){_0x58962b=_0x58962b||0x1f4;return function(_0x36d2d3){logger[_0xc16c('0x26')](_0x36d2d3['stack']);if(_0x36d2d3['name']){delete _0x36d2d3[_0xc16c('0x27')];}_0x33d104['status'](_0x58962b)['send'](_0x36d2d3);};}exports[_0xc16c('0x28')]=function(_0x49582c,_0x50fc24){var _0x6f56f1={},_0x590ad1={},_0x54c3c0={'count':0x0,'rows':[]};var _0x31bbe7=_[_0xc16c('0x29')](db[_0xc16c('0x2a')][_0xc16c('0x2b')],function(_0x469c25){return{'name':_0x469c25[_0xc16c('0x2c')],'type':_0x469c25[_0xc16c('0x2d')][_0xc16c('0x2e')]};});_0x590ad1['model']=_[_0xc16c('0x29')](_0x31bbe7,_0xc16c('0x27'));_0x590ad1['query']=_[_0xc16c('0x2f')](_0x49582c[_0xc16c('0x30')]);_0x590ad1[_0xc16c('0x31')]=_[_0xc16c('0x32')](_0x590ad1[_0xc16c('0x33')],_0x590ad1['query']);_0x6f56f1[_0xc16c('0x34')]=_[_0xc16c('0x32')](_0x590ad1[_0xc16c('0x33')],qs[_0xc16c('0x35')](_0x49582c[_0xc16c('0x30')]['fields']));_0x6f56f1[_0xc16c('0x34')]=_0x6f56f1[_0xc16c('0x34')][_0xc16c('0x36')]?_0x6f56f1[_0xc16c('0x34')]:_0x590ad1[_0xc16c('0x33')];if(!_0x49582c[_0xc16c('0x30')][_0xc16c('0x37')](_0xc16c('0x38'))){_0x6f56f1[_0xc16c('0x1e')]=qs['limit'](_0x49582c[_0xc16c('0x30')][_0xc16c('0x1e')]);_0x6f56f1[_0xc16c('0x1c')]=qs[_0xc16c('0x1c')](_0x49582c[_0xc16c('0x30')][_0xc16c('0x1c')]);}_0x6f56f1['order']=qs[_0xc16c('0x39')](_0x49582c[_0xc16c('0x30')][_0xc16c('0x39')]);_0x6f56f1[_0xc16c('0x3a')]=qs[_0xc16c('0x31')](_['pick'](_0x49582c[_0xc16c('0x30')],_0x590ad1[_0xc16c('0x31')]),_0x31bbe7);if(_0x49582c[_0xc16c('0x30')]['filter']){_0x6f56f1[_0xc16c('0x3a')]=_[_0xc16c('0x3b')](_0x6f56f1['where'],{'$or':_[_0xc16c('0x29')](_0x31bbe7,function(_0x2b6835){if(_0x2b6835[_0xc16c('0x2d')]!==_0xc16c('0x3c')){var _0x415159={};_0x415159[_0x2b6835['name']]={'$like':'%'+_0x49582c[_0xc16c('0x30')]['filter']+'%'};return _0x415159;}})});}_0x6f56f1=_[_0xc16c('0x3b')]({},_0x6f56f1,_0x49582c['options']);var _0x18deee={'where':_0x6f56f1['where']};return db['CmHopperHistory']['count'](_0x18deee)[_0xc16c('0x25')](function(_0x225477){_0x54c3c0[_0xc16c('0x1f')]=_0x225477;if(_0x49582c[_0xc16c('0x30')][_0xc16c('0x3d')]){_0x6f56f1[_0xc16c('0x3e')]=[{'all':!![]}];}return db[_0xc16c('0x2a')][_0xc16c('0x3f')](_0x6f56f1);})[_0xc16c('0x25')](function(_0x7285eb){_0x54c3c0[_0xc16c('0x40')]=_0x7285eb;return _0x54c3c0;})[_0xc16c('0x25')](respondWithFilteredResult(_0x50fc24,_0x6f56f1))['catch'](handleError(_0x50fc24,null));};exports['show']=function(_0xdacbc7,_0x532a61){var _0x3b6548={'raw':!![],'where':{'id':_0xdacbc7[_0xc16c('0x41')]['id']}},_0x16fa2c={};_0x16fa2c[_0xc16c('0x33')]=_['keys'](db['CmHopperHistory'][_0xc16c('0x2b')]);_0x16fa2c[_0xc16c('0x30')]=_['keys'](_0xdacbc7[_0xc16c('0x30')]);_0x16fa2c[_0xc16c('0x31')]=_[_0xc16c('0x32')](_0x16fa2c[_0xc16c('0x33')],_0x16fa2c['query']);_0x3b6548['attributes']=_[_0xc16c('0x32')](_0x16fa2c[_0xc16c('0x33')],qs[_0xc16c('0x35')](_0xdacbc7[_0xc16c('0x30')][_0xc16c('0x35')]));_0x3b6548[_0xc16c('0x34')]=_0x3b6548[_0xc16c('0x34')]['length']?_0x3b6548[_0xc16c('0x34')]:_0x16fa2c['model'];if(_0xdacbc7[_0xc16c('0x30')][_0xc16c('0x3d')]){_0x3b6548[_0xc16c('0x3e')]=[{'all':!![]}];}_0x3b6548=_['merge']({},_0x3b6548,_0xdacbc7[_0xc16c('0x42')]);return db[_0xc16c('0x2a')][_0xc16c('0x43')](_0x3b6548)[_0xc16c('0x25')](handleEntityNotFound(_0x532a61,null))[_0xc16c('0x25')](respondWithResult(_0x532a61,null))[_0xc16c('0x44')](handleError(_0x532a61,null));};exports['create']=function(_0x2ea2c0,_0x5c9461){return db[_0xc16c('0x2a')][_0xc16c('0x45')](_0x2ea2c0[_0xc16c('0x46')],{})[_0xc16c('0x25')](respondWithResult(_0x5c9461,0xc9))[_0xc16c('0x44')](handleError(_0x5c9461,null));};exports['describe']=function(_0x4cc89b,_0x4ce332){return db[_0xc16c('0x2a')]['describe']()[_0xc16c('0x25')](respondWithResult(_0x4ce332,null))[_0xc16c('0x44')](handleError(_0x4ce332,null));};exports[_0xc16c('0x24')]=function(_0x29612d,_0x163a8f){if(_0x29612d[_0xc16c('0x46')][_0xc16c('0x47')]){delete _0x29612d[_0xc16c('0x46')][_0xc16c('0x47')];}return db[_0xc16c('0x2a')]['find']({'where':{'uniqueid':_0x29612d[_0xc16c('0x41')]['id']}})['then'](handleEntityNotFound(_0x163a8f,null))[_0xc16c('0x25')](saveUpdates(_0x29612d[_0xc16c('0x46')],null))[_0xc16c('0x25')](respondWithResult(_0x163a8f,null))['catch'](handleError(_0x163a8f,null));};
\ No newline at end of file
+var _0x15cf=['error','name','send','map','CmHopperHistory','rawAttributes','type','key','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','merge','VIRTUAL','filter','options','includeAll','catch','show','params','include','create','body','describe','uniqueid','find','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/license/util','../../mysqldb','sendStatus','status','end','offset','undefined','limit','count','set','Content-Range','json','apply','reject','update','then'];(function(_0x28fca4,_0x11e78b){var _0x42fd01=function(_0x33a97e){while(--_0x33a97e){_0x28fca4['push'](_0x28fca4['shift']());}};_0x42fd01(++_0x11e78b);}(_0x15cf,0x17b));var _0xf15c=function(_0x4c98b9,_0x1ad11b){_0x4c98b9=_0x4c98b9-0x0;var _0x3a257a=_0x15cf[_0x4c98b9];return _0x3a257a;};'use strict';var emlformat=require(_0xf15c('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xf15c('0x1'));var jsonpatch=require(_0xf15c('0x2'));var rp=require('request-promise');var moment=require(_0xf15c('0x3'));var BPromise=require(_0xf15c('0x4'));var Mustache=require(_0xf15c('0x5'));var util=require(_0xf15c('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0xf15c('0x7'));var ejs=require(_0xf15c('0x8'));var fs=require('fs');var fs_extra=require('fs-extra');var _=require('lodash');var squel=require(_0xf15c('0x9'));var crypto=require('crypto');var jsforce=require(_0xf15c('0xa'));var deskjs=require(_0xf15c('0xb'));var toCsv=require(_0xf15c('0x7'));var querystring=require(_0xf15c('0xc'));var Papa=require(_0xf15c('0xd'));var Redis=require(_0xf15c('0xe'));var authService=require(_0xf15c('0xf'));var qs=require('../../components/parsers/qs');var as=require('../../components/parsers/advancedSearch');var hardwareService=require(_0xf15c('0x10'));var logger=require('../../config/logger')(_0xf15c('0x11'));var utils=require(_0xf15c('0x12'));var config=require('../../config/environment');var licenseUtil=require(_0xf15c('0x13'));var db=require(_0xf15c('0x14'))['db'];function respondWithStatusCode(_0x1fcf30,_0x1057fe){_0x1057fe=_0x1057fe||0xcc;return function(_0xc37bf2){if(_0xc37bf2){return _0x1fcf30[_0xf15c('0x15')](_0x1057fe);}return _0x1fcf30[_0xf15c('0x16')](_0x1057fe)[_0xf15c('0x17')]();};}function respondWithResult(_0xfc222,_0x50b2cd){_0x50b2cd=_0x50b2cd||0xc8;return function(_0x2af518){if(_0x2af518){return _0xfc222[_0xf15c('0x16')](_0x50b2cd)['json'](_0x2af518);}};}function respondWithFilteredResult(_0x3d9df8,_0x4eb20f){return function(_0x5dff2e){if(_0x5dff2e){var _0xc7cacd=typeof _0x4eb20f[_0xf15c('0x18')]===_0xf15c('0x19')&&typeof _0x4eb20f[_0xf15c('0x1a')]===_0xf15c('0x19');var _0x2603e1=_0x5dff2e[_0xf15c('0x1b')];var _0x2eec7e=_0xc7cacd?0x0:_0x4eb20f[_0xf15c('0x18')];var _0x5f09f5=_0xc7cacd?_0x5dff2e[_0xf15c('0x1b')]:_0x4eb20f['offset']+_0x4eb20f['limit'];var _0x52aa33;if(_0x5f09f5>=_0x2603e1){_0x5f09f5=_0x2603e1;_0x52aa33=0xc8;}else{_0x52aa33=0xce;}_0x3d9df8[_0xf15c('0x16')](_0x52aa33);return _0x3d9df8[_0xf15c('0x1c')](_0xf15c('0x1d'),_0x2eec7e+'-'+_0x5f09f5+'/'+_0x2603e1)[_0xf15c('0x1e')](_0x5dff2e);}return null;};}function patchUpdates(_0xce497){return function(_0x13a4b9){try{jsonpatch[_0xf15c('0x1f')](_0x13a4b9,_0xce497,!![]);}catch(_0x24e3ed){return BPromise[_0xf15c('0x20')](_0x24e3ed);}return _0x13a4b9['save']();};}function saveUpdates(_0x16f15c,_0x19a48d){return function(_0x1dff67){if(_0x1dff67){return _0x1dff67[_0xf15c('0x21')](_0x16f15c)[_0xf15c('0x22')](function(_0x2f4498){return _0x2f4498;});}return null;};}function removeEntity(_0x56ca75,_0x22b07e){return function(_0x571ad6){if(_0x571ad6){return _0x571ad6['destroy']()[_0xf15c('0x22')](function(){_0x56ca75[_0xf15c('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x176a5e,_0x37aa75){return function(_0x1596ae){if(!_0x1596ae){_0x176a5e['sendStatus'](0x194);}return _0x1596ae;};}function handleError(_0x1722bf,_0x4db9eb){_0x4db9eb=_0x4db9eb||0x1f4;return function(_0x356872){logger[_0xf15c('0x23')](_0x356872['stack']);if(_0x356872['name']){delete _0x356872[_0xf15c('0x24')];}_0x1722bf[_0xf15c('0x16')](_0x4db9eb)[_0xf15c('0x25')](_0x356872);};}exports['index']=function(_0x173275,_0x11edbf){var _0x2a753d={},_0x1f5364={},_0xe0c49a={'count':0x0,'rows':[]};var _0x1d3cc8=_[_0xf15c('0x26')](db[_0xf15c('0x27')][_0xf15c('0x28')],function(_0x4e595e){return{'name':_0x4e595e['fieldName'],'type':_0x4e595e[_0xf15c('0x29')][_0xf15c('0x2a')]};});_0x1f5364[_0xf15c('0x2b')]=_[_0xf15c('0x26')](_0x1d3cc8,'name');_0x1f5364[_0xf15c('0x2c')]=_[_0xf15c('0x2d')](_0x173275['query']);_0x1f5364[_0xf15c('0x2e')]=_[_0xf15c('0x2f')](_0x1f5364[_0xf15c('0x2b')],_0x1f5364[_0xf15c('0x2c')]);_0x2a753d[_0xf15c('0x30')]=_['intersection'](_0x1f5364[_0xf15c('0x2b')],qs['fields'](_0x173275[_0xf15c('0x2c')][_0xf15c('0x31')]));_0x2a753d[_0xf15c('0x30')]=_0x2a753d[_0xf15c('0x30')][_0xf15c('0x32')]?_0x2a753d[_0xf15c('0x30')]:_0x1f5364[_0xf15c('0x2b')];if(!_0x173275[_0xf15c('0x2c')][_0xf15c('0x33')](_0xf15c('0x34'))){_0x2a753d[_0xf15c('0x1a')]=qs[_0xf15c('0x1a')](_0x173275[_0xf15c('0x2c')][_0xf15c('0x1a')]);_0x2a753d[_0xf15c('0x18')]=qs[_0xf15c('0x18')](_0x173275[_0xf15c('0x2c')][_0xf15c('0x18')]);}_0x2a753d['order']=qs[_0xf15c('0x35')](_0x173275[_0xf15c('0x2c')][_0xf15c('0x35')]);_0x2a753d[_0xf15c('0x36')]=qs[_0xf15c('0x2e')](_['pick'](_0x173275[_0xf15c('0x2c')],_0x1f5364[_0xf15c('0x2e')]),_0x1d3cc8);if(_0x173275['query']['filter']){_0x2a753d[_0xf15c('0x36')]=_[_0xf15c('0x37')](_0x2a753d[_0xf15c('0x36')],{'$or':_[_0xf15c('0x26')](_0x1d3cc8,function(_0x153042){if(_0x153042[_0xf15c('0x29')]!==_0xf15c('0x38')){var _0x96cfef={};_0x96cfef[_0x153042[_0xf15c('0x24')]]={'$like':'%'+_0x173275[_0xf15c('0x2c')][_0xf15c('0x39')]+'%'};return _0x96cfef;}})});}_0x2a753d=_[_0xf15c('0x37')]({},_0x2a753d,_0x173275[_0xf15c('0x3a')]);var _0xaee811={'where':_0x2a753d[_0xf15c('0x36')]};return db[_0xf15c('0x27')]['count'](_0xaee811)['then'](function(_0x3cf69c){_0xe0c49a[_0xf15c('0x1b')]=_0x3cf69c;if(_0x173275[_0xf15c('0x2c')][_0xf15c('0x3b')]){_0x2a753d['include']=[{'all':!![]}];}return db['CmHopperHistory']['findAll'](_0x2a753d);})[_0xf15c('0x22')](function(_0x10ede0){_0xe0c49a['rows']=_0x10ede0;return _0xe0c49a;})[_0xf15c('0x22')](respondWithFilteredResult(_0x11edbf,_0x2a753d))[_0xf15c('0x3c')](handleError(_0x11edbf,null));};exports[_0xf15c('0x3d')]=function(_0x1e930d,_0x385390){var _0x26f349={'raw':!![],'where':{'id':_0x1e930d[_0xf15c('0x3e')]['id']}},_0x31fe3e={};_0x31fe3e[_0xf15c('0x2b')]=_[_0xf15c('0x2d')](db[_0xf15c('0x27')][_0xf15c('0x28')]);_0x31fe3e['query']=_[_0xf15c('0x2d')](_0x1e930d[_0xf15c('0x2c')]);_0x31fe3e[_0xf15c('0x2e')]=_[_0xf15c('0x2f')](_0x31fe3e['model'],_0x31fe3e[_0xf15c('0x2c')]);_0x26f349[_0xf15c('0x30')]=_[_0xf15c('0x2f')](_0x31fe3e[_0xf15c('0x2b')],qs[_0xf15c('0x31')](_0x1e930d[_0xf15c('0x2c')][_0xf15c('0x31')]));_0x26f349[_0xf15c('0x30')]=_0x26f349[_0xf15c('0x30')][_0xf15c('0x32')]?_0x26f349['attributes']:_0x31fe3e[_0xf15c('0x2b')];if(_0x1e930d['query'][_0xf15c('0x3b')]){_0x26f349[_0xf15c('0x3f')]=[{'all':!![]}];}_0x26f349=_[_0xf15c('0x37')]({},_0x26f349,_0x1e930d[_0xf15c('0x3a')]);return db[_0xf15c('0x27')]['find'](_0x26f349)[_0xf15c('0x22')](handleEntityNotFound(_0x385390,null))[_0xf15c('0x22')](respondWithResult(_0x385390,null))[_0xf15c('0x3c')](handleError(_0x385390,null));};exports[_0xf15c('0x40')]=function(_0x5ad4a7,_0xb9a319){return db[_0xf15c('0x27')]['create'](_0x5ad4a7[_0xf15c('0x41')],{})[_0xf15c('0x22')](respondWithResult(_0xb9a319,0xc9))[_0xf15c('0x3c')](handleError(_0xb9a319,null));};exports[_0xf15c('0x42')]=function(_0x48fa46,_0x3c414f){return db[_0xf15c('0x27')]['describe']()[_0xf15c('0x22')](respondWithResult(_0x3c414f,null))[_0xf15c('0x3c')](handleError(_0x3c414f,null));};exports[_0xf15c('0x21')]=function(_0x246470,_0xc59beb){if(_0x246470['body'][_0xf15c('0x43')]){delete _0x246470[_0xf15c('0x41')][_0xf15c('0x43')];}return db[_0xf15c('0x27')][_0xf15c('0x44')]({'where':{'uniqueid':_0x246470['params']['id']}})[_0xf15c('0x22')](handleEntityNotFound(_0xc59beb,null))[_0xf15c('0x22')](saveUpdates(_0x246470[_0xf15c('0x41')],null))['then'](respondWithResult(_0xc59beb,null))[_0xf15c('0x3c')](handleError(_0xc59beb,null));};
\ No newline at end of file