SILENT KILLERPanel

Current Path: > home > ivftiowh > > www > wp-includes


Operation   : Linux premium88.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
Software     : Apache
Server IP    : 185.61.154.216 | Your IP: 216.73.216.44
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/ivftiowh//www/wp-includes

NameTypeSizeLast ModifiedActions
ID3 Directory - -
IXR Directory - -
PHPMailer Directory - -
Requests Directory - -
SimplePie Directory - -
Text Directory - -
assets Directory - -
block-patterns Directory - -
block-supports Directory - -
blocks Directory - -
certificates Directory - -
css Directory - -
customize Directory - -
fonts Directory - -
html-api Directory - -
images Directory - -
js Directory - -
php-compat Directory - -
pomo Directory - -
rest-api Directory - -
sitemaps Directory - -
sodium_compat Directory - -
style-engine Directory - -
theme-compat Directory - -
widgets Directory - -
.htaccess File 160 bytes June 28 2024 08:27:59.
admin-bar.php File 35131 bytes September 13 2023 04:25:41.
atomlib.php File 11950 bytes September 13 2023 04:25:41.
author-template.php File 18951 bytes September 13 2023 04:25:41.
block-editor.php File 27598 bytes September 13 2023 04:25:41.
block-i18n.json File 316 bytes September 13 2023 04:25:41.
block-patterns.php File 15901 bytes September 13 2023 04:25:41.
block-template-utils.php File 49130 bytes September 13 2023 04:25:41.
block-template.php File 10592 bytes September 13 2023 04:25:42.
blocks.php File 59159 bytes June 24 2024 20:05:07.
bookmark-template.php File 12909 bytes September 13 2023 04:25:41.
bookmark.php File 15378 bytes September 13 2023 04:25:41.
cache-compat.php File 5969 bytes September 13 2023 04:25:42.
cache.php File 13474 bytes September 13 2023 04:25:42.
canonical.php File 33339 bytes September 13 2023 04:25:41.
capabilities.php File 40026 bytes September 13 2023 04:25:41.
category-template.php File 57009 bytes September 13 2023 04:25:41.
category.php File 12702 bytes September 13 2023 04:25:41.
class-IXR.php File 2543 bytes August 05 2020 08:21:22.
class-feed.php File 529 bytes August 05 2020 08:21:23.
class-http.php File 367 bytes September 13 2023 04:25:42.
class-json.php File 43684 bytes September 13 2023 04:25:42.
class-oembed.php File 401 bytes September 13 2023 04:25:41.
class-phpass.php File 6708 bytes September 13 2023 04:25:41.
class-phpmailer.php File 664 bytes September 13 2023 04:25:41.
class-pop3.php File 20969 bytes September 13 2023 04:25:41.
class-requests.php File 2237 bytes September 13 2023 04:25:41.
class-simplepie.php File 98124 bytes September 13 2023 04:25:41.
class-smtp.php File 457 bytes September 13 2023 04:25:41.
class-snoopy.php File 37715 bytes September 13 2023 04:25:42.
class-walker-category-dropdown.php File 2473 bytes September 13 2023 04:25:41.
class-walker-category.php File 8478 bytes September 13 2023 04:25:41.
class-walker-comment.php File 14214 bytes September 13 2023 04:25:41.
class-walker-nav-menu.php File 11313 bytes September 13 2023 04:25:42.
class-walker-page-dropdown.php File 2710 bytes September 13 2023 04:25:41.
class-walker-page.php File 7623 bytes September 13 2023 04:25:41.
class-wp-admin-bar-plain.php File 1000 bytes September 13 2023 04:25:41.
class-wp-admin-bar.php File 17364 bytes September 13 2023 04:25:41.
class-wp-ajax-response.php File 5266 bytes September 13 2023 04:25:41.
class-wp-application-passwords.php File 12854 bytes September 13 2023 04:25:41.
class-wp-block-editor-context.php File 1350 bytes September 13 2023 04:25:42.
class-wp-block-list.php File 4749 bytes September 13 2023 04:25:42.
class-wp-block-live.php File 1000 bytes September 13 2023 04:25:41.
class-wp-block-parser-block.php File 2555 bytes September 13 2023 04:25:42.
class-wp-block-parser-frame.php File 1916 bytes September 13 2023 04:25:41.
class-wp-block-parser.php File 11761 bytes September 13 2023 04:25:41.
class-wp-block-pattern-categories-registry.php File 5371 bytes September 13 2023 04:25:42.
class-wp-block-patterns-registry.php File 8775 bytes October 13 2023 06:16:03.
class-wp-block-styles-registry.php File 5883 bytes September 13 2023 04:25:41.
class-wp-block-supports.php File 5521 bytes September 13 2023 04:25:42.
class-wp-block-template.php File 1951 bytes September 13 2023 04:25:41.
class-wp-block-type-registry.php File 5013 bytes October 13 2023 06:16:03.
class-wp-block-type.php File 14301 bytes September 13 2023 04:25:41.
class-wp-block.php File 8402 bytes September 13 2023 04:25:42.
class-wp-classic-to-block-menu-converter.php File 4088 bytes September 13 2023 04:25:42.
class-wp-comment-query.php File 47829 bytes September 13 2023 04:25:41.
class-wp-comment.php File 9357 bytes September 13 2023 04:25:41.
class-wp-customize-control.php File 25843 bytes September 13 2023 04:25:41.
class-wp-customize-manager.php File 202163 bytes September 13 2023 04:25:41.
class-wp-customize-nav-menus.php File 57304 bytes September 13 2023 04:25:41.
class-wp-customize-panel.php File 10671 bytes September 13 2023 04:25:41.
class-wp-customize-section.php File 11245 bytes September 13 2023 04:25:42.
class-wp-customize-setting.php File 29890 bytes September 13 2023 04:25:41.
class-wp-customize-widgets.php File 71633 bytes September 13 2023 04:25:41.
class-wp-date-query.php File 35719 bytes September 13 2023 04:25:42.
class-wp-dependencies.php File 14063 bytes September 13 2023 04:25:42.
class-wp-dependency.php File 2627 bytes September 13 2023 04:25:42.
class-wp-duotone.php File 39362 bytes September 13 2023 04:25:41.
class-wp-editor.php File 72084 bytes September 13 2023 04:25:42.
class-wp-embed.php File 15994 bytes September 13 2023 04:25:42.
class-wp-error.php File 7502 bytes September 13 2023 04:25:41.
class-wp-fatal-error-handler.php File 7872 bytes September 13 2023 04:25:41.
class-wp-feed-cache-transient.php File 2586 bytes September 13 2023 04:25:41.
class-wp-feed-cache.php File 996 bytes September 13 2023 04:25:41.
class-wp-hook.php File 15628 bytes September 13 2023 04:25:41.
class-wp-http-cookie.php File 7389 bytes September 13 2023 04:25:41.
class-wp-http-curl.php File 12492 bytes September 13 2023 04:25:41.
class-wp-http-encoding.php File 6689 bytes September 13 2023 04:25:41.
class-wp-http-ixr-client.php File 3501 bytes September 13 2023 04:25:41.
class-wp-http-proxy.php File 5980 bytes September 13 2023 04:25:42.
class-wp-http-requests-hooks.php File 2022 bytes September 13 2023 04:25:41.
class-wp-http-requests-response.php File 4400 bytes September 13 2023 04:25:41.
class-wp-http-response.php File 2977 bytes September 13 2023 04:25:41.
class-wp-http-streams.php File 16810 bytes September 13 2023 04:25:42.
class-wp-http.php File 40350 bytes September 13 2023 04:25:41.
class-wp-image-editor-gd.php File 16623 bytes September 13 2023 04:25:41.
class-wp-image-editor-imagick.php File 29990 bytes September 13 2023 04:25:41.
class-wp-image-editor.php File 17133 bytes September 13 2023 04:25:42.
class-wp-list-util.php File 7443 bytes September 13 2023 04:25:41.
class-wp-locale-switcher.php File 6561 bytes September 13 2023 04:25:41.
class-wp-locale.php File 16115 bytes September 13 2023 04:25:41.
class-wp-matchesmapregex.php File 1826 bytes September 13 2023 04:25:41.
class-wp-meta-query.php File 30533 bytes September 13 2023 04:25:41.
class-wp-metadata-lazyloader.php File 6833 bytes September 13 2023 04:25:41.
class-wp-navigation-fallback.php File 6980 bytes September 13 2023 04:25:41.
class-wp-network-query.php File 19291 bytes September 13 2023 04:25:41.
class-wp-network.php File 12189 bytes September 13 2023 04:25:41.
class-wp-object-cache.php File 17594 bytes September 13 2023 04:25:42.
class-wp-oembed-controller.php File 6879 bytes September 13 2023 04:25:42.
class-wp-oembed.php File 31394 bytes September 13 2023 04:25:42.
class-wp-paused-extensions-storage.php File 5062 bytes September 13 2023 04:25:41.
class-wp-post-type.php File 25964 bytes September 13 2023 04:25:42.
class-wp-post.php File 6484 bytes September 13 2023 04:25:41.
class-wp-query.php File 150699 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-cookie-service.php File 6877 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-email-service.php File 11183 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-key-service.php File 4501 bytes September 13 2023 04:25:41.
class-wp-recovery-mode-link-service.php File 3463 bytes September 13 2023 04:25:41.
class-wp-recovery-mode.php File 11435 bytes September 13 2023 04:25:41.
class-wp-rewrite.php File 63038 bytes September 13 2023 04:25:41.
class-wp-role.php File 2524 bytes September 13 2023 04:25:42.
class-wp-roles.php File 8578 bytes September 13 2023 04:25:41.
class-wp-scripts.php File 28351 bytes September 13 2023 04:25:41.
class-wp-session-tokens.php File 7451 bytes September 13 2023 04:25:41.
class-wp-simplepie-file.php File 3403 bytes September 13 2023 04:25:42.
class-wp-simplepie-sanitize-kses.php File 1800 bytes September 13 2023 04:25:41.
class-wp-site-query.php File 31020 bytes September 13 2023 04:25:42.
class-wp-site.php File 7454 bytes September 13 2023 04:25:41.
class-wp-styles.php File 10898 bytes September 13 2023 04:25:41.
class-wp-tax-query.php File 19545 bytes September 13 2023 04:25:42.
class-wp-taxonomy.php File 18567 bytes September 13 2023 04:25:41.
class-wp-term-query.php File 40451 bytes September 13 2023 04:25:42.
class-wp-term.php File 5298 bytes September 13 2023 04:25:41.
class-wp-text-diff-renderer-inline.php File 830 bytes September 13 2023 04:25:41.
class-wp-text-diff-renderer-table.php File 17187 bytes September 13 2023 04:25:41.
class-wp-textdomain-registry.php File 5976 bytes September 13 2023 04:25:41.
class-wp-theme-json-data.php File 1554 bytes September 13 2023 04:25:41.
class-wp-theme-json-resolver.php File 24669 bytes September 13 2023 04:25:41.
class-wp-theme-json-schema.php File 4301 bytes September 13 2023 04:25:41.
class-wp-theme-json.php File 129295 bytes October 13 2023 06:16:03.
class-wp-theme.php File 56188 bytes October 13 2023 06:16:03.
class-wp-user-meta-session-tokens.php File 2990 bytes August 05 2020 08:21:22.
class-wp-user-query.php File 42242 bytes September 13 2023 04:25:41.
class-wp-user-request.php File 2222 bytes September 13 2023 04:25:41.
class-wp-user.php File 22762 bytes September 13 2023 04:25:41.
class-wp-walker.php File 13167 bytes September 13 2023 04:25:41.
class-wp-widget-factory.php File 3347 bytes September 13 2023 04:25:42.
class-wp-widget.php File 18383 bytes September 13 2023 04:25:42.
class-wp-xmlrpc-server.php File 214130 bytes September 13 2023 04:25:41.
class-wp.php File 25978 bytes September 13 2023 04:25:41.
class-wpdb.php File 120418 bytes September 13 2023 04:25:41.
class.wp-dependencies.php File 373 bytes September 13 2023 04:25:42.
class.wp-scripts.php File 343 bytes September 13 2023 04:25:42.
class.wp-styles.php File 338 bytes September 13 2023 04:25:42.
comment-template.php File 101319 bytes September 13 2023 04:25:41.
comment.php File 128537 bytes September 13 2023 04:25:41.
compat.php File 15219 bytes September 13 2023 04:25:41.
cron.php File 41540 bytes September 13 2023 04:25:41.
date-long.php File 1000 bytes September 13 2023 04:25:41.
date.php File 400 bytes September 13 2023 04:25:41.
default-constants.php File 10981 bytes September 13 2023 04:25:41.
default-filters.php File 33016 bytes October 13 2023 06:16:03.
default-widgets.php File 2222 bytes September 13 2023 04:25:42.
deprecated.php File 159498 bytes September 13 2023 04:25:41.
embed-template.php File 338 bytes September 13 2023 04:25:41.
embed.php File 37470 bytes September 13 2023 04:25:42.
error-protection.php File 4121 bytes September 13 2023 04:25:42.
feed-atom-comments.php File 5448 bytes September 13 2023 04:25:42.
feed-atom.php File 3048 bytes September 13 2023 04:25:41.
feed-rdf.php File 2668 bytes August 05 2020 08:21:22.
feed-rss.php File 1189 bytes August 05 2020 08:21:23.
feed-rss2-comments.php File 4080 bytes September 13 2023 04:25:42.
feed-rss2.php File 3799 bytes August 05 2020 08:21:22.
feed.php File 23057 bytes September 13 2023 04:25:42.
formatting.php File 334312 bytes June 24 2024 20:05:07.
functions.php File 265650 bytes June 24 2024 20:05:07.
functions.wp-scripts.php File 14758 bytes September 13 2023 04:25:42.
functions.wp-styles.php File 8583 bytes September 13 2023 04:25:42.
general-template.php File 167726 bytes September 13 2023 04:25:42.
global-styles-and-settings.php File 18842 bytes September 13 2023 04:25:41.
http.php File 23848 bytes September 13 2023 04:25:42.
https-detection.php File 6505 bytes September 13 2023 04:25:41.
https-migration.php File 4741 bytes September 13 2023 04:25:42.
kses.php File 71670 bytes September 13 2023 04:25:41.
l10n.php File 62783 bytes September 13 2023 04:25:42.
link-template.php File 154510 bytes September 13 2023 04:25:41.
load.php File 53954 bytes September 13 2023 04:25:42.
locale.php File 162 bytes August 05 2020 08:21:22.
media-template.php File 61601 bytes September 13 2023 04:25:42.
media.php File 205173 bytes October 13 2023 06:16:03.
meta.php File 63276 bytes September 13 2023 04:25:42.
ms-blogs.php File 25628 bytes September 13 2023 04:25:42.
ms-default-constants.php File 4900 bytes September 13 2023 04:25:42.
ms-default-filters.php File 6636 bytes September 13 2023 04:25:41.
ms-deprecated.php File 21758 bytes September 13 2023 04:25:41.
ms-files.php File 2652 bytes September 13 2023 04:25:41.
ms-functions.php File 91258 bytes September 13 2023 04:25:42.
ms-load.php File 19870 bytes September 13 2023 04:25:41.
ms-network.php File 3782 bytes September 13 2023 04:25:41.
ms-settings.php File 4124 bytes September 13 2023 04:25:42.
ms-site.php File 40476 bytes September 13 2023 04:25:41.
nav-menu-template.php File 25785 bytes September 13 2023 04:25:42.
nav-menu.php File 44078 bytes September 13 2023 04:25:41.
navigation-fallback.php File 2298 bytes September 13 2023 04:25:41.
option.php File 80051 bytes September 13 2023 04:25:42.
pluggable-deprecated.php File 6263 bytes August 05 2020 08:21:22.
pluggable.php File 111475 bytes September 13 2023 04:25:41.
plugin.php File 35465 bytes September 13 2023 04:25:41.
post-formats.php File 7100 bytes September 13 2023 04:25:41.
post-template.php File 66904 bytes September 13 2023 04:25:41.
post-thumbnail-template.php File 10308 bytes September 13 2023 04:25:42.
post.php File 274389 bytes October 13 2023 06:16:03.
query.php File 37032 bytes September 13 2023 04:25:41.
registration-functions.php File 200 bytes September 13 2023 04:25:41.
registration.php File 200 bytes September 13 2023 04:25:41.
rest-api.php File 97068 bytes October 13 2023 06:16:03.
revision.php File 25433 bytes September 13 2023 04:25:41.
rewrite.php File 19514 bytes September 13 2023 04:25:41.
robots-template.php File 5185 bytes September 13 2023 04:25:41.
rss-functions.php File 255 bytes September 13 2023 04:25:41.
rss.php File 23015 bytes September 13 2023 04:25:41.
script-loader.php File 137080 bytes September 13 2023 04:25:41.
session.php File 258 bytes August 05 2020 08:21:23.
shortcodes.php File 23854 bytes October 13 2023 06:16:03.
sitemaps.php File 3238 bytes September 13 2023 04:25:42.
spl-autoload-compat.php File 441 bytes September 13 2023 04:25:41.
style-engine.php File 7198 bytes September 13 2023 04:25:42.
taxonomy.php File 172884 bytes September 13 2023 04:25:41.
template-canvas.php File 592 bytes September 13 2023 04:25:42.
template-loader.php File 3012 bytes September 13 2023 04:25:41.
template.php File 23327 bytes September 13 2023 04:25:41.
theme-i18n.json File 1151 bytes September 13 2023 04:25:41.
theme-previews.php File 2826 bytes October 13 2023 06:16:03.
theme-templates.php File 5522 bytes September 13 2023 04:25:42.
theme.json File 7203 bytes September 13 2023 04:25:42.
theme.php File 130874 bytes September 13 2023 04:25:42.
update.php File 36755 bytes September 13 2023 04:25:41.
user.php File 170915 bytes September 13 2023 04:25:41.
vars.php File 5838 bytes September 13 2023 04:25:42.
version.php File 928 bytes June 24 2024 20:05:07.
widgets.php File 69875 bytes September 13 2023 04:25:42.
wp-db.php File 445 bytes September 13 2023 04:25:41.
wp-diff.php File 647 bytes August 05 2020 08:21:23.

