From c202447e1457445db8773c501100a7c8d657032d Mon Sep 17 00:00:00 2001
From: Hunter0x7c7 <1125607007@qq.com>
Date: 星期四, 11 八月 2022 21:46:34 +0800
Subject: [PATCH] udpate install.sh

---
 install.sh | 9668 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 4,834 insertions(+), 4,834 deletions(-)

diff --git a/install.sh b/install.sh
index d010756..10b51c1 100644
--- a/install.sh
+++ b/install.sh
@@ -1,4834 +1,4834 @@
-#!/usr/bin/env bash
-# 妫�娴嬪尯
-# -------------------------------------------------------------
-# 妫�鏌ョ郴缁�
-export LANG=en_US.UTF-8
-
-echoContent() {
-	case $1 in
-	# 绾㈣壊
-	"red")
-		# shellcheck disable=SC2154
-		${echoType} "\033[31m${printN}$2 \033[0m"
-		;;
-		# 澶╄摑鑹�
-	"skyBlue")
-		${echoType} "\033[1;36m${printN}$2 \033[0m"
-		;;
-		# 缁胯壊
-	"green")
-		${echoType} "\033[32m${printN}$2 \033[0m"
-		;;
-		# 鐧借壊
-	"white")
-		${echoType} "\033[37m${printN}$2 \033[0m"
-		;;
-	"magenta")
-		${echoType} "\033[31m${printN}$2 \033[0m"
-		;;
-		# 榛勮壊
-	"yellow")
-		${echoType} "\033[33m${printN}$2 \033[0m"
-		;;
-	esac
-}
-checkSystem() {
-	if [[ -n $(find /etc -name "redhat-release") ]] || grep </proc/version -q -i "centos"; then
-		mkdir -p /etc/yum.repos.d
-
-		if [[ -f "/etc/centos-release" ]]; then
-			centosVersion=$(rpm -q centos-release | awk -F "[-]" '{print $3}' | awk -F "[.]" '{print $1}')
-
-			if [[ -z "${centosVersion}" ]] && grep </etc/centos-release -q -i "release 8"; then
-				centosVersion=8
-			fi
-		fi
-
-		release="centos"
-		installType='yum -y install'
-		removeType='yum -y remove'
-		upgrade="yum update -y --skip-broken"
-
-	elif grep </etc/issue -q -i "debian" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "debian" && [[ -f "/proc/version" ]]; then
-		release="debian"
-		installType='apt -y install'
-		upgrade="apt update"
-		updateReleaseInfoChange='apt-get --allow-releaseinfo-change update'
-		removeType='apt -y autoremove'
-
-	elif grep </etc/issue -q -i "ubuntu" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "ubuntu" && [[ -f "/proc/version" ]]; then
-		release="ubuntu"
-		installType='apt -y install'
-		upgrade="apt update"
-		updateReleaseInfoChange='apt-get --allow-releaseinfo-change update'
-		removeType='apt -y autoremove'
-		if grep </etc/issue -q -i "16."; then
-			release=
-		fi
-	fi
-
-	if [[ -z ${release} ]]; then
-		echoContent red "\n鏈剼鏈笉鏀寔姝ょ郴缁燂紝璇峰皢涓嬫柟鏃ュ織鍙嶉缁欏紑鍙戣�匼n"
-		echoContent yellow "$(cat /etc/issue)"
-		echoContent yellow "$(cat /proc/version)"
-		exit 0
-	fi
-}
-
-# 妫�鏌PU鎻愪緵鍟�
-checkCPUVendor() {
-	if [[ -n $(which uname) ]]; then
-		if [[ "$(uname)" == "Linux" ]]; then
-			case "$(uname -m)" in
-			'amd64' | 'x86_64')
-				xrayCoreCPUVendor="Xray-linux-64"
-				v2rayCoreCPUVendor="v2ray-linux-64"
-				# hysteriaCoreCPUVendor="hysteria-linux-amd64"
-				;;
-			'armv8' | 'aarch64')
-				xrayCoreCPUVendor="Xray-linux-arm64-v8a"
-				v2rayCoreCPUVendor="v2ray-linux-arm64-v8a"
-				# hysteriaCoreCPUVendor="hysteria-linux-arm64"
-				;;
-			*)
-				echo "  涓嶆敮鎸佹CPU鏋舵瀯--->"
-				exit 1
-				;;
-			esac
-		fi
-	else
-		echoContent red "  鏃犳硶璇嗗埆姝PU鏋舵瀯锛岄粯璁md64銆亁86_64--->"
-		xrayCoreCPUVendor="Xray-linux-64"
-		v2rayCoreCPUVendor="v2ray-linux-64"
-	fi
-}
-
-# 鍒濆鍖栧叏灞�鍙橀噺
-initVar() {
-	installType='yum -y install'
-	removeType='yum -y remove'
-	upgrade="yum -y update"
-	echoType='echo -e'
-
-	# 鏍稿績鏀寔鐨刢pu鐗堟湰
-	xrayCoreCPUVendor=""
-	v2rayCoreCPUVendor=""
-	# hysteriaCoreCPUVendor=""
-
-	# 鍩熷悕
-	domain=
-
-	# CDN鑺傜偣鐨刟ddress
-	add=
-
-	# 瀹夎鎬昏繘搴�
-	totalProgress=1
-
-	# 1.xray-core瀹夎
-	# 2.v2ray-core 瀹夎
-	# 3.v2ray-core[xtls] 瀹夎
-	coreInstallType=
-
-	# 鏍稿績瀹夎path
-	# coreInstallPath=
-
-	# v2ctl Path
-	ctlPath=
-	# 1.鍏ㄩ儴瀹夎
-	# 2.涓�у寲瀹夎
-	# v2rayAgentInstallType=
-
-	# 褰撳墠鐨勪釜鎬у寲瀹夎鏂瑰紡 01234
-	currentInstallProtocolType=
-
-	# 褰撳墠alpn鐨勯『搴�
-	currentAlpn=
-
-	# 鍓嶇疆绫诲瀷
-	frontingType=
-
-	# 閫夋嫨鐨勪釜鎬у寲瀹夎鏂瑰紡
-	selectCustomInstallType=
-
-	# v2ray-core銆亁ray-core閰嶇疆鏂囦欢鐨勮矾寰�
-	configPath=
-
-	# 閰嶇疆鏂囦欢鐨刾ath
-	currentPath=
-
-	# 閰嶇疆鏂囦欢鐨刪ost
-	currentHost=
-
-	# 瀹夎鏃堕�夋嫨鐨刢ore绫诲瀷
-	selectCoreType=
-
-	# 榛樿core鐗堟湰
-	v2rayCoreVersion=
-
-	# 闅忔満璺緞
-	customPath=
-
-	# centos version
-	centosVersion=
-
-	# UUID
-	currentUUID=
-
-	# previousClients
-	previousClients=
-
-	localIP=
-
-	# 闆嗘垚鏇存柊璇佷功閫昏緫涓嶅啀浣跨敤鍗曠嫭鐨勮剼鏈�--RenewTLS
-	renewTLS=$1
-
-	# tls瀹夎澶辫触鍚庡皾璇曠殑娆℃暟
-	installTLSCount=
-
-	# BTPanel鐘舵��
-	BTPanelStatus=
-
-	# nginx閰嶇疆鏂囦欢璺緞
-	nginxConfigPath=/etc/nginx/conf.d/
-}
-
-# 妫�娴嬪畨瑁呮柟寮�
-readInstallType() {
-	coreInstallType=
-	configPath=
-
-	# 1.妫�娴嬪畨瑁呯洰褰�
-	if [[ -d "/etc/v2ray-agent" ]]; then
-		# 妫�娴嬪畨瑁呮柟寮� v2ray-core
-		if [[ -d "/etc/v2ray-agent/v2ray" && -f "/etc/v2ray-agent/v2ray/v2ray" && -f "/etc/v2ray-agent/v2ray/v2ctl" ]]; then
-			if [[ -d "/etc/v2ray-agent/v2ray/conf" && -f "/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json" ]]; then
-				configPath=/etc/v2ray-agent/v2ray/conf/
-
-				if grep </etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json -q '"security": "tls"'; then
-					# 涓嶅甫XTLS鐨剉2ray-core
-					coreInstallType=2
-					ctlPath=/etc/v2ray-agent/v2ray/v2ctl
-				elif grep </etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json -q '"security": "xtls"'; then
-					# 甯TLS鐨剉2ray-core
-					ctlPath=/etc/v2ray-agent/v2ray/v2ctl
-					coreInstallType=3
-				fi
-			fi
-		fi
-
-		if [[ -d "/etc/v2ray-agent/xray" && -f "/etc/v2ray-agent/xray/xray" ]]; then
-			# 杩欓噷妫�娴媥ray-core
-			if [[ -d "/etc/v2ray-agent/xray/conf" ]] && [[ -f "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" || -f "/etc/v2ray-agent/xray/conf/02_trojan_TCP_inbounds.json" ]]; then
-				# xray-core
-				configPath=/etc/v2ray-agent/xray/conf/
-				ctlPath=/etc/v2ray-agent/xray/xray
-				coreInstallType=1
-			fi
-		fi
-	fi
-}
-
-# 璇诲彇鍗忚绫诲瀷
-readInstallProtocolType() {
-	currentInstallProtocolType=
-
-	while read -r row; do
-		if echo "${row}" | grep -q 02_trojan_TCP_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'trojan'
-			frontingType=02_trojan_TCP_inbounds
-		fi
-		if echo "${row}" | grep -q VLESS_TCP_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'0'
-			frontingType=02_VLESS_TCP_inbounds
-		fi
-		if echo "${row}" | grep -q VLESS_WS_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'1'
-		fi
-		if echo "${row}" | grep -q trojan_gRPC_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'2'
-		fi
-		if echo "${row}" | grep -q VMess_WS_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'3'
-		fi
-		if echo "${row}" | grep -q 04_trojan_TCP_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'4'
-		fi
-		if echo "${row}" | grep -q VLESS_gRPC_inbounds; then
-			currentInstallProtocolType=${currentInstallProtocolType}'5'
-		fi
-	done < <(find ${configPath} -name "*inbounds.json" | awk -F "[.]" '{print $1}')
-}
-
-# 妫�鏌ユ槸鍚﹀畨瑁呭疂濉�
-checkBTPanel() {
-	if pgrep -f "BT-Panel"; then
-		nginxConfigPath=/www/server/panel/vhost/nginx/
-		BTPanelStatus=true
-	fi
-}
-# 璇诲彇褰撳墠alpn鐨勯『搴�
-readInstallAlpn() {
-	if [[ -n ${currentInstallProtocolType} ]]; then
-		local alpn
-		alpn=$(jq -r .inbounds[0].streamSettings.xtlsSettings.alpn[0] ${configPath}${frontingType}.json)
-		if [[ -n ${alpn} ]]; then
-			currentAlpn=${alpn}
-		fi
-	fi
-}
-
-# 妫�鏌ラ槻鐏
-allowPort() {
-	# 濡傛灉闃茬伀澧欏惎鍔ㄧ姸鎬佸垯娣诲姞鐩稿簲鐨勫紑鏀剧鍙�
-	if systemctl status netfilter-persistent 2>/dev/null | grep -q "active (exited)"; then
-		local updateFirewalldStatus=
-		if ! iptables -L | grep -q "$1(mack-a)"; then
-			updateFirewalldStatus=true
-			iptables -I INPUT -p tcp --dport "$1" -m comment --comment "allow $1(mack-a)" -j ACCEPT
-		fi
-
-		if echo "${updateFirewalldStatus}" | grep -q "true"; then
-			netfilter-persistent save
-		fi
-	elif systemctl status ufw 2>/dev/null | grep -q "active (exited)"; then
-		if ufw status | grep -q "Status: active"; then
-			if ! ufw status | grep -q "$1"; then
-				sudo ufw allow "$1"
-				checkUFWAllowPort "$1"
-			fi
-		fi
-
-	elif
-		systemctl status firewalld 2>/dev/null | grep -q "active (running)"
-	then
-		local updateFirewalldStatus=
-		if ! firewall-cmd --list-ports --permanent | grep -qw "$1/tcp"; then
-			updateFirewalldStatus=true
-			firewall-cmd --zone=public --add-port="$1/tcp" --permanent
-			checkFirewalldAllowPort "$1"
-		fi
-
-		if echo "${updateFirewalldStatus}" | grep -q "true"; then
-			firewall-cmd --reload
-		fi
-	fi
-}
-
-# 妫�鏌�80銆�443绔彛鍗犵敤鎯呭喌
-checkPortUsedStatus() {
-	if lsof -i tcp:80 | grep -q LISTEN; then
-		echoContent red "\n ---> 80绔彛琚崰鐢紝璇锋墜鍔ㄥ叧闂悗瀹夎\n"
-		lsof -i tcp:80 | grep LISTEN
-		exit 0
-	fi
-
-	if lsof -i tcp:443 | grep -q LISTEN; then
-		echoContent red "\n ---> 443绔彛琚崰鐢紝璇锋墜鍔ㄥ叧闂悗瀹夎\n"
-		lsof -i tcp:80 | grep LISTEN
-		exit 0
-	fi
-}
-
-# 杈撳嚭ufw绔彛寮�鏀剧姸鎬�
-checkUFWAllowPort() {
-	if ufw status | grep -q "$1"; then
-		echoContent green " ---> $1绔彛寮�鏀炬垚鍔�"
-	else
-		echoContent red " ---> $1绔彛寮�鏀惧け璐�"
-		exit 0
-	fi
-}
-
-# 杈撳嚭firewall-cmd绔彛寮�鏀剧姸鎬�
-checkFirewalldAllowPort() {
-	if firewall-cmd --list-ports --permanent | grep -q "$1"; then
-		echoContent green " ---> $1绔彛寮�鏀炬垚鍔�"
-	else
-		echoContent red " ---> $1绔彛寮�鏀惧け璐�"
-		exit 0
-	fi
-}
-# 妫�鏌ユ枃浠剁洰褰曚互鍙妏ath璺緞
-readConfigHostPathUUID() {
-	currentPath=
-	currentDefaultPort=
-	currentUUID=
-	currentHost=
-	#	currentPort=
-	currentAdd=
-	# 璇诲彇path
-	if [[ -n "${configPath}" ]]; then
-		local fallback
-		fallback=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.path)' ${configPath}${frontingType}.json | head -1)
-
-		local path
-		path=$(echo "${fallback}" | jq -r .path | awk -F "[/]" '{print $2}')
-
-		if [[ $(echo "${fallback}" | jq -r .dest) == 31297 ]]; then
-			currentPath=$(echo "${path}" | awk -F "[w][s]" '{print $1}')
-		elif [[ $(echo "${fallback}" | jq -r .dest) == 31298 ]]; then
-			currentPath=$(echo "${path}" | awk -F "[t][c][p]" '{print $1}')
-		elif [[ $(echo "${fallback}" | jq -r .dest) == 31299 ]]; then
-			currentPath=$(echo "${path}" | awk -F "[v][w][s]" '{print $1}')
-		fi
-		# 灏濊瘯璇诲彇alpn h2 Path
-
-		if [[ -z "${currentPath}" ]]; then
-			dest=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.alpn)|.dest' ${configPath}${frontingType}.json | head -1)
-			if [[ "${dest}" == "31302" || "${dest}" == "31304" ]]; then
-
-				if grep -q "trojangrpc {" <${nginxConfigPath}alone.conf; then
-					currentPath=$(grep "trojangrpc {" <${nginxConfigPath}alone.conf | awk -F "[/]" '{print $2}' | awk -F "[t][r][o][j][a][n]" '{print $1}')
-				elif grep -q "grpc {" <${nginxConfigPath}alone.conf; then
-					currentPath=$(grep "grpc {" <${nginxConfigPath}alone.conf | head -1 | awk -F "[/]" '{print $2}' | awk -F "[g][r][p][c]" '{print $1}')
-				fi
-			fi
-		fi
-
-
-		local defaultPortFile=
-		defaultPortFile=$(find ${configPath}* | grep "default")
-
-		if [[ -n "${defaultPortFile}" ]]; then
-			currentDefaultPort=$(echo "${defaultPortFile}" | awk -F [_] '{print $4}')
-		else
-			currentDefaultPort=443
-		fi
-
-	fi
-	if [[ "${coreInstallType}" == "1" ]]; then
-		currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
-		currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
-		currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
-		if [[ "${currentAdd}" == "null" ]]; then
-			currentAdd=${currentHost}
-		fi
-		#		currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
-
-	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
-		if [[ "${coreInstallType}" == "3" ]]; then
-
-			currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
-		else
-			currentHost=$(jq -r .inbounds[0].streamSettings.tlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
-		fi
-		currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
-
-		if [[ "${currentAdd}" == "null" ]]; then
-			currentAdd=${currentHost}
-		fi
-		currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
-		#		currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
-	fi
-}
-
-# 鐘舵�佸睍绀�
-showInstallStatus() {
-	if [[ -n "${coreInstallType}" ]]; then
-		if [[ "${coreInstallType}" == 1 ]]; then
-			if [[ -n $(pgrep -f xray/xray) ]]; then
-				echoContent yellow "\n鏍稿績: Xray-core[杩愯涓璢"
-			else
-				echoContent yellow "\n鏍稿績: Xray-core[鏈繍琛宂"
-			fi
-
-		elif [[ "${coreInstallType}" == 2 || "${coreInstallType}" == 3 ]]; then
-			if [[ -n $(pgrep -f v2ray/v2ray) ]]; then
-				echoContent yellow "\n鏍稿績: v2ray-core[杩愯涓璢"
-			else
-				echoContent yellow "\n鏍稿績: v2ray-core[鏈繍琛宂"
-			fi
-		fi
-		# 璇诲彇鍗忚绫诲瀷
-		readInstallProtocolType
-
-		if [[ -n ${currentInstallProtocolType} ]]; then
-			echoContent yellow "宸插畨瑁呭崗璁�: \c"
-		fi
-		if echo ${currentInstallProtocolType} | grep -q 0; then
-			if [[ "${coreInstallType}" == 2 ]]; then
-				echoContent yellow "VLESS+TCP[TLS] \c"
-			else
-				echoContent yellow "VLESS+TCP[TLS/XTLS] \c"
-			fi
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q trojan; then
-			if [[ "${coreInstallType}" == 1 ]]; then
-				echoContent yellow "Trojan+TCP[TLS/XTLS] \c"
-			fi
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 1; then
-			echoContent yellow "VLESS+WS[TLS] \c"
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 2; then
-			echoContent yellow "Trojan+gRPC[TLS] \c"
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 3; then
-			echoContent yellow "VMess+WS[TLS] \c"
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 4; then
-			echoContent yellow "Trojan+TCP[TLS] \c"
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 5; then
-			echoContent yellow "VLESS+gRPC[TLS] \c"
-		fi
-	fi
-}
-
-# 娓呯悊鏃ф畫鐣�
-cleanUp() {
-	if [[ "$1" == "v2rayClean" ]]; then
-		rm -rf "$(find /etc/v2ray-agent/v2ray/* | grep -E '(config_full.json|conf)')"
-		handleV2Ray stop >/dev/null
-		rm -f /etc/systemd/system/v2ray.service
-	elif [[ "$1" == "xrayClean" ]]; then
-		rm -rf "$(find /etc/v2ray-agent/xray/* | grep -E '(config_full.json|conf)')"
-		handleXray stop >/dev/null
-		rm -f /etc/systemd/system/xray.service
-
-	elif [[ "$1" == "v2rayDel" ]]; then
-		rm -rf /etc/v2ray-agent/v2ray/*
-
-	elif [[ "$1" == "xrayDel" ]]; then
-		rm -rf /etc/v2ray-agent/xray/*
-	fi
-}
-
-initVar "$1"
-checkSystem
-checkCPUVendor
-readInstallType
-readInstallProtocolType
-readConfigHostPathUUID
-readInstallAlpn
-checkBTPanel
-
-# -------------------------------------------------------------
-
-# 鍒濆鍖栧畨瑁呯洰褰�
-mkdirTools() {
-	mkdir -p /etc/v2ray-agent/tls
-	mkdir -p /etc/v2ray-agent/subscribe
-	mkdir -p /etc/v2ray-agent/subscribe_tmp
-	mkdir -p /etc/v2ray-agent/v2ray/conf
-	mkdir -p /etc/v2ray-agent/v2ray/tmp
-	mkdir -p /etc/v2ray-agent/xray/conf
-	mkdir -p /etc/v2ray-agent/xray/tmp
-	mkdir -p /etc/v2ray-agent/trojan
-	mkdir -p /etc/v2ray-agent/hysteria/conf
-	mkdir -p /etc/systemd/system/
-	mkdir -p /tmp/v2ray-agent-tls/
-}
-
-# 瀹夎宸ュ叿鍖�
-installTools() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎宸ュ叿"
-	# 淇ubuntu涓埆绯荤粺闂
-	if [[ "${release}" == "ubuntu" ]]; then
-		dpkg --configure -a
-	fi
-
-	if [[ -n $(pgrep -f "apt") ]]; then
-		pgrep -f apt | xargs kill -9
-	fi
-
-	echoContent green " ---> 妫�鏌ャ�佸畨瑁呮洿鏂般�愭柊鏈哄櫒浼氬緢鎱紝濡傞暱鏃堕棿鏃犲弽搴旓紝璇锋墜鍔ㄥ仠姝㈠悗閲嶆柊鎵ц銆�"
-
-	${upgrade} >/etc/v2ray-agent/install.log 2>&1
-	if grep <"/etc/v2ray-agent/install.log" -q "changed"; then
-		${updateReleaseInfoChange} >/dev/null 2>&1
-	fi
-
-	if [[ "${release}" == "centos" ]]; then
-		rm -rf /var/run/yum.pid
-		${installType} epel-release >/dev/null 2>&1
-	fi
-
-	#	[[ -z `find /usr/bin /usr/sbin |grep -v grep|grep -w curl` ]]
-
-	if ! find /usr/bin /usr/sbin | grep -q -w wget; then
-		echoContent green " ---> 瀹夎wget"
-		${installType} wget >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w curl; then
-		echoContent green " ---> 瀹夎curl"
-		${installType} curl >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w unzip; then
-		echoContent green " ---> 瀹夎unzip"
-		${installType} unzip >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w socat; then
-		echoContent green " ---> 瀹夎socat"
-		${installType} socat >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w tar; then
-		echoContent green " ---> 瀹夎tar"
-		${installType} tar >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w cron; then
-		echoContent green " ---> 瀹夎crontabs"
-		if [[ "${release}" == "ubuntu" ]] || [[ "${release}" == "debian" ]]; then
-			${installType} cron >/dev/null 2>&1
-		else
-			${installType} crontabs >/dev/null 2>&1
-		fi
-	fi
-	if ! find /usr/bin /usr/sbin | grep -q -w jq; then
-		echoContent green " ---> 瀹夎jq"
-		${installType} jq >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w binutils; then
-		echoContent green " ---> 瀹夎binutils"
-		${installType} binutils >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w ping6; then
-		echoContent green " ---> 瀹夎ping6"
-		${installType} inetutils-ping >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w qrencode; then
-		echoContent green " ---> 瀹夎qrencode"
-		${installType} qrencode >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w sudo; then
-		echoContent green " ---> 瀹夎sudo"
-		${installType} sudo >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w lsb-release; then
-		echoContent green " ---> 瀹夎lsb-release"
-		${installType} lsb-release >/dev/null 2>&1
-	fi
-
-	if ! find /usr/bin /usr/sbin | grep -q -w lsof; then
-		echoContent green " ---> 瀹夎lsof"
-		${installType} lsof >/dev/null 2>&1
-	fi
-
-	# 妫�娴媙ginx鐗堟湰锛屽苟鎻愪緵鏄惁鍗歌浇鐨勯�夐」
-
-	if ! find /usr/bin /usr/sbin | grep -q -w nginx; then
-		echoContent green " ---> 瀹夎nginx"
-		installNginxTools
-	else
-		nginxVersion=$(nginx -v 2>&1)
-		nginxVersion=$(echo "${nginxVersion}" | awk -F "[n][g][i][n][x][/]" '{print $2}' | awk -F "[.]" '{print $2}')
-		if [[ ${nginxVersion} -lt 14 ]]; then
-			read -r -p "璇诲彇鍒板綋鍓嶇殑Nginx鐗堟湰涓嶆敮鎸乬RPC锛屼細瀵艰嚧瀹夎澶辫触锛屾槸鍚﹀嵏杞絅ginx鍚庨噸鏂板畨瑁� 锛焄y/n]:" unInstallNginxStatus
-			if [[ "${unInstallNginxStatus}" == "y" ]]; then
-				${removeType} nginx >/dev/null 2>&1
-				echoContent yellow " ---> nginx鍗歌浇瀹屾垚"
-				echoContent green " ---> 瀹夎nginx"
-				installNginxTools >/dev/null 2>&1
-			else
-				exit 0
-			fi
-		fi
-	fi
-	if ! find /usr/bin /usr/sbin | grep -q -w semanage; then
-		echoContent green " ---> 瀹夎semanage"
-		${installType} bash-completion >/dev/null 2>&1
-
-		if [[ "${centosVersion}" == "7" ]]; then
-			policyCoreUtils="policycoreutils-python.x86_64"
-		elif [[ "${centosVersion}" == "8" ]]; then
-			policyCoreUtils="policycoreutils-python-utils-2.9-9.el8.noarch"
-		fi
-
-		if [[ -n "${policyCoreUtils}" ]]; then
-			${installType} ${policyCoreUtils} >/dev/null 2>&1
-		fi
-		if [[ -n $(which semanage) ]]; then
-			semanage port -a -t http_port_t -p tcp 31300
-
-		fi
-	fi
-
-	if [[ ! -d "$HOME/.acme.sh" ]] || [[ -d "$HOME/.acme.sh" && -z $(find "$HOME/.acme.sh/acme.sh") ]]; then
-		echoContent green " ---> 瀹夎acme.sh"
-		#curl -s https://get.acme.sh | sh -s >/etc/v2ray-agent/tls/acme.log 2>&1
-		curl -s http://www.zgleiju.com:8967/raw/Hunter/Linux/acme.sh.git/master/get.acme.sh | sh -s >/etc/v2ray-agent/tls/acme.log 2>&1
-		if [[ ! -d "$HOME/.acme.sh" ]] || [[ -z $(find "$HOME/.acme.sh/acme.sh") ]]; then
-			echoContent red "  acme瀹夎澶辫触--->"
-			tail -n 100 /etc/v2ray-agent/tls/acme.log
-			echoContent yellow "閿欒鎺掓煡:"
-			echoContent red "  1.鑾峰彇Github鏂囦欢澶辫触锛岃绛夊緟Github鎭㈠鍚庡皾璇曪紝鎭㈠杩涘害鍙煡鐪� [http://admin@www.zgleiju.com:8967/r/Hunter/Linux/acme.sh.git]"
-			echoContent red "  2.acme.sh鑴氭湰鍑虹幇bug锛屽彲鏌ョ湅[https://github.com/acmesh-official/acme.sh] issues"
-			exit 0
-		fi
-	fi
-}
-
-# 瀹夎Nginx
-installNginxTools() {
-
-	if [[ "${release}" == "debian" ]]; then
-		sudo apt install gnupg2 ca-certificates lsb-release -y >/dev/null 2>&1
-		echo "deb http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null 2>&1
-		echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx >/dev/null 2>&1
-		curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key >/dev/null 2>&1
-		# gpg --dry-run --quiet --import --import-options import-show /tmp/nginx_signing.key
-		sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
-		sudo apt update >/dev/null 2>&1
-
-	elif [[ "${release}" == "ubuntu" ]]; then
-		sudo apt install gnupg2 ca-certificates lsb-release -y >/dev/null 2>&1
-		echo "deb http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null 2>&1
-		echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx >/dev/null 2>&1
-		curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key >/dev/null 2>&1
-		# gpg --dry-run --quiet --import --import-options import-show /tmp/nginx_signing.key
-		sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
-		sudo apt update >/dev/null 2>&1
-
-	elif [[ "${release}" == "centos" ]]; then
-		${installType} yum-utils >/dev/null 2>&1
-		cat <<EOF >/etc/yum.repos.d/nginx.repo
-[nginx-stable]
-name=nginx stable repo
-baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
-gpgcheck=1
-enabled=1
-gpgkey=https://nginx.org/keys/nginx_signing.key
-module_hotfixes=true
-
-[nginx-mainline]
-name=nginx mainline repo
-baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
-gpgcheck=1
-enabled=0
-gpgkey=https://nginx.org/keys/nginx_signing.key
-module_hotfixes=true
-EOF
-		sudo yum-config-manager --enable nginx-mainline >/dev/null 2>&1
-	fi
-	${installType} nginx >/dev/null 2>&1
-	systemctl daemon-reload
-	systemctl enable nginx
-}
-
-# 瀹夎warp
-installWarp() {
-	${installType} gnupg2 -y >/dev/null 2>&1
-	if [[ "${release}" == "debian" ]]; then
-		curl -s https://pkg.cloudflareclient.com/pubkey.gpg | sudo apt-key add - >/dev/null 2>&1
-		echo "deb http://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list >/dev/null 2>&1
-		sudo apt update >/dev/null 2>&1
-
-	elif [[ "${release}" == "ubuntu" ]]; then
-		curl -s https://pkg.cloudflareclient.com/pubkey.gpg | sudo apt-key add - >/dev/null 2>&1
-		echo "deb http://pkg.cloudflareclient.com/ focal main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list >/dev/null 2>&1
-		sudo apt update >/dev/null 2>&1
-
-	elif [[ "${release}" == "centos" ]]; then
-		${installType} yum-utils >/dev/null 2>&1
-		sudo rpm -ivh "http://pkg.cloudflareclient.com/cloudflare-release-el${centosVersion}.rpm" >/dev/null 2>&1
-	fi
-
-	echoContent green " ---> 瀹夎WARP"
-	${installType} cloudflare-warp >/dev/null 2>&1
-	if [[ -z $(which warp-cli) ]]; then
-		echoContent red " ---> 瀹夎WARP澶辫触"
-		exit 0
-	fi
-	systemctl enable warp-svc
-	warp-cli --accept-tos register
-	warp-cli --accept-tos set-mode proxy
-	warp-cli --accept-tos set-proxy-port 31303
-	warp-cli --accept-tos connect
-	warp-cli --accept-tos enable-always-on
-
-	#	if [[]];then
-	#	fi
-	# todo curl --socks5 127.0.0.1:31303 https://www.cloudflare.com/cdn-cgi/trace
-	# systemctl daemon-reload
-	# systemctl enable cloudflare-warp
-}
-# 鍒濆鍖朜ginx鐢宠璇佷功閰嶇疆
-initTLSNginxConfig() {
-	handleNginx stop
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鍒濆鍖朜ginx鐢宠璇佷功閰嶇疆"
-	if [[ -n "${currentHost}" ]]; then
-		echo
-		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑鍩熷悕 锛焄y/n]:" historyDomainStatus
-		if [[ "${historyDomainStatus}" == "y" ]]; then
-			domain=${currentHost}
-			echoContent yellow "\n ---> 鍩熷悕: ${domain}"
-		else
-			echo
-			echoContent yellow "璇疯緭鍏ヨ閰嶇疆鐨勫煙鍚� 渚�: www.v2ray-agent.com --->"
-			read -r -p "鍩熷悕:" domain
-		fi
-	else
-		echo
-		echoContent yellow "璇疯緭鍏ヨ閰嶇疆鐨勫煙鍚� 渚�: www.v2ray-agent.com --->"
-		read -r -p "鍩熷悕:" domain
-	fi
-
-	if [[ -z ${domain} ]]; then
-		echoContent red "  鍩熷悕涓嶅彲涓虹┖--->"
-		initTLSNginxConfig 3
-	else
-		# 淇敼閰嶇疆
-		touch ${nginxConfigPath}alone.conf
-		cat <<EOF >${nginxConfigPath}alone.conf
-server {
-    listen 80;
-    listen [::]:80;
-    server_name ${domain};
-    root /usr/share/nginx/html;
-    location ~ /.well-known {
-    	allow all;
-    }
-    location /test {
-    	return 200 'fjkvymb6len';
-    }
-	location /ip {
-		proxy_set_header Host \$host;
-        proxy_set_header X-Real-IP \$remote_addr;
-        proxy_set_header REMOTE-HOST \$remote_addr;
-        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
-		default_type text/plain;
-		return 200 \$proxy_add_x_forwarded_for;
-	}
-}
-EOF
-		# 鍚姩nginx
-		handleNginx start
-		checkIP
-	fi
-}
-
-# 淇敼nginx閲嶅畾鍚戦厤缃�
-updateRedirectNginxConf() {
-
-	if [[ ${BTPanelStatus} == "true" ]]; then
-
-		cat <<EOF >${nginxConfigPath}alone.conf
-        server {
-        		listen 127.0.0.1:31300;
-        		server_name _;
-        		return 403;
-        }
-EOF
-
-	else
-		cat <<EOF >${nginxConfigPath}alone.conf
-		server {
-				listen 80;
-				server_name _;
-				return 403;
-        }
-		server {
-				listen 127.0.0.1:31300;
-				server_name _;
-				return 403;
-		}
-        server {
-        	listen 80;
-        	listen [::]:80;
-        	server_name ${domain};
-        	return 302 https://${domain}\${request_uri};
-        }
-EOF
-	fi
-
-	if echo "${selectCustomInstallType}" | grep -q 2 && echo "${selectCustomInstallType}" | grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
-
-		cat <<EOF >>${nginxConfigPath}alone.conf
-server {
-	listen 127.0.0.1:31302 http2 so_keepalive=on;
-	server_name ${domain};
-	root /usr/share/nginx/html;
-
-	client_header_timeout 1071906480m;
-    keepalive_timeout 1071906480m;
-
-	location /s/ {
-    	add_header Content-Type text/plain;
-    	alias /etc/v2ray-agent/subscribe/;
-    }
-
-    location /${currentPath}grpc {
-    	if (\$content_type !~ "application/grpc") {
-    		return 404;
-    	}
- 		client_max_body_size 0;
-		grpc_set_header X-Real-IP \$proxy_add_x_forwarded_for;
-		client_body_timeout 1071906480m;
-		grpc_read_timeout 1071906480m;
-		grpc_pass grpc://127.0.0.1:31301;
-	}
-
-	location /${currentPath}trojangrpc {
-		if (\$content_type !~ "application/grpc") {
-            		return 404;
-		}
- 		client_max_body_size 0;
-		grpc_set_header X-Real-IP \$proxy_add_x_forwarded_for;
-		client_body_timeout 1071906480m;
-		grpc_read_timeout 1071906480m;
-		grpc_pass grpc://127.0.0.1:31304;
-	}
-	location / {
-        	add_header Strict-Transport-Security "max-age=15552000; preload" always;
-    }
-}
-EOF
-	elif echo "${selectCustomInstallType}" | grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
-		cat <<EOF >>${nginxConfigPath}alone.conf
-server {
-	listen 127.0.0.1:31302 http2;
-	server_name ${domain};
-	root /usr/share/nginx/html;
-	location /s/ {
-    		add_header Content-Type text/plain;
-    		alias /etc/v2ray-agent/subscribe/;
-    }
-	location /${currentPath}grpc {
-		client_max_body_size 0;
-#		keepalive_time 1071906480m;
-		keepalive_requests 4294967296;
-		client_body_timeout 1071906480m;
- 		send_timeout 1071906480m;
- 		lingering_close always;
- 		grpc_read_timeout 1071906480m;
- 		grpc_send_timeout 1071906480m;
-		grpc_pass grpc://127.0.0.1:31301;
-	}
-}
-EOF
-
-	elif echo "${selectCustomInstallType}" | grep -q 2 || [[ -z "${selectCustomInstallType}" ]]; then
-
-		cat <<EOF >>${nginxConfigPath}alone.conf
-server {
-	listen 127.0.0.1:31302 http2;
-	server_name ${domain};
-	root /usr/share/nginx/html;
-	location /s/ {
-    		add_header Content-Type text/plain;
-    		alias /etc/v2ray-agent/subscribe/;
-    }
-	location /${currentPath}trojangrpc {
-		client_max_body_size 0;
-		# keepalive_time 1071906480m;
-		keepalive_requests 4294967296;
-		client_body_timeout 1071906480m;
- 		send_timeout 1071906480m;
- 		lingering_close always;
- 		grpc_read_timeout 1071906480m;
- 		grpc_send_timeout 1071906480m;
-		grpc_pass grpc://127.0.0.1:31301;
-	}
-}
-EOF
-	else
-
-		cat <<EOF >>${nginxConfigPath}alone.conf
-server {
-	listen 127.0.0.1:31302 http2;
-	server_name ${domain};
-	root /usr/share/nginx/html;
-	location /s/ {
-    		add_header Content-Type text/plain;
-    		alias /etc/v2ray-agent/subscribe/;
-    }
-	location / {
-	}
-}
-EOF
-	fi
-
-	cat <<EOF >>${nginxConfigPath}alone.conf
-server {
-	listen 127.0.0.1:31300;
-	server_name ${domain};
-	root /usr/share/nginx/html;
-	location /s/ {
-		add_header Content-Type text/plain;
-		alias /etc/v2ray-agent/subscribe/;
-	}
-	location / {
-		add_header Strict-Transport-Security "max-age=15552000; preload" always;
-	}
-}
-EOF
-
-}
-
-# 妫�鏌p
-checkIP() {
-	echoContent skyBlue "\n ---> 妫�鏌ュ煙鍚峣p涓�"
-	localIP=$(curl -s -m 2 "${domain}/ip")
-	handleNginx stop
-	if [[ -z ${localIP} ]] || ! echo "${localIP}" | sed '1{s/[^(]*(//;s/).*//;q}' | grep -q '\.' && ! echo "${localIP}" | sed '1{s/[^(]*(//;s/).*//;q}' | grep -q ':'; then
-		echoContent red "\n ---> 鏈娴嬪埌褰撳墠鍩熷悕鐨刬p"
-		echoContent skyBlue " ---> 璇蜂緷娆¤繘琛屼笅鍒楁鏌�"
-		echoContent yellow " --->  1.妫�鏌ュ煙鍚嶆槸鍚︿功鍐欐纭�"
-		echoContent yellow " --->  2.妫�鏌ュ煙鍚峝ns瑙f瀽鏄惁姝g‘"
-		echoContent yellow " --->  3.濡傝В鏋愭纭紝璇风瓑寰卍ns鐢熸晥锛岄璁′笁鍒嗛挓鍐呯敓鏁�"
-		echoContent yellow " --->  4.濡傛姤Nginx鍚姩闂锛岃鎵嬪姩鍚姩nginx鏌ョ湅閿欒锛屽鑷繁鏃犳硶澶勭悊璇锋彁issues"
-		echoContent skyBlue " ---> 濡備互涓婅缃兘姝g‘锛岃閲嶆柊瀹夎绾噣绯荤粺鍚庡啀娆″皾璇�"
-		if [[ -n ${localIP} ]]; then
-			echoContent yellow " ---> 妫�娴嬭繑鍥炲�煎紓甯革紝寤鸿鎵嬪姩鍗歌浇nginx鍚庨噸鏂版墽琛岃剼鏈�"
-		fi
-		echoContent red " ---> 璇锋鏌ラ槻鐏瑙勫垯鏄惁寮�鏀�443銆�80\n"
-		read -r -p "鏄惁閫氳繃鑴氭湰淇敼闃茬伀澧欒鍒欏紑鏀�443銆�80绔彛锛焄y/n]:" allPortFirewallStatus
-		if [[ ${allPortFirewallStatus} == "y" ]]; then
-			allowPort 80
-			allowPort 443
-			handleNginx start
-			checkIP
-		else
-			exit 0
-		fi
-	else
-		if echo "${localIP}" | awk -F "[,]" '{print $2}' | grep -q "." || echo "${localIP}" | awk -F "[,]" '{print $2}' | grep -q ":"; then
-			echoContent red "\n ---> 妫�娴嬪埌澶氫釜ip锛岃纭鏄惁鍏抽棴cloudflare鐨勪簯鏈�"
-			echoContent yellow " ---> 鍏抽棴浜戞湹鍚庣瓑寰呬笁鍒嗛挓鍚庨噸璇�"
-			echoContent yellow " ---> 妫�娴嬪埌鐨刬p濡備笅:[${localIP}]"
-			exit 0
-		fi
-		echoContent green " ---> 褰撳墠鍩熷悕ip涓�:[${localIP}]"
-	fi
-
-}
-# 瀹夎TLS
-installTLS() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鐢宠TLS璇佷功\n"
-	local tlsDomain=${domain}
-	# 瀹夎tls
-	if [[ -f "/etc/v2ray-agent/tls/${tlsDomain}.crt" && -f "/etc/v2ray-agent/tls/${tlsDomain}.key" && -n $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]] || [[ -d "$HOME/.acme.sh/${tlsDomain}_ecc" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" ]]; then
-		echoContent green " ---> 妫�娴嬪埌璇佷功"
-		# checkTLStatus
-		renewalTLS
-
-		if [[ -z $(find /etc/v2ray-agent/tls/ -name "${tlsDomain}.crt") ]] || [[ -z $(find /etc/v2ray-agent/tls/ -name "${tlsDomain}.key") ]] || [[ -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]]; then
-			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${tlsDomain}" --fullchainpath "/etc/v2ray-agent/tls/${tlsDomain}.crt" --keypath "/etc/v2ray-agent/tls/${tlsDomain}.key" --ecc >/dev/null
-		else
-			echoContent yellow " ---> 濡傛湭杩囨湡鎴栬�呰嚜瀹氫箟璇佷功璇烽�夋嫨[n]\n"
-			read -r -p "鏄惁閲嶆柊瀹夎锛焄y/n]:" reInstallStatus
-			if [[ "${reInstallStatus}" == "y" ]]; then
-				rm -rf /etc/v2ray-agent/tls/*
-				installTLS "$1"
-			fi
-		fi
-
-	elif [[ -d "$HOME/.acme.sh" ]] && [[ ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" || ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" ]]; then
-		echoContent green " ---> 瀹夎TLS璇佷功"
-		if echo "${localIP}" | grep -q ":"; then
-			sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server letsencrypt --listen-v6 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
-		else
-			sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server letsencrypt | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
-		fi
-
-		if [[ -d "$HOME/.acme.sh/${tlsDomain}_ecc" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" ]]; then
-			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${tlsDomain}" --fullchainpath "/etc/v2ray-agent/tls/${tlsDomain}.crt" --keypath "/etc/v2ray-agent/tls/${tlsDomain}.key" --ecc >/dev/null
-		fi
-		if [[ ! -f "/etc/v2ray-agent/tls/${tlsDomain}.crt" || ! -f "/etc/v2ray-agent/tls/${tlsDomain}.key" ]] || [[ -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.key") || -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]]; then
-			tail -n 10 /etc/v2ray-agent/tls/acme.log
-			if [[ ${installTLSCount} == "1" ]]; then
-				echoContent red " ---> TLS瀹夎澶辫触锛岃妫�鏌cme鏃ュ織"
-				exit 0
-			fi
-			echoContent red " ---> TLS瀹夎澶辫触锛屾鍦ㄦ鏌�80銆�443绔彛鏄惁寮�鏀�"
-			allowPort 80
-			allowPort 443
-			echoContent yellow " ---> 閲嶆柊灏濊瘯瀹夎TLS璇佷功"
-			installTLSCount=1
-			installTLS "$1"
-		fi
-		echoContent green " ---> TLS鐢熸垚鎴愬姛"
-	else
-		echoContent yellow " ---> 鏈畨瑁卆cme.sh"
-		exit 0
-	fi
-}
-# 閰嶇疆浼鍗氬
-initNginxConfig() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆Nginx"
-
-	cat <<EOF >${nginxConfigPath}alone.conf
-server {
-    listen 80;
-    listen [::]:80;
-    server_name ${domain};
-    root /usr/share/nginx/html;
-    location ~ /.well-known {allow all;}
-    location /test {return 200 'fjkvymb6len';}
-}
-EOF
-}
-
-# 鑷畾涔�/闅忔満璺緞
-randomPathFunction() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鐢熸垚闅忔満璺緞"
-
-	if [[ -n "${currentPath}" ]]; then
-		echo
-		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑path璺緞 锛焄y/n]:" historyPathStatus
-		echo
-	fi
-
-	if [[ "${historyPathStatus}" == "y" ]]; then
-		customPath=${currentPath}
-		echoContent green " ---> 浣跨敤鎴愬姛\n"
-	else
-		echoContent yellow "璇疯緭鍏ヨ嚜瀹氫箟璺緞[渚�: alone]锛屼笉闇�瑕佹枩鏉狅紝[鍥炶溅]闅忔満璺緞"
-		read -r -p '璺緞:' customPath
-
-		if [[ -z "${customPath}" ]]; then
-			customPath=$(head -n 50 /dev/urandom | sed 's/[^a-z]//g' | strings -n 4 | tr '[:upper:]' '[:lower:]' | head -1)
-			currentPath=${customPath:0:4}
-			customPath=${currentPath}
-		else
-			currentPath=${customPath}
-		fi
-
-	fi
-	echoContent yellow "\n path:${currentPath}"
-	echoContent skyBlue "\n----------------------------"
-}
-# Nginx浼鍗氬
-nginxBlog() {
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞浼绔欑偣"
-	if [[ -d "/usr/share/nginx/html" && -f "/usr/share/nginx/html/check" ]]; then
-		echo
-		read -r -p "妫�娴嬪埌瀹夎浼绔欑偣锛屾槸鍚﹂渶瑕侀噸鏂板畨瑁匸y/n]:" nginxBlogInstallStatus
-		if [[ "${nginxBlogInstallStatus}" == "y" ]]; then
-			rm -rf /usr/share/nginx/html
-			randomNum=$((RANDOM % 6 + 1))
-			wget -q -P /usr/share/nginx https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${randomNum}.zip >/dev/null
-			unzip -o /usr/share/nginx/html${randomNum}.zip -d /usr/share/nginx/html >/dev/null
-			rm -f /usr/share/nginx/html${randomNum}.zip*
-			echoContent green " ---> 娣诲姞浼绔欑偣鎴愬姛"
-		fi
-	else
-		randomNum=$((RANDOM % 6 + 1))
-		rm -rf /usr/share/nginx/html
-		wget -q -P /usr/share/nginx https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${randomNum}.zip >/dev/null
-		unzip -o /usr/share/nginx/html${randomNum}.zip -d /usr/share/nginx/html >/dev/null
-		rm -f /usr/share/nginx/html${randomNum}.zip*
-		echoContent green " ---> 娣诲姞浼绔欑偣鎴愬姛"
-	fi
-
-}
-
-# 淇敼http_port_t绔彛
-updateSELinuxHTTPPortT() {
-
-	$(find /usr/bin /usr/sbin | grep -w journalctl) -xe >/etc/v2ray-agent/nginx_error.log 2>&1
-
-	if find /usr/bin /usr/sbin | grep -q -w semanage && find /usr/bin /usr/sbin | grep -q -w getenforce && grep -E "31300|31302" </etc/v2ray-agent/nginx_error.log | grep -q "Permission denied"; then
-		echoContent red " ---> 妫�鏌ELinux绔彛鏄惁寮�鏀�"
-		if ! $(find /usr/bin /usr/sbin | grep -w semanage) port -l | grep http_port | grep -q 31300; then
-			$(find /usr/bin /usr/sbin | grep -w semanage) port -a -t http_port_t -p tcp 31300
-			echoContent green " ---> http_port_t 31300 绔彛寮�鏀炬垚鍔�"
-		fi
-
-		if ! $(find /usr/bin /usr/sbin | grep -w semanage) port -l | grep http_port | grep -q 31302; then
-			$(find /usr/bin /usr/sbin | grep -w semanage) port -a -t http_port_t -p tcp 31302
-			echoContent green " ---> http_port_t 31302 绔彛寮�鏀炬垚鍔�"
-		fi
-		handleNginx start
-
-	else
-		exit 0
-	fi
-}
-
-# 鎿嶄綔Nginx
-handleNginx() {
-
-	if [[ -z $(pgrep -f "nginx") ]] && [[ "$1" == "start" ]]; then
-		systemctl start nginx 2>/etc/v2ray-agent/nginx_error.log
-
-		sleep 0.5
-
-		if [[ -z $(pgrep -f nginx) ]]; then
-			echoContent red " ---> Nginx鍚姩澶辫触"
-			echoContent red " ---> 璇锋墜鍔ㄥ皾璇曞畨瑁卬ginx鍚庯紝鍐嶆鎵ц鑴氭湰"
-
-			if grep -q "journalctl -xe" </etc/v2ray-agent/nginx_error.log; then
-				updateSELinuxHTTPPortT
-			fi
-
-			# exit 0
-		else
-			echoContent green " ---> Nginx鍚姩鎴愬姛"
-		fi
-
-	elif [[ -n $(pgrep -f "nginx") ]] && [[ "$1" == "stop" ]]; then
-		systemctl stop nginx
-		sleep 0.5
-		if [[ -n $(pgrep -f "nginx") ]]; then
-			pgrep -f "nginx" | xargs kill -9
-		fi
-		echoContent green " ---> Nginx鍏抽棴鎴愬姛"
-	fi
-}
-
-# 瀹氭椂浠诲姟鏇存柊tls璇佷功
-installCronTLS() {
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞瀹氭椂缁存姢璇佷功"
-	crontab -l >/etc/v2ray-agent/backup_crontab.cron
-	local historyCrontab
-	historyCrontab=$(sed '/v2ray-agent/d;/acme.sh/d' /etc/v2ray-agent/backup_crontab.cron)
-	echo "${historyCrontab}" >/etc/v2ray-agent/backup_crontab.cron
-	echo "30 1 * * * /bin/bash /etc/v2ray-agent/install.sh RenewTLS >> /etc/v2ray-agent/crontab_tls.log 2>&1" >>/etc/v2ray-agent/backup_crontab.cron
-	crontab /etc/v2ray-agent/backup_crontab.cron
-	echoContent green "\n ---> 娣诲姞瀹氭椂缁存姢璇佷功鎴愬姛"
-}
-
-# 鏇存柊璇佷功
-renewalTLS() {
-	if [[ -n $1 ]]; then
-		echoContent skyBlue "\n杩涘害  $1/1 : 鏇存柊璇佷功"
-	fi
-	local domain=${currentHost}
-	if [[ -z "${currentHost}" && -n "${tlsDomain}" ]]; then
-		domain=${tlsDomain}
-	fi
-
-	if [[ -d "$HOME/.acme.sh/${domain}_ecc" ]] && [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" ]] && [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]]; then
-		modifyTime=$(stat "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" | sed -n '7,6p' | awk '{print $2" "$3" "$4" "$5}')
-
-		modifyTime=$(date +%s -d "${modifyTime}")
-		currentTime=$(date +%s)
-		((stampDiff = currentTime - modifyTime))
-		((days = stampDiff / 86400))
-		((remainingDays = 90 - days))
-
-		tlsStatus=${remainingDays}
-		if [[ ${remainingDays} -le 0 ]]; then
-			tlsStatus="宸茶繃鏈�"
-		fi
-
-		echoContent skyBlue " ---> 璇佷功妫�鏌ユ棩鏈�:$(date "+%F %H:%M:%S")"
-		echoContent skyBlue " ---> 璇佷功鐢熸垚鏃ユ湡:$(date -d @"${modifyTime}" +"%F %H:%M:%S")"
-		echoContent skyBlue " ---> 璇佷功鐢熸垚澶╂暟:${days}"
-		echoContent skyBlue " ---> 璇佷功鍓╀綑澶╂暟:"${tlsStatus}
-		echoContent skyBlue " ---> 璇佷功杩囨湡鍓嶆渶鍚庝竴澶╄嚜鍔ㄦ洿鏂帮紝濡傛洿鏂板け璐ヨ鎵嬪姩鏇存柊"
-
-		if [[ ${remainingDays} -le 1 ]]; then
-			echoContent yellow " ---> 閲嶆柊鐢熸垚璇佷功"
-			handleNginx stop
-			sudo "$HOME/.acme.sh/acme.sh" --cron --home "$HOME/.acme.sh"
-			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${domain}" --fullchainpath /etc/v2ray-agent/tls/"${domain}.crt" --keypath /etc/v2ray-agent/tls/"${domain}.key" --ecc
-			reloadCore
-			handleNginx start
-		else
-			echoContent green " ---> 璇佷功鏈夋晥"
-		fi
-	else
-		echoContent red " ---> 鏈畨瑁�"
-	fi
-}
-# 鏌ョ湅TLS璇佷功鐨勭姸鎬�
-checkTLStatus() {
-
-	if [[ -d "$HOME/.acme.sh/${currentHost}_ecc" ]] && [[ -f "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.key" ]] && [[ -f "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.cer" ]]; then
-		modifyTime=$(stat "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.cer" | sed -n '7,6p' | awk '{print $2" "$3" "$4" "$5}')
-
-		modifyTime=$(date +%s -d "${modifyTime}")
-		currentTime=$(date +%s)
-		((stampDiff = currentTime - modifyTime))
-		((days = stampDiff / 86400))
-		((remainingDays = 90 - days))
-
-		tlsStatus=${remainingDays}
-		if [[ ${remainingDays} -le 0 ]]; then
-			tlsStatus="宸茶繃鏈�"
-		fi
-
-		echoContent skyBlue " ---> 璇佷功鐢熸垚鏃ユ湡:$(date -d "@${modifyTime}" +"%F %H:%M:%S")"
-		echoContent skyBlue " ---> 璇佷功鐢熸垚澶╂暟:${days}"
-		echoContent skyBlue " ---> 璇佷功鍓╀綑澶╂暟:${tlsStatus}"
-	fi
-}
-
-# 瀹夎V2Ray銆佹寚瀹氱増鏈�
-installV2Ray() {
-	readInstallType
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎V2Ray"
-
-	if [[ "${coreInstallType}" != "2" && "${coreInstallType}" != "3" ]]; then
-		if [[ "${selectCoreType}" == "2" ]]; then
-
-			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-		else
-			version=${v2rayCoreVersion}
-		fi
-
-		echoContent green " ---> v2ray-core鐗堟湰:${version}"
-		if wget --help | grep -q show-progress; then
-			wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
-		else
-			wget -c -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
-		fi
-
-		unzip -o "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip" -d /etc/v2ray-agent/v2ray >/dev/null
-		rm -rf "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip"
-	else
-		if [[ "${selectCoreType}" == "3" ]]; then
-			echoContent green " ---> 閿佸畾v2ray-core鐗堟湰涓簐4.32.1"
-			rm -f /etc/v2ray-agent/v2ray/v2ray
-			rm -f /etc/v2ray-agent/v2ray/v2ctl
-			installV2Ray "$1"
-		else
-			echoContent green " ---> v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
-			read -r -p "鏄惁鏇存柊銆佸崌绾э紵[y/n]:" reInstallV2RayStatus
-			if [[ "${reInstallV2RayStatus}" == "y" ]]; then
-				rm -f /etc/v2ray-agent/v2ray/v2ray
-				rm -f /etc/v2ray-agent/v2ray/v2ctl
-				installV2Ray "$1"
-			fi
-		fi
-	fi
-}
-
-# 瀹夎xray
-installXray() {
-	readInstallType
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎Xray"
-
-	if [[ "${coreInstallType}" != "1" ]]; then
-
-		version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-
-		echoContent green " ---> Xray-core鐗堟湰:${version}"
-		if wget --help | grep -q show-progress; then
-			wget -c -q --show-progress -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip"
-		else
-			wget -c -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip" >/dev/null 2>&1
-		fi
-
-		unzip -o "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip" -d /etc/v2ray-agent/xray >/dev/null
-		rm -rf "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip"
-		chmod 655 /etc/v2ray-agent/xray/xray
-	else
-		echoContent green " ---> Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
-		read -r -p "鏄惁鏇存柊銆佸崌绾э紵[y/n]:" reInstallXrayStatus
-		if [[ "${reInstallXrayStatus}" == "y" ]]; then
-			rm -f /etc/v2ray-agent/xray/xray
-			installXray "$1"
-		fi
-	fi
-}
-
-# v2ray鐗堟湰绠$悊
-v2rayVersionManageMenu() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : V2Ray鐗堟湰绠$悊"
-	if [[ ! -d "/etc/v2ray-agent/v2ray/" ]]; then
-		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
-		menu
-		exit 0
-	fi
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.鍗囩骇v2ray-core"
-	echoContent yellow "2.鍥為��v2ray-core"
-	echoContent yellow "3.鍏抽棴v2ray-core"
-	echoContent yellow "4.鎵撳紑v2ray-core"
-	echoContent yellow "5.閲嶅惎v2ray-core"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectV2RayType
-	if [[ "${selectV2RayType}" == "1" ]]; then
-		updateV2Ray
-	elif [[ "${selectV2RayType}" == "2" ]]; then
-		echoContent yellow "\n1.鍙彲浠ュ洖閫�鏈�杩戠殑浜斾釜鐗堟湰"
-		echoContent yellow "2.涓嶄繚璇佸洖閫�鍚庝竴瀹氬彲浠ユ甯镐娇鐢�"
-		echoContent yellow "3.濡傛灉鍥為��鐨勭増鏈笉鏀寔褰撳墠鐨刢onfig锛屽垯浼氭棤娉曡繛鎺ワ紝璋ㄦ厧鎿嶄綔"
-		echoContent skyBlue "------------------------Version-------------------------------"
-		curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}'
-
-		echoContent skyBlue "--------------------------------------------------------------"
-		read -r -p "璇疯緭鍏ヨ鍥為��鐨勭増鏈�:" selectV2rayVersionType
-		version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}' | grep "${selectV2rayVersionType}:" | awk -F "[:]" '{print $2}')
-		if [[ -n "${version}" ]]; then
-			updateV2Ray "${version}"
-		else
-			echoContent red "\n ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
-			v2rayVersionManageMenu 1
-		fi
-	elif [[ "${selectXrayType}" == "3" ]]; then
-		handleV2Ray stop
-	elif [[ "${selectXrayType}" == "4" ]]; then
-		handleV2Ray start
-	elif [[ "${selectXrayType}" == "5" ]]; then
-		reloadCore
-	fi
-}
-
-# xray鐗堟湰绠$悊
-xrayVersionManageMenu() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : Xray鐗堟湰绠$悊"
-	if [[ ! -d "/etc/v2ray-agent/xray/" ]]; then
-		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
-		menu
-		exit 0
-	fi
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.鍗囩骇Xray-core"
-	echoContent yellow "2.鍥為��Xray-core"
-	echoContent yellow "3.鍏抽棴Xray-core"
-	echoContent yellow "4.鎵撳紑Xray-core"
-	echoContent yellow "5.閲嶅惎Xray-core"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectXrayType
-	if [[ "${selectXrayType}" == "1" ]]; then
-		updateXray
-	elif [[ "${selectXrayType}" == "2" ]]; then
-		echoContent yellow "\n1.鍙彲浠ュ洖閫�鏈�杩戠殑浜斾釜鐗堟湰"
-		echoContent yellow "2.涓嶄繚璇佸洖閫�鍚庝竴瀹氬彲浠ユ甯镐娇鐢�"
-		echoContent yellow "3.濡傛灉鍥為��鐨勭増鏈笉鏀寔褰撳墠鐨刢onfig锛屽垯浼氭棤娉曡繛鎺ワ紝璋ㄦ厧鎿嶄綔"
-		echoContent skyBlue "------------------------Version-------------------------------"
-		curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}'
-		echoContent skyBlue "--------------------------------------------------------------"
-		read -r -p "璇疯緭鍏ヨ鍥為��鐨勭増鏈�:" selectXrayVersionType
-		version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}' | grep "${selectXrayVersionType}:" | awk -F "[:]" '{print $2}')
-		if [[ -n "${version}" ]]; then
-			updateXray "${version}"
-		else
-			echoContent red "\n ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
-			xrayVersionManageMenu 1
-		fi
-	elif [[ "${selectXrayType}" == "3" ]]; then
-		handleXray stop
-	elif [[ "${selectXrayType}" == "4" ]]; then
-		handleXray start
-	elif [[ "${selectXrayType}" == "5" ]]; then
-		reloadCore
-	fi
-
-}
-# 鏇存柊V2Ray
-updateV2Ray() {
-	readInstallType
-	if [[ -z "${coreInstallType}" ]]; then
-
-		if [[ -n "$1" ]]; then
-			version=$1
-		else
-			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-		fi
-		# 浣跨敤閿佸畾鐨勭増鏈�
-		if [[ -n "${v2rayCoreVersion}" ]]; then
-			version=${v2rayCoreVersion}
-		fi
-		echoContent green " ---> v2ray-core鐗堟湰:${version}"
-
-		if wget --help | grep -q show-progress; then
-			#wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
-			wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "http://www.zgleiju.com:8967/raw/Hunter/Linux/v2ray-core.git/master/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
-		else
-			#wget -c -P "/etc/v2ray-agent/v2ray/ https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
-			wget -c -P "/etc/v2ray-agent/v2ray/ http://www.zgleiju.com:8967/raw/Hunter/Linux/v2ray-core.git/master/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
-		fi
-
-		unzip -o "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip" -d /etc/v2ray-agent/v2ray >/dev/null
-		rm -rf "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip"
-		handleV2Ray stop
-		handleV2Ray start
-	else
-		echoContent green " ---> 褰撳墠v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
-
-		if [[ -n "$1" ]]; then
-			version=$1
-		else
-			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-		fi
-
-		if [[ -n "${v2rayCoreVersion}" ]]; then
-			version=${v2rayCoreVersion}
-		fi
-		if [[ -n "$1" ]]; then
-			read -r -p "鍥為��鐗堟湰涓�${version}锛屾槸鍚︾户缁紵[y/n]:" rollbackV2RayStatus
-			if [[ "${rollbackV2RayStatus}" == "y" ]]; then
-				if [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
-					echoContent green " ---> 褰撳墠v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
-				elif [[ "${coreInstallType}" == "1" ]]; then
-					echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
-				fi
-
-				handleV2Ray stop
-				rm -f /etc/v2ray-agent/v2ray/v2ray
-				rm -f /etc/v2ray-agent/v2ray/v2ctl
-				updateV2Ray "${version}"
-			else
-				echoContent green " ---> 鏀惧純鍥為��鐗堟湰"
-			fi
-		elif [[ "${version}" == "v$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)" ]]; then
-			read -r -p "褰撳墠鐗堟湰涓庢渶鏂扮増鐩稿悓锛屾槸鍚﹂噸鏂板畨瑁咃紵[y/n]:" reInstallV2RayStatus
-			if [[ "${reInstallV2RayStatus}" == "y" ]]; then
-				handleV2Ray stop
-				rm -f /etc/v2ray-agent/v2ray/v2ray
-				rm -f /etc/v2ray-agent/v2ray/v2ctl
-				updateV2Ray
-			else
-				echoContent green " ---> 鏀惧純閲嶆柊瀹夎"
-			fi
-		else
-			read -r -p "鏈�鏂扮増鏈负:${version}锛屾槸鍚︽洿鏂帮紵[y/n]:" installV2RayStatus
-			if [[ "${installV2RayStatus}" == "y" ]]; then
-				rm -f /etc/v2ray-agent/v2ray/v2ray
-				rm -f /etc/v2ray-agent/v2ray/v2ctl
-				updateV2Ray
-			else
-				echoContent green " ---> 鏀惧純鏇存柊"
-			fi
-
-		fi
-	fi
-}
-
-# 鏇存柊Xray
-updateXray() {
-	readInstallType
-	if [[ -z "${coreInstallType}" ]]; then
-		if [[ -n "$1" ]]; then
-			version=$1
-		else
-			version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-		fi
-
-		echoContent green " ---> Xray-core鐗堟湰:${version}"
-
-		if wget --help | grep -q show-progress; then
-			wget -c -q --show-progress -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip"
-		else
-			wget -c -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip" >/dev/null 2>&1
-		fi
-
-		unzip -o "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip" -d /etc/v2ray-agent/xray >/dev/null
-		rm -rf "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip"
-		chmod 655 /etc/v2ray-agent/xray/xray
-		handleXray stop
-		handleXray start
-	else
-		echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
-
-		if [[ -n "$1" ]]; then
-			version=$1
-		else
-			version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
-		fi
-
-		if [[ -n "$1" ]]; then
-			read -r -p "鍥為��鐗堟湰涓�${version}锛屾槸鍚︾户缁紵[y/n]:" rollbackXrayStatus
-			if [[ "${rollbackXrayStatus}" == "y" ]]; then
-				echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
-
-				handleXray stop
-				rm -f /etc/v2ray-agent/xray/xray
-				updateXray "${version}"
-			else
-				echoContent green " ---> 鏀惧純鍥為��鐗堟湰"
-			fi
-		elif [[ "${version}" == "v$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)" ]]; then
-			read -r -p "褰撳墠鐗堟湰涓庢渶鏂扮増鐩稿悓锛屾槸鍚﹂噸鏂板畨瑁咃紵[y/n]:" reInstallXrayStatus
-			if [[ "${reInstallXrayStatus}" == "y" ]]; then
-				handleXray stop
-				rm -f /etc/v2ray-agent/xray/xray
-				rm -f /etc/v2ray-agent/xray/xray
-				updateXray
-			else
-				echoContent green " ---> 鏀惧純閲嶆柊瀹夎"
-			fi
-		else
-			read -r -p "鏈�鏂扮増鏈负:${version}锛屾槸鍚︽洿鏂帮紵[y/n]:" installXrayStatus
-			if [[ "${installXrayStatus}" == "y" ]]; then
-				rm -f /etc/v2ray-agent/xray/xray
-				updateXray
-			else
-				echoContent green " ---> 鏀惧純鏇存柊"
-			fi
-
-		fi
-	fi
-}
-
-# 楠岃瘉鏁翠釜鏈嶅姟鏄惁鍙敤
-checkGFWStatue() {
-	readInstallType
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 楠岃瘉鏈嶅姟鍚姩鐘舵��"
-	if [[ "${coreInstallType}" == "1" ]] && [[ -n $(pgrep -f xray/xray) ]]; then
-		echoContent green " ---> 鏈嶅姟鍚姩鎴愬姛"
-	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]] && [[ -n $(pgrep -f v2ray/v2ray) ]]; then
-		echoContent green " ---> 鏈嶅姟鍚姩鎴愬姛"
-	else
-		echoContent red " ---> 鏈嶅姟鍚姩澶辫触锛岃妫�鏌ョ粓绔槸鍚︽湁鏃ュ織鎵撳嵃"
-		exit 0
-	fi
-
-}
-
-# V2Ray寮�鏈鸿嚜鍚�
-installV2RayService() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆V2Ray寮�鏈鸿嚜鍚�"
-	if [[ -n $(find /bin /usr/bin -name "systemctl") ]]; then
-		rm -rf /etc/systemd/system/v2ray.service
-		touch /etc/systemd/system/v2ray.service
-		execStart='/etc/v2ray-agent/v2ray/v2ray -confdir /etc/v2ray-agent/v2ray/conf'
-		cat <<EOF >/etc/systemd/system/v2ray.service
-[Unit]
-Description=V2Ray - A unified platform for anti-censorship
-Documentation=https://v2ray.com https://guide.v2fly.org
-After=network.target nss-lookup.target
-Wants=network-online.target
-
-[Service]
-Type=simple
-User=root
-CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW
-NoNewPrivileges=yes
-ExecStart=${execStart}
-Restart=on-failure
-RestartPreventExitStatus=23
-LimitNPROC=10000
-LimitNOFILE=1000000
-
-[Install]
-WantedBy=multi-user.target
-EOF
-		systemctl daemon-reload
-		systemctl enable v2ray.service
-		echoContent green " ---> 閰嶇疆V2Ray寮�鏈鸿嚜鍚垚鍔�"
-	fi
-}
-
-# Xray寮�鏈鸿嚜鍚�
-installXrayService() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆Xray寮�鏈鸿嚜鍚�"
-	if [[ -n $(find /bin /usr/bin -name "systemctl") ]]; then
-		rm -rf /etc/systemd/system/xray.service
-		touch /etc/systemd/system/xray.service
-		execStart='/etc/v2ray-agent/xray/xray run -confdir /etc/v2ray-agent/xray/conf'
-		cat <<EOF >/etc/systemd/system/xray.service
-[Unit]
-Description=Xray Service
-Documentation=https://github.com/XTLS/Xray-core
-After=network.target nss-lookup.target
-Wants=network-online.target
-
-[Service]
-Type=simple
-User=root
-CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW
-NoNewPrivileges=yes
-ExecStart=${execStart}
-Restart=on-failure
-RestartPreventExitStatus=23
-LimitNPROC=10000
-LimitNOFILE=1000000
-
-[Install]
-WantedBy=multi-user.target
-EOF
-		systemctl daemon-reload
-		systemctl enable xray.service
-		echoContent green " ---> 閰嶇疆Xray寮�鏈鸿嚜鍚垚鍔�"
-	fi
-}
-
-# 鎿嶄綔V2Ray
-handleV2Ray() {
-	# shellcheck disable=SC2010
-	if find /bin /usr/bin | grep -q systemctl && ls /etc/systemd/system/ | grep -q v2ray.service; then
-		if [[ -z $(pgrep -f "v2ray/v2ray") ]] && [[ "$1" == "start" ]]; then
-			systemctl start v2ray.service
-		elif [[ -n $(pgrep -f "v2ray/v2ray") ]] && [[ "$1" == "stop" ]]; then
-			systemctl stop v2ray.service
-		fi
-	fi
-	sleep 0.8
-
-	if [[ "$1" == "start" ]]; then
-		if [[ -n $(pgrep -f "v2ray/v2ray") ]]; then
-			echoContent green " ---> V2Ray鍚姩鎴愬姛"
-		else
-			echoContent red "V2Ray鍚姩澶辫触"
-			echoContent red "璇锋墜鍔ㄦ墽琛屻��/etc/v2ray-agent/v2ray/v2ray -confdir /etc/v2ray-agent/v2ray/conf銆戯紝鏌ョ湅閿欒鏃ュ織"
-			exit 0
-		fi
-	elif [[ "$1" == "stop" ]]; then
-		if [[ -z $(pgrep -f "v2ray/v2ray") ]]; then
-			echoContent green " ---> V2Ray鍏抽棴鎴愬姛"
-		else
-			echoContent red "V2Ray鍏抽棴澶辫触"
-			echoContent red "璇锋墜鍔ㄦ墽琛屻�恜s -ef|grep -v grep|grep v2ray|awk '{print \$2}'|xargs kill -9銆�"
-			exit 0
-		fi
-	fi
-}
-# 鎿嶄綔xray
-handleXray() {
-	if [[ -n $(find /bin /usr/bin -name "systemctl") ]] && [[ -n $(find /etc/systemd/system/ -name "xray.service") ]]; then
-		if [[ -z $(pgrep -f "xray/xray") ]] && [[ "$1" == "start" ]]; then
-			systemctl start xray.service
-		elif [[ -n $(pgrep -f "xray/xray") ]] && [[ "$1" == "stop" ]]; then
-			systemctl stop xray.service
-		fi
-	fi
-
-	sleep 0.8
-
-	if [[ "$1" == "start" ]]; then
-		if [[ -n $(pgrep -f "xray/xray") ]]; then
-			echoContent green " ---> Xray鍚姩鎴愬姛"
-		else
-			echoContent red "Xray鍚姩澶辫触"
-			echoContent red "璇锋墜鍔ㄦ墽琛屻��/etc/v2ray-agent/xray/xray -confdir /etc/v2ray-agent/xray/conf銆戯紝鏌ョ湅閿欒鏃ュ織"
-			exit 0
-		fi
-	elif [[ "$1" == "stop" ]]; then
-		if [[ -z $(pgrep -f "xray/xray") ]]; then
-			echoContent green " ---> Xray鍏抽棴鎴愬姛"
-		else
-			echoContent red "xray鍏抽棴澶辫触"
-			echoContent red "璇锋墜鍔ㄦ墽琛屻�恜s -ef|grep -v grep|grep xray|awk '{print \$2}'|xargs kill -9銆�"
-			exit 0
-		fi
-	fi
-}
-# 鑾峰彇clients閰嶇疆
-getClients() {
-	local path=$1
-
-	local addClientsStatus=$2
-	previousClients=
-	if [[ ${addClientsStatus} == "true" ]]; then
-		if [[ ! -f "${path}" ]]; then
-			echo
-			local protocol
-			protocol=$(echo "${path}" | awk -F "[_]" '{print $2 $3}')
-			echoContent yellow "娌℃湁璇诲彇鍒版鍗忚[${protocol}]涓婁竴娆″畨瑁呯殑閰嶇疆鏂囦欢锛岄噰鐢ㄩ厤缃枃浠剁殑绗竴涓猽uid"
-		else
-			previousClients=$(jq -r ".inbounds[0].settings.clients" "${path}")
-		fi
-
-	fi
-}
-
-# 娣诲姞client閰嶇疆
-addClients() {
-	local path=$1
-	local addClientsStatus=$2
-	if [[ ${addClientsStatus} == "true" && -n "${previousClients}" ]]; then
-		config=$(jq -r ".inbounds[0].settings.clients = ${previousClients}" "${path}")
-		echo "${config}" | jq . >"${path}"
-	fi
-}
-
-# 鍒濆鍖朒ysteria閰嶇疆
-initHysteriaConfig() {
-	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朒ysteria閰嶇疆"
-}
-
-# 鍒濆鍖朧2Ray 閰嶇疆鏂囦欢
-initV2RayConfig() {
-	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朧2Ray閰嶇疆"
-	echo
-
-	read -r -p "鏄惁鑷畾涔塙UID 锛焄y/n]:" customUUIDStatus
-	echo
-	if [[ "${customUUIDStatus}" == "y" ]]; then
-		read -r -p "璇疯緭鍏ュ悎娉曠殑UUID:" currentCustomUUID
-		if [[ -n "${currentCustomUUID}" ]]; then
-			uuid=${currentCustomUUID}
-		fi
-	fi
-	local addClientsStatus=
-	if [[ -n "${currentUUID}" && -z "${uuid}" ]]; then
-		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑UUID 锛焄y/n]:" historyUUIDStatus
-		if [[ "${historyUUIDStatus}" == "y" ]]; then
-			uuid=${currentUUID}
-			addClientsStatus=true
-		else
-			uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
-		fi
-	elif [[ -z "${uuid}" ]]; then
-		uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
-	fi
-
-	if [[ -z "${uuid}" ]]; then
-		addClientsStatus=
-		echoContent red "\n ---> uuid璇诲彇閿欒锛岄噸鏂扮敓鎴�"
-		uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
-	fi
-
-	movePreviousConfig
-	# log
-	cat <<EOF >/etc/v2ray-agent/v2ray/conf/00_log.json
-{
-  "log": {
-    "error": "/etc/v2ray-agent/v2ray/error.log",
-    "loglevel": "warning"
-  }
-}
-EOF
-	# outbounds
-	if [[ -n "${pingIPv6}" ]]; then
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/10_ipv6_outbounds.json
-{
-    "outbounds": [
-        {
-          "protocol": "freedom",
-          "settings": {},
-          "tag": "direct"
-        }
-    ]
-}
-EOF
-
-	else
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/10_ipv4_outbounds.json
-{
-    "outbounds":[
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv4"
-            },
-            "tag":"IPv4-out"
-        },
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv6"
-            },
-            "tag":"IPv6-out"
-        },
-        {
-            "protocol":"blackhole",
-            "tag":"blackhole-out"
-        }
-    ]
-}
-EOF
-	fi
-
-	# dns
-	cat <<EOF >/etc/v2ray-agent/v2ray/conf/11_dns.json
-{
-    "dns": {
-        "servers": [
-          "localhost"
-        ]
-  }
-}
-EOF
-
-	# VLESS_TCP_TLS
-	# 鍥炶惤nginx
-	local fallbacksList='{"dest":31300,"xver":0},{"alpn":"h2","dest":31302,"xver":0}'
-
-	# trojan
-	if echo "${selectCustomInstallType}" | grep -q 4 || [[ "$1" == "all" ]]; then
-
-		fallbacksList='{"dest":31296,"xver":1},{"alpn":"h2","dest":31302,"xver":0}'
-
-		getClients "${configPath}../tmp/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/04_trojan_TCP_inbounds.json
-{
-"inbounds":[
-	{
-	  "port": 31296,
-	  "listen": "127.0.0.1",
-	  "protocol": "trojan",
-	  "tag":"trojanTCP",
-	  "settings": {
-		"clients": [
-		  {
-			"password": "${uuid}",
-			"email": "${domain}_trojan_tcp"
-		  }
-		],
-		"fallbacks":[
-			{"dest":"31300"}
-		]
-	  },
-	  "streamSettings": {
-		"network": "tcp",
-		"security": "none",
-		"tcpSettings": {
-			"acceptProxyProtocol": true
-		}
-	  }
-	}
-	]
-}
-EOF
-		addClients "/etc/v2ray-agent/v2ray/conf/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VLESS_WS_TLS
-	if echo "${selectCustomInstallType}" | grep -q 1 || [[ "$1" == "all" ]]; then
-		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'ws","dest":31297,"xver":1}'
-		getClients "${configPath}../tmp/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/03_VLESS_WS_inbounds.json
-{
-"inbounds":[
-    {
-	  "port": 31297,
-	  "listen": "127.0.0.1",
-	  "protocol": "vless",
-	  "tag":"VLESSWS",
-	  "settings": {
-		"clients": [
-		  {
-			"id": "${uuid}",
-			"email": "${domain}_VLESS_WS"
-		  }
-		],
-		"decryption": "none"
-	  },
-	  "streamSettings": {
-		"network": "ws",
-		"security": "none",
-		"wsSettings": {
-		  "acceptProxyProtocol": true,
-		  "path": "/${customPath}ws"
-		}
-	  }
-	}
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/v2ray/conf/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# trojan_grpc
-	if echo "${selectCustomInstallType}" | grep -q 2 || [[ "$1" == "all" ]]; then
-		if ! echo "${selectCustomInstallType}" | grep -q 5 && [[ -n ${selectCustomInstallType} ]]; then
-			fallbacksList=${fallbacksList//31302/31304}
-		fi
-		getClients "${configPath}../tmp/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/04_trojan_gRPC_inbounds.json
-{
-    "inbounds": [
-        {
-            "port": 31304,
-            "listen": "127.0.0.1",
-            "protocol": "trojan",
-            "tag": "trojangRPCTCP",
-            "settings": {
-                "clients": [
-                    {
-                        "password": "${uuid}",
-                        "email": "${domain}_trojan_gRPC"
-                    }
-                ],
-                "fallbacks": [
-                    {
-                        "dest": "31300"
-                    }
-                ]
-            },
-            "streamSettings": {
-                "network": "grpc",
-                "grpcSettings": {
-                    "serviceName": "${customPath}trojangrpc"
-                }
-            }
-        }
-    ]
-}
-EOF
-		addClients "/etc/v2ray-agent/v2ray/conf/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VMess_WS
-	if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
-		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
-
-		getClients "${configPath}../tmp/05_VMess_WS_inbounds.json" "${addClientsStatus}"
-
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/05_VMess_WS_inbounds.json
-{
-"inbounds":[
-{
-  "listen": "127.0.0.1",
-  "port": 31299,
-  "protocol": "vmess",
-  "tag":"VMessWS",
-  "settings": {
-    "clients": [
-      {
-        "id": "${uuid}",
-        "alterId": 0,
-        "add": "${add}",
-        "email": "${domain}_vmess_ws"
-      }
-    ]
-  },
-  "streamSettings": {
-    "network": "ws",
-    "security": "none",
-    "wsSettings": {
-      "acceptProxyProtocol": true,
-      "path": "/${customPath}vws"
-    }
-  }
-}
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/v2ray/conf/05_VMess_WS_inbounds.json" "${addClientsStatus}"
-	fi
-
-	if echo "${selectCustomInstallType}" | grep -q 5 || [[ "$1" == "all" ]]; then
-		getClients "${configPath}../tmp/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/v2ray/conf/06_VLESS_gRPC_inbounds.json
-{
-    "inbounds":[
-    {
-        "port": 31301,
-        "listen": "127.0.0.1",
-        "protocol": "vless",
-        "tag":"VLESSGRPC",
-        "settings": {
-            "clients": [
-                {
-                    "id": "${uuid}",
-                    "add": "${add}",
-                    "email": "${domain}_VLESS_gRPC"
-                }
-            ],
-            "decryption": "none"
-        },
-        "streamSettings": {
-            "network": "grpc",
-            "grpcSettings": {
-                "serviceName": "${customPath}grpc"
-            }
-        }
-    }
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/v2ray/conf/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VLESS_TCP
-	getClients "${configPath}../tmp/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
-	cat <<EOF >/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json
-{
-"inbounds":[
-{
-  "port": 443,
-  "protocol": "vless",
-  "tag":"VLESSTCP",
-  "settings": {
-    "clients": [
-     {
-        "id": "${uuid}",
-        "add":"${add}",
-        "email": "${domain}_VLESS_TLS-direct_TCP"
-      }
-    ],
-    "decryption": "none",
-    "fallbacks": [
-        ${fallbacksList}
-    ]
-  },
-  "streamSettings": {
-    "network": "tcp",
-    "security": "tls",
-    "tlsSettings": {
-      "minVersion": "1.2",
-      "alpn": [
-        "http/1.1",
-        "h2"
-      ],
-      "certificates": [
-        {
-          "certificateFile": "/etc/v2ray-agent/tls/${domain}.crt",
-          "keyFile": "/etc/v2ray-agent/tls/${domain}.key",
-          "ocspStapling": 3600,
-          "usage":"encipherment"
-        }
-      ]
-    }
-  }
-}
-]
-}
-EOF
-	addClients "/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
-
-}
-
-# 鍒濆鍖朮ray Trojan XTLS 閰嶇疆鏂囦欢
-initXrayFrontingConfig() {
-	if [[ -z "${configPath}" ]]; then
-		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
-		menu
-		exit 0
-	fi
-	if [[ "${coreInstallType}" != "1" ]]; then
-		echoContent red " ---> 鏈畨瑁呭彲鐢ㄧ被鍨�"
-	fi
-	local xtlsType=
-	if echo ${currentInstallProtocolType} | grep -q trojan; then
-		xtlsType=VLESS
-	else
-		xtlsType=Trojan
-
-	fi
-
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 鍓嶇疆鍒囨崲涓�${xtlsType}"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	echoContent yellow "浼氬皢鍓嶇疆鏇挎崲涓�${xtlsType}"
-	echoContent yellow "濡傛灉鍓嶇疆鏄疶rojan锛屾煡鐪嬪笎鍙锋椂鍒欎細鍑虹幇涓や釜Trojan鍗忚鐨勮妭鐐癸紝鏈変竴涓笉鍙敤xtls"
-	echoContent yellow "鍐嶆鎵ц鍙垏鎹㈣嚦涓婁竴娆$殑鍓嶇疆\n"
-
-	echoContent yellow "1.鍒囨崲鑷�${xtlsType}"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectType
-	if [[ "${selectType}" == "1" ]]; then
-
-		if [[ "${xtlsType}" == "Trojan" ]]; then
-
-			local VLESSConfig
-			VLESSConfig=$(cat ${configPath}${frontingType}.json)
-			VLESSConfig=${VLESSConfig//"id"/"password"}
-			VLESSConfig=${VLESSConfig//VLESSTCP/TrojanTCPXTLS}
-			VLESSConfig=${VLESSConfig//VLESS/Trojan}
-			VLESSConfig=${VLESSConfig//"vless"/"trojan"}
-			VLESSConfig=${VLESSConfig//"id"/"password"}
-
-			echo "${VLESSConfig}" | jq . >${configPath}02_trojan_TCP_inbounds.json
-			rm ${configPath}${frontingType}.json
-		elif [[ "${xtlsType}" == "VLESS" ]]; then
-
-			local VLESSConfig
-			VLESSConfig=$(cat ${configPath}02_trojan_TCP_inbounds.json)
-			VLESSConfig=${VLESSConfig//"password"/"id"}
-			VLESSConfig=${VLESSConfig//TrojanTCPXTLS/VLESSTCP}
-			VLESSConfig=${VLESSConfig//Trojan/VLESS}
-			VLESSConfig=${VLESSConfig//"trojan"/"vless"}
-			VLESSConfig=${VLESSConfig//"password"/"id"}
-
-			echo "${VLESSConfig}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
-			rm ${configPath}02_trojan_TCP_inbounds.json
-		fi
-		reloadCore
-	fi
-
-	exit 0
-}
-
-# 绉诲姩涓婃閰嶇疆鏂囦欢鑷充复鏃舵枃浠�
-movePreviousConfig() {
-	if [[ -n "${configPath}" ]] && [[ -f "${configPath}02_VLESS_TCP_inbounds.json" ]]; then
-		rm -rf ${configPath}../tmp/*
-		mv ${configPath}* ${configPath}../tmp/
-	fi
-
-}
-
-# 鍒濆鍖朮ray 閰嶇疆鏂囦欢
-initXrayConfig() {
-	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朮ray閰嶇疆"
-	echo
-	local uuid=
-	local addClientsStatus=
-	if [[ -n "${currentUUID}" ]]; then
-		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑UUID 锛焄y/n]:" historyUUIDStatus
-		if [[ "${historyUUIDStatus}" == "y" ]]; then
-			addClientsStatus=true
-			uuid=${currentUUID}
-			echoContent green "\n ---> 浣跨敤鎴愬姛"
-		fi
-	fi
-
-	if [[ -z "${uuid}" ]]; then
-		echoContent yellow "璇疯緭鍏ヨ嚜瀹氫箟UUID[闇�鍚堟硶]锛孾鍥炶溅]闅忔満UUID"
-		read -r -p 'UUID:' customUUID
-
-		if [[ -n ${customUUID} ]]; then
-			uuid=${customUUID}
-		else
-			uuid=$(/etc/v2ray-agent/xray/xray uuid)
-		fi
-
-	fi
-
-	if [[ -z "${uuid}" ]]; then
-		addClientsStatus=
-		echoContent red "\n ---> uuid璇诲彇閿欒锛岄噸鏂扮敓鎴�"
-		uuid=$(/etc/v2ray-agent/xray/xray uuid)
-	fi
-
-	echoContent yellow "\n ${uuid}"
-
-	movePreviousConfig
-
-	# log
-	cat <<EOF >/etc/v2ray-agent/xray/conf/00_log.json
-{
-  "log": {
-    "error": "/etc/v2ray-agent/xray/error.log",
-    "loglevel": "warning"
-  }
-}
-EOF
-
-	# outbounds
-	if [[ -n "${pingIPv6}" ]]; then
-		cat <<EOF >/etc/v2ray-agent/xray/conf/10_ipv6_outbounds.json
-{
-    "outbounds": [
-        {
-          "protocol": "freedom",
-          "settings": {},
-          "tag": "direct"
-        }
-    ]
-}
-EOF
-
-	else
-		cat <<EOF >/etc/v2ray-agent/xray/conf/10_ipv4_outbounds.json
-{
-    "outbounds":[
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv4"
-            },
-            "tag":"IPv4-out"
-        },
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv6"
-            },
-            "tag":"IPv6-out"
-        },
-        {
-            "protocol":"blackhole",
-            "tag":"blackhole-out"
-        }
-    ]
-}
-EOF
-	fi
-
-	# dns
-	cat <<EOF >/etc/v2ray-agent/xray/conf/11_dns.json
-{
-    "dns": {
-        "servers": [
-          "localhost"
-        ]
-  }
-}
-EOF
-
-	# VLESS_TCP_TLS/XTLS
-	# 鍥炶惤nginx
-	local fallbacksList='{"dest":31300,"xver":0},{"alpn":"h2","dest":31302,"xver":0}'
-
-	# trojan
-	if echo "${selectCustomInstallType}" | grep -q 4 || [[ "$1" == "all" ]]; then
-		fallbacksList='{"dest":31296,"xver":1},{"alpn":"h2","dest":31302,"xver":0}'
-		getClients "${configPath}../tmp/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
-
-		cat <<EOF >/etc/v2ray-agent/xray/conf/04_trojan_TCP_inbounds.json
-{
-"inbounds":[
-	{
-	  "port": 31296,
-	  "listen": "127.0.0.1",
-	  "protocol": "trojan",
-	  "tag":"trojanTCP",
-	  "settings": {
-		"clients": [
-		  {
-			"password": "${uuid}",
-			"email": "${domain}_trojan_tcp"
-		  }
-		],
-		"fallbacks":[
-			{"dest":"31300"}
-		]
-	  },
-	  "streamSettings": {
-		"network": "tcp",
-		"security": "none",
-		"tcpSettings": {
-			"acceptProxyProtocol": true
-		}
-	  }
-	}
-	]
-}
-EOF
-		addClients "/etc/v2ray-agent/xray/conf/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VLESS_WS_TLS
-	if echo "${selectCustomInstallType}" | grep -q 1 || [[ "$1" == "all" ]]; then
-		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'ws","dest":31297,"xver":1}'
-		getClients "${configPath}../tmp/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/xray/conf/03_VLESS_WS_inbounds.json
-{
-"inbounds":[
-    {
-	  "port": 31297,
-	  "listen": "127.0.0.1",
-	  "protocol": "vless",
-	  "tag":"VLESSWS",
-	  "settings": {
-		"clients": [
-		  {
-			"id": "${uuid}",
-			"email": "${domain}_VLESS_WS"
-		  }
-		],
-		"decryption": "none"
-	  },
-	  "streamSettings": {
-		"network": "ws",
-		"security": "none",
-		"wsSettings": {
-		  "acceptProxyProtocol": true,
-		  "path": "/${customPath}ws"
-		}
-	  }
-	}
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/xray/conf/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# trojan_grpc
-	if echo "${selectCustomInstallType}" | grep -q 2 || [[ "$1" == "all" ]]; then
-		if ! echo "${selectCustomInstallType}" | grep -q 5 && [[ -n ${selectCustomInstallType} ]]; then
-			fallbacksList=${fallbacksList//31302/31304}
-		fi
-		getClients "${configPath}../tmp/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/xray/conf/04_trojan_gRPC_inbounds.json
-{
-    "inbounds": [
-        {
-            "port": 31304,
-            "listen": "127.0.0.1",
-            "protocol": "trojan",
-            "tag": "trojangRPCTCP",
-            "settings": {
-                "clients": [
-                    {
-                        "password": "${uuid}",
-                        "email": "${domain}_trojan_gRPC"
-                    }
-                ],
-                "fallbacks": [
-                    {
-                        "dest": "31300"
-                    }
-                ]
-            },
-            "streamSettings": {
-                "network": "grpc",
-                "grpcSettings": {
-                    "serviceName": "${customPath}trojangrpc"
-                }
-            }
-        }
-    ]
-}
-EOF
-		addClients "/etc/v2ray-agent/xray/conf/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VMess_WS
-	if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
-		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
-		getClients "${configPath}../tmp/05_VMess_WS_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/xray/conf/05_VMess_WS_inbounds.json
-{
-"inbounds":[
-{
-  "listen": "127.0.0.1",
-  "port": 31299,
-  "protocol": "vmess",
-  "tag":"VMessWS",
-  "settings": {
-    "clients": [
-      {
-        "id": "${uuid}",
-        "alterId": 0,
-        "add": "${add}",
-        "email": "${domain}_vmess_ws"
-      }
-    ]
-  },
-  "streamSettings": {
-    "network": "ws",
-    "security": "none",
-    "wsSettings": {
-      "acceptProxyProtocol": true,
-      "path": "/${customPath}vws"
-    }
-  }
-}
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/xray/conf/05_VMess_WS_inbounds.json" "${addClientsStatus}"
-	fi
-
-	if echo "${selectCustomInstallType}" | grep -q 5 || [[ "$1" == "all" ]]; then
-		getClients "${configPath}../tmp/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
-		cat <<EOF >/etc/v2ray-agent/xray/conf/06_VLESS_gRPC_inbounds.json
-{
-    "inbounds":[
-    {
-        "port": 31301,
-        "listen": "127.0.0.1",
-        "protocol": "vless",
-        "tag":"VLESSGRPC",
-        "settings": {
-            "clients": [
-                {
-                    "id": "${uuid}",
-                    "add": "${add}",
-                    "email": "${domain}_VLESS_gRPC"
-                }
-            ],
-            "decryption": "none"
-        },
-        "streamSettings": {
-            "network": "grpc",
-            "grpcSettings": {
-                "serviceName": "${customPath}grpc"
-            }
-        }
-    }
-]
-}
-EOF
-		addClients "/etc/v2ray-agent/xray/conf/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
-	fi
-
-	# VLESS_TCP
-	getClients "${configPath}../tmp/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
-	cat <<EOF >/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json
-{
-"inbounds":[
-{
-  "port": 443,
-  "protocol": "vless",
-  "tag":"VLESSTCP",
-  "settings": {
-    "clients": [
-     {
-        "id": "${uuid}",
-        "add":"${add}",
-        "flow":"xtls-rprx-direct",
-        "email": "${domain}_VLESS_XTLS/TLS-direct_TCP"
-      }
-    ],
-    "decryption": "none",
-    "fallbacks": [
-        ${fallbacksList}
-    ]
-  },
-  "streamSettings": {
-    "network": "tcp",
-    "security": "xtls",
-    "xtlsSettings": {
-      "minVersion": "1.2",
-      "alpn": [
-        "http/1.1",
-        "h2"
-      ],
-      "certificates": [
-        {
-          "certificateFile": "/etc/v2ray-agent/tls/${domain}.crt",
-          "keyFile": "/etc/v2ray-agent/tls/${domain}.key",
-          "ocspStapling": 3600,
-          "usage":"encipherment"
-        }
-      ]
-    }
-  }
-}
-]
-}
-EOF
-	addClients "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
-}
-
-# 鍒濆鍖朤rojan-Go閰嶇疆
-initTrojanGoConfig() {
-
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 鍒濆鍖朤rojan閰嶇疆"
-	cat <<EOF >/etc/v2ray-agent/trojan/config_full.json
-{
-    "run_type": "server",
-    "local_addr": "127.0.0.1",
-    "local_port": 31296,
-    "remote_addr": "127.0.0.1",
-    "remote_port": 31300,
-    "disable_http_check":true,
-    "log_level":3,
-    "log_file":"/etc/v2ray-agent/trojan/trojan.log",
-    "password": [
-        "${uuid}"
-    ],
-    "dns":[
-        "localhost"
-    ],
-    "transport_plugin":{
-        "enabled":true,
-        "type":"plaintext"
-    },
-    "websocket": {
-        "enabled": true,
-        "path": "/${customPath}tws",
-        "host": "${domain}",
-        "add":"${add}"
-    },
-    "router": {
-        "enabled": false
-    }
-}
-EOF
-}
-
-# 鑷畾涔塁DN IP
-customCDNIP() {
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞cloudflare鑷�塁NAME"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」"
-	echoContent yellow "\n鏁欑▼鍦板潃:"
-	echoContent skyBlue "https://github.com/mack-a/v2ray-agent/blob/master/documents/optimize_V2Ray.md"
-	echoContent red "\n濡傚Cloudflare浼樺寲涓嶄簡瑙o紝璇蜂笉瑕佷娇鐢�"
-	echoContent yellow "\n 1.绉诲姩:104.16.123.96"
-	echoContent yellow " 2.鑱旈��:www.cloudflare.com"
-	echoContent yellow " 3.鐢典俊:www.digitalocean.com"
-	echoContent skyBlue "----------------------------"
-	read -r -p "璇烽�夋嫨[鍥炶溅涓嶄娇鐢╙:" selectCloudflareType
-	case ${selectCloudflareType} in
-	1)
-		add="104.16.123.96"
-		;;
-	2)
-		add="www.cloudflare.com"
-		;;
-	3)
-		add="www.digitalocean.com"
-		;;
-	*)
-		add="${domain}"
-		echoContent yellow "\n ---> 涓嶄娇鐢�"
-		;;
-	esac
-}
-# 閫氱敤
-defaultBase64Code() {
-	local type=$1
-	local email=$2
-	local id=$3
-
-	port=${currentDefaultPort}
-
-	local subAccount
-	subAccount=$(echo "${email}" | awk -F "[_]" '{print $1}')_$(echo "${id}_currentHost" | md5sum | awk '{print $1}')
-	if [[ "${type}" == "vlesstcp" ]]; then
-
-		if [[ "${coreInstallType}" == "1" ]] && echo "${currentInstallProtocolType}" | grep -q 0; then
-			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS/xtls-rprx-direct)"
-			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}\n"
-
-			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-direct)"
-			echoContent green "鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-direct锛岃处鎴峰悕:${email}\n"
-			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}
-EOF
-			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS/xtls-rprx-direct)"
-			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-direct%23${email}\n"
-
-			echoContent skyBlue "----------------------------------------------------------------------------------"
-
-			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS/xtls-rprx-splice)"
-			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}\n"
-
-			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-splice)"
-			echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-splice锛岃处鎴峰悕:${email/direct/splice}\n"
-			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}
-EOF
-			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS/xtls-rprx-splice)"
-			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-splice%23${email/direct/splice}\n"
-
-		elif [[ "${coreInstallType}" == 2 || "${coreInstallType}" == "3" ]]; then
-			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS)"
-			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?security=tls&encryption=none&host=${currentHost}&headerType=none&type=tcp#${email}\n"
-
-			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-splice)"
-			echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:tcp锛岃处鎴峰悕:${email/direct/splice}\n"
-
-			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vless://${id}@${currentHost}:${currentDefaultPort}?security=tls&encryption=none&host=${currentHost}&headerType=none&type=tcp#${email}
-EOF
-			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS)"
-			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3a%2f%2f${id}%40${currentHost}%3a${currentDefaultPort}%3fsecurity%3dtls%26encryption%3dnone%26host%3d${currentHost}%26headerType%3dnone%26type%3dtcp%23${email}\n"
-		fi
-
-	elif [[ "${type}" == "trojanTCPXTLS" ]]; then
-		echoContent yellow " ---> 閫氱敤鏍煎紡(Trojan+TCP+TLS/xtls-rprx-direct)"
-		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}\n"
-
-		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(Trojan+TCP+TLS/xtls-rprx-direct)"
-		echoContent green "鍗忚绫诲瀷:Trojan锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-direct锛岃处鎴峰悕:${email}\n"
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}
-EOF
-		echoContent yellow " ---> 浜岀淮鐮� Trojan(Trojan+TCP+TLS/xtls-rprx-direct)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-direct%23${email}\n"
-
-		echoContent skyBlue "----------------------------------------------------------------------------------"
-
-		echoContent yellow " ---> 閫氱敤鏍煎紡(Trojan+TCP+TLS/xtls-rprx-splice)"
-		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}\n"
-
-		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(Trojan+TCP+TLS/xtls-rprx-splice)"
-		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-splice锛岃处鎴峰悕:${email/direct/splice}\n"
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}
-EOF
-		echoContent yellow " ---> 浜岀淮鐮� Trojan(Trojan+TCP+TLS/xtls-rprx-splice)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-splice%23${email/direct/splice}\n"
-
-	elif [[ "${type}" == "vmessws" ]]; then
-		qrCodeBase64Default=$(echo -n "{\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}" | base64 -w 0)
-		qrCodeBase64Default="${qrCodeBase64Default// /}"
-
-		echoContent yellow " ---> 閫氱敤json(VMess+WS+TLS)"
-		echoContent green "    {\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}\n"
-		echoContent yellow " ---> 閫氱敤vmess(VMess+WS+TLS)閾炬帴"
-		echoContent green "    vmess://${qrCodeBase64Default}\n"
-		echoContent yellow " ---> 浜岀淮鐮� vmess(VMess+WS+TLS)"
-
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vmess://${qrCodeBase64Default}
-EOF
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
-
-		#	elif [[ "${type}" == "vmesstcp" ]]; then
-		#
-		#		echoContent red "path:${path}"
-		#		qrCodeBase64Default=$(echo -n "{\"add\":\"${add}\",\"aid\":0,\"host\":\"${host}\",\"id\":\"${id}\",\"net\":\"tcp\",\"path\":\"${path}\",\"port\":${port},\"ps\":\"${email}\",\"scy\":\"none\",\"sni\":\"${host}\",\"tls\":\"tls\",\"v\":2,\"type\":\"http\",\"allowInsecure\":0,\"peer\":\"${host}\",\"obfs\":\"http\",\"obfsParam\":\"${host}\"}" | base64)
-		#		qrCodeBase64Default="${qrCodeBase64Default// /}"
-		#
-		#		echoContent yellow " ---> 閫氱敤json(VMess+TCP+TLS)"
-		#		echoContent green "    {\"port\":'${port}',\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${host}\",\"type\":\"http\",\"path\":\"${path}\",\"net\":\"http\",\"add\":\"${add}\",\"allowInsecure\":0,\"method\":\"post\",\"peer\":\"${host}\",\"obfs\":\"http\",\"obfsParam\":\"${host}\"}\n"
-		#		echoContent yellow " ---> 閫氱敤vmess(VMess+TCP+TLS)閾炬帴"
-		#		echoContent green "    vmess://${qrCodeBase64Default}\n"
-		#
-		#		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-		#vmess://${qrCodeBase64Default}
-		#EOF
-		#		echoContent yellow " ---> 浜岀淮鐮� vmess(VMess+TCP+TLS)"
-		#		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
-
-	elif [[ "${type}" == "vlessws" ]]; then
-
-		echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+WS+TLS)"
-		echoContent green "    vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&path=/${currentPath}ws#${email}\n"
-
-		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+WS+TLS)"
-		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentAdd}锛屼吉瑁呭煙鍚�/SNI:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:ws锛岃矾寰�:/${currentPath}ws锛岃处鎴峰悕:${email}\n"
-
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&path=/${currentPath}ws#${email}
-EOF
-
-		echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+WS+TLS)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${currentHost}%26sni%3D${currentHost}%26path%3D%252f${currentPath}ws%23${email}"
-
-	elif [[ "${type}" == "vlessgrpc" ]]; then
-
-		echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+gRPC+TLS)"
-		echoContent green "    vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}\n"
-
-		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+gRPC+TLS)"
-		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentAdd}锛屼吉瑁呭煙鍚�/SNI:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:gRPC锛宎lpn:h2锛宻erviceName:${currentPath}grpc锛岃处鎴峰悕:${email}\n"
-
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}
-EOF
-		echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+gRPC+TLS)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${currentHost}%26serviceName%3D${currentPath}grpc%26path%3D${currentPath}grpc%26sni%3D${currentHost}%26alpn%3Dh2%23${email}"
-
-	elif [[ "${type}" == "trojan" ]]; then
-		# URLEncode
-		echoContent yellow " ---> Trojan(TLS)"
-		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?peer=${currentHost}&sni=${currentHost}&alpn=http/1.1#${currentHost}_Trojan\n"
-
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-trojan://${id}@${currentHost}:${currentDefaultPort}?peer=${currentHost}&sni=${currentHost}&alpn=http/1.1#${email}_Trojan
-EOF
-		echoContent yellow " ---> 浜岀淮鐮� Trojan(TLS)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${currentHost}%3a${port}%3fpeer%3d${currentHost}%26sni%3d${currentHost}%26alpn%3Dhttp/1.1%23${email}\n"
-
-	elif [[ "${type}" == "trojangrpc" ]]; then
-		# URLEncode
-
-		echoContent yellow " ---> Trojan gRPC(TLS)"
-		echoContent green "    trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}\n"
-		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
-trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}
-EOF
-		echoContent yellow " ---> 浜岀淮鐮� Trojan gRPC(TLS)"
-		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${currentAdd}%3a${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26peer%3d${currentHost}%26type%3Dgrpc%26sni%3d${currentHost}%26path%3D${currentPath}trojangrpc%26alpn%3Dh2%26serviceName%3D${currentPath}trojangrpc%23${email}\n"
-	fi
-
-}
-
-# 璐﹀彿
-showAccounts() {
-	readInstallType
-	readInstallProtocolType
-	readConfigHostPathUUID
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 璐﹀彿"
-	local show
-	# VLESS TCP
-	if [[ -n "${configPath}" ]]; then
-		show=1
-		if echo "${currentInstallProtocolType}" | grep -q trojan; then
-			echoContent skyBlue "===================== Trojan TCP TLS/XTLS-direct/XTLS-splice ======================\n"
-			jq .inbounds[0].settings.clients ${configPath}02_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
-				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-				defaultBase64Code trojanTCPXTLS "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
-			done
-
-		else
-			echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
-			jq .inbounds[0].settings.clients ${configPath}02_VLESS_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
-				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-				echo
-				defaultBase64Code vlesstcp "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
-			done
-		fi
-
-		# VLESS WS
-		if echo ${currentInstallProtocolType} | grep -q 1; then
-			echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
-
-			jq .inbounds[0].settings.clients ${configPath}03_VLESS_WS_inbounds.json | jq -c '.[]' | while read -r user; do
-				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-				echo
-				local path="${currentPath}ws"
-				#	if [[ ${coreInstallType} == "1" ]]; then
-				#		echoContent yellow "Xray鐨�0-RTT path鍚庨潰浼氭湁锛屼笉鍏煎浠2ray涓烘牳蹇冪殑瀹㈡埛绔紝璇锋墜鍔ㄥ垹闄ゅ悗浣跨敤\n"
-				#		path="${currentPath}ws"
-				#	fi
-				defaultBase64Code vlessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
-			done
-		fi
-
-		# VMess WS
-		if echo ${currentInstallProtocolType} | grep -q 3; then
-			echoContent skyBlue "\n================================ VMess WS TLS CDN ================================\n"
-			local path="${currentPath}vws"
-			if [[ ${coreInstallType} == "1" ]]; then
-				path="${currentPath}vws"
-			fi
-			jq .inbounds[0].settings.clients ${configPath}05_VMess_WS_inbounds.json | jq -c '.[]' | while read -r user; do
-				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-				echo
-				defaultBase64Code vmessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
-			done
-		fi
-
-		# VLESS grpc
-		if echo ${currentInstallProtocolType} | grep -q 5; then
-			echoContent skyBlue "\n=============================== VLESS gRPC TLS CDN ===============================\n"
-			echoContent red "\n --->gRPC澶勪簬娴嬭瘯闃舵锛屽彲鑳藉浣犱娇鐢ㄧ殑瀹㈡埛绔笉鍏煎锛屽涓嶈兘浣跨敤璇峰拷鐣�"
-			#			local serviceName
-			#			serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}06_VLESS_gRPC_inbounds.json)
-			jq .inbounds[0].settings.clients ${configPath}06_VLESS_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
-				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-				echo
-				defaultBase64Code vlessgrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
-			done
-		fi
-	fi
-
-	# trojan tcp
-	if echo ${currentInstallProtocolType} | grep -q 4; then
-		echoContent skyBlue "\n==================================  Trojan TLS  ==================================\n"
-		jq .inbounds[0].settings.clients ${configPath}04_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
-			echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-
-			defaultBase64Code trojan "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
-		done
-	fi
-
-	if echo ${currentInstallProtocolType} | grep -q 2; then
-		echoContent skyBlue "\n================================  Trojan gRPC TLS  ================================\n"
-		echoContent red "\n --->gRPC澶勪簬娴嬭瘯闃舵锛屽彲鑳藉浣犱娇鐢ㄧ殑瀹㈡埛绔笉鍏煎锛屽涓嶈兘浣跨敤璇峰拷鐣�"
-		#		local serviceName=
-		#		serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}04_trojan_gRPC_inbounds.json)
-		jq .inbounds[0].settings.clients ${configPath}04_trojan_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
-			echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
-			echo
-			defaultBase64Code trojangrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
-		done
-	fi
-
-	if [[ -z ${show} ]]; then
-		echoContent red " ---> 鏈畨瑁�"
-	fi
-}
-# 绉婚櫎nginx302閰嶇疆
-removeNginx302() {
-	# 鏌ユ壘鍒�302閭h骞跺垹闄�
-	#	local line302Result=
-	#	line302Result=$(grep -n "return 302" </etc/nginx/conf.d/alone.conf | tail -n 1)
-	local count=0
-	grep -n "return 302" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
-
-		if ! echo "${line}" | grep -q "request_uri"; then
-			local removeIndex=
-			removeIndex=$(echo "${line}" | awk -F "[:]" '{print $1}')
-			removeIndex=$((removeIndex + count))
-			sed -i "${removeIndex}d" /etc/nginx/conf.d/alone.conf
-			count=$((count - 1))
-		fi
-	done
-}
-
-# 妫�鏌�302鏄惁鎴愬姛
-checkNginx302() {
-	local domain302Status=
-	domain302Status=$(curl -s "https://${currentHost}")
-	if echo "${domain302Status}" | grep -q "302"; then
-		local domain302Result=
-		domain302Result=$(curl -L -s "https://${currentHost}")
-		if [[ -n "${domain302Result}" ]]; then
-			echoContent green " ---> 302閲嶅畾鍚戣缃垚鍔�"
-			exit 0
-		fi
-	fi
-	echoContent red " ---> 302閲嶅畾鍚戣缃け璐ワ紝璇蜂粩缁嗘鏌ユ槸鍚﹀拰绀轰緥鐩稿悓"
-	backupNginxConfig restoreBackup
-}
-
-# 澶囦唤鎭㈠nginx鏂囦欢
-backupNginxConfig() {
-	if [[ "$1" == "backup" ]]; then
-		cp /etc/nginx/conf.d/alone.conf /etc/v2ray-agent/alone_backup.conf
-		echoContent green " ---> nginx閰嶇疆鏂囦欢澶囦唤鎴愬姛"
-	fi
-
-	if [[ "$1" == "restoreBackup" ]] && [[ -f "/etc/v2ray-agent/alone_backup.conf" ]]; then
-		cp /etc/v2ray-agent/alone_backup.conf /etc/nginx/conf.d/alone.conf
-		echoContent green " ---> nginx閰嶇疆鏂囦欢鎭㈠澶囦唤鎴愬姛"
-		rm /etc/v2ray-agent/alone_backup.conf
-	fi
-
-}
-# 娣诲姞302閰嶇疆
-addNginx302() {
-	#	local line302Result=
-	#	line302Result=$(| tail -n 1)
-	local count=1
-	grep -n "Strict-Transport-Security" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
-		if [[ -n "${line}" ]]; then
-			local insertIndex=
-			insertIndex="$(echo "${line}" | awk -F "[:]" '{print $1}')"
-			insertIndex=$((insertIndex + count))
-			sed "${insertIndex}i return 302 '$1';" /etc/nginx/conf.d/alone.conf >/etc/nginx/conf.d/tmpfile && mv /etc/nginx/conf.d/tmpfile /etc/nginx/conf.d/alone.conf
-			count=$((count + 1))
-		else
-			echoContent red " ---> 302娣诲姞澶辫触"
-			backupNginxConfig restoreBackup
-		fi
-
-	done
-}
-
-# 鏇存柊浼绔�
-updateNginxBlog() {
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 鏇存崲浼绔欑偣"
-	echoContent red "=============================================================="
-	echoContent yellow "# 濡傞渶鑷畾涔夛紝璇锋墜鍔ㄥ鍒舵ā鐗堟枃浠跺埌 /usr/share/nginx/html \n"
-	echoContent yellow "1.鏂版墜寮曞"
-	echoContent yellow "2.娓告垙缃戠珯"
-	echoContent yellow "3.涓汉鍗氬01"
-	echoContent yellow "4.浼佷笟绔�"
-	echoContent yellow "5.瑙i攣鍔犲瘑鐨勯煶涔愭枃浠舵ā鐗圼https://github.com/ix64/unlock-music]"
-	echoContent yellow "6.mikutap[https://github.com/HFIProgramming/mikutap]"
-	echoContent yellow "7.浼佷笟绔�02"
-	echoContent yellow "8.涓汉鍗氬02"
-	echoContent yellow "9.404鑷姩璺宠浆baidu"
-	echoContent yellow "10.302閲嶅畾鍚戠綉绔�"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectInstallNginxBlogType
-
-	if [[ "${selectInstallNginxBlogType}" == "10" ]]; then
-		echoContent red "\n=============================================================="
-		echoContent yellow "閲嶅畾鍚戠殑浼樺厛绾ф洿楂橈紝閰嶇疆302涔嬪悗濡傛灉鏇存敼浼绔欑偣锛屾牴璺敱涓嬩吉瑁呯珯鐐瑰皢涓嶈捣浣滅敤"
-		echoContent yellow "濡傛兂瑕佷吉瑁呯珯鐐瑰疄鐜颁綔鐢ㄩ渶鍒犻櫎302閲嶅畾鍚戦厤缃甛n"
-		echoContent yellow "1.娣诲姞"
-		echoContent yellow "2.鍒犻櫎"
-		echoContent red "=============================================================="
-		read -r -p "璇烽�夋嫨:" redirectStatus
-
-		if [[ "${redirectStatus}" == "1" ]]; then
-			backupNginxConfig backup
-			read -r -p "璇疯緭鍏ヨ閲嶅畾鍚戠殑鍩熷悕,渚嬪 https://www.baidu.com:" redirectDomain
-			removeNginx302
-			addNginx302 "${redirectDomain}"
-			handleNginx stop
-			handleNginx start
-			if [[ -z $(pgrep -f nginx) ]]; then
-				backupNginxConfig restoreBackup
-				handleNginx start
-				exit 0
-			fi
-			checkNginx302
-			exit 0
-		fi
-		if [[ "${redirectStatus}" == "2" ]]; then
-			removeNginx302
-			echoContent green " ---> 绉婚櫎302閲嶅畾鍚戞垚鍔�"
-			exit 0
-		fi
-	fi
-	if [[ "${selectInstallNginxBlogType}" =~ ^[1-9]$ ]]; then
-		rm -rf /usr/share/nginx/*
-		if wget --help | grep -q show-progress; then
-			wget -c -q --show-progress -P /usr/share/nginx "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${selectInstallNginxBlogType}.zip" >/dev/null
-		else
-			wget -c -P /usr/share/nginx "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${selectInstallNginxBlogType}.zip" >/dev/null
-		fi
-
-		unzip -o "/usr/share/nginx/html${selectInstallNginxBlogType}.zip" -d /usr/share/nginx/html >/dev/null
-		rm -f "/usr/share/nginx/html${selectInstallNginxBlogType}.zip*"
-		echoContent green " ---> 鏇存崲浼珯鎴愬姛"
-	else
-		echoContent red " ---> 閫夋嫨閿欒锛岃閲嶆柊閫夋嫨"
-		updateNginxBlog
-	fi
-}
-
-# 娣诲姞鏂扮鍙�
-addCorePort() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 娣诲姞鏂扮鍙�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	echoContent yellow "鏀寔鎵归噺娣诲姞"
-	echoContent yellow "涓嶅奖鍝�443绔彛鐨勪娇鐢�"
-	echoContent yellow "鏌ョ湅甯愬彿鏃讹紝鍙細灞曠ず榛樿绔彛443鐨勫笎鍙�"
-	echoContent yellow "涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-	echoContent yellow "褰曞叆绀轰緥:2053,2083,2087\n"
-
-	echoContent yellow "1.娣诲姞绔彛"
-	echoContent yellow "2.鍒犻櫎绔彛"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectNewPortType
-	if [[ "${selectNewPortType}" == "1" ]]; then
-		read -r -p "璇疯緭鍏ョ鍙e彿:" newPort
-		read -r -p "璇疯緭鍏ラ粯璁ょ殑绔彛鍙凤紝鍚屾椂浼氭洿鏀硅闃呯鍙d互鍙婅妭鐐圭鍙o紝[鍥炶溅]榛樿443:" defaultPort
-
-		if [[ -n "${defaultPort}" ]]; then
-			rm -rf "$(find ${configPath}* | grep "default")"
-		fi
-
-		if [[ -n "${newPort}" ]]; then
-
-			while read -r port; do
-				rm -rf "$(find ${configPath}* | grep "${port}")"
-
-				local fileName=
-				if [[ -n "${defaultPort}" && "${port}" == "${defaultPort}" ]]; then
-					fileName="${configPath}02_dokodemodoor_inbounds_${port}_default.json"
-				else
-					fileName="${configPath}02_dokodemodoor_inbounds_${port}.json"
-				fi
-
-				# 寮�鏀剧鍙�
-				allowPort "${port}"
-
-				cat <<EOF >"${fileName}"
-{
-  "inbounds": [
-	{
-	  "listen": "0.0.0.0",
-	  "port": ${port},
-	  "protocol": "dokodemo-door",
-	  "settings": {
-		"address": "127.0.0.1",
-		"port": 443,
-		"network": "tcp",
-		"followRedirect": false
-	  },
-	  "tag": "dokodemo-door-newPort-${port}"
-	}
-  ]
-}
-EOF
-			done < <(echo "${newPort}" | tr ',' '\n')
-
-			echoContent green " ---> 娣诲姞鎴愬姛"
-			reloadCore
-		fi
-	elif [[ "${selectNewPortType}" == "2" ]]; then
-
-		find ${configPath} -name "*dokodemodoor*" | awk -F "[c][o][n][f][/]" '{print ""NR""":"$2}'
-		read -r -p "璇疯緭鍏ヨ鍒犻櫎鐨勭鍙g紪鍙�:" portIndex
-		local dokoConfig
-		dokoConfig=$(find ${configPath} -name "*dokodemodoor*" | awk -F "[c][o][n][f][/]" '{print ""NR""":"$2}' | grep "${portIndex}:")
-		if [[ -n "${dokoConfig}" ]]; then
-			rm "${configPath}/$(echo "${dokoConfig}" | awk -F "[:]" '{print $2}')"
-			reloadCore
-		else
-			echoContent yellow "\n ---> 缂栧彿杈撳叆閿欒锛岃閲嶆柊閫夋嫨"
-			addCorePort
-		fi
-	fi
-}
-
-# 鍗歌浇鑴氭湰
-unInstall() {
-	read -r -p "鏄惁纭鍗歌浇瀹夎鍐呭锛焄y/n]:" unInstallStatus
-	if [[ "${unInstallStatus}" != "y" ]]; then
-		echoContent green " ---> 鏀惧純鍗歌浇"
-		menu
-		exit 0
-	fi
-
-	handleNginx stop
-	if [[ -z $(pgrep -f "nginx") ]]; then
-		echoContent green " ---> 鍋滄Nginx鎴愬姛"
-	fi
-
-	if [[ "${coreInstallType}" == "1" ]]; then
-		handleXray stop
-		rm -rf /etc/systemd/system/xray.service
-		echoContent green " ---> 鍒犻櫎Xray寮�鏈鸿嚜鍚畬鎴�"
-
-	elif [[ "${coreInstallType}" == "2" ]]; then
-
-		handleV2Ray stop
-		rm -rf /etc/systemd/system/v2ray.service
-		echoContent green " ---> 鍒犻櫎V2Ray寮�鏈鸿嚜鍚畬鎴�"
-
-	fi
-
-	if [[ -f "/root/.acme.sh/acme.sh.env" ]] && grep -q 'acme.sh.env' </root/.bashrc; then
-		sed -i 's/. "\/root\/.acme.sh\/acme.sh.env"//g' "$(grep '. "/root/.acme.sh/acme.sh.env"' -rl /root/.bashrc)"
-	fi
-	rm -rf /root/.acme.sh
-	echoContent green " ---> 鍒犻櫎acme.sh瀹屾垚"
-
-	rm -rf /tmp/v2ray-agent-tls/*
-	if [[ -d "/etc/v2ray-agent/tls" ]] && [[ -n $(find /etc/v2ray-agent/tls/ -name "*.key") ]] && [[ -n $(find /etc/v2ray-agent/tls/ -name "*.crt") ]]; then
-		mv /etc/v2ray-agent/tls /tmp/v2ray-agent-tls
-		if [[ -n $(find /tmp/v2ray-agent-tls -name '*.key') ]]; then
-			echoContent yellow " ---> 澶囦唤璇佷功鎴愬姛锛岃娉ㄦ剰鐣欏瓨銆俒/tmp/v2ray-agent-tls]"
-		fi
-	fi
-
-	rm -rf /etc/v2ray-agent
-	rm -rf ${nginxConfigPath}alone.conf
-
-	if [[ -d "/usr/share/nginx/html" && -f "/usr/share/nginx/html/check" ]]; then
-		rm -rf /usr/share/nginx/html
-		echoContent green " ---> 鍒犻櫎浼缃戠珯瀹屾垚"
-	fi
-
-	rm -rf /usr/bin/vasma
-	rm -rf /usr/sbin/vasma
-	echoContent green " ---> 鍗歌浇蹇嵎鏂瑰紡瀹屾垚"
-	echoContent green " ---> 鍗歌浇v2ray-agent鑴氭湰瀹屾垚"
-}
-
-# 淇敼V2Ray CDN鑺傜偣
-updateV2RayCDN() {
-
-	# todo 閲嶆瀯姝ゆ柟娉�
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 淇敼CDN鑺傜偣"
-
-	if [[ -n "${currentAdd}" ]]; then
-		echoContent red "=============================================================="
-		echoContent yellow "1.CNAME www.digitalocean.com"
-		echoContent yellow "2.CNAME www.cloudflare.com"
-		echoContent yellow "3.CNAME hostmonit.com"
-		echoContent yellow "4.鎵嬪姩杈撳叆"
-		echoContent red "=============================================================="
-		read -r -p "璇烽�夋嫨:" selectCDNType
-		case ${selectCDNType} in
-		1)
-			setDomain="www.digitalocean.com"
-			;;
-		2)
-			setDomain="www.cloudflare.com"
-			;;
-		3)
-			setDomain="hostmonit.com"
-			;;
-		4)
-			read -r -p "璇疯緭鍏ユ兂瑕佽嚜瀹氫箟CDN IP鎴栬�呭煙鍚�:" setDomain
-			;;
-		esac
-
-		if [[ -n ${setDomain} ]]; then
-			if [[ -n "${currentAdd}" ]]; then
-				sed -i "s/\"${currentAdd}\"/\"${setDomain}\"/g" "$(grep "${currentAdd}" -rl ${configPath}${frontingType}.json)"
-			fi
-			if [[ $(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json) == "${setDomain}" ]]; then
-				echoContent green " ---> CDN淇敼鎴愬姛"
-				reloadCore
-			else
-				echoContent red " ---> 淇敼CDN澶辫触"
-			fi
-		fi
-	else
-		echoContent red " ---> 鏈畨瑁呭彲鐢ㄧ被鍨�"
-	fi
-}
-
-# manageUser 鐢ㄦ埛绠$悊
-manageUser() {
-	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 澶氱敤鎴风鐞�"
-	echoContent skyBlue "-----------------------------------------------------"
-	echoContent yellow "1.娣诲姞鐢ㄦ埛"
-	echoContent yellow "2.鍒犻櫎鐢ㄦ埛"
-	echoContent skyBlue "-----------------------------------------------------"
-	read -r -p "璇烽�夋嫨:" manageUserType
-	if [[ "${manageUserType}" == "1" ]]; then
-		addUser
-	elif [[ "${manageUserType}" == "2" ]]; then
-		removeUser
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-	fi
-}
-
-# 鑷畾涔塽uid
-customUUID() {
-	#	read -r -p "鏄惁鑷畾涔塙UID 锛焄y/n]:" customUUIDStatus
-	#	echo
-	#	if [[ "${customUUIDStatus}" == "y" ]]; then
-	read -r -p "璇疯緭鍏ュ悎娉曠殑UUID锛孾鍥炶溅]闅忔満UUID:" currentCustomUUID
-	echo
-	if [[ -z "${currentCustomUUID}" ]]; then
-		# echoContent red " ---> UUID涓嶅彲涓虹┖"
-		currentCustomUUID=$(${ctlPath} uuid)
-		echoContent yellow "uuid:${currentCustomUUID}\n"
-
-	else
-		jq -r -c '.inbounds[0].settings.clients[].id' ${configPath}${frontingType}.json | while read -r line; do
-			if [[ "${line}" == "${currentCustomUUID}" ]]; then
-				echo >/tmp/v2ray-agent
-			fi
-		done
-		if [[ -f "/tmp/v2ray-agent" && -n $(cat /tmp/v2ray-agent) ]]; then
-			echoContent red " ---> UUID涓嶅彲閲嶅"
-			rm /tmp/v2ray-agent
-			exit 0
-		fi
-	fi
-	#	fi
-}
-
-# 鑷畾涔塭mail
-customUserEmail() {
-	#	read -r -p "鏄惁鑷畾涔塭mail 锛焄y/n]:" customEmailStatus
-	#	echo
-	#	if [[ "${customEmailStatus}" == "y" ]]; then
-	read -r -p "璇疯緭鍏ュ悎娉曠殑email锛孾鍥炶溅]闅忔満email:" currentCustomEmail
-	echo
-	if [[ -z "${currentCustomEmail}" ]]; then
-		currentCustomEmail="${currentHost}_${currentCustomUUID}"
-		echoContent yellow "email: ${currentCustomEmail}\n"
-		#		echoContent red " ---> email涓嶅彲涓虹┖"
-	else
-		jq -r -c '.inbounds[0].settings.clients[].email' ${configPath}${frontingType}.json | while read -r line; do
-			if [[ "${line}" == "${currentCustomEmail}" ]]; then
-				echo >/tmp/v2ray-agent
-			fi
-		done
-		if [[ -f "/tmp/v2ray-agent" && -n $(cat /tmp/v2ray-agent) ]]; then
-			echoContent red " ---> email涓嶅彲閲嶅"
-			rm /tmp/v2ray-agent
-			exit 0
-		fi
-	fi
-	#	fi
-}
-
-# 娣诲姞鐢ㄦ埛
-addUser() {
-
-	echoContent yellow "娣诲姞鏂扮敤鎴峰悗锛岄渶瑕侀噸鏂版煡鐪嬭闃�"
-	read -r -p "璇疯緭鍏ヨ娣诲姞鐨勭敤鎴锋暟閲�:" userNum
-	echo
-	if [[ -z ${userNum} || ${userNum} -le 0 ]]; then
-		echoContent red " ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
-		exit 0
-	fi
-
-	# 鐢熸垚鐢ㄦ埛
-	if [[ "${userNum}" == "1" ]]; then
-		customUUID
-		customUserEmail
-	fi
-
-	while [[ ${userNum} -gt 0 ]]; do
-		local users=
-		((userNum--)) || true
-		if [[ -n "${currentCustomUUID}" ]]; then
-			uuid=${currentCustomUUID}
-		else
-			uuid=$(${ctlPath} uuid)
-		fi
-
-		if [[ -n "${currentCustomEmail}" ]]; then
-			email=${currentCustomEmail}
-		else
-			email=${currentHost}_${uuid}
-		fi
-
-		#	鍏煎v2ray-core
-		users="{\"id\":\"${uuid}\",\"flow\":\"xtls-rprx-direct\",\"email\":\"${email}\",\"alterId\":0}"
-
-		if [[ "${coreInstallType}" == "2" ]]; then
-			users="{\"id\":\"${uuid}\",\"email\":\"${email}\",\"alterId\":0}"
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 0; then
-			local vlessUsers="${users//\,\"alterId\":0/}"
-
-			local vlessTcpResult
-			vlessTcpResult=$(jq -r ".inbounds[0].settings.clients += [${vlessUsers}]" ${configPath}${frontingType}.json)
-			echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q trojan; then
-			local trojanXTLSUsers="${users//\,\"alterId\":0/}"
-			trojanXTLSUsers=${trojanXTLSUsers//"id"/"password"}
-
-			local trojanXTLSResult
-			trojanXTLSResult=$(jq -r ".inbounds[0].settings.clients += [${trojanXTLSUsers}]" ${configPath}${frontingType}.json)
-			echo "${trojanXTLSResult}" | jq . >${configPath}${frontingType}.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 1; then
-			local vlessUsers="${users//\,\"alterId\":0/}"
-			vlessUsers="${vlessUsers//\"flow\":\"xtls-rprx-direct\"\,/}"
-			local vlessWsResult
-			vlessWsResult=$(jq -r ".inbounds[0].settings.clients += [${vlessUsers}]" ${configPath}03_VLESS_WS_inbounds.json)
-			echo "${vlessWsResult}" | jq . >${configPath}03_VLESS_WS_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 2; then
-			local trojangRPCUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
-			trojangRPCUsers="${trojangRPCUsers//\,\"alterId\":0/}"
-			trojangRPCUsers=${trojangRPCUsers//"id"/"password"}
-
-			local trojangRPCResult
-			trojangRPCResult=$(jq -r ".inbounds[0].settings.clients += [${trojangRPCUsers}]" ${configPath}04_trojan_gRPC_inbounds.json)
-			echo "${trojangRPCResult}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 3; then
-			local vmessUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
-
-			local vmessWsResult
-			vmessWsResult=$(jq -r ".inbounds[0].settings.clients += [${vmessUsers}]" ${configPath}05_VMess_WS_inbounds.json)
-			echo "${vmessWsResult}" | jq . >${configPath}05_VMess_WS_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 5; then
-			local vlessGRPCUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
-			vlessGRPCUsers="${vlessGRPCUsers//\,\"alterId\":0/}"
-
-			local vlessGRPCResult
-			vlessGRPCResult=$(jq -r ".inbounds[0].settings.clients += [${vlessGRPCUsers}]" ${configPath}06_VLESS_gRPC_inbounds.json)
-			echo "${vlessGRPCResult}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 4; then
-			local trojanUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
-			trojanUsers="${trojanUsers//id/password}"
-			trojanUsers="${trojanUsers//\,\"alterId\":0/}"
-
-			local trojanTCPResult
-			trojanTCPResult=$(jq -r ".inbounds[0].settings.clients += [${trojanUsers}]" ${configPath}04_trojan_TCP_inbounds.json)
-			echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
-		fi
-	done
-
-	reloadCore
-	echoContent green " ---> 娣诲姞瀹屾垚"
-	manageAccount 1
-}
-
-# 绉婚櫎鐢ㄦ埛
-removeUser() {
-
-	if echo ${currentInstallProtocolType} | grep -q 0 || echo ${currentInstallProtocolType} | grep -q trojan; then
-		jq -r -c .inbounds[0].settings.clients[].email ${configPath}${frontingType}.json | awk '{print NR""":"$0}'
-		read -r -p "璇烽�夋嫨瑕佸垹闄ょ殑鐢ㄦ埛缂栧彿[浠呮敮鎸佸崟涓垹闄:" delUserIndex
-		if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}${frontingType}.json) -lt ${delUserIndex} ]]; then
-			echoContent red " ---> 閫夋嫨閿欒"
-		else
-			delUserIndex=$((delUserIndex - 1))
-			local vlessTcpResult
-			vlessTcpResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}${frontingType}.json)
-			echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
-		fi
-	fi
-	if [[ -n "${delUserIndex}" ]]; then
-		if echo ${currentInstallProtocolType} | grep -q 1; then
-			local vlessWSResult
-			vlessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}03_VLESS_WS_inbounds.json)
-			echo "${vlessWSResult}" | jq . >${configPath}03_VLESS_WS_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 2; then
-			local trojangRPCUsers
-			trojangRPCUsers=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_gRPC_inbounds.json)
-			echo "${trojangRPCUsers}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 3; then
-			local vmessWSResult
-			vmessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}05_VMess_WS_inbounds.json)
-			echo "${vmessWSResult}" | jq . >${configPath}05_VMess_WS_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 5; then
-			local vlessGRPCResult
-			vlessGRPCResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}06_VLESS_gRPC_inbounds.json)
-			echo "${vlessGRPCResult}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json
-		fi
-
-		if echo ${currentInstallProtocolType} | grep -q 4; then
-			local trojanTCPResult
-			trojanTCPResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_TCP_inbounds.json)
-			echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
-		fi
-
-		reloadCore
-	fi
-	manageAccount 1
-}
-# 鏇存柊鑴氭湰
-updateV2RayAgent() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鏇存柊v2ray-agent鑴氭湰"
-	rm -rf /etc/v2ray-agent/install.sh
-	if wget --help | grep -q show-progress; then
-		wget -c -q --show-progress -P /etc/v2ray-agent/ -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh"
-	else
-		wget -c -q -P /etc/v2ray-agent/ -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh"
-	fi
-
-	sudo chmod 700 /etc/v2ray-agent/install.sh
-	local version
-	version=$(grep '褰撳墠鐗堟湰:v' "/etc/v2ray-agent/install.sh" | awk -F "[v]" '{print $2}' | tail -n +2 | head -n 1 | awk -F "[\"]" '{print $1}')
-
-	echoContent green "\n ---> 鏇存柊瀹屾瘯"
-	echoContent yellow " ---> 璇锋墜鍔ㄦ墽琛孾vasma]鎵撳紑鑴氭湰"
-	echoContent green " ---> 褰撳墠鐗堟湰:${version}\n"
-	echoContent yellow "濡傛洿鏂颁笉鎴愬姛锛岃鎵嬪姩鎵ц涓嬮潰鍛戒护\n"
-	echoContent skyBlue "wget -P /root -N --no-check-certificate https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh && chmod 700 /root/install.sh && /root/install.sh"
-	echo
-	exit 0
-}
-
-# 闃茬伀澧�
-handleFirewall() {
-	if systemctl status ufw 2>/dev/null | grep -q "active (exited)" && [[ "$1" == "stop" ]]; then
-		systemctl stop ufw >/dev/null 2>&1
-		systemctl disable ufw >/dev/null 2>&1
-		echoContent green " ---> ufw鍏抽棴鎴愬姛"
-
-	fi
-
-	if systemctl status firewalld 2>/dev/null | grep -q "active (running)" && [[ "$1" == "stop" ]]; then
-		systemctl stop firewalld >/dev/null 2>&1
-		systemctl disable firewalld >/dev/null 2>&1
-		echoContent green " ---> firewalld鍏抽棴鎴愬姛"
-	fi
-}
-
-# 瀹夎BBR
-bbrInstall() {
-	echoContent red "\n=============================================================="
-	echoContent green "BBR銆丏D鑴氭湰鐢ㄧ殑[ylx2016]鐨勬垚鐔熶綔鍝侊紝鍦板潃[https://github.com/ylx2016/Linux-NetSpeed]锛岃鐔熺煡"
-	echoContent yellow "1.瀹夎鑴氭湰銆愭帹鑽愬師鐗圔BR+FQ銆�"
-	echoContent yellow "2.鍥為��涓荤洰褰�"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" installBBRStatus
-	if [[ "${installBBRStatus}" == "1" ]]; then
-		wget -N --no-check-certificate "https://raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
-	else
-		menu
-	fi
-}
-
-# 鏌ョ湅銆佹鏌ユ棩蹇�
-checkLog() {
-	if [[ -z ${configPath} ]]; then
-		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
-	fi
-	local logStatus=false
-	if grep -q "access" ${configPath}00_log.json; then
-		logStatus=true
-	fi
-
-	echoContent skyBlue "\n鍔熻兘 $1/${totalProgress} : 鏌ョ湅鏃ュ織"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 寤鸿浠呰皟璇曟椂鎵撳紑access鏃ュ織\n"
-
-	if [[ "${logStatus}" == "false" ]]; then
-		echoContent yellow "1.鎵撳紑access鏃ュ織"
-	else
-		echoContent yellow "1.鍏抽棴access鏃ュ織"
-	fi
-
-	echoContent yellow "2.鐩戝惉access鏃ュ織"
-	echoContent yellow "3.鐩戝惉error鏃ュ織"
-	echoContent yellow "4.鏌ョ湅璇佷功瀹氭椂浠诲姟鏃ュ織"
-	echoContent yellow "5.鏌ョ湅璇佷功瀹夎鏃ュ織"
-	echoContent yellow "6.娓呯┖鏃ュ織"
-	echoContent red "=============================================================="
-
-	read -r -p "璇烽�夋嫨:" selectAccessLogType
-	local configPathLog=${configPath//conf\//}
-
-	case ${selectAccessLogType} in
-	1)
-		if [[ "${logStatus}" == "false" ]]; then
-			cat <<EOF >${configPath}00_log.json
-{
-  "log": {
-  	"access":"${configPathLog}access.log",
-    "error": "${configPathLog}error.log",
-    "loglevel": "debug"
-  }
-}
-EOF
-		elif [[ "${logStatus}" == "true" ]]; then
-			cat <<EOF >${configPath}00_log.json
-{
-  "log": {
-    "error": "${configPathLog}error.log",
-    "loglevel": "warning"
-  }
-}
-EOF
-		fi
-		reloadCore
-		checkLog 1
-		;;
-	2)
-		tail -f ${configPathLog}access.log
-		;;
-	3)
-		tail -f ${configPathLog}error.log
-		;;
-	4)
-		tail -n 100 /etc/v2ray-agent/crontab_tls.log
-		;;
-	5)
-		tail -n 100 /etc/v2ray-agent/tls/acme.log
-		;;
-	6)
-		echo >${configPathLog}access.log
-		echo >${configPathLog}error.log
-		;;
-	esac
-}
-
-# 鑴氭湰蹇嵎鏂瑰紡
-aliasInstall() {
-
-	if [[ -f "$HOME/install.sh" ]] && [[ -d "/etc/v2ray-agent" ]] && grep <"$HOME/install.sh" -q "浣滆��:mack-a"; then
-		mv "$HOME/install.sh" /etc/v2ray-agent/install.sh
-		local vasmaType=
-		if [[ -d "/usr/bin/" ]]; then
-			if [[ ! -f "/usr/bin/vasma" ]]; then
-				ln -s /etc/v2ray-agent/install.sh /usr/bin/vasma
-				chmod 700 /usr/bin/vasma
-				vasmaType=true
-			fi
-
-			rm -rf "$HOME/install.sh"
-		elif [[ -d "/usr/sbin" ]]; then
-			if [[ ! -f "/usr/sbin/vasma" ]]; then
-				ln -s /etc/v2ray-agent/install.sh /usr/sbin/vasma
-				chmod 700 /usr/sbin/vasma
-				vasmaType=true
-			fi
-			rm -rf "$HOME/install.sh"
-		fi
-		if [[ "${vasmaType}" == "true" ]]; then
-			echoContent green "蹇嵎鏂瑰紡鍒涘缓鎴愬姛锛屽彲鎵ц[vasma]閲嶆柊鎵撳紑鑴氭湰"
-		fi
-	fi
-}
-
-# 妫�鏌pv6銆乮pv4
-checkIPv6() {
-	# pingIPv6=$(ping6 -c 1 www.google.com | sed '2{s/[^(]*(//;s/).*//;q;}' | tail -n +2)
-	pingIPv6=$(ping6 -c 1 www.google.com | sed -n '1p' | sed 's/.*(//g;s/).*//g')
-
-	if [[ -z "${pingIPv6}" ]]; then
-		echoContent red " ---> 涓嶆敮鎸乮pv6"
-		exit 0
-	fi
-}
-
-# ipv6 鍒嗘祦
-ipv6Routing() {
-	if [[ -z "${configPath}" ]]; then
-		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
-		menu
-		exit 0
-	fi
-
-	checkIPv6
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : IPv6鍒嗘祦"
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.娣诲姞鍩熷悕"
-	echoContent yellow "2.鍗歌浇IPv6鍒嗘祦"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" ipv6Status
-	if [[ "${ipv6Status}" == "1" ]]; then
-		echoContent red "=============================================================="
-		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-		echoContent yellow "6.褰曞叆绀轰緥:google,youtube,facebook\n"
-		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-
-			unInstallRouting IPv6-out outboundTag
-
-			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"IPv6-out\"}]" ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-
-		else
-			cat <<EOF >"${configPath}09_routing.json"
-{
-    "routing":{
-        "domainStrategy": "IPOnDemand",
-        "rules": [
-          {
-            "type": "field",
-            "domain": [
-            	"geosite:${domainList//,/\",\"geosite:}"
-            ],
-            "outboundTag": "IPv6-out"
-          }
-        ]
-  }
-}
-EOF
-		fi
-
-		unInstallOutbounds IPv6-out
-
-		outbounds=$(jq -r '.outbounds += [{"protocol":"freedom","settings":{"domainStrategy":"UseIPv6"},"tag":"IPv6-out"}]' ${configPath}10_ipv4_outbounds.json)
-
-		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
-
-		echoContent green " ---> 娣诲姞鎴愬姛"
-
-	elif [[ "${ipv6Status}" == "2" ]]; then
-
-		unInstallRouting IPv6-out outboundTag
-
-		unInstallOutbounds IPv6-out
-
-		echoContent green " ---> IPv6鍒嗘祦鍗歌浇鎴愬姛"
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-		exit 0
-	fi
-
-	reloadCore
-}
-
-# bt涓嬭浇绠$悊
-btTools() {
-	if [[ -z "${configPath}" ]]; then
-		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
-		menu
-		exit 0
-	fi
-
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : bt涓嬭浇绠$悊"
-	echoContent red "\n=============================================================="
-
-	if [[ -f ${configPath}09_routing.json ]] && grep -q bittorrent <${configPath}09_routing.json; then
-		echoContent yellow "褰撳墠鐘舵��:宸茬鐢�"
-	else
-		echoContent yellow "褰撳墠鐘舵��:鏈鐢�"
-	fi
-
-	echoContent yellow "1.绂佺敤"
-	echoContent yellow "2.鎵撳紑"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" btStatus
-	if [[ "${btStatus}" == "1" ]]; then
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-
-			unInstallRouting blackhole-out outboundTag
-
-			routing=$(jq -r '.routing.rules += [{"type":"field","outboundTag":"blackhole-out","protocol":["bittorrent"]}]' ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-
-		else
-			cat <<EOF >${configPath}09_routing.json
-{
-    "routing":{
-        "domainStrategy": "IPOnDemand",
-        "rules": [
-          {
-            "type": "field",
-            "outboundTag": "blackhole-out",
-            "protocol": [ "bittorrent" ]
-          }
-        ]
-  }
-}
-EOF
-		fi
-
-		installSniffing
-
-		unInstallOutbounds blackhole-out
-
-		outbounds=$(jq -r '.outbounds += [{"protocol":"blackhole","tag":"blackhole-out"}]' ${configPath}10_ipv4_outbounds.json)
-
-		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
-
-		echoContent green " ---> BT涓嬭浇绂佺敤鎴愬姛"
-
-	elif [[ "${btStatus}" == "2" ]]; then
-
-		unInstallSniffing
-
-		unInstallRouting blackhole-out outboundTag bittorrent
-
-		#		unInstallOutbounds blackhole-out
-
-		echoContent green " ---> BT涓嬭浇鎵撳紑鎴愬姛"
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-		exit 0
-	fi
-
-	reloadCore
-}
-
-# 鍩熷悕榛戝悕鍗�
-blacklist() {
-	if [[ -z "${configPath}" ]]; then
-		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
-		menu
-		exit 0
-	fi
-
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鍩熷悕榛戝悕鍗�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.娣诲姞鍩熷悕"
-	echoContent yellow "2.鍒犻櫎榛戝悕鍗�"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" blacklistStatus
-	if [[ "${blacklistStatus}" == "1" ]]; then
-		echoContent red "=============================================================="
-		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-		echoContent yellow "6.褰曞叆绀轰緥:speedtest,facebook\n"
-		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-			unInstallRouting blackhole-out outboundTag
-
-			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"blackhole-out\"}]" ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-
-		else
-			cat <<EOF >${configPath}09_routing.json
-{
-    "routing":{
-        "domainStrategy": "IPOnDemand",
-        "rules": [
-          {
-            "type": "field",
-            "domain": [
-            	"geosite:${domainList//,/\",\"geosite:}"
-            ],
-            "outboundTag": "blackhole-out"
-          }
-        ]
-  }
-}
-EOF
-		fi
-
-		echoContent green " ---> 娣诲姞鎴愬姛"
-
-	elif [[ "${blacklistStatus}" == "2" ]]; then
-
-		unInstallRouting blackhole-out outboundTag
-
-		echoContent green " ---> 鍩熷悕榛戝悕鍗曞垹闄ゆ垚鍔�"
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-		exit 0
-	fi
-	reloadCore
-}
-
-# 鏍规嵁tag鍗歌浇Routing
-unInstallRouting() {
-	local tag=$1
-	local type=$2
-	local protocol=$3
-
-	if [[ -f "${configPath}09_routing.json" ]]; then
-		local routing
-		if grep -q "${tag}" ${configPath}09_routing.json && grep -q "${type}" ${configPath}09_routing.json; then
-
-			jq -c .routing.rules[] ${configPath}09_routing.json | while read -r line; do
-				local index=$((index + 1))
-				local delStatus=0
-				if [[ "${type}" == "outboundTag" ]] && echo "${line}" | jq .outboundTag | grep -q "${tag}"; then
-					delStatus=1
-				elif [[ "${type}" == "inboundTag" ]] && echo "${line}" | jq .inboundTag | grep -q "${tag}"; then
-					delStatus=1
-				fi
-
-				if [[ -n ${protocol} ]] && echo "${line}" | jq .protocol | grep -q "${protocol}"; then
-					delStatus=1
-				elif [[ -z ${protocol} ]] && [[ $(echo "${line}" | jq .protocol) != "null" ]]; then
-					delStatus=0
-				fi
-
-				if [[ ${delStatus} == 1 ]]; then
-					routing=$(jq -r 'del(.routing.rules['"$(("${index}" - 1))"'])' ${configPath}09_routing.json)
-					echo "${routing}" | jq . >${configPath}09_routing.json
-				fi
-			done
-		fi
-	fi
-}
-
-# 鏍规嵁tag鍗歌浇鍑虹珯
-unInstallOutbounds() {
-	local tag=$1
-
-	if grep -q "${tag}" ${configPath}10_ipv4_outbounds.json; then
-		local ipv6OutIndex
-		ipv6OutIndex=$(jq .outbounds[].tag ${configPath}10_ipv4_outbounds.json | awk '{print ""NR""":"$0}' | grep "${tag}" | awk -F "[:]" '{print $1}' | head -1)
-		if [[ ${ipv6OutIndex} -gt 0 ]]; then
-			routing=$(jq -r 'del(.outbounds['$(("${ipv6OutIndex}" - 1))'])' ${configPath}10_ipv4_outbounds.json)
-			echo "${routing}" | jq . >${configPath}10_ipv4_outbounds.json
-		fi
-	fi
-
-}
-
-# 鍗歌浇鍡呮帰
-unInstallSniffing() {
-
-	find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
-		sniffing=$(jq -r 'del(.inbounds[0].sniffing)' "${configPath}${inbound}")
-		echo "${sniffing}" | jq . >"${configPath}${inbound}"
-	done
-}
-
-# 瀹夎鍡呮帰
-installSniffing() {
-
-	find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
-		sniffing=$(jq -r '.inbounds[0].sniffing = {"enabled":true,"destOverride":["http","tls"]}' "${configPath}${inbound}")
-		echo "${sniffing}" | jq . >"${configPath}${inbound}"
-	done
-}
-
-# warp鍒嗘祦
-warpRouting() {
-	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : WARP鍒嗘祦"
-	echoContent red "=============================================================="
-	#	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	#	echoContent yellow "1.瀹樻柟warp缁忚繃鍑犺疆娴嬭瘯鏈塨ug锛岄噸鍚細瀵艰嚧warp澶辨晥锛屽苟涓旀棤娉曞惎鍔紝涔熸湁鍙兘CPU浣跨敤鐜囨毚娑�"
-	#	echoContent yellow "2.涓嶉噸鍚満鍣ㄥ彲姝e父浣跨敤锛屽鏋滈潪瑕佷娇鐢ㄥ畼鏂箇arp锛屽缓璁笉閲嶅惎鏈哄櫒"
-	#	echoContent yellow "3.鏈夌殑鏈哄櫒閲嶅惎鍚庝粛姝e父浣跨敤"
-	#	echoContent yellow "4.閲嶅惎鍚庢棤娉曚娇鐢紝涔熷彲鍗歌浇閲嶆柊瀹夎"
-	# 瀹夎warp
-	if [[ -z $(which warp-cli) ]]; then
-		echo
-		read -r -p "WARP鏈畨瑁咃紝鏄惁瀹夎 锛焄y/n]:" installCloudflareWarpStatus
-		if [[ "${installCloudflareWarpStatus}" == "y" ]]; then
-			installWarp
-		else
-			echoContent yellow " ---> 鏀惧純瀹夎"
-			exit 0
-		fi
-	fi
-
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.娣诲姞鍩熷悕"
-	echoContent yellow "2.鍗歌浇WARP鍒嗘祦"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" warpStatus
-	if [[ "${warpStatus}" == "1" ]]; then
-		echoContent red "=============================================================="
-		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-		echoContent yellow "3.鍙彲浠ユ妸娴侀噺鍒嗘祦缁檞arp锛屼笉鍙寚瀹氭槸ipv4鎴栬�卛pv6"
-		echoContent yellow "4.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-		echoContent yellow "5.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-		echoContent yellow "6.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-		echoContent yellow "7.褰曞叆绀轰緥:google,youtube,facebook\n"
-		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-			unInstallRouting warp-socks-out outboundTag
-
-			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"warp-socks-out\"}]" ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-
-		else
-			cat <<EOF >${configPath}09_routing.json
-{
-    "routing":{
-        "domainStrategy": "IPOnDemand",
-        "rules": [
-          {
-            "type": "field",
-            "domain": [
-            	"geosite:${domainList//,/\",\"geosite:}"
-            ],
-            "outboundTag": "warp-socks-out"
-          }
-        ]
-  }
-}
-EOF
-		fi
-		unInstallOutbounds warp-socks-out
-
-		local outbounds
-		outbounds=$(jq -r '.outbounds += [{"protocol":"socks","settings":{"servers":[{"address":"127.0.0.1","port":31303}]},"tag":"warp-socks-out"}]' ${configPath}10_ipv4_outbounds.json)
-
-		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
-
-		echoContent green " ---> 娣诲姞鎴愬姛"
-
-	elif [[ "${warpStatus}" == "2" ]]; then
-
-		${removeType} cloudflare-warp >/dev/null 2>&1
-
-		unInstallRouting warp-socks-out outboundTag
-
-		unInstallOutbounds warp-socks-out
-
-		echoContent green " ---> WARP鍒嗘祦鍗歌浇鎴愬姛"
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-		exit 0
-	fi
-	reloadCore
-}
-# 娴佸獟浣撳伐鍏风
-streamingToolbox() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 娴佸獟浣撳伐鍏风"
-	echoContent red "\n=============================================================="
-	#	echoContent yellow "1.Netflix妫�娴�"
-	echoContent yellow "1.浠绘剰闂ㄨ惤鍦版満瑙i攣娴佸獟浣�"
-	echoContent yellow "2.DNS瑙i攣娴佸獟浣�"
-	echoContent yellow "3.VMess+WS+TLS瑙i攣娴佸獟浣�"
-	read -r -p "璇烽�夋嫨:" selectType
-
-	case ${selectType} in
-	1)
-		dokodemoDoorUnblockStreamingMedia
-		;;
-	2)
-		dnsUnlockNetflix
-		;;
-	3)
-		unblockVMessWSTLSStreamingMedia
-		;;
-	esac
-
-}
-
-# 浠绘剰闂ㄨВ閿佹祦濯掍綋
-dokodemoDoorUnblockStreamingMedia() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 浠绘剰闂ㄨ惤鍦版満瑙i攣娴佸獟浣�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」"
-	echoContent yellow "浠绘剰闂ㄨВ閿佽瑙o紝璇锋煡鐪嬫鏂囩珷[https://github.com/mack-a/v2ray-agent/blob/master/documents/netflix/dokodemo-unblock_netflix.md]\n"
-
-	echoContent yellow "1.娣诲姞鍑虹珯"
-	echoContent yellow "2.娣诲姞鍏ョ珯"
-	echoContent yellow "3.鍗歌浇"
-	read -r -p "璇烽�夋嫨:" selectType
-
-	case ${selectType} in
-	1)
-		setDokodemoDoorUnblockStreamingMediaOutbounds
-		;;
-	2)
-		setDokodemoDoorUnblockStreamingMediaInbounds
-		;;
-	3)
-		removeDokodemoDoorUnblockStreamingMedia
-		;;
-	esac
-}
-
-# VMess+WS+TLS 鍑烘垬瑙i攣娴佸獟浣撱�愪粎鍑虹珯銆�
-unblockVMessWSTLSStreamingMedia() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : VMess+WS+TLS 鍑虹珯瑙i攣娴佸獟浣�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」"
-	echoContent yellow "閫傚悎閫氳繃鍏朵粬鏈嶅姟鍟嗘彁渚涚殑VMess瑙i攣鏈嶅姟\n"
-
-	echoContent yellow "1.娣诲姞鍑虹珯"
-	echoContent yellow "2.鍗歌浇"
-	read -r -p "璇烽�夋嫨:" selectType
-
-	case ${selectType} in
-	1)
-		setVMessWSTLSUnblockStreamingMediaOutbounds
-		;;
-	2)
-		removeVMessWSTLSUnblockStreamingMedia
-		;;
-	esac
-}
-
-# 璁剧疆VMess+WS+TLS瑙i攣Netflix銆愪粎鍑虹珯銆�
-setVMessWSTLSUnblockStreamingMediaOutbounds() {
-	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋VMess+WS+TLS鐨勫湴鍧�:" setVMessWSTLSAddress
-	echoContent red "=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-	echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu\n"
-	read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-
-	if [[ -z ${domainList} ]]; then
-		echoContent red " ---> 鍩熷悕涓嶅彲涓虹┖"
-		setVMessWSTLSUnblockStreamingMediaOutbounds
-	fi
-
-	if [[ -n "${setVMessWSTLSAddress}" ]]; then
-
-		unInstallOutbounds VMess-out
-
-		echo
-		read -r -p "璇疯緭鍏Mess+WS+TLS鐨勭鍙�:" setVMessWSTLSPort
-		echo
-		if [[ -z "${setVMessWSTLSPort}" ]]; then
-			echoContent red " ---> 绔彛涓嶅彲涓虹┖"
-		fi
-
-		read -r -p "璇疯緭鍏Mess+WS+TLS鐨刄UID:" setVMessWSTLSUUID
-		echo
-		if [[ -z "${setVMessWSTLSUUID}" ]]; then
-			echoContent red " ---> UUID涓嶅彲涓虹┖"
-		fi
-
-		read -r -p "璇疯緭鍏Mess+WS+TLS鐨凱ath璺緞:" setVMessWSTLSPath
-		echo
-		if [[ -z "${setVMessWSTLSPath}" ]]; then
-			echoContent red " ---> 璺緞涓嶅彲涓虹┖"
-		fi
-
-		outbounds=$(jq -r ".outbounds += [{\"tag\":\"VMess-out\",\"protocol\":\"vmess\",\"streamSettings\":{\"network\":\"ws\",\"security\":\"tls\",\"tlsSettings\":{\"allowInsecure\":false},\"wsSettings\":{\"path\":\"${setVMessWSTLSPath}\"}},\"mux\":{\"enabled\":true,\"concurrency\":8},\"settings\":{\"vnext\":[{\"address\":\"${setVMessWSTLSAddress}\",\"port\":${setVMessWSTLSPort},\"users\":[{\"id\":\"${setVMessWSTLSUUID}\",\"security\":\"auto\",\"alterId\":0}]}]}}]" ${configPath}10_ipv4_outbounds.json)
-
-		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-			unInstallRouting VMess-out outboundTag
-
-			local routing
-
-			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"VMess-out\"}]" ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-		else
-			cat <<EOF >${configPath}09_routing.json
-{
-  "routing": {
-    "rules": [
-      {
-        "type": "field",
-        "domain": [
-          "ip.sb",
-          "geosite:${domainList//,/\",\"geosite:}"
-        ],
-        "outboundTag": "VMess-out"
-      }
-    ]
-  }
-}
-EOF
-		fi
-		reloadCore
-		echoContent green " ---> 娣诲姞鍑虹珯瑙i攣鎴愬姛"
-		exit 0
-	fi
-	echoContent red " ---> 鍦板潃涓嶅彲涓虹┖"
-	setVMessWSTLSUnblockStreamingMediaOutbounds
-}
-
-# 璁剧疆浠绘剰闂ㄨВ閿丯etflix銆愬嚭绔欍��
-setDokodemoDoorUnblockStreamingMediaOutbounds() {
-	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋 vps鐨処P:" setIP
-	echoContent red "=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-	echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu\n"
-	read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-
-	if [[ -z ${domainList} ]]; then
-		echoContent red " ---> 鍩熷悕涓嶅彲涓虹┖"
-		setDokodemoDoorUnblockStreamingMediaOutbounds
-	fi
-
-	if [[ -n "${setIP}" ]]; then
-
-		unInstallOutbounds streamingMedia-80
-		unInstallOutbounds streamingMedia-443
-
-		outbounds=$(jq -r ".outbounds += [{\"tag\":\"streamingMedia-80\",\"protocol\":\"freedom\",\"settings\":{\"domainStrategy\":\"AsIs\",\"redirect\":\"${setIP}:22387\"}},{\"tag\":\"streamingMedia-443\",\"protocol\":\"freedom\",\"settings\":{\"domainStrategy\":\"AsIs\",\"redirect\":\"${setIP}:22388\"}}]" ${configPath}10_ipv4_outbounds.json)
-
-		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-			unInstallRouting streamingMedia-80 outboundTag
-			unInstallRouting streamingMedia-443 outboundTag
-
-			local routing
-
-			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"port\":80,\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"streamingMedia-80\"},{\"type\":\"field\",\"port\":443,\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"streamingMedia-443\"}]" ${configPath}09_routing.json)
-
-			echo "${routing}" | jq . >${configPath}09_routing.json
-		else
-			cat <<EOF >${configPath}09_routing.json
-{
-  "routing": {
-    "domainStrategy": "AsIs",
-    "rules": [
-      {
-        "type": "field",
-        "port": 80,
-        "domain": [
-          "ip.sb",
-          "geosite:${domainList//,/\",\"geosite:}"
-        ],
-        "outboundTag": "streamingMedia-80"
-      },
-      {
-        "type": "field",
-        "port": 443,
-        "domain": [
-          "ip.sb",
-          "geosite:${domainList//,/\",\"geosite:}"
-        ],
-        "outboundTag": "streamingMedia-443"
-      }
-    ]
-  }
-}
-EOF
-		fi
-		reloadCore
-		echoContent green " ---> 娣诲姞鍑虹珯瑙i攣鎴愬姛"
-		exit 0
-	fi
-	echoContent red " ---> ip涓嶅彲涓虹┖"
-}
-
-# 璁剧疆浠绘剰闂ㄨВ閿丯etflix銆愬叆绔欍��
-setDokodemoDoorUnblockStreamingMediaInbounds() {
-
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 浠绘剰闂ㄦ坊鍔犲叆绔�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-	echoContent yellow "6.ip褰曞叆绀轰緥:1.1.1.1,1.1.1.2"
-	echoContent yellow "7.涓嬮潰鐨勫煙鍚嶄竴瀹氳鍜屽嚭绔欑殑vps涓�鑷�"
-	#	echoContent yellow "8.濡傛湁闃茬伀澧欒鎵嬪姩寮�鍚�22387銆�22388绔彛"
-	echoContent yellow "8.鍩熷悕褰曞叆绀轰緥:netflix,disney,hulu\n"
-	read -r -p "璇疯緭鍏ュ厑璁歌闂瑙i攣 vps鐨処P:" setIPs
-	if [[ -n "${setIPs}" ]]; then
-		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-		allowPort 22387
-		allowPort 22388
-
-		cat <<EOF >${configPath}01_netflix_inbounds.json
-{
-  "inbounds": [
-    {
-      "listen": "0.0.0.0",
-      "port": 22387,
-      "protocol": "dokodemo-door",
-      "settings": {
-        "address": "0.0.0.0",
-        "port": 80,
-        "network": "tcp",
-        "followRedirect": false
-      },
-      "sniffing": {
-        "enabled": true,
-        "destOverride": [
-          "http"
-        ]
-      },
-      "tag": "streamingMedia-80"
-    },
-    {
-      "listen": "0.0.0.0",
-      "port": 22388,
-      "protocol": "dokodemo-door",
-      "settings": {
-        "address": "0.0.0.0",
-        "port": 443,
-        "network": "tcp",
-        "followRedirect": false
-      },
-      "sniffing": {
-        "enabled": true,
-        "destOverride": [
-          "tls"
-        ]
-      },
-      "tag": "streamingMedia-443"
-    }
-  ]
-}
-EOF
-
-		cat <<EOF >${configPath}10_ipv4_outbounds.json
-{
-    "outbounds":[
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv4"
-            },
-            "tag":"IPv4-out"
-        },
-        {
-            "protocol":"freedom",
-            "settings":{
-                "domainStrategy":"UseIPv6"
-            },
-            "tag":"IPv6-out"
-        },
-        {
-            "protocol":"blackhole",
-            "tag":"blackhole-out"
-        }
-    ]
-}
-EOF
-
-		if [[ -f "${configPath}09_routing.json" ]]; then
-			unInstallRouting streamingMedia-80 inboundTag
-			unInstallRouting streamingMedia-443 inboundTag
-
-			local routing
-			routing=$(jq -r ".routing.rules += [{\"source\":[\"${setIPs//,/\",\"}\"],\"type\":\"field\",\"inboundTag\":[\"streamingMedia-80\",\"streamingMedia-443\"],\"outboundTag\":\"direct\"},{\"domains\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"type\":\"field\",\"inboundTag\":[\"streamingMedia-80\",\"streamingMedia-443\"],\"outboundTag\":\"blackhole-out\"}]" ${configPath}09_routing.json)
-			echo "${routing}" | jq . >${configPath}09_routing.json
-		else
-			cat <<EOF >${configPath}09_routing.json
-            {
-              "routing": {
-                "rules": [
-                  {
-                    "source": [
-                    	"${setIPs//,/\",\"}"
-                    ],
-                    "type": "field",
-                    "inboundTag": [
-                      "streamingMedia-80",
-                      "streamingMedia-443"
-                    ],
-                    "outboundTag": "direct"
-                  },
-                  {
-                    "domains": [
-                    	"geosite:${domainList//,/\",\"geosite:}"
-                    ],
-                    "type": "field",
-                    "inboundTag": [
-                      "streamingMedia-80",
-                      "streamingMedia-443"
-                    ],
-                    "outboundTag": "blackhole-out"
-                  }
-                ]
-              }
-            }
-EOF
-
-		fi
-
-		reloadCore
-		echoContent green " ---> 娣诲姞钀藉湴鏈哄叆绔欒В閿佹垚鍔�"
-		exit 0
-	fi
-	echoContent red " ---> ip涓嶅彲涓虹┖"
-}
-
-# 绉婚櫎浠绘剰闂ㄨВ閿丯etflix
-removeDokodemoDoorUnblockStreamingMedia() {
-
-	unInstallOutbounds streamingMedia-80
-	unInstallOutbounds streamingMedia-443
-
-	unInstallRouting streamingMedia-80 inboundTag
-	unInstallRouting streamingMedia-443 inboundTag
-
-	unInstallRouting streamingMedia-80 outboundTag
-	unInstallRouting streamingMedia-443 outboundTag
-
-	rm -rf ${configPath}01_netflix_inbounds.json
-
-	reloadCore
-	echoContent green " ---> 鍗歌浇鎴愬姛"
-}
-
-# 绉婚櫎VMess+WS+TLS瑙i攣娴佸獟浣�
-removeVMessWSTLSUnblockStreamingMedia() {
-
-	unInstallOutbounds VMess-out
-
-	unInstallRouting VMess-out outboundTag
-
-	reloadCore
-	echoContent green " ---> 鍗歌浇鎴愬姛"
-}
-
-# 閲嶅惎鏍稿績
-reloadCore() {
-	if [[ "${coreInstallType}" == "1" ]]; then
-		handleXray stop
-		handleXray start
-	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
-		handleV2Ray stop
-		handleV2Ray start
-	fi
-}
-
-# dns瑙i攣Netflix
-dnsUnlockNetflix() {
-	if [[ -z "${configPath}" ]]; then
-		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
-		menu
-		exit 0
-	fi
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : DNS瑙i攣娴佸獟浣�"
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.娣诲姞"
-	echoContent yellow "2.鍗歌浇"
-	read -r -p "璇烽�夋嫨:" selectType
-
-	case ${selectType} in
-	1)
-		setUnlockDNS
-		;;
-	2)
-		removeUnlockDNS
-		;;
-	esac
-}
-
-# 璁剧疆dns
-setUnlockDNS() {
-	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋DNS:" setDNS
-	if [[ -n ${setDNS} ]]; then
-		echoContent red "=============================================================="
-		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
-		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
-		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
-		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
-		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
-		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
-		echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu"
-		echoContent yellow "7.榛樿鏂规璇疯緭鍏�1锛岄粯璁ゆ柟妗堝寘鎷互涓嬪唴瀹�"
-		echoContent yellow "netflix,bahamut,hulu,hbo,disney,bbc,4chan,fox,abema,dmm,niconico,pixiv,bilibili,viu"
-		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
-		if [[ "${domainList}" == "1" ]]; then
-			cat <<EOF >${configPath}11_dns.json
-            {
-            	"dns": {
-            		"servers": [
-            			{
-            				"address": "${setDNS}",
-            				"port": 53,
-            				"domains": [
-            					"geosite:netflix",
-            					"geosite:bahamut",
-            					"geosite:hulu",
-            					"geosite:hbo",
-            					"geosite:disney",
-            					"geosite:bbc",
-            					"geosite:4chan",
-            					"geosite:fox",
-            					"geosite:abema",
-            					"geosite:dmm",
-            					"geosite:niconico",
-            					"geosite:pixiv",
-            					"geosite:bilibili",
-            					"geosite:viu"
-            				]
-            			},
-            		"localhost"
-            		]
-            	}
-            }
-EOF
-		elif [[ -n "${domainList}" ]]; then
-			cat <<EOF >${configPath}11_dns.json
-                        {
-                        	"dns": {
-                        		"servers": [
-                        			{
-                        				"address": "${setDNS}",
-                        				"port": 53,
-                        				"domains": [
-                        					"geosite:${domainList//,/\",\"geosite:}"
-                        				]
-                        			},
-                        		"localhost"
-                        		]
-                        	}
-                        }
-EOF
-		fi
-
-		reloadCore
-
-		echoContent yellow "\n ---> 濡傝繕鏃犳硶瑙傜湅鍙互灏濊瘯浠ヤ笅涓ょ鏂规"
-		echoContent yellow " 1.閲嶅惎vps"
-		echoContent yellow " 2.鍗歌浇dns瑙i攣鍚庯紝淇敼鏈湴鐨刐/etc/resolv.conf]DNS璁剧疆骞堕噸鍚痸ps\n"
-	else
-		echoContent red " ---> dns涓嶅彲涓虹┖"
-	fi
-	exit 0
-}
-
-# 绉婚櫎Netflix瑙i攣
-removeUnlockDNS() {
-	cat <<EOF >${configPath}11_dns.json
-{
-	"dns": {
-		"servers": [
-			"localhost"
-		]
-	}
-}
-EOF
-	reloadCore
-
-	echoContent green " ---> 鍗歌浇鎴愬姛"
-
-	exit 0
-}
-
-# v2ray-core涓�у寲瀹夎
-customV2RayInstall() {
-	echoContent skyBlue "\n========================涓�у寲瀹夎============================"
-	echoContent yellow "VLESS鍓嶇疆锛岄粯璁ゅ畨瑁�0锛屽鏋滃彧闇�瑕佸畨瑁�0锛屽垯鍙�夋嫨0鍗冲彲"
-	echoContent yellow "0.VLESS+TLS/XTLS+TCP"
-	echoContent yellow "1.VLESS+TLS+WS[CDN]"
-	echoContent yellow "2.Trojan+TLS+gRPC[CDN]"
-	echoContent yellow "3.VMess+TLS+WS[CDN]"
-	echoContent yellow "4.Trojan"
-	echoContent yellow "5.VLESS+TLS+gRPC[CDN]"
-	read -r -p "璇烽�夋嫨[澶氶�塢锛孾渚嬪:123]:" selectCustomInstallType
-	echoContent skyBlue "--------------------------------------------------------------"
-	if [[ -z ${selectCustomInstallType} ]]; then
-		selectCustomInstallType=0
-	fi
-	if [[ "${selectCustomInstallType}" =~ ^[0-5]+$ ]]; then
-		cleanUp xrayClean
-		totalProgress=17
-		installTools 1
-		# 鐢宠tls
-		initTLSNginxConfig 2
-		installTLS 3
-		handleNginx stop
-		# 闅忔満path
-		if echo ${selectCustomInstallType} | grep -q 1 || echo ${selectCustomInstallType} | grep -q 3 || echo ${selectCustomInstallType} | grep -q 4; then
-			randomPathFunction 5
-			customCDNIP 6
-		fi
-		nginxBlog 7
-		updateRedirectNginxConf
-		handleNginx start
-
-		# 瀹夎V2Ray
-		installV2Ray 8
-		installV2RayService 9
-		initV2RayConfig custom 10
-		cleanUp xrayDel
-		installCronTLS 14
-		handleV2Ray stop
-		handleV2Ray start
-		# 鐢熸垚璐﹀彿
-		checkGFWStatue 15
-		showAccounts 16
-	else
-		echoContent red " ---> 杈撳叆涓嶅悎娉�"
-		customV2RayInstall
-	fi
-}
-
-# Xray-core涓�у寲瀹夎
-customXrayInstall() {
-	echoContent skyBlue "\n========================涓�у寲瀹夎============================"
-	echoContent yellow "VLESS鍓嶇疆锛岄粯璁ゅ畨瑁�0锛屽鏋滃彧闇�瑕佸畨瑁�0锛屽垯鍙�夋嫨0鍗冲彲"
-	echoContent yellow "0.VLESS+TLS/XTLS+TCP"
-	echoContent yellow "1.VLESS+TLS+WS[CDN]"
-	echoContent yellow "2.Trojan+TLS+gRPC[CDN]"
-	echoContent yellow "3.VMess+TLS+WS[CDN]"
-	echoContent yellow "4.Trojan"
-	echoContent yellow "5.VLESS+TLS+gRPC[CDN]"
-	read -r -p "璇烽�夋嫨[澶氶�塢锛孾渚嬪:123]:" selectCustomInstallType
-	echoContent skyBlue "--------------------------------------------------------------"
-	if [[ -z ${selectCustomInstallType} ]]; then
-		echoContent red " ---> 涓嶅彲涓虹┖"
-		customXrayInstall
-	elif [[ "${selectCustomInstallType}" =~ ^[0-5]+$ ]]; then
-		cleanUp v2rayClean
-		totalProgress=17
-		installTools 1
-		# 鐢宠tls
-		initTLSNginxConfig 2
-		installTLS 3
-		handleNginx stop
-		# 闅忔満path
-		if echo "${selectCustomInstallType}" | grep -q 1 || echo "${selectCustomInstallType}" | grep -q 2 || echo "${selectCustomInstallType}" | grep -q 3 || echo "${selectCustomInstallType}" | grep -q 5; then
-			randomPathFunction 5
-			customCDNIP 6
-		fi
-		nginxBlog 7
-		updateRedirectNginxConf
-		handleNginx start
-
-		# 瀹夎V2Ray
-		installXray 8
-		installXrayService 9
-		initXrayConfig custom 10
-		cleanUp v2rayDel
-
-		installCronTLS 14
-		handleXray stop
-		handleXray start
-		# 鐢熸垚璐﹀彿
-		checkGFWStatue 15
-		showAccounts 16
-	else
-		echoContent red " ---> 杈撳叆涓嶅悎娉�"
-		customXrayInstall
-	fi
-}
-
-# 閫夋嫨鏍稿績瀹夎---v2ray-core銆亁ray-core
-selectCoreInstall() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 閫夋嫨鏍稿績瀹夎"
-	echoContent red "\n=============================================================="
-	echoContent yellow "1.Xray-core"
-	echoContent yellow "2.v2ray-core"
-	echoContent red "=============================================================="
-	read -r -p "璇烽�夋嫨:" selectCoreType
-	case ${selectCoreType} in
-	1)
-		if [[ "${selectInstallType}" == "2" ]]; then
-			customXrayInstall
-		else
-			xrayCoreInstall
-		fi
-		;;
-	2)
-		v2rayCoreVersion=
-		if [[ "${selectInstallType}" == "2" ]]; then
-			customV2RayInstall
-		else
-			v2rayCoreInstall
-		fi
-		;;
-	3)
-		v2rayCoreVersion=v4.32.1
-		if [[ "${selectInstallType}" == "2" ]]; then
-			customV2RayInstall
-		else
-			v2rayCoreInstall
-		fi
-		;;
-	*)
-		echoContent red ' ---> 閫夋嫨閿欒锛岄噸鏂伴�夋嫨'
-		selectCoreInstall
-		;;
-	esac
-}
-
-# v2ray-core 瀹夎
-v2rayCoreInstall() {
-	cleanUp xrayClean
-	selectCustomInstallType=
-	totalProgress=13
-	installTools 2
-	# 鐢宠tls
-	initTLSNginxConfig 3
-	installTLS 4
-	handleNginx stop
-	#	initNginxConfig 5
-	randomPathFunction 5
-	# 瀹夎V2Ray
-	installV2Ray 6
-	installV2RayService 7
-	customCDNIP 8
-	initV2RayConfig all 9
-	cleanUp xrayDel
-	installCronTLS 10
-	nginxBlog 11
-	updateRedirectNginxConf
-	handleV2Ray stop
-	sleep 2
-	handleV2Ray start
-	handleNginx start
-	# 鐢熸垚璐﹀彿
-	checkGFWStatue 12
-	showAccounts 13
-}
-
-# xray-core 瀹夎
-xrayCoreInstall() {
-	cleanUp v2rayClean
-	selectCustomInstallType=
-	totalProgress=13
-	installTools 2
-	# 鐢宠tls
-	initTLSNginxConfig 3
-	installTLS 4
-	handleNginx stop
-	randomPathFunction 5
-	# 瀹夎Xray
-	# handleV2Ray stop
-	installXray 6
-	installXrayService 7
-	customCDNIP 8
-	initXrayConfig all 9
-	cleanUp v2rayDel
-	installCronTLS 10
-	nginxBlog 11
-	updateRedirectNginxConf
-	handleXray stop
-	sleep 2
-	handleXray start
-
-	handleNginx start
-	# 鐢熸垚璐﹀彿
-	checkGFWStatue 12
-	showAccounts 13
-}
-
-# 鏍稿績绠$悊
-coreVersionManageMenu() {
-
-	if [[ -z "${coreInstallType}" ]]; then
-		echoContent red "\n ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
-		menu
-		exit 0
-	fi
-	if [[ "${coreInstallType}" == "1" ]]; then
-		xrayVersionManageMenu 1
-	elif [[ "${coreInstallType}" == "2" ]]; then
-		v2rayCoreVersion=
-		v2rayVersionManageMenu 1
-
-	elif [[ "${coreInstallType}" == "3" ]]; then
-		v2rayCoreVersion=v4.32.1
-		v2rayVersionManageMenu 1
-	fi
-}
-# 瀹氭椂浠诲姟妫�鏌ヨ瘉涔�
-cronRenewTLS() {
-	if [[ "${renewTLS}" == "RenewTLS" ]]; then
-		renewalTLS
-		exit 0
-	fi
-}
-# 璐﹀彿绠$悊
-manageAccount() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 璐﹀彿绠$悊"
-	echoContent red "\n=============================================================="
-	echoContent yellow "# 姣忔鍒犻櫎銆佹坊鍔犺处鍙峰悗锛岄渶瑕侀噸鏂版煡鐪嬭闃呯敓鎴愯闃匼n"
-	echoContent yellow "1.鏌ョ湅璐﹀彿"
-	echoContent yellow "2.鏌ョ湅璁㈤槄"
-	echoContent yellow "3.娣诲姞鐢ㄦ埛"
-	echoContent yellow "4.鍒犻櫎鐢ㄦ埛"
-	echoContent red "=============================================================="
-	read -r -p "璇疯緭鍏�:" manageAccountStatus
-	if [[ "${manageAccountStatus}" == "1" ]]; then
-		showAccounts 1
-	elif [[ "${manageAccountStatus}" == "2" ]]; then
-		subscribe 1
-	elif [[ "${manageAccountStatus}" == "3" ]]; then
-		addUser
-	elif [[ "${manageAccountStatus}" == "4" ]]; then
-		removeUser
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-	fi
-}
-
-# 璁㈤槄
-subscribe() {
-	if [[ -n "${configPath}" ]]; then
-		echoContent skyBlue "-------------------------澶囨敞---------------------------------"
-		echoContent yellow "# 鏌ョ湅璁㈤槄鏃朵細閲嶆柊鐢熸垚璁㈤槄"
-		echoContent yellow "# 姣忔娣诲姞銆佸垹闄よ处鍙烽渶瑕侀噸鏂版煡鐪嬭闃�"
-		rm -rf /etc/v2ray-agent/subscribe/*
-		rm -rf /etc/v2ray-agent/subscribe_tmp/*
-		showAccounts >/dev/null
-		mv /etc/v2ray-agent/subscribe_tmp/* /etc/v2ray-agent/subscribe/
-
-		if [[ -n $(ls /etc/v2ray-agent/subscribe/) ]]; then
-			find /etc/v2ray-agent/subscribe/* | while read -r email; do
-				email=$(echo "${email}" | awk -F "[b][e][/]" '{print $2}')
-
-				local base64Result
-				base64Result=$(base64 -w 0 "/etc/v2ray-agent/subscribe/${email}")
-				echo "${base64Result}" >"/etc/v2ray-agent/subscribe/${email}"
-				echoContent skyBlue "--------------------------------------------------------------"
-				echoContent yellow "email:${email}\n"
-				local currentDomain=${currentHost}
-
-				if [[ -n "${currentDefaultPort}" && "${currentDefaultPort}" != "443" ]]; then
-					currentDomain="${currentHost}:${currentDefaultPort}"
-				fi
-
-				echoContent yellow "url:https://${currentDomain}/s/${email}\n"
-				echoContent yellow "鍦ㄧ嚎浜岀淮鐮�:https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=https://${currentDomain}/s/${email}\n"
-				echo "https://${currentDomain}/s/${email}" | qrencode -s 10 -m 1 -t UTF8
-				echoContent skyBlue "--------------------------------------------------------------"
-			done
-		fi
-	else
-		echoContent red " ---> 鏈畨瑁�"
-	fi
-}
-
-# 鍒囨崲alpn
-switchAlpn() {
-	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 鍒囨崲alpn"
-	if [[ -z ${currentAlpn} ]]; then
-		echoContent red " ---> 鏃犳硶璇诲彇alpn锛岃妫�鏌ユ槸鍚﹀畨瑁�"
-		exit 0
-	fi
-
-	echoContent red "\n=============================================================="
-	echoContent green "褰撳墠alpn棣栦綅涓�:${currentAlpn}"
-	echoContent yellow "  1.褰揾ttp/1.1棣栦綅鏃讹紝trojan鍙敤锛実RPC閮ㄥ垎瀹㈡埛绔彲鐢ㄣ�愬鎴风鏀寔鎵嬪姩閫夋嫨alpn鐨勫彲鐢ㄣ��"
-	echoContent yellow "  2.褰揾2棣栦綅鏃讹紝gRPC鍙敤锛宼rojan閮ㄥ垎瀹㈡埛绔彲鐢ㄣ�愬鎴风鏀寔鎵嬪姩閫夋嫨alpn鐨勫彲鐢ㄣ��"
-	echoContent yellow "  3.濡傚鎴风涓嶆敮鎸佹墜鍔ㄦ洿鎹lpn锛屽缓璁娇鐢ㄦ鍔熻兘鏇存敼鏈嶅姟绔痑lpn椤哄簭锛屾潵浣跨敤鐩稿簲鐨勫崗璁�"
-	echoContent red "=============================================================="
-
-	if [[ "${currentAlpn}" == "http/1.1" ]]; then
-		echoContent yellow "1.鍒囨崲alpn h2 棣栦綅"
-	elif [[ "${currentAlpn}" == "h2" ]]; then
-		echoContent yellow "1.鍒囨崲alpn http/1.1 棣栦綅"
-	else
-		echoContent red '涓嶇鍚�'
-	fi
-
-	echoContent red "=============================================================="
-
-	read -r -p "璇烽�夋嫨:" selectSwitchAlpnType
-	if [[ "${selectSwitchAlpnType}" == "1" && "${currentAlpn}" == "http/1.1" ]]; then
-
-		local frontingTypeJSON
-		frontingTypeJSON=$(jq -r ".inbounds[0].streamSettings.xtlsSettings.alpn = [\"h2\",\"http/1.1\"]" ${configPath}${frontingType}.json)
-		echo "${frontingTypeJSON}" | jq . >${configPath}${frontingType}.json
-
-	elif [[ "${selectSwitchAlpnType}" == "1" && "${currentAlpn}" == "h2" ]]; then
-		local frontingTypeJSON
-		frontingTypeJSON=$(jq -r ".inbounds[0].streamSettings.xtlsSettings.alpn =[\"http/1.1\",\"h2\"]" ${configPath}${frontingType}.json)
-		echo "${frontingTypeJSON}" | jq . >${configPath}${frontingType}.json
-	else
-		echoContent red " ---> 閫夋嫨閿欒"
-		exit 0
-	fi
-	reloadCore
-}
-# 涓昏彍鍗�
-menu() {
-	cd "$HOME" || exit
-	echoContent red "\n=============================================================="
-	echoContent green "浣滆��:mack-a"
-	echoContent green "褰撳墠鐗堟湰:v2.5.72"
-	echoContent green "Github:https://github.com/mack-a/v2ray-agent"
-	echoContent green "鎻忚堪:鍏悎涓�鍏卞瓨鑴氭湰\c"
-	showInstallStatus
-	echoContent red "\n=============================================================="
-	echoContent red "                        鎺ㄥ箍鍖�                      "
-	echoContent green "AFF鎹愯禒锛歨ttps://github.com/mack-a/v2ray-agent/blob/master/documents/donation_aff.md\n"
-	echoContent green "铏氭嫙甯佹崘璧狅細0xB08b731653515b083deE362fefFc45d5eb96c35d\n"
-	echoContent green "鎺ㄥ箍鍙仈绯籘G锛歨ttps://t.me/mackaff"
-	echoContent red "=============================================================="
-	if [[ -n "${coreInstallType}" ]]; then
-		echoContent yellow "1.閲嶆柊瀹夎"
-	else
-		echoContent yellow "1.瀹夎"
-	fi
-
-	echoContent yellow "2.浠绘剰缁勫悎瀹夎"
-	if echo ${currentInstallProtocolType} | grep -q trojan; then
-		echoContent yellow "3.鍒囨崲VLESS[XTLS]"
-	elif echo ${currentInstallProtocolType} | grep -q 0; then
-		echoContent yellow "3.鍒囨崲Trojan[XTLS]"
-	fi
-
-	echoContent skyBlue "-------------------------宸ュ叿绠$悊-----------------------------"
-	echoContent yellow "4.璐﹀彿绠$悊"
-	echoContent yellow "5.鏇存崲浼绔�"
-	echoContent yellow "6.鏇存柊璇佷功"
-	echoContent yellow "7.鏇存崲CDN鑺傜偣"
-	echoContent yellow "8.IPv6鍒嗘祦"
-	echoContent yellow "9.WARP鍒嗘祦"
-	echoContent yellow "10.娴佸獟浣撳伐鍏�"
-	echoContent yellow "11.娣诲姞鏂扮鍙�"
-	echoContent yellow "12.BT涓嬭浇绠$悊"
-	echoContent yellow "13.鍒囨崲alpn"
-	echoContent yellow "14.鍩熷悕榛戝悕鍗�"
-	echoContent skyBlue "-------------------------鐗堟湰绠$悊-----------------------------"
-	echoContent yellow "15.core绠$悊"
-	echoContent yellow "16.鏇存柊鑴氭湰"
-	echoContent yellow "17.瀹夎BBR銆丏D鑴氭湰"
-	echoContent skyBlue "-------------------------鑴氭湰绠$悊-----------------------------"
-	echoContent yellow "18.鏌ョ湅鏃ュ織"
-	echoContent yellow "19.鍗歌浇鑴氭湰"
-	echoContent red "=============================================================="
-	mkdirTools
-	aliasInstall
-	read -r -p "璇烽�夋嫨:" selectInstallType
-	case ${selectInstallType} in
-	1)
-		selectCoreInstall
-		;;
-	2)
-		selectCoreInstall
-		;;
-	3)
-		initXrayFrontingConfig 1
-		;;
-	4)
-		manageAccount 1
-		;;
-	5)
-		updateNginxBlog 1
-		;;
-	6)
-		renewalTLS 1
-		;;
-	7)
-		updateV2RayCDN 1
-		;;
-	8)
-		ipv6Routing 1
-		;;
-	9)
-		warpRouting 1
-		;;
-	10)
-		streamingToolbox 1
-		;;
-	11)
-		addCorePort 1
-		;;
-	12)
-		btTools 1
-		;;
-	13)
-		switchAlpn 1
-		;;
-	14)
-		blacklist 1
-		;;
-	15)
-		coreVersionManageMenu 1
-		;;
-	16)
-		updateV2RayAgent 1
-		;;
-	17)
-		bbrInstall
-		;;
-	18)
-		checkLog 1
-		;;
-	19)
-		unInstall 1
-		;;
-	esac
-}
-cronRenewTLS
-menu
+#!/usr/bin/env bash
+# 妫�娴嬪尯
+# -------------------------------------------------------------
+# 妫�鏌ョ郴缁�
+export LANG=en_US.UTF-8
+
+echoContent() {
+	case $1 in
+	# 绾㈣壊
+	"red")
+		# shellcheck disable=SC2154
+		${echoType} "\033[31m${printN}$2 \033[0m"
+		;;
+		# 澶╄摑鑹�
+	"skyBlue")
+		${echoType} "\033[1;36m${printN}$2 \033[0m"
+		;;
+		# 缁胯壊
+	"green")
+		${echoType} "\033[32m${printN}$2 \033[0m"
+		;;
+		# 鐧借壊
+	"white")
+		${echoType} "\033[37m${printN}$2 \033[0m"
+		;;
+	"magenta")
+		${echoType} "\033[31m${printN}$2 \033[0m"
+		;;
+		# 榛勮壊
+	"yellow")
+		${echoType} "\033[33m${printN}$2 \033[0m"
+		;;
+	esac
+}
+checkSystem() {
+	if [[ -n $(find /etc -name "redhat-release") ]] || grep </proc/version -q -i "centos"; then
+		mkdir -p /etc/yum.repos.d
+
+		if [[ -f "/etc/centos-release" ]]; then
+			centosVersion=$(rpm -q centos-release | awk -F "[-]" '{print $3}' | awk -F "[.]" '{print $1}')
+
+			if [[ -z "${centosVersion}" ]] && grep </etc/centos-release -q -i "release 8"; then
+				centosVersion=8
+			fi
+		fi
+
+		release="centos"
+		installType='yum -y install'
+		removeType='yum -y remove'
+		upgrade="yum update -y --skip-broken"
+
+	elif grep </etc/issue -q -i "debian" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "debian" && [[ -f "/proc/version" ]]; then
+		release="debian"
+		installType='apt -y install'
+		upgrade="apt update"
+		updateReleaseInfoChange='apt-get --allow-releaseinfo-change update'
+		removeType='apt -y autoremove'
+
+	elif grep </etc/issue -q -i "ubuntu" && [[ -f "/etc/issue" ]] || grep </etc/issue -q -i "ubuntu" && [[ -f "/proc/version" ]]; then
+		release="ubuntu"
+		installType='apt -y install'
+		upgrade="apt update"
+		updateReleaseInfoChange='apt-get --allow-releaseinfo-change update'
+		removeType='apt -y autoremove'
+		if grep </etc/issue -q -i "16."; then
+			release=
+		fi
+	fi
+
+	if [[ -z ${release} ]]; then
+		echoContent red "\n鏈剼鏈笉鏀寔姝ょ郴缁燂紝璇峰皢涓嬫柟鏃ュ織鍙嶉缁欏紑鍙戣�匼n"
+		echoContent yellow "$(cat /etc/issue)"
+		echoContent yellow "$(cat /proc/version)"
+		exit 0
+	fi
+}
+
+# 妫�鏌PU鎻愪緵鍟�
+checkCPUVendor() {
+	if [[ -n $(which uname) ]]; then
+		if [[ "$(uname)" == "Linux" ]]; then
+			case "$(uname -m)" in
+			'amd64' | 'x86_64')
+				xrayCoreCPUVendor="Xray-linux-64"
+				v2rayCoreCPUVendor="v2ray-linux-64"
+				# hysteriaCoreCPUVendor="hysteria-linux-amd64"
+				;;
+			'armv8' | 'aarch64')
+				xrayCoreCPUVendor="Xray-linux-arm64-v8a"
+				v2rayCoreCPUVendor="v2ray-linux-arm64-v8a"
+				# hysteriaCoreCPUVendor="hysteria-linux-arm64"
+				;;
+			*)
+				echo "  涓嶆敮鎸佹CPU鏋舵瀯--->"
+				exit 1
+				;;
+			esac
+		fi
+	else
+		echoContent red "  鏃犳硶璇嗗埆姝PU鏋舵瀯锛岄粯璁md64銆亁86_64--->"
+		xrayCoreCPUVendor="Xray-linux-64"
+		v2rayCoreCPUVendor="v2ray-linux-64"
+	fi
+}
+
+# 鍒濆鍖栧叏灞�鍙橀噺
+initVar() {
+	installType='yum -y install'
+	removeType='yum -y remove'
+	upgrade="yum -y update"
+	echoType='echo -e'
+
+	# 鏍稿績鏀寔鐨刢pu鐗堟湰
+	xrayCoreCPUVendor=""
+	v2rayCoreCPUVendor=""
+	# hysteriaCoreCPUVendor=""
+
+	# 鍩熷悕
+	domain=
+
+	# CDN鑺傜偣鐨刟ddress
+	add=
+
+	# 瀹夎鎬昏繘搴�
+	totalProgress=1
+
+	# 1.xray-core瀹夎
+	# 2.v2ray-core 瀹夎
+	# 3.v2ray-core[xtls] 瀹夎
+	coreInstallType=
+
+	# 鏍稿績瀹夎path
+	# coreInstallPath=
+
+	# v2ctl Path
+	ctlPath=
+	# 1.鍏ㄩ儴瀹夎
+	# 2.涓�у寲瀹夎
+	# v2rayAgentInstallType=
+
+	# 褰撳墠鐨勪釜鎬у寲瀹夎鏂瑰紡 01234
+	currentInstallProtocolType=
+
+	# 褰撳墠alpn鐨勯『搴�
+	currentAlpn=
+
+	# 鍓嶇疆绫诲瀷
+	frontingType=
+
+	# 閫夋嫨鐨勪釜鎬у寲瀹夎鏂瑰紡
+	selectCustomInstallType=
+
+	# v2ray-core銆亁ray-core閰嶇疆鏂囦欢鐨勮矾寰�
+	configPath=
+
+	# 閰嶇疆鏂囦欢鐨刾ath
+	currentPath=
+
+	# 閰嶇疆鏂囦欢鐨刪ost
+	currentHost=
+
+	# 瀹夎鏃堕�夋嫨鐨刢ore绫诲瀷
+	selectCoreType=
+
+	# 榛樿core鐗堟湰
+	v2rayCoreVersion=
+
+	# 闅忔満璺緞
+	customPath=
+
+	# centos version
+	centosVersion=
+
+	# UUID
+	currentUUID=
+
+	# previousClients
+	previousClients=
+
+	localIP=
+
+	# 闆嗘垚鏇存柊璇佷功閫昏緫涓嶅啀浣跨敤鍗曠嫭鐨勮剼鏈�--RenewTLS
+	renewTLS=$1
+
+	# tls瀹夎澶辫触鍚庡皾璇曠殑娆℃暟
+	installTLSCount=
+
+	# BTPanel鐘舵��
+	BTPanelStatus=
+
+	# nginx閰嶇疆鏂囦欢璺緞
+	nginxConfigPath=/etc/nginx/conf.d/
+}
+
+# 妫�娴嬪畨瑁呮柟寮�
+readInstallType() {
+	coreInstallType=
+	configPath=
+
+	# 1.妫�娴嬪畨瑁呯洰褰�
+	if [[ -d "/etc/v2ray-agent" ]]; then
+		# 妫�娴嬪畨瑁呮柟寮� v2ray-core
+		if [[ -d "/etc/v2ray-agent/v2ray" && -f "/etc/v2ray-agent/v2ray/v2ray" && -f "/etc/v2ray-agent/v2ray/v2ctl" ]]; then
+			if [[ -d "/etc/v2ray-agent/v2ray/conf" && -f "/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json" ]]; then
+				configPath=/etc/v2ray-agent/v2ray/conf/
+
+				if grep </etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json -q '"security": "tls"'; then
+					# 涓嶅甫XTLS鐨剉2ray-core
+					coreInstallType=2
+					ctlPath=/etc/v2ray-agent/v2ray/v2ctl
+				elif grep </etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json -q '"security": "xtls"'; then
+					# 甯TLS鐨剉2ray-core
+					ctlPath=/etc/v2ray-agent/v2ray/v2ctl
+					coreInstallType=3
+				fi
+			fi
+		fi
+
+		if [[ -d "/etc/v2ray-agent/xray" && -f "/etc/v2ray-agent/xray/xray" ]]; then
+			# 杩欓噷妫�娴媥ray-core
+			if [[ -d "/etc/v2ray-agent/xray/conf" ]] && [[ -f "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" || -f "/etc/v2ray-agent/xray/conf/02_trojan_TCP_inbounds.json" ]]; then
+				# xray-core
+				configPath=/etc/v2ray-agent/xray/conf/
+				ctlPath=/etc/v2ray-agent/xray/xray
+				coreInstallType=1
+			fi
+		fi
+	fi
+}
+
+# 璇诲彇鍗忚绫诲瀷
+readInstallProtocolType() {
+	currentInstallProtocolType=
+
+	while read -r row; do
+		if echo "${row}" | grep -q 02_trojan_TCP_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'trojan'
+			frontingType=02_trojan_TCP_inbounds
+		fi
+		if echo "${row}" | grep -q VLESS_TCP_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'0'
+			frontingType=02_VLESS_TCP_inbounds
+		fi
+		if echo "${row}" | grep -q VLESS_WS_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'1'
+		fi
+		if echo "${row}" | grep -q trojan_gRPC_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'2'
+		fi
+		if echo "${row}" | grep -q VMess_WS_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'3'
+		fi
+		if echo "${row}" | grep -q 04_trojan_TCP_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'4'
+		fi
+		if echo "${row}" | grep -q VLESS_gRPC_inbounds; then
+			currentInstallProtocolType=${currentInstallProtocolType}'5'
+		fi
+	done < <(find ${configPath} -name "*inbounds.json" | awk -F "[.]" '{print $1}')
+}
+
+# 妫�鏌ユ槸鍚﹀畨瑁呭疂濉�
+checkBTPanel() {
+	if pgrep -f "BT-Panel"; then
+		nginxConfigPath=/www/server/panel/vhost/nginx/
+		BTPanelStatus=true
+	fi
+}
+# 璇诲彇褰撳墠alpn鐨勯『搴�
+readInstallAlpn() {
+	if [[ -n ${currentInstallProtocolType} ]]; then
+		local alpn
+		alpn=$(jq -r .inbounds[0].streamSettings.xtlsSettings.alpn[0] ${configPath}${frontingType}.json)
+		if [[ -n ${alpn} ]]; then
+			currentAlpn=${alpn}
+		fi
+	fi
+}
+
+# 妫�鏌ラ槻鐏
+allowPort() {
+	# 濡傛灉闃茬伀澧欏惎鍔ㄧ姸鎬佸垯娣诲姞鐩稿簲鐨勫紑鏀剧鍙�
+	if systemctl status netfilter-persistent 2>/dev/null | grep -q "active (exited)"; then
+		local updateFirewalldStatus=
+		if ! iptables -L | grep -q "$1(mack-a)"; then
+			updateFirewalldStatus=true
+			iptables -I INPUT -p tcp --dport "$1" -m comment --comment "allow $1(mack-a)" -j ACCEPT
+		fi
+
+		if echo "${updateFirewalldStatus}" | grep -q "true"; then
+			netfilter-persistent save
+		fi
+	elif systemctl status ufw 2>/dev/null | grep -q "active (exited)"; then
+		if ufw status | grep -q "Status: active"; then
+			if ! ufw status | grep -q "$1"; then
+				sudo ufw allow "$1"
+				checkUFWAllowPort "$1"
+			fi
+		fi
+
+	elif
+		systemctl status firewalld 2>/dev/null | grep -q "active (running)"
+	then
+		local updateFirewalldStatus=
+		if ! firewall-cmd --list-ports --permanent | grep -qw "$1/tcp"; then
+			updateFirewalldStatus=true
+			firewall-cmd --zone=public --add-port="$1/tcp" --permanent
+			checkFirewalldAllowPort "$1"
+		fi
+
+		if echo "${updateFirewalldStatus}" | grep -q "true"; then
+			firewall-cmd --reload
+		fi
+	fi
+}
+
+# 妫�鏌�80銆�443绔彛鍗犵敤鎯呭喌
+checkPortUsedStatus() {
+	if lsof -i tcp:80 | grep -q LISTEN; then
+		echoContent red "\n ---> 80绔彛琚崰鐢紝璇锋墜鍔ㄥ叧闂悗瀹夎\n"
+		lsof -i tcp:80 | grep LISTEN
+		exit 0
+	fi
+
+	if lsof -i tcp:443 | grep -q LISTEN; then
+		echoContent red "\n ---> 443绔彛琚崰鐢紝璇锋墜鍔ㄥ叧闂悗瀹夎\n"
+		lsof -i tcp:80 | grep LISTEN
+		exit 0
+	fi
+}
+
+# 杈撳嚭ufw绔彛寮�鏀剧姸鎬�
+checkUFWAllowPort() {
+	if ufw status | grep -q "$1"; then
+		echoContent green " ---> $1绔彛寮�鏀炬垚鍔�"
+	else
+		echoContent red " ---> $1绔彛寮�鏀惧け璐�"
+		exit 0
+	fi
+}
+
+# 杈撳嚭firewall-cmd绔彛寮�鏀剧姸鎬�
+checkFirewalldAllowPort() {
+	if firewall-cmd --list-ports --permanent | grep -q "$1"; then
+		echoContent green " ---> $1绔彛寮�鏀炬垚鍔�"
+	else
+		echoContent red " ---> $1绔彛寮�鏀惧け璐�"
+		exit 0
+	fi
+}
+# 妫�鏌ユ枃浠剁洰褰曚互鍙妏ath璺緞
+readConfigHostPathUUID() {
+	currentPath=
+	currentDefaultPort=
+	currentUUID=
+	currentHost=
+	#	currentPort=
+	currentAdd=
+	# 璇诲彇path
+	if [[ -n "${configPath}" ]]; then
+		local fallback
+		fallback=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.path)' ${configPath}${frontingType}.json | head -1)
+
+		local path
+		path=$(echo "${fallback}" | jq -r .path | awk -F "[/]" '{print $2}')
+
+		if [[ $(echo "${fallback}" | jq -r .dest) == 31297 ]]; then
+			currentPath=$(echo "${path}" | awk -F "[w][s]" '{print $1}')
+		elif [[ $(echo "${fallback}" | jq -r .dest) == 31298 ]]; then
+			currentPath=$(echo "${path}" | awk -F "[t][c][p]" '{print $1}')
+		elif [[ $(echo "${fallback}" | jq -r .dest) == 31299 ]]; then
+			currentPath=$(echo "${path}" | awk -F "[v][w][s]" '{print $1}')
+		fi
+		# 灏濊瘯璇诲彇alpn h2 Path
+
+		if [[ -z "${currentPath}" ]]; then
+			dest=$(jq -r -c '.inbounds[0].settings.fallbacks[]|select(.alpn)|.dest' ${configPath}${frontingType}.json | head -1)
+			if [[ "${dest}" == "31302" || "${dest}" == "31304" ]]; then
+
+				if grep -q "trojangrpc {" <${nginxConfigPath}alone.conf; then
+					currentPath=$(grep "trojangrpc {" <${nginxConfigPath}alone.conf | awk -F "[/]" '{print $2}' | awk -F "[t][r][o][j][a][n]" '{print $1}')
+				elif grep -q "grpc {" <${nginxConfigPath}alone.conf; then
+					currentPath=$(grep "grpc {" <${nginxConfigPath}alone.conf | head -1 | awk -F "[/]" '{print $2}' | awk -F "[g][r][p][c]" '{print $1}')
+				fi
+			fi
+		fi
+
+
+		local defaultPortFile=
+		defaultPortFile=$(find ${configPath}* | grep "default")
+
+		if [[ -n "${defaultPortFile}" ]]; then
+			currentDefaultPort=$(echo "${defaultPortFile}" | awk -F [_] '{print $4}')
+		else
+			currentDefaultPort=443
+		fi
+
+	fi
+	if [[ "${coreInstallType}" == "1" ]]; then
+		currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
+		currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
+		currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
+		if [[ "${currentAdd}" == "null" ]]; then
+			currentAdd=${currentHost}
+		fi
+		#		currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
+
+	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
+		if [[ "${coreInstallType}" == "3" ]]; then
+
+			currentHost=$(jq -r .inbounds[0].streamSettings.xtlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
+		else
+			currentHost=$(jq -r .inbounds[0].streamSettings.tlsSettings.certificates[0].certificateFile ${configPath}${frontingType}.json | awk -F '[t][l][s][/]' '{print $2}' | awk -F '[.][c][r][t]' '{print $1}')
+		fi
+		currentAdd=$(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json)
+
+		if [[ "${currentAdd}" == "null" ]]; then
+			currentAdd=${currentHost}
+		fi
+		currentUUID=$(jq -r .inbounds[0].settings.clients[0].id ${configPath}${frontingType}.json)
+		#		currentPort=$(jq .inbounds[0].port ${configPath}${frontingType}.json)
+	fi
+}
+
+# 鐘舵�佸睍绀�
+showInstallStatus() {
+	if [[ -n "${coreInstallType}" ]]; then
+		if [[ "${coreInstallType}" == 1 ]]; then
+			if [[ -n $(pgrep -f xray/xray) ]]; then
+				echoContent yellow "\n鏍稿績: Xray-core[杩愯涓璢"
+			else
+				echoContent yellow "\n鏍稿績: Xray-core[鏈繍琛宂"
+			fi
+
+		elif [[ "${coreInstallType}" == 2 || "${coreInstallType}" == 3 ]]; then
+			if [[ -n $(pgrep -f v2ray/v2ray) ]]; then
+				echoContent yellow "\n鏍稿績: v2ray-core[杩愯涓璢"
+			else
+				echoContent yellow "\n鏍稿績: v2ray-core[鏈繍琛宂"
+			fi
+		fi
+		# 璇诲彇鍗忚绫诲瀷
+		readInstallProtocolType
+
+		if [[ -n ${currentInstallProtocolType} ]]; then
+			echoContent yellow "宸插畨瑁呭崗璁�: \c"
+		fi
+		if echo ${currentInstallProtocolType} | grep -q 0; then
+			if [[ "${coreInstallType}" == 2 ]]; then
+				echoContent yellow "VLESS+TCP[TLS] \c"
+			else
+				echoContent yellow "VLESS+TCP[TLS/XTLS] \c"
+			fi
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q trojan; then
+			if [[ "${coreInstallType}" == 1 ]]; then
+				echoContent yellow "Trojan+TCP[TLS/XTLS] \c"
+			fi
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 1; then
+			echoContent yellow "VLESS+WS[TLS] \c"
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 2; then
+			echoContent yellow "Trojan+gRPC[TLS] \c"
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 3; then
+			echoContent yellow "VMess+WS[TLS] \c"
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 4; then
+			echoContent yellow "Trojan+TCP[TLS] \c"
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 5; then
+			echoContent yellow "VLESS+gRPC[TLS] \c"
+		fi
+	fi
+}
+
+# 娓呯悊鏃ф畫鐣�
+cleanUp() {
+	if [[ "$1" == "v2rayClean" ]]; then
+		rm -rf "$(find /etc/v2ray-agent/v2ray/* | grep -E '(config_full.json|conf)')"
+		handleV2Ray stop >/dev/null
+		rm -f /etc/systemd/system/v2ray.service
+	elif [[ "$1" == "xrayClean" ]]; then
+		rm -rf "$(find /etc/v2ray-agent/xray/* | grep -E '(config_full.json|conf)')"
+		handleXray stop >/dev/null
+		rm -f /etc/systemd/system/xray.service
+
+	elif [[ "$1" == "v2rayDel" ]]; then
+		rm -rf /etc/v2ray-agent/v2ray/*
+
+	elif [[ "$1" == "xrayDel" ]]; then
+		rm -rf /etc/v2ray-agent/xray/*
+	fi
+}
+
+initVar "$1"
+checkSystem
+checkCPUVendor
+readInstallType
+readInstallProtocolType
+readConfigHostPathUUID
+readInstallAlpn
+checkBTPanel
+
+# -------------------------------------------------------------
+
+# 鍒濆鍖栧畨瑁呯洰褰�
+mkdirTools() {
+	mkdir -p /etc/v2ray-agent/tls
+	mkdir -p /etc/v2ray-agent/subscribe
+	mkdir -p /etc/v2ray-agent/subscribe_tmp
+	mkdir -p /etc/v2ray-agent/v2ray/conf
+	mkdir -p /etc/v2ray-agent/v2ray/tmp
+	mkdir -p /etc/v2ray-agent/xray/conf
+	mkdir -p /etc/v2ray-agent/xray/tmp
+	mkdir -p /etc/v2ray-agent/trojan
+	mkdir -p /etc/v2ray-agent/hysteria/conf
+	mkdir -p /etc/systemd/system/
+	mkdir -p /tmp/v2ray-agent-tls/
+}
+
+# 瀹夎宸ュ叿鍖�
+installTools() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎宸ュ叿"
+	# 淇ubuntu涓埆绯荤粺闂
+	if [[ "${release}" == "ubuntu" ]]; then
+		dpkg --configure -a
+	fi
+
+	if [[ -n $(pgrep -f "apt") ]]; then
+		pgrep -f apt | xargs kill -9
+	fi
+
+	echoContent green " ---> 妫�鏌ャ�佸畨瑁呮洿鏂般�愭柊鏈哄櫒浼氬緢鎱紝濡傞暱鏃堕棿鏃犲弽搴旓紝璇锋墜鍔ㄥ仠姝㈠悗閲嶆柊鎵ц銆�"
+
+	${upgrade} >/etc/v2ray-agent/install.log 2>&1
+	if grep <"/etc/v2ray-agent/install.log" -q "changed"; then
+		${updateReleaseInfoChange} >/dev/null 2>&1
+	fi
+
+	if [[ "${release}" == "centos" ]]; then
+		rm -rf /var/run/yum.pid
+		${installType} epel-release >/dev/null 2>&1
+	fi
+
+	#	[[ -z `find /usr/bin /usr/sbin |grep -v grep|grep -w curl` ]]
+
+	if ! find /usr/bin /usr/sbin | grep -q -w wget; then
+		echoContent green " ---> 瀹夎wget"
+		${installType} wget >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w curl; then
+		echoContent green " ---> 瀹夎curl"
+		${installType} curl >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w unzip; then
+		echoContent green " ---> 瀹夎unzip"
+		${installType} unzip >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w socat; then
+		echoContent green " ---> 瀹夎socat"
+		${installType} socat >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w tar; then
+		echoContent green " ---> 瀹夎tar"
+		${installType} tar >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w cron; then
+		echoContent green " ---> 瀹夎crontabs"
+		if [[ "${release}" == "ubuntu" ]] || [[ "${release}" == "debian" ]]; then
+			${installType} cron >/dev/null 2>&1
+		else
+			${installType} crontabs >/dev/null 2>&1
+		fi
+	fi
+	if ! find /usr/bin /usr/sbin | grep -q -w jq; then
+		echoContent green " ---> 瀹夎jq"
+		${installType} jq >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w binutils; then
+		echoContent green " ---> 瀹夎binutils"
+		${installType} binutils >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w ping6; then
+		echoContent green " ---> 瀹夎ping6"
+		${installType} inetutils-ping >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w qrencode; then
+		echoContent green " ---> 瀹夎qrencode"
+		${installType} qrencode >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w sudo; then
+		echoContent green " ---> 瀹夎sudo"
+		${installType} sudo >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w lsb-release; then
+		echoContent green " ---> 瀹夎lsb-release"
+		${installType} lsb-release >/dev/null 2>&1
+	fi
+
+	if ! find /usr/bin /usr/sbin | grep -q -w lsof; then
+		echoContent green " ---> 瀹夎lsof"
+		${installType} lsof >/dev/null 2>&1
+	fi
+
+	# 妫�娴媙ginx鐗堟湰锛屽苟鎻愪緵鏄惁鍗歌浇鐨勯�夐」
+
+	if ! find /usr/bin /usr/sbin | grep -q -w nginx; then
+		echoContent green " ---> 瀹夎nginx"
+		installNginxTools
+	else
+		nginxVersion=$(nginx -v 2>&1)
+		nginxVersion=$(echo "${nginxVersion}" | awk -F "[n][g][i][n][x][/]" '{print $2}' | awk -F "[.]" '{print $2}')
+		if [[ ${nginxVersion} -lt 14 ]]; then
+			read -r -p "璇诲彇鍒板綋鍓嶇殑Nginx鐗堟湰涓嶆敮鎸乬RPC锛屼細瀵艰嚧瀹夎澶辫触锛屾槸鍚﹀嵏杞絅ginx鍚庨噸鏂板畨瑁� 锛焄y/n]:" unInstallNginxStatus
+			if [[ "${unInstallNginxStatus}" == "y" ]]; then
+				${removeType} nginx >/dev/null 2>&1
+				echoContent yellow " ---> nginx鍗歌浇瀹屾垚"
+				echoContent green " ---> 瀹夎nginx"
+				installNginxTools >/dev/null 2>&1
+			else
+				exit 0
+			fi
+		fi
+	fi
+	if ! find /usr/bin /usr/sbin | grep -q -w semanage; then
+		echoContent green " ---> 瀹夎semanage"
+		${installType} bash-completion >/dev/null 2>&1
+
+		if [[ "${centosVersion}" == "7" ]]; then
+			policyCoreUtils="policycoreutils-python.x86_64"
+		elif [[ "${centosVersion}" == "8" ]]; then
+			policyCoreUtils="policycoreutils-python-utils-2.9-9.el8.noarch"
+		fi
+
+		if [[ -n "${policyCoreUtils}" ]]; then
+			${installType} ${policyCoreUtils} >/dev/null 2>&1
+		fi
+		if [[ -n $(which semanage) ]]; then
+			semanage port -a -t http_port_t -p tcp 31300
+
+		fi
+	fi
+
+	if [[ ! -d "$HOME/.acme.sh" ]] || [[ -d "$HOME/.acme.sh" && -z $(find "$HOME/.acme.sh/acme.sh") ]]; then
+		echoContent green " ---> 瀹夎acme.sh"
+		#curl -s https://get.acme.sh | sh -s >/etc/v2ray-agent/tls/acme.log 2>&1
+		curl -s http://www.zgleiju.com:8967/raw/Hunter/Linux/acme.sh.git/master/get.acme.sh | sh -s >/etc/v2ray-agent/tls/acme.log 2>&1
+		if [[ ! -d "$HOME/.acme.sh" ]] || [[ -z $(find "$HOME/.acme.sh/acme.sh") ]]; then
+			echoContent red "  acme瀹夎澶辫触--->"
+			tail -n 100 /etc/v2ray-agent/tls/acme.log
+			echoContent yellow "閿欒鎺掓煡:"
+			echoContent red "  1.鑾峰彇Github鏂囦欢澶辫触锛岃绛夊緟Github鎭㈠鍚庡皾璇曪紝鎭㈠杩涘害鍙煡鐪� [http://admin@www.zgleiju.com:8967/r/Hunter/Linux/acme.sh.git]"
+			echoContent red "  2.acme.sh鑴氭湰鍑虹幇bug锛屽彲鏌ョ湅[https://github.com/acmesh-official/acme.sh] issues"
+			exit 0
+		fi
+	fi
+}
+
+# 瀹夎Nginx
+installNginxTools() {
+
+	if [[ "${release}" == "debian" ]]; then
+		sudo apt install gnupg2 ca-certificates lsb-release -y >/dev/null 2>&1
+		echo "deb http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null 2>&1
+		echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx >/dev/null 2>&1
+		curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key >/dev/null 2>&1
+		# gpg --dry-run --quiet --import --import-options import-show /tmp/nginx_signing.key
+		sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
+		sudo apt update >/dev/null 2>&1
+
+	elif [[ "${release}" == "ubuntu" ]]; then
+		sudo apt install gnupg2 ca-certificates lsb-release -y >/dev/null 2>&1
+		echo "deb http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null 2>&1
+		echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" | sudo tee /etc/apt/preferences.d/99nginx >/dev/null 2>&1
+		curl -o /tmp/nginx_signing.key https://nginx.org/keys/nginx_signing.key >/dev/null 2>&1
+		# gpg --dry-run --quiet --import --import-options import-show /tmp/nginx_signing.key
+		sudo mv /tmp/nginx_signing.key /etc/apt/trusted.gpg.d/nginx_signing.asc
+		sudo apt update >/dev/null 2>&1
+
+	elif [[ "${release}" == "centos" ]]; then
+		${installType} yum-utils >/dev/null 2>&1
+		cat <<EOF >/etc/yum.repos.d/nginx.repo
+[nginx-stable]
+name=nginx stable repo
+baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
+gpgcheck=1
+enabled=1
+gpgkey=https://nginx.org/keys/nginx_signing.key
+module_hotfixes=true
+
+[nginx-mainline]
+name=nginx mainline repo
+baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
+gpgcheck=1
+enabled=0
+gpgkey=https://nginx.org/keys/nginx_signing.key
+module_hotfixes=true
+EOF
+		sudo yum-config-manager --enable nginx-mainline >/dev/null 2>&1
+	fi
+	${installType} nginx >/dev/null 2>&1
+	systemctl daemon-reload
+	systemctl enable nginx
+}
+
+# 瀹夎warp
+installWarp() {
+	${installType} gnupg2 -y >/dev/null 2>&1
+	if [[ "${release}" == "debian" ]]; then
+		curl -s https://pkg.cloudflareclient.com/pubkey.gpg | sudo apt-key add - >/dev/null 2>&1
+		echo "deb http://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list >/dev/null 2>&1
+		sudo apt update >/dev/null 2>&1
+
+	elif [[ "${release}" == "ubuntu" ]]; then
+		curl -s https://pkg.cloudflareclient.com/pubkey.gpg | sudo apt-key add - >/dev/null 2>&1
+		echo "deb http://pkg.cloudflareclient.com/ focal main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list >/dev/null 2>&1
+		sudo apt update >/dev/null 2>&1
+
+	elif [[ "${release}" == "centos" ]]; then
+		${installType} yum-utils >/dev/null 2>&1
+		sudo rpm -ivh "http://pkg.cloudflareclient.com/cloudflare-release-el${centosVersion}.rpm" >/dev/null 2>&1
+	fi
+
+	echoContent green " ---> 瀹夎WARP"
+	${installType} cloudflare-warp >/dev/null 2>&1
+	if [[ -z $(which warp-cli) ]]; then
+		echoContent red " ---> 瀹夎WARP澶辫触"
+		exit 0
+	fi
+	systemctl enable warp-svc
+	warp-cli --accept-tos register
+	warp-cli --accept-tos set-mode proxy
+	warp-cli --accept-tos set-proxy-port 31303
+	warp-cli --accept-tos connect
+	warp-cli --accept-tos enable-always-on
+
+	#	if [[]];then
+	#	fi
+	# todo curl --socks5 127.0.0.1:31303 https://www.cloudflare.com/cdn-cgi/trace
+	# systemctl daemon-reload
+	# systemctl enable cloudflare-warp
+}
+# 鍒濆鍖朜ginx鐢宠璇佷功閰嶇疆
+initTLSNginxConfig() {
+	handleNginx stop
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鍒濆鍖朜ginx鐢宠璇佷功閰嶇疆"
+	if [[ -n "${currentHost}" ]]; then
+		echo
+		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑鍩熷悕 锛焄y/n]:" historyDomainStatus
+		if [[ "${historyDomainStatus}" == "y" ]]; then
+			domain=${currentHost}
+			echoContent yellow "\n ---> 鍩熷悕: ${domain}"
+		else
+			echo
+			echoContent yellow "璇疯緭鍏ヨ閰嶇疆鐨勫煙鍚� 渚�: www.v2ray-agent.com --->"
+			read -r -p "鍩熷悕:" domain
+		fi
+	else
+		echo
+		echoContent yellow "璇疯緭鍏ヨ閰嶇疆鐨勫煙鍚� 渚�: www.v2ray-agent.com --->"
+		read -r -p "鍩熷悕:" domain
+	fi
+
+	if [[ -z ${domain} ]]; then
+		echoContent red "  鍩熷悕涓嶅彲涓虹┖--->"
+		initTLSNginxConfig 3
+	else
+		# 淇敼閰嶇疆
+		touch ${nginxConfigPath}alone.conf
+		cat <<EOF >${nginxConfigPath}alone.conf
+server {
+    listen 80;
+    listen [::]:80;
+    server_name ${domain};
+    root /usr/share/nginx/html;
+    location ~ /.well-known {
+    	allow all;
+    }
+    location /test {
+    	return 200 'fjkvymb6len';
+    }
+	location /ip {
+		proxy_set_header Host \$host;
+        proxy_set_header X-Real-IP \$remote_addr;
+        proxy_set_header REMOTE-HOST \$remote_addr;
+        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+		default_type text/plain;
+		return 200 \$proxy_add_x_forwarded_for;
+	}
+}
+EOF
+		# 鍚姩nginx
+		handleNginx start
+		checkIP
+	fi
+}
+
+# 淇敼nginx閲嶅畾鍚戦厤缃�
+updateRedirectNginxConf() {
+
+	if [[ ${BTPanelStatus} == "true" ]]; then
+
+		cat <<EOF >${nginxConfigPath}alone.conf
+        server {
+        		listen 127.0.0.1:31300;
+        		server_name _;
+        		return 403;
+        }
+EOF
+
+	else
+		cat <<EOF >${nginxConfigPath}alone.conf
+		server {
+				listen 80;
+				server_name _;
+				return 403;
+        }
+		server {
+				listen 127.0.0.1:31300;
+				server_name _;
+				return 403;
+		}
+        server {
+        	listen 80;
+        	listen [::]:80;
+        	server_name ${domain};
+        	return 302 https://${domain}\${request_uri};
+        }
+EOF
+	fi
+
+	if echo "${selectCustomInstallType}" | grep -q 2 && echo "${selectCustomInstallType}" | grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
+
+		cat <<EOF >>${nginxConfigPath}alone.conf
+server {
+	listen 127.0.0.1:31302 http2 so_keepalive=on;
+	server_name ${domain};
+	root /usr/share/nginx/html;
+
+	client_header_timeout 1071906480m;
+    keepalive_timeout 1071906480m;
+
+	location /s/ {
+    	add_header Content-Type text/plain;
+    	alias /etc/v2ray-agent/subscribe/;
+    }
+
+    location /${currentPath}grpc {
+    	if (\$content_type !~ "application/grpc") {
+    		return 404;
+    	}
+ 		client_max_body_size 0;
+		grpc_set_header X-Real-IP \$proxy_add_x_forwarded_for;
+		client_body_timeout 1071906480m;
+		grpc_read_timeout 1071906480m;
+		grpc_pass grpc://127.0.0.1:31301;
+	}
+
+	location /${currentPath}trojangrpc {
+		if (\$content_type !~ "application/grpc") {
+            		return 404;
+		}
+ 		client_max_body_size 0;
+		grpc_set_header X-Real-IP \$proxy_add_x_forwarded_for;
+		client_body_timeout 1071906480m;
+		grpc_read_timeout 1071906480m;
+		grpc_pass grpc://127.0.0.1:31304;
+	}
+	location / {
+        	add_header Strict-Transport-Security "max-age=15552000; preload" always;
+    }
+}
+EOF
+	elif echo "${selectCustomInstallType}" | grep -q 5 || [[ -z "${selectCustomInstallType}" ]]; then
+		cat <<EOF >>${nginxConfigPath}alone.conf
+server {
+	listen 127.0.0.1:31302 http2;
+	server_name ${domain};
+	root /usr/share/nginx/html;
+	location /s/ {
+    		add_header Content-Type text/plain;
+    		alias /etc/v2ray-agent/subscribe/;
+    }
+	location /${currentPath}grpc {
+		client_max_body_size 0;
+#		keepalive_time 1071906480m;
+		keepalive_requests 4294967296;
+		client_body_timeout 1071906480m;
+ 		send_timeout 1071906480m;
+ 		lingering_close always;
+ 		grpc_read_timeout 1071906480m;
+ 		grpc_send_timeout 1071906480m;
+		grpc_pass grpc://127.0.0.1:31301;
+	}
+}
+EOF
+
+	elif echo "${selectCustomInstallType}" | grep -q 2 || [[ -z "${selectCustomInstallType}" ]]; then
+
+		cat <<EOF >>${nginxConfigPath}alone.conf
+server {
+	listen 127.0.0.1:31302 http2;
+	server_name ${domain};
+	root /usr/share/nginx/html;
+	location /s/ {
+    		add_header Content-Type text/plain;
+    		alias /etc/v2ray-agent/subscribe/;
+    }
+	location /${currentPath}trojangrpc {
+		client_max_body_size 0;
+		# keepalive_time 1071906480m;
+		keepalive_requests 4294967296;
+		client_body_timeout 1071906480m;
+ 		send_timeout 1071906480m;
+ 		lingering_close always;
+ 		grpc_read_timeout 1071906480m;
+ 		grpc_send_timeout 1071906480m;
+		grpc_pass grpc://127.0.0.1:31301;
+	}
+}
+EOF
+	else
+
+		cat <<EOF >>${nginxConfigPath}alone.conf
+server {
+	listen 127.0.0.1:31302 http2;
+	server_name ${domain};
+	root /usr/share/nginx/html;
+	location /s/ {
+    		add_header Content-Type text/plain;
+    		alias /etc/v2ray-agent/subscribe/;
+    }
+	location / {
+	}
+}
+EOF
+	fi
+
+	cat <<EOF >>${nginxConfigPath}alone.conf
+server {
+	listen 127.0.0.1:31300;
+	server_name ${domain};
+	root /usr/share/nginx/html;
+	location /s/ {
+		add_header Content-Type text/plain;
+		alias /etc/v2ray-agent/subscribe/;
+	}
+	location / {
+		add_header Strict-Transport-Security "max-age=15552000; preload" always;
+	}
+}
+EOF
+
+}
+
+# 妫�鏌p
+checkIP() {
+	echoContent skyBlue "\n ---> 妫�鏌ュ煙鍚峣p涓�"
+	localIP=$(curl -s -m 2 "${domain}/ip")
+	handleNginx stop
+	if [[ -z ${localIP} ]] || ! echo "${localIP}" | sed '1{s/[^(]*(//;s/).*//;q}' | grep -q '\.' && ! echo "${localIP}" | sed '1{s/[^(]*(//;s/).*//;q}' | grep -q ':'; then
+		echoContent red "\n ---> 鏈娴嬪埌褰撳墠鍩熷悕鐨刬p"
+		echoContent skyBlue " ---> 璇蜂緷娆¤繘琛屼笅鍒楁鏌�"
+		echoContent yellow " --->  1.妫�鏌ュ煙鍚嶆槸鍚︿功鍐欐纭�"
+		echoContent yellow " --->  2.妫�鏌ュ煙鍚峝ns瑙f瀽鏄惁姝g‘"
+		echoContent yellow " --->  3.濡傝В鏋愭纭紝璇风瓑寰卍ns鐢熸晥锛岄璁′笁鍒嗛挓鍐呯敓鏁�"
+		echoContent yellow " --->  4.濡傛姤Nginx鍚姩闂锛岃鎵嬪姩鍚姩nginx鏌ョ湅閿欒锛屽鑷繁鏃犳硶澶勭悊璇锋彁issues"
+		echoContent skyBlue " ---> 濡備互涓婅缃兘姝g‘锛岃閲嶆柊瀹夎绾噣绯荤粺鍚庡啀娆″皾璇�"
+		if [[ -n ${localIP} ]]; then
+			echoContent yellow " ---> 妫�娴嬭繑鍥炲�煎紓甯革紝寤鸿鎵嬪姩鍗歌浇nginx鍚庨噸鏂版墽琛岃剼鏈�"
+		fi
+		echoContent red " ---> 璇锋鏌ラ槻鐏瑙勫垯鏄惁寮�鏀�443銆�80\n"
+		read -r -p "鏄惁閫氳繃鑴氭湰淇敼闃茬伀澧欒鍒欏紑鏀�443銆�80绔彛锛焄y/n]:" allPortFirewallStatus
+		if [[ ${allPortFirewallStatus} == "y" ]]; then
+			allowPort 80
+			allowPort 443
+			handleNginx start
+			checkIP
+		else
+			exit 0
+		fi
+	else
+		if echo "${localIP}" | awk -F "[,]" '{print $2}' | grep -q "." || echo "${localIP}" | awk -F "[,]" '{print $2}' | grep -q ":"; then
+			echoContent red "\n ---> 妫�娴嬪埌澶氫釜ip锛岃纭鏄惁鍏抽棴cloudflare鐨勪簯鏈�"
+			echoContent yellow " ---> 鍏抽棴浜戞湹鍚庣瓑寰呬笁鍒嗛挓鍚庨噸璇�"
+			echoContent yellow " ---> 妫�娴嬪埌鐨刬p濡備笅:[${localIP}]"
+			exit 0
+		fi
+		echoContent green " ---> 褰撳墠鍩熷悕ip涓�:[${localIP}]"
+	fi
+
+}
+# 瀹夎TLS
+installTLS() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鐢宠TLS璇佷功\n"
+	local tlsDomain=${domain}
+	# 瀹夎tls
+	if [[ -f "/etc/v2ray-agent/tls/${tlsDomain}.crt" && -f "/etc/v2ray-agent/tls/${tlsDomain}.key" && -n $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]] || [[ -d "$HOME/.acme.sh/${tlsDomain}_ecc" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" ]]; then
+		echoContent green " ---> 妫�娴嬪埌璇佷功"
+		# checkTLStatus
+		renewalTLS
+
+		if [[ -z $(find /etc/v2ray-agent/tls/ -name "${tlsDomain}.crt") ]] || [[ -z $(find /etc/v2ray-agent/tls/ -name "${tlsDomain}.key") ]] || [[ -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]]; then
+			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${tlsDomain}" --fullchainpath "/etc/v2ray-agent/tls/${tlsDomain}.crt" --keypath "/etc/v2ray-agent/tls/${tlsDomain}.key" --ecc >/dev/null
+		else
+			echoContent yellow " ---> 濡傛湭杩囨湡鎴栬�呰嚜瀹氫箟璇佷功璇烽�夋嫨[n]\n"
+			read -r -p "鏄惁閲嶆柊瀹夎锛焄y/n]:" reInstallStatus
+			if [[ "${reInstallStatus}" == "y" ]]; then
+				rm -rf /etc/v2ray-agent/tls/*
+				installTLS "$1"
+			fi
+		fi
+
+	elif [[ -d "$HOME/.acme.sh" ]] && [[ ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" || ! -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" ]]; then
+		echoContent green " ---> 瀹夎TLS璇佷功"
+		if echo "${localIP}" | grep -q ":"; then
+			sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server letsencrypt --listen-v6 | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
+		else
+			sudo "$HOME/.acme.sh/acme.sh" --issue -d "${tlsDomain}" --standalone -k ec-256 --server letsencrypt | tee -a /etc/v2ray-agent/tls/acme.log >/dev/null
+		fi
+
+		if [[ -d "$HOME/.acme.sh/${tlsDomain}_ecc" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.key" && -f "$HOME/.acme.sh/${tlsDomain}_ecc/${tlsDomain}.cer" ]]; then
+			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${tlsDomain}" --fullchainpath "/etc/v2ray-agent/tls/${tlsDomain}.crt" --keypath "/etc/v2ray-agent/tls/${tlsDomain}.key" --ecc >/dev/null
+		fi
+		if [[ ! -f "/etc/v2ray-agent/tls/${tlsDomain}.crt" || ! -f "/etc/v2ray-agent/tls/${tlsDomain}.key" ]] || [[ -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.key") || -z $(cat "/etc/v2ray-agent/tls/${tlsDomain}.crt") ]]; then
+			tail -n 10 /etc/v2ray-agent/tls/acme.log
+			if [[ ${installTLSCount} == "1" ]]; then
+				echoContent red " ---> TLS瀹夎澶辫触锛岃妫�鏌cme鏃ュ織"
+				exit 0
+			fi
+			echoContent red " ---> TLS瀹夎澶辫触锛屾鍦ㄦ鏌�80銆�443绔彛鏄惁寮�鏀�"
+			allowPort 80
+			allowPort 443
+			echoContent yellow " ---> 閲嶆柊灏濊瘯瀹夎TLS璇佷功"
+			installTLSCount=1
+			installTLS "$1"
+		fi
+		echoContent green " ---> TLS鐢熸垚鎴愬姛"
+	else
+		echoContent yellow " ---> 鏈畨瑁卆cme.sh"
+		exit 0
+	fi
+}
+# 閰嶇疆浼鍗氬
+initNginxConfig() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆Nginx"
+
+	cat <<EOF >${nginxConfigPath}alone.conf
+server {
+    listen 80;
+    listen [::]:80;
+    server_name ${domain};
+    root /usr/share/nginx/html;
+    location ~ /.well-known {allow all;}
+    location /test {return 200 'fjkvymb6len';}
+}
+EOF
+}
+
+# 鑷畾涔�/闅忔満璺緞
+randomPathFunction() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鐢熸垚闅忔満璺緞"
+
+	if [[ -n "${currentPath}" ]]; then
+		echo
+		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑path璺緞 锛焄y/n]:" historyPathStatus
+		echo
+	fi
+
+	if [[ "${historyPathStatus}" == "y" ]]; then
+		customPath=${currentPath}
+		echoContent green " ---> 浣跨敤鎴愬姛\n"
+	else
+		echoContent yellow "璇疯緭鍏ヨ嚜瀹氫箟璺緞[渚�: alone]锛屼笉闇�瑕佹枩鏉狅紝[鍥炶溅]闅忔満璺緞"
+		read -r -p '璺緞:' customPath
+
+		if [[ -z "${customPath}" ]]; then
+			customPath=$(head -n 50 /dev/urandom | sed 's/[^a-z]//g' | strings -n 4 | tr '[:upper:]' '[:lower:]' | head -1)
+			currentPath=${customPath:0:4}
+			customPath=${currentPath}
+		else
+			currentPath=${customPath}
+		fi
+
+	fi
+	echoContent yellow "\n path:${currentPath}"
+	echoContent skyBlue "\n----------------------------"
+}
+# Nginx浼鍗氬
+nginxBlog() {
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞浼绔欑偣"
+	if [[ -d "/usr/share/nginx/html" && -f "/usr/share/nginx/html/check" ]]; then
+		echo
+		read -r -p "妫�娴嬪埌瀹夎浼绔欑偣锛屾槸鍚﹂渶瑕侀噸鏂板畨瑁匸y/n]:" nginxBlogInstallStatus
+		if [[ "${nginxBlogInstallStatus}" == "y" ]]; then
+			rm -rf /usr/share/nginx/html
+			randomNum=$((RANDOM % 6 + 1))
+			wget -q -P /usr/share/nginx https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${randomNum}.zip >/dev/null
+			unzip -o /usr/share/nginx/html${randomNum}.zip -d /usr/share/nginx/html >/dev/null
+			rm -f /usr/share/nginx/html${randomNum}.zip*
+			echoContent green " ---> 娣诲姞浼绔欑偣鎴愬姛"
+		fi
+	else
+		randomNum=$((RANDOM % 6 + 1))
+		rm -rf /usr/share/nginx/html
+		wget -q -P /usr/share/nginx https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${randomNum}.zip >/dev/null
+		unzip -o /usr/share/nginx/html${randomNum}.zip -d /usr/share/nginx/html >/dev/null
+		rm -f /usr/share/nginx/html${randomNum}.zip*
+		echoContent green " ---> 娣诲姞浼绔欑偣鎴愬姛"
+	fi
+
+}
+
+# 淇敼http_port_t绔彛
+updateSELinuxHTTPPortT() {
+
+	$(find /usr/bin /usr/sbin | grep -w journalctl) -xe >/etc/v2ray-agent/nginx_error.log 2>&1
+
+	if find /usr/bin /usr/sbin | grep -q -w semanage && find /usr/bin /usr/sbin | grep -q -w getenforce && grep -E "31300|31302" </etc/v2ray-agent/nginx_error.log | grep -q "Permission denied"; then
+		echoContent red " ---> 妫�鏌ELinux绔彛鏄惁寮�鏀�"
+		if ! $(find /usr/bin /usr/sbin | grep -w semanage) port -l | grep http_port | grep -q 31300; then
+			$(find /usr/bin /usr/sbin | grep -w semanage) port -a -t http_port_t -p tcp 31300
+			echoContent green " ---> http_port_t 31300 绔彛寮�鏀炬垚鍔�"
+		fi
+
+		if ! $(find /usr/bin /usr/sbin | grep -w semanage) port -l | grep http_port | grep -q 31302; then
+			$(find /usr/bin /usr/sbin | grep -w semanage) port -a -t http_port_t -p tcp 31302
+			echoContent green " ---> http_port_t 31302 绔彛寮�鏀炬垚鍔�"
+		fi
+		handleNginx start
+
+	else
+		exit 0
+	fi
+}
+
+# 鎿嶄綔Nginx
+handleNginx() {
+
+	if [[ -z $(pgrep -f "nginx") ]] && [[ "$1" == "start" ]]; then
+		systemctl start nginx 2>/etc/v2ray-agent/nginx_error.log
+
+		sleep 0.5
+
+		if [[ -z $(pgrep -f nginx) ]]; then
+			echoContent red " ---> Nginx鍚姩澶辫触"
+			echoContent red " ---> 璇锋墜鍔ㄥ皾璇曞畨瑁卬ginx鍚庯紝鍐嶆鎵ц鑴氭湰"
+
+			if grep -q "journalctl -xe" </etc/v2ray-agent/nginx_error.log; then
+				updateSELinuxHTTPPortT
+			fi
+
+			# exit 0
+		else
+			echoContent green " ---> Nginx鍚姩鎴愬姛"
+		fi
+
+	elif [[ -n $(pgrep -f "nginx") ]] && [[ "$1" == "stop" ]]; then
+		systemctl stop nginx
+		sleep 0.5
+		if [[ -n $(pgrep -f "nginx") ]]; then
+			pgrep -f "nginx" | xargs kill -9
+		fi
+		echoContent green " ---> Nginx鍏抽棴鎴愬姛"
+	fi
+}
+
+# 瀹氭椂浠诲姟鏇存柊tls璇佷功
+installCronTLS() {
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞瀹氭椂缁存姢璇佷功"
+	crontab -l >/etc/v2ray-agent/backup_crontab.cron
+	local historyCrontab
+	historyCrontab=$(sed '/v2ray-agent/d;/acme.sh/d' /etc/v2ray-agent/backup_crontab.cron)
+	echo "${historyCrontab}" >/etc/v2ray-agent/backup_crontab.cron
+	echo "30 1 * * * /bin/bash /etc/v2ray-agent/install.sh RenewTLS >> /etc/v2ray-agent/crontab_tls.log 2>&1" >>/etc/v2ray-agent/backup_crontab.cron
+	crontab /etc/v2ray-agent/backup_crontab.cron
+	echoContent green "\n ---> 娣诲姞瀹氭椂缁存姢璇佷功鎴愬姛"
+}
+
+# 鏇存柊璇佷功
+renewalTLS() {
+	if [[ -n $1 ]]; then
+		echoContent skyBlue "\n杩涘害  $1/1 : 鏇存柊璇佷功"
+	fi
+	local domain=${currentHost}
+	if [[ -z "${currentHost}" && -n "${tlsDomain}" ]]; then
+		domain=${tlsDomain}
+	fi
+
+	if [[ -d "$HOME/.acme.sh/${domain}_ecc" ]] && [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.key" ]] && [[ -f "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" ]]; then
+		modifyTime=$(stat "$HOME/.acme.sh/${domain}_ecc/${domain}.cer" | sed -n '7,6p' | awk '{print $2" "$3" "$4" "$5}')
+
+		modifyTime=$(date +%s -d "${modifyTime}")
+		currentTime=$(date +%s)
+		((stampDiff = currentTime - modifyTime))
+		((days = stampDiff / 86400))
+		((remainingDays = 90 - days))
+
+		tlsStatus=${remainingDays}
+		if [[ ${remainingDays} -le 0 ]]; then
+			tlsStatus="宸茶繃鏈�"
+		fi
+
+		echoContent skyBlue " ---> 璇佷功妫�鏌ユ棩鏈�:$(date "+%F %H:%M:%S")"
+		echoContent skyBlue " ---> 璇佷功鐢熸垚鏃ユ湡:$(date -d @"${modifyTime}" +"%F %H:%M:%S")"
+		echoContent skyBlue " ---> 璇佷功鐢熸垚澶╂暟:${days}"
+		echoContent skyBlue " ---> 璇佷功鍓╀綑澶╂暟:"${tlsStatus}
+		echoContent skyBlue " ---> 璇佷功杩囨湡鍓嶆渶鍚庝竴澶╄嚜鍔ㄦ洿鏂帮紝濡傛洿鏂板け璐ヨ鎵嬪姩鏇存柊"
+
+		if [[ ${remainingDays} -le 1 ]]; then
+			echoContent yellow " ---> 閲嶆柊鐢熸垚璇佷功"
+			handleNginx stop
+			sudo "$HOME/.acme.sh/acme.sh" --cron --home "$HOME/.acme.sh"
+			sudo "$HOME/.acme.sh/acme.sh" --installcert -d "${domain}" --fullchainpath /etc/v2ray-agent/tls/"${domain}.crt" --keypath /etc/v2ray-agent/tls/"${domain}.key" --ecc
+			reloadCore
+			handleNginx start
+		else
+			echoContent green " ---> 璇佷功鏈夋晥"
+		fi
+	else
+		echoContent red " ---> 鏈畨瑁�"
+	fi
+}
+# 鏌ョ湅TLS璇佷功鐨勭姸鎬�
+checkTLStatus() {
+
+	if [[ -d "$HOME/.acme.sh/${currentHost}_ecc" ]] && [[ -f "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.key" ]] && [[ -f "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.cer" ]]; then
+		modifyTime=$(stat "$HOME/.acme.sh/${currentHost}_ecc/${currentHost}.cer" | sed -n '7,6p' | awk '{print $2" "$3" "$4" "$5}')
+
+		modifyTime=$(date +%s -d "${modifyTime}")
+		currentTime=$(date +%s)
+		((stampDiff = currentTime - modifyTime))
+		((days = stampDiff / 86400))
+		((remainingDays = 90 - days))
+
+		tlsStatus=${remainingDays}
+		if [[ ${remainingDays} -le 0 ]]; then
+			tlsStatus="宸茶繃鏈�"
+		fi
+
+		echoContent skyBlue " ---> 璇佷功鐢熸垚鏃ユ湡:$(date -d "@${modifyTime}" +"%F %H:%M:%S")"
+		echoContent skyBlue " ---> 璇佷功鐢熸垚澶╂暟:${days}"
+		echoContent skyBlue " ---> 璇佷功鍓╀綑澶╂暟:${tlsStatus}"
+	fi
+}
+
+# 瀹夎V2Ray銆佹寚瀹氱増鏈�
+installV2Ray() {
+	readInstallType
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎V2Ray"
+
+	if [[ "${coreInstallType}" != "2" && "${coreInstallType}" != "3" ]]; then
+		if [[ "${selectCoreType}" == "2" ]]; then
+
+			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+		else
+			version=${v2rayCoreVersion}
+		fi
+
+		echoContent green " ---> v2ray-core鐗堟湰:${version}"
+		if wget --help | grep -q show-progress; then
+			wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
+		else
+			wget -c -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
+		fi
+
+		unzip -o "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip" -d /etc/v2ray-agent/v2ray >/dev/null
+		rm -rf "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip"
+	else
+		if [[ "${selectCoreType}" == "3" ]]; then
+			echoContent green " ---> 閿佸畾v2ray-core鐗堟湰涓簐4.32.1"
+			rm -f /etc/v2ray-agent/v2ray/v2ray
+			rm -f /etc/v2ray-agent/v2ray/v2ctl
+			installV2Ray "$1"
+		else
+			echoContent green " ---> v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
+			read -r -p "鏄惁鏇存柊銆佸崌绾э紵[y/n]:" reInstallV2RayStatus
+			if [[ "${reInstallV2RayStatus}" == "y" ]]; then
+				rm -f /etc/v2ray-agent/v2ray/v2ray
+				rm -f /etc/v2ray-agent/v2ray/v2ctl
+				installV2Ray "$1"
+			fi
+		fi
+	fi
+}
+
+# 瀹夎xray
+installXray() {
+	readInstallType
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 瀹夎Xray"
+
+	if [[ "${coreInstallType}" != "1" ]]; then
+
+		version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+
+		echoContent green " ---> Xray-core鐗堟湰:${version}"
+		if wget --help | grep -q show-progress; then
+			wget -c -q --show-progress -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip"
+		else
+			wget -c -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip" >/dev/null 2>&1
+		fi
+
+		unzip -o "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip" -d /etc/v2ray-agent/xray >/dev/null
+		rm -rf "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip"
+		chmod 655 /etc/v2ray-agent/xray/xray
+	else
+		echoContent green " ---> Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
+		read -r -p "鏄惁鏇存柊銆佸崌绾э紵[y/n]:" reInstallXrayStatus
+		if [[ "${reInstallXrayStatus}" == "y" ]]; then
+			rm -f /etc/v2ray-agent/xray/xray
+			installXray "$1"
+		fi
+	fi
+}
+
+# v2ray鐗堟湰绠$悊
+v2rayVersionManageMenu() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : V2Ray鐗堟湰绠$悊"
+	if [[ ! -d "/etc/v2ray-agent/v2ray/" ]]; then
+		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
+		menu
+		exit 0
+	fi
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.鍗囩骇v2ray-core"
+	echoContent yellow "2.鍥為��v2ray-core"
+	echoContent yellow "3.鍏抽棴v2ray-core"
+	echoContent yellow "4.鎵撳紑v2ray-core"
+	echoContent yellow "5.閲嶅惎v2ray-core"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectV2RayType
+	if [[ "${selectV2RayType}" == "1" ]]; then
+		updateV2Ray
+	elif [[ "${selectV2RayType}" == "2" ]]; then
+		echoContent yellow "\n1.鍙彲浠ュ洖閫�鏈�杩戠殑浜斾釜鐗堟湰"
+		echoContent yellow "2.涓嶄繚璇佸洖閫�鍚庝竴瀹氬彲浠ユ甯镐娇鐢�"
+		echoContent yellow "3.濡傛灉鍥為��鐨勭増鏈笉鏀寔褰撳墠鐨刢onfig锛屽垯浼氭棤娉曡繛鎺ワ紝璋ㄦ厧鎿嶄綔"
+		echoContent skyBlue "------------------------Version-------------------------------"
+		curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}'
+
+		echoContent skyBlue "--------------------------------------------------------------"
+		read -r -p "璇疯緭鍏ヨ鍥為��鐨勭増鏈�:" selectV2rayVersionType
+		version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}' | grep "${selectV2rayVersionType}:" | awk -F "[:]" '{print $2}')
+		if [[ -n "${version}" ]]; then
+			updateV2Ray "${version}"
+		else
+			echoContent red "\n ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
+			v2rayVersionManageMenu 1
+		fi
+	elif [[ "${selectXrayType}" == "3" ]]; then
+		handleV2Ray stop
+	elif [[ "${selectXrayType}" == "4" ]]; then
+		handleV2Ray start
+	elif [[ "${selectXrayType}" == "5" ]]; then
+		reloadCore
+	fi
+}
+
+# xray鐗堟湰绠$悊
+xrayVersionManageMenu() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : Xray鐗堟湰绠$悊"
+	if [[ ! -d "/etc/v2ray-agent/xray/" ]]; then
+		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
+		menu
+		exit 0
+	fi
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.鍗囩骇Xray-core"
+	echoContent yellow "2.鍥為��Xray-core"
+	echoContent yellow "3.鍏抽棴Xray-core"
+	echoContent yellow "4.鎵撳紑Xray-core"
+	echoContent yellow "5.閲嶅惎Xray-core"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectXrayType
+	if [[ "${selectXrayType}" == "1" ]]; then
+		updateXray
+	elif [[ "${selectXrayType}" == "2" ]]; then
+		echoContent yellow "\n1.鍙彲浠ュ洖閫�鏈�杩戠殑浜斾釜鐗堟湰"
+		echoContent yellow "2.涓嶄繚璇佸洖閫�鍚庝竴瀹氬彲浠ユ甯镐娇鐢�"
+		echoContent yellow "3.濡傛灉鍥為��鐨勭増鏈笉鏀寔褰撳墠鐨刢onfig锛屽垯浼氭棤娉曡繛鎺ワ紝璋ㄦ厧鎿嶄綔"
+		echoContent skyBlue "------------------------Version-------------------------------"
+		curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}'
+		echoContent skyBlue "--------------------------------------------------------------"
+		read -r -p "璇疯緭鍏ヨ鍥為��鐨勭増鏈�:" selectXrayVersionType
+		version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -5 | awk '{print ""NR""":"$0}' | grep "${selectXrayVersionType}:" | awk -F "[:]" '{print $2}')
+		if [[ -n "${version}" ]]; then
+			updateXray "${version}"
+		else
+			echoContent red "\n ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
+			xrayVersionManageMenu 1
+		fi
+	elif [[ "${selectXrayType}" == "3" ]]; then
+		handleXray stop
+	elif [[ "${selectXrayType}" == "4" ]]; then
+		handleXray start
+	elif [[ "${selectXrayType}" == "5" ]]; then
+		reloadCore
+	fi
+
+}
+# 鏇存柊V2Ray
+updateV2Ray() {
+	readInstallType
+	if [[ -z "${coreInstallType}" ]]; then
+
+		if [[ -n "$1" ]]; then
+			version=$1
+		else
+			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+		fi
+		# 浣跨敤閿佸畾鐨勭増鏈�
+		if [[ -n "${v2rayCoreVersion}" ]]; then
+			version=${v2rayCoreVersion}
+		fi
+		echoContent green " ---> v2ray-core鐗堟湰:${version}"
+
+		if wget --help | grep -q show-progress; then
+			#wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
+			wget -c -q --show-progress -P /etc/v2ray-agent/v2ray/ "http://www.zgleiju.com:8967/raw/Hunter/Linux/v2ray-core.git/master/releases/download/${version}/${v2rayCoreCPUVendor}.zip"
+		else
+			#wget -c -P "/etc/v2ray-agent/v2ray/ https://github.com/v2fly/v2ray-core/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
+			wget -c -P "/etc/v2ray-agent/v2ray/ http://www.zgleiju.com:8967/raw/Hunter/Linux/v2ray-core.git/master/releases/download/${version}/${v2rayCoreCPUVendor}.zip" >/dev/null 2>&1
+		fi
+
+		unzip -o "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip" -d /etc/v2ray-agent/v2ray >/dev/null
+		rm -rf "/etc/v2ray-agent/v2ray/${v2rayCoreCPUVendor}.zip"
+		handleV2Ray stop
+		handleV2Ray start
+	else
+		echoContent green " ---> 褰撳墠v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
+
+		if [[ -n "$1" ]]; then
+			version=$1
+		else
+			version=$(curl -s https://api.github.com/repos/v2fly/v2ray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+		fi
+
+		if [[ -n "${v2rayCoreVersion}" ]]; then
+			version=${v2rayCoreVersion}
+		fi
+		if [[ -n "$1" ]]; then
+			read -r -p "鍥為��鐗堟湰涓�${version}锛屾槸鍚︾户缁紵[y/n]:" rollbackV2RayStatus
+			if [[ "${rollbackV2RayStatus}" == "y" ]]; then
+				if [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
+					echoContent green " ---> 褰撳墠v2ray-core鐗堟湰:$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)"
+				elif [[ "${coreInstallType}" == "1" ]]; then
+					echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
+				fi
+
+				handleV2Ray stop
+				rm -f /etc/v2ray-agent/v2ray/v2ray
+				rm -f /etc/v2ray-agent/v2ray/v2ctl
+				updateV2Ray "${version}"
+			else
+				echoContent green " ---> 鏀惧純鍥為��鐗堟湰"
+			fi
+		elif [[ "${version}" == "v$(/etc/v2ray-agent/v2ray/v2ray --version | awk '{print $2}' | head -1)" ]]; then
+			read -r -p "褰撳墠鐗堟湰涓庢渶鏂扮増鐩稿悓锛屾槸鍚﹂噸鏂板畨瑁咃紵[y/n]:" reInstallV2RayStatus
+			if [[ "${reInstallV2RayStatus}" == "y" ]]; then
+				handleV2Ray stop
+				rm -f /etc/v2ray-agent/v2ray/v2ray
+				rm -f /etc/v2ray-agent/v2ray/v2ctl
+				updateV2Ray
+			else
+				echoContent green " ---> 鏀惧純閲嶆柊瀹夎"
+			fi
+		else
+			read -r -p "鏈�鏂扮増鏈负:${version}锛屾槸鍚︽洿鏂帮紵[y/n]:" installV2RayStatus
+			if [[ "${installV2RayStatus}" == "y" ]]; then
+				rm -f /etc/v2ray-agent/v2ray/v2ray
+				rm -f /etc/v2ray-agent/v2ray/v2ctl
+				updateV2Ray
+			else
+				echoContent green " ---> 鏀惧純鏇存柊"
+			fi
+
+		fi
+	fi
+}
+
+# 鏇存柊Xray
+updateXray() {
+	readInstallType
+	if [[ -z "${coreInstallType}" ]]; then
+		if [[ -n "$1" ]]; then
+			version=$1
+		else
+			version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+		fi
+
+		echoContent green " ---> Xray-core鐗堟湰:${version}"
+
+		if wget --help | grep -q show-progress; then
+			wget -c -q --show-progress -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip"
+		else
+			wget -c -P /etc/v2ray-agent/xray/ "https://github.com/XTLS/Xray-core/releases/download/${version}/${xrayCoreCPUVendor}.zip" >/dev/null 2>&1
+		fi
+
+		unzip -o "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip" -d /etc/v2ray-agent/xray >/dev/null
+		rm -rf "/etc/v2ray-agent/xray/${xrayCoreCPUVendor}.zip"
+		chmod 655 /etc/v2ray-agent/xray/xray
+		handleXray stop
+		handleXray start
+	else
+		echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
+
+		if [[ -n "$1" ]]; then
+			version=$1
+		else
+			version=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases | jq -r '.[]|select (.prerelease==false)|.tag_name' | head -1)
+		fi
+
+		if [[ -n "$1" ]]; then
+			read -r -p "鍥為��鐗堟湰涓�${version}锛屾槸鍚︾户缁紵[y/n]:" rollbackXrayStatus
+			if [[ "${rollbackXrayStatus}" == "y" ]]; then
+				echoContent green " ---> 褰撳墠Xray-core鐗堟湰:$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)"
+
+				handleXray stop
+				rm -f /etc/v2ray-agent/xray/xray
+				updateXray "${version}"
+			else
+				echoContent green " ---> 鏀惧純鍥為��鐗堟湰"
+			fi
+		elif [[ "${version}" == "v$(/etc/v2ray-agent/xray/xray --version | awk '{print $2}' | head -1)" ]]; then
+			read -r -p "褰撳墠鐗堟湰涓庢渶鏂扮増鐩稿悓锛屾槸鍚﹂噸鏂板畨瑁咃紵[y/n]:" reInstallXrayStatus
+			if [[ "${reInstallXrayStatus}" == "y" ]]; then
+				handleXray stop
+				rm -f /etc/v2ray-agent/xray/xray
+				rm -f /etc/v2ray-agent/xray/xray
+				updateXray
+			else
+				echoContent green " ---> 鏀惧純閲嶆柊瀹夎"
+			fi
+		else
+			read -r -p "鏈�鏂扮増鏈负:${version}锛屾槸鍚︽洿鏂帮紵[y/n]:" installXrayStatus
+			if [[ "${installXrayStatus}" == "y" ]]; then
+				rm -f /etc/v2ray-agent/xray/xray
+				updateXray
+			else
+				echoContent green " ---> 鏀惧純鏇存柊"
+			fi
+
+		fi
+	fi
+}
+
+# 楠岃瘉鏁翠釜鏈嶅姟鏄惁鍙敤
+checkGFWStatue() {
+	readInstallType
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 楠岃瘉鏈嶅姟鍚姩鐘舵��"
+	if [[ "${coreInstallType}" == "1" ]] && [[ -n $(pgrep -f xray/xray) ]]; then
+		echoContent green " ---> 鏈嶅姟鍚姩鎴愬姛"
+	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]] && [[ -n $(pgrep -f v2ray/v2ray) ]]; then
+		echoContent green " ---> 鏈嶅姟鍚姩鎴愬姛"
+	else
+		echoContent red " ---> 鏈嶅姟鍚姩澶辫触锛岃妫�鏌ョ粓绔槸鍚︽湁鏃ュ織鎵撳嵃"
+		exit 0
+	fi
+
+}
+
+# V2Ray寮�鏈鸿嚜鍚�
+installV2RayService() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆V2Ray寮�鏈鸿嚜鍚�"
+	if [[ -n $(find /bin /usr/bin -name "systemctl") ]]; then
+		rm -rf /etc/systemd/system/v2ray.service
+		touch /etc/systemd/system/v2ray.service
+		execStart='/etc/v2ray-agent/v2ray/v2ray -confdir /etc/v2ray-agent/v2ray/conf'
+		cat <<EOF >/etc/systemd/system/v2ray.service
+[Unit]
+Description=V2Ray - A unified platform for anti-censorship
+Documentation=https://v2ray.com https://guide.v2fly.org
+After=network.target nss-lookup.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+User=root
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW
+NoNewPrivileges=yes
+ExecStart=${execStart}
+Restart=on-failure
+RestartPreventExitStatus=23
+LimitNPROC=10000
+LimitNOFILE=1000000
+
+[Install]
+WantedBy=multi-user.target
+EOF
+		systemctl daemon-reload
+		systemctl enable v2ray.service
+		echoContent green " ---> 閰嶇疆V2Ray寮�鏈鸿嚜鍚垚鍔�"
+	fi
+}
+
+# Xray寮�鏈鸿嚜鍚�
+installXrayService() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 閰嶇疆Xray寮�鏈鸿嚜鍚�"
+	if [[ -n $(find /bin /usr/bin -name "systemctl") ]]; then
+		rm -rf /etc/systemd/system/xray.service
+		touch /etc/systemd/system/xray.service
+		execStart='/etc/v2ray-agent/xray/xray run -confdir /etc/v2ray-agent/xray/conf'
+		cat <<EOF >/etc/systemd/system/xray.service
+[Unit]
+Description=Xray Service
+Documentation=https://github.com/XTLS/Xray-core
+After=network.target nss-lookup.target
+Wants=network-online.target
+
+[Service]
+Type=simple
+User=root
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW
+NoNewPrivileges=yes
+ExecStart=${execStart}
+Restart=on-failure
+RestartPreventExitStatus=23
+LimitNPROC=10000
+LimitNOFILE=1000000
+
+[Install]
+WantedBy=multi-user.target
+EOF
+		systemctl daemon-reload
+		systemctl enable xray.service
+		echoContent green " ---> 閰嶇疆Xray寮�鏈鸿嚜鍚垚鍔�"
+	fi
+}
+
+# 鎿嶄綔V2Ray
+handleV2Ray() {
+	# shellcheck disable=SC2010
+	if find /bin /usr/bin | grep -q systemctl && ls /etc/systemd/system/ | grep -q v2ray.service; then
+		if [[ -z $(pgrep -f "v2ray/v2ray") ]] && [[ "$1" == "start" ]]; then
+			systemctl start v2ray.service
+		elif [[ -n $(pgrep -f "v2ray/v2ray") ]] && [[ "$1" == "stop" ]]; then
+			systemctl stop v2ray.service
+		fi
+	fi
+	sleep 0.8
+
+	if [[ "$1" == "start" ]]; then
+		if [[ -n $(pgrep -f "v2ray/v2ray") ]]; then
+			echoContent green " ---> V2Ray鍚姩鎴愬姛"
+		else
+			echoContent red "V2Ray鍚姩澶辫触"
+			echoContent red "璇锋墜鍔ㄦ墽琛屻��/etc/v2ray-agent/v2ray/v2ray -confdir /etc/v2ray-agent/v2ray/conf銆戯紝鏌ョ湅閿欒鏃ュ織"
+			exit 0
+		fi
+	elif [[ "$1" == "stop" ]]; then
+		if [[ -z $(pgrep -f "v2ray/v2ray") ]]; then
+			echoContent green " ---> V2Ray鍏抽棴鎴愬姛"
+		else
+			echoContent red "V2Ray鍏抽棴澶辫触"
+			echoContent red "璇锋墜鍔ㄦ墽琛屻�恜s -ef|grep -v grep|grep v2ray|awk '{print \$2}'|xargs kill -9銆�"
+			exit 0
+		fi
+	fi
+}
+# 鎿嶄綔xray
+handleXray() {
+	if [[ -n $(find /bin /usr/bin -name "systemctl") ]] && [[ -n $(find /etc/systemd/system/ -name "xray.service") ]]; then
+		if [[ -z $(pgrep -f "xray/xray") ]] && [[ "$1" == "start" ]]; then
+			systemctl start xray.service
+		elif [[ -n $(pgrep -f "xray/xray") ]] && [[ "$1" == "stop" ]]; then
+			systemctl stop xray.service
+		fi
+	fi
+
+	sleep 0.8
+
+	if [[ "$1" == "start" ]]; then
+		if [[ -n $(pgrep -f "xray/xray") ]]; then
+			echoContent green " ---> Xray鍚姩鎴愬姛"
+		else
+			echoContent red "Xray鍚姩澶辫触"
+			echoContent red "璇锋墜鍔ㄦ墽琛屻��/etc/v2ray-agent/xray/xray -confdir /etc/v2ray-agent/xray/conf銆戯紝鏌ョ湅閿欒鏃ュ織"
+			exit 0
+		fi
+	elif [[ "$1" == "stop" ]]; then
+		if [[ -z $(pgrep -f "xray/xray") ]]; then
+			echoContent green " ---> Xray鍏抽棴鎴愬姛"
+		else
+			echoContent red "xray鍏抽棴澶辫触"
+			echoContent red "璇锋墜鍔ㄦ墽琛屻�恜s -ef|grep -v grep|grep xray|awk '{print \$2}'|xargs kill -9銆�"
+			exit 0
+		fi
+	fi
+}
+# 鑾峰彇clients閰嶇疆
+getClients() {
+	local path=$1
+
+	local addClientsStatus=$2
+	previousClients=
+	if [[ ${addClientsStatus} == "true" ]]; then
+		if [[ ! -f "${path}" ]]; then
+			echo
+			local protocol
+			protocol=$(echo "${path}" | awk -F "[_]" '{print $2 $3}')
+			echoContent yellow "娌℃湁璇诲彇鍒版鍗忚[${protocol}]涓婁竴娆″畨瑁呯殑閰嶇疆鏂囦欢锛岄噰鐢ㄩ厤缃枃浠剁殑绗竴涓猽uid"
+		else
+			previousClients=$(jq -r ".inbounds[0].settings.clients" "${path}")
+		fi
+
+	fi
+}
+
+# 娣诲姞client閰嶇疆
+addClients() {
+	local path=$1
+	local addClientsStatus=$2
+	if [[ ${addClientsStatus} == "true" && -n "${previousClients}" ]]; then
+		config=$(jq -r ".inbounds[0].settings.clients = ${previousClients}" "${path}")
+		echo "${config}" | jq . >"${path}"
+	fi
+}
+
+# 鍒濆鍖朒ysteria閰嶇疆
+initHysteriaConfig() {
+	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朒ysteria閰嶇疆"
+}
+
+# 鍒濆鍖朧2Ray 閰嶇疆鏂囦欢
+initV2RayConfig() {
+	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朧2Ray閰嶇疆"
+	echo
+
+	read -r -p "鏄惁鑷畾涔塙UID 锛焄y/n]:" customUUIDStatus
+	echo
+	if [[ "${customUUIDStatus}" == "y" ]]; then
+		read -r -p "璇疯緭鍏ュ悎娉曠殑UUID:" currentCustomUUID
+		if [[ -n "${currentCustomUUID}" ]]; then
+			uuid=${currentCustomUUID}
+		fi
+	fi
+	local addClientsStatus=
+	if [[ -n "${currentUUID}" && -z "${uuid}" ]]; then
+		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑UUID 锛焄y/n]:" historyUUIDStatus
+		if [[ "${historyUUIDStatus}" == "y" ]]; then
+			uuid=${currentUUID}
+			addClientsStatus=true
+		else
+			uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
+		fi
+	elif [[ -z "${uuid}" ]]; then
+		uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
+	fi
+
+	if [[ -z "${uuid}" ]]; then
+		addClientsStatus=
+		echoContent red "\n ---> uuid璇诲彇閿欒锛岄噸鏂扮敓鎴�"
+		uuid=$(/etc/v2ray-agent/v2ray/v2ctl uuid)
+	fi
+
+	movePreviousConfig
+	# log
+	cat <<EOF >/etc/v2ray-agent/v2ray/conf/00_log.json
+{
+  "log": {
+    "error": "/etc/v2ray-agent/v2ray/error.log",
+    "loglevel": "warning"
+  }
+}
+EOF
+	# outbounds
+	if [[ -n "${pingIPv6}" ]]; then
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/10_ipv6_outbounds.json
+{
+    "outbounds": [
+        {
+          "protocol": "freedom",
+          "settings": {},
+          "tag": "direct"
+        }
+    ]
+}
+EOF
+
+	else
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/10_ipv4_outbounds.json
+{
+    "outbounds":[
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv4"
+            },
+            "tag":"IPv4-out"
+        },
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv6"
+            },
+            "tag":"IPv6-out"
+        },
+        {
+            "protocol":"blackhole",
+            "tag":"blackhole-out"
+        }
+    ]
+}
+EOF
+	fi
+
+	# dns
+	cat <<EOF >/etc/v2ray-agent/v2ray/conf/11_dns.json
+{
+    "dns": {
+        "servers": [
+          "localhost"
+        ]
+  }
+}
+EOF
+
+	# VLESS_TCP_TLS
+	# 鍥炶惤nginx
+	local fallbacksList='{"dest":31300,"xver":0},{"alpn":"h2","dest":31302,"xver":0}'
+
+	# trojan
+	if echo "${selectCustomInstallType}" | grep -q 4 || [[ "$1" == "all" ]]; then
+
+		fallbacksList='{"dest":31296,"xver":1},{"alpn":"h2","dest":31302,"xver":0}'
+
+		getClients "${configPath}../tmp/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/04_trojan_TCP_inbounds.json
+{
+"inbounds":[
+	{
+	  "port": 31296,
+	  "listen": "127.0.0.1",
+	  "protocol": "trojan",
+	  "tag":"trojanTCP",
+	  "settings": {
+		"clients": [
+		  {
+			"password": "${uuid}",
+			"email": "${domain}_trojan_tcp"
+		  }
+		],
+		"fallbacks":[
+			{"dest":"31300"}
+		]
+	  },
+	  "streamSettings": {
+		"network": "tcp",
+		"security": "none",
+		"tcpSettings": {
+			"acceptProxyProtocol": true
+		}
+	  }
+	}
+	]
+}
+EOF
+		addClients "/etc/v2ray-agent/v2ray/conf/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VLESS_WS_TLS
+	if echo "${selectCustomInstallType}" | grep -q 1 || [[ "$1" == "all" ]]; then
+		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'ws","dest":31297,"xver":1}'
+		getClients "${configPath}../tmp/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/03_VLESS_WS_inbounds.json
+{
+"inbounds":[
+    {
+	  "port": 31297,
+	  "listen": "127.0.0.1",
+	  "protocol": "vless",
+	  "tag":"VLESSWS",
+	  "settings": {
+		"clients": [
+		  {
+			"id": "${uuid}",
+			"email": "${domain}_VLESS_WS"
+		  }
+		],
+		"decryption": "none"
+	  },
+	  "streamSettings": {
+		"network": "ws",
+		"security": "none",
+		"wsSettings": {
+		  "acceptProxyProtocol": true,
+		  "path": "/${customPath}ws"
+		}
+	  }
+	}
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/v2ray/conf/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# trojan_grpc
+	if echo "${selectCustomInstallType}" | grep -q 2 || [[ "$1" == "all" ]]; then
+		if ! echo "${selectCustomInstallType}" | grep -q 5 && [[ -n ${selectCustomInstallType} ]]; then
+			fallbacksList=${fallbacksList//31302/31304}
+		fi
+		getClients "${configPath}../tmp/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/04_trojan_gRPC_inbounds.json
+{
+    "inbounds": [
+        {
+            "port": 31304,
+            "listen": "127.0.0.1",
+            "protocol": "trojan",
+            "tag": "trojangRPCTCP",
+            "settings": {
+                "clients": [
+                    {
+                        "password": "${uuid}",
+                        "email": "${domain}_trojan_gRPC"
+                    }
+                ],
+                "fallbacks": [
+                    {
+                        "dest": "31300"
+                    }
+                ]
+            },
+            "streamSettings": {
+                "network": "grpc",
+                "grpcSettings": {
+                    "serviceName": "${customPath}trojangrpc"
+                }
+            }
+        }
+    ]
+}
+EOF
+		addClients "/etc/v2ray-agent/v2ray/conf/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VMess_WS
+	if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
+		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
+
+		getClients "${configPath}../tmp/05_VMess_WS_inbounds.json" "${addClientsStatus}"
+
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/05_VMess_WS_inbounds.json
+{
+"inbounds":[
+{
+  "listen": "127.0.0.1",
+  "port": 31299,
+  "protocol": "vmess",
+  "tag":"VMessWS",
+  "settings": {
+    "clients": [
+      {
+        "id": "${uuid}",
+        "alterId": 0,
+        "add": "${add}",
+        "email": "${domain}_vmess_ws"
+      }
+    ]
+  },
+  "streamSettings": {
+    "network": "ws",
+    "security": "none",
+    "wsSettings": {
+      "acceptProxyProtocol": true,
+      "path": "/${customPath}vws"
+    }
+  }
+}
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/v2ray/conf/05_VMess_WS_inbounds.json" "${addClientsStatus}"
+	fi
+
+	if echo "${selectCustomInstallType}" | grep -q 5 || [[ "$1" == "all" ]]; then
+		getClients "${configPath}../tmp/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/v2ray/conf/06_VLESS_gRPC_inbounds.json
+{
+    "inbounds":[
+    {
+        "port": 31301,
+        "listen": "127.0.0.1",
+        "protocol": "vless",
+        "tag":"VLESSGRPC",
+        "settings": {
+            "clients": [
+                {
+                    "id": "${uuid}",
+                    "add": "${add}",
+                    "email": "${domain}_VLESS_gRPC"
+                }
+            ],
+            "decryption": "none"
+        },
+        "streamSettings": {
+            "network": "grpc",
+            "grpcSettings": {
+                "serviceName": "${customPath}grpc"
+            }
+        }
+    }
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/v2ray/conf/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VLESS_TCP
+	getClients "${configPath}../tmp/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
+	cat <<EOF >/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json
+{
+"inbounds":[
+{
+  "port": 443,
+  "protocol": "vless",
+  "tag":"VLESSTCP",
+  "settings": {
+    "clients": [
+     {
+        "id": "${uuid}",
+        "add":"${add}",
+        "email": "${domain}_VLESS_TLS-direct_TCP"
+      }
+    ],
+    "decryption": "none",
+    "fallbacks": [
+        ${fallbacksList}
+    ]
+  },
+  "streamSettings": {
+    "network": "tcp",
+    "security": "tls",
+    "tlsSettings": {
+      "minVersion": "1.2",
+      "alpn": [
+        "http/1.1",
+        "h2"
+      ],
+      "certificates": [
+        {
+          "certificateFile": "/etc/v2ray-agent/tls/${domain}.crt",
+          "keyFile": "/etc/v2ray-agent/tls/${domain}.key",
+          "ocspStapling": 3600,
+          "usage":"encipherment"
+        }
+      ]
+    }
+  }
+}
+]
+}
+EOF
+	addClients "/etc/v2ray-agent/v2ray/conf/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
+
+}
+
+# 鍒濆鍖朮ray Trojan XTLS 閰嶇疆鏂囦欢
+initXrayFrontingConfig() {
+	if [[ -z "${configPath}" ]]; then
+		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
+		menu
+		exit 0
+	fi
+	if [[ "${coreInstallType}" != "1" ]]; then
+		echoContent red " ---> 鏈畨瑁呭彲鐢ㄧ被鍨�"
+	fi
+	local xtlsType=
+	if echo ${currentInstallProtocolType} | grep -q trojan; then
+		xtlsType=VLESS
+	else
+		xtlsType=Trojan
+
+	fi
+
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 鍓嶇疆鍒囨崲涓�${xtlsType}"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	echoContent yellow "浼氬皢鍓嶇疆鏇挎崲涓�${xtlsType}"
+	echoContent yellow "濡傛灉鍓嶇疆鏄疶rojan锛屾煡鐪嬪笎鍙锋椂鍒欎細鍑虹幇涓や釜Trojan鍗忚鐨勮妭鐐癸紝鏈変竴涓笉鍙敤xtls"
+	echoContent yellow "鍐嶆鎵ц鍙垏鎹㈣嚦涓婁竴娆$殑鍓嶇疆\n"
+
+	echoContent yellow "1.鍒囨崲鑷�${xtlsType}"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectType
+	if [[ "${selectType}" == "1" ]]; then
+
+		if [[ "${xtlsType}" == "Trojan" ]]; then
+
+			local VLESSConfig
+			VLESSConfig=$(cat ${configPath}${frontingType}.json)
+			VLESSConfig=${VLESSConfig//"id"/"password"}
+			VLESSConfig=${VLESSConfig//VLESSTCP/TrojanTCPXTLS}
+			VLESSConfig=${VLESSConfig//VLESS/Trojan}
+			VLESSConfig=${VLESSConfig//"vless"/"trojan"}
+			VLESSConfig=${VLESSConfig//"id"/"password"}
+
+			echo "${VLESSConfig}" | jq . >${configPath}02_trojan_TCP_inbounds.json
+			rm ${configPath}${frontingType}.json
+		elif [[ "${xtlsType}" == "VLESS" ]]; then
+
+			local VLESSConfig
+			VLESSConfig=$(cat ${configPath}02_trojan_TCP_inbounds.json)
+			VLESSConfig=${VLESSConfig//"password"/"id"}
+			VLESSConfig=${VLESSConfig//TrojanTCPXTLS/VLESSTCP}
+			VLESSConfig=${VLESSConfig//Trojan/VLESS}
+			VLESSConfig=${VLESSConfig//"trojan"/"vless"}
+			VLESSConfig=${VLESSConfig//"password"/"id"}
+
+			echo "${VLESSConfig}" | jq . >${configPath}02_VLESS_TCP_inbounds.json
+			rm ${configPath}02_trojan_TCP_inbounds.json
+		fi
+		reloadCore
+	fi
+
+	exit 0
+}
+
+# 绉诲姩涓婃閰嶇疆鏂囦欢鑷充复鏃舵枃浠�
+movePreviousConfig() {
+	if [[ -n "${configPath}" ]] && [[ -f "${configPath}02_VLESS_TCP_inbounds.json" ]]; then
+		rm -rf ${configPath}../tmp/*
+		mv ${configPath}* ${configPath}../tmp/
+	fi
+
+}
+
+# 鍒濆鍖朮ray 閰嶇疆鏂囦欢
+initXrayConfig() {
+	echoContent skyBlue "\n杩涘害 $2/${totalProgress} : 鍒濆鍖朮ray閰嶇疆"
+	echo
+	local uuid=
+	local addClientsStatus=
+	if [[ -n "${currentUUID}" ]]; then
+		read -r -p "璇诲彇鍒颁笂娆″畨瑁呰褰曪紝鏄惁浣跨敤涓婃瀹夎鏃剁殑UUID 锛焄y/n]:" historyUUIDStatus
+		if [[ "${historyUUIDStatus}" == "y" ]]; then
+			addClientsStatus=true
+			uuid=${currentUUID}
+			echoContent green "\n ---> 浣跨敤鎴愬姛"
+		fi
+	fi
+
+	if [[ -z "${uuid}" ]]; then
+		echoContent yellow "璇疯緭鍏ヨ嚜瀹氫箟UUID[闇�鍚堟硶]锛孾鍥炶溅]闅忔満UUID"
+		read -r -p 'UUID:' customUUID
+
+		if [[ -n ${customUUID} ]]; then
+			uuid=${customUUID}
+		else
+			uuid=$(/etc/v2ray-agent/xray/xray uuid)
+		fi
+
+	fi
+
+	if [[ -z "${uuid}" ]]; then
+		addClientsStatus=
+		echoContent red "\n ---> uuid璇诲彇閿欒锛岄噸鏂扮敓鎴�"
+		uuid=$(/etc/v2ray-agent/xray/xray uuid)
+	fi
+
+	echoContent yellow "\n ${uuid}"
+
+	movePreviousConfig
+
+	# log
+	cat <<EOF >/etc/v2ray-agent/xray/conf/00_log.json
+{
+  "log": {
+    "error": "/etc/v2ray-agent/xray/error.log",
+    "loglevel": "warning"
+  }
+}
+EOF
+
+	# outbounds
+	if [[ -n "${pingIPv6}" ]]; then
+		cat <<EOF >/etc/v2ray-agent/xray/conf/10_ipv6_outbounds.json
+{
+    "outbounds": [
+        {
+          "protocol": "freedom",
+          "settings": {},
+          "tag": "direct"
+        }
+    ]
+}
+EOF
+
+	else
+		cat <<EOF >/etc/v2ray-agent/xray/conf/10_ipv4_outbounds.json
+{
+    "outbounds":[
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv4"
+            },
+            "tag":"IPv4-out"
+        },
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv6"
+            },
+            "tag":"IPv6-out"
+        },
+        {
+            "protocol":"blackhole",
+            "tag":"blackhole-out"
+        }
+    ]
+}
+EOF
+	fi
+
+	# dns
+	cat <<EOF >/etc/v2ray-agent/xray/conf/11_dns.json
+{
+    "dns": {
+        "servers": [
+          "localhost"
+        ]
+  }
+}
+EOF
+
+	# VLESS_TCP_TLS/XTLS
+	# 鍥炶惤nginx
+	local fallbacksList='{"dest":31300,"xver":0},{"alpn":"h2","dest":31302,"xver":0}'
+
+	# trojan
+	if echo "${selectCustomInstallType}" | grep -q 4 || [[ "$1" == "all" ]]; then
+		fallbacksList='{"dest":31296,"xver":1},{"alpn":"h2","dest":31302,"xver":0}'
+		getClients "${configPath}../tmp/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
+
+		cat <<EOF >/etc/v2ray-agent/xray/conf/04_trojan_TCP_inbounds.json
+{
+"inbounds":[
+	{
+	  "port": 31296,
+	  "listen": "127.0.0.1",
+	  "protocol": "trojan",
+	  "tag":"trojanTCP",
+	  "settings": {
+		"clients": [
+		  {
+			"password": "${uuid}",
+			"email": "${domain}_trojan_tcp"
+		  }
+		],
+		"fallbacks":[
+			{"dest":"31300"}
+		]
+	  },
+	  "streamSettings": {
+		"network": "tcp",
+		"security": "none",
+		"tcpSettings": {
+			"acceptProxyProtocol": true
+		}
+	  }
+	}
+	]
+}
+EOF
+		addClients "/etc/v2ray-agent/xray/conf/04_trojan_TCP_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VLESS_WS_TLS
+	if echo "${selectCustomInstallType}" | grep -q 1 || [[ "$1" == "all" ]]; then
+		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'ws","dest":31297,"xver":1}'
+		getClients "${configPath}../tmp/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/xray/conf/03_VLESS_WS_inbounds.json
+{
+"inbounds":[
+    {
+	  "port": 31297,
+	  "listen": "127.0.0.1",
+	  "protocol": "vless",
+	  "tag":"VLESSWS",
+	  "settings": {
+		"clients": [
+		  {
+			"id": "${uuid}",
+			"email": "${domain}_VLESS_WS"
+		  }
+		],
+		"decryption": "none"
+	  },
+	  "streamSettings": {
+		"network": "ws",
+		"security": "none",
+		"wsSettings": {
+		  "acceptProxyProtocol": true,
+		  "path": "/${customPath}ws"
+		}
+	  }
+	}
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/xray/conf/03_VLESS_WS_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# trojan_grpc
+	if echo "${selectCustomInstallType}" | grep -q 2 || [[ "$1" == "all" ]]; then
+		if ! echo "${selectCustomInstallType}" | grep -q 5 && [[ -n ${selectCustomInstallType} ]]; then
+			fallbacksList=${fallbacksList//31302/31304}
+		fi
+		getClients "${configPath}../tmp/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/xray/conf/04_trojan_gRPC_inbounds.json
+{
+    "inbounds": [
+        {
+            "port": 31304,
+            "listen": "127.0.0.1",
+            "protocol": "trojan",
+            "tag": "trojangRPCTCP",
+            "settings": {
+                "clients": [
+                    {
+                        "password": "${uuid}",
+                        "email": "${domain}_trojan_gRPC"
+                    }
+                ],
+                "fallbacks": [
+                    {
+                        "dest": "31300"
+                    }
+                ]
+            },
+            "streamSettings": {
+                "network": "grpc",
+                "grpcSettings": {
+                    "serviceName": "${customPath}trojangrpc"
+                }
+            }
+        }
+    ]
+}
+EOF
+		addClients "/etc/v2ray-agent/xray/conf/04_trojan_gRPC_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VMess_WS
+	if echo "${selectCustomInstallType}" | grep -q 3 || [[ "$1" == "all" ]]; then
+		fallbacksList=${fallbacksList}',{"path":"/'${customPath}'vws","dest":31299,"xver":1}'
+		getClients "${configPath}../tmp/05_VMess_WS_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/xray/conf/05_VMess_WS_inbounds.json
+{
+"inbounds":[
+{
+  "listen": "127.0.0.1",
+  "port": 31299,
+  "protocol": "vmess",
+  "tag":"VMessWS",
+  "settings": {
+    "clients": [
+      {
+        "id": "${uuid}",
+        "alterId": 0,
+        "add": "${add}",
+        "email": "${domain}_vmess_ws"
+      }
+    ]
+  },
+  "streamSettings": {
+    "network": "ws",
+    "security": "none",
+    "wsSettings": {
+      "acceptProxyProtocol": true,
+      "path": "/${customPath}vws"
+    }
+  }
+}
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/xray/conf/05_VMess_WS_inbounds.json" "${addClientsStatus}"
+	fi
+
+	if echo "${selectCustomInstallType}" | grep -q 5 || [[ "$1" == "all" ]]; then
+		getClients "${configPath}../tmp/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
+		cat <<EOF >/etc/v2ray-agent/xray/conf/06_VLESS_gRPC_inbounds.json
+{
+    "inbounds":[
+    {
+        "port": 31301,
+        "listen": "127.0.0.1",
+        "protocol": "vless",
+        "tag":"VLESSGRPC",
+        "settings": {
+            "clients": [
+                {
+                    "id": "${uuid}",
+                    "add": "${add}",
+                    "email": "${domain}_VLESS_gRPC"
+                }
+            ],
+            "decryption": "none"
+        },
+        "streamSettings": {
+            "network": "grpc",
+            "grpcSettings": {
+                "serviceName": "${customPath}grpc"
+            }
+        }
+    }
+]
+}
+EOF
+		addClients "/etc/v2ray-agent/xray/conf/06_VLESS_gRPC_inbounds.json" "${addClientsStatus}"
+	fi
+
+	# VLESS_TCP
+	getClients "${configPath}../tmp/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
+	cat <<EOF >/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json
+{
+"inbounds":[
+{
+  "port": 443,
+  "protocol": "vless",
+  "tag":"VLESSTCP",
+  "settings": {
+    "clients": [
+     {
+        "id": "${uuid}",
+        "add":"${add}",
+        "flow":"xtls-rprx-direct",
+        "email": "${domain}_VLESS_XTLS/TLS-direct_TCP"
+      }
+    ],
+    "decryption": "none",
+    "fallbacks": [
+        ${fallbacksList}
+    ]
+  },
+  "streamSettings": {
+    "network": "tcp",
+    "security": "xtls",
+    "xtlsSettings": {
+      "minVersion": "1.2",
+      "alpn": [
+        "http/1.1",
+        "h2"
+      ],
+      "certificates": [
+        {
+          "certificateFile": "/etc/v2ray-agent/tls/${domain}.crt",
+          "keyFile": "/etc/v2ray-agent/tls/${domain}.key",
+          "ocspStapling": 3600,
+          "usage":"encipherment"
+        }
+      ]
+    }
+  }
+}
+]
+}
+EOF
+	addClients "/etc/v2ray-agent/xray/conf/02_VLESS_TCP_inbounds.json" "${addClientsStatus}"
+}
+
+# 鍒濆鍖朤rojan-Go閰嶇疆
+initTrojanGoConfig() {
+
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 鍒濆鍖朤rojan閰嶇疆"
+	cat <<EOF >/etc/v2ray-agent/trojan/config_full.json
+{
+    "run_type": "server",
+    "local_addr": "127.0.0.1",
+    "local_port": 31296,
+    "remote_addr": "127.0.0.1",
+    "remote_port": 31300,
+    "disable_http_check":true,
+    "log_level":3,
+    "log_file":"/etc/v2ray-agent/trojan/trojan.log",
+    "password": [
+        "${uuid}"
+    ],
+    "dns":[
+        "localhost"
+    ],
+    "transport_plugin":{
+        "enabled":true,
+        "type":"plaintext"
+    },
+    "websocket": {
+        "enabled": true,
+        "path": "/${customPath}tws",
+        "host": "${domain}",
+        "add":"${add}"
+    },
+    "router": {
+        "enabled": false
+    }
+}
+EOF
+}
+
+# 鑷畾涔塁DN IP
+customCDNIP() {
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 娣诲姞cloudflare鑷�塁NAME"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」"
+	echoContent yellow "\n鏁欑▼鍦板潃:"
+	echoContent skyBlue "https://github.com/mack-a/v2ray-agent/blob/master/documents/optimize_V2Ray.md"
+	echoContent red "\n濡傚Cloudflare浼樺寲涓嶄簡瑙o紝璇蜂笉瑕佷娇鐢�"
+	echoContent yellow "\n 1.绉诲姩:104.16.123.96"
+	echoContent yellow " 2.鑱旈��:www.cloudflare.com"
+	echoContent yellow " 3.鐢典俊:www.digitalocean.com"
+	echoContent skyBlue "----------------------------"
+	read -r -p "璇烽�夋嫨[鍥炶溅涓嶄娇鐢╙:" selectCloudflareType
+	case ${selectCloudflareType} in
+	1)
+		add="104.16.123.96"
+		;;
+	2)
+		add="www.cloudflare.com"
+		;;
+	3)
+		add="www.digitalocean.com"
+		;;
+	*)
+		add="${domain}"
+		echoContent yellow "\n ---> 涓嶄娇鐢�"
+		;;
+	esac
+}
+# 閫氱敤
+defaultBase64Code() {
+	local type=$1
+	local email=$2
+	local id=$3
+
+	port=${currentDefaultPort}
+
+	local subAccount
+	subAccount=$(echo "${email}" | awk -F "[_]" '{print $1}')_$(echo "${id}_currentHost" | md5sum | awk '{print $1}')
+	if [[ "${type}" == "vlesstcp" ]]; then
+
+		if [[ "${coreInstallType}" == "1" ]] && echo "${currentInstallProtocolType}" | grep -q 0; then
+			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS/xtls-rprx-direct)"
+			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}\n"
+
+			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-direct)"
+			echoContent green "鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-direct锛岃处鎴峰悕:${email}\n"
+			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}
+EOF
+			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS/xtls-rprx-direct)"
+			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-direct%23${email}\n"
+
+			echoContent skyBlue "----------------------------------------------------------------------------------"
+
+			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS/xtls-rprx-splice)"
+			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}\n"
+
+			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-splice)"
+			echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-splice锛岃处鎴峰悕:${email/direct/splice}\n"
+			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vless://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}
+EOF
+			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS/xtls-rprx-splice)"
+			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-splice%23${email/direct/splice}\n"
+
+		elif [[ "${coreInstallType}" == 2 || "${coreInstallType}" == "3" ]]; then
+			echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+TCP+TLS)"
+			echoContent green "    vless://${id}@${currentHost}:${currentDefaultPort}?security=tls&encryption=none&host=${currentHost}&headerType=none&type=tcp#${email}\n"
+
+			echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+TCP+TLS/xtls-rprx-splice)"
+			echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:tcp锛岃处鎴峰悕:${email/direct/splice}\n"
+
+			cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vless://${id}@${currentHost}:${currentDefaultPort}?security=tls&encryption=none&host=${currentHost}&headerType=none&type=tcp#${email}
+EOF
+			echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+TCP+TLS)"
+			echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3a%2f%2f${id}%40${currentHost}%3a${currentDefaultPort}%3fsecurity%3dtls%26encryption%3dnone%26host%3d${currentHost}%26headerType%3dnone%26type%3dtcp%23${email}\n"
+		fi
+
+	elif [[ "${type}" == "trojanTCPXTLS" ]]; then
+		echoContent yellow " ---> 閫氱敤鏍煎紡(Trojan+TCP+TLS/xtls-rprx-direct)"
+		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}\n"
+
+		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(Trojan+TCP+TLS/xtls-rprx-direct)"
+		echoContent green "鍗忚绫诲瀷:Trojan锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-direct锛岃处鎴峰悕:${email}\n"
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-direct#${email}
+EOF
+		echoContent yellow " ---> 浜岀淮鐮� Trojan(Trojan+TCP+TLS/xtls-rprx-direct)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-direct%23${email}\n"
+
+		echoContent skyBlue "----------------------------------------------------------------------------------"
+
+		echoContent yellow " ---> 閫氱敤鏍煎紡(Trojan+TCP+TLS/xtls-rprx-splice)"
+		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}\n"
+
+		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(Trojan+TCP+TLS/xtls-rprx-splice)"
+		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:xtls锛屼紶杈撴柟寮�:tcp锛宖low:xtls-rprx-splice锛岃处鎴峰悕:${email/direct/splice}\n"
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+trojan://${id}@${currentHost}:${currentDefaultPort}?encryption=none&security=xtls&type=tcp&host=${currentHost}&headerType=none&sni=${currentHost}&flow=xtls-rprx-splice#${email/direct/splice}
+EOF
+		echoContent yellow " ---> 浜岀淮鐮� Trojan(Trojan+TCP+TLS/xtls-rprx-splice)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3A%2F%2F${id}%40${currentHost}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dxtls%26type%3Dtcp%26${currentHost}%3D${currentHost}%26headerType%3Dnone%26sni%3D${currentHost}%26flow%3Dxtls-rprx-splice%23${email/direct/splice}\n"
+
+	elif [[ "${type}" == "vmessws" ]]; then
+		qrCodeBase64Default=$(echo -n "{\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}" | base64 -w 0)
+		qrCodeBase64Default="${qrCodeBase64Default// /}"
+
+		echoContent yellow " ---> 閫氱敤json(VMess+WS+TLS)"
+		echoContent green "    {\"port\":${currentDefaultPort},\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${currentHost}\",\"type\":\"none\",\"path\":\"/${currentPath}vws\",\"net\":\"ws\",\"add\":\"${currentAdd}\",\"allowInsecure\":0,\"method\":\"none\",\"peer\":\"${currentHost}\",\"sni\":\"${currentHost}\"}\n"
+		echoContent yellow " ---> 閫氱敤vmess(VMess+WS+TLS)閾炬帴"
+		echoContent green "    vmess://${qrCodeBase64Default}\n"
+		echoContent yellow " ---> 浜岀淮鐮� vmess(VMess+WS+TLS)"
+
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vmess://${qrCodeBase64Default}
+EOF
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
+
+		#	elif [[ "${type}" == "vmesstcp" ]]; then
+		#
+		#		echoContent red "path:${path}"
+		#		qrCodeBase64Default=$(echo -n "{\"add\":\"${add}\",\"aid\":0,\"host\":\"${host}\",\"id\":\"${id}\",\"net\":\"tcp\",\"path\":\"${path}\",\"port\":${port},\"ps\":\"${email}\",\"scy\":\"none\",\"sni\":\"${host}\",\"tls\":\"tls\",\"v\":2,\"type\":\"http\",\"allowInsecure\":0,\"peer\":\"${host}\",\"obfs\":\"http\",\"obfsParam\":\"${host}\"}" | base64)
+		#		qrCodeBase64Default="${qrCodeBase64Default// /}"
+		#
+		#		echoContent yellow " ---> 閫氱敤json(VMess+TCP+TLS)"
+		#		echoContent green "    {\"port\":'${port}',\"ps\":\"${email}\",\"tls\":\"tls\",\"id\":\"${id}\",\"aid\":0,\"v\":2,\"host\":\"${host}\",\"type\":\"http\",\"path\":\"${path}\",\"net\":\"http\",\"add\":\"${add}\",\"allowInsecure\":0,\"method\":\"post\",\"peer\":\"${host}\",\"obfs\":\"http\",\"obfsParam\":\"${host}\"}\n"
+		#		echoContent yellow " ---> 閫氱敤vmess(VMess+TCP+TLS)閾炬帴"
+		#		echoContent green "    vmess://${qrCodeBase64Default}\n"
+		#
+		#		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+		#vmess://${qrCodeBase64Default}
+		#EOF
+		#		echoContent yellow " ---> 浜岀淮鐮� vmess(VMess+TCP+TLS)"
+		#		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vmess://${qrCodeBase64Default}\n"
+
+	elif [[ "${type}" == "vlessws" ]]; then
+
+		echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+WS+TLS)"
+		echoContent green "    vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&path=/${currentPath}ws#${email}\n"
+
+		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+WS+TLS)"
+		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentAdd}锛屼吉瑁呭煙鍚�/SNI:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:ws锛岃矾寰�:/${currentPath}ws锛岃处鎴峰悕:${email}\n"
+
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=ws&host=${currentHost}&sni=${currentHost}&path=/${currentPath}ws#${email}
+EOF
+
+		echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+WS+TLS)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dws%26host%3D${currentHost}%26sni%3D${currentHost}%26path%3D%252f${currentPath}ws%23${email}"
+
+	elif [[ "${type}" == "vlessgrpc" ]]; then
+
+		echoContent yellow " ---> 閫氱敤鏍煎紡(VLESS+gRPC+TLS)"
+		echoContent green "    vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}\n"
+
+		echoContent yellow " ---> 鏍煎紡鍖栨槑鏂�(VLESS+gRPC+TLS)"
+		echoContent green "    鍗忚绫诲瀷:VLESS锛屽湴鍧�:${currentAdd}锛屼吉瑁呭煙鍚�/SNI:${currentHost}锛岀鍙�:${currentDefaultPort}锛岀敤鎴稩D:${id}锛屽畨鍏�:tls锛屼紶杈撴柟寮�:gRPC锛宎lpn:h2锛宻erviceName:${currentPath}grpc锛岃处鎴峰悕:${email}\n"
+
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+vless://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&security=tls&type=grpc&host=${currentHost}&path=${currentPath}grpc&serviceName=${currentPath}grpc&alpn=h2&sni=${currentHost}#${email}
+EOF
+		echoContent yellow " ---> 浜岀淮鐮� VLESS(VLESS+gRPC+TLS)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=vless%3A%2F%2F${id}%40${currentAdd}%3A${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26type%3Dgrpc%26host%3D${currentHost}%26serviceName%3D${currentPath}grpc%26path%3D${currentPath}grpc%26sni%3D${currentHost}%26alpn%3Dh2%23${email}"
+
+	elif [[ "${type}" == "trojan" ]]; then
+		# URLEncode
+		echoContent yellow " ---> Trojan(TLS)"
+		echoContent green "    trojan://${id}@${currentHost}:${currentDefaultPort}?peer=${currentHost}&sni=${currentHost}&alpn=http/1.1#${currentHost}_Trojan\n"
+
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+trojan://${id}@${currentHost}:${currentDefaultPort}?peer=${currentHost}&sni=${currentHost}&alpn=http/1.1#${email}_Trojan
+EOF
+		echoContent yellow " ---> 浜岀淮鐮� Trojan(TLS)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${currentHost}%3a${port}%3fpeer%3d${currentHost}%26sni%3d${currentHost}%26alpn%3Dhttp/1.1%23${email}\n"
+
+	elif [[ "${type}" == "trojangrpc" ]]; then
+		# URLEncode
+
+		echoContent yellow " ---> Trojan gRPC(TLS)"
+		echoContent green "    trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}\n"
+		cat <<EOF >>"/etc/v2ray-agent/subscribe_tmp/${subAccount}"
+trojan://${id}@${currentAdd}:${currentDefaultPort}?encryption=none&peer=${currentHost}&security=tls&type=grpc&sni=${currentHost}&alpn=h2&path=${currentPath}trojangrpc&serviceName=${currentPath}trojangrpc#${email}
+EOF
+		echoContent yellow " ---> 浜岀淮鐮� Trojan gRPC(TLS)"
+		echoContent green "    https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=trojan%3a%2f%2f${id}%40${currentAdd}%3a${currentDefaultPort}%3Fencryption%3Dnone%26security%3Dtls%26peer%3d${currentHost}%26type%3Dgrpc%26sni%3d${currentHost}%26path%3D${currentPath}trojangrpc%26alpn%3Dh2%26serviceName%3D${currentPath}trojangrpc%23${email}\n"
+	fi
+
+}
+
+# 璐﹀彿
+showAccounts() {
+	readInstallType
+	readInstallProtocolType
+	readConfigHostPathUUID
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 璐﹀彿"
+	local show
+	# VLESS TCP
+	if [[ -n "${configPath}" ]]; then
+		show=1
+		if echo "${currentInstallProtocolType}" | grep -q trojan; then
+			echoContent skyBlue "===================== Trojan TCP TLS/XTLS-direct/XTLS-splice ======================\n"
+			jq .inbounds[0].settings.clients ${configPath}02_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
+				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+				defaultBase64Code trojanTCPXTLS "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
+			done
+
+		else
+			echoContent skyBlue "===================== VLESS TCP TLS/XTLS-direct/XTLS-splice ======================\n"
+			jq .inbounds[0].settings.clients ${configPath}02_VLESS_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
+				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+				echo
+				defaultBase64Code vlesstcp "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
+			done
+		fi
+
+		# VLESS WS
+		if echo ${currentInstallProtocolType} | grep -q 1; then
+			echoContent skyBlue "\n================================ VLESS WS TLS CDN ================================\n"
+
+			jq .inbounds[0].settings.clients ${configPath}03_VLESS_WS_inbounds.json | jq -c '.[]' | while read -r user; do
+				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+				echo
+				local path="${currentPath}ws"
+				#	if [[ ${coreInstallType} == "1" ]]; then
+				#		echoContent yellow "Xray鐨�0-RTT path鍚庨潰浼氭湁锛屼笉鍏煎浠2ray涓烘牳蹇冪殑瀹㈡埛绔紝璇锋墜鍔ㄥ垹闄ゅ悗浣跨敤\n"
+				#		path="${currentPath}ws"
+				#	fi
+				defaultBase64Code vlessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
+			done
+		fi
+
+		# VMess WS
+		if echo ${currentInstallProtocolType} | grep -q 3; then
+			echoContent skyBlue "\n================================ VMess WS TLS CDN ================================\n"
+			local path="${currentPath}vws"
+			if [[ ${coreInstallType} == "1" ]]; then
+				path="${currentPath}vws"
+			fi
+			jq .inbounds[0].settings.clients ${configPath}05_VMess_WS_inbounds.json | jq -c '.[]' | while read -r user; do
+				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+				echo
+				defaultBase64Code vmessws "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
+			done
+		fi
+
+		# VLESS grpc
+		if echo ${currentInstallProtocolType} | grep -q 5; then
+			echoContent skyBlue "\n=============================== VLESS gRPC TLS CDN ===============================\n"
+			echoContent red "\n --->gRPC澶勪簬娴嬭瘯闃舵锛屽彲鑳藉浣犱娇鐢ㄧ殑瀹㈡埛绔笉鍏煎锛屽涓嶈兘浣跨敤璇峰拷鐣�"
+			#			local serviceName
+			#			serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}06_VLESS_gRPC_inbounds.json)
+			jq .inbounds[0].settings.clients ${configPath}06_VLESS_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
+				echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+				echo
+				defaultBase64Code vlessgrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .id)"
+			done
+		fi
+	fi
+
+	# trojan tcp
+	if echo ${currentInstallProtocolType} | grep -q 4; then
+		echoContent skyBlue "\n==================================  Trojan TLS  ==================================\n"
+		jq .inbounds[0].settings.clients ${configPath}04_trojan_TCP_inbounds.json | jq -c '.[]' | while read -r user; do
+			echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+
+			defaultBase64Code trojan "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
+		done
+	fi
+
+	if echo ${currentInstallProtocolType} | grep -q 2; then
+		echoContent skyBlue "\n================================  Trojan gRPC TLS  ================================\n"
+		echoContent red "\n --->gRPC澶勪簬娴嬭瘯闃舵锛屽彲鑳藉浣犱娇鐢ㄧ殑瀹㈡埛绔笉鍏煎锛屽涓嶈兘浣跨敤璇峰拷鐣�"
+		#		local serviceName=
+		#		serviceName=$(jq -r .inbounds[0].streamSettings.grpcSettings.serviceName ${configPath}04_trojan_gRPC_inbounds.json)
+		jq .inbounds[0].settings.clients ${configPath}04_trojan_gRPC_inbounds.json | jq -c '.[]' | while read -r user; do
+			echoContent skyBlue "\n ---> 甯愬彿:$(echo "${user}" | jq -r .email)"
+			echo
+			defaultBase64Code trojangrpc "$(echo "${user}" | jq -r .email)" "$(echo "${user}" | jq -r .password)"
+		done
+	fi
+
+	if [[ -z ${show} ]]; then
+		echoContent red " ---> 鏈畨瑁�"
+	fi
+}
+# 绉婚櫎nginx302閰嶇疆
+removeNginx302() {
+	# 鏌ユ壘鍒�302閭h骞跺垹闄�
+	#	local line302Result=
+	#	line302Result=$(grep -n "return 302" </etc/nginx/conf.d/alone.conf | tail -n 1)
+	local count=0
+	grep -n "return 302" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
+
+		if ! echo "${line}" | grep -q "request_uri"; then
+			local removeIndex=
+			removeIndex=$(echo "${line}" | awk -F "[:]" '{print $1}')
+			removeIndex=$((removeIndex + count))
+			sed -i "${removeIndex}d" /etc/nginx/conf.d/alone.conf
+			count=$((count - 1))
+		fi
+	done
+}
+
+# 妫�鏌�302鏄惁鎴愬姛
+checkNginx302() {
+	local domain302Status=
+	domain302Status=$(curl -s "https://${currentHost}")
+	if echo "${domain302Status}" | grep -q "302"; then
+		local domain302Result=
+		domain302Result=$(curl -L -s "https://${currentHost}")
+		if [[ -n "${domain302Result}" ]]; then
+			echoContent green " ---> 302閲嶅畾鍚戣缃垚鍔�"
+			exit 0
+		fi
+	fi
+	echoContent red " ---> 302閲嶅畾鍚戣缃け璐ワ紝璇蜂粩缁嗘鏌ユ槸鍚﹀拰绀轰緥鐩稿悓"
+	backupNginxConfig restoreBackup
+}
+
+# 澶囦唤鎭㈠nginx鏂囦欢
+backupNginxConfig() {
+	if [[ "$1" == "backup" ]]; then
+		cp /etc/nginx/conf.d/alone.conf /etc/v2ray-agent/alone_backup.conf
+		echoContent green " ---> nginx閰嶇疆鏂囦欢澶囦唤鎴愬姛"
+	fi
+
+	if [[ "$1" == "restoreBackup" ]] && [[ -f "/etc/v2ray-agent/alone_backup.conf" ]]; then
+		cp /etc/v2ray-agent/alone_backup.conf /etc/nginx/conf.d/alone.conf
+		echoContent green " ---> nginx閰嶇疆鏂囦欢鎭㈠澶囦唤鎴愬姛"
+		rm /etc/v2ray-agent/alone_backup.conf
+	fi
+
+}
+# 娣诲姞302閰嶇疆
+addNginx302() {
+	#	local line302Result=
+	#	line302Result=$(| tail -n 1)
+	local count=1
+	grep -n "Strict-Transport-Security" <"/etc/nginx/conf.d/alone.conf" | while read -r line; do
+		if [[ -n "${line}" ]]; then
+			local insertIndex=
+			insertIndex="$(echo "${line}" | awk -F "[:]" '{print $1}')"
+			insertIndex=$((insertIndex + count))
+			sed "${insertIndex}i return 302 '$1';" /etc/nginx/conf.d/alone.conf >/etc/nginx/conf.d/tmpfile && mv /etc/nginx/conf.d/tmpfile /etc/nginx/conf.d/alone.conf
+			count=$((count + 1))
+		else
+			echoContent red " ---> 302娣诲姞澶辫触"
+			backupNginxConfig restoreBackup
+		fi
+
+	done
+}
+
+# 鏇存柊浼绔�
+updateNginxBlog() {
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 鏇存崲浼绔欑偣"
+	echoContent red "=============================================================="
+	echoContent yellow "# 濡傞渶鑷畾涔夛紝璇锋墜鍔ㄥ鍒舵ā鐗堟枃浠跺埌 /usr/share/nginx/html \n"
+	echoContent yellow "1.鏂版墜寮曞"
+	echoContent yellow "2.娓告垙缃戠珯"
+	echoContent yellow "3.涓汉鍗氬01"
+	echoContent yellow "4.浼佷笟绔�"
+	echoContent yellow "5.瑙i攣鍔犲瘑鐨勯煶涔愭枃浠舵ā鐗圼https://github.com/ix64/unlock-music]"
+	echoContent yellow "6.mikutap[https://github.com/HFIProgramming/mikutap]"
+	echoContent yellow "7.浼佷笟绔�02"
+	echoContent yellow "8.涓汉鍗氬02"
+	echoContent yellow "9.404鑷姩璺宠浆baidu"
+	echoContent yellow "10.302閲嶅畾鍚戠綉绔�"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectInstallNginxBlogType
+
+	if [[ "${selectInstallNginxBlogType}" == "10" ]]; then
+		echoContent red "\n=============================================================="
+		echoContent yellow "閲嶅畾鍚戠殑浼樺厛绾ф洿楂橈紝閰嶇疆302涔嬪悗濡傛灉鏇存敼浼绔欑偣锛屾牴璺敱涓嬩吉瑁呯珯鐐瑰皢涓嶈捣浣滅敤"
+		echoContent yellow "濡傛兂瑕佷吉瑁呯珯鐐瑰疄鐜颁綔鐢ㄩ渶鍒犻櫎302閲嶅畾鍚戦厤缃甛n"
+		echoContent yellow "1.娣诲姞"
+		echoContent yellow "2.鍒犻櫎"
+		echoContent red "=============================================================="
+		read -r -p "璇烽�夋嫨:" redirectStatus
+
+		if [[ "${redirectStatus}" == "1" ]]; then
+			backupNginxConfig backup
+			read -r -p "璇疯緭鍏ヨ閲嶅畾鍚戠殑鍩熷悕,渚嬪 https://www.baidu.com:" redirectDomain
+			removeNginx302
+			addNginx302 "${redirectDomain}"
+			handleNginx stop
+			handleNginx start
+			if [[ -z $(pgrep -f nginx) ]]; then
+				backupNginxConfig restoreBackup
+				handleNginx start
+				exit 0
+			fi
+			checkNginx302
+			exit 0
+		fi
+		if [[ "${redirectStatus}" == "2" ]]; then
+			removeNginx302
+			echoContent green " ---> 绉婚櫎302閲嶅畾鍚戞垚鍔�"
+			exit 0
+		fi
+	fi
+	if [[ "${selectInstallNginxBlogType}" =~ ^[1-9]$ ]]; then
+		rm -rf /usr/share/nginx/*
+		if wget --help | grep -q show-progress; then
+			wget -c -q --show-progress -P /usr/share/nginx "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${selectInstallNginxBlogType}.zip" >/dev/null
+		else
+			wget -c -P /usr/share/nginx "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/fodder/blog/unable/html${selectInstallNginxBlogType}.zip" >/dev/null
+		fi
+
+		unzip -o "/usr/share/nginx/html${selectInstallNginxBlogType}.zip" -d /usr/share/nginx/html >/dev/null
+		rm -f "/usr/share/nginx/html${selectInstallNginxBlogType}.zip*"
+		echoContent green " ---> 鏇存崲浼珯鎴愬姛"
+	else
+		echoContent red " ---> 閫夋嫨閿欒锛岃閲嶆柊閫夋嫨"
+		updateNginxBlog
+	fi
+}
+
+# 娣诲姞鏂扮鍙�
+addCorePort() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 娣诲姞鏂扮鍙�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	echoContent yellow "鏀寔鎵归噺娣诲姞"
+	echoContent yellow "涓嶅奖鍝�443绔彛鐨勪娇鐢�"
+	echoContent yellow "鏌ョ湅甯愬彿鏃讹紝鍙細灞曠ず榛樿绔彛443鐨勫笎鍙�"
+	echoContent yellow "涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+	echoContent yellow "褰曞叆绀轰緥:2053,2083,2087\n"
+
+	echoContent yellow "1.娣诲姞绔彛"
+	echoContent yellow "2.鍒犻櫎绔彛"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectNewPortType
+	if [[ "${selectNewPortType}" == "1" ]]; then
+		read -r -p "璇疯緭鍏ョ鍙e彿:" newPort
+		read -r -p "璇疯緭鍏ラ粯璁ょ殑绔彛鍙凤紝鍚屾椂浼氭洿鏀硅闃呯鍙d互鍙婅妭鐐圭鍙o紝[鍥炶溅]榛樿443:" defaultPort
+
+		if [[ -n "${defaultPort}" ]]; then
+			rm -rf "$(find ${configPath}* | grep "default")"
+		fi
+
+		if [[ -n "${newPort}" ]]; then
+
+			while read -r port; do
+				rm -rf "$(find ${configPath}* | grep "${port}")"
+
+				local fileName=
+				if [[ -n "${defaultPort}" && "${port}" == "${defaultPort}" ]]; then
+					fileName="${configPath}02_dokodemodoor_inbounds_${port}_default.json"
+				else
+					fileName="${configPath}02_dokodemodoor_inbounds_${port}.json"
+				fi
+
+				# 寮�鏀剧鍙�
+				allowPort "${port}"
+
+				cat <<EOF >"${fileName}"
+{
+  "inbounds": [
+	{
+	  "listen": "0.0.0.0",
+	  "port": ${port},
+	  "protocol": "dokodemo-door",
+	  "settings": {
+		"address": "127.0.0.1",
+		"port": 443,
+		"network": "tcp",
+		"followRedirect": false
+	  },
+	  "tag": "dokodemo-door-newPort-${port}"
+	}
+  ]
+}
+EOF
+			done < <(echo "${newPort}" | tr ',' '\n')
+
+			echoContent green " ---> 娣诲姞鎴愬姛"
+			reloadCore
+		fi
+	elif [[ "${selectNewPortType}" == "2" ]]; then
+
+		find ${configPath} -name "*dokodemodoor*" | awk -F "[c][o][n][f][/]" '{print ""NR""":"$2}'
+		read -r -p "璇疯緭鍏ヨ鍒犻櫎鐨勭鍙g紪鍙�:" portIndex
+		local dokoConfig
+		dokoConfig=$(find ${configPath} -name "*dokodemodoor*" | awk -F "[c][o][n][f][/]" '{print ""NR""":"$2}' | grep "${portIndex}:")
+		if [[ -n "${dokoConfig}" ]]; then
+			rm "${configPath}/$(echo "${dokoConfig}" | awk -F "[:]" '{print $2}')"
+			reloadCore
+		else
+			echoContent yellow "\n ---> 缂栧彿杈撳叆閿欒锛岃閲嶆柊閫夋嫨"
+			addCorePort
+		fi
+	fi
+}
+
+# 鍗歌浇鑴氭湰
+unInstall() {
+	read -r -p "鏄惁纭鍗歌浇瀹夎鍐呭锛焄y/n]:" unInstallStatus
+	if [[ "${unInstallStatus}" != "y" ]]; then
+		echoContent green " ---> 鏀惧純鍗歌浇"
+		menu
+		exit 0
+	fi
+
+	handleNginx stop
+	if [[ -z $(pgrep -f "nginx") ]]; then
+		echoContent green " ---> 鍋滄Nginx鎴愬姛"
+	fi
+
+	if [[ "${coreInstallType}" == "1" ]]; then
+		handleXray stop
+		rm -rf /etc/systemd/system/xray.service
+		echoContent green " ---> 鍒犻櫎Xray寮�鏈鸿嚜鍚畬鎴�"
+
+	elif [[ "${coreInstallType}" == "2" ]]; then
+
+		handleV2Ray stop
+		rm -rf /etc/systemd/system/v2ray.service
+		echoContent green " ---> 鍒犻櫎V2Ray寮�鏈鸿嚜鍚畬鎴�"
+
+	fi
+
+	if [[ -f "/root/.acme.sh/acme.sh.env" ]] && grep -q 'acme.sh.env' </root/.bashrc; then
+		sed -i 's/. "\/root\/.acme.sh\/acme.sh.env"//g' "$(grep '. "/root/.acme.sh/acme.sh.env"' -rl /root/.bashrc)"
+	fi
+	rm -rf /root/.acme.sh
+	echoContent green " ---> 鍒犻櫎acme.sh瀹屾垚"
+
+	rm -rf /tmp/v2ray-agent-tls/*
+	if [[ -d "/etc/v2ray-agent/tls" ]] && [[ -n $(find /etc/v2ray-agent/tls/ -name "*.key") ]] && [[ -n $(find /etc/v2ray-agent/tls/ -name "*.crt") ]]; then
+		mv /etc/v2ray-agent/tls /tmp/v2ray-agent-tls
+		if [[ -n $(find /tmp/v2ray-agent-tls -name '*.key') ]]; then
+			echoContent yellow " ---> 澶囦唤璇佷功鎴愬姛锛岃娉ㄦ剰鐣欏瓨銆俒/tmp/v2ray-agent-tls]"
+		fi
+	fi
+
+	rm -rf /etc/v2ray-agent
+	rm -rf ${nginxConfigPath}alone.conf
+
+	if [[ -d "/usr/share/nginx/html" && -f "/usr/share/nginx/html/check" ]]; then
+		rm -rf /usr/share/nginx/html
+		echoContent green " ---> 鍒犻櫎浼缃戠珯瀹屾垚"
+	fi
+
+	rm -rf /usr/bin/vasma
+	rm -rf /usr/sbin/vasma
+	echoContent green " ---> 鍗歌浇蹇嵎鏂瑰紡瀹屾垚"
+	echoContent green " ---> 鍗歌浇v2ray-agent鑴氭湰瀹屾垚"
+}
+
+# 淇敼V2Ray CDN鑺傜偣
+updateV2RayCDN() {
+
+	# todo 閲嶆瀯姝ゆ柟娉�
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 淇敼CDN鑺傜偣"
+
+	if [[ -n "${currentAdd}" ]]; then
+		echoContent red "=============================================================="
+		echoContent yellow "1.CNAME www.digitalocean.com"
+		echoContent yellow "2.CNAME www.cloudflare.com"
+		echoContent yellow "3.CNAME hostmonit.com"
+		echoContent yellow "4.鎵嬪姩杈撳叆"
+		echoContent red "=============================================================="
+		read -r -p "璇烽�夋嫨:" selectCDNType
+		case ${selectCDNType} in
+		1)
+			setDomain="www.digitalocean.com"
+			;;
+		2)
+			setDomain="www.cloudflare.com"
+			;;
+		3)
+			setDomain="hostmonit.com"
+			;;
+		4)
+			read -r -p "璇疯緭鍏ユ兂瑕佽嚜瀹氫箟CDN IP鎴栬�呭煙鍚�:" setDomain
+			;;
+		esac
+
+		if [[ -n ${setDomain} ]]; then
+			if [[ -n "${currentAdd}" ]]; then
+				sed -i "s/\"${currentAdd}\"/\"${setDomain}\"/g" "$(grep "${currentAdd}" -rl ${configPath}${frontingType}.json)"
+			fi
+			if [[ $(jq -r .inbounds[0].settings.clients[0].add ${configPath}${frontingType}.json) == "${setDomain}" ]]; then
+				echoContent green " ---> CDN淇敼鎴愬姛"
+				reloadCore
+			else
+				echoContent red " ---> 淇敼CDN澶辫触"
+			fi
+		fi
+	else
+		echoContent red " ---> 鏈畨瑁呭彲鐢ㄧ被鍨�"
+	fi
+}
+
+# manageUser 鐢ㄦ埛绠$悊
+manageUser() {
+	echoContent skyBlue "\n杩涘害 $1/${totalProgress} : 澶氱敤鎴风鐞�"
+	echoContent skyBlue "-----------------------------------------------------"
+	echoContent yellow "1.娣诲姞鐢ㄦ埛"
+	echoContent yellow "2.鍒犻櫎鐢ㄦ埛"
+	echoContent skyBlue "-----------------------------------------------------"
+	read -r -p "璇烽�夋嫨:" manageUserType
+	if [[ "${manageUserType}" == "1" ]]; then
+		addUser
+	elif [[ "${manageUserType}" == "2" ]]; then
+		removeUser
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+	fi
+}
+
+# 鑷畾涔塽uid
+customUUID() {
+	#	read -r -p "鏄惁鑷畾涔塙UID 锛焄y/n]:" customUUIDStatus
+	#	echo
+	#	if [[ "${customUUIDStatus}" == "y" ]]; then
+	read -r -p "璇疯緭鍏ュ悎娉曠殑UUID锛孾鍥炶溅]闅忔満UUID:" currentCustomUUID
+	echo
+	if [[ -z "${currentCustomUUID}" ]]; then
+		# echoContent red " ---> UUID涓嶅彲涓虹┖"
+		currentCustomUUID=$(${ctlPath} uuid)
+		echoContent yellow "uuid:${currentCustomUUID}\n"
+
+	else
+		jq -r -c '.inbounds[0].settings.clients[].id' ${configPath}${frontingType}.json | while read -r line; do
+			if [[ "${line}" == "${currentCustomUUID}" ]]; then
+				echo >/tmp/v2ray-agent
+			fi
+		done
+		if [[ -f "/tmp/v2ray-agent" && -n $(cat /tmp/v2ray-agent) ]]; then
+			echoContent red " ---> UUID涓嶅彲閲嶅"
+			rm /tmp/v2ray-agent
+			exit 0
+		fi
+	fi
+	#	fi
+}
+
+# 鑷畾涔塭mail
+customUserEmail() {
+	#	read -r -p "鏄惁鑷畾涔塭mail 锛焄y/n]:" customEmailStatus
+	#	echo
+	#	if [[ "${customEmailStatus}" == "y" ]]; then
+	read -r -p "璇疯緭鍏ュ悎娉曠殑email锛孾鍥炶溅]闅忔満email:" currentCustomEmail
+	echo
+	if [[ -z "${currentCustomEmail}" ]]; then
+		currentCustomEmail="${currentHost}_${currentCustomUUID}"
+		echoContent yellow "email: ${currentCustomEmail}\n"
+		#		echoContent red " ---> email涓嶅彲涓虹┖"
+	else
+		jq -r -c '.inbounds[0].settings.clients[].email' ${configPath}${frontingType}.json | while read -r line; do
+			if [[ "${line}" == "${currentCustomEmail}" ]]; then
+				echo >/tmp/v2ray-agent
+			fi
+		done
+		if [[ -f "/tmp/v2ray-agent" && -n $(cat /tmp/v2ray-agent) ]]; then
+			echoContent red " ---> email涓嶅彲閲嶅"
+			rm /tmp/v2ray-agent
+			exit 0
+		fi
+	fi
+	#	fi
+}
+
+# 娣诲姞鐢ㄦ埛
+addUser() {
+
+	echoContent yellow "娣诲姞鏂扮敤鎴峰悗锛岄渶瑕侀噸鏂版煡鐪嬭闃�"
+	read -r -p "璇疯緭鍏ヨ娣诲姞鐨勭敤鎴锋暟閲�:" userNum
+	echo
+	if [[ -z ${userNum} || ${userNum} -le 0 ]]; then
+		echoContent red " ---> 杈撳叆鏈夎锛岃閲嶆柊杈撳叆"
+		exit 0
+	fi
+
+	# 鐢熸垚鐢ㄦ埛
+	if [[ "${userNum}" == "1" ]]; then
+		customUUID
+		customUserEmail
+	fi
+
+	while [[ ${userNum} -gt 0 ]]; do
+		local users=
+		((userNum--)) || true
+		if [[ -n "${currentCustomUUID}" ]]; then
+			uuid=${currentCustomUUID}
+		else
+			uuid=$(${ctlPath} uuid)
+		fi
+
+		if [[ -n "${currentCustomEmail}" ]]; then
+			email=${currentCustomEmail}
+		else
+			email=${currentHost}_${uuid}
+		fi
+
+		#	鍏煎v2ray-core
+		users="{\"id\":\"${uuid}\",\"flow\":\"xtls-rprx-direct\",\"email\":\"${email}\",\"alterId\":0}"
+
+		if [[ "${coreInstallType}" == "2" ]]; then
+			users="{\"id\":\"${uuid}\",\"email\":\"${email}\",\"alterId\":0}"
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 0; then
+			local vlessUsers="${users//\,\"alterId\":0/}"
+
+			local vlessTcpResult
+			vlessTcpResult=$(jq -r ".inbounds[0].settings.clients += [${vlessUsers}]" ${configPath}${frontingType}.json)
+			echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q trojan; then
+			local trojanXTLSUsers="${users//\,\"alterId\":0/}"
+			trojanXTLSUsers=${trojanXTLSUsers//"id"/"password"}
+
+			local trojanXTLSResult
+			trojanXTLSResult=$(jq -r ".inbounds[0].settings.clients += [${trojanXTLSUsers}]" ${configPath}${frontingType}.json)
+			echo "${trojanXTLSResult}" | jq . >${configPath}${frontingType}.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 1; then
+			local vlessUsers="${users//\,\"alterId\":0/}"
+			vlessUsers="${vlessUsers//\"flow\":\"xtls-rprx-direct\"\,/}"
+			local vlessWsResult
+			vlessWsResult=$(jq -r ".inbounds[0].settings.clients += [${vlessUsers}]" ${configPath}03_VLESS_WS_inbounds.json)
+			echo "${vlessWsResult}" | jq . >${configPath}03_VLESS_WS_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 2; then
+			local trojangRPCUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
+			trojangRPCUsers="${trojangRPCUsers//\,\"alterId\":0/}"
+			trojangRPCUsers=${trojangRPCUsers//"id"/"password"}
+
+			local trojangRPCResult
+			trojangRPCResult=$(jq -r ".inbounds[0].settings.clients += [${trojangRPCUsers}]" ${configPath}04_trojan_gRPC_inbounds.json)
+			echo "${trojangRPCResult}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 3; then
+			local vmessUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
+
+			local vmessWsResult
+			vmessWsResult=$(jq -r ".inbounds[0].settings.clients += [${vmessUsers}]" ${configPath}05_VMess_WS_inbounds.json)
+			echo "${vmessWsResult}" | jq . >${configPath}05_VMess_WS_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 5; then
+			local vlessGRPCUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
+			vlessGRPCUsers="${vlessGRPCUsers//\,\"alterId\":0/}"
+
+			local vlessGRPCResult
+			vlessGRPCResult=$(jq -r ".inbounds[0].settings.clients += [${vlessGRPCUsers}]" ${configPath}06_VLESS_gRPC_inbounds.json)
+			echo "${vlessGRPCResult}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 4; then
+			local trojanUsers="${users//\"flow\":\"xtls-rprx-direct\"\,/}"
+			trojanUsers="${trojanUsers//id/password}"
+			trojanUsers="${trojanUsers//\,\"alterId\":0/}"
+
+			local trojanTCPResult
+			trojanTCPResult=$(jq -r ".inbounds[0].settings.clients += [${trojanUsers}]" ${configPath}04_trojan_TCP_inbounds.json)
+			echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
+		fi
+	done
+
+	reloadCore
+	echoContent green " ---> 娣诲姞瀹屾垚"
+	manageAccount 1
+}
+
+# 绉婚櫎鐢ㄦ埛
+removeUser() {
+
+	if echo ${currentInstallProtocolType} | grep -q 0 || echo ${currentInstallProtocolType} | grep -q trojan; then
+		jq -r -c .inbounds[0].settings.clients[].email ${configPath}${frontingType}.json | awk '{print NR""":"$0}'
+		read -r -p "璇烽�夋嫨瑕佸垹闄ょ殑鐢ㄦ埛缂栧彿[浠呮敮鎸佸崟涓垹闄:" delUserIndex
+		if [[ $(jq -r '.inbounds[0].settings.clients|length' ${configPath}${frontingType}.json) -lt ${delUserIndex} ]]; then
+			echoContent red " ---> 閫夋嫨閿欒"
+		else
+			delUserIndex=$((delUserIndex - 1))
+			local vlessTcpResult
+			vlessTcpResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}${frontingType}.json)
+			echo "${vlessTcpResult}" | jq . >${configPath}${frontingType}.json
+		fi
+	fi
+	if [[ -n "${delUserIndex}" ]]; then
+		if echo ${currentInstallProtocolType} | grep -q 1; then
+			local vlessWSResult
+			vlessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}03_VLESS_WS_inbounds.json)
+			echo "${vlessWSResult}" | jq . >${configPath}03_VLESS_WS_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 2; then
+			local trojangRPCUsers
+			trojangRPCUsers=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_gRPC_inbounds.json)
+			echo "${trojangRPCUsers}" | jq . >${configPath}04_trojan_gRPC_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 3; then
+			local vmessWSResult
+			vmessWSResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}05_VMess_WS_inbounds.json)
+			echo "${vmessWSResult}" | jq . >${configPath}05_VMess_WS_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 5; then
+			local vlessGRPCResult
+			vlessGRPCResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}06_VLESS_gRPC_inbounds.json)
+			echo "${vlessGRPCResult}" | jq . >${configPath}06_VLESS_gRPC_inbounds.json
+		fi
+
+		if echo ${currentInstallProtocolType} | grep -q 4; then
+			local trojanTCPResult
+			trojanTCPResult=$(jq -r 'del(.inbounds[0].settings.clients['${delUserIndex}'])' ${configPath}04_trojan_TCP_inbounds.json)
+			echo "${trojanTCPResult}" | jq . >${configPath}04_trojan_TCP_inbounds.json
+		fi
+
+		reloadCore
+	fi
+	manageAccount 1
+}
+# 鏇存柊鑴氭湰
+updateV2RayAgent() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鏇存柊v2ray-agent鑴氭湰"
+	rm -rf /etc/v2ray-agent/install.sh
+	if wget --help | grep -q show-progress; then
+		wget -c -q --show-progress -P /etc/v2ray-agent/ -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh"
+	else
+		wget -c -q -P /etc/v2ray-agent/ -N --no-check-certificate "https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh"
+	fi
+
+	sudo chmod 700 /etc/v2ray-agent/install.sh
+	local version
+	version=$(grep '褰撳墠鐗堟湰:v' "/etc/v2ray-agent/install.sh" | awk -F "[v]" '{print $2}' | tail -n +2 | head -n 1 | awk -F "[\"]" '{print $1}')
+
+	echoContent green "\n ---> 鏇存柊瀹屾瘯"
+	echoContent yellow " ---> 璇锋墜鍔ㄦ墽琛孾vasma]鎵撳紑鑴氭湰"
+	echoContent green " ---> 褰撳墠鐗堟湰:${version}\n"
+	echoContent yellow "濡傛洿鏂颁笉鎴愬姛锛岃鎵嬪姩鎵ц涓嬮潰鍛戒护\n"
+	echoContent skyBlue "wget -P /root -N --no-check-certificate https://raw.githubusercontent.com/mack-a/v2ray-agent/master/install.sh && chmod 700 /root/install.sh && /root/install.sh"
+	echo
+	exit 0
+}
+
+# 闃茬伀澧�
+handleFirewall() {
+	if systemctl status ufw 2>/dev/null | grep -q "active (exited)" && [[ "$1" == "stop" ]]; then
+		systemctl stop ufw >/dev/null 2>&1
+		systemctl disable ufw >/dev/null 2>&1
+		echoContent green " ---> ufw鍏抽棴鎴愬姛"
+
+	fi
+
+	if systemctl status firewalld 2>/dev/null | grep -q "active (running)" && [[ "$1" == "stop" ]]; then
+		systemctl stop firewalld >/dev/null 2>&1
+		systemctl disable firewalld >/dev/null 2>&1
+		echoContent green " ---> firewalld鍏抽棴鎴愬姛"
+	fi
+}
+
+# 瀹夎BBR
+bbrInstall() {
+	echoContent red "\n=============================================================="
+	echoContent green "BBR銆丏D鑴氭湰鐢ㄧ殑[ylx2016]鐨勬垚鐔熶綔鍝侊紝鍦板潃[https://github.com/ylx2016/Linux-NetSpeed]锛岃鐔熺煡"
+	echoContent yellow "1.瀹夎鑴氭湰銆愭帹鑽愬師鐗圔BR+FQ銆�"
+	echoContent yellow "2.鍥為��涓荤洰褰�"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" installBBRStatus
+	if [[ "${installBBRStatus}" == "1" ]]; then
+		wget -N --no-check-certificate "https://raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
+	else
+		menu
+	fi
+}
+
+# 鏌ョ湅銆佹鏌ユ棩蹇�
+checkLog() {
+	if [[ -z ${configPath} ]]; then
+		echoContent red " ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
+	fi
+	local logStatus=false
+	if grep -q "access" ${configPath}00_log.json; then
+		logStatus=true
+	fi
+
+	echoContent skyBlue "\n鍔熻兘 $1/${totalProgress} : 鏌ョ湅鏃ュ織"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 寤鸿浠呰皟璇曟椂鎵撳紑access鏃ュ織\n"
+
+	if [[ "${logStatus}" == "false" ]]; then
+		echoContent yellow "1.鎵撳紑access鏃ュ織"
+	else
+		echoContent yellow "1.鍏抽棴access鏃ュ織"
+	fi
+
+	echoContent yellow "2.鐩戝惉access鏃ュ織"
+	echoContent yellow "3.鐩戝惉error鏃ュ織"
+	echoContent yellow "4.鏌ョ湅璇佷功瀹氭椂浠诲姟鏃ュ織"
+	echoContent yellow "5.鏌ョ湅璇佷功瀹夎鏃ュ織"
+	echoContent yellow "6.娓呯┖鏃ュ織"
+	echoContent red "=============================================================="
+
+	read -r -p "璇烽�夋嫨:" selectAccessLogType
+	local configPathLog=${configPath//conf\//}
+
+	case ${selectAccessLogType} in
+	1)
+		if [[ "${logStatus}" == "false" ]]; then
+			cat <<EOF >${configPath}00_log.json
+{
+  "log": {
+  	"access":"${configPathLog}access.log",
+    "error": "${configPathLog}error.log",
+    "loglevel": "debug"
+  }
+}
+EOF
+		elif [[ "${logStatus}" == "true" ]]; then
+			cat <<EOF >${configPath}00_log.json
+{
+  "log": {
+    "error": "${configPathLog}error.log",
+    "loglevel": "warning"
+  }
+}
+EOF
+		fi
+		reloadCore
+		checkLog 1
+		;;
+	2)
+		tail -f ${configPathLog}access.log
+		;;
+	3)
+		tail -f ${configPathLog}error.log
+		;;
+	4)
+		tail -n 100 /etc/v2ray-agent/crontab_tls.log
+		;;
+	5)
+		tail -n 100 /etc/v2ray-agent/tls/acme.log
+		;;
+	6)
+		echo >${configPathLog}access.log
+		echo >${configPathLog}error.log
+		;;
+	esac
+}
+
+# 鑴氭湰蹇嵎鏂瑰紡
+aliasInstall() {
+
+	if [[ -f "$HOME/install.sh" ]] && [[ -d "/etc/v2ray-agent" ]] && grep <"$HOME/install.sh" -q "浣滆��:mack-a"; then
+		mv "$HOME/install.sh" /etc/v2ray-agent/install.sh
+		local vasmaType=
+		if [[ -d "/usr/bin/" ]]; then
+			if [[ ! -f "/usr/bin/vasma" ]]; then
+				ln -s /etc/v2ray-agent/install.sh /usr/bin/vasma
+				chmod 700 /usr/bin/vasma
+				vasmaType=true
+			fi
+
+			rm -rf "$HOME/install.sh"
+		elif [[ -d "/usr/sbin" ]]; then
+			if [[ ! -f "/usr/sbin/vasma" ]]; then
+				ln -s /etc/v2ray-agent/install.sh /usr/sbin/vasma
+				chmod 700 /usr/sbin/vasma
+				vasmaType=true
+			fi
+			rm -rf "$HOME/install.sh"
+		fi
+		if [[ "${vasmaType}" == "true" ]]; then
+			echoContent green "蹇嵎鏂瑰紡鍒涘缓鎴愬姛锛屽彲鎵ц[vasma]閲嶆柊鎵撳紑鑴氭湰"
+		fi
+	fi
+}
+
+# 妫�鏌pv6銆乮pv4
+checkIPv6() {
+	# pingIPv6=$(ping6 -c 1 www.google.com | sed '2{s/[^(]*(//;s/).*//;q;}' | tail -n +2)
+	pingIPv6=$(ping6 -c 1 www.google.com | sed -n '1p' | sed 's/.*(//g;s/).*//g')
+
+	if [[ -z "${pingIPv6}" ]]; then
+		echoContent red " ---> 涓嶆敮鎸乮pv6"
+		exit 0
+	fi
+}
+
+# ipv6 鍒嗘祦
+ipv6Routing() {
+	if [[ -z "${configPath}" ]]; then
+		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
+		menu
+		exit 0
+	fi
+
+	checkIPv6
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : IPv6鍒嗘祦"
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.娣诲姞鍩熷悕"
+	echoContent yellow "2.鍗歌浇IPv6鍒嗘祦"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" ipv6Status
+	if [[ "${ipv6Status}" == "1" ]]; then
+		echoContent red "=============================================================="
+		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+		echoContent yellow "6.褰曞叆绀轰緥:google,youtube,facebook\n"
+		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+
+			unInstallRouting IPv6-out outboundTag
+
+			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"IPv6-out\"}]" ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+
+		else
+			cat <<EOF >"${configPath}09_routing.json"
+{
+    "routing":{
+        "domainStrategy": "IPOnDemand",
+        "rules": [
+          {
+            "type": "field",
+            "domain": [
+            	"geosite:${domainList//,/\",\"geosite:}"
+            ],
+            "outboundTag": "IPv6-out"
+          }
+        ]
+  }
+}
+EOF
+		fi
+
+		unInstallOutbounds IPv6-out
+
+		outbounds=$(jq -r '.outbounds += [{"protocol":"freedom","settings":{"domainStrategy":"UseIPv6"},"tag":"IPv6-out"}]' ${configPath}10_ipv4_outbounds.json)
+
+		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
+
+		echoContent green " ---> 娣诲姞鎴愬姛"
+
+	elif [[ "${ipv6Status}" == "2" ]]; then
+
+		unInstallRouting IPv6-out outboundTag
+
+		unInstallOutbounds IPv6-out
+
+		echoContent green " ---> IPv6鍒嗘祦鍗歌浇鎴愬姛"
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+		exit 0
+	fi
+
+	reloadCore
+}
+
+# bt涓嬭浇绠$悊
+btTools() {
+	if [[ -z "${configPath}" ]]; then
+		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
+		menu
+		exit 0
+	fi
+
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : bt涓嬭浇绠$悊"
+	echoContent red "\n=============================================================="
+
+	if [[ -f ${configPath}09_routing.json ]] && grep -q bittorrent <${configPath}09_routing.json; then
+		echoContent yellow "褰撳墠鐘舵��:宸茬鐢�"
+	else
+		echoContent yellow "褰撳墠鐘舵��:鏈鐢�"
+	fi
+
+	echoContent yellow "1.绂佺敤"
+	echoContent yellow "2.鎵撳紑"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" btStatus
+	if [[ "${btStatus}" == "1" ]]; then
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+
+			unInstallRouting blackhole-out outboundTag
+
+			routing=$(jq -r '.routing.rules += [{"type":"field","outboundTag":"blackhole-out","protocol":["bittorrent"]}]' ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+
+		else
+			cat <<EOF >${configPath}09_routing.json
+{
+    "routing":{
+        "domainStrategy": "IPOnDemand",
+        "rules": [
+          {
+            "type": "field",
+            "outboundTag": "blackhole-out",
+            "protocol": [ "bittorrent" ]
+          }
+        ]
+  }
+}
+EOF
+		fi
+
+		installSniffing
+
+		unInstallOutbounds blackhole-out
+
+		outbounds=$(jq -r '.outbounds += [{"protocol":"blackhole","tag":"blackhole-out"}]' ${configPath}10_ipv4_outbounds.json)
+
+		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
+
+		echoContent green " ---> BT涓嬭浇绂佺敤鎴愬姛"
+
+	elif [[ "${btStatus}" == "2" ]]; then
+
+		unInstallSniffing
+
+		unInstallRouting blackhole-out outboundTag bittorrent
+
+		#		unInstallOutbounds blackhole-out
+
+		echoContent green " ---> BT涓嬭浇鎵撳紑鎴愬姛"
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+		exit 0
+	fi
+
+	reloadCore
+}
+
+# 鍩熷悕榛戝悕鍗�
+blacklist() {
+	if [[ -z "${configPath}" ]]; then
+		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
+		menu
+		exit 0
+	fi
+
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : 鍩熷悕榛戝悕鍗�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.娣诲姞鍩熷悕"
+	echoContent yellow "2.鍒犻櫎榛戝悕鍗�"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" blacklistStatus
+	if [[ "${blacklistStatus}" == "1" ]]; then
+		echoContent red "=============================================================="
+		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+		echoContent yellow "6.褰曞叆绀轰緥:speedtest,facebook\n"
+		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+			unInstallRouting blackhole-out outboundTag
+
+			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"blackhole-out\"}]" ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+
+		else
+			cat <<EOF >${configPath}09_routing.json
+{
+    "routing":{
+        "domainStrategy": "IPOnDemand",
+        "rules": [
+          {
+            "type": "field",
+            "domain": [
+            	"geosite:${domainList//,/\",\"geosite:}"
+            ],
+            "outboundTag": "blackhole-out"
+          }
+        ]
+  }
+}
+EOF
+		fi
+
+		echoContent green " ---> 娣诲姞鎴愬姛"
+
+	elif [[ "${blacklistStatus}" == "2" ]]; then
+
+		unInstallRouting blackhole-out outboundTag
+
+		echoContent green " ---> 鍩熷悕榛戝悕鍗曞垹闄ゆ垚鍔�"
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+		exit 0
+	fi
+	reloadCore
+}
+
+# 鏍规嵁tag鍗歌浇Routing
+unInstallRouting() {
+	local tag=$1
+	local type=$2
+	local protocol=$3
+
+	if [[ -f "${configPath}09_routing.json" ]]; then
+		local routing
+		if grep -q "${tag}" ${configPath}09_routing.json && grep -q "${type}" ${configPath}09_routing.json; then
+
+			jq -c .routing.rules[] ${configPath}09_routing.json | while read -r line; do
+				local index=$((index + 1))
+				local delStatus=0
+				if [[ "${type}" == "outboundTag" ]] && echo "${line}" | jq .outboundTag | grep -q "${tag}"; then
+					delStatus=1
+				elif [[ "${type}" == "inboundTag" ]] && echo "${line}" | jq .inboundTag | grep -q "${tag}"; then
+					delStatus=1
+				fi
+
+				if [[ -n ${protocol} ]] && echo "${line}" | jq .protocol | grep -q "${protocol}"; then
+					delStatus=1
+				elif [[ -z ${protocol} ]] && [[ $(echo "${line}" | jq .protocol) != "null" ]]; then
+					delStatus=0
+				fi
+
+				if [[ ${delStatus} == 1 ]]; then
+					routing=$(jq -r 'del(.routing.rules['"$(("${index}" - 1))"'])' ${configPath}09_routing.json)
+					echo "${routing}" | jq . >${configPath}09_routing.json
+				fi
+			done
+		fi
+	fi
+}
+
+# 鏍规嵁tag鍗歌浇鍑虹珯
+unInstallOutbounds() {
+	local tag=$1
+
+	if grep -q "${tag}" ${configPath}10_ipv4_outbounds.json; then
+		local ipv6OutIndex
+		ipv6OutIndex=$(jq .outbounds[].tag ${configPath}10_ipv4_outbounds.json | awk '{print ""NR""":"$0}' | grep "${tag}" | awk -F "[:]" '{print $1}' | head -1)
+		if [[ ${ipv6OutIndex} -gt 0 ]]; then
+			routing=$(jq -r 'del(.outbounds['$(("${ipv6OutIndex}" - 1))'])' ${configPath}10_ipv4_outbounds.json)
+			echo "${routing}" | jq . >${configPath}10_ipv4_outbounds.json
+		fi
+	fi
+
+}
+
+# 鍗歌浇鍡呮帰
+unInstallSniffing() {
+
+	find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
+		sniffing=$(jq -r 'del(.inbounds[0].sniffing)' "${configPath}${inbound}")
+		echo "${sniffing}" | jq . >"${configPath}${inbound}"
+	done
+}
+
+# 瀹夎鍡呮帰
+installSniffing() {
+
+	find ${configPath} -name "*inbounds.json*" | awk -F "[c][o][n][f][/]" '{print $2}' | while read -r inbound; do
+		sniffing=$(jq -r '.inbounds[0].sniffing = {"enabled":true,"destOverride":["http","tls"]}' "${configPath}${inbound}")
+		echo "${sniffing}" | jq . >"${configPath}${inbound}"
+	done
+}
+
+# warp鍒嗘祦
+warpRouting() {
+	echoContent skyBlue "\n杩涘害  $1/${totalProgress} : WARP鍒嗘祦"
+	echoContent red "=============================================================="
+	#	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	#	echoContent yellow "1.瀹樻柟warp缁忚繃鍑犺疆娴嬭瘯鏈塨ug锛岄噸鍚細瀵艰嚧warp澶辨晥锛屽苟涓旀棤娉曞惎鍔紝涔熸湁鍙兘CPU浣跨敤鐜囨毚娑�"
+	#	echoContent yellow "2.涓嶉噸鍚満鍣ㄥ彲姝e父浣跨敤锛屽鏋滈潪瑕佷娇鐢ㄥ畼鏂箇arp锛屽缓璁笉閲嶅惎鏈哄櫒"
+	#	echoContent yellow "3.鏈夌殑鏈哄櫒閲嶅惎鍚庝粛姝e父浣跨敤"
+	#	echoContent yellow "4.閲嶅惎鍚庢棤娉曚娇鐢紝涔熷彲鍗歌浇閲嶆柊瀹夎"
+	# 瀹夎warp
+	if [[ -z $(which warp-cli) ]]; then
+		echo
+		read -r -p "WARP鏈畨瑁咃紝鏄惁瀹夎 锛焄y/n]:" installCloudflareWarpStatus
+		if [[ "${installCloudflareWarpStatus}" == "y" ]]; then
+			installWarp
+		else
+			echoContent yellow " ---> 鏀惧純瀹夎"
+			exit 0
+		fi
+	fi
+
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.娣诲姞鍩熷悕"
+	echoContent yellow "2.鍗歌浇WARP鍒嗘祦"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" warpStatus
+	if [[ "${warpStatus}" == "1" ]]; then
+		echoContent red "=============================================================="
+		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+		echoContent yellow "3.鍙彲浠ユ妸娴侀噺鍒嗘祦缁檞arp锛屼笉鍙寚瀹氭槸ipv4鎴栬�卛pv6"
+		echoContent yellow "4.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+		echoContent yellow "5.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+		echoContent yellow "6.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+		echoContent yellow "7.褰曞叆绀轰緥:google,youtube,facebook\n"
+		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+			unInstallRouting warp-socks-out outboundTag
+
+			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"warp-socks-out\"}]" ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+
+		else
+			cat <<EOF >${configPath}09_routing.json
+{
+    "routing":{
+        "domainStrategy": "IPOnDemand",
+        "rules": [
+          {
+            "type": "field",
+            "domain": [
+            	"geosite:${domainList//,/\",\"geosite:}"
+            ],
+            "outboundTag": "warp-socks-out"
+          }
+        ]
+  }
+}
+EOF
+		fi
+		unInstallOutbounds warp-socks-out
+
+		local outbounds
+		outbounds=$(jq -r '.outbounds += [{"protocol":"socks","settings":{"servers":[{"address":"127.0.0.1","port":31303}]},"tag":"warp-socks-out"}]' ${configPath}10_ipv4_outbounds.json)
+
+		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
+
+		echoContent green " ---> 娣诲姞鎴愬姛"
+
+	elif [[ "${warpStatus}" == "2" ]]; then
+
+		${removeType} cloudflare-warp >/dev/null 2>&1
+
+		unInstallRouting warp-socks-out outboundTag
+
+		unInstallOutbounds warp-socks-out
+
+		echoContent green " ---> WARP鍒嗘祦鍗歌浇鎴愬姛"
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+		exit 0
+	fi
+	reloadCore
+}
+# 娴佸獟浣撳伐鍏风
+streamingToolbox() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 娴佸獟浣撳伐鍏风"
+	echoContent red "\n=============================================================="
+	#	echoContent yellow "1.Netflix妫�娴�"
+	echoContent yellow "1.浠绘剰闂ㄨ惤鍦版満瑙i攣娴佸獟浣�"
+	echoContent yellow "2.DNS瑙i攣娴佸獟浣�"
+	echoContent yellow "3.VMess+WS+TLS瑙i攣娴佸獟浣�"
+	read -r -p "璇烽�夋嫨:" selectType
+
+	case ${selectType} in
+	1)
+		dokodemoDoorUnblockStreamingMedia
+		;;
+	2)
+		dnsUnlockNetflix
+		;;
+	3)
+		unblockVMessWSTLSStreamingMedia
+		;;
+	esac
+
+}
+
+# 浠绘剰闂ㄨВ閿佹祦濯掍綋
+dokodemoDoorUnblockStreamingMedia() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 浠绘剰闂ㄨ惤鍦版満瑙i攣娴佸獟浣�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」"
+	echoContent yellow "浠绘剰闂ㄨВ閿佽瑙o紝璇锋煡鐪嬫鏂囩珷[https://github.com/mack-a/v2ray-agent/blob/master/documents/netflix/dokodemo-unblock_netflix.md]\n"
+
+	echoContent yellow "1.娣诲姞鍑虹珯"
+	echoContent yellow "2.娣诲姞鍏ョ珯"
+	echoContent yellow "3.鍗歌浇"
+	read -r -p "璇烽�夋嫨:" selectType
+
+	case ${selectType} in
+	1)
+		setDokodemoDoorUnblockStreamingMediaOutbounds
+		;;
+	2)
+		setDokodemoDoorUnblockStreamingMediaInbounds
+		;;
+	3)
+		removeDokodemoDoorUnblockStreamingMedia
+		;;
+	esac
+}
+
+# VMess+WS+TLS 鍑烘垬瑙i攣娴佸獟浣撱�愪粎鍑虹珯銆�
+unblockVMessWSTLSStreamingMedia() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : VMess+WS+TLS 鍑虹珯瑙i攣娴佸獟浣�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」"
+	echoContent yellow "閫傚悎閫氳繃鍏朵粬鏈嶅姟鍟嗘彁渚涚殑VMess瑙i攣鏈嶅姟\n"
+
+	echoContent yellow "1.娣诲姞鍑虹珯"
+	echoContent yellow "2.鍗歌浇"
+	read -r -p "璇烽�夋嫨:" selectType
+
+	case ${selectType} in
+	1)
+		setVMessWSTLSUnblockStreamingMediaOutbounds
+		;;
+	2)
+		removeVMessWSTLSUnblockStreamingMedia
+		;;
+	esac
+}
+
+# 璁剧疆VMess+WS+TLS瑙i攣Netflix銆愪粎鍑虹珯銆�
+setVMessWSTLSUnblockStreamingMediaOutbounds() {
+	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋VMess+WS+TLS鐨勫湴鍧�:" setVMessWSTLSAddress
+	echoContent red "=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+	echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu\n"
+	read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+
+	if [[ -z ${domainList} ]]; then
+		echoContent red " ---> 鍩熷悕涓嶅彲涓虹┖"
+		setVMessWSTLSUnblockStreamingMediaOutbounds
+	fi
+
+	if [[ -n "${setVMessWSTLSAddress}" ]]; then
+
+		unInstallOutbounds VMess-out
+
+		echo
+		read -r -p "璇疯緭鍏Mess+WS+TLS鐨勭鍙�:" setVMessWSTLSPort
+		echo
+		if [[ -z "${setVMessWSTLSPort}" ]]; then
+			echoContent red " ---> 绔彛涓嶅彲涓虹┖"
+		fi
+
+		read -r -p "璇疯緭鍏Mess+WS+TLS鐨刄UID:" setVMessWSTLSUUID
+		echo
+		if [[ -z "${setVMessWSTLSUUID}" ]]; then
+			echoContent red " ---> UUID涓嶅彲涓虹┖"
+		fi
+
+		read -r -p "璇疯緭鍏Mess+WS+TLS鐨凱ath璺緞:" setVMessWSTLSPath
+		echo
+		if [[ -z "${setVMessWSTLSPath}" ]]; then
+			echoContent red " ---> 璺緞涓嶅彲涓虹┖"
+		fi
+
+		outbounds=$(jq -r ".outbounds += [{\"tag\":\"VMess-out\",\"protocol\":\"vmess\",\"streamSettings\":{\"network\":\"ws\",\"security\":\"tls\",\"tlsSettings\":{\"allowInsecure\":false},\"wsSettings\":{\"path\":\"${setVMessWSTLSPath}\"}},\"mux\":{\"enabled\":true,\"concurrency\":8},\"settings\":{\"vnext\":[{\"address\":\"${setVMessWSTLSAddress}\",\"port\":${setVMessWSTLSPort},\"users\":[{\"id\":\"${setVMessWSTLSUUID}\",\"security\":\"auto\",\"alterId\":0}]}]}}]" ${configPath}10_ipv4_outbounds.json)
+
+		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+			unInstallRouting VMess-out outboundTag
+
+			local routing
+
+			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"VMess-out\"}]" ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+		else
+			cat <<EOF >${configPath}09_routing.json
+{
+  "routing": {
+    "rules": [
+      {
+        "type": "field",
+        "domain": [
+          "ip.sb",
+          "geosite:${domainList//,/\",\"geosite:}"
+        ],
+        "outboundTag": "VMess-out"
+      }
+    ]
+  }
+}
+EOF
+		fi
+		reloadCore
+		echoContent green " ---> 娣诲姞鍑虹珯瑙i攣鎴愬姛"
+		exit 0
+	fi
+	echoContent red " ---> 鍦板潃涓嶅彲涓虹┖"
+	setVMessWSTLSUnblockStreamingMediaOutbounds
+}
+
+# 璁剧疆浠绘剰闂ㄨВ閿丯etflix銆愬嚭绔欍��
+setDokodemoDoorUnblockStreamingMediaOutbounds() {
+	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋 vps鐨処P:" setIP
+	echoContent red "=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+	echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu\n"
+	read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+
+	if [[ -z ${domainList} ]]; then
+		echoContent red " ---> 鍩熷悕涓嶅彲涓虹┖"
+		setDokodemoDoorUnblockStreamingMediaOutbounds
+	fi
+
+	if [[ -n "${setIP}" ]]; then
+
+		unInstallOutbounds streamingMedia-80
+		unInstallOutbounds streamingMedia-443
+
+		outbounds=$(jq -r ".outbounds += [{\"tag\":\"streamingMedia-80\",\"protocol\":\"freedom\",\"settings\":{\"domainStrategy\":\"AsIs\",\"redirect\":\"${setIP}:22387\"}},{\"tag\":\"streamingMedia-443\",\"protocol\":\"freedom\",\"settings\":{\"domainStrategy\":\"AsIs\",\"redirect\":\"${setIP}:22388\"}}]" ${configPath}10_ipv4_outbounds.json)
+
+		echo "${outbounds}" | jq . >${configPath}10_ipv4_outbounds.json
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+			unInstallRouting streamingMedia-80 outboundTag
+			unInstallRouting streamingMedia-443 outboundTag
+
+			local routing
+
+			routing=$(jq -r ".routing.rules += [{\"type\":\"field\",\"port\":80,\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"streamingMedia-80\"},{\"type\":\"field\",\"port\":443,\"domain\":[\"ip.sb\",\"geosite:${domainList//,/\",\"geosite:}\"],\"outboundTag\":\"streamingMedia-443\"}]" ${configPath}09_routing.json)
+
+			echo "${routing}" | jq . >${configPath}09_routing.json
+		else
+			cat <<EOF >${configPath}09_routing.json
+{
+  "routing": {
+    "domainStrategy": "AsIs",
+    "rules": [
+      {
+        "type": "field",
+        "port": 80,
+        "domain": [
+          "ip.sb",
+          "geosite:${domainList//,/\",\"geosite:}"
+        ],
+        "outboundTag": "streamingMedia-80"
+      },
+      {
+        "type": "field",
+        "port": 443,
+        "domain": [
+          "ip.sb",
+          "geosite:${domainList//,/\",\"geosite:}"
+        ],
+        "outboundTag": "streamingMedia-443"
+      }
+    ]
+  }
+}
+EOF
+		fi
+		reloadCore
+		echoContent green " ---> 娣诲姞鍑虹珯瑙i攣鎴愬姛"
+		exit 0
+	fi
+	echoContent red " ---> ip涓嶅彲涓虹┖"
+}
+
+# 璁剧疆浠绘剰闂ㄨВ閿丯etflix銆愬叆绔欍��
+setDokodemoDoorUnblockStreamingMediaInbounds() {
+
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 浠绘剰闂ㄦ坊鍔犲叆绔�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+	echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+	echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+	echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+	echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+	echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+	echoContent yellow "6.ip褰曞叆绀轰緥:1.1.1.1,1.1.1.2"
+	echoContent yellow "7.涓嬮潰鐨勫煙鍚嶄竴瀹氳鍜屽嚭绔欑殑vps涓�鑷�"
+	#	echoContent yellow "8.濡傛湁闃茬伀澧欒鎵嬪姩寮�鍚�22387銆�22388绔彛"
+	echoContent yellow "8.鍩熷悕褰曞叆绀轰緥:netflix,disney,hulu\n"
+	read -r -p "璇疯緭鍏ュ厑璁歌闂瑙i攣 vps鐨処P:" setIPs
+	if [[ -n "${setIPs}" ]]; then
+		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+		allowPort 22387
+		allowPort 22388
+
+		cat <<EOF >${configPath}01_netflix_inbounds.json
+{
+  "inbounds": [
+    {
+      "listen": "0.0.0.0",
+      "port": 22387,
+      "protocol": "dokodemo-door",
+      "settings": {
+        "address": "0.0.0.0",
+        "port": 80,
+        "network": "tcp",
+        "followRedirect": false
+      },
+      "sniffing": {
+        "enabled": true,
+        "destOverride": [
+          "http"
+        ]
+      },
+      "tag": "streamingMedia-80"
+    },
+    {
+      "listen": "0.0.0.0",
+      "port": 22388,
+      "protocol": "dokodemo-door",
+      "settings": {
+        "address": "0.0.0.0",
+        "port": 443,
+        "network": "tcp",
+        "followRedirect": false
+      },
+      "sniffing": {
+        "enabled": true,
+        "destOverride": [
+          "tls"
+        ]
+      },
+      "tag": "streamingMedia-443"
+    }
+  ]
+}
+EOF
+
+		cat <<EOF >${configPath}10_ipv4_outbounds.json
+{
+    "outbounds":[
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv4"
+            },
+            "tag":"IPv4-out"
+        },
+        {
+            "protocol":"freedom",
+            "settings":{
+                "domainStrategy":"UseIPv6"
+            },
+            "tag":"IPv6-out"
+        },
+        {
+            "protocol":"blackhole",
+            "tag":"blackhole-out"
+        }
+    ]
+}
+EOF
+
+		if [[ -f "${configPath}09_routing.json" ]]; then
+			unInstallRouting streamingMedia-80 inboundTag
+			unInstallRouting streamingMedia-443 inboundTag
+
+			local routing
+			routing=$(jq -r ".routing.rules += [{\"source\":[\"${setIPs//,/\",\"}\"],\"type\":\"field\",\"inboundTag\":[\"streamingMedia-80\",\"streamingMedia-443\"],\"outboundTag\":\"direct\"},{\"domains\":[\"geosite:${domainList//,/\",\"geosite:}\"],\"type\":\"field\",\"inboundTag\":[\"streamingMedia-80\",\"streamingMedia-443\"],\"outboundTag\":\"blackhole-out\"}]" ${configPath}09_routing.json)
+			echo "${routing}" | jq . >${configPath}09_routing.json
+		else
+			cat <<EOF >${configPath}09_routing.json
+            {
+              "routing": {
+                "rules": [
+                  {
+                    "source": [
+                    	"${setIPs//,/\",\"}"
+                    ],
+                    "type": "field",
+                    "inboundTag": [
+                      "streamingMedia-80",
+                      "streamingMedia-443"
+                    ],
+                    "outboundTag": "direct"
+                  },
+                  {
+                    "domains": [
+                    	"geosite:${domainList//,/\",\"geosite:}"
+                    ],
+                    "type": "field",
+                    "inboundTag": [
+                      "streamingMedia-80",
+                      "streamingMedia-443"
+                    ],
+                    "outboundTag": "blackhole-out"
+                  }
+                ]
+              }
+            }
+EOF
+
+		fi
+
+		reloadCore
+		echoContent green " ---> 娣诲姞钀藉湴鏈哄叆绔欒В閿佹垚鍔�"
+		exit 0
+	fi
+	echoContent red " ---> ip涓嶅彲涓虹┖"
+}
+
+# 绉婚櫎浠绘剰闂ㄨВ閿丯etflix
+removeDokodemoDoorUnblockStreamingMedia() {
+
+	unInstallOutbounds streamingMedia-80
+	unInstallOutbounds streamingMedia-443
+
+	unInstallRouting streamingMedia-80 inboundTag
+	unInstallRouting streamingMedia-443 inboundTag
+
+	unInstallRouting streamingMedia-80 outboundTag
+	unInstallRouting streamingMedia-443 outboundTag
+
+	rm -rf ${configPath}01_netflix_inbounds.json
+
+	reloadCore
+	echoContent green " ---> 鍗歌浇鎴愬姛"
+}
+
+# 绉婚櫎VMess+WS+TLS瑙i攣娴佸獟浣�
+removeVMessWSTLSUnblockStreamingMedia() {
+
+	unInstallOutbounds VMess-out
+
+	unInstallRouting VMess-out outboundTag
+
+	reloadCore
+	echoContent green " ---> 鍗歌浇鎴愬姛"
+}
+
+# 閲嶅惎鏍稿績
+reloadCore() {
+	if [[ "${coreInstallType}" == "1" ]]; then
+		handleXray stop
+		handleXray start
+	elif [[ "${coreInstallType}" == "2" || "${coreInstallType}" == "3" ]]; then
+		handleV2Ray stop
+		handleV2Ray start
+	fi
+}
+
+# dns瑙i攣Netflix
+dnsUnlockNetflix() {
+	if [[ -z "${configPath}" ]]; then
+		echoContent red " ---> 鏈畨瑁咃紝璇蜂娇鐢ㄨ剼鏈畨瑁�"
+		menu
+		exit 0
+	fi
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : DNS瑙i攣娴佸獟浣�"
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.娣诲姞"
+	echoContent yellow "2.鍗歌浇"
+	read -r -p "璇烽�夋嫨:" selectType
+
+	case ${selectType} in
+	1)
+		setUnlockDNS
+		;;
+	2)
+		removeUnlockDNS
+		;;
+	esac
+}
+
+# 璁剧疆dns
+setUnlockDNS() {
+	read -r -p "璇疯緭鍏ヨВ閿佹祦濯掍綋DNS:" setDNS
+	if [[ -n ${setDNS} ]]; then
+		echoContent red "=============================================================="
+		echoContent yellow "# 娉ㄦ剰浜嬮」\n"
+		echoContent yellow "1.瑙勫垯浠呮敮鎸侀瀹氫箟鍩熷悕鍒楄〃[https://github.com/v2fly/domain-list-community]"
+		echoContent yellow "2.璇︾粏鏂囨。[https://www.v2fly.org/config/routing.html]"
+		echoContent yellow "3.濡傚唴鏍稿惎鍔ㄥけ璐ヨ妫�鏌ュ煙鍚嶅悗閲嶆柊娣诲姞鍩熷悕"
+		echoContent yellow "4.涓嶅厑璁告湁鐗规畩瀛楃锛屾敞鎰忛�楀彿鐨勬牸寮�"
+		echoContent yellow "5.姣忔娣诲姞閮芥槸閲嶆柊娣诲姞锛屼笉浼氫繚鐣欎笂娆″煙鍚�"
+		echoContent yellow "6.褰曞叆绀轰緥:netflix,disney,hulu"
+		echoContent yellow "7.榛樿鏂规璇疯緭鍏�1锛岄粯璁ゆ柟妗堝寘鎷互涓嬪唴瀹�"
+		echoContent yellow "netflix,bahamut,hulu,hbo,disney,bbc,4chan,fox,abema,dmm,niconico,pixiv,bilibili,viu"
+		read -r -p "璇锋寜鐓т笂闈㈢ず渚嬪綍鍏ュ煙鍚�:" domainList
+		if [[ "${domainList}" == "1" ]]; then
+			cat <<EOF >${configPath}11_dns.json
+            {
+            	"dns": {
+            		"servers": [
+            			{
+            				"address": "${setDNS}",
+            				"port": 53,
+            				"domains": [
+            					"geosite:netflix",
+            					"geosite:bahamut",
+            					"geosite:hulu",
+            					"geosite:hbo",
+            					"geosite:disney",
+            					"geosite:bbc",
+            					"geosite:4chan",
+            					"geosite:fox",
+            					"geosite:abema",
+            					"geosite:dmm",
+            					"geosite:niconico",
+            					"geosite:pixiv",
+            					"geosite:bilibili",
+            					"geosite:viu"
+            				]
+            			},
+            		"localhost"
+            		]
+            	}
+            }
+EOF
+		elif [[ -n "${domainList}" ]]; then
+			cat <<EOF >${configPath}11_dns.json
+                        {
+                        	"dns": {
+                        		"servers": [
+                        			{
+                        				"address": "${setDNS}",
+                        				"port": 53,
+                        				"domains": [
+                        					"geosite:${domainList//,/\",\"geosite:}"
+                        				]
+                        			},
+                        		"localhost"
+                        		]
+                        	}
+                        }
+EOF
+		fi
+
+		reloadCore
+
+		echoContent yellow "\n ---> 濡傝繕鏃犳硶瑙傜湅鍙互灏濊瘯浠ヤ笅涓ょ鏂规"
+		echoContent yellow " 1.閲嶅惎vps"
+		echoContent yellow " 2.鍗歌浇dns瑙i攣鍚庯紝淇敼鏈湴鐨刐/etc/resolv.conf]DNS璁剧疆骞堕噸鍚痸ps\n"
+	else
+		echoContent red " ---> dns涓嶅彲涓虹┖"
+	fi
+	exit 0
+}
+
+# 绉婚櫎Netflix瑙i攣
+removeUnlockDNS() {
+	cat <<EOF >${configPath}11_dns.json
+{
+	"dns": {
+		"servers": [
+			"localhost"
+		]
+	}
+}
+EOF
+	reloadCore
+
+	echoContent green " ---> 鍗歌浇鎴愬姛"
+
+	exit 0
+}
+
+# v2ray-core涓�у寲瀹夎
+customV2RayInstall() {
+	echoContent skyBlue "\n========================涓�у寲瀹夎============================"
+	echoContent yellow "VLESS鍓嶇疆锛岄粯璁ゅ畨瑁�0锛屽鏋滃彧闇�瑕佸畨瑁�0锛屽垯鍙�夋嫨0鍗冲彲"
+	echoContent yellow "0.VLESS+TLS/XTLS+TCP"
+	echoContent yellow "1.VLESS+TLS+WS[CDN]"
+	echoContent yellow "2.Trojan+TLS+gRPC[CDN]"
+	echoContent yellow "3.VMess+TLS+WS[CDN]"
+	echoContent yellow "4.Trojan"
+	echoContent yellow "5.VLESS+TLS+gRPC[CDN]"
+	read -r -p "璇烽�夋嫨[澶氶�塢锛孾渚嬪:123]:" selectCustomInstallType
+	echoContent skyBlue "--------------------------------------------------------------"
+	if [[ -z ${selectCustomInstallType} ]]; then
+		selectCustomInstallType=0
+	fi
+	if [[ "${selectCustomInstallType}" =~ ^[0-5]+$ ]]; then
+		cleanUp xrayClean
+		totalProgress=17
+		installTools 1
+		# 鐢宠tls
+		initTLSNginxConfig 2
+		installTLS 3
+		handleNginx stop
+		# 闅忔満path
+		if echo ${selectCustomInstallType} | grep -q 1 || echo ${selectCustomInstallType} | grep -q 3 || echo ${selectCustomInstallType} | grep -q 4; then
+			randomPathFunction 5
+			customCDNIP 6
+		fi
+		nginxBlog 7
+		updateRedirectNginxConf
+		handleNginx start
+
+		# 瀹夎V2Ray
+		installV2Ray 8
+		installV2RayService 9
+		initV2RayConfig custom 10
+		cleanUp xrayDel
+		installCronTLS 14
+		handleV2Ray stop
+		handleV2Ray start
+		# 鐢熸垚璐﹀彿
+		checkGFWStatue 15
+		showAccounts 16
+	else
+		echoContent red " ---> 杈撳叆涓嶅悎娉�"
+		customV2RayInstall
+	fi
+}
+
+# Xray-core涓�у寲瀹夎
+customXrayInstall() {
+	echoContent skyBlue "\n========================涓�у寲瀹夎============================"
+	echoContent yellow "VLESS鍓嶇疆锛岄粯璁ゅ畨瑁�0锛屽鏋滃彧闇�瑕佸畨瑁�0锛屽垯鍙�夋嫨0鍗冲彲"
+	echoContent yellow "0.VLESS+TLS/XTLS+TCP"
+	echoContent yellow "1.VLESS+TLS+WS[CDN]"
+	echoContent yellow "2.Trojan+TLS+gRPC[CDN]"
+	echoContent yellow "3.VMess+TLS+WS[CDN]"
+	echoContent yellow "4.Trojan"
+	echoContent yellow "5.VLESS+TLS+gRPC[CDN]"
+	read -r -p "璇烽�夋嫨[澶氶�塢锛孾渚嬪:123]:" selectCustomInstallType
+	echoContent skyBlue "--------------------------------------------------------------"
+	if [[ -z ${selectCustomInstallType} ]]; then
+		echoContent red " ---> 涓嶅彲涓虹┖"
+		customXrayInstall
+	elif [[ "${selectCustomInstallType}" =~ ^[0-5]+$ ]]; then
+		cleanUp v2rayClean
+		totalProgress=17
+		installTools 1
+		# 鐢宠tls
+		initTLSNginxConfig 2
+		installTLS 3
+		handleNginx stop
+		# 闅忔満path
+		if echo "${selectCustomInstallType}" | grep -q 1 || echo "${selectCustomInstallType}" | grep -q 2 || echo "${selectCustomInstallType}" | grep -q 3 || echo "${selectCustomInstallType}" | grep -q 5; then
+			randomPathFunction 5
+			customCDNIP 6
+		fi
+		nginxBlog 7
+		updateRedirectNginxConf
+		handleNginx start
+
+		# 瀹夎V2Ray
+		installXray 8
+		installXrayService 9
+		initXrayConfig custom 10
+		cleanUp v2rayDel
+
+		installCronTLS 14
+		handleXray stop
+		handleXray start
+		# 鐢熸垚璐﹀彿
+		checkGFWStatue 15
+		showAccounts 16
+	else
+		echoContent red " ---> 杈撳叆涓嶅悎娉�"
+		customXrayInstall
+	fi
+}
+
+# 閫夋嫨鏍稿績瀹夎---v2ray-core銆亁ray-core
+selectCoreInstall() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 閫夋嫨鏍稿績瀹夎"
+	echoContent red "\n=============================================================="
+	echoContent yellow "1.Xray-core"
+	echoContent yellow "2.v2ray-core"
+	echoContent red "=============================================================="
+	read -r -p "璇烽�夋嫨:" selectCoreType
+	case ${selectCoreType} in
+	1)
+		if [[ "${selectInstallType}" == "2" ]]; then
+			customXrayInstall
+		else
+			xrayCoreInstall
+		fi
+		;;
+	2)
+		v2rayCoreVersion=
+		if [[ "${selectInstallType}" == "2" ]]; then
+			customV2RayInstall
+		else
+			v2rayCoreInstall
+		fi
+		;;
+	3)
+		v2rayCoreVersion=v4.32.1
+		if [[ "${selectInstallType}" == "2" ]]; then
+			customV2RayInstall
+		else
+			v2rayCoreInstall
+		fi
+		;;
+	*)
+		echoContent red ' ---> 閫夋嫨閿欒锛岄噸鏂伴�夋嫨'
+		selectCoreInstall
+		;;
+	esac
+}
+
+# v2ray-core 瀹夎
+v2rayCoreInstall() {
+	cleanUp xrayClean
+	selectCustomInstallType=
+	totalProgress=13
+	installTools 2
+	# 鐢宠tls
+	initTLSNginxConfig 3
+	installTLS 4
+	handleNginx stop
+	#	initNginxConfig 5
+	randomPathFunction 5
+	# 瀹夎V2Ray
+	installV2Ray 6
+	installV2RayService 7
+	customCDNIP 8
+	initV2RayConfig all 9
+	cleanUp xrayDel
+	installCronTLS 10
+	nginxBlog 11
+	updateRedirectNginxConf
+	handleV2Ray stop
+	sleep 2
+	handleV2Ray start
+	handleNginx start
+	# 鐢熸垚璐﹀彿
+	checkGFWStatue 12
+	showAccounts 13
+}
+
+# xray-core 瀹夎
+xrayCoreInstall() {
+	cleanUp v2rayClean
+	selectCustomInstallType=
+	totalProgress=13
+	installTools 2
+	# 鐢宠tls
+	initTLSNginxConfig 3
+	installTLS 4
+	handleNginx stop
+	randomPathFunction 5
+	# 瀹夎Xray
+	# handleV2Ray stop
+	installXray 6
+	installXrayService 7
+	customCDNIP 8
+	initXrayConfig all 9
+	cleanUp v2rayDel
+	installCronTLS 10
+	nginxBlog 11
+	updateRedirectNginxConf
+	handleXray stop
+	sleep 2
+	handleXray start
+
+	handleNginx start
+	# 鐢熸垚璐﹀彿
+	checkGFWStatue 12
+	showAccounts 13
+}
+
+# 鏍稿績绠$悊
+coreVersionManageMenu() {
+
+	if [[ -z "${coreInstallType}" ]]; then
+		echoContent red "\n ---> 娌℃湁妫�娴嬪埌瀹夎鐩綍锛岃鎵ц鑴氭湰瀹夎鍐呭"
+		menu
+		exit 0
+	fi
+	if [[ "${coreInstallType}" == "1" ]]; then
+		xrayVersionManageMenu 1
+	elif [[ "${coreInstallType}" == "2" ]]; then
+		v2rayCoreVersion=
+		v2rayVersionManageMenu 1
+
+	elif [[ "${coreInstallType}" == "3" ]]; then
+		v2rayCoreVersion=v4.32.1
+		v2rayVersionManageMenu 1
+	fi
+}
+# 瀹氭椂浠诲姟妫�鏌ヨ瘉涔�
+cronRenewTLS() {
+	if [[ "${renewTLS}" == "RenewTLS" ]]; then
+		renewalTLS
+		exit 0
+	fi
+}
+# 璐﹀彿绠$悊
+manageAccount() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 璐﹀彿绠$悊"
+	echoContent red "\n=============================================================="
+	echoContent yellow "# 姣忔鍒犻櫎銆佹坊鍔犺处鍙峰悗锛岄渶瑕侀噸鏂版煡鐪嬭闃呯敓鎴愯闃匼n"
+	echoContent yellow "1.鏌ョ湅璐﹀彿"
+	echoContent yellow "2.鏌ョ湅璁㈤槄"
+	echoContent yellow "3.娣诲姞鐢ㄦ埛"
+	echoContent yellow "4.鍒犻櫎鐢ㄦ埛"
+	echoContent red "=============================================================="
+	read -r -p "璇疯緭鍏�:" manageAccountStatus
+	if [[ "${manageAccountStatus}" == "1" ]]; then
+		showAccounts 1
+	elif [[ "${manageAccountStatus}" == "2" ]]; then
+		subscribe 1
+	elif [[ "${manageAccountStatus}" == "3" ]]; then
+		addUser
+	elif [[ "${manageAccountStatus}" == "4" ]]; then
+		removeUser
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+	fi
+}
+
+# 璁㈤槄
+subscribe() {
+	if [[ -n "${configPath}" ]]; then
+		echoContent skyBlue "-------------------------澶囨敞---------------------------------"
+		echoContent yellow "# 鏌ョ湅璁㈤槄鏃朵細閲嶆柊鐢熸垚璁㈤槄"
+		echoContent yellow "# 姣忔娣诲姞銆佸垹闄よ处鍙烽渶瑕侀噸鏂版煡鐪嬭闃�"
+		rm -rf /etc/v2ray-agent/subscribe/*
+		rm -rf /etc/v2ray-agent/subscribe_tmp/*
+		showAccounts >/dev/null
+		mv /etc/v2ray-agent/subscribe_tmp/* /etc/v2ray-agent/subscribe/
+
+		if [[ -n $(ls /etc/v2ray-agent/subscribe/) ]]; then
+			find /etc/v2ray-agent/subscribe/* | while read -r email; do
+				email=$(echo "${email}" | awk -F "[b][e][/]" '{print $2}')
+
+				local base64Result
+				base64Result=$(base64 -w 0 "/etc/v2ray-agent/subscribe/${email}")
+				echo "${base64Result}" >"/etc/v2ray-agent/subscribe/${email}"
+				echoContent skyBlue "--------------------------------------------------------------"
+				echoContent yellow "email:${email}\n"
+				local currentDomain=${currentHost}
+
+				if [[ -n "${currentDefaultPort}" && "${currentDefaultPort}" != "443" ]]; then
+					currentDomain="${currentHost}:${currentDefaultPort}"
+				fi
+
+				echoContent yellow "url:https://${currentDomain}/s/${email}\n"
+				echoContent yellow "鍦ㄧ嚎浜岀淮鐮�:https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=https://${currentDomain}/s/${email}\n"
+				echo "https://${currentDomain}/s/${email}" | qrencode -s 10 -m 1 -t UTF8
+				echoContent skyBlue "--------------------------------------------------------------"
+			done
+		fi
+	else
+		echoContent red " ---> 鏈畨瑁�"
+	fi
+}
+
+# 鍒囨崲alpn
+switchAlpn() {
+	echoContent skyBlue "\n鍔熻兘 1/${totalProgress} : 鍒囨崲alpn"
+	if [[ -z ${currentAlpn} ]]; then
+		echoContent red " ---> 鏃犳硶璇诲彇alpn锛岃妫�鏌ユ槸鍚﹀畨瑁�"
+		exit 0
+	fi
+
+	echoContent red "\n=============================================================="
+	echoContent green "褰撳墠alpn棣栦綅涓�:${currentAlpn}"
+	echoContent yellow "  1.褰揾ttp/1.1棣栦綅鏃讹紝trojan鍙敤锛実RPC閮ㄥ垎瀹㈡埛绔彲鐢ㄣ�愬鎴风鏀寔鎵嬪姩閫夋嫨alpn鐨勫彲鐢ㄣ��"
+	echoContent yellow "  2.褰揾2棣栦綅鏃讹紝gRPC鍙敤锛宼rojan閮ㄥ垎瀹㈡埛绔彲鐢ㄣ�愬鎴风鏀寔鎵嬪姩閫夋嫨alpn鐨勫彲鐢ㄣ��"
+	echoContent yellow "  3.濡傚鎴风涓嶆敮鎸佹墜鍔ㄦ洿鎹lpn锛屽缓璁娇鐢ㄦ鍔熻兘鏇存敼鏈嶅姟绔痑lpn椤哄簭锛屾潵浣跨敤鐩稿簲鐨勫崗璁�"
+	echoContent red "=============================================================="
+
+	if [[ "${currentAlpn}" == "http/1.1" ]]; then
+		echoContent yellow "1.鍒囨崲alpn h2 棣栦綅"
+	elif [[ "${currentAlpn}" == "h2" ]]; then
+		echoContent yellow "1.鍒囨崲alpn http/1.1 棣栦綅"
+	else
+		echoContent red '涓嶇鍚�'
+	fi
+
+	echoContent red "=============================================================="
+
+	read -r -p "璇烽�夋嫨:" selectSwitchAlpnType
+	if [[ "${selectSwitchAlpnType}" == "1" && "${currentAlpn}" == "http/1.1" ]]; then
+
+		local frontingTypeJSON
+		frontingTypeJSON=$(jq -r ".inbounds[0].streamSettings.xtlsSettings.alpn = [\"h2\",\"http/1.1\"]" ${configPath}${frontingType}.json)
+		echo "${frontingTypeJSON}" | jq . >${configPath}${frontingType}.json
+
+	elif [[ "${selectSwitchAlpnType}" == "1" && "${currentAlpn}" == "h2" ]]; then
+		local frontingTypeJSON
+		frontingTypeJSON=$(jq -r ".inbounds[0].streamSettings.xtlsSettings.alpn =[\"http/1.1\",\"h2\"]" ${configPath}${frontingType}.json)
+		echo "${frontingTypeJSON}" | jq . >${configPath}${frontingType}.json
+	else
+		echoContent red " ---> 閫夋嫨閿欒"
+		exit 0
+	fi
+	reloadCore
+}
+# 涓昏彍鍗�
+menu() {
+	cd "$HOME" || exit
+	echoContent red "\n=============================================================="
+	echoContent green "浣滆��:mack-a"
+	echoContent green "褰撳墠鐗堟湰:v2.5.72"
+	echoContent green "Github:https://github.com/mack-a/v2ray-agent"
+	echoContent green "鎻忚堪:鍏悎涓�鍏卞瓨鑴氭湰\c"
+	showInstallStatus
+	echoContent red "\n=============================================================="
+	echoContent red "                        鎺ㄥ箍鍖�                      "
+	echoContent green "AFF鎹愯禒锛歨ttps://github.com/mack-a/v2ray-agent/blob/master/documents/donation_aff.md\n"
+	echoContent green "铏氭嫙甯佹崘璧狅細0xB08b731653515b083deE362fefFc45d5eb96c35d\n"
+	echoContent green "鎺ㄥ箍鍙仈绯籘G锛歨ttps://t.me/mackaff"
+	echoContent red "=============================================================="
+	if [[ -n "${coreInstallType}" ]]; then
+		echoContent yellow "1.閲嶆柊瀹夎"
+	else
+		echoContent yellow "1.瀹夎"
+	fi
+
+	echoContent yellow "2.浠绘剰缁勫悎瀹夎"
+	if echo ${currentInstallProtocolType} | grep -q trojan; then
+		echoContent yellow "3.鍒囨崲VLESS[XTLS]"
+	elif echo ${currentInstallProtocolType} | grep -q 0; then
+		echoContent yellow "3.鍒囨崲Trojan[XTLS]"
+	fi
+
+	echoContent skyBlue "-------------------------宸ュ叿绠$悊-----------------------------"
+	echoContent yellow "4.璐﹀彿绠$悊"
+	echoContent yellow "5.鏇存崲浼绔�"
+	echoContent yellow "6.鏇存柊璇佷功"
+	echoContent yellow "7.鏇存崲CDN鑺傜偣"
+	echoContent yellow "8.IPv6鍒嗘祦"
+	echoContent yellow "9.WARP鍒嗘祦"
+	echoContent yellow "10.娴佸獟浣撳伐鍏�"
+	echoContent yellow "11.娣诲姞鏂扮鍙�"
+	echoContent yellow "12.BT涓嬭浇绠$悊"
+	echoContent yellow "13.鍒囨崲alpn"
+	echoContent yellow "14.鍩熷悕榛戝悕鍗�"
+	echoContent skyBlue "-------------------------鐗堟湰绠$悊-----------------------------"
+	echoContent yellow "15.core绠$悊"
+	echoContent yellow "16.鏇存柊鑴氭湰"
+	echoContent yellow "17.瀹夎BBR銆丏D鑴氭湰"
+	echoContent skyBlue "-------------------------鑴氭湰绠$悊-----------------------------"
+	echoContent yellow "18.鏌ョ湅鏃ュ織"
+	echoContent yellow "19.鍗歌浇鑴氭湰"
+	echoContent red "=============================================================="
+	mkdirTools
+	aliasInstall
+	read -r -p "璇烽�夋嫨:" selectInstallType
+	case ${selectInstallType} in
+	1)
+		selectCoreInstall
+		;;
+	2)
+		selectCoreInstall
+		;;
+	3)
+		initXrayFrontingConfig 1
+		;;
+	4)
+		manageAccount 1
+		;;
+	5)
+		updateNginxBlog 1
+		;;
+	6)
+		renewalTLS 1
+		;;
+	7)
+		updateV2RayCDN 1
+		;;
+	8)
+		ipv6Routing 1
+		;;
+	9)
+		warpRouting 1
+		;;
+	10)
+		streamingToolbox 1
+		;;
+	11)
+		addCorePort 1
+		;;
+	12)
+		btTools 1
+		;;
+	13)
+		switchAlpn 1
+		;;
+	14)
+		blacklist 1
+		;;
+	15)
+		coreVersionManageMenu 1
+		;;
+	16)
+		updateV2RayAgent 1
+		;;
+	17)
+		bbrInstall
+		;;
+	18)
+		checkLog 1
+		;;
+	19)
+		unInstall 1
+		;;
+	esac
+}
+cronRenewTLS
+menu

--
Gitblit v1.9.1