Built motion from commit 7db97eb.|0.0.116
[motion.git] / server / config / tools / user.js
index 4faab7c..2d4ce3b 100644 (file)
@@ -1 +1 @@
-var _0x25e4=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x68\x61\x6E\x53\x70\x79","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x63\x68\x61\x6E\x73\x70\x79","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x6E\x61\x6D\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x6C\x6F\x67","\x63\x61\x74\x63\x68","\x61\x6C\x6C","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x74\x68\x65\x6E","\x66\x69\x6E\x64\x41\x6C\x6C","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x64\x65\x73\x74\x72\x6F\x79","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x22\x25\x73\x22\x20\x3C\x25\x73\x3E","\x73\x61\x76\x65","\x65\x78\x74\x65\x6E","\x5F\x70\x72\x65\x76\x69\x6F\x75\x73\x44\x61\x74\x61\x56\x61\x6C\x75\x65\x73","\x61\x70\x70\x64\x61\x74\x61","\x53\x49\x50\x2F","\x67\x65\x74\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x44\x69\x61\x6C","\x65\x78\x70\x6F\x72\x74\x73"];_0x25e4[0];var fs=require(_0x25e4[1]);var util=require(_0x25e4[2]);var path=require(_0x25e4[3]);var config=require(_0x25e4[4]);var UserModel=require(_0x25e4[6])[_0x25e4[5]];var VoiceExtension=require(_0x25e4[6])[_0x25e4[7]];var ChanSpy=require(_0x25e4[6])[_0x25e4[8]];var sequelize=require(_0x25e4[6])[_0x25e4[9]];function User(){UserModel[_0x25e4[11]](function(_0xaf18xa){createCallerID(_0xaf18xa);createExtension(_0xaf18xa);if(_0xaf18xa[_0x25e4[10]]){createChanspy(_0xaf18xa)}});UserModel[_0x25e4[14]](function(_0xaf18xa){updateExtension(_0xaf18xa);createCallerID(_0xaf18xa);if((_0xaf18xa[_0x25e4[10]]&&_0xaf18xa[_0x25e4[12]](_0x25e4[10]))){createChanspy(_0xaf18xa)}else {if(_0xaf18xa[_0x25e4[10]]&&!_0xaf18xa[_0x25e4[12]](_0x25e4[10])&&_0xaf18xa[_0x25e4[12]](_0x25e4[13])){deleteChanSpy(_0xaf18xa);createChanspy(_0xaf18xa)}else {if(!_0xaf18xa[_0x25e4[10]]&&_0xaf18xa[_0x25e4[12]](_0x25e4[10])){deleteChanSpy(_0xaf18xa)}}}})}function createChanspy(_0xaf18xa){return sequelize[_0x25e4[35]](function(_0xaf18xd){return ChanSpy[_0x25e4[34]]()[_0x25e4[33]](function(_0xaf18xe){var _0xaf18xf=[];_0xaf18xe[_0x25e4[32]](function(_0xaf18x10){var _0xaf18x11=[];var _0xaf18x12=1;if(_0xaf18x10[_0x25e4[18]]){_0xaf18x11[_0x25e4[27]]({context:_0x25e4[19],exten:util[_0x25e4[22]](_0x25e4[20],_0xaf18x10[_0x25e4[21]],_0xaf18xa[_0x25e4[13]]),priority:_0xaf18x12,app:_0x25e4[23],appdata:_0xaf18x10[_0x25e4[24]],UserId:_0xaf18xa[_0x25e4[25]],ChanSpyId:_0xaf18x10[_0x25e4[25]],type:_0x25e4[26]});_0xaf18x12++};_0xaf18x11[_0x25e4[27]]({context:_0x25e4[19],exten:util[_0x25e4[22]](_0x25e4[20],_0xaf18x10[_0x25e4[21]],_0xaf18xa[_0x25e4[13]]),priority:_0xaf18x12,app:_0x25e4[8],appdata:util[_0x25e4[22]](_0x25e4[28],_0xaf18xa[_0x25e4[13]],_0xaf18x10[_0x25e4[29]]),UserId:_0xaf18xa[_0x25e4[25]],ChanSpyId:_0xaf18x10[_0x25e4[25]],type:_0x25e4[26]});_0xaf18x12=1;if(_0xaf18x10[_0x25e4[18]]){_0xaf18x11[_0x25e4[27]]({context:_0x25e4[19],exten:util[_0x25e4[22]](_0x25e4[20],_0xaf18x10[_0x25e4[21]],_0xaf18xa[_0x25e4[30]]),priority:_0xaf18x12,app:_0x25e4[23],appdata:_0xaf18x10[_0x25e4[24]],UserId:_0xaf18xa[_0x25e4[25]],ChanSpyId:_0xaf18x10[_0x25e4[25]],type:_0x25e4[26]});_0xaf18x12++};_0xaf18x11[_0x25e4[27]]({context:_0x25e4[19],exten:util[_0x25e4[22]](_0x25e4[20],_0xaf18x10[_0x25e4[21]],_0xaf18xa[_0x25e4[30]]),priority:_0xaf18x12,app:_0x25e4[8],appdata:util[_0x25e4[22]](_0x25e4[28],_0xaf18xa[_0x25e4[13]],_0xaf18x10[_0x25e4[29]]),UserId:_0xaf18xa[_0x25e4[25]],ChanSpyId:_0xaf18x10[_0x25e4[25]],type:_0x25e4[26]});_0xaf18xf[_0x25e4[27]](VoiceExtension[_0x25e4[31]](_0xaf18x11,{transaction:_0xaf18xd}))});return _0xaf18xf})[_0x25e4[17]]()})[_0x25e4[16]](function(_0xaf18xc){console[_0x25e4[15]](_0xaf18xc)})}function deleteChanSpy(_0xaf18xa){return sequelize[_0x25e4[35]](function(_0xaf18xd){return VoiceExtension[_0x25e4[36]]({where:{UserId:_0xaf18xa[_0x25e4[25]],ChanSpyId:{$ne:null}},transaction:_0xaf18xd})})[_0x25e4[16]](function(_0xaf18xc){console[_0x25e4[15]](_0xaf18xc)})}function createCallerID(_0xaf18xa){if(_0xaf18xa[_0x25e4[37]]&&_0xaf18xa[_0x25e4[30]]){_0xaf18xa[_0x25e4[38]]=util[_0x25e4[22]](_0x25e4[39],_0xaf18xa[_0x25e4[37]],_0xaf18xa[_0x25e4[30]]);_0xaf18xa[_0x25e4[40]]()};return}function updateExtension(_0xaf18xa){if(_0xaf18xa[_0x25e4[12]](_0x25e4[13])){_0xaf18xa[_0x25e4[45]]()[_0x25e4[33]](function(_0xaf18x16){_0xaf18x16[_0x25e4[32]](function(_0xaf18x10){_0xaf18x10[_0x25e4[41]]=(_0xaf18x10[_0x25e4[41]]===_0xaf18xa[_0x25e4[42]][_0x25e4[30]])?_0xaf18xa[_0x25e4[30]]:_0xaf18xa[_0x25e4[13]];_0xaf18x10[_0x25e4[43]]=_0x25e4[44]+_0xaf18xa[_0x25e4[13]];_0xaf18x10[_0x25e4[40]]()})})[_0x25e4[16]](function(_0xaf18xc){console[_0x25e4[15]](_0xaf18xc)})}}function createExtension(_0xaf18xa){if(_0xaf18xa[_0x25e4[30]]){var _0xaf18x18=[{context:_0x25e4[19],exten:_0xaf18xa[_0x25e4[30]],priority:1,app:_0x25e4[46],appdata:_0x25e4[44]+_0xaf18xa[_0x25e4[13]],UserId:_0xaf18xa[_0x25e4[25]],type:_0x25e4[26]},{context:_0x25e4[19],exten:_0xaf18xa[_0x25e4[13]],priority:1,app:_0x25e4[46],appdata:_0x25e4[44]+_0xaf18xa[_0x25e4[13]],UserId:_0xaf18xa[_0x25e4[25]],type:_0x25e4[26]}];return VoiceExtension[_0x25e4[31]](_0xaf18x18)[_0x25e4[16]](function(_0xaf18xc){console[_0x25e4[15]](_0xaf18xc)})}}module[_0x25e4[47]]=User
\ No newline at end of file
+var _0x90ca=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x66\x73","\x75\x74\x69\x6C","\x70\x61\x74\x68","\x2E\x2E\x2F\x2E\x2E\x2F\x63\x6F\x6E\x66\x69\x67\x2F\x65\x6E\x76\x69\x72\x6F\x6E\x6D\x65\x6E\x74","\x55\x73\x65\x72","\x2E\x2E\x2F\x2E\x2E\x2F\x6D\x6F\x64\x65\x6C\x73","\x56\x6F\x69\x63\x65\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E","\x43\x68\x61\x6E\x53\x70\x79","\x73\x65\x71\x75\x65\x6C\x69\x7A\x65","\x62\x6C\x75\x65\x62\x69\x72\x64","\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x5F\x63\x68\x61\x6E\x67\x65\x64","\x63\x68\x61\x6E\x73\x70\x79","\x74\x68\x65\x6E","\x61\x6C\x6C","\x61\x66\x74\x65\x72\x43\x72\x65\x61\x74\x65","\x63\x68\x61\x6E\x67\x65\x64","\x59\x6F\x75\x20\x63\x61\x6E\x27\x74\x20\x6D\x6F\x64\x69\x66\x79\x20\x74\x68\x65\x20\x69\x6E\x74\x65\x72\x6E\x61\x6C\x20\x6F\x66\x20\x61\x20\x55\x73\x65\x72\x2F\x41\x67\x65\x6E\x74\x2F\x54\x65\x6C\x65\x70\x68\x6F\x6E\x65","\x62\x65\x66\x6F\x72\x65\x55\x70\x64\x61\x74\x65","\x73\x74\x61\x74\x75\x73","\x71\x75\x65\x75\x65\x53\x74\x61\x74\x75\x73","\x63\x61\x6C\x6C\x65\x72\x69\x64","\x6C\x61\x73\x74\x4C\x6F\x67\x69\x6E\x41\x74","\x6F\x6E\x6C\x69\x6E\x65","\x6E\x61\x6D\x65","\x61\x66\x74\x65\x72\x55\x70\x64\x61\x74\x65","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x63\x68\x61\x6E\x73\x70\x79\x2E\x2E\x2E","\x6C\x6F\x67","\x61\x75\x74\x68","\x66\x72\x6F\x6D\x2D\x73\x69\x70","\x25\x73\x25\x73","\x70\x72\x65\x66\x69\x78","\x66\x6F\x72\x6D\x61\x74","\x41\x75\x74\x68\x65\x6E\x74\x69\x63\x61\x74\x65","\x70\x61\x73\x73\x77\x6F\x72\x64","\x69\x64","\x73\x79\x73\x74\x65\x6D","\x70\x75\x73\x68","\x53\x49\x50\x2F\x25\x73\x2C\x25\x73","\x6F\x70\x74\x69\x6F\x6E\x73","\x74\x72\x61\x6E\x73\x61\x63\x74\x69\x6F\x6E","\x62\x75\x6C\x6B\x43\x72\x65\x61\x74\x65","\x66\x6F\x72\x45\x61\x63\x68","\x66\x69\x6E\x64\x41\x6C\x6C","\x44\x65\x6C\x65\x74\x69\x6E\x67\x20\x63\x68\x61\x6E\x73\x70\x79\x2E\x2E\x2E","\x64\x65\x73\x74\x72\x6F\x79","\x66\x75\x6C\x6C\x6E\x61\x6D\x65","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x63\x61\x6C\x6C\x65\x72\x49\x44\x2E\x2E\x2E","\x22\x25\x73\x22\x20\x3C\x25\x73\x3E","\x73\x61\x76\x65","\x55\x70\x64\x61\x74\x69\x6E\x67\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x2E\x2E","\x65\x78\x74\x65\x6E","\x5F","\x61\x70\x70","\x44\x69\x61\x6C","\x61\x70\x70\x64\x61\x74\x61","\x53\x49\x50\x2F","\x2C\x74\x54\x78\x58","\x67\x65\x74\x55\x73\x65\x72\x45\x78\x74\x65\x6E\x73\x69\x6F\x6E\x73","\x43\x72\x65\x61\x74\x69\x6E\x67\x20\x65\x78\x74\x65\x6E\x73\x69\x6F\x6E\x2E\x2E\x2E","\x53\x65\x74","\x43\x44\x52\x28\x74\x79\x70\x65\x29\x3D\x69\x6E\x74\x65\x72\x6E\x61\x6C","\x48\x61\x6E\x67\x75\x70","","\x65\x78\x70\x6F\x72\x74\x73"];_0x90ca[0];var fs=require(_0x90ca[1]);var util=require(_0x90ca[2]);var path=require(_0x90ca[3]);var config=require(_0x90ca[4]);var UserModel=require(_0x90ca[6])[_0x90ca[5]];var VoiceExtension=require(_0x90ca[6])[_0x90ca[7]];var ChanSpy=require(_0x90ca[6])[_0x90ca[8]];var sequelize=require(_0x90ca[6])[_0x90ca[9]];var Promise=require(_0x90ca[10]);function User(){UserModel[_0x90ca[16]](function(_0x2234xb,_0x2234xc){delete _0x2234xb[_0x90ca[12]][_0x90ca[11]];return Promise[_0x90ca[15]]([])[_0x90ca[14]](createCallerID(_0x2234xb,_0x2234xc))[_0x90ca[14]](createExtension(_0x2234xb,_0x2234xc))[_0x90ca[14]](function(){if(_0x2234xb[_0x90ca[13]]){createChanspy(_0x2234xb,_0x2234xc)}})});UserModel[_0x90ca[19]](function(_0x2234xb,_0x2234xc){if(_0x2234xb[_0x90ca[17]](_0x90ca[11])){throw  new sequelize.Error(_0x90ca[18])}});UserModel[_0x90ca[26]](function(_0x2234xb,_0x2234xc){if(!_0x2234xb[_0x90ca[17]](_0x90ca[20])&& !_0x2234xb[_0x90ca[17]](_0x90ca[21])&& !_0x2234xb[_0x90ca[17]](_0x90ca[22])&& !_0x2234xb[_0x90ca[17]](_0x90ca[23])&& !_0x2234xb[_0x90ca[17]](_0x90ca[24])){return Promise[_0x90ca[15]]([])[_0x90ca[14]](updateExtension(_0x2234xb,_0x2234xc))[_0x90ca[14]](createCallerID(_0x2234xb,_0x2234xc))[_0x90ca[14]](function(){if((_0x2234xb[_0x90ca[13]]&& _0x2234xb[_0x90ca[17]](_0x90ca[13]))){createChanspy(_0x2234xb,_0x2234xc)}})[_0x90ca[14]](function(){if(_0x2234xb[_0x90ca[13]]&& !_0x2234xb[_0x90ca[17]](_0x90ca[13])&& _0x2234xb[_0x90ca[17]](_0x90ca[25])){deleteChanSpy(_0x2234xb,_0x2234xc)}})[_0x90ca[14]](function(){if(_0x2234xb[_0x90ca[13]]&& !_0x2234xb[_0x90ca[17]](_0x90ca[13])&& _0x2234xb[_0x90ca[17]](_0x90ca[25])){createChanspy(_0x2234xb,_0x2234xc)}})[_0x90ca[14]](function(){if(!_0x2234xb[_0x90ca[13]]&& _0x2234xb[_0x90ca[17]](_0x90ca[13])){deleteChanSpy(_0x2234xb,_0x2234xc)}})}})}function createChanspy(_0x2234xb,_0x2234xc){console[_0x90ca[28]](_0x90ca[27]);return function(){return ChanSpy[_0x90ca[44]]()[_0x90ca[14]](function(_0x2234xe){var _0x2234xf=[];_0x2234xe[_0x90ca[43]](function(_0x2234x10){var _0x2234x11=[];var _0x2234x12=1;if(_0x2234x10[_0x90ca[29]]){_0x2234x11[_0x90ca[38]]({context:_0x90ca[30],exten:util[_0x90ca[33]](_0x90ca[31],_0x2234x10[_0x90ca[32]],_0x2234xb[_0x90ca[25]]),priority:_0x2234x12,app:_0x90ca[34],appdata:_0x2234x10[_0x90ca[35]],UserId:_0x2234xb[_0x90ca[36]],ChanSpyId:_0x2234x10[_0x90ca[36]],type:_0x90ca[37]});_0x2234x12++};_0x2234x11[_0x90ca[38]]({context:_0x90ca[30],exten:util[_0x90ca[33]](_0x90ca[31],_0x2234x10[_0x90ca[32]],_0x2234xb[_0x90ca[25]]),priority:_0x2234x12,app:_0x90ca[8],appdata:util[_0x90ca[33]](_0x90ca[39],_0x2234xb[_0x90ca[25]],_0x2234x10[_0x90ca[40]]),UserId:_0x2234xb[_0x90ca[36]],ChanSpyId:_0x2234x10[_0x90ca[36]],type:_0x90ca[37]});_0x2234x12= 1;if(_0x2234x10[_0x90ca[29]]){_0x2234x11[_0x90ca[38]]({context:_0x90ca[30],exten:util[_0x90ca[33]](_0x90ca[31],_0x2234x10[_0x90ca[32]],_0x2234xb[_0x90ca[11]]),priority:_0x2234x12,app:_0x90ca[34],appdata:_0x2234x10[_0x90ca[35]],UserId:_0x2234xb[_0x90ca[36]],ChanSpyId:_0x2234x10[_0x90ca[36]],type:_0x90ca[37]});_0x2234x12++};_0x2234x11[_0x90ca[38]]({context:_0x90ca[30],exten:util[_0x90ca[33]](_0x90ca[31],_0x2234x10[_0x90ca[32]],_0x2234xb[_0x90ca[11]]),priority:_0x2234x12,app:_0x90ca[8],appdata:util[_0x90ca[33]](_0x90ca[39],_0x2234xb[_0x90ca[25]],_0x2234x10[_0x90ca[40]]),UserId:_0x2234xb[_0x90ca[36]],ChanSpyId:_0x2234x10[_0x90ca[36]],type:_0x90ca[37]});_0x2234xf[_0x90ca[38]](VoiceExtension[_0x90ca[42]](_0x2234x11,{transaction:_0x2234xc[_0x90ca[41]]}))});return _0x2234xf})[_0x90ca[15]]()}}function deleteChanSpy(_0x2234xb,_0x2234xc){console[_0x90ca[28]](_0x90ca[45]);return function(){return VoiceExtension[_0x90ca[46]]({where:{UserId:_0x2234xb[_0x90ca[36]],ChanSpyId:{$ne:null}},transaction:_0x2234xc[_0x90ca[41]]})}}function createCallerID(_0x2234xb,_0x2234xc){return function(){if(_0x2234xb[_0x90ca[47]]&& _0x2234xb[_0x90ca[11]]&& _0x2234xb[_0x90ca[17]](_0x90ca[47])){console[_0x90ca[28]](_0x90ca[48]);_0x2234xb[_0x90ca[22]]= util[_0x90ca[33]](_0x90ca[49],_0x2234xb[_0x90ca[47]],_0x2234xb[_0x90ca[11]]);return _0x2234xb[_0x90ca[50]]({transaction:_0x2234xc[_0x90ca[41]]})};return}}function updateExtension(_0x2234xb,_0x2234xc){return function(){if(_0x2234xb[_0x90ca[17]](_0x90ca[25])){console[_0x90ca[28]](_0x90ca[51]);return _0x2234xb[_0x90ca[59]]()[_0x90ca[14]](function(_0x2234x16){var _0x2234x17,_0x2234x18=[];_0x2234x16[_0x90ca[43]](function(_0x2234x10){_0x2234x17= false;if(_0x2234x10[_0x90ca[52]]!== _0x90ca[53]+ _0x2234xb[_0x90ca[11]]){_0x2234x10[_0x90ca[52]]= _0x2234xb[_0x90ca[25]];_0x2234x17= true};if(_0x2234x10[_0x90ca[54]]=== _0x90ca[55]){_0x2234x10[_0x90ca[56]]= _0x90ca[57]+ _0x2234xb[_0x90ca[25]]+ _0x90ca[58];_0x2234x17= true};if(_0x2234x17){_0x2234x18[_0x90ca[38]](_0x2234x10[_0x90ca[50]]({transaction:_0x2234xc[_0x90ca[41]]}))}});return _0x2234x18})[_0x90ca[15]]()}}}function createExtension(_0x2234xb,_0x2234xc){console[_0x90ca[28]](_0x90ca[60]);return function(){var _0x2234x1a=[{context:_0x90ca[30],exten:_0x90ca[53]+ _0x2234xb[_0x90ca[11]],priority:1,app:_0x90ca[61],appdata:_0x90ca[62],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]},{context:_0x90ca[30],exten:_0x90ca[53]+ _0x2234xb[_0x90ca[11]],priority:2,app:_0x90ca[55],appdata:_0x90ca[57]+ _0x2234xb[_0x90ca[25]]+ _0x90ca[58],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]},{context:_0x90ca[30],exten:_0x90ca[53]+ _0x2234xb[_0x90ca[11]],priority:3,app:_0x90ca[63],appdata:_0x90ca[64],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]},{context:_0x90ca[30],exten:_0x2234xb[_0x90ca[25]],priority:1,app:_0x90ca[61],appdata:_0x90ca[62],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]},{context:_0x90ca[30],exten:_0x2234xb[_0x90ca[25]],priority:2,app:_0x90ca[55],appdata:_0x90ca[57]+ _0x2234xb[_0x90ca[25]]+ _0x90ca[58],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]},{context:_0x90ca[30],exten:_0x2234xb[_0x90ca[25]],priority:3,app:_0x90ca[63],appdata:_0x90ca[64],UserId:_0x2234xb[_0x90ca[36]],type:_0x90ca[37]}];return VoiceExtension[_0x90ca[42]](_0x2234x1a,{transaction:_0x2234xc[_0x90ca[41]]})}}module[_0x90ca[65]]= User
\ No newline at end of file