Reading File: /home/ivftiowh//www/wp-includes/compat.php

<?php
/**
 * WordPress implementation for PHP functions either missing from older PHP versions or not included by default.
 *
 * @package PHP
 * @access private
 */

// If gettext isn't available.
if ( ! function_exists( '_' ) ) {
	function _( $message ) {
		return $message;
	}
}

/**
 * Returns whether PCRE/u (PCRE_UTF8 modifier) is available for use.
 *
 * @ignore
 * @since 4.2.2
 * @access private
 *
 * @param bool $set - Used for testing only
 *             null   : default - get PCRE/u capability
 *             false  : Used for testing - return false for future calls to this function
 *             'reset': Used for testing - restore default behavior of this function
 */
function _wp_can_use_pcre_u( $set = null ) {
	static $utf8_pcre = 'reset';

	if ( null !== $set ) {
		$utf8_pcre = $set;
	}

	if ( 'reset' === $utf8_pcre ) {
		// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- intentional error generated to detect PCRE/u support.
		$utf8_pcre = @preg_match( '/^./u', 'a' );
	}

	return $utf8_pcre;
}

if ( ! function_exists( 'mb_substr' ) ) :
	/**
	 * Compat function to mimic mb_substr().
	 *
	 * @ignore
	 * @since 3.2.0
	 *
	 * @see _mb_substr()
	 *
	 * @param string      $string   The string to extract the substring from.
	 * @param int         $start    Position to being extraction from in `$string`.
	 * @param int|null    $length   Optional. Maximum number of characters to extract from `$string`.
	 *                              Default null.
	 * @param string|null $encoding Optional. Character encoding to use. Default null.
	 * @return string Extracted substring.
	 */
	function mb_substr( $string, $start, $length = null, $encoding = null ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.stringFound
		return _mb_substr( $string, $start, $length, $encoding );
	}
endif;

/**
 * Internal compat function to mimic mb_substr().
 *
 * Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit.
 * For `$encoding === UTF-8`, the `$str` input is expected to be a valid UTF-8 byte
 * sequence. The behavior of this function for invalid inputs is undefined.
 *
 * @ignore
 * @since 3.2.0
 *
 * @param string      $str      The string to extract the substring from.
 * @param int         $start    Position to being extraction from in `$str`.
 * @param int|null    $length   Optional. Maximum number of characters to extract from `$str`.
 *                              Default null.
 * @param string|null $encoding Optional. Character encoding to use. Default null.
 * @return string Extracted substring.
 */
function _mb_substr( $str, $start, $length = null, $encoding = null ) {
	if ( null === $str ) {
		return '';
	}

	if ( null === $encoding ) {
		$encoding = get_option( 'blog_charset' );
	}

	/*
	 * The solution below works only for UTF-8, so in case of a different
	 * charset just use built-in substr().
	 */
	if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ) ) {
		return is_null( $length ) ? substr( $str, $start ) : substr( $str, $start, $length );
	}

	if ( _wp_can_use_pcre_u() ) {
		// Use the regex unicode support to separate the UTF-8 characters into an array.
		preg_match_all( '/./us', $str, $match );
		$chars = is_null( $length ) ? array_slice( $match[0], $start ) : array_slice( $match[0], $start, $length );
		return implode( '', $chars );
	}

	$regex = '/(
		[\x00-\x7F]                  # single-byte sequences   0xxxxxxx
		| [\xC2-\xDF][\x80-\xBF]       # double-byte sequences   110xxxxx 10xxxxxx
		| \xE0[\xA0-\xBF][\x80-\xBF]   # triple-byte sequences   1110xxxx 10xxxxxx * 2
		| [\xE1-\xEC][\x80-\xBF]{2}
		| \xED[\x80-\x9F][\x80-\xBF]
		| [\xEE-\xEF][\x80-\xBF]{2}
		| \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences   11110xxx 10xxxxxx * 3
		| [\xF1-\xF3][\x80-\xBF]{3}
		| \xF4[\x80-\x8F][\x80-\xBF]{2}
	)/x';

	// Start with 1 element instead of 0 since the first thing we do is pop.
	$chars = array( '' );

	do {
		// We had some string left over from the last round, but we counted it in that last round.
		array_pop( $chars );

		/*
		 * Split by UTF-8 character, limit to 1000 characters (last array element will contain
		 * the rest of the string).
		 */
		$pieces = preg_split( $regex, $str, 1000, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

		$chars = array_merge( $chars, $pieces );

		// If there's anything left over, repeat the loop.
	} while ( count( $pieces ) > 1 && $str = array_pop( $pieces ) );

	return implode( '', array_slice( $chars, $start, $length ) );
}

if ( ! function_exists( 'mb_strlen' ) ) :
	/**
	 * Compat function to mimic mb_strlen().
	 *
	 * @ignore
	 * @since 4.2.0
	 *
	 * @see _mb_strlen()
	 *
	 * @param string      $string   The string to retrieve the character length from.
	 * @param string|null $encoding Optional. Character encoding to use. Default null.
	 * @return int String length of `$string`.
	 */
	function mb_strlen( $string, $encoding = null ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.stringFound
		return _mb_strlen( $string, $encoding );
	}
endif;

/**
 * Internal compat function to mimic mb_strlen().
 *
 * Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit.
 * For `$encoding === UTF-8`, the `$str` input is expected to be a valid UTF-8 byte
 * sequence. The behavior of this function for invalid inputs is undefined.
 *
 * @ignore
 * @since 4.2.0
 *
 * @param string      $str      The string to retrieve the character length from.
 * @param string|null $encoding Optional. Character encoding to use. Default null.
 * @return int String length of `$str`.
 */
function _mb_strlen( $str, $encoding = null ) {
	if ( null === $encoding ) {
		$encoding = get_option( 'blog_charset' );
	}

	/*
	 * The solution below works only for UTF-8, so in case of a different charset
	 * just use built-in strlen().
	 */
	if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ), true ) ) {
		return strlen( $str );
	}

	if ( _wp_can_use_pcre_u() ) {
		// Use the regex unicode support to separate the UTF-8 characters into an array.
		preg_match_all( '/./us', $str, $match );
		return count( $match[0] );
	}

	$regex = '/(?:
		[\x00-\x7F]                  # single-byte sequences   0xxxxxxx
		| [\xC2-\xDF][\x80-\xBF]       # double-byte sequences   110xxxxx 10xxxxxx
		| \xE0[\xA0-\xBF][\x80-\xBF]   # triple-byte sequences   1110xxxx 10xxxxxx * 2
		| [\xE1-\xEC][\x80-\xBF]{2}
		| \xED[\x80-\x9F][\x80-\xBF]
		| [\xEE-\xEF][\x80-\xBF]{2}
		| \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences   11110xxx 10xxxxxx * 3
		| [\xF1-\xF3][\x80-\xBF]{3}
		| \xF4[\x80-\x8F][\x80-\xBF]{2}
	)/x';

	// Start at 1 instead of 0 since the first thing we do is decrement.
	$count = 1;

	do {
		// We had some string left over from the last round, but we counted it in that last round.
		$count--;

		/*
		 * Split by UTF-8 character, limit to 1000 characters (last array element will contain
		 * the rest of the string).
		 */
		$pieces = preg_split( $regex, $str, 1000 );

		// Increment.
		$count += count( $pieces );

		// If there's anything left over, repeat the loop.
	} while ( $str = array_pop( $pieces ) );

	// Fencepost: preg_split() always returns one extra item in the array.
	return --$count;
}

if ( ! function_exists( 'hash_hmac' ) ) :
	/**
	 * Compat function to mimic hash_hmac().
	 *
	 * The Hash extension is bundled with PHP by default since PHP 5.1.2.
	 * However, the extension may be explicitly disabled on select servers.
	 * As of PHP 7.4.0, the Hash extension is a core PHP extension and can no
	 * longer be disabled.
	 * I.e. when PHP 7.4.0 becomes the minimum requirement, this polyfill
	 * and the associated `_hash_hmac()` function can be safely removed.
	 *
	 * @ignore
	 * @since 3.2.0
	 *
	 * @see _hash_hmac()
	 *
	 * @param string $algo   Hash algorithm. Accepts 'md5' or 'sha1'.
	 * @param string $data   Data to be hashed.
	 * @param string $key    Secret key to use for generating the hash.
	 * @param bool   $binary Optional. Whether to output raw binary data (true),
	 *                       or lowercase hexits (false). Default false.
	 * @return string|false The hash in output determined by `$binary`.
	 *                      False if `$algo` is unknown or invalid.
	 */
	function hash_hmac( $algo, $data, $key, $binary = false ) {
		return _hash_hmac( $algo, $data, $key, $binary );
	}
endif;

/**
 * Internal compat function to mimic hash_hmac().
 *
 * @ignore
 * @since 3.2.0
 *
 * @param string $algo   Hash algorithm. Accepts 'md5' or 'sha1'.
 * @param string $data   Data to be hashed.
 * @param string $key    Secret key to use for generating the hash.
 * @param bool   $binary Optional. Whether to output raw binary data (true),
 *                       or lowercase hexits (false). Default false.
 * @return string|false The hash in output determined by `$binary`.
 *                      False if `$algo` is unknown or invalid.
 */
function _hash_hmac( $algo, $data, $key, $binary = false ) {
	$packs = array(
		'md5'  => 'H32',
		'sha1' => 'H40',
	);

	if ( ! isset( $packs[ $algo ] ) ) {
		return false;
	}

	$pack = $packs[ $algo ];

	if ( strlen( $key ) > 64 ) {
		$key = pack( $pack, $algo( $key ) );
	}

	$key = str_pad( $key, 64, chr( 0 ) );

	$ipad = ( substr( $key, 0, 64 ) ^ str_repeat( chr( 0x36 ), 64 ) );
	$opad = ( substr( $key, 0, 64 ) ^ str_repeat( chr( 0x5C ), 64 ) );

	$hmac = $algo( $opad . pack( $pack, $algo( $ipad . $data ) ) );

	if ( $binary ) {
		return pack( $pack, $hmac );
	}

	return $hmac;
}

if ( ! function_exists( 'hash_equals' ) ) :
	/**
	 * Timing attack safe string comparison.
	 *
	 * Compares two strings using the same time whether they're equal or not.
	 *
	 * Note: It can leak the length of a string when arguments of differing length are supplied.
	 *
	 * This function was added in PHP 5.6.
	 * However, the Hash extension may be explicitly disabled on select servers.
	 * As of PHP 7.4.0, the Hash extension is a core PHP extension and can no
	 * longer be disabled.
	 * I.e. when PHP 7.4.0 becomes the minimum requirement, this polyfill
	 * can be safely removed.
	 *
	 * @since 3.9.2
	 *
	 * @param string $known_string Expected string.
	 * @param string $user_string  Actual, user supplied, string.
	 * @return bool Whether strings are equal.
	 */
	function hash_equals( $known_string, $user_string ) {
		$known_string_length = strlen( $known_string );

		if ( strlen( $user_string ) !== $known_string_length ) {
			return false;
		}

		$result = 0;

		// Do not attempt to "optimize" this.
		for ( $i = 0; $i < $known_string_length; $i++ ) {
			$result |= ord( $known_string[ $i ] ) ^ ord( $user_string[ $i ] );
		}

		return 0 === $result;
	}
endif;

// sodium_crypto_box() was introduced in PHP 7.2.
if ( ! function_exists( 'sodium_crypto_box' ) ) {
	require ABSPATH . WPINC . '/sodium_compat/autoload.php';
}

if ( ! function_exists( 'is_countable' ) ) {
	/**
	 * Polyfill for is_countable() function added in PHP 7.3.
	 *
	 * Verify that the content of a variable is an array or an object
	 * implementing the Countable interface.
	 *
	 * @since 4.9.6
	 *
	 * @param mixed $value The value to check.
	 * @return bool True if `$value` is countable, false otherwise.
	 */
	function is_countable( $value ) {
		return ( is_array( $value )
			|| $value instanceof Countable
			|| $value instanceof SimpleXMLElement
			|| $value instanceof ResourceBundle
		);
	}
}

if ( ! function_exists( 'is_iterable' ) ) {
	/**
	 * Polyfill for is_iterable() function added in PHP 7.1.
	 *
	 * Verify that the content of a variable is an array or an object
	 * implementing the Traversable interface.
	 *
	 * @since 4.9.6
	 *
	 * @param mixed $value The value to check.
	 * @return bool True if `$value` is iterable, false otherwise.
	 */
	function is_iterable( $value ) {
		return ( is_array( $value ) || $value instanceof Traversable );
	}
}

if ( ! function_exists( 'array_key_first' ) ) {
	/**
	 * Polyfill for array_key_first() function added in PHP 7.3.
	 *
	 * Get the first key of the given array without affecting
	 * the internal array pointer.
	 *
	 * @since 5.9.0
	 *
	 * @param array $array An array.
	 * @return string|int|null The first key of array if the array
	 *                         is not empty; `null` otherwise.
	 */
	function array_key_first( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound
		foreach ( $array as $key => $value ) {
			return $key;
		}
	}
}

if ( ! function_exists( 'array_key_last' ) ) {
	/**
	 * Polyfill for `array_key_last()` function added in PHP 7.3.
	 *
	 * Get the last key of the given array without affecting the
	 * internal array pointer.
	 *
	 * @since 5.9.0
	 *
	 * @param array $array An array.
	 * @return string|int|null The last key of array if the array
	 *.                        is not empty; `null` otherwise.
	 */
	function array_key_last( array $array ) { // phpcs:ignore Universal.NamingConventions.NoReservedKeywordParameterNames.arrayFound
		if ( empty( $array ) ) {
			return null;
		}

		end( $array );

		return key( $array );
	}
}

if ( ! function_exists( 'str_contains' ) ) {
	/**
	 * Polyfill for `str_contains()` function added in PHP 8.0.
	 *
	 * Performs a case-sensitive check indicating if needle is
	 * contained in haystack.
	 *
	 * @since 5.9.0
	 *
	 * @param string $haystack The string to search in.
	 * @param string $needle   The substring to search for in the `$haystack`.
	 * @return bool True if `$needle` is in `$haystack`, otherwise false.
	 */
	function str_contains( $haystack, $needle ) {
		if ( '' === $needle ) {
			return true;
		}

		return false !== strpos( $haystack, $needle );
	}
}

if ( ! function_exists( 'str_starts_with' ) ) {
	/**
	 * Polyfill for `str_starts_with()` function added in PHP 8.0.
	 *
	 * Performs a case-sensitive check indicating if
	 * the haystack begins with needle.
	 *
	 * @since 5.9.0
	 *
	 * @param string $haystack The string to search in.
	 * @param string $needle   The substring to search for in the `$haystack`.
	 * @return bool True if `$haystack` starts with `$needle`, otherwise false.
	 */
	function str_starts_with( $haystack, $needle ) {
		if ( '' === $needle ) {
			return true;
		}

		return 0 === strpos( $haystack, $needle );
	}
}

if ( ! function_exists( 'str_ends_with' ) ) {
	/**
	 * Polyfill for `str_ends_with()` function added in PHP 8.0.
	 *
	 * Performs a case-sensitive check indicating if
	 * the haystack ends with needle.
	 *
	 * @since 5.9.0
	 *
	 * @param string $haystack The string to search in.
	 * @param string $needle   The substring to search for in the `$haystack`.
	 * @return bool True if `$haystack` ends with `$needle`, otherwise false.
	 */
	function str_ends_with( $haystack, $needle ) {
		if ( '' === $haystack ) {
			return '' === $needle;
		}

		$len = strlen( $needle );

		return substr( $haystack, -$len, $len ) === $needle;
	}
}

// IMAGETYPE_WEBP constant is only defined in PHP 7.1 or later.
if ( ! defined( 'IMAGETYPE_WEBP' ) ) {
	define( 'IMAGETYPE_WEBP', 18 );
}

// IMG_WEBP constant is only defined in PHP 7.0.10 or later.
if ( ! defined( 'IMG_WEBP' ) ) {
	define( 'IMG_WEBP', IMAGETYPE_WEBP );
}

SILENT KILLER Tool